hkl-5.0.0.2449/0000755000175000017500000000000013237020571013113 5ustar00piccapicca00000000000000hkl-5.0.0.2449/gui/0000755000175000017500000000000013237020543013676 5ustar00piccapicca00000000000000hkl-5.0.0.2449/gui/ghkl.ui0000644000175000017500000054332212710332473015176 0ustar00piccapicca00000000000000 -100 100 1 1 10 -180 180 1 1 10 -180 180 1 1 10 -180 180 1 1 10 -180 180 1 1 10 -180 180 1 1 10 -180 180 1 1 10 -180 180 1 1 10 -180 180 1 1 10 -180 180 1 1 10 -180 180 1 1 10 -100 100 1 1 10 -180 180 1 1 10 -180 180 1 1 10 -180 180 1 1 10 -180 180 1 1 10 100 1 1 10 100 1 1 10 100 1 1 10 100 1 1 10 100 1 1 10 100 1 1 10 -100 100 -3 1 10 100 1 10 100 1 10 -180 180 1 10 -180 180 1 10 -180 180 1 10 -100 100 1 10 -100 100 1 10 -100 100 1 10 -100 100 1 10 -100 100 1 10 100 1 1 10 -100 100 1 10 -100 100 1 10 -100 100 1 10 -100 100 1 10 10000 1 1 10 -180 180 6 1 10 -180 180 1 1 10 -180 180 1 1 10 -180 180 1 1 10 True False gHKL True False True False False True False _Fichier True True False gtk-new False True False True True gtk-open False True False True True gtk-save False True False True True gtk-save-as False True False True True True False gtk-quit False True False True True False True False É_dition True True False gtk-cut False True False True True gtk-copy False True False True True gtk-paste False True False True True gtk-delete False True False True True gtk-preferences False True False True True False True False _Affichage True False True False Aid_e True True False gtk-about False True False True True False True 0 True False True False True False True False 0 none True False 12 True False liststore_diffractometer Diffractometer Type 0 True False <b>Diffractometer</b> True False True 0 True False 0 none True False 12 True False True True adjustment4 1 3 True False <b>Wave length</b> True False True 1 False False 1 True False 0 none True False 6 6 12 True True liststore_axis True name 1 read True 2 write 3 min True 4 max True 5 True False <b>Axes</b> True False False 2 True False 0 none True False 6 6 12 True True liststore_pseudo_axes True name 2 read 3 write True 4 True False <b>PseudoAxes</b> True False False 3 True False 0 none True False 12 True False 2 True True True False True 0 True False <b>Solutions</b> True True True 4 False False True True True True False 6 6 True False both False True False False gtk-add False True False True False False gtk-copy False True False True False False gtk-delete False True True False False False True False False set UB True gtk-preferences False True False True False False Compute UB True gtk-execute False True False True False False Refine True gtk-execute False True False False 0 True True never in True True liststore_crystals name True 1 a 2 b 3 c 4 alpha 5 beta 6 gamma 7 True True 1 True True True False True False 0 none True False 12 True False 4 4 3 3 True False 0 label37 True 3 4 2 3 GTK_FILL True False 0 label34 True 3 4 1 2 GTK_FILL True False <b>z</b> True 3 4 True False <b>x</b> True 1 2 True False 0 label40 True 3 4 3 4 GTK_FILL True False 0 label39 True 2 3 3 4 GTK_FILL True False 0 label38 True 1 2 3 4 GTK_FILL True False <b>y</b> True 2 3 True False 0 label36 True 2 3 2 3 GTK_FILL True False 0 label35 True 1 2 2 3 GTK_FILL True False 0 label33 True 2 3 1 2 GTK_FILL True False 0 label32 True 1 2 1 2 GTK_FILL True False <b>a*</b> True 1 2 True False <b>b*</b> True 2 3 True False <b>c*</b> True 3 4 True False <b>UB</b> True True True 0 True False 10 4 True True adjustment6 1 3 True if-valid 1 2 1 2 True True adjustment7 1 3 True if-valid 1 2 2 3 True True adjustment8 1 3 True if-valid 1 2 3 4 True True adjustment9 1 3 True if-valid 1 2 4 5 True True adjustment10 1 3 True if-valid 1 2 5 6 True True adjustment11 1 3 True if-valid 1 2 6 7 True False 0 Values center 1 2 True False 0 Minimum center 2 3 True False 0 Maximum center 3 4 True True adjustment12 1 3 True if-valid 2 3 1 2 True True adjustment13 1 3 True if-valid 2 3 2 3 True True adjustment14 1 3 True if-valid 2 3 3 4 True True adjustment15 1 3 True if-valid 2 3 4 5 True True adjustment16 1 3 True if-valid 2 3 5 6 True True adjustment17 1 3 True if-valid 2 3 6 7 True True adjustment18 1 3 True if-valid 3 4 1 2 True True adjustment19 1 3 True if-valid 3 4 2 3 True True adjustment20 1 3 True if-valid 3 4 3 4 True True adjustment21 1 3 True if-valid 3 4 4 5 True True adjustment22 1 3 True if-valid 3 4 5 6 True True adjustment23 1 3 True if-valid 3 4 6 7 a False True True False False True 0.5 True 1 2 GTK_FILL b False True True False False True 0.5 True 2 3 GTK_FILL c False True True False False True 0.5 True 3 4 GTK_FILL alpha False True True False False True 0.5 True 4 5 GTK_FILL beta False True True False False True 0.5 True 5 6 GTK_FILL gamma False True True False False True 0.5 True 6 7 GTK_FILL True True adjustment32 3 True 1 2 7 8 True True adjustment33 3 True 1 2 8 9 True True adjustment34 3 True 1 2 9 10 Ux False True True False False True 0.5 True 7 8 GTK_FILL Uy False True True False False True 0.5 True 8 9 GTK_FILL Uz False True True False False True 0.5 True 9 10 GTK_FILL True True 1 True False gtk-apply False True True True False True False False 0 True True 2 True False True False 3 3 True True True adjustment35 4 True True True adjustment36 4 1 2 True True True adjustment37 4 2 3 True True True adjustment38 4 1 2 True True True adjustment39 4 1 2 1 2 True True True adjustment40 4 2 3 1 2 True True True adjustment41 4 2 3 True True True adjustment42 4 1 2 2 3 True True True adjustment43 4 2 3 2 3 True True 1 True True 3 False True False Parameters False True False 4 3 3 3 True False 0 a* GTK_FILL True False 0 b* 1 2 GTK_FILL True False 0 c* 2 3 GTK_FILL True False 0 alpha* 2 3 GTK_FILL True False 0 beta* 1 2 2 3 GTK_FILL True False 0 gamma* 2 3 2 3 GTK_FILL True False True adjustment24 1 3 True 1 2 True False True adjustment25 1 3 True 2 3 1 2 True False True adjustment26 1 3 True 3 4 True False True adjustment27 1 3 True 1 2 3 4 True False True adjustment28 1 3 True 2 3 3 4 True False True adjustment29 1 3 True 1 2 1 2 2 True False extra 1 False True False 3 True False both False True False False gtk-add False True False True False False gtk-jump-to False True False True False False gtk-delete False True True False False False False 0 True True never in True True liststore_reflections False True multiple index 0 h True 1 k True 2 l True 3 flag 4 True True 1 2 True False reflections 2 False True True True True 2 True False 1 crystals False True True in True False True False True False 1 True False pseudo axes 1 False True False 2 True False 3D 2 False True True True True 1 True False False False 2 hkl-5.0.0.2449/gui/hkl-gui.c0000644000175000017500000020421413237017527015415 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include #include #include #include #include #include #include #include #include #include "hkl.h" #include "hkl-gui.h" #include "hkl-gui-macros.h" #if HKL3D # include # include "hkl-gui-3d.h" #endif #include "hkl-gui-pseudoaxes.h" #define HKL_GUI_TYPE_WINDOW (hkl_gui_window_get_type ()) #define HKL_GUI_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HKL_GUI_TYPE_WINDOW, HklGuiWindow)) #define HKL_GUI_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), HKL_GUI_TYPE_WINDOW, HklGuiWindowClass)) #define HKL_GUI_IS_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), HKL_GUI_TYPE_WINDOW)) #define HKL_GUI_IS_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), HKL_GUI_TYPE_WINDOW)) #define HKL_GUI_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), HKL_GUI_TYPE_WINDOW, HklGuiWindowClass)) #define EMBED_BREAKPOINT asm volatile ("int3;") G_DEFINE_TYPE (HklGuiWindow, hkl_gui_window, G_TYPE_OBJECT); typedef enum { REFLECTION_COL_INDEX = 0, REFLECTION_COL_H, REFLECTION_COL_K, REFLECTION_COL_L, REFLECTION_COL_FLAG, REFLECTION_COL_REFLECTION, REFLECTION_COL_N_COLUMNS } ReflectionCol; typedef enum { AXIS_COL_AXIS = 0, AXIS_COL_NAME, AXIS_COL_READ, AXIS_COL_WRITE, AXIS_COL_MIN, AXIS_COL_MAX, AXIS_COL_N_COLUMNS } AxisCol; typedef enum { PSEUDO_AXIS_COL_IDX = 0, PSEUDO_AXIS_COL_ENGINE, PSEUDO_AXIS_COL_NAME, PSEUDO_AXIS_COL_READ, PSEUDO_AXIS_COL_WRITE, PSEUDO_AXIS_COL_N_COLUMNS } PseudoAxisCol; typedef enum { PARAMETER_COL_PARAMETER = 0, PARAMETER_COL_NAME, PARAMETER_COL_VALUE, PARAMETER_COL_N_COLUMNS } ParameterCol; typedef enum { SAMPLE_COL_SAMPLE = 0, SAMPLE_COL_NAME, SAMPLE_COL_A, SAMPLE_COL_B, SAMPLE_COL_C, SAMPLE_COL_ALPHA, SAMPLE_COL_BETA, SAMPLE_COL_GAMMA, SAMPLE_COL_N_COLUMNS } SampleCol; typedef enum { SOLUTION_COL_INDEX = 0, SOLUTION_COL_HKL_GEOMETRY_LIST_ITEM, SOLUTION_COL_N_COLUMNS } SolutionCol; typedef enum { DIFFRACTOMETER_COL_NAME = 0, DIFFRACTOMETER_COL_FACTORY, DIFFRACTOMETER_COL_DIFFRACTOMETER, DIFFRACTOMETER_COL_N_COLUMNS } DiffractometerCol; /******************/ /* Diffractometer */ /******************/ struct diffractometer_t { HklFactory *factory; HklGeometry *geometry; HklDetector *detector; HklEngineList *engines; HklGeometryList *solutions; }; static struct diffractometer_t * create_diffractometer(HklFactory *factory) { struct diffractometer_t *self; self = malloc(sizeof(*self)); self->factory = factory; self->geometry = hkl_factory_create_new_geometry (factory); self->engines = hkl_factory_create_new_engine_list (factory); self->detector = hkl_detector_factory_new (HKL_DETECTOR_TYPE_0D); self->solutions = NULL; return self; } static void delete_diffractometer(struct diffractometer_t *self) { hkl_geometry_free(self->geometry); hkl_engine_list_free(self->engines); hkl_detector_free(self->detector); if(self->solutions) hkl_geometry_list_free(self->solutions); } static void diffractometer_set_sample(struct diffractometer_t *self, HklSample *sample) { hkl_engine_list_init(self->engines, self->geometry, self->detector, sample); hkl_engine_list_get(self->engines); } static void diffractometer_set_wavelength(struct diffractometer_t *self, double wavelength) { if(hkl_geometry_wavelength_set(self->geometry, wavelength, HKL_UNIT_USER, NULL)) hkl_engine_list_get(self->engines); } static gboolean diffractometer_set_solutions(struct diffractometer_t *self, HklGeometryList *solutions) { if(solutions){ if(self->solutions) hkl_geometry_list_free(self->solutions); self->solutions = solutions; } return NULL != solutions; } static gboolean diffractometer_pseudo_axis_values_set(struct diffractometer_t *self, HklEngine *engine, gdouble values[], guint n_values, GError **error) { HklGeometryList *solutions; solutions = hkl_engine_pseudo_axis_values_set(engine, values, n_values, HKL_UNIT_USER, error); return diffractometer_set_solutions(self, solutions); } static void diffractometer_set_solution(struct diffractometer_t *self, const HklGeometryListItem *item) { hkl_engine_list_select_solution(self->engines, item); } /****************/ /* HklGuiWindow */ /****************/ struct _HklGuiWindowPrivate { GtkBuilder* builder; GtkLabel* label_UB11; GtkLabel* label_UB12; GtkLabel* label_UB13; GtkLabel* label_UB21; GtkLabel* label_UB22; GtkLabel* label_UB23; GtkLabel* label_UB31; GtkLabel* label_UB32; GtkLabel* label_UB33; GtkButton* button2; GtkSpinButton* spinbutton_a; GtkSpinButton* spinbutton_b; GtkSpinButton* spinbutton_c; GtkSpinButton* spinbutton_alpha; GtkSpinButton* spinbutton_beta; GtkSpinButton* spinbutton_gamma; GtkSpinButton* spinbutton_a_min; GtkSpinButton* spinbutton_b_min; GtkSpinButton* spinbutton_c_min; GtkSpinButton* spinbutton_alpha_min; GtkSpinButton* spinbutton_beta_min; GtkSpinButton* spinbutton_gamma_min; GtkSpinButton* spinbutton_a_max; GtkSpinButton* spinbutton_b_max; GtkSpinButton* spinbutton_c_max; GtkSpinButton* spinbutton_alpha_max; GtkSpinButton* spinbutton_beta_max; GtkSpinButton* spinbutton_gamma_max; GtkSpinButton* spinbutton_lambda; GtkSpinButton* spinbutton_a_star; GtkSpinButton* spinbutton_b_star; GtkSpinButton* spinbutton_c_star; GtkSpinButton* spinbutton_alpha_star; GtkSpinButton* spinbutton_beta_star; GtkSpinButton* spinbutton_gamma_star; GtkSpinButton* spinbutton_ux; GtkSpinButton* spinbutton_uy; GtkSpinButton* spinbutton_uz; GtkSpinButton* spinbutton_U11; GtkSpinButton* spinbutton_U12; GtkSpinButton* spinbutton_U13; GtkSpinButton* spinbutton_U21; GtkSpinButton* spinbutton_U22; GtkSpinButton* spinbutton_U23; GtkSpinButton* spinbutton_U31; GtkSpinButton* spinbutton_U32; GtkSpinButton* spinbutton_U33; GtkCheckButton* checkbutton_a; GtkCheckButton* checkbutton_b; GtkCheckButton* checkbutton_c; GtkCheckButton* checkbutton_alpha; GtkCheckButton* checkbutton_beta; GtkCheckButton* checkbutton_gamma; GtkCheckButton* checkbutton_ux; GtkCheckButton* checkbutton_uy; GtkCheckButton* checkbutton_uz; GtkTreeView* treeview_reflections; GtkTreeView* treeview_crystals; GtkTreeView* treeview_axes; GtkTreeView* treeview_pseudo_axes; GtkTreeView* treeview_solutions; GtkToolButton* toolbutton_add_reflection; GtkToolButton* toolbutton_goto_reflection; GtkToolButton* toolbutton_del_reflection; GtkToolButton* toolbutton_setUB; GtkToolButton* toolbutton_computeUB; GtkToolButton* toolbutton_add_crystal; GtkToolButton* toolbutton_copy_crystal; GtkToolButton* toolbutton_del_crystal; GtkToolButton* toolbutton_affiner; GtkStatusbar* statusbar; GtkImageMenuItem* menuitem5; GtkVBox* box_info_bar; /* fake for the infor bar */ GtkVBox* vbox7; GtkVBox* vbox2; GtkDialog* dialog1; GtkButton* button1; GtkComboBox* combobox1; GtkListStore* liststore_diffractometer; GtkListStore* liststore_axis; GtkListStore* liststore_pseudo_axes; GtkListStore* liststore_solutions; GtkListStore* liststore_reflections; GtkListStore* liststore_crystals; GtkInfoBar *info_bar; GtkLabel *info_message; darray(HklGuiEngine *) pseudo_frames; #if HKL3D HklGui3D *frame3d; #endif struct diffractometer_t *diffractometer; /* unowned */ HklSample *sample; /* unowned */ HklLattice *reciprocal; }; #define HKL_GUI_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), HKL_GUI_TYPE_WINDOW, HklGuiWindowPrivate)) static gboolean finalize_liststore_diffractometer(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { struct diffractometer_t *diffractometer; gtk_tree_model_get(model, iter, DIFFRACTOMETER_COL_DIFFRACTOMETER, &diffractometer, -1); delete_diffractometer(diffractometer); return FALSE; } static gboolean finalize_liststore_samples(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { HklSample *sample = NULL; gtk_tree_model_get(model, iter, SAMPLE_COL_SAMPLE, &sample, -1); hkl_sample_free(sample); return FALSE; } static void finalize (GObject* object) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(object); g_object_unref(priv->builder); darray_free(priv->pseudo_frames); gtk_tree_model_foreach(GTK_TREE_MODEL(priv->liststore_diffractometer), finalize_liststore_diffractometer, NULL); gtk_tree_model_foreach(GTK_TREE_MODEL(priv->liststore_crystals), finalize_liststore_samples, NULL); G_OBJECT_CLASS (hkl_gui_window_parent_class)->finalize (object); } HklGuiWindow* hkl_gui_window_new (void) { return g_object_new (HKL_GUI_TYPE_WINDOW, NULL); } static void hkl_gui_window_get_widgets_and_objects_from_ui (HklGuiWindow* self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); GtkBuilder* builder; g_return_if_fail (self != NULL); priv->builder = builder = gtk_builder_new (); get_ui(builder, "ghkl.ui"); get_object(builder, GTK_LIST_STORE, priv, liststore_diffractometer); get_object(builder, GTK_LIST_STORE, priv, liststore_axis); get_object(builder, GTK_LIST_STORE, priv, liststore_pseudo_axes); get_object(builder, GTK_LIST_STORE, priv, liststore_reflections); get_object(builder, GTK_LIST_STORE, priv, liststore_crystals); get_object(builder, GTK_LABEL, priv, label_UB11); get_object(builder, GTK_LABEL, priv, label_UB12); get_object(builder, GTK_LABEL, priv, label_UB13); get_object(builder, GTK_LABEL, priv, label_UB21); get_object(builder, GTK_LABEL, priv, label_UB22); get_object(builder, GTK_LABEL, priv, label_UB23); get_object(builder, GTK_LABEL, priv, label_UB31); get_object(builder, GTK_LABEL, priv, label_UB32); get_object(builder, GTK_LABEL, priv, label_UB33); get_object(builder, GTK_BUTTON, priv, button2); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_a); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_a_min); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_a_max); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_a_star); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_b); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_b_min); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_b_max); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_b_star); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_c); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_c_min); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_c_max); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_c_star); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_alpha); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_alpha_min); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_alpha_max); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_alpha_star); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_beta); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_beta_min); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_beta_max); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_beta_star); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_gamma); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_gamma_min); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_gamma_max); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_gamma_star); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_lambda); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_ux); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_uy); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_uz); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_U11); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_U12); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_U13); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_U21); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_U22); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_U23); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_U31); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_U32); get_object(builder, GTK_SPIN_BUTTON, priv, spinbutton_U33); get_object(builder, GTK_CHECK_BUTTON, priv, checkbutton_a); get_object(builder, GTK_CHECK_BUTTON, priv, checkbutton_b); get_object(builder, GTK_CHECK_BUTTON, priv, checkbutton_c); get_object(builder, GTK_CHECK_BUTTON, priv, checkbutton_alpha); get_object(builder, GTK_CHECK_BUTTON, priv, checkbutton_beta); get_object(builder, GTK_CHECK_BUTTON, priv, checkbutton_gamma); get_object(builder, GTK_CHECK_BUTTON, priv, checkbutton_ux); get_object(builder, GTK_CHECK_BUTTON, priv, checkbutton_uy); get_object(builder, GTK_CHECK_BUTTON, priv, checkbutton_uz); get_object(builder, GTK_TREE_VIEW, priv, treeview_reflections); get_object(builder, GTK_TREE_VIEW, priv, treeview_crystals); get_object(builder, GTK_TREE_VIEW, priv, treeview_axes); get_object(builder, GTK_TREE_VIEW, priv, treeview_pseudo_axes); get_object(builder, GTK_TREE_VIEW, priv, treeview_solutions); get_object(builder, GTK_TOOL_BUTTON, priv, toolbutton_add_reflection); get_object(builder, GTK_TOOL_BUTTON, priv, toolbutton_goto_reflection); get_object(builder, GTK_TOOL_BUTTON, priv, toolbutton_del_reflection); get_object(builder, GTK_TOOL_BUTTON, priv, toolbutton_setUB); get_object(builder, GTK_TOOL_BUTTON, priv, toolbutton_computeUB); get_object(builder, GTK_TOOL_BUTTON, priv, toolbutton_add_crystal); get_object(builder, GTK_TOOL_BUTTON, priv, toolbutton_copy_crystal); get_object(builder, GTK_TOOL_BUTTON, priv, toolbutton_del_crystal); get_object(builder, GTK_TOOL_BUTTON, priv, toolbutton_affiner); get_object(builder, GTK_STATUSBAR, priv, statusbar); get_object(builder, GTK_IMAGE_MENU_ITEM, priv, menuitem5); get_object(builder, GTK_VBOX, priv, vbox7); get_object(builder, GTK_VBOX, priv, vbox2); get_object(builder, GTK_VBOX, priv, box_info_bar); get_object(builder, GTK_DIALOG, priv, dialog1); get_object(builder, GTK_COMBO_BOX, priv, combobox1); gtk_builder_connect_signals (builder, self); } static void update_pseudo_axes_frames (HklGuiWindow* self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); HklGuiEngine **engine; g_return_if_fail (self != NULL); darray_foreach(engine, priv->pseudo_frames){ hkl_gui_engine_update(*engine); } } static void raise_error(HklGuiWindow *self, GError **error) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); g_return_if_fail (error != NULL); /* show an error message */ gtk_label_set_text (GTK_LABEL (priv->info_message), (*error)->message); gtk_info_bar_set_message_type (priv->info_bar, GTK_MESSAGE_ERROR); gtk_widget_show (GTK_WIDGET(priv->info_bar)); g_clear_error(error); } static gboolean _update_axis (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(data); const char *name; const HklParameter *axis; gdouble value, min, max; gtk_tree_model_get (model, iter, AXIS_COL_NAME, &name, -1); axis = hkl_geometry_axis_get(priv->diffractometer->geometry, name, NULL); hkl_parameter_min_max_get(axis, &min, &max, HKL_UNIT_USER); value = hkl_parameter_value_get(axis, HKL_UNIT_USER); gtk_list_store_set(GTK_LIST_STORE(model), iter, AXIS_COL_READ, value, AXIS_COL_WRITE, value, AXIS_COL_MIN, min, AXIS_COL_MAX, max, -1); return FALSE; } static void update_axes (HklGuiWindow* self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); g_return_if_fail (self != NULL); gtk_tree_model_foreach(GTK_TREE_MODEL(priv->liststore_axis), _update_axis, self); } static gboolean _update_pseudo_axes (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { const char *name; const HklEngine *engine; const HklParameter *pseudo_axis; gdouble value, min, max; gtk_tree_model_get (model, iter, PSEUDO_AXIS_COL_ENGINE, &engine, PSEUDO_AXIS_COL_NAME, &name, -1); pseudo_axis = hkl_engine_pseudo_axis_get(engine, name, NULL); hkl_parameter_min_max_get(pseudo_axis, &min, &max, HKL_UNIT_USER); value = hkl_parameter_value_get(pseudo_axis, HKL_UNIT_USER); gtk_list_store_set(GTK_LIST_STORE(model), iter, PSEUDO_AXIS_COL_READ, value, PSEUDO_AXIS_COL_WRITE, value, -1); return FALSE; } static void update_pseudo_axes (HklGuiWindow* self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); g_return_if_fail (self != NULL); gtk_tree_model_foreach(GTK_TREE_MODEL(priv->liststore_pseudo_axes), _update_pseudo_axes, self); } static void update_solutions (HklGuiWindow* self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); GtkTreeIter iter = {0}; g_return_if_fail (self != NULL); g_return_if_fail (priv->diffractometer->solutions != NULL); const HklGeometryListItem *item; gtk_list_store_clear(priv->liststore_solutions); gint n_values = gtk_tree_model_get_n_columns (GTK_TREE_MODEL(priv->liststore_solutions)); GValue *values = g_new0(GValue, n_values); gint *columns = g_new0(gint, n_values); gint i; /* prepare the GValue before using them */ g_value_init(&values[SOLUTION_COL_INDEX], G_TYPE_INT); g_value_init(&values[SOLUTION_COL_HKL_GEOMETRY_LIST_ITEM], G_TYPE_POINTER); for(i=SOLUTION_COL_N_COLUMNS; idiffractometer->solutions){ const HklGeometry *geometry = hkl_geometry_list_item_geometry_get(item); unsigned int n_v = darray_size(*hkl_geometry_axis_names_get(geometry)); double v[n_v]; hkl_geometry_axis_values_get(geometry, v, n_v, HKL_UNIT_USER); g_value_set_int(&values[SOLUTION_COL_INDEX], i); g_value_set_pointer(&values[SOLUTION_COL_HKL_GEOMETRY_LIST_ITEM], (gpointer)item); columns[SOLUTION_COL_INDEX] = SOLUTION_COL_INDEX; columns[SOLUTION_COL_HKL_GEOMETRY_LIST_ITEM] = SOLUTION_COL_HKL_GEOMETRY_LIST_ITEM; for(unsigned int j=0; jliststore_solutions, &iter, i, columns, values, n_values); i++; } g_free(columns); g_free(values); } static void update_source (HklGuiWindow* self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); g_return_if_fail (self != NULL); gtk_spin_button_set_value (priv->spinbutton_lambda, hkl_geometry_wavelength_get(priv->diffractometer->geometry, HKL_UNIT_USER)); } static void update_reflections (HklGuiWindow *self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); gtk_list_store_clear (priv->liststore_reflections); if(priv->sample){ HklSampleReflection* reflection; guint index = 0; HKL_SAMPLE_REFLECTIONS_FOREACH(reflection, priv->sample){ GtkTreeIter iter = {0}; gdouble h, k, l; gboolean flag; hkl_sample_reflection_hkl_get(reflection, &h, &k, &l); flag = hkl_sample_reflection_flag_get(reflection); gtk_list_store_append (priv->liststore_reflections, &iter); gtk_list_store_set (priv->liststore_reflections, &iter, REFLECTION_COL_INDEX, index++, REFLECTION_COL_H, h, REFLECTION_COL_K, k, REFLECTION_COL_L, l, REFLECTION_COL_FLAG, flag, REFLECTION_COL_REFLECTION, reflection, -1); } } } static void update_3d(HklGuiWindow *self) { #ifdef HKL3D HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); if(priv->frame3d){ hkl_gui_3d_is_colliding(priv->frame3d); hkl_gui_3d_invalidate(priv->frame3d); } #endif } static void pseudo_axes_frame_changed_cb (HklGuiEngine *gui_engine, HklGuiWindow *self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); HklEngine *engine; GtkListStore *liststore; guint n_values; GtkTreeIter iter = {0}; gboolean valid; GError *error = NULL; g_object_get(gui_engine, "engine", &engine, "liststore", &liststore, NULL); n_values = darray_size(*hkl_engine_pseudo_axis_names_get(engine)); gdouble values[n_values]; /* extract all the values from the listore */ valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(liststore), &iter); while(valid){ guint it_idx; gdouble it_value; gtk_tree_model_get (GTK_TREE_MODEL(liststore), &iter, PSEUDO_COL_IDX, &it_idx, PSEUDO_COL_VALUE, &it_value, -1); values[it_idx] = it_value; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(liststore), &iter); } if(diffractometer_pseudo_axis_values_set(priv->diffractometer, engine, values, n_values, &error)){ update_axes (self); update_pseudo_axes (self); update_pseudo_axes_frames (self); update_solutions (self); update_3d(self); }else raise_error(self, &error); g_object_unref(liststore); } static void set_up_pseudo_axes_frames (HklGuiWindow* self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); HklGuiEngine **pseudo; HklEngine **engine; darray_engine *engines; g_return_if_fail (self != NULL); darray_foreach (pseudo, priv->pseudo_frames){ gtk_container_remove(GTK_CONTAINER(priv->vbox2), GTK_WIDGET (hkl_gui_engine_get_frame (*pseudo))); g_object_unref(*pseudo); } darray_size (priv->pseudo_frames) = 0; engines = hkl_engine_list_engines_get (priv->diffractometer->engines); darray_foreach (engine, *engines){ HklGuiEngine *pseudo; pseudo = hkl_gui_engine_new (*engine); darray_append(priv->pseudo_frames, pseudo); gtk_container_add (GTK_CONTAINER (priv->vbox2), GTK_WIDGET (hkl_gui_engine_get_frame(pseudo))); g_signal_connect_object (pseudo, "changed", G_CALLBACK(pseudo_axes_frame_changed_cb), self, 0); } gtk_widget_show_all (GTK_WIDGET (priv->vbox2)); } static void set_up_diffractometer_model (HklGuiWindow* self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); unsigned int i; size_t n; HklFactory **factories; g_return_if_fail (self != NULL); factories = hkl_factory_get_all(&n); for(i=0; iliststore_diffractometer, &iter); gtk_list_store_set (priv->liststore_diffractometer, &iter, DIFFRACTOMETER_COL_NAME, hkl_factory_name_get(factories[i]), DIFFRACTOMETER_COL_FACTORY, factories[i], DIFFRACTOMETER_COL_DIFFRACTOMETER, NULL, -1); } } static void set_up_tree_view_axes (HklGuiWindow* self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); const darray_string *axes; const char **axis; GtkTreeIter iter = {0}; gtk_list_store_clear (priv->liststore_axis); axes = hkl_geometry_axis_names_get(priv->diffractometer->geometry); darray_foreach (axis, *axes){ gtk_list_store_append (priv->liststore_axis, &iter); gtk_list_store_set (priv->liststore_axis, &iter, AXIS_COL_NAME, *axis, -1); } update_axes (self); } static void set_up_tree_view_pseudo_axes (HklGuiWindow* self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); HklEngine **engine; const darray_engine *engines; gtk_list_store_clear(priv->liststore_pseudo_axes); engines = hkl_engine_list_engines_get(priv->diffractometer->engines); darray_foreach(engine, *engines){ const darray_string *pseudo_axes = hkl_engine_pseudo_axis_names_get(*engine); GtkTreeIter iter = {0}; guint idx; for(idx=0; idxliststore_pseudo_axes, &iter); gtk_list_store_set (priv->liststore_pseudo_axes, &iter, PSEUDO_AXIS_COL_IDX, idx, PSEUDO_AXIS_COL_ENGINE, *engine, PSEUDO_AXIS_COL_NAME, darray_item(*pseudo_axes, idx), -1); } } update_pseudo_axes (self); } static void _delete_column(gpointer data, gpointer user_data) { gtk_tree_view_remove_column (GTK_TREE_VIEW(user_data), GTK_TREE_VIEW_COLUMN(data)); } static void set_up_tree_view_solutions (HklGuiWindow* self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); const darray_string *axes; int i; GtkCellRenderer* renderer = NULL; GtkTreeViewColumn* column = NULL; GList* columns; GType* types; gint n_columns; axes = hkl_geometry_axis_names_get(priv->diffractometer->geometry); n_columns = SOLUTION_COL_N_COLUMNS + darray_size(*axes); /* prepare types for the liststore */ types = g_new0 (GType, n_columns); /* first remove all the columns */ columns = gtk_tree_view_get_columns (priv->treeview_solutions); g_list_foreach(columns, _delete_column, priv->treeview_solutions); g_list_free(columns); /* now add the index column */ renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("index", renderer, "text", SOLUTION_COL_INDEX, NULL); gtk_tree_view_append_column (priv->treeview_solutions, column); types[0] = G_TYPE_INT; types[1] = G_TYPE_POINTER; /* add the axes column */ for(i=SOLUTION_COL_N_COLUMNS; itreeview_solutions, column); types[i] = G_TYPE_DOUBLE; } if (priv->liststore_solutions) g_object_unref(priv->liststore_solutions); priv->liststore_solutions = gtk_list_store_newv (n_columns, types); g_free (types); gtk_tree_view_set_model (priv->treeview_solutions, GTK_TREE_MODEL(priv->liststore_solutions)); update_solutions (self); } void set_up_info_bar(HklGuiWindow *self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); GtkWidget *content_area; g_return_if_fail (self != NULL); /* set up info bar until we can use glade for this purpose or * switch to gtk3 */ if (priv->info_bar) return; priv->info_bar = GTK_INFO_BAR(gtk_info_bar_new ()); gtk_widget_set_no_show_all (GTK_WIDGET(priv->info_bar), TRUE); priv->info_message = GTK_LABEL(gtk_label_new ("")); gtk_widget_show (GTK_WIDGET(priv->info_message)); content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (priv->info_bar)); gtk_container_add (GTK_CONTAINER (content_area), GTK_WIDGET(priv->info_message)); gtk_info_bar_add_button (priv->info_bar, GTK_STOCK_OK, GTK_RESPONSE_OK); g_signal_connect (priv->info_bar, "response", G_CALLBACK (gtk_widget_hide), NULL); gtk_box_pack_start(GTK_BOX(priv->box_info_bar), GTK_WIDGET(priv->info_bar), TRUE, TRUE, 0); } static void set_up_lambda(HklGuiWindow *self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); g_object_set(G_OBJECT(priv->spinbutton_lambda), "sensitive", TRUE, NULL); gtk_spin_button_set_value(priv->spinbutton_lambda, hkl_geometry_wavelength_get(priv->diffractometer->geometry, HKL_UNIT_USER)); } static void set_up_3D (HklGuiWindow* self) { #if HKL3D HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); char *filename = NULL; const char *name = hkl_factory_name_get(priv->diffractometer->factory); if(!strcmp("K6C", name)) filename = get_model("diffabs.yaml"); else if (!strcmp("K4CV", name)) filename = get_model("cristal4C.yaml"); if(priv->frame3d){ gtk_widget_destroy(GTK_WIDGET(hkl_gui_3d_frame_get(priv->frame3d))); g_object_unref(priv->frame3d); priv->frame3d = NULL; } if (filename){ priv->frame3d = hkl_gui_3d_new(filename, priv->diffractometer->geometry); gtk_box_pack_start (GTK_BOX(priv->vbox7), GTK_WIDGET(hkl_gui_3d_frame_get(priv->frame3d)), TRUE, TRUE, (guint) 0); gtk_widget_show_all (GTK_WIDGET(priv->vbox7)); } #endif } /* select diffractometer */ void hkl_gui_window_combobox1_changed_cb(GtkComboBox *combobox, gpointer *user_data) { HklGuiWindow *self = HKL_GUI_WINDOW(user_data); HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); HklFactory *factory; struct diffractometer_t *dif = NULL; GtkTreeIter iter = {0}; if(gtk_combo_box_get_active_iter (combobox, &iter)){ gtk_tree_model_get(GTK_TREE_MODEL(priv->liststore_diffractometer), &iter, DIFFRACTOMETER_COL_FACTORY, &factory, DIFFRACTOMETER_COL_DIFFRACTOMETER, &dif, -1); if (!dif){ dif = create_diffractometer(factory); gtk_list_store_set(priv->liststore_diffractometer, &iter, DIFFRACTOMETER_COL_DIFFRACTOMETER, dif, -1); } } if(dif != priv->diffractometer){ priv->diffractometer = dif; diffractometer_set_sample(dif, priv->sample); set_up_lambda(self); set_up_pseudo_axes_frames(self); set_up_tree_view_axes(self); set_up_tree_view_pseudo_axes(self); set_up_tree_view_solutions(self); set_up_info_bar(self); set_up_3D(self); } } /* axis read cb */ void hkl_gui_window_cellrendererspin1_edited_cb(GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer user_data) { HklGuiWindow *self = HKL_GUI_WINDOW(user_data); HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); GtkTreeIter iter = {0}; gdouble value = 0.0; const char *axis; HklParameter *parameter; g_return_if_fail (renderer != NULL); g_return_if_fail (path != NULL); g_return_if_fail (new_text != NULL); g_return_if_fail (user_data != NULL); gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL(priv->liststore_axis), &iter, path); gtk_tree_model_get (GTK_TREE_MODEL(priv->liststore_axis), &iter, AXIS_COL_NAME, &axis, -1); value = atof(new_text); /* TODO need to check for the right conversion */ /* set the axis value */ parameter = hkl_parameter_new_copy(hkl_geometry_axis_get(priv->diffractometer->geometry, axis, NULL)); if(NULL == parameter) return; if(FALSE == hkl_parameter_value_set (parameter, value, HKL_UNIT_USER, NULL)) goto out; if(FALSE == hkl_geometry_axis_set(priv->diffractometer->geometry, axis, parameter, NULL)) goto out; hkl_engine_list_get(priv->diffractometer->engines); /* ok so set the model with the new value */ gtk_list_store_set (priv->liststore_axis, &iter, AXIS_COL_READ, value, AXIS_COL_WRITE, value, -1); update_pseudo_axes (self); update_pseudo_axes_frames (self); update_3d(self); out: hkl_parameter_free(parameter); return; } /* axis min cb */ void hkl_gui_window_cellrendererspin3_edited_cb(GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer user_data) { HklGuiWindow *self = HKL_GUI_WINDOW(user_data); HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); GtkTreeIter iter = {0}; gdouble value = 0.0; const char *axis; HklParameter* parameter = NULL; gdouble shit, max; g_return_if_fail (renderer != NULL); g_return_if_fail (path != NULL); g_return_if_fail (new_text != NULL); g_return_if_fail (user_data != NULL); gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL(priv->liststore_axis), &iter, path); gtk_tree_model_get (GTK_TREE_MODEL(priv->liststore_axis), &iter, AXIS_COL_NAME, &axis, -1); value = atof(new_text); /* TODO need to check for the right conversion */ parameter = hkl_parameter_new_copy(hkl_geometry_axis_get(priv->diffractometer->geometry, axis, NULL)); if(NULL == parameter) goto out; hkl_parameter_min_max_get (parameter, &shit, &max, HKL_UNIT_USER); if(FALSE == hkl_parameter_min_max_set (parameter, value, max, HKL_UNIT_USER, NULL)) goto free_parameter; if(FALSE == hkl_geometry_axis_set(priv->diffractometer->geometry, axis, parameter, NULL)) goto free_parameter; gtk_list_store_set (priv->liststore_axis, &iter, AXIS_COL_MIN, value, -1); update_pseudo_axes (self); free_parameter: hkl_parameter_free(parameter); out: return; } /* axis max cb */ void hkl_gui_window_cellrendererspin4_edited_cb(GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer user_data) { HklGuiWindow *self = HKL_GUI_WINDOW(user_data); HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); GtkTreeIter iter = {0}; gdouble value = 0.0; const char *axis; HklParameter* parameter = NULL; gdouble shit, min; g_return_if_fail (renderer != NULL); g_return_if_fail (path != NULL); g_return_if_fail (new_text != NULL); g_return_if_fail (user_data != NULL); gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL(priv->liststore_axis), &iter, path); gtk_tree_model_get (GTK_TREE_MODEL(priv->liststore_axis), &iter, AXIS_COL_NAME, &axis, -1); value = atof(new_text); /* TODO need to check for the right conversion */ parameter = hkl_parameter_new_copy(hkl_geometry_axis_get(priv->diffractometer->geometry, axis, NULL)); if(NULL == parameter) goto out; hkl_parameter_min_max_get (parameter, &min, &shit, HKL_UNIT_USER); if(FALSE == hkl_parameter_min_max_set (parameter, min, value, HKL_UNIT_USER, NULL)) goto free_parameter; if (FALSE == hkl_geometry_axis_set(priv->diffractometer->geometry, axis, parameter, NULL)) goto free_parameter; gtk_list_store_set (priv->liststore_axis, &iter, AXIS_COL_MAX, value, -1); update_pseudo_axes (self); free_parameter: hkl_parameter_free(parameter); out: return; } /* pseudo axis write */ void hkl_gui_window_cellrenderertext5_edited_cb(GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer user_data) { HklGuiWindow *self = HKL_GUI_WINDOW(user_data); HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); GtkTreeIter iter = {0}; gdouble value = 0.0; gdouble old_value; unsigned int idx; HklEngine *engine = NULL; gboolean valid; GtkTreeIter it = {0}; guint n_values; GError *error = NULL; gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL(priv->liststore_pseudo_axes), &iter, path); gtk_tree_model_get (GTK_TREE_MODEL(priv->liststore_pseudo_axes), &iter, PSEUDO_AXIS_COL_IDX, &idx, PSEUDO_AXIS_COL_ENGINE, &engine, PSEUDO_AXIS_COL_WRITE, &old_value, -1); n_values = darray_size(*hkl_engine_pseudo_axis_names_get(engine)); gdouble values[n_values]; /* extract all the values from the listore */ valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(priv->liststore_pseudo_axes), &it); while(valid){ guint it_idx; HklEngine *it_engine; gdouble it_value; gtk_tree_model_get (GTK_TREE_MODEL(priv->liststore_pseudo_axes), &it, PSEUDO_AXIS_COL_IDX, &it_idx, PSEUDO_AXIS_COL_ENGINE, &it_engine, PSEUDO_AXIS_COL_WRITE, &it_value, -1); if(engine == it_engine) values[it_idx] = it_value; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(priv->liststore_pseudo_axes), &it); } /* replace with the new value */ value = atof(new_text); /* TODO need to check for the right conversion */ values[idx] = value; if(diffractometer_pseudo_axis_values_set(priv->diffractometer, engine, values, n_values, &error)){ gtk_list_store_set (priv->liststore_pseudo_axes, &iter, PSEUDO_AXIS_COL_WRITE, value, -1); update_axes (self); update_pseudo_axes (self); update_pseudo_axes_frames (self); update_solutions (self); update_3d(self); }else raise_error(self, &error); } void hkl_gui_window_treeview_solutions_cursor_changed_cb (GtkTreeView *tree_view, gpointer user_data) { HklGuiWindow* self = HKL_GUI_WINDOW(user_data); HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); GtkTreePath* path = NULL; GtkTreeViewColumn* focus_column = NULL; GtkTreeIter iter = {0}; const HklGeometryListItem *solution; gtk_tree_view_get_cursor (tree_view, &path, &focus_column); gtk_tree_model_get_iter (GTK_TREE_MODEL(priv->liststore_solutions), &iter, path); gtk_tree_model_get (GTK_TREE_MODEL(priv->liststore_solutions), &iter, SOLUTION_COL_HKL_GEOMETRY_LIST_ITEM, &solution, -1); diffractometer_set_solution(priv->diffractometer, solution); update_axes (self); update_pseudo_axes (self); update_pseudo_axes_frames (self); update_3d(self); gtk_tree_path_free (path); } /* reflection h k l */ #define HKL_GUI_WINDOW_CELLRENDERERTEXT_HKL_EDITED_CB(_number, _hkl, _HKL) \ void \ hkl_gui_window_cellrenderertext ## _number ## _edited_cb(GtkCellRendererText* _sender, const gchar* path, \ const gchar* new_text, gpointer user_data) \ { \ HklGuiWindow *self = HKL_GUI_WINDOW(user_data); \ HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); \ \ g_return_if_fail (self != NULL); \ g_return_if_fail (path != NULL); \ g_return_if_fail (new_text != NULL); \ \ if (priv->sample){ \ gdouble h = 0.0; \ gdouble k = 0.0; \ gdouble l = 0.0; \ HklSampleReflection* reflection = NULL; \ GtkTreeIter iter = {0}; \ GError *error = NULL; \ \ gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL(priv->liststore_reflections), \ &iter, path); \ gtk_tree_model_get (GTK_TREE_MODEL(priv->liststore_reflections), \ &iter, \ REFLECTION_COL_REFLECTION, &reflection, \ -1); \ \ hkl_sample_reflection_hkl_get (reflection, &h, &k, &l); \ _hkl = atof(new_text); \ if(!hkl_sample_reflection_hkl_set (reflection, h, k, l, NULL)) \ raise_error(self, &error); \ else \ gtk_list_store_set (priv->liststore_reflections, \ &iter, \ REFLECTION_COL_ ## _HKL, _hkl, \ -1); \ } \ } HKL_GUI_WINDOW_CELLRENDERERTEXT_HKL_EDITED_CB(7, h, H); HKL_GUI_WINDOW_CELLRENDERERTEXT_HKL_EDITED_CB(8, k, K); HKL_GUI_WINDOW_CELLRENDERERTEXT_HKL_EDITED_CB(9, l, L); /* reflection flag */ void hkl_gui_window_cellrenderertoggle1_toggled_cb (GtkCellRendererToggle* renderer, const gchar* path, gpointer self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); g_return_if_fail (self != NULL); g_return_if_fail (path != NULL); if (priv->sample){ gboolean flag; HklSampleReflection* reflection = NULL; GtkTreeIter iter = {0}; gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL(priv->liststore_reflections), &iter, path); gtk_tree_model_get (GTK_TREE_MODEL(priv->liststore_reflections), &iter, REFLECTION_COL_REFLECTION, &reflection, -1); flag = gtk_cell_renderer_toggle_get_active(renderer); hkl_sample_reflection_flag_set (reflection, flag); gtk_list_store_set (priv->liststore_reflections, &iter, REFLECTION_COL_FLAG, flag, -1); } } gboolean hkl_gui_window_treeview_reflections_key_press_event_cb (GtkWidget* _sender, GdkEventKey* event, gpointer self) { return TRUE; } void hkl_gui_window_toolbutton_add_reflection_clicked_cb(GtkToolButton* _sender, gpointer self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); if (priv->diffractometer == NULL){ gtk_statusbar_push (priv->statusbar, 0, "Please select a diffractometer before adding reflections"); return; } if (priv->sample) { HklSampleReflection *reflection = NULL; GtkTreeIter iter = {0}; gboolean flag; gint n_rows; GError *error = NULL; reflection = hkl_sample_reflection_new(priv->diffractometer->geometry, priv->diffractometer->detector, 0, 0, 0, &error); if(!reflection) raise_error(self, &error); else{ hkl_sample_add_reflection(priv->sample, reflection); flag = hkl_sample_reflection_flag_get(reflection); n_rows = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(priv->liststore_reflections), NULL); gtk_list_store_insert_with_values (priv->liststore_reflections, &iter, -1, REFLECTION_COL_INDEX, n_rows, REFLECTION_COL_H, 0., REFLECTION_COL_K, 0., REFLECTION_COL_L, 0., REFLECTION_COL_FLAG, flag, REFLECTION_COL_REFLECTION, reflection, -1); } } } void hkl_gui_window_toolbutton_goto_reflection_clicked_cb (GtkToolButton* _sender, gpointer user_data) { HklGuiWindow *self = HKL_GUI_WINDOW(user_data); HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); g_return_if_fail (self != NULL); if (priv->sample) { GtkTreeSelection* selection = NULL; guint nb_rows = 0U; selection = gtk_tree_view_get_selection (priv->treeview_reflections); nb_rows = gtk_tree_selection_count_selected_rows (selection); if (nb_rows == 1) { HklSampleReflection *reflection; GtkTreeIter iter = {0}; GtkTreeModel* model = NULL; GtkTreePath *treepath; GList* list; model = GTK_TREE_MODEL(priv->liststore_reflections); list = gtk_tree_selection_get_selected_rows (selection, &model); treepath = g_list_nth_data(list, 0); gtk_tree_model_get_iter (GTK_TREE_MODEL(priv->liststore_reflections), &iter, treepath); gtk_tree_model_get (GTK_TREE_MODEL(priv->liststore_reflections), &iter, REFLECTION_COL_REFLECTION, &reflection, -1); hkl_geometry_set (priv->diffractometer->geometry, hkl_sample_reflection_geometry_get(reflection)); update_source (self); update_axes (self); update_pseudo_axes (self); update_3d(self); g_list_free_full (list, (GDestroyNotify) gtk_tree_path_free); } else if (nb_rows > 1) gtk_statusbar_push (priv->statusbar, 0, "Please select only one reflection."); else gtk_statusbar_push (priv->statusbar, 0, "Please select at least one reflection."); } } static void _del_reflection(gpointer data, gpointer user_data) { HklSampleReflection *reflection; GtkTreeIter iter = {0}; GtkTreePath *treepath = data; HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); gtk_tree_model_get_iter (GTK_TREE_MODEL(priv->liststore_reflections), &iter, treepath); gtk_tree_model_get (GTK_TREE_MODEL(priv->liststore_reflections), &iter, REFLECTION_COL_REFLECTION, &reflection, -1); hkl_sample_del_reflection(priv->sample, reflection); } void hkl_gui_window_toolbutton_del_reflection_clicked_cb (GtkToolButton* _sender, gpointer user_data) { HklGuiWindow *self = HKL_GUI_WINDOW(user_data); HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); g_return_if_fail (self != NULL); if (priv->sample) { GtkTreeSelection* selection = NULL; guint nb_rows = 0U; selection = gtk_tree_view_get_selection (priv->treeview_reflections); nb_rows = gtk_tree_selection_count_selected_rows (selection); if (nb_rows > 0) { GtkTreeModel* model = NULL; GList* list; GtkMessageDialog* dialog; model = GTK_TREE_MODEL(priv->liststore_reflections); list = gtk_tree_selection_get_selected_rows (selection, &model); dialog = GTK_MESSAGE_DIALOG( gtk_message_dialog_new (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_YES_NO, "Are you sure that you want to delete reflections")); switch (gtk_dialog_run (GTK_DIALOG(dialog))) { case GTK_RESPONSE_YES: { g_list_foreach(list, _del_reflection, self); update_reflections (self); break; } default: break; } gtk_widget_destroy (GTK_WIDGET(dialog)); g_list_free_full (list, (GDestroyNotify) gtk_tree_path_free); } else { gtk_statusbar_push (priv->statusbar, 0, "Please select at least one reflection."); } } } static void set_up_tree_view_reflections(HklGuiWindow *self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); GtkTreeSelection* selection = NULL; selection = gtk_tree_view_get_selection (priv->treeview_reflections); gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE); } /* crystal name */ void hkl_gui_window_cellrenderertext10_edited_cb(GtkCellRendererText* _sender, const gchar* path, const gchar* new_text, gpointer user_data) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); GtkTreeModel* model = NULL; GtkTreeIter iter = {0}; HklSample* sample = NULL; g_return_if_fail (user_data != NULL); g_return_if_fail (path != NULL); g_return_if_fail (new_text != NULL); model = GTK_TREE_MODEL(priv->liststore_crystals); gtk_tree_model_get_iter_from_string (model, &iter, path); gtk_tree_model_get (model, &iter, SAMPLE_COL_SAMPLE, &sample, -1); hkl_sample_name_set (sample, new_text); gtk_list_store_set(priv->liststore_crystals, &iter, SAMPLE_COL_NAME, new_text, -1); } #define set_lattice(lattice, parameter) do{ \ const HklParameter *p; \ gdouble min, max, value; \ gboolean fit; \ p = hkl_lattice_## parameter ##_get((lattice)); \ value = hkl_parameter_value_get(p, HKL_UNIT_USER); \ hkl_parameter_min_max_get(p, &min, &max, HKL_UNIT_USER); \ fit = hkl_parameter_fit_get(p); \ gtk_spin_button_set_value(priv->spinbutton_## parameter, value); \ gtk_spin_button_set_value(priv->spinbutton_## parameter ##_min, min); \ gtk_spin_button_set_value(priv->spinbutton_## parameter ##_max, max); \ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(priv->checkbutton_ ## parameter), fit); \ }while(0) static void update_lattice (HklGuiWindow* self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); g_return_if_fail (self != NULL); if (priv->sample != NULL) { const HklLattice *lattice; lattice = hkl_sample_lattice_get(priv->sample); set_lattice(lattice, a); set_lattice(lattice, b); set_lattice(lattice, c); set_lattice(lattice, alpha); set_lattice(lattice, beta); set_lattice(lattice, gamma); } } #define set_reciprocal_lattice(lattice, parameter) do{ \ const HklParameter *p; \ gdouble value; \ p = hkl_lattice_## parameter ##_get((lattice)); \ value = hkl_parameter_value_get(p, HKL_UNIT_USER); \ gtk_spin_button_set_value(priv->spinbutton_## parameter ##_star, value); \ }while(0) static void update_reciprocal_lattice (HklGuiWindow* self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); g_return_if_fail (self != NULL); if (priv->sample != NULL) { hkl_lattice_reciprocal (hkl_sample_lattice_get(priv->sample), priv->reciprocal); set_reciprocal_lattice(priv->reciprocal, a); set_reciprocal_lattice(priv->reciprocal, b); set_reciprocal_lattice(priv->reciprocal, c); set_reciprocal_lattice(priv->reciprocal, alpha); set_reciprocal_lattice(priv->reciprocal, beta); set_reciprocal_lattice(priv->reciprocal, gamma); } } #define set_ux_uy_uz(sample, parameter) do { \ const HklParameter *p; \ p = hkl_sample_## parameter ##_get((sample)); \ gboolean fit = hkl_parameter_fit_get(p); \ gtk_spin_button_set_value(priv->spinbutton_## parameter, \ hkl_parameter_value_get(p, HKL_UNIT_USER)); \ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(priv->checkbutton_## parameter), fit); \ }while(0) static void update_ux_uy_uz (HklGuiWindow* self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); g_return_if_fail (self != NULL); if (priv->sample != NULL) { set_ux_uy_uz(priv->sample, ux); set_ux_uy_uz(priv->sample, uy); set_ux_uy_uz(priv->sample, uz); } } #define set_UB(i, j) do{ \ gtk_label_set_markup(priv->label_UB ## i ## j, \ g_ascii_formatd(text, \ G_ASCII_DTOSTR_BUF_SIZE, \ " %+.4f ", \ hkl_matrix_get(UB, i - 1, j - 1))); \ }while(0) static void update_UB (HklGuiWindow* self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); g_return_if_fail (self != NULL); if (priv->sample != NULL) { const HklMatrix *UB = hkl_sample_UB_get (priv->sample); gchar *text = g_new0 (gchar, G_ASCII_DTOSTR_BUF_SIZE); set_UB(1, 1); set_UB(1, 2); set_UB(1, 3); set_UB(2, 1); set_UB(2, 2); set_UB(2, 3); set_UB(3, 1); set_UB(3, 2); set_UB(3, 3); g_free(text); } } void hkl_gui_window_treeview_crystals_cursor_changed_cb (GtkTreeView* _sender, gpointer user_data) { GtkTreePath* path = NULL; GtkTreeViewColumn* column = NULL; GtkTreeIter iter = {0}; HklGuiWindow *self = HKL_GUI_WINDOW(user_data); HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); HklSample *sample; g_return_if_fail (user_data != NULL); gtk_tree_view_get_cursor (priv->treeview_crystals, &path, &column); if(path){ if (gtk_tree_model_get_iter (GTK_TREE_MODEL(priv->liststore_crystals), &iter, path) == TRUE){ gtk_tree_model_get (GTK_TREE_MODEL(priv->liststore_crystals), &iter, SAMPLE_COL_SAMPLE, &sample, -1); if(sample && sample != priv->sample){ priv->sample = sample; update_reflections(self); update_lattice(self); update_reciprocal_lattice (self); update_ux_uy_uz (self); update_UB (self); if(priv->diffractometer){ diffractometer_set_sample(priv->diffractometer, priv->sample); update_pseudo_axes (self); update_pseudo_axes_frames (self); update_solutions(self); } } } gtk_tree_path_free (path); } } static GtkTreeIter _add_sample(HklGuiWindow *self, HklSample *sample) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); GtkTreeIter iter = {0}; const HklLattice *lattice; gdouble a, b, c, alpha, beta, gamma; g_return_val_if_fail (self != NULL, iter); lattice = hkl_sample_lattice_get(sample); a = hkl_parameter_value_get(hkl_lattice_a_get(lattice), HKL_UNIT_USER); b = hkl_parameter_value_get(hkl_lattice_b_get(lattice), HKL_UNIT_USER); c = hkl_parameter_value_get(hkl_lattice_c_get(lattice), HKL_UNIT_USER); alpha = hkl_parameter_value_get(hkl_lattice_alpha_get(lattice), HKL_UNIT_USER); beta = hkl_parameter_value_get(hkl_lattice_beta_get(lattice), HKL_UNIT_USER); gamma = hkl_parameter_value_get(hkl_lattice_gamma_get(lattice), HKL_UNIT_USER); gtk_list_store_insert_with_values(priv->liststore_crystals, &iter, -1, SAMPLE_COL_SAMPLE, sample, SAMPLE_COL_NAME, hkl_sample_name_get(sample), SAMPLE_COL_A, a, SAMPLE_COL_B, b, SAMPLE_COL_C, c, SAMPLE_COL_ALPHA, alpha, SAMPLE_COL_BETA, beta, SAMPLE_COL_GAMMA, gamma, -1); return iter; } static void set_up_tree_view_crystals (HklGuiWindow* self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); GtkTreeIter iter = {0}; GtkTreePath *path = NULL; g_return_if_fail (self != NULL); iter = _add_sample(self, hkl_sample_new("default")); path = gtk_tree_model_get_path(GTK_TREE_MODEL(priv->liststore_crystals), &iter); gtk_tree_view_set_cursor(priv->treeview_crystals, path, NULL, FALSE); gtk_tree_path_free(path); } static void _add_sample_and_edit_name(HklGuiWindow *self, HklSample *sample) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); GtkTreeIter iter = {0}; GtkTreePath* path = NULL; GtkTreeViewColumn* column = NULL; iter = _add_sample(self, sample); path = gtk_tree_model_get_path(GTK_TREE_MODEL(priv->liststore_crystals), &iter); column = gtk_tree_view_get_column (priv->treeview_crystals, 0); gtk_tree_view_set_cursor (priv->treeview_crystals, path, column, TRUE); gtk_tree_path_free(path); } void hkl_gui_window_toolbutton_add_crystal_clicked_cb (GtkToolButton* _sender, gpointer user_data) { HklGuiWindow *self = HKL_GUI_WINDOW(user_data); HklSample *sample; g_return_if_fail (user_data != NULL); sample = hkl_sample_new ("new"); if(sample) _add_sample_and_edit_name(self, sample); } void hkl_gui_window_toolbutton_copy_crystal_clicked_cb (GtkToolButton* _sender, gpointer user_data) { HklGuiWindow *self = HKL_GUI_WINDOW(user_data); HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); HklSample *copy = NULL; g_return_if_fail (self != NULL); if(priv->sample) { copy = hkl_sample_new_copy(priv->sample); if (copy) _add_sample_and_edit_name(self, copy); }else gtk_statusbar_push (priv->statusbar, (guint) 0, "Please select a crystal to copy."); } void hkl_gui_window_toolbutton_del_crystal_clicked_cb (GtkToolButton* _sender, gpointer user_data) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); g_return_if_fail (user_data != NULL); if (priv->sample != NULL) { guint n_rows; n_rows = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(priv->liststore_crystals), NULL ); if (n_rows == 1) return; else { GtkTreeIter iter = {0}; GtkTreePath *path = NULL; GtkTreeViewColumn *column = NULL; gtk_tree_view_get_cursor(priv->treeview_crystals, &path, &column); if (path){ if (gtk_tree_model_get_iter (GTK_TREE_MODEL(priv->liststore_crystals), &iter, path) == TRUE) { gtk_tree_path_free(path); hkl_sample_free(priv->sample); if (gtk_list_store_remove(priv->liststore_crystals, &iter) == TRUE){ path = gtk_tree_model_get_path(GTK_TREE_MODEL(priv->liststore_crystals), &iter); gtk_tree_view_set_cursor(priv->treeview_crystals, path, NULL, FALSE); } } } } } } #define get_lattice_parameter(lattice, parameter, _error) do{ \ HklParameter *p = hkl_parameter_new_copy(hkl_lattice_## parameter ##_get(lattice)); \ if(!hkl_parameter_min_max_set(p, \ gtk_spin_button_get_value(priv->spinbutton_## parameter ##_min), \ gtk_spin_button_get_value(priv->spinbutton_## parameter ##_max), \ HKL_UNIT_USER, _error)){ \ raise_error(self, _error); \ hkl_parameter_free(p); \ return; \ }else{ \ hkl_parameter_fit_set(p, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->checkbutton_## parameter))); \ if(!hkl_lattice_ ## parameter ## _set(lattice, p, _error)){ \ raise_error(self, _error); \ hkl_parameter_free(p); \ return; \ } \ } \ hkl_parameter_free(p); \ } while(0) #define get_ux_uy_uz(sample, parameter, _error) do { \ HklParameter *p; \ p = hkl_parameter_new_copy(hkl_sample_## parameter ##_get(sample)); \ if(!hkl_parameter_value_set(p, \ gtk_spin_button_get_value (priv->spinbutton_## parameter), \ HKL_UNIT_USER, _error)){ \ raise_error(self, _error); \ hkl_parameter_free(p); \ return; \ }else{ \ hkl_parameter_fit_set(p, \ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->checkbutton_## parameter))); \ if(!hkl_sample_ ## parameter ## _set(sample, p, _error)){ \ raise_error(self, _error); \ hkl_parameter_free(p); \ return; \ } \ } \ hkl_parameter_free(p); \ }while(0) static gboolean _update_crystal_model(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(data); HklSample *sample = NULL; gtk_tree_model_get(model, iter, SAMPLE_COL_SAMPLE, &sample, -1); if(priv->sample == sample){ const HklLattice *lattice; gdouble a, b, c, alpha, beta, gamma; lattice = hkl_sample_lattice_get(sample); a = hkl_parameter_value_get(hkl_lattice_a_get(lattice), HKL_UNIT_USER); b = hkl_parameter_value_get(hkl_lattice_b_get(lattice), HKL_UNIT_USER); c = hkl_parameter_value_get(hkl_lattice_c_get(lattice), HKL_UNIT_USER); alpha = hkl_parameter_value_get(hkl_lattice_alpha_get(lattice), HKL_UNIT_USER); beta = hkl_parameter_value_get(hkl_lattice_beta_get(lattice), HKL_UNIT_USER); gamma = hkl_parameter_value_get(hkl_lattice_gamma_get(lattice), HKL_UNIT_USER); gtk_list_store_set(priv->liststore_crystals, iter, SAMPLE_COL_NAME, hkl_sample_name_get(sample), SAMPLE_COL_A, a, SAMPLE_COL_B, b, SAMPLE_COL_C, c, SAMPLE_COL_ALPHA, alpha, SAMPLE_COL_BETA, beta, SAMPLE_COL_GAMMA, gamma, -1); return TRUE; } return FALSE; } static void update_crystal_model(HklGuiWindow *self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); gtk_tree_model_foreach(GTK_TREE_MODEL(priv->liststore_crystals), _update_crystal_model, self); } /* apply crystal parameters */ void hkl_gui_window_button2_clicked_cb (GtkButton* _sender, gpointer user_data) { HklGuiWindow *self = HKL_GUI_WINDOW(user_data); HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); g_return_if_fail (self != NULL); if (priv->sample != NULL) { gdouble a, b, c, alpha, beta, gamma; HklLattice *lattice; GError *error = NULL; fprintf(stderr, "%s\n", __func__); /* lattice parameters */ a = gtk_spin_button_get_value (priv->spinbutton_a); b = gtk_spin_button_get_value (priv->spinbutton_b); c = gtk_spin_button_get_value (priv->spinbutton_c); alpha = gtk_spin_button_get_value (priv->spinbutton_alpha); beta = gtk_spin_button_get_value (priv->spinbutton_beta); gamma = gtk_spin_button_get_value (priv->spinbutton_gamma); lattice = hkl_lattice_new(a, b, c, alpha * HKL_DEGTORAD, beta * HKL_DEGTORAD, gamma * HKL_DEGTORAD, &error); if(!lattice) raise_error(self, &error); else{ get_lattice_parameter(lattice, a, &error); get_lattice_parameter(lattice, b, &error); get_lattice_parameter(lattice, c, &error); get_lattice_parameter(lattice, alpha, &error); get_lattice_parameter(lattice, beta, &error); get_lattice_parameter(lattice, gamma, &error); hkl_sample_lattice_set(priv->sample, lattice); hkl_lattice_free(lattice); /* UB */ get_ux_uy_uz(priv->sample, ux, &error); get_ux_uy_uz(priv->sample, uy, &error); get_ux_uy_uz(priv->sample, uz, &error); if(priv->diffractometer) diffractometer_set_sample(priv->diffractometer, priv->sample); update_crystal_model (self); update_reciprocal_lattice (self); update_UB (self); update_pseudo_axes (self); update_pseudo_axes_frames (self); } } } void hkl_gui_window_spinbutton_lambda_value_changed_cb (GtkSpinButton* _sender, gpointer user_data) { HklGuiWindow *self = HKL_GUI_WINDOW(user_data); HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); diffractometer_set_wavelength(priv->diffractometer, gtk_spin_button_get_value(_sender)); update_pseudo_axes (self); update_pseudo_axes_frames (self); } void hkl_gui_window_spinbutton_ux_value_changed_cb (GtkSpinButton *_senser, gpointer user_data) { HklGuiWindow *self = HKL_GUI_WINDOW(user_data); HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); GError *error = NULL; get_ux_uy_uz(priv->sample, ux, &error); if(priv->diffractometer) diffractometer_set_sample(priv->diffractometer, priv->sample); update_UB (self); update_pseudo_axes (self); update_pseudo_axes_frames (self); } void hkl_gui_window_spinbutton_uy_value_changed_cb (GtkSpinButton *_senser, gpointer user_data) { HklGuiWindow *self = HKL_GUI_WINDOW(user_data); HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); GError *error = NULL; get_ux_uy_uz(priv->sample, uy, &error); if(priv->diffractometer) diffractometer_set_sample(priv->diffractometer, priv->sample); update_UB (self); update_pseudo_axes (self); update_pseudo_axes_frames (self); } void hkl_gui_window_spinbutton_uz_value_changed_cb (GtkSpinButton *_senser, gpointer user_data) { HklGuiWindow *self = HKL_GUI_WINDOW(user_data); HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); GError *error = NULL; get_ux_uy_uz(priv->sample, uz, &error); if(priv->diffractometer) diffractometer_set_sample(priv->diffractometer, priv->sample); update_UB (self); update_pseudo_axes (self); update_pseudo_axes_frames (self); } void hkl_gui_window_toolbutton_setUB_clicked_cb(GtkToolButton* _sender, gpointer user_data) { HklGuiWindow *self = HKL_GUI_WINDOW(user_data); HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); HklMatrix *UB; GError *error = NULL; UB = hkl_matrix_new_full(gtk_spin_button_get_value(priv->spinbutton_U11), gtk_spin_button_get_value(priv->spinbutton_U12), gtk_spin_button_get_value(priv->spinbutton_U13), gtk_spin_button_get_value(priv->spinbutton_U21), gtk_spin_button_get_value(priv->spinbutton_U22), gtk_spin_button_get_value(priv->spinbutton_U23), gtk_spin_button_get_value(priv->spinbutton_U31), gtk_spin_button_get_value(priv->spinbutton_U32), gtk_spin_button_get_value(priv->spinbutton_U33)); if(!hkl_sample_UB_set (priv->sample, UB, &error)) raise_error(self, &error); else{ if(priv->diffractometer){ diffractometer_set_sample(priv->diffractometer, priv->sample); update_lattice (self); update_crystal_model (self); update_reciprocal_lattice (self); update_UB (self); update_ux_uy_uz (self); update_pseudo_axes (self); update_pseudo_axes_frames (self); } } hkl_matrix_free(UB); } void hkl_gui_window_toolbutton_computeUB_clicked_cb (GtkToolButton* _sender, gpointer user_data) { HklGuiWindow *self = HKL_GUI_WINDOW(user_data); HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); GtkTreeSelection* selection = NULL; guint nb_rows = 0U; selection = gtk_tree_view_get_selection (priv->treeview_reflections); nb_rows = gtk_tree_selection_count_selected_rows (selection); if (nb_rows > 1) { GtkTreeModel* model = NULL; GList* list; GtkTreeIter iter = {0}; GtkTreePath *path; HklSampleReflection *ref1, *ref2; GError *error = NULL; model = GTK_TREE_MODEL(priv->liststore_reflections); list = gtk_tree_selection_get_selected_rows (selection, &model); /* get the first reflection */ path = g_list_nth_data(list, 0); gtk_tree_model_get_iter (GTK_TREE_MODEL(priv->liststore_reflections), &iter, path); gtk_tree_model_get (GTK_TREE_MODEL(priv->liststore_reflections), &iter, REFLECTION_COL_REFLECTION, &ref1, -1); /* get the second one */ path = g_list_nth_data(list, 1); gtk_tree_model_get_iter (GTK_TREE_MODEL(priv->liststore_reflections), &iter, path); gtk_tree_model_get (GTK_TREE_MODEL(priv->liststore_reflections), &iter, REFLECTION_COL_REFLECTION, &ref2, -1); if(!hkl_sample_compute_UB_busing_levy(priv->sample, ref1, ref2, &error)){ raise_error(self, &error); }else{ if(priv->diffractometer) diffractometer_set_sample(priv->diffractometer, priv->sample); update_UB (self); update_ux_uy_uz (self); update_pseudo_axes (self); update_pseudo_axes_frames (self); } g_list_free_full (list, (GDestroyNotify) gtk_tree_path_free); } else { gtk_statusbar_push (priv->statusbar, 0, "Please select at least two reflection."); } } void hkl_gui_window_toolbutton_affiner_clicked_cb (GtkToolButton* _sender, gpointer user_data) { HklGuiWindow *self = HKL_GUI_WINDOW(user_data); HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); GError *error = NULL; if(!hkl_sample_affine (priv->sample, &error)){ raise_error(self, &error); }else{ if(priv->diffractometer) diffractometer_set_sample(priv->diffractometer, priv->sample); update_lattice (self); update_crystal_model (self); update_reciprocal_lattice (self); update_UB (self); update_ux_uy_uz (self); update_pseudo_axes (self); update_pseudo_axes_frames (self); } } #define TOGGLE_LATTICE_CB(_parameter) \ void hkl_gui_window_checkbutton_ ## _parameter ## _toggled_cb(GtkCheckButton *checkbutton, \ gpointer user_data) \ { \ HklGuiWindow *self = HKL_GUI_WINDOW(user_data); \ HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); \ HklLattice *lattice; \ HklParameter *p; \ GError *error = NULL; \ lattice = hkl_lattice_new_copy(hkl_sample_lattice_get(priv->sample)); \ p = hkl_parameter_new_copy(hkl_lattice_## _parameter ##_get(lattice)); \ hkl_parameter_fit_set(p, \ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(checkbutton))); \ if(!hkl_lattice_## _parameter ##_set(lattice, p, &error)){ \ raise_error(self, &error); \ }else{ \ hkl_sample_lattice_set(priv->sample, lattice); \ } \ hkl_parameter_free(p); \ hkl_lattice_free(lattice); \ } TOGGLE_LATTICE_CB(a); TOGGLE_LATTICE_CB(b); TOGGLE_LATTICE_CB(c); TOGGLE_LATTICE_CB(alpha); TOGGLE_LATTICE_CB(beta); TOGGLE_LATTICE_CB(gamma); #define TOGGLE_UX_UY_UZ(_parameter) \ void hkl_gui_window_checkbutton_ ## _parameter ## _toggled_cb(GtkCheckButton *checkbutton, \ gpointer user_data) \ { \ HklGuiWindow *self = HKL_GUI_WINDOW(user_data); \ HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(user_data); \ HklParameter *p; \ GError *error = NULL; \ p = hkl_parameter_new_copy(hkl_sample_ ## _parameter ## _get(priv->sample)); \ hkl_parameter_fit_set(p, \ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(checkbutton))); \ if(!hkl_sample_ ## _parameter ## _set(priv->sample, p, &error)){ \ raise_error(self, &error); \ } \ hkl_parameter_free(p); \ } TOGGLE_UX_UY_UZ(ux); TOGGLE_UX_UY_UZ(uy); TOGGLE_UX_UY_UZ(uz); /* static gboolean _hkl_gui_window_on_tree_view_crystals_key_press_event_gtk_widget_key_press_event (GtkWidget* _sender, GdkEventKey* event, gpointer self) { gboolean result; result = hkl_gui_window_on_tree_view_crystals_key_press_event (event, self); return result; } static gboolean hkl_gui_window_on_tree_view_crystals_key_press_event (GdkEventKey* event, HklGuiWindow* self) { gboolean result = FALSE; g_return_val_if_fail (self != NULL, FALSE); g_return_val_if_fail (event != NULL, FALSE); result = TRUE; return result; } */ static void hkl_gui_window_class_init (HklGuiWindowClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS (class); g_type_class_add_private (class, sizeof (HklGuiWindowPrivate)); /* virtual method */ gobject_class->finalize = finalize; } static void hkl_gui_window_init (HklGuiWindow * self) { HklGuiWindowPrivate *priv = HKL_GUI_WINDOW_GET_PRIVATE(self); priv->diffractometer = NULL; priv->sample = NULL; darray_init(priv->pseudo_frames); priv->reciprocal = hkl_lattice_new_default (); hkl_gui_window_get_widgets_and_objects_from_ui (self); set_up_diffractometer_model (self); set_up_tree_view_crystals (self); set_up_tree_view_reflections(self); } int main (int argc, char ** argv) { gtk_init (&argc, &argv); #ifdef HKL3D gtk_gl_init(&argc, &argv); #endif hkl_gui_window_new (); gtk_main (); return 0; } hkl-5.0.0.2449/gui/hkl-gui-pseudoaxes.c0000644000175000017500000003045413237017527017576 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2013 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl-gui-macros.h" #include "hkl-gui-pseudoaxes.h" #include "hkl.h" #include #include #include #include #include G_DEFINE_TYPE (HklGuiEngine, hkl_gui_engine, G_TYPE_OBJECT); enum { PROP_0, PROP_ENGINE, PROP_LISTSTORE, N_PROPERTIES }; /* Keep a pointer to the properties definition */ static GParamSpec *obj_properties[N_PROPERTIES] = { NULL, }; enum { CHANGED, N_SIGNALS }; static guint signals[N_SIGNALS] = { 0 }; struct _HklGuiEnginePrivate { /* Properties */ HklEngine* engine; /* Properties */ GtkBuilder *builder; GtkFrame* frame1; GtkLabel* label2; GtkComboBox* combobox1; GtkExpander* expander1; GtkTreeView* treeview1; GtkButton* button1; GtkButton* button2; GtkListStore* store_mode; GtkListStore* store_pseudo; GtkListStore* store_mode_parameter; }; #define HKL_GUI_ENGINE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), HKL_GUI_TYPE_ENGINE, HklGuiEnginePrivate)) static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { HklGuiEngine *self = HKL_GUI_ENGINE (object); switch (prop_id) { case PROP_ENGINE: hkl_gui_engine_set_engine(self, g_value_get_pointer (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { HklGuiEngine *self = HKL_GUI_ENGINE (object); switch (prop_id) { case PROP_ENGINE: g_value_set_pointer (value, hkl_gui_engine_get_engine (self)); break; case PROP_LISTSTORE: g_value_set_object(value, hkl_gui_engine_get_liststore (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void finalize (GObject* object) { HklGuiEnginePrivate *priv = HKL_GUI_ENGINE_GET_PRIVATE(object); g_object_unref(priv->builder); G_OBJECT_CLASS (hkl_gui_engine_parent_class)->finalize (object); } HklGuiEngine* hkl_gui_engine_new (HklEngine* engine) { return g_object_new (HKL_GUI_TYPE_ENGINE, "engine", engine, NULL); } HklEngine* hkl_gui_engine_get_engine (HklGuiEngine *self) { HklGuiEnginePrivate *priv = HKL_GUI_ENGINE_GET_PRIVATE(self); return priv->engine; } GtkListStore* hkl_gui_engine_get_liststore (HklGuiEngine *self) { HklGuiEnginePrivate *priv = HKL_GUI_ENGINE_GET_PRIVATE(self); return priv->store_pseudo; } GtkFrame* hkl_gui_engine_get_frame(HklGuiEngine *self) { HklGuiEnginePrivate *priv = HKL_GUI_ENGINE_GET_PRIVATE(self); return priv->frame1; } static void update_pseudo_axis (HklGuiEngine* self) { HklGuiEnginePrivate *priv = HKL_GUI_ENGINE_GET_PRIVATE(self); GtkTreeIter iter = {0}; const darray_string *parameters = hkl_engine_pseudo_axis_names_get (priv->engine); unsigned int n_values = darray_size(*parameters); double values[n_values]; GError *error = NULL; unsigned int i; g_return_if_fail (self != NULL); gtk_list_store_clear (priv->store_pseudo); if(!hkl_engine_pseudo_axis_values_get(priv->engine, values, n_values, HKL_UNIT_USER, &error)){ /* TODO check for the error */ g_clear_error(&error); return; } for(i=0; istore_pseudo, &iter); gtk_list_store_set (priv->store_pseudo, &iter, PSEUDO_COL_NAME, darray_item(*parameters, i), PSEUDO_COL_IDX, i, PSEUDO_COL_VALUE, values[i], -1); } } static void update_mode (HklGuiEngine* self) { HklGuiEnginePrivate *priv = HKL_GUI_ENGINE_GET_PRIVATE(self); GtkTreeIter iter = {0}; GtkTreeIter current = {0}; const darray_string *modes; const char **mode; g_return_if_fail (self != NULL); modes = hkl_engine_modes_names_get(priv->engine); gtk_list_store_clear (priv->store_mode); darray_foreach(mode, *modes){ gtk_list_store_append (priv->store_mode, &iter); gtk_list_store_set (priv->store_mode, &iter, MODE_COL_NAME, *mode, -1); if(*mode == hkl_engine_current_mode_get(priv->engine)) current = iter; } /* now set the active row with the current mode */ gtk_combo_box_set_active_iter(priv->combobox1, ¤t); } static void update_mode_parameters (HklGuiEngine* self) { HklGuiEnginePrivate *priv = HKL_GUI_ENGINE_GET_PRIVATE(self); const darray_string *parameters = hkl_engine_parameters_names_get(priv->engine); unsigned int n_values = darray_size(*parameters); double values[n_values]; unsigned int i; if(n_values){ GtkTreeIter iter = {0}; gtk_list_store_clear (priv->store_mode_parameter); hkl_engine_parameters_values_get(priv->engine, values, n_values, HKL_UNIT_USER); for(i=0; istore_mode_parameter, &iter); gtk_list_store_set (priv->store_mode_parameter, &iter, PSEUDO_COL_NAME, darray_item(*parameters, i), PSEUDO_COL_IDX, i, PSEUDO_COL_VALUE, values[i], -1); } gtk_expander_set_expanded (priv->expander1, TRUE); gtk_widget_show (GTK_WIDGET (priv->expander1)); }else gtk_widget_hide (GTK_WIDGET (priv->expander1)); } void hkl_gui_engine_update (HklGuiEngine* self) { HklGuiEnginePrivate *priv = HKL_GUI_ENGINE_GET_PRIVATE(self); GtkTreeViewColumn* col; GList* cells; g_return_if_fail (self != NULL); update_pseudo_axis (self); col = gtk_tree_view_get_column(priv->treeview1, 1); cells = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(col)); g_object_set (G_OBJECT(cells->data), "background", NULL, NULL); g_list_free(cells); } void hkl_gui_engine_set_engine (HklGuiEngine *self, HklEngine *engine) { HklGuiEnginePrivate *priv = HKL_GUI_ENGINE_GET_PRIVATE(self); g_return_if_fail (self != NULL); g_return_if_fail (engine != NULL); priv->engine = engine; gtk_label_set_label (priv->label2, hkl_engine_name_get(priv->engine)); update_pseudo_axis (self); update_mode (self); update_mode_parameters (self); hkl_gui_engine_update(self); } static void combobox1_changed_cb (GtkComboBox* combobox, HklGuiEngine* self) { HklGuiEnginePrivate *priv = HKL_GUI_ENGINE_GET_PRIVATE(self); gchar *mode; GtkTreeIter iter = {0}; g_return_if_fail (self != NULL); g_return_if_fail (combobox != NULL); if(gtk_combo_box_get_active_iter(combobox, &iter)){ gtk_tree_model_get(GTK_TREE_MODEL(priv->store_mode), &iter, MODE_COL_NAME, &mode, -1); if(!hkl_engine_current_mode_set(priv->engine, mode, NULL)) return; update_mode_parameters(self); } } static void button1_clicked_cb (GtkButton* button, HklGuiEngine* self) { g_signal_emit(self, signals[CHANGED], 0); } static void button2_clicked_cb (GtkButton* button, HklGuiEngine* self) { HklGuiEnginePrivate *priv = HKL_GUI_ENGINE_GET_PRIVATE(self); if (HKL_ENGINE_CAPABILITIES_INITIALIZABLE & hkl_engine_capabilities_get(priv->engine)){ if(hkl_engine_initialized_set(priv->engine, TRUE, NULL)){ /* some init method update the parameters */ update_mode_parameters(self); } } } static void cell_tree_view_pseudo_axis_value_edited_cb (GtkCellRendererText* renderer, const gchar* path, const gchar* new_text, HklGuiEngine* self) { HklGuiEnginePrivate *priv = HKL_GUI_ENGINE_GET_PRIVATE(self); GtkTreeIter iter = {0}; if (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL(priv->store_pseudo), &iter, path)) { gdouble value = 0.0; value = atof(new_text); g_object_set (G_OBJECT(renderer), "background", "red", NULL, NULL); gtk_list_store_set (priv->store_pseudo, &iter, PSEUDO_COL_VALUE, value, -1); } } /* mode parameters */ void cellrendererspin2_edited_cb (GtkCellRendererText* renderer, const gchar* path, const gchar* new_text, HklGuiEngine* self) { HklGuiEnginePrivate *priv = HKL_GUI_ENGINE_GET_PRIVATE(self); GtkTreeIter iter = {0}; if (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL(priv->store_mode_parameter), &iter, path)) { const darray_string *parameters = hkl_engine_parameters_names_get(priv->engine); unsigned int n_values = darray_size(*parameters); double values[n_values]; int idx; gdouble new_value = 0.0; new_value = atof(new_text); /* set the mode parameter value */ hkl_engine_parameters_values_get(priv->engine, values, n_values, HKL_UNIT_USER); gtk_tree_model_get (GTK_TREE_MODEL(priv->store_mode_parameter), &iter, PSEUDO_COL_IDX, &idx, -1); values[idx] = new_value; if(hkl_engine_parameters_values_set(priv->engine, values, n_values, HKL_UNIT_USER, NULL)){ /* set the store */ gtk_list_store_set (priv->store_mode_parameter, &iter, PSEUDO_COL_VALUE, new_value, -1); } } } static void hkl_gui_engine_class_init (HklGuiEngineClass * class) { GObjectClass *gobject_class = G_OBJECT_CLASS (class); g_type_class_add_private (class, sizeof (HklGuiEnginePrivate)); /* virtual methods */ gobject_class->finalize = finalize; gobject_class->set_property = set_property; gobject_class->get_property = get_property; /* properties */ obj_properties[PROP_ENGINE] = g_param_spec_pointer ("engine", "Engine", "The Hkl Engine used underneath", G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); obj_properties[PROP_LISTSTORE] = g_param_spec_object ("liststore", "Liststore", "The liststore contaning all the pseudo axes values", GTK_TYPE_LIST_STORE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (gobject_class, N_PROPERTIES, obj_properties); /* signals */ signals[CHANGED] = g_signal_new ("changed", HKL_GUI_TYPE_ENGINE, G_SIGNAL_RUN_LAST, 0, /* class offset */ NULL, /* accumulator */ NULL, /* accu_data */ g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, /* return_type */ 0); } static void _connect_renderer(gpointer data, gpointer user_data) { GtkCellRenderer *renderer = GTK_CELL_RENDERER(data); HklGuiEngine *self = HKL_GUI_ENGINE(user_data); g_signal_connect_object (renderer, "edited", (GCallback) cell_tree_view_pseudo_axis_value_edited_cb, self, 0); } static void hkl_gui_engine_init (HklGuiEngine * self) { HklGuiEnginePrivate *priv = HKL_GUI_ENGINE_GET_PRIVATE(self); GtkBuilder *builder; GtkTreeViewColumn* col; GList* cells; priv->engine = NULL; priv->builder = builder = gtk_builder_new (); get_ui(builder, "pseudo.ui"); get_object(builder, GTK_FRAME, priv, frame1); get_object(builder, GTK_LABEL, priv, label2); get_object(builder, GTK_COMBO_BOX, priv, combobox1); get_object(builder, GTK_EXPANDER, priv, expander1); get_object(builder, GTK_TREE_VIEW, priv, treeview1); get_object(builder, GTK_BUTTON, priv, button1); get_object(builder, GTK_BUTTON, priv, button2); get_object(builder, GTK_LIST_STORE, priv, store_mode); get_object(builder, GTK_LIST_STORE, priv, store_pseudo); get_object(builder, GTK_LIST_STORE, priv, store_mode_parameter); gtk_builder_connect_signals (builder, self); g_signal_connect_object (priv->combobox1, "changed", (GCallback) combobox1_changed_cb, self, 0); g_signal_connect_object (priv->button1, "clicked", (GCallback) button1_clicked_cb, self, 0); g_signal_connect_object (priv->button2, "clicked", (GCallback) button2_clicked_cb, self, 0); col = gtk_tree_view_get_column (priv->treeview1, 1); cells = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(col)); g_list_foreach(cells, _connect_renderer, self); g_list_free(cells); } hkl-5.0.0.2449/gui/hkl-gui-macros.h0000644000175000017500000000353713236600666016712 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_GUI_MACROS_H__ #define __HKL_GUI_MACROS_H__ #include #include "hkl.h" #include "hkl-gui-pseudoaxes.h" /* TODO put in a private common header */ #define get_object(builder, type, priv, name) do{ \ priv->name = type(gtk_builder_get_object(builder, #name)); \ if(priv->name == NULL) \ fprintf(stdout, "%s is NULL ???", #name); \ }while(0); #define get_model(filename) \ (0 == access(filename, R_OK)) ? filename : \ ((0 == access("../data/" filename, R_OK)) ? "../data/" filename : \ ((0 == access(PKGDATA "/hkl3d/" filename, R_OK)) ? PKGDATA "/hkl3d/" filename : NULL)) static void get_ui(GtkBuilder *builder, const char *filename) { if (0 == access(filename, R_OK)) gtk_builder_add_from_file (builder, filename, NULL); else{ char *ui = g_build_filename(PKGDATA, filename, NULL); gtk_builder_add_from_file (builder, ui, NULL); g_free(ui); } } #endif /* __HKL_GUI_MACROS_H__ */ hkl-5.0.0.2449/gui/Makefile.am0000644000175000017500000000224713236600666015750 0ustar00piccapicca00000000000000bin_PROGRAMS = ghkl dist_man_MANS = ghkl.1 AM_CFLAGS = \ -I$(top_srcdir) \ -I$(top_srcdir)/hkl \ -DPKGDATA=\""$(pkgdatadir)"\" \ $(GSL_CFLAGS) \ $(GLIB_CFLAGS) \ $(GTK_CFLAGS) AM_LDFLAGS = \ -Wl,--export-dynamic \ $(GSL_LIBS) \ $(GLIB_LIBS) \ $(GTK_LIBS) ghkl_LDADD = \ $(top_builddir)/hkl/libhkl.la ghkl_SOURCES = \ hkl-gui-macros.h \ hkl-gui-pseudoaxes.c \ hkl-gui-pseudoaxes.h \ hkl-gui.c \ hkl-gui.h dist_pkgdata_DATA = ghkl.ui pseudo.ui appldir = ${datadir}/applications dist_appl_DATA = ghkl.desktop if HKL3D AM_CFLAGS += \ -I$(top_srcdir)/hkl3d \ -I$(top_srcdir)/hkl3d/bullet/src \ -DHKL3D \ $(G3D_CFLAGS) \ $(GTKGLEXT_CFLAGS) \ $(BULLET_CFLAGS) AM_LDFLAGS += -lstdc++\ $(G3D_LIBS) \ $(GTKGLEXT_LIBS) \ $(BULLET_LIBS) # force linkage using g++ for libhkl3d.la nodist_EXTRA_ghkl_SOURCES = dummy.cxx ghkl_LDADD += \ $(top_builddir)/hkl3d/libhkl3d.la ghkl_SOURCES += \ hkl-gui-3d-gl.c \ hkl-gui-3d-gl.h \ hkl-gui-3d.c \ hkl-gui-3d.h dist_pkgdata_DATA += 3d.ui endif # Support for GNU Flymake, in Emacs. check-syntax: AM_CFLAGS += -fsyntax-only -pipe check-syntax: test -z "$(CHK_SOURCES)" || $(COMPILE) $(CHK_SOURCES) .PHONY: check-syntax hkl-5.0.0.2449/gui/hkl-gui-3d.h0000644000175000017500000000373513236600666015734 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_GUI_3D_H__ #define __HKL_GUI_3D_H__ #include G_BEGIN_DECLS /* HklGui3D */ #define HKL_GUI_TYPE_3D (hkl_gui_3d_get_type ()) #define HKL_GUI_3D(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HKL_GUI_TYPE_3D, HklGui3D)) #define HKL_GUI_3D_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), HKL_GUI_TYPE_3D, HklGui3DClass)) #define HKL_GUI_IS_3D(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), HKL_GUI_TYPE_3D)) #define HKL_GUI_IS_3D_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), HKL_GUI_TYPE_3D)) #define HKL_GUI_3D_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), HKL_GUI_TYPE_3D, HklGuiEngineClass)) typedef struct _HklGui3D HklGui3D; typedef struct _HklGui3DClass HklGui3DClass; typedef struct _HklGui3DPrivate HklGui3DPrivate; GType hkl_gui_3d_get_type (void) G_GNUC_CONST; HklGui3D *hkl_gui_3d_new (const char *filename, HklGeometry *geometry); void hkl_gui_3d_is_colliding(HklGui3D *self); void hkl_gui_3d_invalidate(HklGui3D *self); GtkFrame *hkl_gui_3d_frame_get(HklGui3D *self); #endif // __HKL_GUI_3D_H__ hkl-5.0.0.2449/gui/ghkl.desktop0000644000175000017500000000030612710332473016220 0ustar00piccapicca00000000000000[Desktop Entry] Version=1.0 Type=Application Name=ghkl GenericName=Diffractometer Calculation Comment=hkl library graphical interface. TryExec=ghkl Exec=ghkl Categories=Education;Science;Physics;GTKhkl-5.0.0.2449/gui/3d.ui0000644000175000017500000002731412710332473014555 0ustar00piccapicca00000000000000 False 5 normal True True False vertical 2 True False end gtk-cancel False True True True False True False False 0 gtk-apply False True True True False True False False 1 False True end 0 button2 button1 True False 0 none True True 181 True True False True False GDK_EXPOSURE_MASK | GDK_STRUCTURE_MASK | GDK_SCROLL_MASK True True 1 False True True False True False False True False False True gtk-add False True False True False False True gtk-remove False True False True False False 3D view Reinitialize True gtk-home False True False True False False Aabb True gtk-apply False True False True 0 True True treestore1 False 0 True name 0 hide 1 True True 1 True True True False 3D hkl-5.0.0.2449/gui/ghkl.10000644000175000017500000000335413236600666014723 0ustar00piccapicca00000000000000.\" Hey, EMACS: -*- nroff -*- .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH GHKL 1 "June 1, 2010" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME ghkl \- program to do diffractometer computation .SH SYNOPSIS .B ghkl .RI [ options ] .SH DESCRIPTION This manual page documents briefly the .B ghkl commands. .PP .\" TeX users may be more comfortable with the \fB\fP and .\" \fI\fP escape sequences to invode bold face and italics, .\" respectively. \fBghkl\fP is a program that gives you access to all the hkl library functionalities. .SH OPTIONS These programs follow the usual GNU command line syntax, with long options starting with two dashes (`-'). A summary of options is included below. For a complete description, see the Info files. .TP .B \-h, \-\-help Show summary of options. .TP .B \-v, \-\-version Show version of program. .SH SEE ALSO .BR ghkl (1), .br The programs are documented fully by .IR "The hkl library Documentation" , available via the Info system. .SH AUTHOR ghkl was written by Picca Frédéric-Emmanuel .PP This manual page was written by Picca Frédéric-Emmanuel , for the Debian project (and may be used by others). hkl-5.0.0.2449/gui/hkl-gui-pseudoaxes.h0000644000175000017500000000516312770043434017577 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2013 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_GUI_ENGINE_H__ #define __HKL_GUI_ENGINE_H__ #include #include #include #include G_BEGIN_DECLS #define HKL_GUI_TYPE_ENGINE (hkl_gui_engine_get_type ()) #define HKL_GUI_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HKL_GUI_TYPE_ENGINE, HklGuiEngine)) #define HKL_GUI_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), HKL_GUI_TYPE_ENGINE, HklGuiEngineClass)) #define HKL_GUI_IS_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), HKL_GUI_TYPE_ENGINE)) #define HKL_GUI_IS_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), HKL_GUI_TYPE_ENGINE)) #define HKL_GUI_ENGINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), HKL_GUI_TYPE_ENGINE, HklGuiEngineClass)) typedef struct _HklGuiEngine HklGuiEngine; typedef struct _HklGuiEngineClass HklGuiEngineClass; typedef struct _HklGuiEnginePrivate HklGuiEnginePrivate; typedef enum { MODE_COL_NAME = 0, MODE_COL_NUM_COLS } ModeCol; typedef enum { PSEUDO_COL_NAME = 0, PSEUDO_COL_IDX, PSEUDO_COL_VALUE, PSEUDO_COL_NUM_COLS } PseudoCol; struct _HklGuiEngine { GObject parent_instance; /*< private >*/ HklGuiEnginePrivate * priv; }; struct _HklGuiEngineClass { GObjectClass parent_class; }; GType hkl_gui_engine_get_type (void) G_GNUC_CONST; HklGuiEngine* hkl_gui_engine_new (HklEngine* engine); void hkl_gui_engine_set_engine (HklGuiEngine *gui_engine, HklEngine *engine); HklEngine* hkl_gui_engine_get_engine (HklGuiEngine *gui_engine); GtkListStore* hkl_gui_engine_get_liststore (HklGuiEngine *gui_engine); GtkFrame *hkl_gui_engine_get_frame(HklGuiEngine *self); void hkl_gui_engine_update (HklGuiEngine* self); G_END_DECLS #endif /* __HKL_GUI_ENGINE_H__ */ hkl-5.0.0.2449/gui/hkl-gui-3d-gl.h0000644000175000017500000000370012770043434016320 0ustar00piccapicca00000000000000/* $Id: gl.h 108 2009-01-08 16:38:36Z mmmaddd $ */ /* G3DViewer - 3D object viewer Copyright (C) 2005, 2006 Markus Dahms This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _GL_H #define _GL_H #include #define G3D_FLAG_GL_SPECULAR (1L << 0) #define G3D_FLAG_GL_SHININESS (1L << 1) #define G3D_FLAG_GL_ALLTWOSIDE (1L << 2) #define G3D_FLAG_GL_TEXTURES (1L << 3) #define G3D_FLAG_GL_COLORS (1L << 4) #define G3D_FLAG_GL_POINTS (1L << 5) #define G3D_FLAG_GL_COORD_AXES (1L << 6) #define G3D_FLAG_GL_SHADOW (1L << 7) #define G3D_FLAG_GL_ISOMETRIC (1L << 8) typedef struct _G3DGLRenderState G3DGLRenderState; typedef struct { /* to be set by caller */ gfloat zoom; gfloat aspect; gfloat bgcolor[4]; gfloat quat[4]; G3DMatrix shadow_matrix[16]; G3DFloat min_y; guint32 norm_count; gfloat offx; gfloat offy; gint32 glflags; gboolean updated; gboolean initialized; /* can be read by caller */ guint32 avg_msec; /* to be used by caller only */ G3DGLRenderState *state; } G3DGLRenderOptions; void gl_set_twoside(gboolean twoside); void gl_set_textures(gboolean textures); void gl_load_texture(gpointer key, gpointer value, gpointer data); void gl_draw(G3DGLRenderOptions *options, G3DModel *model); #endif hkl-5.0.0.2449/gui/hkl-gui-3d-gl.c0000644000175000017500000004524712774775077016352 0ustar00piccapicca00000000000000/* $Id: gl.c 127 2009-09-05 19:45:12Z mmmaddd $ */ /* G3DViewer - 3D object viewer Copyright (C) 2005, 2006 Markus Dahms This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include #include #include #include #include #include "hkl-gui-3d-gl.h" struct _G3DGLRenderState { gint32 gl_dlist, gl_dlist_shadow; G3DMaterial *prev_material; guint32 prev_texid; }; #if DEBUG > 0 #define TIMING #endif #ifdef TIMING static GTimer *timer = NULL; #endif static void gl_init(void) { #if DEBUG > 1 g_printerr("init OpenGL\n"); #endif GLfloat light0_pos[4] = { -50.0, 50.0, 0.0, 0.0 }; GLfloat light0_col[4] = { 0.6, 0.6, 0.6, 1.0 }; GLfloat light1_pos[4] = { 50.0, 50.0, 0.0, 0.0 }; GLfloat light1_col[4] = { 0.4, 0.4, 0.4, 1.0 }; GLfloat ambient_lc[4] = { 0.35, 0.35, 0.35, 1.0 }; /* transparency and blending */ #if 0 glAlphaFunc(GL_GREATER, 0.1); #endif glEnable(GL_ALPHA_TEST); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glDepthFunc(GL_LEQUAL); glDepthMask(GL_TRUE); glEnable(GL_DEPTH_TEST); #if 0 glEnable(GL_LINE_SMOOTH); glEnable(GL_POLYGON_SMOOTH); #endif #if 0 glDisable(GL_DITHER); #endif glShadeModel(GL_SMOOTH); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient_lc); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0); #ifdef GL_LIGHT_MODEL_COLOR_CONTROL glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR); #endif glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); glLightfv(GL_LIGHT0, GL_POSITION, light0_pos); glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_col); glLightfv(GL_LIGHT1, GL_POSITION, light1_pos); glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_col); glLightfv(GL_LIGHT1, GL_SPECULAR, light1_col); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); glEnable(GL_LIGHTING); /* colors and materials */ glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); glEnable(GL_COLOR_MATERIAL); /* texture stuff */ glEnable(GL_TEXTURE_2D); #ifdef TIMING timer = g_timer_new(); #endif } void gl_set_twoside(gboolean twoside) { glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, twoside ? 1 : 0); glColorMaterial( twoside ? GL_FRONT_AND_BACK : GL_FRONT, GL_AMBIENT_AND_DIFFUSE); } void gl_set_textures(gboolean textures) { if(textures) glEnable(GL_TEXTURE_2D); else { glBindTexture(GL_TEXTURE_2D, 0); glDisable(GL_TEXTURE_2D); } } /* GHFunc */ void gl_load_texture(gpointer key, gpointer value, gpointer data) { G3DImage *image = (G3DImage *)value; gint32 env; #if 0 /* predefined - update object->_tex_images else... */ glGenTextures(1, &(image->tex_id)); #endif #if DEBUG > 0 g_print("gl: loading texture '%s' (%dx%dx%d) - id %d\n", image->name ? image->name : "(null)", image->width, image->height, image->depth, image->tex_id); #endif glBindTexture(GL_TEXTURE_2D, image->tex_id); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); switch(image->tex_env) { case G3D_TEXENV_BLEND: env = GL_BLEND; break; case G3D_TEXENV_MODULATE: env = GL_MODULATE; break; case G3D_TEXENV_DECAL: env = GL_DECAL; break; case G3D_TEXENV_REPLACE: env = GL_REPLACE; break; default: env = GL_MODULATE; break; } glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, env); gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGBA, image->width, image->height, GL_RGBA, GL_UNSIGNED_BYTE, image->pixeldata); } static inline void gl_update_material(G3DGLRenderOptions *options, G3DMaterial *material) { GLenum facetype; GLfloat normspec[4] = { 0.0, 0.0, 0.0, 1.0 }; g_return_if_fail(material != NULL); if(options->glflags & G3D_FLAG_GL_ALLTWOSIDE) facetype = GL_FRONT_AND_BACK; else facetype = GL_FRONT; if(options->glflags & G3D_FLAG_GL_COLORS) glColor4f( material->r, material->g, material->b, material->a); else glColor4f(0.7, 0.7, 0.7, 1.0); return; if(options->glflags & G3D_FLAG_GL_SPECULAR) glMaterialfv(facetype, GL_SPECULAR, material->specular); else glMaterialfv(facetype, GL_SPECULAR, normspec); if(options->glflags & G3D_FLAG_GL_SHININESS) glMaterialf(facetype, GL_SHININESS, material->shininess * 10); else glMaterialf(facetype, GL_SHININESS, 0.0); } static inline void gl_draw_face(G3DGLRenderOptions *options, G3DObject *object, gint32 i, gfloat min_a, gfloat max_a, gboolean *dont_render, gboolean *init, gboolean is_shadow) { gint32 j; if(*init) { options->state->prev_material = NULL; options->state->prev_texid = 0; *init = FALSE; } /* material check */ if(!is_shadow && (options->state->prev_material != object->_materials[i])) { if((object->_materials[i]->a < min_a) || (object->_materials[i]->a >= max_a)) { *dont_render = TRUE; return; } *dont_render = FALSE; glEnd(); gl_update_material(options, object->_materials[i]); glBegin(GL_TRIANGLES); options->state->prev_material = object->_materials[i]; options->state->prev_texid = 0; } if(*dont_render) return; /* texture stuff */ if(!is_shadow && (options->glflags & G3D_FLAG_GL_TEXTURES) && (object->_flags[i] & G3D_FLAG_FAC_TEXMAP)) { /* if texture has changed update to new texture */ if(object->_tex_images[i] != options->state->prev_texid) { options->state->prev_texid = object->_tex_images[i]; glEnd(); glBindTexture(GL_TEXTURE_2D, options->state->prev_texid); glBegin(GL_TRIANGLES); #if DEBUG > 5 g_print("gl: binding to texture id %d\n", prev_texid); #endif } } /* draw triangles */ for(j = 0; j < 3; j ++) { if(!is_shadow && (options->glflags & G3D_FLAG_GL_TEXTURES) && (object->_flags[i] & G3D_FLAG_FAC_TEXMAP)) { glTexCoord2f( object->_tex_coords[(i * 3 + j) * 2 + 0], object->_tex_coords[(i * 3 + j) * 2 + 1]); #if DEBUG > 5 g_print("gl: setting texture coords: %f, %f\n", object->_tex_coords[(i * 3 + j) * 2 + 0], object->_tex_coords[(i * 3 + j) * 2 + 1]); #endif } glNormal3f( object->_normals[(i*3+j)*3+0], object->_normals[(i*3+j)*3+1], object->_normals[(i*3+j)*3+2]); glVertex3f( object->vertex_data[object->_indices[i*3+j]*3+0], object->vertex_data[object->_indices[i*3+j]*3+1], object->vertex_data[object->_indices[i*3+j]*3+2]); } /* 1 .. 3 */ } static inline void gl_may_end(gint32 ftype) { if(ftype != -1) glEnd(); } static inline void gl_may_begin(gint32 ftype) { if(ftype != -1) glBegin(ftype); } static inline void gl_draw_face_list(G3DGLRenderOptions *options, G3DObject *object, gfloat min_a, gfloat max_a, gboolean *init, gboolean is_shadow) { GSList *fitem; G3DFace *face; G3DVector nx, ny, nz; gint32 prev_ftype = -1; gint32 index, j, ftype; if(*init) { options->state->prev_material = NULL; options->state->prev_texid = 0; *init = FALSE; } for(fitem = object->faces; fitem != NULL; fitem = fitem->next) { face = fitem->data; if(!is_shadow && (options->state->prev_material != face->material)) { if((face->material->a < min_a) || (face->material->a >= max_a)) { return; } gl_may_end(prev_ftype); gl_update_material(options, face->material); gl_may_begin(prev_ftype); options->state->prev_material = face->material; options->state->prev_texid = 0; } /* texture stuff */ if(!is_shadow && (options->glflags & G3D_FLAG_GL_TEXTURES) && (face->flags & G3D_FLAG_FAC_TEXMAP)) { /* if texture has changed update to new texture */ if(face->tex_image) { if(face->tex_image->tex_id != options->state->prev_texid) { options->state->prev_texid = face->tex_image->tex_id; gl_may_end(prev_ftype); glBindTexture(GL_TEXTURE_2D, options->state->prev_texid); gl_may_begin(prev_ftype); #if DEBUG > 5 g_print("gl: binding to texture id %d\n", prev_texid); #endif } } } /* texture stuff */ switch(face->vertex_count) { case 3: ftype = GL_TRIANGLES; break; case 4: ftype = GL_QUADS; break; case 2: ftype = GL_LINES; break; default: ftype = GL_POLYGON; #if DEBUG > 0 g_debug("face vertex count: %d", face->vertex_count); #endif break; } if(ftype != prev_ftype) { gl_may_end(prev_ftype); glBegin(ftype); prev_ftype = ftype; } if(!(face->flags & G3D_FLAG_FAC_NORMALS)) { face->normals = g_new0(G3DVector, face->vertex_count * 3); g3d_face_get_normal(face, object, &nx, &ny, &nz); g3d_vector_unify(&nx, &ny, &nz); for(j = 0; j < face->vertex_count; j ++) { face->normals[j * 3 + 0] = nx; face->normals[j * 3 + 1] = ny; face->normals[j * 3 + 2] = nz; } face->flags |= G3D_FLAG_FAC_NORMALS; } for(j = 0; j < face->vertex_count; j ++) { index = face->vertex_indices[j]; if(!is_shadow && (options->glflags & G3D_FLAG_GL_TEXTURES) && (face->flags & G3D_FLAG_FAC_TEXMAP)) { glTexCoord2f( face->tex_vertex_data[j * 2 + 0], face->tex_vertex_data[j * 2 + 1]); } glNormal3f( face->normals[j * 3 + 0], face->normals[j * 3 + 1], face->normals[j * 3 + 2]); glVertex3f( object->vertex_data[index * 3 + 0], object->vertex_data[index * 3 + 1], object->vertex_data[index * 3 + 2]); } } /* face loop */ gl_may_end(prev_ftype); } static inline void gl_draw_objects(G3DGLRenderOptions *options, GSList *objects, gfloat min_a, gfloat max_a, gboolean is_shadow) { GSList *olist; int i; G3DObject *object; gboolean dont_render; gboolean init = TRUE; olist = objects; while(olist != NULL) { object = (G3DObject *)olist->data; olist = olist->next; dont_render = FALSE; /* don't render invisible objects */ if(object->hide) continue; g_return_if_fail(object != NULL); #if DEBUG > 3 g_printerr("name: %s {", object->name); #endif #if DEBUG > 2 g_printerr("new object\n"); #endif glPushMatrix(); if(object->transformation) { glMultMatrixf(object->transformation->matrix); } #define EXPERIMENTAL #ifdef EXPERIMENTAL gl_draw_face_list(options, object, min_a, max_a, &init, is_shadow); #else glBegin(GL_TRIANGLES); for(i = 0; i < object->_num_faces; i ++) { gl_draw_face(options, object, i, min_a, max_a, &dont_render, &init, is_shadow); } /* all faces */ glEnd(); #endif if(!is_shadow && (options->glflags & G3D_FLAG_GL_POINTS)) { glColor4f(0.2, 0.2, 0.2, 1.0); glBegin(GL_POINTS); for(i = 0; i < object->vertex_count; i ++) { glVertex3f( object->vertex_data[i * 3 + 0], object->vertex_data[i * 3 + 1], object->vertex_data[i * 3 + 2]); } glEnd(); } /* handle sub-objects */ gl_draw_objects(options, object->objects, min_a, max_a, is_shadow); glPopMatrix(); } /* while olist != NULL */ } static inline void matrix_g3d_to_gl(G3DMatrix *g3dm, GLfloat glm[4][4]) { guint32 i, j; for(i = 0; i < 4; i ++) for(j = 0; j < 4; j ++) glm[i][j] = g3dm[i * 4 + j]; } static inline void gl_setup_view(G3DGLRenderOptions *options) { GLfloat m[4][4]; G3DMatrix *g3dm; G3DFloat w, h; glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(options->glflags & G3D_FLAG_GL_ISOMETRIC) { w = 0.5 * options->zoom; h = w / options->aspect; glOrtho(-w / 2.0, w / 2.0, -h / 2.0, h / 2.0, 1, 100); } else { gluPerspective(options->zoom, options->aspect, 1, 100); } /* translation of view */ glTranslatef(options->offx, options->offy, 0.0); glMatrixMode(GL_MODELVIEW); glClearColor( options->bgcolor[0], options->bgcolor[1], options->bgcolor[2], options->bgcolor[3]); glClearDepth(1.0); glClearIndex(0.3); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_ACCUM_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); glLoadIdentity(); glTranslatef(0, 0, -30); g3dm = g3d_matrix_new(); g3d_quat_to_matrix(options->quat, g3dm); matrix_g3d_to_gl(g3dm, m); g3d_matrix_free(g3dm); glMultMatrixf(&m[0][0]); } static void gl_setup_shadow_matrix(G3DGLRenderOptions *options, G3DVector *l, G3DVector *p, G3DVector *n) { G3DDouble c, d; G3DMatrix *m = options->shadow_matrix; d = n[0] * l[0] + n[1] * l[1] + n[2] * l[2]; c = p[0] * n[0] + p[1] * n[1] + p[2] * n[2] - d; m[0 * 4 + 0] = l[0] * n[0] + c; m[1 * 4 + 0] = l[0] * n[1]; m[2 * 4 + 0] = l[0] * n[2]; m[3 * 4 + 0] = - l[0] * c - l[0] * d; m[0 * 4 + 1] = l[1] * n[0]; m[1 * 4 + 1] = l[1] * n[1] + c; m[2 * 4 + 1] = l[1] * n[2]; m[3 * 4 + 1] = - l[1] * c - l[1] * d; m[0 * 4 + 2] = l[2] * n[0]; m[1 * 4 + 2] = l[2] * n[1]; m[2 * 4 + 2] = l[2] * n[2] + c; m[3 * 4 + 2] = - l[2] * c - l[2] * d; m[0 * 4 + 3] = n[0]; m[1 * 4 + 3] = n[1]; m[2 * 4 + 3] = n[2]; m[3 * 4 + 3] = -d; } void gl_draw_coord_system(G3DGLRenderOptions *options) { if(options->glflags & G3D_FLAG_GL_COORD_AXES) { /* x: red */ glColor3f(1.0, 0.0, 0.0); glBegin(GL_LINES); glVertex3f(0.0, 0.0, 0.0); glVertex3f(10.0, 0.0, 0.0); glEnd(); /* y: green */ glColor3f(0.0, 1.0, 0.0); glBegin(GL_LINES); glVertex3f(0.0, 0.0, 0.0); glVertex3f(0.0, 10.0, 0.0); glEnd(); /* z: blue */ glColor3f(0.0, 0.0, 1.0); glBegin(GL_LINES); glVertex3f(0.0, 0.0, 0.0); glVertex3f(0.0, 0.0, 10.0); glEnd(); } } static G3DFloat gl_min_y(GSList *objects) { G3DFloat min_y = 10.0, tmp_y; GSList *oitem; G3DObject *object; gint32 i; for(oitem = objects; oitem != NULL; oitem = oitem->next) { object = oitem->data; for(i = 0; i < object->vertex_count; i ++) if(object->vertex_data[i * 3 + 1] < min_y) min_y = object->vertex_data[i * 3 + 1]; tmp_y = gl_min_y(object->objects); if(tmp_y < min_y) min_y = tmp_y; } return min_y; } static void gl_draw_plane(G3DGLRenderOptions *options) { glBegin(GL_QUADS); glNormal3f(0.0, -1.0, 0.0); #define PLANE_MAX 12 glVertex3f(-PLANE_MAX, options->min_y - 0.001, PLANE_MAX); glVertex3f( PLANE_MAX, options->min_y - 0.001, PLANE_MAX); glVertex3f( PLANE_MAX, options->min_y - 0.001, -PLANE_MAX); glVertex3f(-PLANE_MAX, options->min_y - 0.001, -PLANE_MAX); #undef PLANE_MAX glEnd(); } static void gl_setup_floor_stencil(G3DGLRenderOptions *options) { glClear(GL_STENCIL_BUFFER_BIT); glDepthMask(GL_FALSE); glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); glEnable(GL_STENCIL_TEST); glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); glStencilFunc(GL_ALWAYS, 1, 0xffffffff); gl_draw_plane(options); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glDepthMask(GL_TRUE); glStencilFunc(GL_EQUAL, 1, 0xffffffff); glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); } static void gl_setup_shadow_stencil(G3DGLRenderOptions *options) { glClear(GL_STENCIL_BUFFER_BIT); glDepthMask(GL_FALSE); glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); glEnable(GL_STENCIL_TEST); glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); glStencilFunc(GL_ALWAYS, 1, 0xffffffff); glCallList(options->state->gl_dlist_shadow); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glDepthMask(GL_TRUE); glStencilFunc(GL_EQUAL, 1, 0xffffffff); glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); } void gl_draw(G3DGLRenderOptions *options, G3DModel *model) { gfloat f; #ifdef TIMING gboolean ignore_timing = FALSE; gulong msec, add; gdouble sec; #endif G3DVector light[3] = { 100.0, 500.0, 20.0 }; G3DVector plane[3] = { 0.0, -20.0, 0.0 }; G3DVector normal[3] = { 0.0, -1.0, 0.0 }; if(!options->initialized) { gl_init(); options->initialized = TRUE; #ifdef TIMING ignore_timing = TRUE; #endif } /* prepare viewport */ gl_setup_view(options); /* reset texture */ glBindTexture (GL_TEXTURE_2D, 0); if(model == NULL) return; #ifdef TIMING g_timer_start(timer); #endif if(options->updated) { options->updated = FALSE; #ifdef TIMING ignore_timing = TRUE; #endif #if DEBUG > 2 g_printerr("[gl] creating new display list\n"); #endif options->min_y = gl_min_y(model->objects); /* update render state */ if(options->state) { glDeleteLists(options->state->gl_dlist, 1); glDeleteLists(options->state->gl_dlist_shadow, 1); g_free(options->state); } options->state = g_new0(G3DGLRenderState, 1); /* create and execute display list */ options->state->gl_dlist = glGenLists(1); options->state->gl_dlist_shadow = glGenLists(1); glNewList(options->state->gl_dlist, GL_COMPILE); /* draw all objects */ for(f = 1.0; f >= 0.0; f -= 0.2) gl_draw_objects(options, model->objects, f, f + 0.2, FALSE); glEndList(); if(options->glflags & G3D_FLAG_GL_SHADOW) { glNewList(options->state->gl_dlist_shadow, GL_COMPILE); gl_draw_objects(options, model->objects, 0.0, 1.0, TRUE); glEndList(); } } g_return_if_fail(options->state != NULL); gl_draw_coord_system(options); if(options->glflags & G3D_FLAG_GL_SHADOW) { plane[1] = options->min_y; /* reflection */ glPushMatrix(); gl_setup_floor_stencil(options); glTranslatef(0.0, (options->min_y * 2), 0.0); glScalef(1.0, -1.0, 1.0); glCallList(options->state->gl_dlist); glPopMatrix(); /* plane */ glDisable(GL_LIGHTING); glBindTexture (GL_TEXTURE_2D, 0); glColor4f(0.5, 0.5, 0.5, 0.7); gl_draw_plane(options); glEnable(GL_LIGHTING); /* shadow */ glPushMatrix(); gl_setup_shadow_matrix(options, light, plane, normal); glBindTexture (GL_TEXTURE_2D, 0); glDisable(GL_LIGHTING); glDisable(GL_DEPTH_TEST); glMultMatrixf(options->shadow_matrix); gl_setup_shadow_stencil(options); glPopMatrix(); glPushMatrix(); glTranslatef(0.0, 0.001, 0.0); glColor4f(0.3, 0.3, 0.3, 0.7); gl_draw_plane(options); glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glPopMatrix(); glDisable(GL_STENCIL_TEST); } /* execute display list */ glCallList(options->state->gl_dlist); #ifdef TIMING /* get time to draw one frame to compare algorithms */ g_timer_stop(timer); if(!ignore_timing) { if(options->avg_msec == 0) { sec = g_timer_elapsed(timer, &msec); options->avg_msec = (gulong)sec * 1000000 + msec; } else { sec = g_timer_elapsed(timer, &msec); add = (gulong)sec * 1000000 + msec; options->avg_msec = (options->avg_msec + add) / 2; } } #endif #if DEBUG > 3 g_printerr("gl.c: drawn...\n"); #endif } hkl-5.0.0.2449/gui/Makefile.in0000644000175000017500000007364713237017633015772 0ustar00piccapicca00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = ghkl$(EXEEXT) @HKL3D_TRUE@am__append_1 = \ @HKL3D_TRUE@ -I$(top_srcdir)/hkl3d \ @HKL3D_TRUE@ -I$(top_srcdir)/hkl3d/bullet/src \ @HKL3D_TRUE@ -DHKL3D \ @HKL3D_TRUE@ $(G3D_CFLAGS) \ @HKL3D_TRUE@ $(GTKGLEXT_CFLAGS) \ @HKL3D_TRUE@ $(BULLET_CFLAGS) @HKL3D_TRUE@am__append_2 = -lstdc++\ @HKL3D_TRUE@ $(G3D_LIBS) \ @HKL3D_TRUE@ $(GTKGLEXT_LIBS) \ @HKL3D_TRUE@ $(BULLET_LIBS) @HKL3D_TRUE@am__append_3 = \ @HKL3D_TRUE@ $(top_builddir)/hkl3d/libhkl3d.la @HKL3D_TRUE@am__append_4 = \ @HKL3D_TRUE@ hkl-gui-3d-gl.c \ @HKL3D_TRUE@ hkl-gui-3d-gl.h \ @HKL3D_TRUE@ hkl-gui-3d.c \ @HKL3D_TRUE@ hkl-gui-3d.h @HKL3D_TRUE@am__append_5 = 3d.ui subdir = gui ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_appl_DATA) \ $(am__dist_pkgdata_DATA_DIST) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(appldir)" "$(DESTDIR)$(pkgdatadir)" PROGRAMS = $(bin_PROGRAMS) am__ghkl_SOURCES_DIST = hkl-gui-macros.h hkl-gui-pseudoaxes.c \ hkl-gui-pseudoaxes.h hkl-gui.c hkl-gui.h hkl-gui-3d-gl.c \ hkl-gui-3d-gl.h hkl-gui-3d.c hkl-gui-3d.h @HKL3D_TRUE@am__objects_1 = hkl-gui-3d-gl.$(OBJEXT) \ @HKL3D_TRUE@ hkl-gui-3d.$(OBJEXT) am_ghkl_OBJECTS = hkl-gui-pseudoaxes.$(OBJEXT) hkl-gui.$(OBJEXT) \ $(am__objects_1) ghkl_OBJECTS = $(am_ghkl_OBJECTS) ghkl_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la $(am__append_3) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(ghkl_SOURCES) $(nodist_EXTRA_ghkl_SOURCES) DIST_SOURCES = $(am__ghkl_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man_MANS) am__dist_pkgdata_DATA_DIST = ghkl.ui pseudo.ui 3d.ui DATA = $(dist_appl_DATA) $(dist_pkgdata_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \ $(top_srcdir)/config/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASY = @ASY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BULLET_CFLAGS = @BULLET_CFLAGS@ BULLET_LIBS = @BULLET_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMACS = @EMACS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ G3D_CFLAGS = @G3D_CFLAGS@ G3D_LIBS = @G3D_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GNUPLOT = @GNUPLOT@ GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ GOBJECT_LIBS = @GOBJECT_LIBS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTKGLEXT_CFLAGS = @GTKGLEXT_CFLAGS@ GTKGLEXT_LIBS = @GTKGLEXT_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HDF5_CFLAGS = @HDF5_CFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VMAJ = @VMAJ@ YAML_CFLAGS = @YAML_CFLAGS@ YAML_LIBS = @YAML_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ release_info = @release_info@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ version_info = @version_info@ dist_man_MANS = ghkl.1 AM_CFLAGS = -I$(top_srcdir) -I$(top_srcdir)/hkl \ -DPKGDATA=\""$(pkgdatadir)"\" $(GSL_CFLAGS) $(GLIB_CFLAGS) \ $(GTK_CFLAGS) $(am__append_1) AM_LDFLAGS = -Wl,--export-dynamic $(GSL_LIBS) $(GLIB_LIBS) $(GTK_LIBS) \ $(am__append_2) ghkl_LDADD = $(top_builddir)/hkl/libhkl.la $(am__append_3) ghkl_SOURCES = hkl-gui-macros.h hkl-gui-pseudoaxes.c \ hkl-gui-pseudoaxes.h hkl-gui.c hkl-gui.h $(am__append_4) dist_pkgdata_DATA = ghkl.ui pseudo.ui $(am__append_5) appldir = ${datadir}/applications dist_appl_DATA = ghkl.desktop # force linkage using g++ for libhkl3d.la @HKL3D_TRUE@nodist_EXTRA_ghkl_SOURCES = dummy.cxx all: all-am .SUFFIXES: .SUFFIXES: .c .cxx .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gui/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gui/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list ghkl$(EXEEXT): $(ghkl_OBJECTS) $(ghkl_DEPENDENCIES) $(EXTRA_ghkl_DEPENDENCIES) @rm -f ghkl$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(ghkl_OBJECTS) $(ghkl_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-gui-3d-gl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-gui-3d.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-gui-pseudoaxes.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-gui.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< .cxx.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cxx.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(dist_man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(dist_man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-dist_applDATA: $(dist_appl_DATA) @$(NORMAL_INSTALL) @list='$(dist_appl_DATA)'; test -n "$(appldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(appldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(appldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(appldir)" || exit $$?; \ done uninstall-dist_applDATA: @$(NORMAL_UNINSTALL) @list='$(dist_appl_DATA)'; test -n "$(appldir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(appldir)'; $(am__uninstall_files_from_dir) install-dist_pkgdataDATA: $(dist_pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-dist_pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(appldir)" "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_applDATA install-dist_pkgdataDATA \ install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_applDATA \ uninstall-dist_pkgdataDATA uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_applDATA \ install-dist_pkgdataDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-dist_applDATA \ uninstall-dist_pkgdataDATA uninstall-man uninstall-man1 .PRECIOUS: Makefile # Support for GNU Flymake, in Emacs. check-syntax: AM_CFLAGS += -fsyntax-only -pipe check-syntax: test -z "$(CHK_SOURCES)" || $(COMPILE) $(CHK_SOURCES) .PHONY: check-syntax # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: hkl-5.0.0.2449/gui/hkl-gui-3d.c0000644000175000017500000007152513236600666015731 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel * Oussama Sboui */ #include #include #include #include "hkl3d.h" #include "hkl/ccan/compiler/compiler.h" #include "hkl-gui.h" #include "hkl-gui-macros.h" #include "hkl-gui-3d.h" #include "hkl-gui-3d-gl.h" /* * updates glarea widget (redraw) */ static void glarea_update(GtkWidget *glarea) { gtk_widget_queue_draw_area(glarea, 0, 0, glarea->allocation.width, glarea->allocation.height); } typedef enum { HKL_GUI_3D_COL_NAME = 0, HKL_GUI_3D_COL_HIDE, HKL_GUI_3D_COL_MODEL, HKL_GUI_3D_COL_OBJECT, HKL_GUI_3D_COL_NUM_COLS } HklGui3DCol; enum { PROP_0, PROP_FILENAME, PROP_GEOMETRY, N_PROPERTIES }; /* Keep a pointer to the properties definition */ static GParamSpec *obj_properties[N_PROPERTIES] = { NULL, }; enum { CHANGED, N_SIGNALS }; static NEEDED guint signals[N_SIGNALS] = { 0 }; struct _HklGui3D { GObject parent_instance; /*< private >*/ HklGui3DPrivate * priv; }; struct _HklGui3DClass { GObjectClass parent_class; }; struct _HklGui3DPrivate { /* Properties */ char *filename; HklGeometry *geometry; /* Properties */ GtkBuilder *builder; GtkFrame *frame1; GtkVBox *vbox1; GtkTreeView *treeview1; GtkToolButton *toolbutton1; GtkToolButton *toolbutton2; GtkToolButton *toolbutton3; GtkFileChooserDialog *filechooserdialog1; GtkButton *button1; GtkButton *button2; GtkTreeStore *treestore1; GtkDrawingArea *drawingarea1; Hkl3D *hkl3d; /* opengl connected to the drawingarea1 */ G3DGLRenderOptions renderoptions; struct { gint32 beginx; gint32 beginy; } mouse; gboolean aabb; }; G_DEFINE_TYPE (HklGui3D, hkl_gui_3d, G_TYPE_OBJECT); #define HKL_GUI_3D_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), HKL_GUI_TYPE_3D, HklGui3DPrivate)) static void hkl_gui_3d_update_hkl3d_objects_TreeStore(HklGui3D *self) { HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(self); size_t i; size_t j; gtk_tree_store_clear(priv->treestore1); for(i=0; ihkl3d->config->len; ++i){ GtkTreeIter iter = {0}; gtk_tree_store_append(priv->treestore1, &iter, NULL); gtk_tree_store_set(priv->treestore1, &iter, HKL_GUI_3D_COL_NAME, priv->hkl3d->config->models[i]->filename, HKL_GUI_3D_COL_MODEL, priv->hkl3d->config->models[i], HKL_GUI_3D_COL_OBJECT, NULL, -1); for(j=0; jhkl3d->config->models[i]->len; ++j){ GtkTreeIter citer = {0}; gtk_tree_store_append(priv->treestore1, &citer, &iter); gtk_tree_store_set(priv->treestore1, &citer, HKL_GUI_3D_COL_NAME, priv->hkl3d->config->models[i]->objects[j]->axis_name, HKL_GUI_3D_COL_HIDE, priv->hkl3d->config->models[i]->objects[j]->hide, HKL_GUI_3D_COL_MODEL, priv->hkl3d->config->models[i], HKL_GUI_3D_COL_OBJECT, priv->hkl3d->config->models[i]->objects[j], -1); } } } /* properties */ static const char * hkl_gui_3d_get_filename(HklGui3D *self) { HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(self); return priv->filename; } static HklGeometry * hkl_gui_3d_get_geometry(HklGui3D *self) { HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(self); return priv->geometry; } void _filename_and_geometry(HklGui3D *self) { HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(self); if(priv->filename && priv->geometry){ if (priv->hkl3d) hkl3d_free(priv->hkl3d); priv->hkl3d = hkl3d_new(priv->filename, priv->geometry); if(priv->hkl3d){ /* priv->scene = hkl_gui_3d_scene_new(priv->hkl3d, FALSE, FALSE, FALSE, FALSE); */ hkl_gui_3d_update_hkl3d_objects_TreeStore(self); /* gtk_box_pack_start(GTK_BOX(priv->vbox1), */ /* GTK_WIDGET(priv->scene), */ /* TRUE, TRUE, 0); */ /* gtk_widget_show_all(GTK_WIDGET(priv->vbox1)); */ } } } static void hkl_gui_3d_set_filename(HklGui3D *self, const char *filename) { HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(self); if(priv->filename) g_free(priv->filename); priv->filename = g_strdup(filename); _filename_and_geometry(self); } static void hkl_gui_3d_set_geometry(HklGui3D *self, HklGeometry *geometry) { HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(self); priv->geometry = geometry; _filename_and_geometry(self); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { HklGui3D *self = HKL_GUI_3D (object); switch (prop_id) { case PROP_FILENAME: hkl_gui_3d_set_filename(self, g_value_get_string (value)); break; case PROP_GEOMETRY: hkl_gui_3d_set_geometry(self, g_value_get_pointer (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { HklGui3D *self = HKL_GUI_3D (object); switch (prop_id) { case PROP_FILENAME: g_value_set_string (value, hkl_gui_3d_get_filename (self)); break; case PROP_GEOMETRY: g_value_set_pointer (value, hkl_gui_3d_get_geometry (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void finalize (GObject* object) { HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(object); g_free(priv->filename); g_object_unref(priv->builder); hkl3d_free(priv->hkl3d); G_OBJECT_CLASS (hkl_gui_3d_parent_class)->finalize (object); } HklGui3D* hkl_gui_3d_new (const char *filename, HklGeometry *geometry) { return g_object_new (HKL_GUI_TYPE_3D, "filename", filename, "geometry", geometry, NULL); } GtkFrame *hkl_gui_3d_frame_get(HklGui3D *self) { HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(self); return priv->frame1; } void hkl_gui_3d_is_colliding(HklGui3D *self) { HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(self); if(priv->hkl3d) hkl3d_is_colliding(priv->hkl3d); } void hkl_gui_3d_invalidate(HklGui3D *self) { HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(self); priv->renderoptions.updated = TRUE; glarea_update(GTK_WIDGET(priv->drawingarea1)); } /************/ /* Callback */ /************/ void hkl_gui_3d_cellrenderertext2_toggled_cb(GtkCellRendererToggle* renderer, const gchar* path, gpointer user_data) { HklGui3D *self = HKL_GUI_3D(user_data); HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(user_data); guint hide; Hkl3DObject *object; GtkTreeIter iter = {0}; gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL(priv->treestore1), &iter, path); gtk_tree_model_get (GTK_TREE_MODEL(priv->treestore1), &iter, HKL_GUI_3D_COL_OBJECT, &object, -1); hide = !gtk_cell_renderer_toggle_get_active(renderer); if(object){ hkl3d_hide_object(priv->hkl3d, object, hide); gtk_tree_store_set (priv->treestore1, &iter, HKL_GUI_3D_COL_HIDE, hide, -1); hkl_gui_3d_is_colliding(self); hkl_gui_3d_invalidate(self); }else{ Hkl3DModel *model; gtk_tree_model_get (GTK_TREE_MODEL(priv->treestore1), &iter, HKL_GUI_3D_COL_MODEL, &model, -1); if(model){ GtkTreeIter children = {0}; gboolean valid; size_t i = 0; gtk_tree_store_set (priv->treestore1, &iter, HKL_GUI_3D_COL_HIDE, hide, -1); /* set all the children rows */ valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(priv->treestore1), &children, &iter); while(valid){ hkl3d_hide_object(priv->hkl3d, model->objects[i++], hide); gtk_tree_store_set (priv->treestore1, &children, HKL_GUI_3D_COL_HIDE, hide, -1); valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(priv->treestore1), &children); } hkl_gui_3d_is_colliding(self); hkl_gui_3d_invalidate(self); } } } void hkl_gui_3d_treeview1_cursor_changed_cb(GtkTreeView *tree_view, gpointer user_data) { int i; int j; HklGui3D *self = user_data; HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(user_data); GtkTreeIter iter = {0}; Hkl3DObject *object; GtkTreePath *path; GtkTreeViewColumn * column; gtk_tree_view_get_cursor(priv->treeview1, &path, &column); gtk_tree_model_get_iter(GTK_TREE_MODEL(priv->treestore1), &iter, path); gtk_tree_path_free(path); /* need to unselect of objects of all 3d models */ for(i=0; ihkl3d->config->len; ++i) for(j=0; jhkl3d->config->models[i]->len; ++j) priv->hkl3d->config->models[i]->objects[j]->selected = FALSE; /* now select the right object */ gtk_tree_model_get (GTK_TREE_MODEL(priv->treestore1), &iter, HKL_GUI_3D_COL_OBJECT, &object, -1); if(object) object->selected = TRUE; hkl_gui_3d_invalidate(self); } void hkl_gui_3d_toolbutton1_clicked_cb(GtkToolButton *toolbutton, gpointer user_data) { HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(user_data); gtk_widget_show(GTK_WIDGET(priv->filechooserdialog1)); } /* remove an object from the model */ void hkl_gui_3d_toolbutton2_clicked_cb(GtkToolButton *toolbutton, gpointer user_data) { HklGui3D *self = user_data; HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(user_data); GtkTreeIter iter = {0}; GtkTreePath *path; GtkTreeViewColumn * column; Hkl3DObject *object; gtk_tree_view_get_cursor(priv->treeview1, &path, &column); gtk_tree_model_get_iter(GTK_TREE_MODEL(priv->treestore1), &iter, path); gtk_tree_path_free(path); gtk_tree_model_get (GTK_TREE_MODEL(priv->treestore1), &iter, HKL_GUI_3D_COL_OBJECT, &object, -1); if(object){ hkl3d_remove_object(priv->hkl3d, object); hkl_gui_3d_update_hkl3d_objects_TreeStore(self); hkl_gui_3d_invalidate(self); } } static void reset_3d(G3DGLRenderOptions *renderoptions) { /* renderoptions */ renderoptions->updated = TRUE; renderoptions->initialized = FALSE; renderoptions->zoom = 7; renderoptions->bgcolor[0] = 0.9; renderoptions->bgcolor[1] = 0.8; renderoptions->bgcolor[2] = 0.6; renderoptions->bgcolor[3] = 1.0; renderoptions->glflags = // G3D_FLAG_GL_ISOMETRIC | G3D_FLAG_GL_SPECULAR | G3D_FLAG_GL_SHININESS | G3D_FLAG_GL_TEXTURES | G3D_FLAG_GL_COLORS| G3D_FLAG_GL_COORD_AXES; g3d_quat_trackball(renderoptions->quat, 0.0, 0.0, 0.0, 0.0, 0.8); /* rotate a little bit */ gfloat q1[4], q2[4]; gfloat a1[3] = { 0.0, 1.0, 0.0 }, a2[3] = {1.0, 0.0, 1.0}; g3d_quat_rotate(q1, a1, - 45.0 * G_PI / 180.0); g3d_quat_rotate(q2, a2, - 45.0 * G_PI / 180.0); g3d_quat_add(renderoptions->quat, q1, q2); } /* re-initialize the 3d view */ void hkl_gui_3d_toolbutton3_clicked_cb(GtkToolButton *toolbutton, gpointer user_data) { HklGui3D *self = user_data; HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(user_data); reset_3d(&priv->renderoptions); hkl_gui_3d_invalidate(self); } void hkl_gui_3d_toolbutton4_toggled_cb(GtkToggleToolButton *toggle_tool_button, gpointer user_data) { HklGui3D *self = user_data; HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(user_data); priv->aabb = gtk_toggle_tool_button_get_active(toggle_tool_button); hkl_gui_3d_invalidate(self); } void hkl_gui_3d_button1_clicked_cb(GtkButton *button, gpointer user_data) { HklGui3D *self = user_data; HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(user_data); GSList *filenames; GSList *filename; filenames = gtk_file_chooser_get_files(GTK_FILE_CHOOSER(priv->filechooserdialog1)); filename = filenames; while(filename){ GFile *file = filename->data; GFile *directory = g_file_get_parent(file); char *basename = g_file_get_basename(file); char *path = g_file_get_path(directory); hkl3d_add_model_from_file(priv->hkl3d, basename, path); hkl3d_connect_all_axes(priv->hkl3d); g_free(path); g_free(basename); g_object_unref(G_OBJECT(directory)); g_object_unref(G_OBJECT(file)); filename = g_slist_next(filename); }; hkl_gui_3d_update_hkl3d_objects_TreeStore(self); gtk_widget_hide(GTK_WIDGET(priv->filechooserdialog1)); g_slist_free(filenames); } void hkl_gui_3d_button2_clicked_cb(GtkButton *button, gpointer user_data) { HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(user_data); gtk_widget_hide(GTK_WIDGET(priv->filechooserdialog1)); } /***************/ /* OpenGL part */ /***************/ enum DisplayList { MODEL = 1, BULLET, COLLISION, AABBBOX, HIGHLIGHT }; static void hkl_gui_3d_draw_g3dmodel(HklGui3D *self) { int i; int j; HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(self); /* set the alpha canal to 0.5 if there is a collision */ for(i=0; ihkl3d->config->len; i++) for(j=0; jhkl3d->config->models[i]->len; j++){ GSList *faces; G3DFace *face; double alpha; if(priv->hkl3d->config->models[i]->objects[j]->is_colliding) alpha = 0.5; else alpha = 1; faces = priv->hkl3d->config->models[i]->objects[j]->g3d->faces; while(faces){ face = (G3DFace *)(faces->data); face->material->a = alpha; faces = g_slist_next(faces); } } /* draw the G3DObjects */ gl_draw(&priv->renderoptions, priv->hkl3d->model); } static void draw_g3dObject(G3DObject *object) { GSList *faces; float *vertex; faces = object->faces; vertex = object->vertex_data; glPushMatrix(); /* apply the transformation of the object */ if(object->transformation) glMultMatrixf(object->transformation->matrix); /* draw all faces with the current stencil */ while(faces){ G3DFace * face; face = (G3DFace*)faces->data; glBegin(GL_TRIANGLES); glVertex3d(vertex[3*(face->vertex_indices[0])], vertex[3*(face->vertex_indices[0])+1], vertex[3*(face->vertex_indices[0])+2]); glVertex3d(vertex[3*(face->vertex_indices[1])], vertex[3*(face->vertex_indices[1])+1], vertex[3*(face->vertex_indices[1])+2]); glVertex3d(vertex[3*(face->vertex_indices[2])], vertex[3*(face->vertex_indices[2])+1], vertex[3*(face->vertex_indices[2])+2]); glEnd(); faces = g_slist_next(faces); } glPopMatrix(); } void hkl_gui_3d_draw_selected(HklGui3D *self) { int i; int j; HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(self); /* glDisable(GL_LIGHTING); */ for(i=0; ihkl3d->config->len; i++) for(j=0; jhkl3d->config->models[i]->len; j++){ if(priv->hkl3d->config->models[i]->objects[j]->selected && !priv->hkl3d->config->models[i]->objects[j]->hide){ // Push the GL attribute bits so that we don't wreck any settings glPushAttrib( GL_ALL_ATTRIB_BITS ); // Enable polygon offsets, and offset filled polygons forward by 2.5 glEnable( GL_POLYGON_OFFSET_FILL ); glPolygonOffset( -2.5, -2.5); // Set the render mode to be line rendering with a thick line width glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); glLineWidth( 3.f ); // Set the colour to be pink glColor3f( 1.f, .0f, 1.f ); // Render the object draw_g3dObject(priv->hkl3d->config->models[i]->objects[j]->g3d); // Set the polygon mode to be filled triangles glLineWidth( 1.f ); glPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); // Set the colour to the background glCullFace(GL_FRONT); glColor3f( 0.0f, 0.0f, 0.0f ); // Render the object draw_g3dObject(priv->hkl3d->config->models[i]->objects[j]->g3d); // Pop the state changes off the attribute // to set things back how they were glPopAttrib(); } } /* glEnable(GL_LIGHTING); */ } static void draw_sphere(float radius, int lats, int longs) { int i, j; for(i=0;i<=lats;i++){ float lat0 = M_PI * (-0.5 + (float) (i - 1) / lats); float z0 = radius * sin(lat0); float zr0 = radius * cos(lat0); float lat1 = M_PI * (-0.5 + (float) i / lats); float z1 = radius * sin(lat1); float zr1 = radius * cos(lat1); glBegin(GL_QUAD_STRIP); for(j=0;j<=longs;j++) { float lng = 2 * M_PI * (float) (j - 1) / longs; float x = cos(lng); float y = sin(lng); glNormal3f(x * zr1, y * zr1, z1); glVertex3f(x * zr1, y * zr1, z1); glNormal3f(x * zr0, y * zr0, z0); glVertex3f(x * zr0, y * zr0, z0); } glEnd(); } } void hkl_gui_3d_draw_collisions(HklGui3D *self) { int i; int numManifolds; HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(self); /* glDisable(GL_LIGHTING); */ ///one way to draw all the contact points is iterating over contact manifolds / points: numManifolds = hkl3d_get_nb_manifolds(priv->hkl3d); for (i=0; ihkl3d, i); for (j=0; jhkl3d, i, j, &xa, &ya, &za, &xb, &yb, &zb); glDisable(GL_DEPTH_TEST); glBegin(GL_LINES); glColor4f(0, 0, 0, 1); glVertex3d(xa, ya, za); glVertex3d(xb, yb, zb); glEnd(); glColor4f(1, 0, 0, 1); glPushMatrix(); glTranslatef (xb, yb, zb); glScaled(0.05,0.05,0.05); draw_sphere(1, 10, 10); glPopMatrix(); glColor4f(1, 1, 0, 1); glPushMatrix(); glTranslatef (xa, ya, za); glScaled(0.05,0.05,0.05); draw_sphere(1, 10, 10); glPopMatrix(); glEnable(GL_DEPTH_TEST); } } glFlush(); } static void draw_line(const float from[3], const float to[3], const float fromColor[3], const float toColor[3]) { glBegin(GL_LINES); glColor3f(fromColor[0], fromColor[1], fromColor[2]); glVertex3d(from[0], from[1], from[2]); glColor3f(toColor[0], toColor[1], toColor[2]); glVertex3d(to[0], to[1], to[2]); glEnd(); } static void draw_aabb(const float from[3], const float to[3], const float color[3]) { float halfExtents[3] = { (to[0] - from[0]) * .5, (to[1] - from[1]) * .5, (to[2] - from[2]) * .5 }; float center[3] = { (to[0] + from[0]) * .5, (to[1] + from[1]) * .5, (to[2] + from[2]) * .5 }; int i, j; float edgecoord[3] = {1., 1., 1.}; for (i=0;i<4;i++){ for (j=0;j<3;j++){ float pa[3] = { edgecoord[0] * halfExtents[0] + center[0], edgecoord[1] * halfExtents[1] + center[1], edgecoord[2] * halfExtents[2] + center[2] }; int othercoord = j % 3; edgecoord[othercoord] *= -1.f; float pb[3] = { edgecoord[0] * halfExtents[0] + center[0], edgecoord[1] * halfExtents[1] + center[1], edgecoord[2] * halfExtents[2] + center[2] }; draw_line(pa, pb, color, color); } edgecoord[0] = -1; edgecoord[1] = -1; edgecoord[2] = -1; if (i < 3) edgecoord[i] *= -1; } } static void hkl_gui_3d_draw_aabb_object(const Hkl3DObject *self) { GLfloat from[3]; GLfloat to[3]; GLfloat color[3] = {1, 0, 0}; if(self->hide) return; hkl3d_object_aabb_get(self, from, to); draw_aabb(from, to, color); } void hkl_gui_3d_draw_aabb(const HklGui3D *self) { int i; int j; HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(self); for(i=0; ihkl3d->config->len; i++) for(j=0; jhkl3d->config->models[i]->len; j++) hkl_gui_3d_draw_aabb_object(priv->hkl3d->config->models[i]->objects[j]); glFlush(); } /* void hkl_gui_3d_draw_bullet_object(const Hkl3DObject *self) */ /* { */ /* int i; */ /* int j; */ /* btScalar m[16]; */ /* btVector3 worldBoundsMin; */ /* btVector3 worldBoundsMax; */ /* btVector3 aabbMin,aabbMax; */ /* /\* get the bounding box from bullet *\/ */ /* hkl3d_get_bounding_boxes(_hkl3d, &worldBoundsMin, &worldBoundsMax); */ /* object = _hkl3d->config->models[i]->objects[j]; */ /* if(!object->hide){ */ /* btCollisionObject *btObject; */ /* btObject = object->btObject; */ /* btObject->getWorldTransform().getOpenGLMatrix( m ); */ /* m_shapeDrawer.drawOpenGL(m, */ /* btObject->getCollisionShape(), */ /* *object->color, */ /* 0, /\* debug mode *\/ */ /* worldBoundsMin, */ /* worldBoundsMax); */ /* } */ /* glFlush(); */ /* } */ /* void */ /* hkl_gui_3d_draw_bullet(const HklGui3D *self) */ /* { */ /* int i; */ /* int j; */ /* HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(self); */ /* for(i=0; ihkl3d->config->len; i++) */ /* for(j=0; jhkl3d->config->models[i]->len; j++) */ /* hkl_gui_3d_draw_bullet_object(priv->hkl3d->config->models[i]->objects[j]); */ /* glFlush(); */ /* } */ gboolean hkl_gui_3d_drawingarea1_expose_cb(GtkWidget *drawing_area, GdkEventExpose *event, gpointer user_data) { GtkAllocation alloc; HklGui3D *self = HKL_GUI_3D(user_data); HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(user_data); GdkGLContext *gl_context = gtk_widget_get_gl_context(drawing_area); GdkGLDrawable *gl_drawable = gtk_widget_get_gl_drawable(drawing_area); /* Delimits the begining of the OpenGL execution. */ if (!gdk_gl_drawable_gl_begin(gl_drawable, gl_context)) g_assert_not_reached(); gtk_widget_get_allocation(drawing_area, &alloc); glViewport(0,0, alloc.width, alloc.height); priv->renderoptions.aspect = (gfloat)alloc.width / (gfloat)alloc.height; hkl_gui_3d_draw_g3dmodel(self); hkl_gui_3d_draw_selected(self); hkl_gui_3d_draw_collisions(self); if(priv->aabb) hkl_gui_3d_draw_aabb(self); /* hkl_gui_3d_draw_bullet(self); */ /* swap buffer if we're using double-buffering */ if (gdk_gl_drawable_is_double_buffered(gl_drawable)) gdk_gl_drawable_swap_buffers(gl_drawable); else { glFlush(); } /* Delimits the end of the OpenGL execution. */ gdk_gl_drawable_gl_end(gl_drawable); return FALSE; } gboolean hkl_gui_3d_drawingarea1_configure_event_cb(GtkWidget *drawing_area, GdkEventConfigure *event, gpointer user_data) { GtkAllocation alloc; HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(user_data); GdkGLContext *gl_context = gtk_widget_get_gl_context(drawing_area); GdkGLDrawable *gl_drawable = gtk_widget_get_gl_drawable(drawing_area); /* Delimits the begining of the OpenGL execution. */ if (!gdk_gl_drawable_gl_begin(gl_drawable, gl_context)) g_assert_not_reached(); gtk_widget_get_allocation(drawing_area, &alloc); glViewport(0,0, alloc.width, alloc.height); priv->renderoptions.aspect = (gfloat)alloc.width / (gfloat)alloc.height; /* Delimits the end of the OpenGL execution. */ gdk_gl_drawable_gl_end(gl_drawable); return FALSE; } gboolean hkl_gui_3d_idle_cb(gpointer user_data) { /* update control data/params in this function if needed */ GtkWidget *drawing_area = GTK_WIDGET(user_data); glarea_update(drawing_area); return FALSE; } gboolean hkl_gui_3d_drawingarea1_button_press_event_cb(GtkWidget *drawing_area, GdkEventButton* event, gpointer user_data) { HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(user_data); /* left mouse buttom: rotate object */ if(event->button == 1) { priv->mouse.beginx = event->x; priv->mouse.beginy = event->y; return TRUE; } // don't block return FALSE; } gboolean hkl_gui_3d_drawingarea1_scroll_event_cb(GtkWidget *drawing_area, GdkEventScroll *event, gpointer user_data) { GtkAllocation alloc; HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(user_data); gtk_widget_get_allocation(drawing_area, &alloc); #define ZOOM_BY 10 if(event->direction == GDK_SCROLL_DOWN) priv->renderoptions.zoom += ZOOM_BY; else priv->renderoptions.zoom -= ZOOM_BY; #undef ZOOM_BY if(priv->renderoptions.zoom < 1) priv->renderoptions.zoom = 1; if(priv->renderoptions.zoom > 120) priv->renderoptions.zoom = 120; glarea_update(drawing_area); return FALSE; } gboolean hkl_gui_3d_drawingarea1_motion_notify_event_cb(GtkWidget *drawing_area, GdkEventMotion* event, gpointer user_data) { HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(user_data); GtkAllocation alloc; gint x, y; GdkModifierType state; gtk_widget_get_allocation(drawing_area, &alloc); if(event->is_hint) gdk_window_get_pointer(event->window, &x, &y, &state); else { x = event->x; y = event->y; state = event->state; } /* left button pressed */ if(state & GDK_BUTTON1_MASK) { if(state & GDK_SHIFT_MASK) { /* shift pressed, translate view */ priv->renderoptions.offx += (float)(x - priv->mouse.beginx) / alloc.width / priv->renderoptions.zoom; priv->renderoptions.offy -= (float)(y - priv->mouse.beginy) / alloc.height / priv->renderoptions.zoom; } else { /* rotate view */ gfloat spin_quat[4]; g3d_quat_trackball(spin_quat, (2.0 * priv->mouse.beginx - alloc.width) / alloc.width, (alloc.height - 2.0 * priv->mouse.beginy) / alloc.height, (2.0 * x - alloc.width) / alloc.width, (alloc.height - 2.0 * y) / alloc.height, 0.8 /* trackball radius */); g3d_quat_add(priv->renderoptions.quat, spin_quat, priv->renderoptions.quat); /* normalize quat some times */ priv->renderoptions.norm_count ++; if(priv->renderoptions.norm_count > 97) { priv->renderoptions.norm_count = 0; g3d_quat_normalize(priv->renderoptions.quat); } /* g3d_quat_to_rotation_xyz(priv->renderoptions.quat, */ /* &rx, &ry, &rz); */ /* text = g_strdup_printf("%-.2f°, %-.2f°, %-.2f°", */ /* rx * 180.0 / G_PI, ry * 180.0 / G_PI, rz * 180.0 / G_PI); */ /* gui_glade_status(priv, text); */ /* g_free(text); */ } glarea_update(GTK_WIDGET(priv->drawingarea1)); } /* middle mouse button */ if(state & GDK_BUTTON2_MASK) { priv->renderoptions.zoom += ((y - priv->mouse.beginy) / (gfloat)alloc.height) * 40; if(priv->renderoptions.zoom < 1) priv->renderoptions.zoom = 1; if(priv->renderoptions.zoom > 120) priv->renderoptions.zoom = 120; glarea_update(GTK_WIDGET(priv->drawingarea1)); } priv->mouse.beginx = x; priv->mouse.beginy = y; return FALSE; } /*********************************************/ /* HklGui3D and HklGui3DClass initialization */ /*********************************************/ static void hkl_gui_3d_class_init (HklGui3DClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS (class); g_type_class_add_private (class, sizeof (HklGui3DPrivate)); /* virtual method */ gobject_class->finalize = finalize; gobject_class->set_property = set_property; gobject_class->get_property = get_property; /* properties */ obj_properties[PROP_FILENAME] = g_param_spec_string ("filename", "Filename", "The confuration filename", NULL, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); obj_properties[PROP_GEOMETRY] = g_param_spec_pointer ("geometry", "Geometry", "The Hkl Geometry used underneath", G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (gobject_class, N_PROPERTIES, obj_properties); } static void hkl_gui_3d_init (HklGui3D * self) { HklGui3DPrivate *priv = HKL_GUI_3D_GET_PRIVATE(self); GtkBuilder *builder; /* properties */ priv->filename = NULL; priv->geometry = NULL; priv->builder = builder = gtk_builder_new (); get_ui(builder, "3d.ui"); // widgets get_object(builder, GTK_FRAME, priv, frame1); get_object(builder, GTK_VBOX, priv, vbox1); get_object(builder, GTK_TREE_VIEW, priv, treeview1); get_object(builder, GTK_TOOL_BUTTON, priv, toolbutton1); get_object(builder, GTK_TOOL_BUTTON, priv, toolbutton2); get_object(builder, GTK_TOOL_BUTTON, priv, toolbutton3); get_object(builder, GTK_FILE_CHOOSER_DIALOG, priv, filechooserdialog1); get_object(builder, GTK_BUTTON, priv, button1); get_object(builder, GTK_BUTTON, priv, button2); get_object(builder, GTK_TREE_STORE, priv, treestore1); get_object(builder, GTK_DRAWING_AREA, priv, drawingarea1); gtk_builder_connect_signals (builder, self); /* OPENGL */ /* renderoptions */ reset_3d(&priv->renderoptions); priv->aabb = FALSE; /* attache GL capability to drawingarea1 */ GdkGLConfig *gl_config = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGBA | GDK_GL_MODE_DEPTH | GDK_GL_MODE_DOUBLE); if (!gl_config) g_assert_not_reached(); if (!gtk_widget_set_gl_capability(GTK_WIDGET(priv->drawingarea1), gl_config, NULL, TRUE, GDK_GL_RGBA_TYPE)) g_assert_not_reached(); gtk_widget_set_can_focus(GTK_WIDGET(priv->drawingarea1), TRUE); gtk_widget_add_events(GTK_WIDGET(priv->drawingarea1), GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_VISIBILITY_NOTIFY_MASK); /* connect the GL callbacks */ const gdouble TIMEOUT_PERIOD = 1000 / 60; g_timeout_add(TIMEOUT_PERIOD, hkl_gui_3d_idle_cb, priv->drawingarea1); g_signal_connect(priv->drawingarea1, "expose-event", G_CALLBACK(hkl_gui_3d_drawingarea1_expose_cb), self); g_signal_connect(priv->drawingarea1, "button-press-event", G_CALLBACK(hkl_gui_3d_drawingarea1_button_press_event_cb), self); g_signal_connect(priv->drawingarea1, "motion-notify-event", G_CALLBACK(hkl_gui_3d_drawingarea1_motion_notify_event_cb), self); } hkl-5.0.0.2449/gui/hkl-gui.h0000644000175000017500000000376513236600666015433 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include #include #include #include #include "hkl.h" #include "hkl-gui-pseudoaxes.h" #define HKL_GUI_TYPE_WINDOW (hkl_gui_window_get_type ()) #define HKL_GUI_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HKL_GUI_TYPE_WINDOW, HklGuiWindow)) #define HKL_GUI_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), HKL_GUI_TYPE_WINDOW, HklGuiWindowClass)) #define HKL_GUI_IS_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), HKL_GUI_TYPE_WINDOW)) #define HKL_GUI_IS_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), HKL_GUI_TYPE_WINDOW)) #define HKL_GUI_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), HKL_GUI_TYPE_WINDOW, HklGuiWindowClass)) typedef struct _HklGuiWindow HklGuiWindow; typedef struct _HklGuiWindowClass HklGuiWindowClass; typedef struct _HklGuiWindowPrivate HklGuiWindowPrivate; struct _HklGuiWindow { GObject parent_instance; HklGuiWindowPrivate * priv; }; struct _HklGuiWindowClass { GObjectClass parent_class; }; GType hkl_gui_window_get_type (void) G_GNUC_CONST; HklGuiWindow* hkl_gui_window_new (void); hkl-5.0.0.2449/gui/pseudo.ui0000644000175000017500000002475612774775077015602 0ustar00piccapicca00000000000000 True False gtk-goto-bottom True False 0 none True False 12 True False True True store_pseudo False 0 both True pseudo axis 0 value True 2 False False 0 True False 3 True False mode False False 0 True False store_mode True 0 True True 1 gtk-apply False True True True False True False False 2 Initialize False True True True False image1 right False False 3 False False 1 True True True True store_mode_parameter False False True 0 parameter 0 value True 2 True False parameters False False 2 True False frame1 hkl-5.0.0.2449/COPYING0000644000175000017500000010451412551527246014164 0ustar00piccapicca00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . hkl-5.0.0.2449/contrib/0000755000175000017500000000000013237020547014556 5ustar00piccapicca00000000000000hkl-5.0.0.2449/contrib/sixs/0000755000175000017500000000000013237020547015544 5ustar00piccapicca00000000000000hkl-5.0.0.2449/contrib/sixs/hkl3d.c0000644000175000017500000002235013236600666016724 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include //#undef H5_USE_16_API #include "hkl.h" #include #define ROOT "/nfs/ruche-sixs/sixs-soleil/com-sixs/2015/Shutdown4-5/XpadAu111/" #define FILENAME "align_FLY2_omega_00045.nxs" #define DATASET_IMAGE "com_113934/scan_data/xpad_image" #define DATASET_MU "com_113934/scan_data/UHV_MU" #define DATASET_OMEGA "com_113934/scan_data/UHV_OMEGA" #define DATASET_DELTA "com_113934/scan_data/UHV_DELTA" #define DATASET_GAMMA "com_113934/scan_data/UHV_GAMMA" #define DATASET_UB "com_113934/SIXS/I14-C-CX2__EX__DIFF-UHV__#1/UB" #define DATASET_WAVELENGTH "com_113934/SIXS/Monochromator/wavelength" #define DATASET_DIFFRACTOMETER_TYPE "com_113934/SIXS/I14-C-CX2__EX__DIFF-UHV__#1/type" /* Display all the node informations */ static herr_t attribute_info(hid_t location_id, const char *attr_name, const H5A_info_t *ainfo, void *op_data) { printf(" Attribute: %d %s\n", location_id, attr_name); return 0; } static herr_t file_info(hid_t loc_id, const char *name, const H5L_info_t *info, void *opdata) { H5O_info_t statbuf; hsize_t n = 0; /* * Get type of the object and display its name and type. * The name of the object is passed to this function by * the Library. Some magic :-) */ H5Oget_info_by_name(loc_id, name, &statbuf, H5P_DEFAULT); switch (statbuf.type) { case H5O_TYPE_UNKNOWN: printf(" Object with name %s is an unknown type\n", name); break; case H5O_TYPE_GROUP: printf(" Object with name %s is a group\n", name); break; case H5O_TYPE_DATASET: printf(" Object with name %s is a dataset\n", name); break; case H5O_TYPE_NAMED_DATATYPE: printf(" Object with name %s is a named datatype\n", name); break; default: printf(" Unable to identify an object "); } H5Aiterate_by_name(loc_id, name, H5_INDEX_NAME, H5_ITER_NATIVE, &n, attribute_info, NULL, H5P_DEFAULT); return 0; } typedef struct _HklDataframeSixsUhv HklDataframeSixsUhv; struct _HklDataframeSixsUhv { hid_t file; hid_t mu; hid_t omega; hid_t delta; hid_t gamma; hid_t ub; hid_t wavelength; hid_t dtype; }; static HklDataframeSixsUhv hkl_h5_open(const char *filename) { /* herr_t status; */ hid_t h5file_id; HklDataframeSixsUhv dataframe = {0}; /* is it an hdf5 file */ if (H5Fis_hdf5(filename) == 0) return dataframe; h5file_id = H5Fopen (filename, H5F_ACC_RDONLY, H5P_DEFAULT); if (h5file_id < 0) return dataframe; /* display all the node informations */ /* status = H5Lvisit(h5file_id, H5_INDEX_CRT_ORDER, H5_ITER_NATIVE, file_info, NULL); */ /* if(status < 0) */ /* return dataframe; */ dataframe.file = h5file_id; dataframe.mu = H5Dopen (h5file_id, DATASET_MU, H5P_DEFAULT); dataframe.omega = H5Dopen (h5file_id, DATASET_OMEGA, H5P_DEFAULT); dataframe.delta = H5Dopen (h5file_id, DATASET_DELTA, H5P_DEFAULT); dataframe.gamma = H5Dopen (h5file_id, DATASET_GAMMA, H5P_DEFAULT); dataframe.ub = H5Dopen (h5file_id, DATASET_UB, H5P_DEFAULT); dataframe.wavelength = H5Dopen (h5file_id, DATASET_WAVELENGTH, H5P_DEFAULT); dataframe.dtype = H5Dopen (h5file_id, DATASET_DIFFRACTOMETER_TYPE, H5P_DEFAULT); return dataframe; } static hssize_t check_ndims(hid_t dataset_id, int expected, hid_t *space_id) { *space_id = H5Dget_space (dataset_id); return H5Sget_simple_extent_ndims (*space_id) == expected; } static int hkl_h5_len(const HklDataframeSixsUhv *dataframe) { hid_t space_id = H5Dget_space (dataframe->mu); return H5Sget_simple_extent_npoints(space_id); } static int hkl_h5_is_valid(const HklDataframeSixsUhv *dataframe) { int res = TRUE; hid_t space_id; hssize_t n; /* check the dimensionnality of the axes */ res &= check_ndims(dataframe->mu, 1, &space_id); n = H5Sget_simple_extent_npoints(space_id); /* check the dimensionnality of all the axes */ res &= check_ndims(dataframe->omega, 1, &space_id); res &= n == H5Sget_simple_extent_npoints(space_id); res &= check_ndims(dataframe->delta, 1, &space_id); res &= n == H5Sget_simple_extent_npoints(space_id); res &= check_ndims(dataframe->gamma, 1, &space_id); res &= n == H5Sget_simple_extent_npoints(space_id); return res; } static herr_t hkl_h5_close(const HklDataframeSixsUhv *dataframe) { H5Dclose(dataframe->dtype); H5Dclose(dataframe->wavelength); H5Dclose(dataframe->ub); H5Dclose(dataframe->gamma); H5Dclose(dataframe->delta); H5Dclose(dataframe->omega); H5Dclose(dataframe->mu); return H5Fclose (dataframe->file); } typedef struct _HklDataframe HklDataframe; struct _HklDataframe { int i; int len; const HklDataframeSixsUhv *_dataframe; }; static const HklDataframe hkl_dataframe_first(const HklDataframeSixsUhv *dataframe) { HklDataframe frame; frame.i = 0; frame.len = hkl_h5_len(dataframe); frame._dataframe = dataframe; return frame; } static int hkl_dataframe_done(const HklDataframe dataframe) { return dataframe.i < dataframe.len; } static const HklDataframe hkl_dataframe_next(const HklDataframe dataframe) { HklDataframe frame = dataframe; frame.i++; return frame; } static herr_t get_position(hid_t dataset_id, int idx, double *position) { hid_t space_id; hid_t mem_type_id; hid_t mem_space_id; hsize_t count[1]; hsize_t offset[1]; mem_type_id = H5Dget_type(dataset_id); /* Get the dataspace handle */ if ( (space_id = H5Dget_space( dataset_id )) < 0 ) goto out; /* Define a hyperslab in the dataset of the size of the records */ offset[0] = idx; count[0] = 1; if ( H5Sselect_hyperslab(space_id, H5S_SELECT_SET, offset, NULL, count, NULL) < 0 ) goto out; /* Create a memory dataspace handle */ if ( (mem_space_id = H5Screate_simple( 1, count, NULL )) < 0 ) goto out; if ( H5Dread(dataset_id, mem_type_id, mem_space_id, space_id, H5P_DEFAULT, position ) < 0 ) goto out; /* Terminate access to the memory dataspace */ if ( H5Sclose( mem_space_id ) < 0 ) goto out; /* Terminate access to the dataspace */ if ( H5Sclose( space_id ) < 0 ) goto out; return 0; out: H5Tclose(mem_type_id); return -1; } static herr_t hkl_dataframe_geometry_get(const HklDataframe dataframe, HklGeometry **geometry) { herr_t status = 0; hid_t datatype; double wavelength; double axes[4]; /* create the HklGeometry */ if((*geometry) == NULL){ char *name; size_t n; HklFactory *factory; /* read the diffractometer type from the hdf5 file */ datatype = H5Dget_type(dataframe._dataframe->dtype); n = H5Tget_size(datatype); name = malloc(n+1); status = H5Dread(dataframe._dataframe->dtype, datatype, H5S_ALL, H5S_ALL, H5P_DEFAULT, name); if(status >= 0){ /* remove the last "\n" char */ name[n-1] = 0; factory = hkl_factory_get_by_name(name, NULL); *geometry = hkl_factory_create_new_geometry(factory); } free(name); H5Tclose(datatype); } /* read the wavelength double */ /* TODO check the right size */ /* TODO how to obtain the unit of the wavelength */ datatype = H5Dget_type(dataframe._dataframe->wavelength); status = H5Dread(dataframe._dataframe->wavelength, datatype, H5S_ALL, H5S_ALL, H5P_DEFAULT, &wavelength); if(status >= 0) hkl_geometry_wavelength_set(*geometry, wavelength, HKL_UNIT_USER, NULL); H5Tclose(datatype); /* read the axis positions of the ith dataframe */ /* check how to decide about the dataset connection and the hkl axes connection */ /* TODO check the right size */ /* TODO how to obtain the unit of the axes position */ if (get_position(dataframe._dataframe->mu, dataframe.i, &axes[0]) < 0) goto out; if (get_position(dataframe._dataframe->omega, dataframe.i, &axes[1]) < 0) goto out; if (get_position(dataframe._dataframe->gamma, dataframe.i, &axes[2]) < 0) goto out; if (get_position(dataframe._dataframe->delta, dataframe.i, &axes[3]) < 0) goto out; hkl_geometry_axis_values_set(*geometry, axes, 4, HKL_UNIT_USER, NULL); /* hkl_geometry_fprintf(stdout, *geometry); */ /* fprintf(stdout, "\n"); */ return 0; out: return -1; } int main (int argc, char ** argv) { const char *filename = ROOT FILENAME; HklDataframeSixsUhv dataframe_h5 = hkl_h5_open(filename); int res = hkl_h5_is_valid(&dataframe_h5); /* fprintf(stdout, "h5file is valid : %d\n", res); */ HklGeometry *geometry = NULL; for(HklDataframe dataframe = hkl_dataframe_first(&dataframe_h5); hkl_dataframe_done(dataframe); dataframe = hkl_dataframe_next(dataframe)) { hkl_dataframe_geometry_get(dataframe, &geometry); /* fprintf(stdout, " %d", dataframe.i); */ } hkl_geometry_free(geometry); hkl_h5_close(&dataframe_h5); return res; } hkl-5.0.0.2449/contrib/sixs/Makefile.am0000644000175000017500000000076713211070334017601 0ustar00piccapicca00000000000000bin_PROGRAMS = hkl3d AM_CFLAGS = \ -I$(top_srcdir) \ -I$(top_srcdir)/hkl \ $(GSL_CFLAGS) \ $(GLIB_CFLAGS) \ $(GTK_CFLAGS) \ $(HDF5_CFLAGS) AM_LDFLAGS = \ -Wl,--export-dynamic \ $(top_builddir)/hkl/libhkl.la \ $(GSL_LIBS) \ $(GLIB_LIBS) \ $(GTK_LIBS) \ $(HDF5_LIBS) hkl3d_LDADD = \ $(top_builddir)/hkl/libhkl.la # Support for GNU Flymake, in Emacs. check-syntax: AM_CFLAGS += -fsyntax-only -pipe check-syntax: test -z "$(CHK_SOURCES)" || $(COMPILE) $(CHK_SOURCES) .PHONY: check-syntax hkl-5.0.0.2449/contrib/sixs/Makefile.in0000644000175000017500000005206513237017633017623 0ustar00piccapicca00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = hkl3d$(EXEEXT) subdir = contrib/sixs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) hkl3d_SOURCES = hkl3d.c hkl3d_OBJECTS = hkl3d.$(OBJEXT) hkl3d_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = hkl3d.c DIST_SOURCES = hkl3d.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASY = @ASY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BULLET_CFLAGS = @BULLET_CFLAGS@ BULLET_LIBS = @BULLET_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMACS = @EMACS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ G3D_CFLAGS = @G3D_CFLAGS@ G3D_LIBS = @G3D_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GNUPLOT = @GNUPLOT@ GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ GOBJECT_LIBS = @GOBJECT_LIBS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTKGLEXT_CFLAGS = @GTKGLEXT_CFLAGS@ GTKGLEXT_LIBS = @GTKGLEXT_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HDF5_CFLAGS = @HDF5_CFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VMAJ = @VMAJ@ YAML_CFLAGS = @YAML_CFLAGS@ YAML_LIBS = @YAML_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ release_info = @release_info@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ version_info = @version_info@ AM_CFLAGS = \ -I$(top_srcdir) \ -I$(top_srcdir)/hkl \ $(GSL_CFLAGS) \ $(GLIB_CFLAGS) \ $(GTK_CFLAGS) \ $(HDF5_CFLAGS) AM_LDFLAGS = \ -Wl,--export-dynamic \ $(top_builddir)/hkl/libhkl.la \ $(GSL_LIBS) \ $(GLIB_LIBS) \ $(GTK_LIBS) \ $(HDF5_LIBS) hkl3d_LDADD = \ $(top_builddir)/hkl/libhkl.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu contrib/sixs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu contrib/sixs/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list hkl3d$(EXEEXT): $(hkl3d_OBJECTS) $(hkl3d_DEPENDENCIES) $(EXTRA_hkl3d_DEPENDENCIES) @rm -f hkl3d$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl3d_OBJECTS) $(hkl3d_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl3d.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS .PRECIOUS: Makefile # Support for GNU Flymake, in Emacs. check-syntax: AM_CFLAGS += -fsyntax-only -pipe check-syntax: test -z "$(CHK_SOURCES)" || $(COMPILE) $(CHK_SOURCES) .PHONY: check-syntax # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: hkl-5.0.0.2449/contrib/Makefile.am0000644000175000017500000000001713211070325016577 0ustar00piccapicca00000000000000SUBDIRS = sixs hkl-5.0.0.2449/contrib/Makefile.in0000644000175000017500000004706213237017633016636 0ustar00piccapicca00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = contrib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASY = @ASY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BULLET_CFLAGS = @BULLET_CFLAGS@ BULLET_LIBS = @BULLET_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMACS = @EMACS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ G3D_CFLAGS = @G3D_CFLAGS@ G3D_LIBS = @G3D_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GNUPLOT = @GNUPLOT@ GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ GOBJECT_LIBS = @GOBJECT_LIBS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTKGLEXT_CFLAGS = @GTKGLEXT_CFLAGS@ GTKGLEXT_LIBS = @GTKGLEXT_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HDF5_CFLAGS = @HDF5_CFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VMAJ = @VMAJ@ YAML_CFLAGS = @YAML_CFLAGS@ YAML_LIBS = @YAML_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ release_info = @release_info@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ version_info = @version_info@ SUBDIRS = sixs all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu contrib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu contrib/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: hkl-5.0.0.2449/hkl/0000755000175000017500000000000013237020537013673 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl/hkl-type-builtins.c0000644000175000017500000000563313237020043017422 0ustar00piccapicca00000000000000 /* This file is generated by glib-mkenums, do not modify it. This code is licensed under the same license as the containing project. Note that it links to GLib, so must comply with the LGPL linking clauses. */ #undef HKL_DISABLE_DEPRECATED #define HKL_ENABLE_BROKEN #include #include "hkl.h" #include "hkl-type-builtins.h" /* enumerations from "../hkl.h" */ GType hkl_unit_enum_get_type (void) { static GType etype = 0; if (G_UNLIKELY(etype == 0)) { static const GEnumValue values[] = { { HKL_UNIT_DEFAULT, "HKL_UNIT_DEFAULT", "default" }, { HKL_UNIT_USER, "HKL_UNIT_USER", "user" }, { 0, NULL, NULL } }; etype = g_enum_register_static (g_intern_static_string ("HklUnitEnum"), values); } return etype; } GType hkl_detector_type_get_type (void) { static GType etype = 0; if (G_UNLIKELY(etype == 0)) { static const GEnumValue values[] = { { HKL_DETECTOR_TYPE_0D, "HKL_DETECTOR_TYPE_0D", "0d" }, { 0, NULL, NULL } }; etype = g_enum_register_static (g_intern_static_string ("HklDetectorType"), values); } return etype; } GType hkl_engine_capabilities_get_type (void) { static GType etype = 0; if (G_UNLIKELY(etype == 0)) { static const GFlagsValue values[] = { { HKL_ENGINE_CAPABILITIES_READABLE, "HKL_ENGINE_CAPABILITIES_READABLE", "readable" }, { HKL_ENGINE_CAPABILITIES_WRITABLE, "HKL_ENGINE_CAPABILITIES_WRITABLE", "writable" }, { HKL_ENGINE_CAPABILITIES_INITIALIZABLE, "HKL_ENGINE_CAPABILITIES_INITIALIZABLE", "initializable" }, { 0, NULL, NULL } }; etype = g_flags_register_static (g_intern_static_string ("HklEngineCapabilities"), values); } return etype; } GType hkl_engine_axis_names_get_get_type (void) { static GType etype = 0; if (G_UNLIKELY(etype == 0)) { static const GEnumValue values[] = { { HKL_ENGINE_AXIS_NAMES_GET_READ, "HKL_ENGINE_AXIS_NAMES_GET_READ", "read" }, { HKL_ENGINE_AXIS_NAMES_GET_WRITE, "HKL_ENGINE_AXIS_NAMES_GET_WRITE", "write" }, { 0, NULL, NULL } }; etype = g_enum_register_static (g_intern_static_string ("HklEngineAxisNamesGet"), values); } return etype; } GType hkl_engine_dependencies_get_type (void) { static GType etype = 0; if (G_UNLIKELY(etype == 0)) { static const GFlagsValue values[] = { { HKL_ENGINE_DEPENDENCIES_AXES, "HKL_ENGINE_DEPENDENCIES_AXES", "axes" }, { HKL_ENGINE_DEPENDENCIES_ENERGY, "HKL_ENGINE_DEPENDENCIES_ENERGY", "energy" }, { HKL_ENGINE_DEPENDENCIES_SAMPLE, "HKL_ENGINE_DEPENDENCIES_SAMPLE", "sample" }, { 0, NULL, NULL } }; etype = g_flags_register_static (g_intern_static_string ("HklEngineDependencies"), values); } return etype; } #define __HKL_TYPE_BUILTINS_C__ /* Generated data ends here */ hkl-5.0.0.2449/hkl/api2/0000755000175000017500000000000013237020537014526 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl/api2/hkl2.h0000644000175000017500000001473713236600666015561 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_HKL2_H__ #define __HKL_HKL2_H__ #include "hkl.h" #include "hkl/ccan/generator/generator.h" G_BEGIN_DECLS /* Geometry */ enum geometry_e { GEOMETRY_E4CH, GEOMETRY_E4CV, GEOMETRY_E6C, GEOMETRY_K4CH, GEOMETRY_K4CV, GEOMETRY_K6C, GEOMETRY_SOLEIL_SIRIUS_KAPPA, GEOMETRY_SOLEIL_SIXS_MED_2_3, GEOMETRY_ZAXIS, }; struct Geometry { enum geometry_e tag; union { struct { double wavelength; union { double positions[4]; struct { double omega; double chi; double phi; double tth; }; }; } e4ch; struct { double wavelength; union { double positions[4]; struct { double omega; double chi; double phi; double tth; }; }; } e4cv; struct { double wavelength; union { double positions[6]; struct { double mu; double komega; double kappa; double kphi; double gamma; double delta; }; }; } e6c; struct { double wavelength; union { double positions[4]; struct { double komega; double kappa; double kphi; double tth; }; }; } k4ch; struct { double wavelength; union { double positions[4]; struct { double komega; double kappa; double kphi; double tth; }; }; } k4cv; struct { double wavelength; union { double positions[6]; struct { double mu; double komega; double kappa; double kphi; double gamma; double delta; }; }; } k6c; struct { double wavelength; union { double positions[6]; struct { double mu; double komega; double kappa; double kphi; double delta; double gamma; }; }; } soleil_sirius_kappa; struct { double wavelength; union { double positions[6]; struct { double beta; double mu; double omega; double gamma; double delta; double eta_a; }; }; } soleil_sixs_med_2_3; struct { double wavelength; union { double positions[4]; struct { double mu; double omega; double delta; double gamma; }; }; } zaxis; }; }; #define E4ch(_w, _o, _c, _p, _t) \ {.tag=GEOMETRY_E4CH, \ .e4ch={_w, {{_o, _c, _p, _t}}}} #define E4cv(_w, _o, _c, _p, _t) \ {.tag=GEOMETRY_E4CV, \ .e4cv={_w, {{_o, _c, _p, _t}}}} #define E6c(_w, _m, _ko, _ka, _kp, _g, _d) \ {.tag=GEOMETRY_E6C, \ .e6c={_w, {{_m, _ko, _ka, _kp, _g, _d}}}} #define K4ch(_w, _o, _c, _p, _t) \ {.tag=GEOMETRY_K4CH, \ .k4ch={_w, {{_o, _c, _p, _t}}}} #define K4cv(_w, _o, _c, _p, _t) \ {.tag=GEOMETRY_K4CV, \ .k4cv={_w, {{_o, _c, _p, _t}}}} #define K6c(_w, _m, _ko, _ka, _kp, _g, _d) \ {.tag=GEOMETRY_K6C, \ .k6c={_w, {{_m, _ko, _ka, _kp, _g, _d}}}} #define SoleilSiriusKappa(_w, _m, _ko, _ka, _kp, _d, _g) \ {.tag=GEOMETRY_SOLEIL_SIRIUS_KAPPA, \ .soleil_sirius_kappa={_w, {{_m, _ko, _ka, _kp, _d, _g}}}} #define SoleilSixsMed2_3(_w, _b, _m, _o, _g, _d, _e) \ {.tag=GEOMETRY_SOLEIL_SIXS_MED_2_3, \ .soleil_sixs_med_2_3={_w, {{_b, _m, _o, _g, _d, _e}}}} #define Zaxis(_w, _m, _o, _d, _g) \ {.tag=GEOMETRY_ZAXIS, \ .zaxis={_w, {{_m, _o, _d, _g}}}} extern HklGeometry *newGeometry(struct Geometry geometry); /* Engines */ extern HklEngineList *newEngines(struct Geometry geometry); /* Lattice */ enum lattice_e { LATTICE_CUBIC, LATTICE_HEXAGONAL, LATTICE_TETRAGONAL, }; struct Lattice { enum lattice_e tag; union { struct { double a; } cubic; struct { double a; double c; } hexagonal; struct { double a; double c; } tetragonal; }; }; #define Cubic(_a) {.tag=LATTICE_CUBIC, .cubic={_a}} #define Hexagonal(_a, _c) {.tag=LATTICE_HEXAGONAL, .hexagonal={_a, _c}} #define Tetragonal(_a, _c) {.tag=LATTICE_TETRAGONAL, .tetragonal={_a, _c}} extern HklLattice *newLattice(struct Lattice lattice); /* Sample */ struct Sample { const char *name; struct Lattice lattice; double ux; double uy; double uz; }; extern HklSample *newSample(struct Sample sample); extern const struct Sample cu; /* Mode */ enum mode_e { MODE_HKL_BISSECTOR_VERTICAL, MODE_HKL_E4CH_CONSTANT_PHI, }; struct Mode { enum mode_e tag; }; #define ModeHklBissectorVertical { .tag=MODE_HKL_BISSECTOR_VERTICAL } #define ModeHklE4CHConstantPhi { .tag=MODE_HKL_E4CH_CONSTANT_PHI } extern const char *getModeName(struct Mode mode); /* Engine */ enum engine_e { ENGINE_HKL, }; struct Engine { enum engine_e tag; union { struct {double h; double k; double l; struct Mode mode;} hkl; }; }; #define EngineHkl(h_, k_, l_, mode_) {.tag=ENGINE_HKL, .hkl={h_, k_, l_, mode_}} extern void Engine_fprintf(FILE *f, struct Engine engine); extern void Engine_header(FILE *f, const struct Engine engine); extern void Engine_save_as_dat(FILE *f, const struct Engine engine); extern HklGeometryList *Engine_solve(HklEngineList *engines, struct Engine econfig); /* HklTrajectory */ enum trajectory_e { TRAJECTORY_HKL_FROM_TO, }; struct Trajectory { enum trajectory_e tag; union { struct {double h0; double k0; double l0; double h1; double k1; double l1; uint n; struct Mode mode;} hklfromto; }; }; #define TrajectoryHklFromTo(h0_, k0_, l0_, h1_, k1_, l1_, n_, mode_) {.tag=TRAJECTORY_HKL_FROM_TO, .hklfromto={h0_, k0_, l0_, h1_, k1_, l1_, n_, .mode=mode_}} extern generator_declare(trajectory_gen, struct Engine, struct Trajectory, tconfig); extern uint Trajectory_len(struct Trajectory tconfig); extern HklGeometryList *Trajectory_solve(struct Trajectory tconfig, struct Geometry gconfig, struct Sample sconfig, uint move); G_END_DECLS #endif /* __HKL_TAP_H__ */ hkl-5.0.0.2449/hkl/api2/Makefile.am0000644000175000017500000000053713236600666016575 0ustar00piccapicca00000000000000AM_CPPFLAGS = -Wextra -D_DEFAULT_SOURCE \ -I$(top_srcdir) \ -I$(top_srcdir)/hkl \ $(GLIB_CFLAGS) \ $(GSL_CFLAGS) # need access to the private part AM_LDFLAGS = -Wl,--whole-archive,$(top_builddir)/hkl/.libs/libhkl.a,--no-whole-archive LDADD = \ $(GLIB_LIBS) \ $(GSL_LIBS) noinst_LTLIBRARIES=libhkl2.la libhkl2_la_SOURCES = \ hkl2.c \ hkl2.h hkl-5.0.0.2449/hkl/api2/hkl2.c0000644000175000017500000002042613217446663015550 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2012 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include #include "hkl/hkl-matrix-private.h" #include "hkl/hkl-macros-private.h" #include "hkl/hkl-pseudoaxis-private.h" #include "hkl/hkl-trajectory-private.h" #include "hkl/api2/hkl2.h" static const HklFactory *getFactory(struct Geometry geometry) { const HklFactory *self = NULL; switch(geometry.tag) { case GEOMETRY_E4CH: self = hkl_factory_get_by_name("E4CH", NULL); break; case GEOMETRY_E4CV: self = hkl_factory_get_by_name("E4CV", NULL); break; case GEOMETRY_E6C: self = hkl_factory_get_by_name("E6C", NULL); break; case GEOMETRY_K4CH: self = hkl_factory_get_by_name("K4CH", NULL); break; case GEOMETRY_K4CV: self = hkl_factory_get_by_name("K4CV", NULL); break; case GEOMETRY_K6C: self = hkl_factory_get_by_name("K6C", NULL); break; case GEOMETRY_SOLEIL_SIRIUS_KAPPA: self = hkl_factory_get_by_name("SOLEIL SIRIUS KAPPA", NULL); break; case GEOMETRY_SOLEIL_SIXS_MED_2_3: self = hkl_factory_get_by_name("SOLEIL SIXS MED2+3", NULL); break; case GEOMETRY_ZAXIS: self = hkl_factory_get_by_name("ZAXIS", NULL); break; } return self; } HklEngineList *newEngines(struct Geometry geometry) { return hkl_factory_create_new_engine_list(getFactory(geometry)); } HklGeometry *newGeometry(struct Geometry geometry) { HklGeometry *self = hkl_factory_create_new_geometry(getFactory(geometry)); #define NEW_GEOMETRY(type_) do{ \ if(!hkl_geometry_axis_values_set(self, \ geometry.type_.positions, \ ARRAY_SIZE(geometry.type_.positions), \ HKL_UNIT_USER, NULL)){ \ goto failed; \ } \ if(!hkl_geometry_wavelength_set(self, geometry.type_.wavelength, \ HKL_UNIT_DEFAULT, NULL)){ \ goto failed; \ } \ }while(0) switch (geometry.tag) { case GEOMETRY_E4CH: NEW_GEOMETRY(e4ch); break; case GEOMETRY_E4CV: NEW_GEOMETRY(e4cv); break; case GEOMETRY_E6C: NEW_GEOMETRY(e6c); break; case GEOMETRY_K4CH: NEW_GEOMETRY(k4ch); break; case GEOMETRY_K4CV: NEW_GEOMETRY(k4cv); break; case GEOMETRY_K6C: NEW_GEOMETRY(k6c); break; case GEOMETRY_SOLEIL_SIRIUS_KAPPA: NEW_GEOMETRY(soleil_sirius_kappa); break; case GEOMETRY_SOLEIL_SIXS_MED_2_3: NEW_GEOMETRY(soleil_sixs_med_2_3); break; case GEOMETRY_ZAXIS: NEW_GEOMETRY(zaxis); break; } return self; failed: hkl_geometry_free(self); return NULL; #undef NEW_GEOMETRY } /* Lattice */ HklLattice *newLattice(struct Lattice lattice) { HklLattice *self = NULL; switch (lattice.tag) { case LATTICE_CUBIC: self = hkl_lattice_new(lattice.cubic.a, lattice.cubic.a, lattice.cubic.a, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, NULL); break; case LATTICE_HEXAGONAL: self = hkl_lattice_new(lattice.hexagonal.a, lattice.hexagonal.a, lattice.hexagonal.c, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, 120*HKL_DEGTORAD, NULL); break; case LATTICE_TETRAGONAL: self = hkl_lattice_new(lattice.tetragonal.a, lattice.tetragonal.a, lattice.tetragonal.c, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, NULL); break; } return self; } /* Sample */ HklSample *newSample(struct Sample sample) { HklSample *self; HklLattice *lattice; HklMatrix *U; self = hkl_sample_new(sample.name); lattice = newLattice(sample.lattice); hkl_sample_lattice_set(self, lattice); hkl_lattice_free(lattice); U = hkl_matrix_new_euler(sample.ux, sample.uy, sample.uz); hkl_sample_U_set(self, U, NULL); hkl_matrix_free(U); return self; } const struct Sample cu = { .name = "default", .lattice = Cubic(1.54), .ux = 0.0 * HKL_DEGTORAD, .uy = 0.0 * HKL_DEGTORAD, .uz = 0.0 * HKL_DEGTORAD, }; /* Mode */ const char *getModeName(struct Mode mode) { const char *name = NULL; switch(mode.tag){ case MODE_HKL_BISSECTOR_VERTICAL: name = "bissector_vertical"; break; case MODE_HKL_E4CH_CONSTANT_PHI: name = "constant_phi"; break; } return name; } /* Engine */ void Engine_fprintf(FILE *f, struct Engine engine) { switch(engine.tag){ case ENGINE_HKL: { fprintf(f, "hkl: %f %f %f\n", engine.hkl.h, engine.hkl.k, engine.hkl.l); } break; } } void Engine_header(FILE *f, const struct Engine engine) { switch(engine.tag){ case ENGINE_HKL: { fprintf(f, "h k l"); } break; } } void Engine_save_as_dat(FILE *f, const struct Engine engine) { switch(engine.tag){ case ENGINE_HKL: { fprintf(f, "%f %f %f", engine.hkl.h, engine.hkl.k, engine.hkl.l); } break; } } HklGeometryList *Engine_solve(HklEngineList *engines, struct Engine econfig) { HklGeometryList *geometries = NULL; switch(econfig.tag) { case ENGINE_HKL: { double values[3] = {econfig.hkl.h, econfig.hkl.k, econfig.hkl.l}; HklEngine *engine = hkl_engine_list_engine_get_by_name(engines, "hkl", NULL); const char *mode_name = getModeName(econfig.hkl.mode); if(hkl_engine_current_mode_set(engine, mode_name, NULL)){ geometries = hkl_engine_pseudo_axis_values_set(engine, values, ARRAY_SIZE(values), HKL_UNIT_DEFAULT, NULL); } } break; } return geometries; } /* HklTrajectory */ generator_def(trajectory_gen, struct Engine, struct Trajectory, tconfig) { switch(tconfig.tag){ case TRAJECTORY_HKL_FROM_TO: { uint i; double dh = (tconfig.hklfromto.h1 - tconfig.hklfromto.h0) / (tconfig.hklfromto.n); double dk = (tconfig.hklfromto.k1 - tconfig.hklfromto.k0) / (tconfig.hklfromto.n); double dl = (tconfig.hklfromto.l1 - tconfig.hklfromto.l0) / (tconfig.hklfromto.n); for(i=0; i&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = hkl/api2 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libhkl2_la_LIBADD = am_libhkl2_la_OBJECTS = hkl2.lo libhkl2_la_OBJECTS = $(am_libhkl2_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libhkl2_la_SOURCES) DIST_SOURCES = $(libhkl2_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASY = @ASY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BULLET_CFLAGS = @BULLET_CFLAGS@ BULLET_LIBS = @BULLET_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMACS = @EMACS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ G3D_CFLAGS = @G3D_CFLAGS@ G3D_LIBS = @G3D_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GNUPLOT = @GNUPLOT@ GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ GOBJECT_LIBS = @GOBJECT_LIBS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTKGLEXT_CFLAGS = @GTKGLEXT_CFLAGS@ GTKGLEXT_LIBS = @GTKGLEXT_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HDF5_CFLAGS = @HDF5_CFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VMAJ = @VMAJ@ YAML_CFLAGS = @YAML_CFLAGS@ YAML_LIBS = @YAML_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ release_info = @release_info@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ version_info = @version_info@ AM_CPPFLAGS = -Wextra -D_DEFAULT_SOURCE \ -I$(top_srcdir) \ -I$(top_srcdir)/hkl \ $(GLIB_CFLAGS) \ $(GSL_CFLAGS) # need access to the private part AM_LDFLAGS = -Wl,--whole-archive,$(top_builddir)/hkl/.libs/libhkl.a,--no-whole-archive LDADD = \ $(GLIB_LIBS) \ $(GSL_LIBS) noinst_LTLIBRARIES = libhkl2.la libhkl2_la_SOURCES = \ hkl2.c \ hkl2.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu hkl/api2/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu hkl/api2/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libhkl2.la: $(libhkl2_la_OBJECTS) $(libhkl2_la_DEPENDENCIES) $(EXTRA_libhkl2_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libhkl2_la_OBJECTS) $(libhkl2_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl2.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: hkl-5.0.0.2449/hkl/hkl-interval.c0000644000175000017500000002424313236600666016452 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #define _GNU_SOURCE #include #include // for floor, M_PI_2, acos, asin, etc #include // for free, NULL #include "hkl-interval-private.h" // for HklInterval #include "hkl-macros-private.h" // for HKL_MALLOC #include "hkl.h" // for FALSE, TRUE /** * hkl_interval_dup: (skip) * @self: * * copy an #HklInterval * * Returns: **/ HklInterval *hkl_interval_dup(const HklInterval *self) { if(!self) return NULL; HklInterval *dup = HKL_MALLOC(HklInterval); *dup = *self; return dup; } /** * hkl_interval_free: (skip) * @self: * * delete an #HklInterval **/ void hkl_interval_free(HklInterval *self) { if(self) free(self); } /** * hkl_interval_cmp: (skip) * @self: * @interval: * * compare two intervals * * Returns: **/ int hkl_interval_cmp(const HklInterval *self, const HklInterval *interval) { return (fabs(self->min - interval->min) > HKL_EPSILON) || (fabs(self->max - interval->max) > HKL_EPSILON); } /** * hkl_interval_plus_interval: (skip) * @self: * @interval: * * add two ontervals **/ void hkl_interval_plus_interval(HklInterval *self, const HklInterval *interval) { self->min += interval->min; self->max += interval->max; } /** * hkl_interval_plus_double: (skip) * @self: * @d: * * add to an interval a double **/ void hkl_interval_plus_double(HklInterval *self, double const d) { self->min += d; self->max += d; } /** * hkl_interval_minus_interval: (skip) * @self: * @interval: * * substract two #HklInterval **/ void hkl_interval_minus_interval(HklInterval *self, const HklInterval *interval) { self->min -= interval->max; self->max -= interval->min; } /** * hkl_interval_minus_double: (skip) * @self: * @d: * * subst a double to an #HklInterval **/ void hkl_interval_minus_double(HklInterval *self, double const d) { self->min -= d; self->max -= d; } /** * hkl_interval_times_interval: (skip) * @self: * @interval: * * multiply two #HklInterval **/ void hkl_interval_times_interval(HklInterval *self, const HklInterval *interval) { double min; double max; double m1 = self->min * interval->min; double m2 = self->min * interval->max; double m3 = self->max * interval->min; double m4 = self->max * interval->max; min = m1; if (m2 < min) min = m2; if (m3 < min) min = m3; if (m4 < min) min = m4; max = m1; if (m2 > max) max = m2; if (m3 > max) max = m3; if (m4 > max) max = m4; self->min = min; self->max = max; } /** * hkl_interval_times_double: (skip) * @self: * @d: * * multiply an #HklInterval by a double **/ void hkl_interval_times_double(HklInterval *self, double const d) { double min; double max; if (d < 0) { min = self->max * d; max = self->min * d; } else { min = self->min * d; max = self->max * d; } self->min = min; self->max = max; } /** * hkl_interval_divides_double: (skip) * @self: * @d: * * divide an #HklInterval by a double **/ void hkl_interval_divides_double(HklInterval *self, double const d) { double min = self->min / d; double max = self->max / d; if (min > max){ double tmp = min; min = max; max = tmp; } self->min = min; self->max = max; } /** * hkl_interval_contain_zero: (skip) * @self: * * check if an #HklInterval contain zero * * Returns: **/ int hkl_interval_contain_zero(HklInterval const *self) { if (self->min <= 0 && self->max >= 0) return TRUE; else return FALSE; } /** * hkl_interval_cos: (skip) * @self: * * compute the cosinus of an #HklInterval **/ void hkl_interval_cos(HklInterval *self) { double min = 0; double max = 0; double cmin; double cmax; cmin = cos(self->min); cmax = cos(self->max); if (self->max - self->min >= 2 * M_PI) { min = -1; max = 1; } else { int quad_min; int quad_max; quad_min = (int)floor(self->min / M_PI_2) % 4; if (quad_min < 0) quad_min += 4; quad_max = (int)floor(self->max / M_PI_2) % 4; if (quad_max < 0) quad_max += 4; switch (quad_max) { case 0: switch (quad_min) { case 0: min = cmax; max = cmin; break; case 1: min = -1; max = 1; break; case 2: min = cmin; max = 1; break; case 3: if (cmin < cmax) { min = cmin; max = 1; } else { min = cmax; max = 1; } break; } break; case 1: switch (quad_min) { case 0: min = cmax; max = cmin; break; case 1: min = -1; max = 1; break; case 2: if (cmin < cmax) { min = cmin; max = 1; } else { min = cmax; max = 1; } break; case 3: min = cmax; max = 1; break; } break; case 2: switch (quad_min) { case 0: min = -1; max = cmin; break; case 1: if (cmin < cmax) { min = -1; max = cmax; } else { min = -1; max = cmin; } break; case 2: if (cmin < cmax) { min = cmin; max = cmax; } else { min = -1; max = 1; } break; case 3: min = -1; max = 1; break; } break; case 3: switch (quad_min) { case 0: if (cmin < cmax) { min = -1; max = cmax; } else { min = -1; max = cmin; } break; case 1: min = -1; max = cmax; break; case 2: min = cmin; max = cmax; break; case 3: if (cmin < cmax) { min = cmin; max = cmax; } else { min = -1; max = 1; } break; } break; } } self->min = min; self->max = max; } /** * hkl_interval_acos: (skip) * @self: * * compute the arc cosinus of an #HklInterval **/ void hkl_interval_acos(HklInterval *self) { double tmp; tmp = self->min; self->min = acos(self->max); self->max = acos(tmp); } /** * hkl_interval_sin: (skip) * @self: * * compute the sin of an #HklInterval **/ void hkl_interval_sin(HklInterval *self) { double min = 0; double max = 0; double smin; double smax; smin = sin(self->min); smax = sin(self->max); /* if there is at least one period in b, then a = [-1, 1] */ if ( self->max - self->min >= 2 * M_PI) { min = -1; max = 1; } else { int quad_min; int quad_max; quad_min = (int)floor(self->min / M_PI_2) % 4; if (quad_min < 0) quad_min += 4; quad_max = (int)floor(self->max / M_PI_2) % 4; if (quad_max < 0) quad_max += 4; switch (quad_max) { case 0: switch (quad_min) { case 0: if (smin < smax) { min = smin; max = smax; } else { min = -1; max = 1; } break; case 3: min = smin; max = smax; break; case 1: if (smin > smax) { min = -1; max = smin; } else { min = -1; max = smax; } break; case 2: min = -1; max = smax; break; } break; case 1: switch (quad_min) { case 0: if (smin < smax) { min = smin; max = 1; } else { min = smax; max = 1; } break; case 1: if (smin < smax) { min = -1; max = 1; } else { min = smax; max = smin; } break; case 2: min = -1; max = 1; break; case 3: min = smin; max = 1; break; } break; case 2: switch (quad_min) { case 0: min = smax; max = 1; break; case 1: case 2: if (smin < smax) { min = -1; max = 1; } else { min = smax; max = smin; } break; case 3: if (smin < smax) { min = smin; max = 1; } else { min = smax; max = 1; } break; } break; case 3: switch (quad_min) { case 0: min = -1; max = 1; break; case 1: min = -1; max = smin; break; case 2: if (smin < smax) { min = -1; max = smax; } else { min = -1; max = smin; } break; case 3: if (smin < smax) { min = smin; max = smax; } else { min = -1; max = 1; } break; } break; } } self->min = min; self->max = max; } /** * hkl_interval_asin: (skip) * @self: * * compute the arc sinus of an #HklInterval **/ void hkl_interval_asin(HklInterval *self) { self->min = asin(self->min); self->max = asin(self->max); } /** * hkl_interval_tan: (skip) * @self: * * compute the tangente of an #HklInterval **/ void hkl_interval_tan(HklInterval *self) { int quadrant_down = (int)floor(self->min / M_PI_2); int quadrant_up = (int)floor(self->max / M_PI_2); /* if there is at least one period in b or if b contains a Pi/2 + k*Pi, */ /* then a = ]-oo, +oo[ */ if ( ((quadrant_up - quadrant_down) >= 2) || (!(quadrant_down % 2) && (quadrant_up % 2)) ) { self->min = -INFINITY; self->max = INFINITY; } else { self->min = tan(self->min); self->max = tan(self->max); } } /** * hkl_interval_atan: (skip) * @self: * * compute the arc tangente of an #HklInterval **/ void hkl_interval_atan(HklInterval *self) { self->min = atan(self->min); self->max = atan(self->max); } /** * hkl_interval_length: (skip) * @self: * * compute the length of an #HklInterval * * Returns: **/ double hkl_interval_length(const HklInterval *self) { return self->max - self->min; } /** * hkl_interval_angle_restrict_symm: (skip) * @self: * * restrict an #HklInterval into -pi, pi **/ void hkl_interval_angle_restrict_symm(HklInterval *self) { gsl_sf_angle_restrict_symm_e(&self->min); gsl_sf_angle_restrict_symm_e(&self->max); } hkl-5.0.0.2449/hkl/hkl-matrix-private.h0000644000175000017500000000377013236600666017611 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_MATRIX_PRIVATE_H__ #define __HKL_MATRIX_PRIVATE_H__ #include #include "hkl.h" G_BEGIN_DECLS struct _HklMatrix { double data[3][3]; }; extern HklMatrix *hkl_matrix_dup(const HklMatrix* self); extern void hkl_matrix_init_from_euler(HklMatrix *self, double euler_x, double euler_y, double euler_z) HKL_ARG_NONNULL(1); extern void hkl_matrix_matrix_set(HklMatrix *self, const HklMatrix *m) HKL_ARG_NONNULL(1, 2); extern void hkl_matrix_init_from_two_vector(HklMatrix *self, const HklVector *v1, const HklVector *v2); extern void hkl_matrix_fprintf(FILE *file, const HklMatrix *self); extern void hkl_matrix_to_euler(const HklMatrix *self, double *euler_x, double *euler_y, double *euler_z); extern void hkl_matrix_times_vector(const HklMatrix *self, HklVector *v); extern void hkl_matrix_transpose(HklMatrix *self); extern double hkl_matrix_det(const HklMatrix *self); extern int hkl_matrix_solve(const HklMatrix *self, HklVector *x, const HklVector *b); extern int hkl_matrix_is_null(const HklMatrix *self); G_END_DECLS #endif hkl-5.0.0.2449/hkl/hkl-geometry-private.h0000644000175000017500000001646413236600666020144 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_GEOMETRY_PRIVATE_H__ #define __HKL_GEOMETRY_PRIVATE_H__ #include // for size_t #include // for FILE #include "hkl-parameter-private.h" // for darray_parameter #include "hkl-quaternion-private.h" // for _HklQuaternion #include "hkl-source-private.h" // for HklSource #include "hkl-vector-private.h" // for HklQuaternion #include "hkl.h" // for HklGeometry, etc #include "hkl/ccan/darray/darray.h" // for darray #include "hkl/ccan/list/list.h" G_BEGIN_DECLS #define HKL_HOLDER_SAMPLE_IDX 0 #define HKL_HOLDER_DETECTOR_IDX 1 typedef struct _HklHolder HklHolder; typedef void (* HklGeometryListMultiplyFunction) (HklGeometryList *self, HklGeometryListItem *item); typedef darray(HklHolder *) darray_holder; struct HklHolderConfig { int gc; size_t *idx; size_t len; }; struct _HklHolder { struct HklHolderConfig *config; HklGeometry *geometry; HklQuaternion q; }; typedef struct _HklGeometryOperations HklGeometryOperations; struct _HklGeometryOperations { HklHolder* (*sample_holder_get) (const HklGeometry *self, const HklSample *sample); HklHolder* (*detector_holder_get) (const HklGeometry *self, const HklDetector *detector); HklVector (*ki_get) (const HklGeometry *geometry); HklVector (*kf_get) (const HklGeometry *self, const HklDetector *detector); }; struct _HklGeometry { const HklFactory *factory; HklSource source; darray_parameter axes; darray_holder holders; const HklGeometryOperations *ops; }; static inline HklHolder *hkl_geometry_sample_holder_get_real(const HklGeometry *self, UNUSED const HklSample *sample) { return darray_item(self->holders, HKL_HOLDER_SAMPLE_IDX); } static inline HklHolder *hkl_geometry_detector_holder_get_real(const HklGeometry *self, UNUSED const HklDetector *detector) { return darray_item(self->holders, HKL_HOLDER_DETECTOR_IDX); } static inline HklVector hkl_geometry_ki_get_real(const HklGeometry *self) { HklVector ki; hkl_source_compute_ki(&self->source, &ki); return ki; } static inline HklVector hkl_geometry_kf_get_real(const HklGeometry *self, UNUSED const HklDetector *detector) { HklVector kf = {{HKL_TAU / self->source.wave_length, 0, 0}}; HklHolder *detector_holder = darray_item(self->holders, HKL_HOLDER_DETECTOR_IDX); hkl_vector_rotated_quaternion(&kf, &detector_holder->q); return kf; } #define HKL_GEOMETRY_OPERATIONS_DEFAULTS \ .sample_holder_get = hkl_geometry_sample_holder_get_real, \ .detector_holder_get = hkl_geometry_detector_holder_get_real, \ .ki_get = hkl_geometry_ki_get_real, \ .kf_get = hkl_geometry_kf_get_real extern const HklGeometryOperations hkl_geometry_operations_defaults; #define HKL_GEOMETRY_ERROR hkl_geometry_error_quark () static inline GQuark hkl_geometry_error_quark (void) { return g_quark_from_static_string ("hkl-geometry-error-quark"); } typedef enum { HKL_GEOMETRY_ERROR_AXIS_GET, /* can not get the axis */ HKL_GEOMETRY_ERROR_AXIS_SET, /* can not set the axis */ } HklGeometryError; struct _HklGeometryList { HklGeometryListMultiplyFunction multiply; struct list_head items; size_t n_items; }; struct _HklGeometryListItem { struct list_node list; HklGeometry *geometry; }; /*************/ /* HklHolder */ /*************/ extern HklParameter *hkl_holder_add_rotation(HklHolder *self, char const *name, double x, double y, double z, const HklUnit *punit); extern HklParameter *hkl_holder_add_rotation_with_origin(HklHolder *self, const char *name, double x, double y, double z, double ox, double oy, double oz, const HklUnit *punit); extern HklParameter *hkl_holder_add_translation(HklHolder *self, char const *name, double x, double y, double z, const HklUnit *punit); extern HklVector hkl_holder_transformation_apply(const HklHolder *self, const HklVector *v); /***************/ /* HklGeometry */ /***************/ extern HklGeometry *hkl_geometry_new(const HklFactory *factory, const HklGeometryOperations *ops); extern int hkl_geometry_init_geometry(HklGeometry *self, const HklGeometry *src); extern HklHolder *hkl_geometry_add_holder(HklGeometry *self); extern void hkl_geometry_update(HklGeometry *self); extern int hkl_geometry_get_axis_idx_by_name(const HklGeometry *self, const char *name); /* internally require do not use the hkl_geometry_axis_get */ extern HklParameter *hkl_geometry_get_axis_by_name(HklGeometry *self, const char *name); extern double hkl_geometry_distance(const HklGeometry *self, const HklGeometry *ref); extern double hkl_geometry_distance_orthodromic(const HklGeometry *self, const HklGeometry *ref); extern int hkl_geometry_closest_from_geometry_with_range(HklGeometry *self, const HklGeometry *ref); extern int hkl_geometry_is_valid(const HklGeometry *self); extern int hkl_geometry_is_valid_range(const HklGeometry *self); extern HklHolder *hkl_geometry_sample_holder_get(const HklGeometry *self, const HklSample *sample); extern HklHolder *hkl_geometry_detector_holder_get(const HklGeometry *self, const HklDetector *detector); extern HklVector hkl_geometry_ki_get(const HklGeometry *self); extern HklVector hkl_geometry_kf_get(const HklGeometry *self, const HklDetector *detector); /*******************/ /* HklGeometryList */ /*******************/ extern HklGeometryList *hkl_geometry_list_new(void); extern HklGeometryList *hkl_geometry_list_new_copy(const HklGeometryList *self); extern void hkl_geometry_list_add(HklGeometryList *self, const HklGeometry *geometry); extern void hkl_geometry_list_reset(HklGeometryList *self); extern void hkl_geometry_list_sort(HklGeometryList *self, HklGeometry *ref); extern void hkl_geometry_list_fprintf(FILE *f, const HklGeometryList *self); extern void hkl_geometry_list_multiply(HklGeometryList *self); extern void hkl_geometry_list_multiply_from_range(HklGeometryList *self); extern void hkl_geometry_list_remove_invalid(HklGeometryList *self); /***********************/ /* HklGeometryListItem */ /***********************/ extern HklGeometryListItem *hkl_geometry_list_item_new(const HklGeometry *geometry); extern HklGeometryListItem *hkl_geometry_list_item_new_copy(const HklGeometryListItem *self); extern void hkl_geometry_list_item_free(HklGeometryListItem *self); G_END_DECLS #endif /* __HKL_GEOMETRY_PRIVATE_H__ */ hkl-5.0.0.2449/hkl/hkl-matrix.c0000644000175000017500000002646513236600666016142 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for cos, fabs, atan2, sin, asin #include // for fprintf, FILE #include // for free #include // for memcpy #include "hkl-macros-private.h" // for HKL_MALLOC #include "hkl-matrix-private.h" // for _HklMatrix #include "hkl-vector-private.h" // for HklVector, etc #include "hkl.h" // for HklMatrix, HKL_EPSILON, etc /** * hkl_matrix_new: (skip) * * Returns: a new uninitialized HklMatrix */ HklMatrix *hkl_matrix_new() { return HKL_MALLOC(HklMatrix); } /** * hkl_matrix_new_full: (skip) * @m11: the matrix 11 value * @m12: the matrix 12 value * @m13: the matrix 13 value * @m21: the matrix 21 value * @m22: the matrix 22 value * @m23: the matrix 23 value * @m31: the matrix 31 value * @m32: the matrix 32 value * @m33: the matrix 33 value * * @todo test * Returns: a new HklMAtrix **/ HklMatrix *hkl_matrix_new_full(double m11, double m12, double m13, double m21, double m22, double m23, double m31, double m32, double m33) { HklMatrix *self = hkl_matrix_new(); hkl_matrix_init(self, m11, m12, m13, m21, m22, m23, m31, m32, m33); return self; } /** * hkl_matrix_new_euler: * @euler_x: the eulerian value along X * @euler_y: the eulerian value along Y * @euler_z: the eulerian value along Z * * Returns: Create a rotation #HklMatrix from three eulerians angles. **/ HklMatrix *hkl_matrix_new_euler(double euler_x, double euler_y, double euler_z) { HklMatrix *self = hkl_matrix_new(); hkl_matrix_init_from_euler(self, euler_x, euler_y, euler_z); return self; } /** * hkl_matrix_dup: (skip) * @self: * * * * Returns: **/ HklMatrix *hkl_matrix_dup(const HklMatrix* self) { HklMatrix *dup; dup = HKL_MALLOC(HklMatrix); memcpy(dup, self, sizeof(*self)); return dup; } /** * hkl_matrix_free: (skip) * @self: * * **/ void hkl_matrix_free(HklMatrix *self) { free(self); } /** * hkl_matrix_init: * @self: the #HklMatrix to initialize * @m11: the matrix 11 value * @m12: the matrix 12 value * @m13: the matrix 13 value * @m21: the matrix 21 value * @m22: the matrix 22 value * @m23: the matrix 23 value * @m31: the matrix 31 value * @m32: the matrix 32 value * @m33: the matrix 33 value * * **/ void hkl_matrix_init(HklMatrix *self, double m11, double m12, double m13, double m21, double m22, double m23, double m31, double m32, double m33) { double (*M)[3] = self->data; M[0][0] = m11, M[0][1] = m12, M[0][2] = m13; M[1][0] = m21, M[1][1] = m22, M[1][2] = m23; M[2][0] = m31, M[2][1] = m32, M[2][2] = m33; } /** * hkl_matrix_matrix_set: (skip) * @self: the this ptr * @m: the matrix to set * * @todo test **/ void hkl_matrix_matrix_set(HklMatrix *self, const HklMatrix *m) { if (self == m) return; memcpy(self->data, m->data, sizeof(double) * 9); } /** * hkl_matrix_get: * @self: the this ptr * @i: the i coordinate * @j: the j coordinate * * @todo test * Return value: the Mij value **/ double hkl_matrix_get(const HklMatrix *self, unsigned int i, unsigned int j) { return self->data[i][j]; } /** * hkl_matrix_fprintf: * @file: the FILE stream * @self: the #HklMatrix to print into the file stream * * printf an #HklMatrix into a FILE stream. **/ void hkl_matrix_fprintf(FILE *file, const HklMatrix *self) { double const (*M)[3] = self->data; fprintf(file, "|%f, %f, %f|\n", M[0][0], M[0][1], M[0][2]); fprintf(file, "|%f, %f, %f|\n", M[1][0], M[1][1], M[1][2]); fprintf(file, "|%f, %f, %f|\n", M[2][0], M[2][1], M[2][2]); } /** * hkl_matrix_init_from_two_vector: * @self: The #HklMatrix to initialize * @v1: the first #HklVector * @v2: the second #HklVector * * Create an #HklMatrix which represent a direct oriented base of the space * the first row correspond to the |v1|, the second row |v2| and the last one * is |v1 ^ v2| **/ void hkl_matrix_init_from_two_vector(HklMatrix *self, const HklVector *v1, const HklVector *v2) { HklVector x, y, z; double (*M)[3] = self->data; x = *v1; hkl_vector_normalize(&x); z = *v1; hkl_vector_vectorial_product(&z, v2); hkl_vector_normalize(&z); y = z; hkl_vector_vectorial_product(&y, &x); M[0][0] = x.data[0], M[0][1] = y.data[0], M[0][2] = z.data[0]; M[1][0] = x.data[1], M[1][1] = y.data[1], M[1][2] = z.data[1]; M[2][0] = x.data[2], M[2][1] = y.data[2], M[2][2] = z.data[2]; } /** * hkl_matrix_init_from_euler: * @self: the #HklMatrix to initialize * @euler_x: the eulerian value along X * @euler_y: the eulerian value along Y * @euler_z: the eulerian value along Z * * Create a rotation #HklMatrix from three eulerians angles. **/ void hkl_matrix_init_from_euler(HklMatrix *self, double euler_x, double euler_y, double euler_z) { double (*M)[3] = self->data; double A = cos(euler_x); double B = sin(euler_x); double C = cos(euler_y); double D = sin(euler_y); double E = cos(euler_z); double F = sin(euler_z); double AD = A *D; double BD = B *D; M[0][0] = C*E; M[0][1] =-C*F; M[0][2] = D; M[1][0] = BD *E + A *F; M[1][1] =-BD *F + A *E; M[1][2] =-B *C; M[2][0] =-AD *E + B *F; M[2][1] = AD *F + B *E; M[2][2] = A *C; } /** * hkl_matrix_to_euler: * @self: the rotation #HklMatrix use to compute the eulerians angles * @euler_x: the eulerian value along X * @euler_y: the eulerian value along Y * @euler_z: the eulerian value along Z * * compute the three eulerians values for a given rotation #HklMatrix **/ void hkl_matrix_to_euler(const HklMatrix *self, double *euler_x, double *euler_y, double *euler_z) { double tx, ty; double C; double const (*M)[3] = self->data; *euler_y = asin( self->data[0][2] ); /*Calculate Y-axis angle */ C = cos( *euler_y ); if (fabs(C) > HKL_EPSILON) { /*Gimball lock? */ tx = M[2][2] / C; /*No, so get X-axis angle */ ty = -M[1][2] / C; *euler_x = atan2( ty, tx ); tx = M[0][0] / C; /*Get Z-axis angle */ ty = -M[0][1] / C; *euler_z = atan2( ty, tx ); } else { /*Gimball lock has occurred */ *euler_x = 0.; /*Set X-axis angle to zero */ tx = M[1][1]; /*And calculate Z-axis angle */ ty = M[1][0]; *euler_z = atan2( ty, tx ); } } /** * hkl_matrix_cmp: * @self: the first #HklMatrix * @m: the #HklMatrix to compare with * * compare two #HklMatrix. * * Returns: return TRUE if | self - m | > HKL_EPSILON **/ int hkl_matrix_cmp(const HklMatrix *self, const HklMatrix *m) { unsigned int i; unsigned int j; for(i=0;i<3;i++) for(j=0;j<3;j++) if( fabs(self->data[i][j] - m->data[i][j]) > HKL_EPSILON ) return FALSE; return TRUE; } /** * hkl_matrix_times_matrix: * @self: the #HklMatrix to modify * @m: the #HklMatrix to multiply by * * compute the matrix multiplication self = self * m **/ void hkl_matrix_times_matrix(HklMatrix *self, const HklMatrix *m) { HklMatrix const tmp = *self; double (*M)[3] = self->data; double const (*Tmp)[3] = tmp.data; double const (*M1)[3]; if (self == m) M1 = tmp.data; else M1 = m->data; M[0][0] = Tmp[0][0]*M1[0][0] + Tmp[0][1]*M1[1][0] + Tmp[0][2]*M1[2][0]; M[0][1] = Tmp[0][0]*M1[0][1] + Tmp[0][1]*M1[1][1] + Tmp[0][2]*M1[2][1]; M[0][2] = Tmp[0][0]*M1[0][2] + Tmp[0][1]*M1[1][2] + Tmp[0][2]*M1[2][2]; M[1][0] = Tmp[1][0]*M1[0][0] + Tmp[1][1]*M1[1][0] + Tmp[1][2]*M1[2][0]; M[1][1] = Tmp[1][0]*M1[0][1] + Tmp[1][1]*M1[1][1] + Tmp[1][2]*M1[2][1]; M[1][2] = Tmp[1][0]*M1[0][2] + Tmp[1][1]*M1[1][2] + Tmp[1][2]*M1[2][2]; M[2][0] = Tmp[2][0]*M1[0][0] + Tmp[2][1]*M1[1][0] + Tmp[2][2]*M1[2][0]; M[2][1] = Tmp[2][0]*M1[0][1] + Tmp[2][1]*M1[1][1] + Tmp[2][2]*M1[2][1]; M[2][2] = Tmp[2][0]*M1[0][2] + Tmp[2][1]*M1[1][2] + Tmp[2][2]*M1[2][2]; } /** * hkl_matrix_times_vector: * @self: the #HklMatrix use to multiply the #HklVector * @v: the #HklVector multiply by the #HklMatrix * * multiply an #HklVector by an #HklMatrix **/ void hkl_matrix_times_vector(const HklMatrix *self, HklVector *v) { HklVector tmp; double *Tmp; double *V = v->data; double const (*M)[3] = self->data; tmp = *v; Tmp = tmp.data; V[0] = Tmp[0]*M[0][0] + Tmp[1]*M[0][1] + Tmp[2]*M[0][2]; V[1] = Tmp[0]*M[1][0] + Tmp[1]*M[1][1] + Tmp[2]*M[1][2]; V[2] = Tmp[0]*M[2][0] + Tmp[1]*M[2][1] + Tmp[2]*M[2][2]; } /** * hkl_matrix_transpose: * @self: the #HklMatrix to transpose * * transpose an #HklMatrix **/ void hkl_matrix_transpose(HklMatrix *self) { #define SWAP(a, b) {double tmp=a; a=b; b=tmp;} SWAP(self->data[1][0], self->data[0][1]); SWAP(self->data[2][0], self->data[0][2]); SWAP(self->data[2][1], self->data[1][2]); } /** * hkl_matrix_det: * @self: the #HklMatrix use to compute the determinant * * compute the determinant of an #HklMatrix * * Returns: the determinant of the self #HklMatrix * Todo: test **/ double hkl_matrix_det(const HklMatrix *self) { double det; double const (*M)[3] = self->data; det = M[0][0] * (M[1][1] * M[2][2] - M[2][1] * M[1][2]); det += -M[0][1] * (M[1][0] * M[2][2] - M[2][0] * M[1][2]); det += M[0][2] * (M[1][0] * M[2][1] - M[2][0] * M[1][1]); return det; } /** * hkl_matrix_solve: * @self: The #HklMatrix of the system * @x: the #HklVector to compute. * @b: the #hklVector of the system to solve. * * solve the system self . X = b * * Returns: -1 if the système has no solution, 0 otherwise. * Todo: test **/ int hkl_matrix_solve(const HklMatrix *self, HklVector *x, const HklVector *b) { double det; double const (*M)[3] = self->data; double *X = x->data; double const *B = b->data; det = hkl_matrix_det(self); if (fabs(det) < HKL_EPSILON) return -1; else { X[0] = B[0] * (M[1][1]*M[2][2] - M[1][2]*M[2][1]); X[0] += -B[1] * (M[0][1]*M[2][2] - M[0][2]*M[2][1]); X[0] += B[2] * (M[0][1]*M[1][2] - M[0][2]*M[1][1]); X[1] = -B[0] * (M[1][0]*M[2][2] - M[1][2]*M[2][0]); X[1] += B[1] * (M[0][0]*M[2][2] - M[0][2]*M[2][0]); X[1] += -B[2] * (M[0][0]*M[1][2] - M[0][2]*M[1][0]); X[2] = B[0] * (M[1][0]*M[2][1] - M[1][1]*M[2][0]); X[2] += -B[1] * (M[0][0]*M[2][1] - M[0][1]*M[2][0]); X[2] += B[2] * (M[0][0]*M[1][1] - M[0][1]*M[1][0]); hkl_vector_div_double(x, det); } return 0; } /** * hkl_matrix_is_null: * @self: the #HklMatrix to test * * is all #hklMatrix elementes bellow #HKL_EPSILON * * Returns: TRUE if the self #HklMatrix is null * Todo: test **/ int hkl_matrix_is_null(const HklMatrix *self) { unsigned int i; unsigned int j; for (i=0;i<3;i++) for (j=0;j<3;j++) if ( fabs(self->data[i][j]) > HKL_EPSILON ) return FALSE; return TRUE; } hkl-5.0.0.2449/hkl/hkl-detector-private.h0000644000175000017500000000320313236600666020105 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_DETECTOR_PRIVATE_H__ #define __HKL_DETECTOR_PRIVATE_H__ #include // for size_t #include "hkl-geometry-private.h" // for HklHolder #include "hkl-vector-private.h" // for HklVector #include "hkl.h" // for HklDetector, etc G_BEGIN_DECLS struct _HklDetector { size_t idx; HklHolder const *holder; }; extern HklDetector *hkl_detector_new(void); extern void hkl_detector_attach_to_holder(HklDetector *self, HklHolder const *holder) HKL_ARG_NONNULL(1, 2); extern int hkl_detector_compute_kf(HklDetector const *self, HklGeometry *g, HklVector *kf) HKL_ARG_NONNULL(1, 2, 3); G_END_DECLS #endif /* __HKL_DETECTOR_PRIVATE_H__ */ hkl-5.0.0.2449/hkl/hkl-pseudoaxis-common-psi-private.h0000644000175000017500000000460513236600666022546 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_PSEUDOAXIS_COMMON_PSI_PRIVATE_H__ #define __HKL_PSEUDOAXIS_COMMON_PSI_PRIVATE_H__ #include // for gsl_vector #include "hkl-pseudoaxis-auto-private.h" // for HklFunction, etc #include "hkl-pseudoaxis-private.h" // for _HklEngine, _HklMode #include "hkl-vector-private.h" // for HklVector #include "hkl.h" // for HklEngine, HklMode, etc G_BEGIN_DECLS typedef struct _HklModePsi HklModePsi; typedef struct _HklEnginePsi HklEnginePsi; struct _HklModePsi { HklMode parent; HklVector Q0; HklVector hkl0; }; struct _HklEnginePsi { HklEngine engine; HklParameter *psi; }; extern HklMode *hkl_mode_psi_new( const HklModeAutoInfo *info); extern HklEngine *hkl_engine_psi_new(HklEngineList *engines); extern int _psi_func(const gsl_vector *x, void *params, gsl_vector *f); static const HklFunction psi_func = { .function = _psi_func, .size = 4, }; static const HklParameter psi_parameters[] = { { HKL_PARAMETER_DEFAULTS, .name = "h2", ._value = 1, .description = "h coordinate of the reference plan", .range = { .min=-1, .max=1 }, }, { HKL_PARAMETER_DEFAULTS, .name = "k2", ._value = 1, .description = "k coordinate of the reference plan", .range = { .min=-1, .max=1 }, }, { HKL_PARAMETER_DEFAULTS, .name = "l2", ._value = 1, .description = "l coordinate of the reference plan", .range = { .min=-1, .max=1 }, }, }; G_END_DECLS #endif /* __HKL_PSEUDOAXIS_COMMON_PSI_PRIVATE_H__ */ hkl-5.0.0.2449/hkl/hkl-engine-k4c.c0000644000175000017500000003071513236600666016553 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for gsl_isnan #include "hkl-factory-private.h" // for autodata_factories_, etc #include "hkl-pseudoaxis-common-eulerians-private.h" #include "hkl-pseudoaxis-common-q-private.h" // for hkl_engine_q2_new, etc #include "hkl-pseudoaxis-common-hkl-private.h" // for RUBh_minus_Q, etc #include "hkl-pseudoaxis-common-psi-private.h" // for hkl_engine_psi_new, etc #include "hkl-pseudoaxis-common-readonly-private.h" #define KOMEGA "komega" #define KAPPA "kappa" #define KPHI "kphi" #define TTH "tth" static void hkl_geometry_list_multiply_k4c_real(HklGeometryList *self, HklGeometryListItem *item) { HklGeometry *geometry; HklGeometry *copy; double komega, komegap; double kappa, kappap; double kphi, kphip; geometry = item->geometry; komega = hkl_parameter_value_get(darray_item(geometry->axes, 0), HKL_UNIT_DEFAULT); kappa = hkl_parameter_value_get(darray_item(geometry->axes, 1), HKL_UNIT_DEFAULT); kphi = hkl_parameter_value_get(darray_item(geometry->axes, 2), HKL_UNIT_DEFAULT); kappa_2_kappap(komega, kappa, kphi, 50 * HKL_DEGTORAD, &komegap, &kappap, &kphip); copy = hkl_geometry_new_copy(geometry); /* TODO parameter list for the geometry */ hkl_parameter_value_set(darray_item(copy->axes, 0), komegap, HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(darray_item(copy->axes, 1), kappap, HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(darray_item(copy->axes, 2), kphip, HKL_UNIT_DEFAULT, NULL); hkl_geometry_update(copy); hkl_geometry_list_add(self, copy); hkl_geometry_free(copy); } /************/ /* hkl mode */ /************/ /* bissector */ static int _bissector_f1(const gsl_vector *x, void *params, gsl_vector *f) { const double komega = x->data[0]; const double kappa = x->data[1]; const double tth = x->data[3]; double omega; CHECK_NAN(x->data, x->size); omega = komega + atan(tan(kappa/2.)*cos(50 * HKL_DEGTORAD)) + M_PI_2; RUBh_minus_Q(x->data, params, f->data); f->data[3] = fmod(tth - 2 * fmod(omega, M_PI), 2*M_PI); return GSL_SUCCESS; } static const HklFunction bissector_f1 = { .function = _bissector_f1, .size = 4, }; static int _bissector_f2(const gsl_vector *x, void *params, gsl_vector *f) { const double komega = x->data[0]; const double kappa = x->data[1]; const double tth = x->data[3]; double omega; CHECK_NAN(x->data, x->size); omega = komega + atan(tan(kappa/2.)*cos(50 * HKL_DEGTORAD)) - M_PI_2; RUBh_minus_Q(x->data, params, f->data); f->data[3] = fmod(tth - 2 * fmod(omega, M_PI), 2*M_PI); return GSL_SUCCESS; } static const HklFunction bissector_f2 = { .function = _bissector_f2, .size = 4, }; static HklMode *bissector(void) { static const char* axes[] = {KOMEGA, KAPPA, KPHI, TTH}; static const HklFunction *functions[] = {&bissector_f1, &bissector_f2}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes, axes, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } /* constant omega */ static int _constant_omega_f1(const gsl_vector *x, void *params, gsl_vector *f) { double const komega = x->data[0]; double const kappa = x->data[1]; double omega; HklEngine *engine = params; double omega0 = darray_item(engine->mode->parameters, 0)->_value; CHECK_NAN(x->data, x->size); omega = komega + atan(tan(kappa/2.)*cos(50 * HKL_DEGTORAD)) - M_PI_2; RUBh_minus_Q(x->data, params, f->data); f->data[3] = omega0 - omega; return GSL_SUCCESS; } static const HklFunction constant_omega_f1 = { .function = _constant_omega_f1, .size = 4, }; static int _constant_omega_f2(const gsl_vector *x, void *params, gsl_vector *f) { const double komega = x->data[0]; const double kappa = x->data[1]; double omega; HklEngine *engine = params; double omega0 = darray_item(engine->mode->parameters, 0)->_value; CHECK_NAN(x->data, x->size); omega = komega + atan(tan(kappa/2.)*cos(50 * HKL_DEGTORAD)) + M_PI_2; RUBh_minus_Q(x->data, params, f->data); f->data[3] = omega0 - omega; return GSL_SUCCESS; } static const HklFunction constant_omega_f2 = { .function = _constant_omega_f2, .size = 4, }; static HklMode *constant_omega(void) { static const char* axes[] = {KOMEGA, KAPPA, KPHI, TTH}; static const HklFunction *functions[] = {&constant_omega_f1, &constant_omega_f2}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes, axes, functions, constant_omega_parameters), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } /* constant chi */ static int _constant_chi_f1(const gsl_vector *x, void *params, gsl_vector *f) { const double kappa = x->data[1]; double chi; HklEngine *engine = params; double chi0 = darray_item(engine->mode->parameters, 0)->_value; CHECK_NAN(x->data, x->size); chi = 2 * asin(sin(kappa/2.) * sin(50 * HKL_DEGTORAD)); RUBh_minus_Q(x->data, params, f->data); f->data[3] = chi0 - chi; return GSL_SUCCESS; } static const HklFunction constant_chi_f1 = { .function = _constant_chi_f1, .size = 4, }; static int _constant_chi_f2(const gsl_vector *x, void *params, gsl_vector *f) { const double kappa = x->data[1]; double chi; HklEngine *engine = params; double chi0 = darray_item(engine->mode->parameters, 0)->_value; CHECK_NAN(x->data, x->size); chi = -2 * asin(sin(kappa/2.) * sin(50 * HKL_DEGTORAD)); RUBh_minus_Q(x->data, params, f->data); f->data[3] = chi0 - chi; return GSL_SUCCESS; } static const HklFunction constant_chi_f2 = { .function = _constant_chi_f2, .size = 4, }; static HklMode *constant_chi(void) { static const char* axes[] = {KOMEGA, KAPPA, KPHI, TTH}; static const HklFunction *functions[] = {&constant_chi_f1, &constant_chi_f2}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes, axes, functions, constant_chi_parameters), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } /* constant phi */ static int _constant_phi_f1(const gsl_vector *x, void *params, gsl_vector *f) { const double kappa = x->data[1]; const double kphi = x->data[2]; double phi; HklEngine *engine = params; double phi0 = darray_item(engine->mode->parameters, 0)->_value; CHECK_NAN(x->data, x->size); phi = kphi + atan(tan(kappa/2.)*cos(50 * HKL_DEGTORAD)) + M_PI_2; RUBh_minus_Q(x->data, params, f->data); f->data[3] = phi0 - phi; return GSL_SUCCESS; } static const HklFunction constant_phi_f1 = { .function = _constant_phi_f1, .size = 4, }; static int _constant_phi_f2(const gsl_vector *x, void *params, gsl_vector *f) { const double kappa = x->data[1]; const double kphi = x->data[2]; double phi; HklEngine *engine = params; double phi0 = darray_item(engine->mode->parameters, 0)->_value; CHECK_NAN(x->data, x->size); phi = kphi + atan(tan(kappa/2.)*cos(50 * HKL_DEGTORAD)) - M_PI_2; RUBh_minus_Q(x->data, params, f->data); f->data[3] = phi0 - phi; return GSL_SUCCESS; } static const HklFunction constant_phi_f2 = { .function = _constant_phi_f2, .size = 4, }; static HklMode *constant_phi(void) { static const char* axes[] = {KOMEGA, KAPPA, KPHI, TTH}; static const HklFunction *functions[] = {&constant_phi_f1, &constant_phi_f2}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes, axes, functions, constant_phi_parameters), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *double_diffraction(void) { static const char* axes[] = {KOMEGA, KAPPA, KPHI, TTH}; static const HklFunction *functions[] = {&double_diffraction_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes, axes, functions, double_diffraction_parameters), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *psi_constant(void) { static const char* axes[] = {KOMEGA, KAPPA, KPHI, TTH}; static const HklFunction *functions[] = {&psi_constant_vertical_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes, axes, functions, psi_constant_parameters), }; return hkl_mode_auto_new(&info, &psi_constant_vertical_mode_operations, TRUE); } static HklEngine *hkl_engine_k4cv_hkl_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_hkl_new(engines); default_mode = bissector(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); hkl_engine_add_mode(self, constant_omega()); hkl_engine_add_mode(self, constant_chi()); hkl_engine_add_mode(self, constant_phi()); hkl_engine_add_mode(self, double_diffraction()); hkl_engine_add_mode(self, psi_constant()); return self; } /************/ /* psi mode */ /************/ /* psi */ static HklMode *psi() { static const char *axes[] = {KOMEGA, KAPPA, KPHI, TTH}; static const HklFunction *functions[] = {&psi_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes, axes, functions, psi_parameters), }; return hkl_mode_psi_new(&info); } static HklEngine *hkl_engine_k4cv_psi_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_psi_new(engines); default_mode = psi(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); return self; } /*****************/ /* mode readonly */ /*****************/ REGISTER_READONLY_INCIDENCE(hkl_engine_kappa4C_vertical_incidence_new, P99_PROTECT({KOMEGA, KAPPA, KPHI}), surface_parameters_y); REGISTER_READONLY_EMERGENCE(hkl_engine_kappa4C_vertical_emergence_new, P99_PROTECT({KOMEGA, KAPPA, KPHI, TTH}), surface_parameters_y); /********/ /* K4CV */ /********/ #define HKL_GEOMETRY_KAPPA4C_VERTICAL_DESCRIPTION \ "For this geometry there is a special parameters called :math:`\\alpha` which is the\n" \ "angle between the kappa rotation axis and the :math:`\\vec{y}` direction.\n" \ "\n" \ "+ xrays source fix allong the :math:`\\vec{x}` direction (1, 0, 0)\n" \ "+ 3 axes for the sample\n" \ "\n" \ " + **" KOMEGA "** : rotating around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ " + **" KAPPA "** : rotating around the :math:`\\vec{x}` direction (0, :math:`-\\cos\\alpha`, :math:`-\\sin\\alpha`)\n" \ " + **" KPHI "** : rotating around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ "\n" \ "+ 1 axis for the detector\n" \ "\n" \ " + **" TTH "** : rotation around the :math:`-\\\vec{y}` direction (0, -1, 0)\n" static const char* hkl_geometry_kappa4C_vertical_axes[] = {KOMEGA, KAPPA, KPHI, TTH}; static HklGeometry *hkl_geometry_new_kappa4C_vertical(const HklFactory *factory) { HklGeometry *self = hkl_geometry_new(factory, &hkl_geometry_operations_defaults); double alpha = 50 * HKL_DEGTORAD; HklHolder *h; h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, KOMEGA, 0, -1, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, KAPPA, 0, -cos(alpha), -sin(alpha), &hkl_unit_angle_deg); hkl_holder_add_rotation(h, KPHI, 0, -1, 0, &hkl_unit_angle_deg); h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, TTH, 0, -1, 0, &hkl_unit_angle_deg); return self; } static HklEngineList *hkl_engine_list_new_kappa4C_vertical(const HklFactory *factory) { HklEngineList *self = hkl_engine_list_new(); self->geometries->multiply = hkl_geometry_list_multiply_k4c_real; hkl_engine_k4cv_hkl_new(self); hkl_engine_eulerians_new(self); hkl_engine_k4cv_psi_new(self); hkl_engine_q_new(self); hkl_engine_kappa4C_vertical_incidence_new(self); hkl_engine_kappa4C_vertical_emergence_new(self); return self; } REGISTER_DIFFRACTOMETER(kappa4C_vertical, "K4CV", HKL_GEOMETRY_KAPPA4C_VERTICAL_DESCRIPTION); hkl-5.0.0.2449/hkl/hkl-engine-e6c.c0000644000175000017500000002773213236600666016554 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for gsl_isnan #include "hkl-factory-private.h" // for autodata_factories_, etc #include "hkl-pseudoaxis-common-hkl-private.h" // for hkl_mode_operations, etc #include "hkl-pseudoaxis-common-psi-private.h" // for hkl_engine_psi_new, etc #include "hkl-pseudoaxis-common-q-private.h" // for hkl_engine_q2_new, etc #include "hkl-pseudoaxis-common-tth-private.h" // for hkl_engine_tth2_new, etc #include "hkl-pseudoaxis-common-readonly-private.h" // for hkl_engine_tth2_new, etc #define MU "mu" #define OMEGA "omega" #define CHI "chi" #define PHI "phi" #define GAMMA "gamma" #define DELTA "delta" /***********************/ /* numerical functions */ /***********************/ static int _bissector_horizontal_func(const gsl_vector *x, void *params, gsl_vector *f) { const double mu = x->data[0]; const double omega = x->data[1]; const double gamma = x->data[4]; CHECK_NAN(x->data, x->size); RUBh_minus_Q(x->data, params, f->data); f->data[3] = fmod(omega, M_PI); f->data[4] = gamma - 2 * fmod(mu, M_PI); return GSL_SUCCESS; } static const HklFunction bissector_horizontal_func = { .function = _bissector_horizontal_func, .size = 5, }; static int _bissector_vertical_func(const gsl_vector *x, void *params, gsl_vector *f) { const double omega = x->data[0]; const double tth = x->data[3]; CHECK_NAN(x->data, x->size); RUBh_minus_Q(x->data, params, f->data); f->data[3] = tth - 2 * fmod(omega,M_PI); return GSL_SUCCESS; } static const HklFunction bissector_vertical_func = { .function = _bissector_vertical_func, .size = 4, }; /************/ /* mode hkl */ /************/ static HklMode *bissector_vertical(void) { static const char* axes_r[] = {MU, OMEGA, CHI, PHI, GAMMA, DELTA}; static const char* axes_w[] = {OMEGA, CHI, PHI, DELTA}; static const HklFunction *functions[] = {&bissector_vertical_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *constant_omega_vertical(void) { static const char* axes_r[] = {MU, OMEGA, CHI, PHI, GAMMA, DELTA}; static const char* axes_w[] = {CHI, PHI, DELTA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *constant_chi_vertical(void) { static const char* axes_r[] = {MU, OMEGA, CHI, PHI, GAMMA, DELTA}; static const char* axes_w[] = {OMEGA, PHI, DELTA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *constant_phi_vertical(void) { static const char* axes_r[] = {MU, OMEGA, CHI, PHI, GAMMA, DELTA}; static const char* axes_w[] = {OMEGA, CHI, DELTA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *lifting_detector_phi(void) { static const char* axes_r[] = {MU, OMEGA, CHI, PHI, GAMMA, DELTA}; static const char* axes_w[] = {PHI, GAMMA, DELTA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *lifting_detector_omega(void) { static const char* axes_r[] = {MU, OMEGA, CHI, PHI, GAMMA, DELTA}; static const char* axes_w[] = {OMEGA, GAMMA, DELTA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *lifting_detector_mu(void) { static const char* axes_r[] = {MU, OMEGA, CHI, PHI, GAMMA, DELTA}; static const char* axes_w[] = {MU, GAMMA, DELTA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *double_diffraction_vertical(void) { static const char* axes_r[] = {MU, OMEGA, CHI, PHI, GAMMA, DELTA}; static const char* axes_w[] = {OMEGA, CHI, PHI, DELTA}; static const HklFunction *functions[] = {&double_diffraction_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes_r, axes_w, functions, double_diffraction_parameters), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *bissector_horizontal(void) { static const char* axes_r[] = {MU, OMEGA, CHI, PHI, GAMMA, DELTA}; static const char* axes_w[] = {MU, OMEGA, CHI, PHI, GAMMA}; static const HklFunction *functions[] = {&bissector_horizontal_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *double_diffraction_horizontal(void) { static const char* axes_r[] = {MU, OMEGA, CHI, PHI, GAMMA, DELTA}; static const char* axes_w[] = {MU, CHI, PHI, GAMMA}; static const HklFunction *functions[] = {&double_diffraction_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes_r, axes_w, functions, double_diffraction_parameters), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *psi_constant_vertical(void) { static const char* axes_r[] = {MU, OMEGA, CHI, PHI, GAMMA, DELTA}; static const char* axes_w[] = {OMEGA, CHI, PHI, DELTA}; static const HklFunction *functions[] = {&psi_constant_vertical_func}; static const HklParameter parameters[] = { PSI_CONSTANT_PARAMETERS(1, 0, 0, 0) }; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes_r, axes_w, functions, parameters), }; return hkl_mode_auto_new(&info, &psi_constant_vertical_mode_operations, TRUE); } static HklMode *psi_constant_horizontal(void) { static const char* axes_r[] = {MU, OMEGA, CHI, PHI, GAMMA, DELTA}; static const char* axes_w[] = {OMEGA, CHI, PHI, GAMMA}; static const HklFunction *functions[] = {&psi_constant_vertical_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes_r, axes_w, functions, psi_constant_parameters), }; return hkl_mode_auto_new(&info, &psi_constant_vertical_mode_operations, TRUE); } static HklMode *constant_mu_horizontal(void) { static const char* axes_r[] = {MU, OMEGA, CHI, PHI, GAMMA, DELTA}; static const char* axes_w[] = {CHI, PHI, GAMMA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklEngine *hkl_engine_e6c_hkl_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_hkl_new(engines); default_mode = bissector_vertical(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); hkl_engine_add_mode(self, constant_omega_vertical()); hkl_engine_add_mode(self, constant_chi_vertical()); hkl_engine_add_mode(self, constant_phi_vertical()); hkl_engine_add_mode(self, lifting_detector_phi()); hkl_engine_add_mode(self, lifting_detector_omega()); hkl_engine_add_mode(self, lifting_detector_mu()); hkl_engine_add_mode(self, double_diffraction_vertical()); hkl_engine_add_mode(self, bissector_horizontal()); hkl_engine_add_mode(self, double_diffraction_horizontal()); hkl_engine_add_mode(self, psi_constant_vertical()); hkl_engine_add_mode(self, psi_constant_horizontal()); hkl_engine_add_mode(self, constant_mu_horizontal()); return self; } /************/ /* mode psi */ /************/ static HklMode* psi_vertical() { static const char *axes_r[] = {MU, OMEGA, CHI, PHI, GAMMA, DELTA}; static const char *axes_w[] = {OMEGA, CHI, PHI, DELTA}; static const HklFunction *functions[] = {&psi_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes_r, axes_w, functions, psi_parameters), }; return hkl_mode_psi_new(&info); } static HklEngine *hkl_engine_e6c_psi_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_psi_new(engines); default_mode = psi_vertical(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); return self; } /*****************/ /* mode readonly */ /*****************/ REGISTER_READONLY_INCIDENCE(hkl_engine_e6c_incidence_new, P99_PROTECT({MU, OMEGA, CHI, PHI}), surface_parameters_y); REGISTER_READONLY_EMERGENCE(hkl_engine_e6c_emergence_new, P99_PROTECT({MU, OMEGA, CHI, PHI, GAMMA, DELTA}), surface_parameters_y); /*******/ /* E6C */ /*******/ #define HKL_GEOMETRY_EULERIAN6C_DESCRIPTION \ "+ xrays source fix allong the :math:`\\vec{x}` direction (1, 0, 0)\n" \ "+ 4 axes for the sample\n" \ "\n" \ " + **" MU "** : rotating around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ " + **" OMEGA "** : rotating around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ " + **" CHI "** : rotating around the :math:`\\vec{x}` direction (1, 0, 0)\n" \ " + **" PHI "** : rotating around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ "\n" \ "+ 2 axes for the detector\n" \ "\n" \ " + **" GAMMA "** : rotation around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ " + **" DELTA "** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" static const char* hkl_geometry_eulerian6C_axes[] = {MU, OMEGA, CHI, PHI, GAMMA, DELTA}; static HklGeometry *hkl_geometry_new_eulerian6C(const HklFactory *factory) { HklGeometry *self = hkl_geometry_new(factory, &hkl_geometry_operations_defaults); HklHolder *h; h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, MU, 0, 0, 1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, OMEGA, 0, -1, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, CHI, 1, 0, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, PHI, 0, -1, 0, &hkl_unit_angle_deg); h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, GAMMA, 0, 0, 1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, DELTA, 0, -1, 0, &hkl_unit_angle_deg); return self; } static HklEngineList *hkl_engine_list_new_eulerian6C(const HklFactory *factory) { HklEngineList *self = hkl_engine_list_new(); hkl_engine_e6c_hkl_new(self); hkl_engine_e6c_psi_new(self); hkl_engine_q2_new(self); hkl_engine_qper_qpar_new(self); hkl_engine_tth2_new(self); hkl_engine_e6c_incidence_new(self); hkl_engine_e6c_emergence_new(self); return self; } REGISTER_DIFFRACTOMETER(eulerian6C, "E6C", HKL_GEOMETRY_EULERIAN6C_DESCRIPTION); hkl-5.0.0.2449/hkl/hkl-geometry.c0000644000175000017500000007647013236600666016472 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for alloca #include // for gsl_sf_angle_restrict_symm #include // for gsl_isnan #include // for fabs, M_PI #include // for va_arg, va_end, va_list, etc #include // for size_t #include // for fprintf, FILE, stderr #include // for free, exit, realloc #include // for NULL, strcmp, memcpy #include // for uint #include "hkl-factory-private.h" #include "hkl-axis-private.h" // for HklAxis, etc #include "hkl-detector-private.h" #include "hkl-geometry-private.h" // for _HklGeometry, etc #include "hkl-interval-private.h" // for HklInterval #include "hkl-macros-private.h" // for HKL_MALLOC #include "hkl-parameter-private.h" // for _HklParameter, etc #include "hkl-quaternion-private.h" // for _HklQuaternion, etc #include "hkl-source-private.h" // for HklSource, hkl_source_init #include "hkl-unit-private.h" // for HklUnit, hkl_unit_factor #include "hkl-vector-private.h" // for HklVector, HklQuaternion, etc #include "hkl.h" // for HklGeometry, etc #include "hkl/ccan/container_of/container_of.h" // for container_of #include "hkl/ccan/darray/darray.h" // for darray_foreach, darray_item, etc /* * Try to add a axis to the axes list, * if a identical axis is present in the list return it * else create a new on and add it to the list. * die if try to add an axis with the same name but a different axis_v */ static size_t hkl_geometry_add_axis(HklGeometry *self, const HklParameter *axis) { uint i = 0; HklParameter **parameter; /* check if an axis with the same name is on the axis list */ darray_foreach(parameter, self->axes){ if(!strcmp((*parameter)->name, axis->name)){ if (hkl_parameter_transformation_cmp(*parameter, axis)){ fprintf(stderr, "can not add two axis with the same name \"%s\" but not compatible transformation", axis->name); hkl_parameter_fprintf(stderr, *parameter); hkl_parameter_fprintf(stderr, axis); exit(128); }else{ return i; } } ++i; } /* no so create and add it to the list */ darray_append(self->axes, hkl_parameter_new_copy(axis)); return darray_size(self->axes) - 1; } /*******************/ /* HklHolderConfig */ /*******************/ static struct HklHolderConfig *hkl_holder_config_new(void) { struct HklHolderConfig *self; self = HKL_MALLOC(struct HklHolderConfig); self->gc = 1; self->idx = NULL; self->len = 0; return self; } static struct HklHolderConfig *hkl_holder_config_ref(struct HklHolderConfig *self) { if(!self) return NULL; self->gc++; return self; } static void hkl_holder_config_unref(struct HklHolderConfig *self) { if(!self) return; if(--self->gc) return; free(self->idx); free(self); } /*************/ /* HklHolder */ /*************/ static HklHolder *hkl_holder_new(HklGeometry *geometry) { static HklQuaternion q0 = {{1, 0, 0, 0}}; HklHolder *self = HKL_MALLOC(HklHolder); self->config = hkl_holder_config_new(); self->geometry = geometry; self->q = q0; return self; } static HklHolder *hkl_holder_new_copy(HklHolder *src, HklGeometry *geometry) { HklHolder *self = HKL_MALLOC(HklHolder); self->config = hkl_holder_config_ref(src->config); self->geometry = geometry; self->q = src->q; return self; } static void hkl_holder_free(HklHolder *self) { hkl_holder_config_unref(self->config); free(self); } static void hkl_holder_update(HklHolder *self) { static HklQuaternion q0 = {{1, 0, 0, 0}}; size_t i; self->q = q0; /* * The initial meaning of hkl_holder_update was to compute the * global rotation of the holder. The first holder contained * only centered rotations. Now that we have added also * translation, we stop this computation at the first non * rotation axis * * The right think to do should be to add an * HklVector hkl_holder_apply_transformation(const Hklholder, const HklVector *vector) * for every kind of transformation (translation, rotation, etc...) */ for(i=0; iconfig->len; ++i){ const HklParameter *p; const HklQuaternion *q; p = darray_item(self->geometry->axes, self->config->idx[i]); q = hkl_parameter_quaternion_get(p); if(NULL == q) break; else hkl_quaternion_times_quaternion(&self->q, q); } } static HklParameter * hkl_holder_add_axis_if_not_present(const HklHolder *self, int idx) { size_t i; HklParameter *res = NULL; /* check if the axis was already in the geometry */ for(i=0; iconfig->len; i++) if (idx == self->config->idx[i]) return NULL; res = darray_item(self->geometry->axes, idx); self->config->idx = realloc(self->config->idx, sizeof(*self->config->idx) * (self->config->len + 1)); self->config->idx[self->config->len++] = idx; return res; } HklParameter *hkl_holder_add_rotation(HklHolder *self, const char *name, double x, double y, double z, const HklUnit *punit) { HklVector axis_v = {{x, y, z}}; HklParameter *axis = hkl_parameter_new_rotation(name, &axis_v, punit); int idx = hkl_geometry_add_axis(self->geometry, axis); hkl_parameter_free(axis); return hkl_holder_add_axis_if_not_present(self, idx); } HklParameter *hkl_holder_add_rotation_with_origin(HklHolder *self, const char *name, double x, double y, double z, double ox, double oy, double oz, const HklUnit *punit) { HklVector axis_v = {{x, y, z}}; HklVector origin = {{ox, oy, oz}}; HklParameter *axis = hkl_parameter_new_rotation_with_origin(name, &axis_v, &origin, punit); int idx = hkl_geometry_add_axis(self->geometry, axis); hkl_parameter_free(axis); return hkl_holder_add_axis_if_not_present(self, idx); } HklParameter *hkl_holder_add_translation(HklHolder *self, const char *name, double x, double y, double z, const HklUnit *punit) { HklVector axis_v = {{x, y, z}}; HklParameter *axis = hkl_parameter_new_translation(name, &axis_v, punit); int idx = hkl_geometry_add_axis(self->geometry, axis); hkl_parameter_free(axis); return hkl_holder_add_axis_if_not_present(self, idx); } HklVector hkl_holder_transformation_apply(const HklHolder *self, const HklVector *v) { size_t i; HklVector res = *v; /* for each axis from the end apply the transformation to the vector */ for(i=0;iconfig->len;i++){ HklParameter *p = darray_item(self->geometry->axes, self->config->idx[self->config->len - 1 - i]); res = hkl_parameter_transformation_apply(p, &res); } return res; } /***************/ /* HklGeometry */ /***************/ const HklGeometryOperations hkl_geometry_operations_defaults = { HKL_GEOMETRY_OPERATIONS_DEFAULTS }; /** * hkl_geometry_new: (skip) * * constructor * * Returns: **/ HklGeometry *hkl_geometry_new(const HklFactory *factory, const HklGeometryOperations *ops) { HklGeometry *g = NULL; g = HKL_MALLOC(HklGeometry); g->ops = ops; g->factory = factory; hkl_source_init(&g->source, 1.54, 1, 0, 0); darray_init(g->axes); darray_init(g->holders); return g; } /** * hkl_geometry_new_copy: (skip) * @self: * * copy constructor * * Returns: **/ HklGeometry *hkl_geometry_new_copy(const HklGeometry *src) { HklGeometry *self = NULL; HklParameter **axis; HklHolder **holder; self = HKL_MALLOC(HklGeometry); *self = *src; /* copy the axes */ darray_init(self->axes); darray_foreach(axis, src->axes){ darray_append(self->axes, hkl_parameter_new_copy(*axis)); } /* copy the holders */ darray_init(self->holders); darray_foreach(holder, src->holders){ darray_append(self->holders, hkl_holder_new_copy(*holder, self)); } return self; } /** * hkl_geometry_free: (skip) * @self: * * destructor **/ void hkl_geometry_free(HklGeometry *self) { HklParameter **axis; HklHolder **holder; darray_foreach(axis, self->axes){ hkl_parameter_free(*axis); } darray_free(self->axes); darray_foreach(holder, self->holders){ hkl_holder_free(*holder); } darray_free(self->holders); free(self); } /** * hkl_geometry_set: (skip) * @self: the this ptr * @src: the other #HklGeometry to set from * * Set an #HklGeometry from another one. * * Returns: TRUE on success, FALSE if an error occurred **/ int hkl_geometry_set(HklGeometry *self, const HklGeometry *src) { size_t i; hkl_error(self->factory == src->factory); hkl_error(self->ops == src->ops); self->source = src->source; /* copy the axes configuration and mark it as dirty */ for(i=0; iaxes); ++i) hkl_parameter_init_copy(darray_item(self->axes, i), darray_item(src->axes, i), NULL); for(i=0; iholders); ++i) darray_item(self->holders, i)->q = darray_item(src->holders, i)->q; return TRUE; } /** * hkl_geometry_axis_names_get: * @self: the this ptr * * get all the axes of the given #HklGeometry * * Returns: (type gpointer): array of the axes names. **/ const darray_string *hkl_geometry_axis_names_get(const HklGeometry *self) { return &self->factory->axes; } /** * hkl_geometry_axis_get: * @self: the this ptr * @name: the name of the axis your are requesting * @error: return location for a GError, or NULL * * Return value: (allow-none): the parameter corresponding to the axis name. **/ const HklParameter *hkl_geometry_axis_get(const HklGeometry *self, const char *name, GError **error) { HklParameter **axis; hkl_error (error == NULL || *error == NULL); darray_foreach(axis, self->axes){ if (!strcmp((*axis)->name, name)) return *axis; } g_set_error(error, HKL_GEOMETRY_ERROR, HKL_GEOMETRY_ERROR_AXIS_GET, "this geometry does not contain this axis \"%s\"", name); return NULL; } /** * hkl_geometry_axis_set: * @self: the this ptr * @name: the name of the axis to set * @axis: The #HklParameter to set * @error: return location for a GError, or NULL * * Returns: TRUE on success, FALSE if an error occurred **/ int hkl_geometry_axis_set(HklGeometry *self, const char *name, const HklParameter *axis, GError **error) { HklParameter **_axis; hkl_error (error == NULL || *error == NULL); if(name != axis->name && strcmp(name, axis->name)){ g_set_error(error, HKL_GEOMETRY_ERROR, HKL_GEOMETRY_ERROR_AXIS_SET, "The axis to set \"%s\" is different from the parameter name \"%s\"\n", name, axis->name); return FALSE; } darray_foreach(_axis, self->axes){ if (*_axis == axis) break; if (!strcmp(axis->name, (*_axis)->name)){ hkl_parameter_init_copy(*_axis, axis, NULL); break; } } hkl_geometry_update(self); return TRUE; } /** * hkl_geometry_wavelength_get: * @self: the this ptr * @unit_type: the unit type (default or user) of the returned value * * Get the wavelength of the HklGeometry * * Returns: the wavelength **/ double hkl_geometry_wavelength_get(const HklGeometry *self, HklUnitEnum unit_type) { /* for now there is no unit convertion but the unit_type is * there */ return self->source.wave_length; } /** * hkl_geometry_wavelength_set: * @self: * @wavelength: * @unit_type: the unit type (default or user) of the returned value * @error: return location for a GError, or NULL * * Set the wavelength of the geometry * * Returns: TRUE on success, FALSE if an error occurred **/ int hkl_geometry_wavelength_set(HklGeometry *self, double wavelength, HklUnitEnum unit_type, GError **error) { hkl_error (error == NULL || *error == NULL); /* for now there is no unit convertion but the unit_type is * there */ self->source.wave_length = wavelength; return TRUE; } /** * hkl_geometry_init_geometry: (skip) * @self: the this ptr * @src: the #HklGeometry to set from * * initilize an HklGeometry * * Returns: TRUE on success, FALSE if an error occurred **/ int hkl_geometry_init_geometry(HklGeometry *self, const HklGeometry *src) { return hkl_geometry_set(self, src); } /** * hkl_geometry_add_holder: (skip) * @self: * * add an Holder to the #HklGeometry * * Returns: **/ HklHolder *hkl_geometry_add_holder(HklGeometry *self) { HklHolder *holder = hkl_holder_new(self); darray_append(self->holders, holder); return holder; } /** * hkl_geometry_update: (skip) * @self: * * update the geometry internal once an Axis values changed **/ void hkl_geometry_update(HklGeometry *self) { HklParameter **axis; int ko = 0; darray_foreach(axis, self->axes){ if ((*axis)->changed) { ko = 1; break; } } if (ko) { HklHolder **holder; darray_foreach(holder, self->holders){ hkl_holder_update(*holder); } darray_foreach(axis, self->axes){ (*axis)->changed = FALSE; } } } const char *hkl_geometry_name_get(const HklGeometry *self) { return hkl_factory_name_get(self->factory); } /** * hkl_geometry_get_axis_idx_by_name: (skip) * @self: * @name: * * get the index of the axes named @name in the geometry * * Returns: -1 if the axis was not found **/ int hkl_geometry_get_axis_idx_by_name(const HklGeometry *self, const char *name) { uint i = 0; HklParameter **axis; if (!self || !name) return -1; darray_foreach(axis, self->axes){ if (!strcmp((*axis)->name, name)) return i; ++i; } return -1; } /** * hkl_geometry_get_axis_by_name: * @self: * @name: * * get an #HklAxis using its name * * Returns: (transfer none): **/ HklParameter *hkl_geometry_get_axis_by_name(HklGeometry *self, const char *name) { HklParameter **axis; darray_foreach(axis, self->axes){ if (!strcmp((*axis)->name, name)) return (*axis); } return NULL; } /** * hkl_geometry_axis_values_get: * @self: the this ptr * @values: (array length=n_values): the values to get * @n_values: the size of the values array. * @unit_type: the unit type (default or user) of the returned value * * fill the values array with the #HklGeometry axes. **/ void hkl_geometry_axis_values_get(const HklGeometry *self, double values[], size_t n_values, HklUnitEnum unit_type) { size_t i = 0; HklParameter **axis; g_return_if_fail (n_values == darray_size(self->axes)); darray_foreach(axis, self->axes){ values[i++] = hkl_parameter_value_get(*axis, unit_type); } } /** * hkl_geometry_axis_values_set: * @self: the this ptr * @values: (array length=n_values): the values to set. * @n_values: the length of the values array. * @unit_type: the unit type (default or user) of the returned value * @error: return location for a GError, or NULL * * Set the #HklGeometry axes values * * Returns: TRUE on success, FALSE if an error occurred **/ int hkl_geometry_axis_values_set(HklGeometry *self, double values[], size_t n_values, HklUnitEnum unit_type, GError **error) { uint i = 0; HklParameter **axis; hkl_error (error == NULL || *error == NULL); g_assert(n_values == darray_size(self->axes)); darray_foreach(axis, self->axes){ if(!hkl_parameter_value_set(*axis, values[i++], unit_type, error)){ g_assert (error == NULL || *error != NULL); return FALSE; } } g_assert (error == NULL || *error == NULL); hkl_geometry_update(self); return TRUE; } /** * hkl_geometry_randomize: (skip) * @self: * * randomize the #HklGeometry **/ void hkl_geometry_randomize(HklGeometry *self) { HklParameter **axis; darray_foreach(axis, self->axes){ hkl_parameter_randomize(*axis); } hkl_geometry_update(self); } /** * hkl_geometry_set_values_v: (skip) * @self: * @unit_type: the unit type (default or user) of the returned value * @error: * "...: * * set the axes values * * Returns: **/ int hkl_geometry_set_values_v(HklGeometry *self, HklUnitEnum unit_type, GError **error, ...) { va_list ap; HklParameter **axis; hkl_error (error == NULL || *error == NULL); va_start(ap, error); darray_foreach(axis, self->axes){ if(!hkl_parameter_value_set(*axis, va_arg(ap, double), unit_type, error)){ g_assert (error == NULL || *error != NULL); va_end(ap); hkl_geometry_update(self); return FALSE; } } g_assert (error == NULL || *error == NULL); va_end(ap); hkl_geometry_update(self); return TRUE; } /** * hkl_geometry_distance: * @self: the this ptr * @ref: the #HklGeometry to compare with * * compute the distance between two #HklGeometries * * Returns: the distance between the two geometries **/ double hkl_geometry_distance(const HklGeometry *self, const HklGeometry *ref) { size_t i; double value1, value2; double distance = 0.; if (!self || !ref) return 0.; for(i=0; iaxes); ++i){ value1 = darray_item(self->axes, i)->_value; value2 = darray_item(ref->axes, i)->_value; distance += fabs(value2 - value1); } return distance; } /** * hkl_geometry_distance_orthodromic: (skip) * @self: the this ptr * @ref: the reference #HklGeometry to compare with. * * Returns: the orthodromique distance **/ double hkl_geometry_distance_orthodromic(const HklGeometry *self, const HklGeometry *ref) { size_t i; double value1, value2; double distance = 0.; if (!self || !ref) return 0.; for(i=0; iaxes); ++i){ double d; value1 = darray_item(self->axes, i)->_value; value2 = darray_item(ref->axes, i)->_value; d = fabs(gsl_sf_angle_restrict_symm(value2) - gsl_sf_angle_restrict_symm(value1)); /* as M_PI and -M_PI are included in the GSL restriction */ if (d > M_PI) d = 2*M_PI - d; distance += d; } return distance; } /** * hkl_geometry_is_valid: (skip) * @self: * * check if all axes of the #HklGeometry are valid. * * Returns: **/ int hkl_geometry_is_valid(const HklGeometry *self) { HklParameter **axis; darray_foreach(axis, self->axes){ if(!hkl_parameter_is_valid(*axis)) return FALSE; } return TRUE; } /** * hkl_geometry_is_valid_range: (skip) * @self: * * check if all axes of the #HklGeometry are valid. * (there is a difference for axis) * * Returns: **/ int hkl_geometry_is_valid_range(const HklGeometry *self) { HklParameter **axis; darray_foreach(axis, self->axes){ if(!hkl_parameter_is_valid_range(*axis)) return FALSE; } return TRUE; } /** * hkl_geometry_closest_from_geometry_with_range: (skip) * @self: * @ref: * * get the closest axes values in the HklInterval compatible with the * current axes values * * Returns: **/ int hkl_geometry_closest_from_geometry_with_range(HklGeometry *self, const HklGeometry *ref) { size_t i; uint len = darray_size(self->axes); double *values = alloca(len * sizeof(*values)); int ko = FALSE; for(i=0;iaxes, i), darray_item(ref->axes, i)); if(gsl_isnan(values[i])){ ko = TRUE; break; } } if(!ko){ for(i=0;iaxes, i), values[i], HKL_UNIT_DEFAULT, NULL); hkl_geometry_update(self); } return ko; } /** * hkl_geometry_sample_rotation_get: * @self: the self @HklGeometry@ * @sample: the rotated sample. * * return the rotation part of the given sample in the laboratory basis. * * Returns: the rotation express as a quaternion. **/ HklQuaternion hkl_geometry_sample_rotation_get(const HklGeometry *self, const HklSample *sample) { return hkl_geometry_sample_holder_get(self, sample)->q; } /** * hkl_geometry_detector_rotation_get: * @self: the self @HklGeometry@ * @detector: the @HklDetector@ * * return the rotation part of the given detector in the laboratory * basis. * * Returns: the rotation express as a quaternion. **/ HklQuaternion hkl_geometry_detector_rotation_get(const HklGeometry *self, const HklDetector *detector) { return hkl_geometry_detector_holder_get(self, detector)->q; } /** * hkl_geometry_fprintf: (skip) * @file: * @self: * * print into a file the #HklGeometry **/ void hkl_geometry_fprintf(FILE *file, const HklGeometry *self) { fprintf(file, " HklGeometry type: \"%s\" wavelength: %f", self->factory->name, self->source.wave_length); for(unsigned int i=0; iaxes); ++i){ fprintf(file, " "); hkl_parameter_fprintf(file, darray_item(self->axes, i)); } } HklHolder *hkl_geometry_sample_holder_get(const HklGeometry *self, const HklSample *sample) { return self->ops->sample_holder_get(self, sample); } HklHolder *hkl_geometry_detector_holder_get(const HklGeometry *self, const HklDetector *detector) { return self->ops->detector_holder_get(self, detector); } HklVector hkl_geometry_ki_get(const HklGeometry *self) { return self->ops->ki_get(self); } HklVector hkl_geometry_kf_get(const HklGeometry *self, const HklDetector *detector) { return self->ops->kf_get(self, detector); } /*******************/ /* HklGeometryList */ /*******************/ /** * hkl_geometry_list_new: (skip) * * constructor * * Returns: **/ HklGeometryList *hkl_geometry_list_new(void) { HklGeometryList *self; self = HKL_MALLOC(HklGeometryList); list_head_init(&self->items); self->n_items = 0; self->multiply = NULL; return self; } /** * hkl_geometry_list_new_copy: (skip) * @self: * * copy constructor * * Returns: **/ HklGeometryList *hkl_geometry_list_new_copy(const HklGeometryList *self) { HklGeometryList *dup; HklGeometryListItem *item; if (!self) return NULL; dup = HKL_MALLOC(HklGeometryList); list_head_init(&dup->items); /* now copy the item arrays */ list_for_each(&self->items, item, list){ list_add_tail(&dup->items, &hkl_geometry_list_item_new_copy(item)->list); } dup->n_items = self->n_items; dup->multiply = self->multiply; return dup; } /** * hkl_geometry_list_free: (skip) * @self: * * destructor **/ void hkl_geometry_list_free(HklGeometryList *self) { hkl_geometry_list_reset(self); free(self); } /** * hkl_geometry_list_add: (skip) * @self: The current #HklGeometryList * @geometry: the #HklGeometry to add * * this method Add a geometry to the geometries * * This method try to be clever by allocating memory only if the * current length of the geometries is not large enought. Then it just * set the geometry axes and copy it to the right geometries. We do * not gives the x len as it is equal to the self->axes_len. **/ void hkl_geometry_list_add(HklGeometryList *self, const HklGeometry *geometry) { HklGeometryListItem *item; /* now check if the geometry is already in the geometry list */ list_for_each(&self->items, item, list){ if (hkl_geometry_distance_orthodromic(geometry, item->geometry) < HKL_EPSILON) return; } list_add_tail(&self->items, &hkl_geometry_list_item_new(geometry)->list); self->n_items += 1; } /** * hkl_geometry_list_n_items_get: (skip) * @self: the this ptr * * get the number of items in the #HklGeometryList * * Returns: the number of items in the list **/ size_t hkl_geometry_list_n_items_get(const HklGeometryList *self) { return self->n_items; } /** * hkl_geometry_list_items_first_get: (skip) * @self: the this ptr * * get the first solution of the #HklGeometryList * * Returns: the first solution of the list **/ const HklGeometryListItem *hkl_geometry_list_items_first_get(const HklGeometryList *self) { return list_top(&self->items, HklGeometryListItem, list); } /** * hkl_geometry_list_items_next_get: (skip) * @self: the this ptr * @item: the current #HklGeometryListItem solution of the #HklGeometryList * * get the next solution of the #HklGeometryList from the current item location. * * Returns: the next solution of the list **/ const HklGeometryListItem *hkl_geometry_list_items_next_get(const HklGeometryList *self, const HklGeometryListItem *item) { return list_next(&self->items, item, list); } /** * hkl_geometry_list_reset: (skip) * @self: the this ptr * * reset the HklGeometry, in fact it is a sort of clean method remove * all the items of the list. **/ void hkl_geometry_list_reset(HklGeometryList *self) { HklGeometryListItem *item; HklGeometryListItem *next; list_for_each_safe(&self->items, item, next, list) hkl_geometry_list_item_free(item); list_head_init(&self->items); self->n_items = 0; } /** * hkl_geometry_list_sort: (skip) * @self: * @ref: * * sort the #HklGeometryList compare to the distance of the given * #HklGeometry **/ void hkl_geometry_list_sort(HklGeometryList *self, HklGeometry *ref) { double *distances = alloca(self->n_items * sizeof(*distances)); size_t *idx = alloca(self->n_items * sizeof(*idx)); HklGeometryListItem **items = alloca(self->n_items * sizeof(*items)); HklGeometryListItem *item; int i = 0; size_t x; int j, p; /* compute the distances once for all */ list_for_each(&self->items, item, list){ distances[i] = hkl_geometry_distance(ref, item->geometry); idx[i] = i; items[i] = item; i++; } /* insertion sorting */ for(i=1; in_items; ++i){ x = idx[i]; /* find the smallest idx p lower than i with distance[idx[p]] >= distance[x] */ for(p = 0; distances[idx[p]] < distances[x] && fabs(distances[idx[p]] - distances[x]) > HKL_EPSILON; p++); /* move everythings in between p and i */ for(j=i-1; j>=p; j--) idx[j+1] = idx[j]; idx[p] = x; /* insert the saved idx */ } list_head_init(&self->items); for(i=0; in_items; ++i) list_add_tail(&self->items, &items[idx[i]]->list); } /** * hkl_geometry_list_fprintf: (skip) * @f: * @self: * * print to a file the #HklGeometryList **/ void hkl_geometry_list_fprintf(FILE *f, const HklGeometryList *self) { uint i = 0; double value; if(!self) return; fprintf(f, "multiply method: %p \n", self->multiply); if(self->n_items){ HklGeometryListItem *item; HklParameter **axis; fprintf(f, " "); darray_foreach(axis, list_top(&self->items, HklGeometryListItem, list)->geometry->axes){ fprintf(f, "%19s", (*axis)->name); } /* geometries */ list_for_each(&self->items, item, list){ fprintf(f, "\n%d :", i++); darray_foreach(axis, item->geometry->axes){ value = hkl_parameter_value_get(*axis, HKL_UNIT_DEFAULT); fprintf(f, " % 18.15f %s", value, (*axis)->unit->repr); } fprintf(f, "\n "); darray_foreach(axis, item->geometry->axes){ value = hkl_parameter_value_get(*axis, HKL_UNIT_USER); fprintf(f, " % 18.15f %s", value, (*axis)->punit->repr); } fprintf(f, "\n"); } } } /** * hkl_geometry_list_multiply: (skip) * @self: * * apply the multiply lenthod to the #HklGeometry **/ void hkl_geometry_list_multiply(HklGeometryList *self) { uint i = 0; uint len = self->n_items; HklGeometryListItem *item; if(!self || !self->multiply) return; /* * warning this method change the self->len so we need to save it * before using the recursive perm_r calls */ for(i=0, item=list_top(&self->items, HklGeometryListItem, list); iitems, item, list)) self->multiply(self, item); } static void perm_r(HklGeometryList *self, const HklGeometry *ref, const HklGeometry *geometry, const int perm[], const unsigned int axis_idx) { if (axis_idx == darray_size(geometry->axes)){ if(hkl_geometry_distance(geometry, ref) > HKL_EPSILON){ list_add_tail(&self->items, &hkl_geometry_list_item_new(geometry)->list); self->n_items++; } }else{ if(perm[axis_idx]){ HklParameter *axis = darray_item(geometry->axes, axis_idx); const double max = axis->range.max;; const double value0 = axis->_value; double value; value = value0; do{ /* fprintf(stdout, "\n%d %s, %f", axis_idx, hkl_axis_get_name(axis), value * HKL_RADTODEG); */ perm_r(self, ref, geometry, perm, axis_idx + 1); value += 2*M_PI; if(value <= (max + HKL_EPSILON)){ /* optimisation here: */ /* instead of using set_value * we directly write the * HklParameter value, BEWARE * that it require that * HklParameter is a rotation * (for now it is always * true */ axis->_value = value; } }while(value <= (max + HKL_EPSILON)); /* restore the initial value */ axis->_value = value0; } else perm_r(self, ref, geometry, perm, axis_idx + 1); } } void hkl_geometry_list_multiply_from_range(HklGeometryList *self) { uint i; uint len = self->n_items; size_t j = 0; const HklGeometryListItem *item; if(!self) return; /* * warning this method change the self->len so we need to save it * before using the recursive perm_r calls */ for(i=0, item=list_top(&self->items, HklGeometryListItem, list); iitems, item, list)){ HklGeometry *geometry; HklParameter **axis; int *perm; geometry = hkl_geometry_new_copy(item->geometry); perm = alloca(darray_size(geometry->axes) * sizeof(*perm)); /* find axes to permute and the first solution of thoses axes */ darray_foreach(axis, geometry->axes){ perm[j] = hkl_parameter_is_valid(*axis); /* fprintf(stdout, "%d %d\n", j, perm[j]); */ if (perm[j]) hkl_parameter_value_set_smallest_in_range(*axis); ++j; } /* * fprintf(stdout, "FIRST SOLUTION\n"); * hkl_geometry_fprintf(stdout, geometry); */ perm_r(self, item->geometry, geometry, perm, 0); hkl_geometry_free(geometry); } } /** * hkl_geometry_list_remove_invalid: (skip) * @self: * * remove all invalid #HklGeometry from the #HklGeometryList **/ void hkl_geometry_list_remove_invalid(HklGeometryList *self) { HklGeometryListItem *item, *next; list_for_each_safe(&self->items, item, next, list) if(!hkl_geometry_is_valid_range(item->geometry)){ list_del(&item->list); self->n_items--; hkl_geometry_list_item_free(item); } } /***********************/ /* HklGeometryListItem */ /***********************/ /** * hkl_geometry_list_item_new: (skip) * @geometry: * * constructor * * Returns: **/ HklGeometryListItem *hkl_geometry_list_item_new(const HklGeometry *geometry) { HklGeometryListItem *self; if(!geometry) return NULL; self = HKL_MALLOC(HklGeometryListItem); self->geometry = hkl_geometry_new_copy(geometry); return self; } /** * hkl_geometry_list_item_new_copy: (skip) * @self: * * copy constructor * * Returns: **/ HklGeometryListItem *hkl_geometry_list_item_new_copy(const HklGeometryListItem *self) { HklGeometryListItem *dup; if(!self) return NULL; dup = HKL_MALLOC(HklGeometryListItem); dup->geometry = hkl_geometry_new_copy(self->geometry); return dup; } /** * hkl_geometry_list_item_free: (skip) * @self: * * destructor **/ void hkl_geometry_list_item_free(HklGeometryListItem *self) { if(!self) return; hkl_geometry_free(self->geometry); free(self); } /** * hkl_geometry_list_item_geometry_get: * @self: the this ptr * * Return value: The geometry contain inside the HklGeometryListItem **/ const HklGeometry *hkl_geometry_list_item_geometry_get(const HklGeometryListItem *self) { return self->geometry; } hkl-5.0.0.2449/hkl/hkl-binding-private.h0000644000175000017500000000721113236600666017711 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2012-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_BINDING_PRIVATE_H__ #define __HKL_BINDING_PRIVATE_H__ #include // for GError, GHashTable, etc #include // for uint #include "hkl.h" // for HKLAPI, HklGeometry, etc G_BEGIN_DECLS /*****************/ /* HklQuaternion */ /*****************/ HKLAPI HklMatrix *hkl_quaternion_to_matrix_binding(const HklQuaternion *self) HKL_ARG_NONNULL(1); /**************/ /* HklFactory */ /**************/ HKLAPI GHashTable *hkl_factories(void); /***************/ /* HklGeometry */ /***************/ HKLAPI const char **hkl_geometry_axis_names_get_binding(const HklGeometry *self, size_t *length) HKL_ARG_NONNULL(1, 2); HKLAPI double* hkl_geometry_axis_values_get_binding(const HklGeometry *self, unsigned int *len, HklUnitEnum unit_type) HKL_ARG_NONNULL(1, 2); HKLAPI HklQuaternion *hkl_geometry_sample_rotation_get_binding(const HklGeometry *self, const HklSample *sample) HKL_ARG_NONNULL(1, 2); HKLAPI HklQuaternion *hkl_geometry_detector_rotation_get_binding(const HklGeometry *self, const HklDetector *detector) HKL_ARG_NONNULL(1, 2); /*******************/ /* HklGeometryList */ /*******************/ HKLAPI GSList* hkl_geometry_list_items(HklGeometryList *self) HKL_ARG_NONNULL(1); /*************/ /* HklEngine */ /*************/ HKLAPI const char **hkl_engine_modes_names_get_binding(const HklEngine *self, size_t *length) HKL_ARG_NONNULL(1, 2); HKLAPI const char **hkl_engine_pseudo_axis_names_get_binding(HklEngine *self, size_t *length) HKL_ARG_NONNULL(1, 2); HKLAPI const char **hkl_engine_parameters_names_get_binding(const HklEngine *self, size_t *length) HKL_ARG_NONNULL(1, 2); HKLAPI double *hkl_engine_parameters_values_get_binding(const HklEngine *self, guint *len, HklUnitEnum unit_type) HKL_ARG_NONNULL(1, 2); HKLAPI const char **hkl_engine_axis_names_get_binding(const HklEngine *self, HklEngineAxisNamesGet mode, size_t *length) HKL_ARG_NONNULL(1, 3); HKLAPI double *hkl_engine_pseudo_axis_values_get_binding(const HklEngine *self, guint *len, HklUnitEnum unit_type); /***************************/ /* HklPSeudoAxisEngineList */ /***************************/ HKLAPI GSList* hkl_engine_list_engines_get_as_gslist(HklEngineList *self); /*************/ /* HklSample */ /*************/ HKLAPI GSList *hkl_sample_reflections_get(const HklSample *self); HKLAPI HklSampleReflection *hkl_sample_add_reflection_binding(HklSample *self, const HklGeometry *geometry, const HklDetector *detector, double h, double k, double l, GError **error); G_END_DECLS #endif /* __HKL_BINDING_PRIVATE_H__ */ hkl-5.0.0.2449/hkl/hkl-pseudoaxis-common-private.h0000644000175000017500000000656213236600666021761 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel * Maria-Teresa Nunez-Pardo-de-Verra */ #ifndef __HKL_PSEUDOAXIS_COMMON_PRIVATE__ #define __HKL_PSEUDOAXIS_COMMON_PRIVATE__ #include // for gsl_vector #include "hkl-pseudoaxis-auto-private.h" #include "hkl-pseudoaxis-private.h" // for HklModeOperations, etc #include "hkl.h" // for HklEngine, HklDetector, etc #include "hkl-pseudoaxis-common-readonly-private.h" struct HklHklRead { HklVector ki; HklVector kf; HklVector Q; HklVector hkl; }; extern struct HklHklRead hkl_hkl_read(const HklGeometry *geometry, const HklDetector *detector, const HklSample *sample); struct HklHklWrite { HklVector ki; HklVector kf; HklVector Q; HklVector hkl; HklVector dQ; }; extern struct HklHklWrite hkl_hkl_write(const HklGeometry *geometry, const HklDetector *detector, const HklSample *sample, const HklVector *hkl); /**************************/ /* hkl double_diffraction */ /**************************/ struct HklDoubleDiffractionWrite { struct HklHklWrite hkl1W; struct HklHklWrite hkl2W; HklVector kf2; }; extern struct HklDoubleDiffractionWrite hkl_double_diffraction_write(const HklGeometry *geometry, const HklDetector *detector, const HklSample *sample, const HklVector *hkl1, const HklVector *hkl2); /******************************************/ /* the psi_constant_vertical get set part */ /******************************************/ struct HklPsiWrite { struct HklHklWrite hklW; struct HklHklWrite hkl2W; HklVector Qn; /* Q normalized */ HklVector hkl2; /* projection of hkl2 on plan Q */ HklVector n; /* compute n the intersection of the plan P(kf, ki) and PQn (normal Qn) */ double psi; /* computed psi */ int status; }; extern struct HklPsiWrite hkl_psi_write(const HklGeometry *geometry, const HklDetector *detector, const HklSample *sample, const HklVector *hkl, const HklVector *hkl2); /***********************/ /* hkl emergence fixed */ /***********************/ struct HklEmergenceFixedWrite { struct HklHklWrite hklW; HklVector n; /* the surface orientation */ double emergence; /* the computed emergence */ }; extern struct HklEmergenceFixedWrite hkl_emergence_fixed_write(const HklGeometry *geometry, const HklDetector *detector, const HklSample *sample, const HklVector *hkl, const HklVector *n); #endif hkl-5.0.0.2449/hkl/hkl-engine-petra3-p08-lisa.c0000644000175000017500000005522213236600666020623 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * Copyright (C) 2017 DESY * * Authors: Picca Frédéric-Emmanuel * Teresa Núñez */ #include "hkl.h" #include // for gsl_isnan #include "hkl-axis-private.h" #include "hkl-factory-private.h" // for autodata_factories_, etc #include "hkl-matrix-private.h" #include "hkl-pseudoaxis-common-hkl-private.h" // for hkl_mode_operations, etc #include "hkl-pseudoaxis-common-psi-private.h" // for hkl_engine_psi_new, etc #include "hkl-pseudoaxis-common-q-private.h" // for hkl_engine_q2_new, etc #include "hkl-pseudoaxis-common-tth-private.h" // for hkl_engine_tth2_new, etc #include "hkl-pseudoaxis-common-readonly-private.h" #include "hkl-sample-private.h" /*********************** Description There are 5 real motors: mchi (monochromator rotation) -> rotation y axis +1 sphi (sample rotation) -> rotation z axis +1 dtth (detector table rotation) -> rotation z axis -1 dh (detector height) -> translation z axis +1 drot (detector rotation) -> rotation x axis +1 There are 4 pseudo motors related to them: alpha (incident angle - kin with xy plane) beta (outgoing angle - kout with xy plane) sth (angle between the kin projection and the vector defined via sphi) stth (angle between kin and kout projections in the xy plane) sth and stth has to be independently as pseudomotors. For a given energy, E, one can compute mchi, sphi, dtth, dh and drot from alpha, beta, th and tth and viceversa. The solutions are not unique, for fixing them one has to set: FRED: reading this and looking at the schema, it seems that you need a pseudo motor engine with the four pseudo motors. something which takes alpha, beta, sth and stth in order to compute the 5 real motors positions. So maybe the right things to do is to create a pm with all the pseudo motors and not only stth and sth. Teresa: I agree. The users told me only about stth and sth, as the manual also says, but it is better to have the four ones. Maybe the right things to do is to create for now, only pseudo motors with the read part. So once we have this setup it will be easier for us to understand what is going on. - Detector rotation tracking -> the detector table rotation, dtth, follows the monochromator rotation, mchi, so that the position of stth stays constant. For stth = 0 the detector is in diffraction plane. - mchi rotation direction -> if set to '+' the mchi angle goes from 0 to pi, set to '-' it goes from 0 to -pi. - allow rotation sample -> if 'yes' the sample will be rotated with the monochromator, so that sth will stay constant. If 'no' the sample will not be rotated. The following geometry constants have to be set: - distance sample center to detector = 500 - distance first crystal (mono1) to sample center = 650 - distance first crystal (mono1) to second one (mono2) = 25 - first crystal diffraction parameter - second crystal diffraction parameter lambda = hc_over_e/Energy bragg1 = g_tau1 * lambda * 1/(4*pi) bragg2 = g_tau2 * lambda * 1/(4*pi) where the crystals used are Si111 and Si220. g_tau1 = 2*PI/d111 g_tau2 = 2*PI/d220 where d111 and d220 are the lattice plane distances (in Amstrong) of the crystals. d111 = 3.136 A d220 = 1.920 A FRED: Do you want to set these parameters in the code or do you want to add these parameters to the geometry dynamiquely ? So the user can change this during the experimenta ? I would prefer a static declaration for now in the code. For a alpha, beta, th and tth set there are different possibilities of choosing the position of the real motors for getting a given h,k,l. Four possible geometry modes have to be implemented, each mode gives an unique solution for the real computers computed from the angles. These modes are: - mode 0 -> K axis from reciprocal space parallel to incident beam. - mode 1 -> alpha = beta - mode 2 -> th = tth/2 - mode 3 -> K axis from reciprocal space parallel to outgoing beam. There are some corrections (motor movements) that have to be done if the energy is changed, in order to correct the shifts in the position of the beam on the sample. *******************/ /**************/ /* Axes names */ /**************/ #define SPHI "sphi" #define DTTH "dtth" #define DH "dh" #define DROT "drot" #define MCHI "mchi" #define D_SD 0.5 /* meter */ #define D_Si111 3.136 /* Si111 of mono1 Angstöm */ #define D_Si220 1.920 /* Si220 ok mono2 Angstöm */ #define PETRA3_P08_LISA_SOURCE_HOLDER_IDX 0 #define PETRA3_P08_LISA_SAMPLE_HOLDER_IDX 1 #define PETRA3_P08_LISA_DETECTOR_HOLDER_IDX 2 #define HKL_GEOMETRY_PETRA3_P08_LISA_DESCRIPTION \ "+ xrays source fix along the :math:`\\vec{x}` direction (1, 0, 0)\n" \ "+ 1 axes for the monochromator\n" \ "\n" \ " + **" MCHI "** : rotation around the :math:`\\vec{x}` direction (1, 0, 0)\n" \ "\n" \ "+ 1 axis for the sample\n" \ "\n" \ " + **" SPHI "** : rotating around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ "\n" \ "+ 2 axes for the detector\n" \ "\n" \ " + **" DTTH "** : rotation around the :math:`-\\vec{z}` direction (0, 0, -1)\n" \ " + **" DH "** : translation along the :math:`\\vec{z}` direction (0, 0, 1)\n" \ " + **" DROT "** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" static double _alpha_max(double wavelength, double d1, double d2) { double theta1 = asin(wavelength / (2 * d1)); double theta2 = asin(wavelength / (2 * d2)); return 2 * (theta2 - theta1); } static int hkl_mode_hkl_petra3_p08_lisa_get_real(HklMode *self, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error) { HklHolder *holder; HklMatrix RUB; HklVector hkl; HklVector ki; HklVector Q; HklEngineHkl *engine_hkl = container_of(engine, HklEngineHkl, engine); /* update the geometry internals */ hkl_geometry_update(geometry); /* R * UB */ /* for the lisa geometry the holder 1 is the sample holder. */ holder = hkl_geometry_sample_holder_get(geometry, sample); hkl_quaternion_to_matrix(&holder->q, &RUB); hkl_matrix_times_matrix(&RUB, &sample->UB); /* kf - ki = Q */ ki = hkl_geometry_ki_get(geometry); Q = hkl_geometry_kf_get(geometry, detector); hkl_vector_minus_vector(&Q, &ki); /* compute hkl */ hkl_matrix_solve(&RUB, &hkl, &Q); engine_hkl->h->_value = hkl.data[0]; engine_hkl->k->_value = hkl.data[1]; engine_hkl->l->_value = hkl.data[2]; return TRUE; } int hkl_mode_hkl_petra3_p08_lisa_set_real(HklMode *self, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error) { /* FRED: to implement */ /* int last_axis; */ /* hkl_error (error == NULL || *error == NULL); */ /* /\* check the input parameters *\/ */ /* if(!hkl_is_reachable(engine, geometry->source.wave_length, */ /* error)){ */ /* hkl_assert(error == NULL || *error != NULL); */ /* return FALSE; */ /* } */ /* hkl_assert(error == NULL || *error == NULL); */ /* /\* compute the mode *\/ */ /* if(!hkl_mode_auto_set_real(self, engine, */ /* geometry, detector, sample, */ /* error)){ */ /* hkl_assert(error == NULL || *error != NULL); */ /* //fprintf(stdout, "message :%s\n", (*error)->message); */ /* return FALSE; */ /* } */ /* hkl_assert(error == NULL || *error == NULL); */ /* /\* check that the mode allow to move a sample axis *\/ */ /* /\* FIXME for now the sample holder is the first one *\/ */ /* last_axis = get_last_axis_idx(geometry, 0, &self->info->axes_w); */ /* if(last_axis >= 0){ */ /* uint i; */ /* const HklGeometryListItem *item; */ /* uint len = engine->engines->geometries->n_items; */ /* /\* For each solution already found we will generate another one *\/ */ /* /\* using the Ewalds construction by rotating Q around the last sample *\/ */ /* /\* axis of the mode until it intersect again the Ewald sphere. *\/ */ /* /\* FIXME do not work if ki is colinear with the axis. *\/ */ /* /\* for this we needs : *\/ */ /* /\* - the coordinates of the end of the Q vector (q) *\/ */ /* /\* - the last sample axis orientation of the mode (axis_v) *\/ */ /* /\* - the coordinates of the center of the ewalds sphere (c) *\/ */ /* /\* - the coordinates of the center of rotation of the sample (o = 0, 0, 0) *\/ */ /* /\* then we can : *\/ */ /* /\* - project the origin in plane of normal axis_v containing q (o') *\/ */ /* /\* - project the center of the ewalds sphere into the same plan (c') *\/ */ /* /\* - rotate q around this (o', c') line of 180° to find the (q2) solution *\/ */ /* /\* - compute the (kf2) corresponding to this q2 solution *\/ */ /* /\* at the end we just need to solve numerically the position of the detector *\/ */ /* /\* we will add solution to the geometries so save its length before *\/ */ /* for(i=0, item=list_top(&engine->engines->geometries->items, HklGeometryListItem, list); */ /* iengines->geometries->items, item, list)){ */ /* int j; */ /* HklVector ki; */ /* HklVector kf2; */ /* HklVector q; */ /* HklVector axis_v; */ /* HklQuaternion qr; */ /* HklAxis *axis; */ /* HklVector cp = {{0}}; */ /* HklVector op = {{0}}; */ /* double angle; */ /* HklGeometry *geom; */ /* geom = hkl_geometry_new_copy(item->geometry); */ /* /\* get the Q vector kf - ki *\/ */ /* hkl_detector_compute_kf(detector, geom, &q); */ /* hkl_source_compute_ki(&geom->source, &ki); */ /* hkl_vector_minus_vector(&q, &ki); */ /* /\* compute the current orientation of the last axis *\/ */ /* axis = container_of(darray_item(geom->axes, */ /* darray_item(geom->holders, 0)->config->idx[last_axis]), */ /* HklAxis, parameter); */ /* axis_v = axis->axis_v; */ /* hkl_quaternion_init(&qr, 1, 0, 0, 0); */ /* for(j=0; jaxes, */ /* darray_item(geom->holders, 0)->config->idx[j]), */ /* HklAxis, parameter)->q); */ /* hkl_vector_rotated_quaternion(&axis_v, &qr); */ /* /\* - project the center of the ewalds sphere into the same plan (c') *\/ */ /* hkl_vector_minus_vector(&cp, &ki); */ /* hkl_vector_project_on_plan_with_point(&cp, &axis_v, &q); */ /* hkl_vector_project_on_plan_with_point(&op, &axis_v, &q); */ /* /\* - rotate q around this (o', c') line of 180° to find the (q2) solution *\/ */ /* kf2 = q; */ /* hkl_vector_rotated_around_line(&kf2, M_PI, &cp, &op); */ /* angle = hkl_vector_oriented_angle_points(&q, &op, &kf2, &axis_v); */ /* /\* TODO parameter list for geometry *\/ */ /* if(!hkl_parameter_value_set(&axis->parameter, */ /* hkl_parameter_value_get(&axis->parameter, HKL_UNIT_DEFAULT) + angle, */ /* HKL_UNIT_DEFAULT, error)) */ /* return FALSE; */ /* hkl_geometry_update(geom); */ /* #ifdef DEBUG */ /* fprintf(stdout, "\n- try to add a solution by rotating Q <%f, %f, %f> around the \"%s\" axis <%f, %f, %f> of %f radian", */ /* q.data[0], q.data[1], q.data[2], */ /* ((HklParameter *)axis)->name, */ /* axis_v.data[0], axis_v.data[1], axis_v.data[2], */ /* angle); */ /* fprintf(stdout, "\n op: <%f, %f, %f>", op.data[0], op.data[1], op.data[2]); */ /* fprintf(stdout, "\n q2: <%f, %f, %f>", kf2.data[0], kf2.data[1], kf2.data[2]); */ /* #endif */ /* hkl_vector_add_vector(&kf2, &ki); */ /* /\* at the end we just need to solve numerically the position of the detector *\/ */ /* if(fit_detector_position(self, geom, detector, &kf2)) */ /* hkl_geometry_list_add(engine->engines->geometries, */ /* geom); */ /* hkl_geometry_free(geom); */ /* } */ /* } */ return TRUE; } #define HKL_MODE_HKL_PETRA3_P08_LISA_OPERATIONS_DEFAULTS \ HKL_MODE_OPERATIONS_AUTO_DEFAULTS, \ .get = hkl_mode_hkl_petra3_p08_lisa_get_real, \ .set = hkl_mode_hkl_petra3_p08_lisa_set_real static const HklModeOperations hkl_mode_hkl_petra3_p08_lisa_operations = { HKL_MODE_HKL_PETRA3_P08_LISA_OPERATIONS_DEFAULTS, }; static const char* hkl_geometry_petra3_p08_lisa_axes[] = {MCHI, SPHI, DTTH, DH, DROT}; static HklHolder *hkl_geometry_petra3_p08_lisa_sample_holder_get_real(const HklGeometry *geometry, const HklSample *sample) { return darray_item(geometry->holders, PETRA3_P08_LISA_SAMPLE_HOLDER_IDX); } static HklHolder *hkl_geometry_petra3_p08_lisa_detector_holder_get_real(const HklGeometry *geometry, const HklDetector *detector) { return darray_item(geometry->holders, PETRA3_P08_LISA_DETECTOR_HOLDER_IDX); } static HklVector hkl_geometry_petra3_p08_lisa_ki_get_real(const HklGeometry *geometry) { double alpha_max = _alpha_max(geometry->source.wave_length, D_Si111, D_Si220); HklHolder *holder; HklVector ki = {{cos(alpha_max), 0, -sin(alpha_max)}}; holder = darray_item(geometry->holders, PETRA3_P08_LISA_SOURCE_HOLDER_IDX); ki = hkl_holder_transformation_apply(holder, &ki); hkl_vector_times_double(&ki, HKL_TAU / geometry->source.wave_length); return ki; } static HklVector hkl_geometry_petra3_p08_lisa_kf_get_real(const HklGeometry *geometry, const HklDetector *detector) { HklHolder *holder; HklVector kf = {{D_SD, 0, 0}}; holder = hkl_geometry_detector_holder_get(geometry, detector); kf = hkl_holder_transformation_apply(holder, &kf); hkl_vector_normalize(&kf); hkl_vector_times_double(&kf, HKL_TAU / geometry->source.wave_length); return kf; } #define HKL_GEOMETRY_PETRA3_P08_LISA_OPERATIONS_DEFAULTS \ HKL_GEOMETRY_OPERATIONS_DEFAULTS, \ .sample_holder_get = hkl_geometry_petra3_p08_lisa_sample_holder_get_real, \ .detector_holder_get = hkl_geometry_petra3_p08_lisa_detector_holder_get_real, \ .ki_get = hkl_geometry_petra3_p08_lisa_ki_get_real, \ .kf_get = hkl_geometry_petra3_p08_lisa_kf_get_real static HklGeometry *hkl_geometry_new_petra3_p08_lisa(const HklFactory *factory) { static HklGeometryOperations ops = {HKL_GEOMETRY_PETRA3_P08_LISA_OPERATIONS_DEFAULTS}; HklGeometry *self = hkl_geometry_new(factory, &ops); HklHolder *h; /* source */ h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, MCHI, 1, 0, 0, &hkl_unit_angle_deg); /* sample */ h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, SPHI, 0, 0, 1, &hkl_unit_angle_deg); /* detector */ h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, DTTH, 0, 0, -1, &hkl_unit_angle_deg); hkl_holder_add_translation(h, DH, 0, 0, 1, &hkl_unit_length_mm); hkl_holder_add_rotation_with_origin(h, DROT, 0, -1, 0, D_SD, 0, 0, &hkl_unit_angle_deg); return self; } /*********/ /* Modes */ /********/ /* hkl modes */ static HklMode *k_parallel_incident(void) { /* TODO: check if the axes are correct, add the functions and implement them */ static const char* axes_r[] = {MCHI, SPHI, DTTH, DROT}; static const char* axes_w[] = {MCHI, SPHI, DTTH, DROT}; static const HklFunction *functions[] = {}; /* here just the description of the mode: name, axes_r, axes_w, functions */ static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; /* instantiate a new mode */ return hkl_mode_auto_new(&info, &hkl_mode_hkl_petra3_p08_lisa_operations, TRUE); } static HklMode *alpha_eq_beta(void) { /* TODO: check if the axes are correct, add the functions and implement them */ static const char* axes_r[] = {MCHI, SPHI, DTTH, DROT}; static const char* axes_w[] = {MCHI, SPHI, DTTH, DROT}; static const HklFunction *functions[] = {}; /* here just the description of the mode: name, axes_r, axes_w, functions */ static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; /* instantiate a new mode */ return hkl_mode_auto_new(&info, &hkl_mode_hkl_petra3_p08_lisa_operations, TRUE); } static HklMode *th_eq_tth2(void) { /* TODO: check if the axes are correct, add the functions and implement them */ static const char* axes_r[] = {MCHI, SPHI, DTTH, DROT}; static const char* axes_w[] = {MCHI, SPHI, DTTH, DROT}; static const HklFunction *functions[] = {}; /* here just the description of the mode: name, axes_r, axes_w, functions */ static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; /* instantiate a new mode */ return hkl_mode_auto_new(&info, &hkl_mode_hkl_petra3_p08_lisa_operations, TRUE); } static HklMode *k_parallel_outgoing(void) { /* TODO: check if the axes are correct, add the functions and implement them */ static const char* axes_r[] = {MCHI, SPHI, DTTH, DROT}; static const char* axes_w[] = {MCHI, SPHI, DTTH, DROT}; static const HklFunction *functions[] = {}; /* here just the description of the mode: name, axes_r, axes_w, functions */ static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; /* instantiate a new mode */ return hkl_mode_auto_new(&info, &hkl_mode_hkl_petra3_p08_lisa_operations, TRUE); } /* lisapm modes */ static const HklParameter mode_lisa_pm_parameters[] = { { HKL_PARAMETER_DEFAULTS, .name = "det_rot_tracking", ._value = 0, .description = "if 1, the detector table will be rotated with the monochromator, so that stth stays constant", .range = { .min=0, .max=1 }, }, { HKL_PARAMETER_DEFAULTS, .name = "mchi_rot_dir", ._value = 1, .description = "if 1 mchi angle goes from 0 to pi, if -1 from 0 to -pi", .range = { .min=-1, .max=1 }, }, { HKL_PARAMETER_DEFAULTS, .name = "sample_rot", ._value = 0, .description = "if 1, the sample will be rotated with the monochromator, so that sth stays constant.", .range = { .min=0, .max=1 }, }, }; static int _mode_lisa_pm_m_to_pm_func(const gsl_vector *x, void *params, gsl_vector *f) { /* TODO: implement it */ return GSL_SUCCESS; } static const HklFunction mode_lisa_pm_m_to_pm_func = { .function = _mode_lisa_pm_m_to_pm_func, .size = 3, }; static int _mode_lisa_pm_pm_to_m_func(const gsl_vector *x, void *params, gsl_vector *f) { /* TODO: implement it */ return GSL_SUCCESS; } static const HklFunction mode_lisa_pm_pm_to_m_func = { .function = _mode_lisa_pm_pm_to_m_func, .size = 3, }; static HklMode *mode_lisa_pm(void) { static const char* axes_r[] = {MCHI, SPHI, DTTH}; /* QUESTION: these are the two motors I need for computing sth and stth positions, is this right ??? */ static const char* axes_w[] = {MCHI, SPHI, DTTH}; /* QUESTION: these are the motors I move if I write to the pseudomotor sth or stth, is this right ??? */ /* here a list of functions use to solve the mode */ /* QUESTION: which functions should be here ???, I need one for computing motor positions from pseudomotor and one for computing pseudonmotor from motor positions. Why in the other diffractometers there is only one function here ??? */ /* FRED this are not the functions in order to do get and set but only to do the set. the get/set is done in the hkl_mode_operations. */ static const HklFunction *functions[] = {&mode_lisa_pm_m_to_pm_func, &mode_lisa_pm_pm_to_m_func}; /* here just the description of the mode: name, axes_r, axes_w, functions */ static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes_r, axes_w, functions, mode_lisa_pm_parameters), }; /* instantiate a new mode */ return hkl_mode_auto_new(&info, &hkl_mode_operations, /* FRED these operation must be specifique to the pseudo motors look at the read_only emergence pseudo in hkl-pseudoaxis-common-readonly code. */ TRUE); } /******************/ /* LisaPM Engine */ /*****************/ struct _HklEngineLisaPM { HklEngine engine; HklParameter *sth; HklParameter *stth; }; typedef struct _HklEngineLisaPM HklEngineLisaPM; static void hkl_engine_lisapm_free_real(HklEngine *base) { HklEngineLisaPM *self = container_of(base, HklEngineLisaPM, engine); hkl_engine_release(&self->engine); free(self); } HklEngine *hkl_engine_lisa_pm_new(HklEngineList *engines) { HklEngineLisaPM *self; static const HklParameter sth = { HKL_PARAMETER_DEFAULTS_ANGLE, .name="sth", .description = "angle of the projection of $\\vec{ki}$ in the $xy$ and the sample table rotation", }; static const HklParameter stth = { HKL_PARAMETER_DEFAULTS_ANGLE, .name="stth", .description = "angle of the projection of $\\vec{ki}$ in the $xy$ and the detector arm", }; static const HklParameter *pseudo_axes[] = {&sth, &stth}; static const HklEngineInfo info = { HKL_ENGINE_INFO("LisaPM", pseudo_axes, HKL_ENGINE_DEPENDENCIES_AXES), }; static const HklEngineOperations operations = { HKL_ENGINE_OPERATIONS_DEFAULTS, .free=hkl_engine_lisapm_free_real, }; self = HKL_MALLOC(HklEngineLisaPM); hkl_engine_init(&self->engine, &info, &operations, engines); self->sth = register_pseudo_axis(&self->engine, engines, &sth); self->stth = register_pseudo_axis(&self->engine, engines, &stth); return &self->engine; } /***********/ /* Engines */ /***********/ static HklEngine *hkl_engine_petra3_p08_lisa_hkl_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_hkl_new(engines); default_mode = k_parallel_incident(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); hkl_engine_add_mode(self, alpha_eq_beta()); hkl_engine_add_mode(self, th_eq_tth2()); hkl_engine_add_mode(self, k_parallel_outgoing()); return self; } static HklEngine *hkl_engine_petra3_p08_lisa_pm_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_lisa_pm_new(engines); default_mode = mode_lisa_pm(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); return self; } /***************/ /* Engine list */ /***************/ static HklEngineList *hkl_engine_list_new_petra3_p08_lisa(const HklFactory *factory) { HklEngineList *self = hkl_engine_list_new(); hkl_engine_petra3_p08_lisa_hkl_new(self); /* hkl_engine_petra3_p08_lisa_pm_new(self); */ return self; } /* Register the diffractometer into the factory */ /* REGISTER_DIFFRACTOMETER(petra3_p08_lisa, "PETRA3 P08 LISA", HKL_GEOMETRY_PETRA3_P08_LISA_DESCRIPTION); */ hkl-5.0.0.2449/hkl/hkl-pseudoaxis-common-q.c0000644000175000017500000003200513236600666020531 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel * Jens Krüger */ #include // for ::GSL_SUCCESS #include // for gsl_sf_angle_restrict_symm #include // for gsl_isnan #include // for gsl_vector #include // for sin, atan2, signbit #include // for free #include "hkl-detector-private.h" // for hkl_detector_compute_kf #include "hkl-geometry-private.h" // for _HklGeometry, HklHolder #include "hkl-macros-private.h" // for HKL_MALLOC #include "hkl-parameter-private.h" // for _HklParameter, etc #include "hkl-pseudoaxis-auto-private.h" // for HklFunction, etc #include "hkl-pseudoaxis-common-q-private.h" // for HklEngineQ2, etc #include "hkl-pseudoaxis-common-readonly-private.h" #include "hkl-pseudoaxis-private.h" // for _HklEngine, etc #include "hkl-source-private.h" // for hkl_source_compute_ki, etc #include "hkl-vector-private.h" // for HklVector, hkl_vector_angle, etc #include "hkl.h" // for HklEngine, HklParameter, etc #include "hkl/ccan/array_size/array_size.h" // for ARRAY_SIZE #include "hkl/ccan/container_of/container_of.h" // for container_of #include "hkl/ccan/darray/darray.h" // for darray_item #define GAMMA "gamma" #define DELTA "delta" typedef struct _HklEngineQ HklEngineQ; typedef struct _HklEngineQ2 HklEngineQ2; typedef struct _HklEngineQperQpar HklEngineQperQpar; double qmax(double wavelength) { return 2 * HKL_TAU / wavelength; } /*****/ /* q */ /*****/ struct _HklEngineQ { HklEngine engine; HklParameter *q; }; static int _q_func(const gsl_vector *x, void *params, gsl_vector *f) { double q; HklEngine *engine = params; const HklEngineQ *engine_q = container_of(engine, HklEngineQ, engine); double tth; CHECK_NAN(x->data, x->size); /* update the workspace from x */ set_geometry_axes(engine, x->data); tth = gsl_sf_angle_restrict_symm(x->data[0]); q = qmax(hkl_source_get_wavelength(&engine->geometry->source)) * sin(tth/2.); f->data[0] = engine_q->q->_value - q; return GSL_SUCCESS; } static const HklFunction q_func = { .function = _q_func, .size = 1, }; static int get_q_real(HklMode *self, HklEngine *base, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error) { double wavelength; double theta; HklVector ki, kf; HklEngineQ *engine = container_of(base, HklEngineQ, engine); wavelength = hkl_source_get_wavelength(&geometry->source); ki = hkl_geometry_ki_get(geometry); kf = hkl_geometry_kf_get(geometry, detector); theta = hkl_vector_angle(&ki, &kf) / 2.; /* we decide of the sign of theta depending on the orientation * of kf in the direct-space */ if(kf.data[1] < 0 || kf.data[2] < 0) theta = -theta; /* update q */ engine->q->_value = qmax(wavelength) * sin(theta); return TRUE; } /* not declared in the constructor as it is used also in the q2 pseudo * axis engine */ static const HklParameter q = { HKL_PARAMETER_DEFAULTS, .name="q", .description = "the norm of $\\vec{q}$", .range = { .max=1 }, }; static HklMode *mode_q(void) { static const char *axes[] = {"tth"}; static const HklFunction *functions[] = {&q_func}; static HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("q", axes, axes, functions), }; static const HklModeOperations operations = { HKL_MODE_OPERATIONS_AUTO_DEFAULTS, .get = get_q_real, }; return hkl_mode_auto_new(&info, &operations, TRUE); } static void hkl_engine_q_free_real(HklEngine *base) { HklEngineQ *self=container_of(base, HklEngineQ, engine); hkl_engine_release(&self->engine); free(self); } HklEngine *hkl_engine_q_new(HklEngineList *engines) { HklEngineQ *self; HklMode *mode; static const HklParameter *pseudo_axes[] = {&q}; static const HklEngineInfo info = { HKL_ENGINE_INFO("q", pseudo_axes, HKL_ENGINE_DEPENDENCIES_AXES | HKL_ENGINE_DEPENDENCIES_ENERGY), }; static const HklEngineOperations operations = { HKL_ENGINE_OPERATIONS_DEFAULTS, .free=hkl_engine_q_free_real, }; self = HKL_MALLOC(HklEngineQ); hkl_engine_init(&self->engine, &info, &operations, engines); self->q = register_pseudo_axis(&self->engine, engines, &q); /* q [default] */ mode = mode_q(); hkl_engine_add_mode(&self->engine, mode); hkl_engine_mode_set(&self->engine, mode); return &self->engine; } /******/ /* q2 */ /******/ struct _HklEngineQ2 { HklEngine engine; HklParameter *q; HklParameter *alpha; }; static void _q2(HklGeometry *geometry, HklDetector *detector, double *q, double *alpha) { double wavelength, theta; HklVector kf, ki; static HklVector x = { .data = {1, 0, 0}, }; wavelength = hkl_source_get_wavelength(&geometry->source); ki = hkl_geometry_ki_get(geometry); kf = hkl_geometry_kf_get(geometry, detector); theta = hkl_vector_angle(&ki, &kf) / 2.; *q = qmax(wavelength) * sin(theta); /* project kf on the x plan to compute alpha */ hkl_vector_project_on_plan(&kf, &x); *alpha = atan2(kf.data[2], kf.data[1]); } static int _q2_func(const gsl_vector *x, void *params, gsl_vector *f) { HklEngine *engine = params; const HklEngineQ2 *engine_q2 = container_of(engine, HklEngineQ2, engine); double q; double alpha; CHECK_NAN(x->data, x->size); /* update the workspace from x */ set_geometry_axes(engine, x->data); _q2(engine->geometry, engine->detector, &q, &alpha); f->data[0] = engine_q2->q->_value - q; f->data[1] = engine_q2->alpha->_value - alpha; return GSL_SUCCESS; } static const HklFunction q2_func = { .function = _q2_func, .size = 2, }; static int get_q2_real(HklMode *self, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error) { HklEngineQ2 *engine_q2 = container_of(engine, HklEngineQ2, engine); _q2(geometry, detector, &engine_q2->q->_value, &engine_q2->alpha->_value); return TRUE; } static HklMode *mode_q2(void) { static const char* axes[] = {GAMMA, DELTA}; static const HklFunction *functions[] = {&q2_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("q2", axes, axes, functions), }; static const HklModeOperations operations = { HKL_MODE_OPERATIONS_AUTO_DEFAULTS, .get = get_q2_real, }; return hkl_mode_auto_new(&info, &operations, TRUE); } static const HklParameter alpha = { HKL_PARAMETER_DEFAULTS_ANGLE, .name = "alpha", .description = "angle of the projection of $\\vec{q}$ on the $yOz$ plan and $\\vec{y}$", }; static void hkl_engine_q2_free_real(HklEngine *base) { HklEngineQ2 *self = container_of(base, HklEngineQ2, engine); hkl_engine_release(&self->engine); free(self); } HklEngine *hkl_engine_q2_new(HklEngineList *engines) { HklEngineQ2 *self; HklMode *mode; static const HklParameter *pseudo_axes[] = {&q, &alpha}; static const HklEngineInfo info = { HKL_ENGINE_INFO("q2", pseudo_axes, HKL_ENGINE_DEPENDENCIES_AXES | HKL_ENGINE_DEPENDENCIES_ENERGY), }; static const HklEngineOperations operations = { HKL_ENGINE_OPERATIONS_DEFAULTS, .free=hkl_engine_q2_free_real, }; self = HKL_MALLOC(HklEngineQ2); hkl_engine_init(&self->engine, &info, &operations, engines); self->q = register_pseudo_axis(&self->engine, engines, &q); self->alpha = register_pseudo_axis(&self->engine, engines, &alpha); /* q2 [default] */ mode = mode_q2(); hkl_engine_add_mode(&self->engine, mode); hkl_engine_mode_set(&self->engine, mode); return &self->engine; } /************/ /* QperQpar */ /************/ typedef struct _HklModeIncidence HklModeQperQpar; struct _HklEngineQperQpar { HklEngine engine; HklParameter *qper; HklParameter *qpar; }; static void _qper_qpar(HklEngine *engine, const HklGeometry *geometry, const HklDetector *detector, const HklSample *sample, double *qper, double *qpar) { HklModeQperQpar *mode = container_of(engine->mode, HklModeQperQpar, parent); HklHolder *sample_holder = hkl_geometry_sample_holder_get(geometry, sample); HklVector ki; HklVector q; HklVector n = { .data = { mode->n_x->_value, mode->n_y->_value, mode->n_z->_value, }, }; HklVector npar; HklVector qper_v; HklVector qpar_v; double norm; /* compute q = kf - ki */ ki = hkl_geometry_ki_get(geometry); q = hkl_geometry_kf_get(geometry, detector); hkl_vector_minus_vector(&q, &ki); /* compute the real orientation of the surface n */ hkl_vector_rotated_quaternion(&n, &sample_holder->q); hkl_vector_normalize(&n); /* compute the npar used to define the sign of qpar */ npar = ki; hkl_vector_vectorial_product(&npar, &n); /* qper */ qper_v = n; norm = hkl_vector_scalar_product(&q, &n); hkl_vector_times_double(&qper_v, norm); *qper = hkl_vector_norm2(&qper_v); if (signbit(norm)) *qper *= -1; /* qpar */ qpar_v = q; norm = hkl_vector_scalar_product(&q, &npar); hkl_vector_minus_vector(&qpar_v, &qper_v); *qpar = hkl_vector_norm2(&qpar_v); if (signbit(norm)) *qpar *= -1; } static int _qper_qpar_func(const gsl_vector *x, void *params, gsl_vector *f) { HklEngine *engine = params; const HklEngineQperQpar *engine_qper_qpar = container_of(engine, HklEngineQperQpar, engine); double qper; double qpar; CHECK_NAN(x->data, x->size); /* update the workspace from x */ set_geometry_axes(engine, x->data); _qper_qpar(engine, engine->geometry, engine->detector, engine->sample, &qper, &qpar); f->data[0] = engine_qper_qpar->qper->_value - qper; f->data[1] = engine_qper_qpar->qpar->_value - qpar; return GSL_SUCCESS; } static const HklFunction qper_qpar_func = { .function = _qper_qpar_func, .size = 2, }; static int get_qper_qpar_real(HklMode *self, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error) { HklEngineQperQpar *engine_qper_qpar = container_of(engine, HklEngineQperQpar, engine); _qper_qpar(engine, geometry, detector, sample, &engine_qper_qpar->qper->_value, &engine_qper_qpar->qpar->_value); return TRUE; } static HklMode *mode_qper_qpar(void) { static const char* axes[] = {GAMMA, DELTA}; static const HklFunction *functions[] = {&qper_qpar_func}; static const HklParameter parameters[] = { SURFACE_PARAMETERS(0, 1, 0), }; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS("qper_qpar", axes, axes, functions, parameters), }; static const HklModeOperations operations = { HKL_MODE_OPERATIONS_AUTO_DEFAULTS, .get = get_qper_qpar_real, }; HklModeQperQpar *self = HKL_MALLOC(HklModeQperQpar); /* the base constructor; */ hkl_mode_auto_init(&self->parent, &info, &operations, TRUE); self->n_x = register_mode_parameter(&self->parent, 0); self->n_y = register_mode_parameter(&self->parent, 1); self->n_z = register_mode_parameter(&self->parent, 2); return &self->parent; } static void hkl_engine_qper_qpar_free_real(HklEngine *base) { HklEngineQperQpar *self = container_of(base, HklEngineQperQpar, engine); hkl_engine_release(&self->engine); free(self); } HklEngine *hkl_engine_qper_qpar_new(HklEngineList *engines) { static const HklParameter qper = { HKL_PARAMETER_DEFAULTS, .name = "qper", .description = "perpendicular component of $\\vec{q}$ along the normal of the sample surface", .range = { .min=-1, .max=1 }, }; static const HklParameter qpar = { HKL_PARAMETER_DEFAULTS, .name = "qpar", .description = "parallel component of $\\vec{q}$", .range = { .min=-1, .max=1 }, }; static const HklParameter *pseudo_axes[] = {&qper, &qpar}; static const HklEngineInfo info = { HKL_ENGINE_INFO("qper_qpar", pseudo_axes, HKL_ENGINE_DEPENDENCIES_AXES | HKL_ENGINE_DEPENDENCIES_ENERGY), }; static const HklEngineOperations operations = { HKL_ENGINE_OPERATIONS_DEFAULTS, .free = hkl_engine_qper_qpar_free_real, }; HklEngineQperQpar *self; HklMode *mode; self = HKL_MALLOC(HklEngineQperQpar); hkl_engine_init(&self->engine, &info, &operations, engines); self->qper = register_pseudo_axis(&self->engine, engines, &qper); self->qpar = register_pseudo_axis(&self->engine, engines, &qpar); /* qper_qpar [default] */ mode = mode_qper_qpar(); hkl_engine_add_mode(&self->engine, mode); hkl_engine_mode_set(&self->engine, mode); return &self->engine; } hkl-5.0.0.2449/hkl/hkl-pseudoaxis-auto.c0000644000175000017500000003225413236600666017761 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for alloca #include // for ::GSL_CONTINUE #include // for GSL_SQRT_DBL_EPSILON #include // for gsl_matrix_alloc, etc #include // for gsl_multiroot_function, etc #include // for gsl_vector, etc #include // for fabs, M_PI #include // for size_t #include // for rand, RAND_MAX #include // for NULL, memset, memcpy #include // for uint #include "hkl-geometry-private.h" // for hkl_geometry_update #include "hkl-macros-private.h" // for HKL_MALLOC, hkl_assert, etc #include "hkl-parameter-private.h" // for _HklParameter #include "hkl-pseudoaxis-auto-private.h" // for HklModeAutoInfo, etc #include "hkl-pseudoaxis-private.h" // for _HklEngine, HklModeInfo, etc #include "hkl.h" // for HklEngine, HklMode, etc #include "hkl/ccan/container_of/container_of.h" // for container_of #include "hkl/ccan/darray/darray.h" // for darray_foreach /* #define DEBUG */ #define HKL_MODE_AUTO_ERROR hkl_mode_auto_error_quark () static GQuark hkl_mode_auto_error_quark (void) { return g_quark_from_static_string ("hkl-mode-auto-error-quark"); } typedef enum { HKL_MODE_AUTO_ERROR_SET, /* can not set the engine */ } HklModeAutoError; /*********************************************/ /* methods use to solve numerical pseudoAxes */ /*********************************************/ /** * @brief This private method find the degenerated axes. * * @param func the gsl_multiroopt_function to test * @param x the starting point * @param f the result of the function evaluation. * * with this method we can see if an axis is degenerated or not. * A degenerated axis is an axis with no effect on the function evaluation. * In the Jacobian matrix all elements of a columnn is null. * Once we know this the axis is mark as degenerated and we do not need to * change is sector. */ static void find_degenerated_axes(HklEngine *self, gsl_multiroot_function *func, gsl_vector const *x, gsl_vector const *f, int degenerated[]) { gsl_matrix *J; size_t i, j; memset(degenerated, 0, x->size * sizeof(int)); J = gsl_matrix_alloc(x->size, f->size); gsl_multiroot_fdjacobian(func, x, f, GSL_SQRT_DBL_EPSILON, J); for(j=0; jsize && !degenerated[j]; ++j) { for(i=0; isize; ++i) if (fabs(gsl_matrix_get(J, i, j)) > HKL_EPSILON) break; if (i == f->size) degenerated[j] = 1; } #ifdef DEBUG fprintf(stdout, "\nLooks for degenerated axes\n"); for(i=0; isize; ++i) fprintf(stdout, " %d", degenerated[i]); for(i=0;isize;++i) { fprintf(stdout, "\n "); for(j=0;jsize;++j) fprintf(stdout, " %f", gsl_matrix_get(J, i, j)); } fprintf(stdout, "\n"); #endif gsl_matrix_free(J); } /** * @brief this private method try to find the first solution * * @param self the current HklPseudoAxeEngine. * @param f The function to use for the computation. * * If a solution was found it also check for degenerated axes. * A degenerated axes is an Axes with no effect on the function. * @see find_degenerated * @return TRUE or FALSE. */ static int find_first_geometry(HklEngine *self, gsl_multiroot_function *f, int degenerated[]) { gsl_multiroot_fsolver_type const *T; gsl_multiroot_fsolver *s; gsl_vector *x; size_t len = darray_size(self->mode->info->axes_w); double *x_data; double *x_data0 = alloca(len * sizeof(*x_data0)); size_t iter = 0; int status; int res = FALSE; size_t i; HklParameter **axis; /* get the starting point from the geometry */ /* must be put in the auto_set method */ x = gsl_vector_alloc(len); x_data = (double *)x->data; i = 0; darray_foreach(axis, self->axes){ x_data[i++] = (*axis)->_value; } /* keep a copy of the first axes positions to deal with degenerated axes */ memcpy(x_data0, x_data, len * sizeof(double)); /* Initialize method */ T = gsl_multiroot_fsolver_hybrid; s = gsl_multiroot_fsolver_alloc (T, len); gsl_multiroot_fsolver_set (s, f, x); #ifdef DEBUG fprintf(stdout, "Initial starting point: \n"); fprintf(stdout, "x: "); for(i=0; ix->data[i]); fprintf(stdout, "\nf: "); for(i=0; if->data[i]); #endif /* iterate to find the solution */ do { ++iter; status = gsl_multiroot_fsolver_iterate(s); #ifdef DEBUG fprintf(stdout, "\nstatus : %d iter : %d\n", status, iter); #endif if (status || (iter % 300) == 0) { /* Restart from another point. */ for(i=0; ix->data[i]); fprintf(stdout, "\nf: "); for(i=0; if->data[i]); #endif } status = gsl_multiroot_test_residual (s->f, HKL_EPSILON / 10.); #ifdef DEBUG fprintf(stdout, "\nstatus : %d iter : %d", status, iter); for(i=0; if->data[i]); fprintf(stdout, "\n"); #endif } while (status == GSL_CONTINUE && iter < 2000); #ifdef DEBUG fprintf(stdout, "\nstatus : %d iter : %d", status, iter); for(i=0; if->data[i]); fprintf(stdout, "\n"); #endif if (status != GSL_CONTINUE) { find_degenerated_axes(self, f, s->x, s->f, degenerated); #ifdef DEBUG /* print the test header */ fprintf(stdout, "\n"); for(i=0; iaxes){ fprintf(stdout, "\t \"%s\"", (*axis)->name); } #endif /* set the geometry from the gsl_vector */ /* in a futur version the geometry must contain a gsl_vector */ /* to avoid this. */ x_data = (double *)s->x->data; i = 0; darray_foreach(axis, self->axes){ hkl_parameter_value_set(*axis, degenerated[i] ? x_data0[i] : x_data[i], HKL_UNIT_DEFAULT, NULL); ++i; } hkl_geometry_update(self->geometry); res = TRUE; } /* release memory */ gsl_vector_free(x); gsl_multiroot_fsolver_free(s); return res; } /** * @brief This private method change the sector of angles. * * @param x The vector of changed angles. * @param x0 The vector of angles to change. * @param sector the sector vector operation. * @param n the size of all vectors. * * 0 -> no change * 1 -> pi - angle * 2 -> pi + angle * 3 -> -angle */ static void change_sector(double x[], double const x0[], int const sector[], size_t n) { size_t i; for(i=0; idata; function->f(x, function->params, f); for(i=0; isize; ++i) if (fabs(f_data[i]) > HKL_EPSILON){ res = FALSE; break; } #ifdef DEBUG fprintf(stdout, "\n"); for(i=0; isize; ++i) if(fabs(f_data[i]) < HKL_EPSILON) fprintf(stdout, "\t%f *", f_data[i]); else fprintf(stdout, "\t%f", f_data[i]); for(i=0; isize; ++i) fprintf(stdout, "\t%f", gsl_sf_angle_restrict_symm(x->data[i]) * HKL_RADTODEG); if(res == FALSE) fprintf(stdout, "\t FAIL"); else fprintf(stdout, "\t SUCCESS"); #endif return res; } /** * @brief compute the permutation and test its validity. * * @param axes_len number of axes * @param op_len number of operation per axes. (4 for now) * @param p The vector containing the current permutation. * @param axes_idx The index of the axes we are permution. * @param op the current operation to set. * @param f The function for the validity test. * @param x0 The starting point of all geometry permutations. * @param _x a gsl_vector use to compute the sectors (optimization) * @param _f a gsl_vector use during the sector test (optimization) */ static void perm_r(size_t axes_len, size_t op_len[], int p[], size_t axes_idx, int op, gsl_multiroot_function *f, double x0[], gsl_vector *_x, gsl_vector *_f) { size_t i; p[axes_idx++] = op; if (axes_idx == axes_len) { double *x_data = _x->data; change_sector(x_data, x0, p, axes_len); if (test_sector(_x, f, _f)) hkl_engine_add_geometry(f->params, x_data); } else for (i=0; igeometries. */ static int solve_function(HklEngine *self, const HklFunction *function) { size_t i; int p[function->size]; double x0[function->size]; int degenerated[function->size]; size_t op_len[function->size]; int res; gsl_vector *_x; /* use to compute sectors in perm_r (avoid copy) */ gsl_vector *_f; /* use to test sectors in perm_r (avoid copy) */ gsl_multiroot_function f; HklParameter **axis; _x = gsl_vector_alloc(function->size); _f = gsl_vector_alloc(function->size); f.f = function->function; f.n = function->size; f.params = self; res = find_first_geometry(self, &f, degenerated); if (res) { memset(p, 0, sizeof(p)); /* use first solution as starting point for permutations */ i = 0; darray_foreach(axis, self->axes){ x0[i] = (*axis)->_value; op_len[i] = degenerated[i] ? 1 : 4; ++i; } for (i=0; isize, op_len, p, 0, i, &f, x0, _x, _f); } gsl_vector_free(_f); gsl_vector_free(_x); return res; } /* check that the number of axis of the mode is the right number of variables expected by mode functions */ static inline void check_validity(const HklModeAutoInfo *auto_info) { const HklFunction **function; darray_foreach(function, auto_info->functions) hkl_assert((*function)->size == darray_size(auto_info->info.axes_w)); } HklMode *hkl_mode_auto_new(const HklModeAutoInfo *auto_info, const HklModeOperations *ops, int initialized) { check_validity(auto_info); return hkl_mode_new(&auto_info->info, ops, initialized); } void hkl_mode_auto_init(HklMode *self, const HklModeAutoInfo *auto_info, const HklModeOperations *ops, int initialized) { check_validity(auto_info); hkl_mode_init(self, &auto_info->info, ops, initialized); } int hkl_mode_auto_set_real(HklMode *self, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error) { int ok = FALSE; HklModeAutoInfo *auto_info = container_of(self->info, HklModeAutoInfo, info); const HklFunction **function; hkl_error (error == NULL || *error == NULL); if(!self || !engine || !geometry || !detector || !sample){ g_set_error(error, HKL_MODE_AUTO_ERROR, HKL_MODE_AUTO_ERROR_SET, "Internal error"); return FALSE; } darray_foreach(function, auto_info->functions) ok |= solve_function(engine, *function); if(!ok){ g_set_error(error, HKL_MODE_AUTO_ERROR, HKL_MODE_AUTO_ERROR_SET, "none of the functions were solved !!!"); return FALSE; } #ifdef DEBUG hkl_engine_fprintf(stdout, engine); #endif return TRUE; } HklMode *hkl_mode_auto_with_init_new(const HklModeAutoInfo *auto_info, const HklModeOperations *ops, int initialized) { HklModeAutoWithInit *self = HKL_MALLOC(HklModeAutoWithInit); hkl_mode_auto_init(&self->mode, auto_info, ops, initialized); self->geometry = NULL; self->detector = NULL; self->sample = NULL; return &self->mode; } hkl-5.0.0.2449/hkl/hkl-unit-private.h0000644000175000017500000000540513236600666017261 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_UNIT_PRIVATE_H__ #define __HKL_UNIT_PRIVATE_H__ #include "hkl.h" // for G_BEGIN_DECLS, etc G_BEGIN_DECLS typedef struct _HklUnitDimension HklUnitDimension; struct _HklUnitDimension { int l; /* Length */ int m; /* Mass */ int t; /* Time */ int i; /* Electric current */ int th; /* Thermodynamic temperature */ int n; /* Amount of substance */ int j; /* Luminous intensity */ }; #define HklDPlaneAngle {0, 0, 0, 0, 0, 0, 0} #define HklDLength {1, 0, 0, 0, 0, 0, 0} typedef struct _HklUnit HklUnit; struct _HklUnit { HklUnitDimension dimension; double factor; char const *name; char const *repr; }; static HklUnit const hkl_unit_angle_deg = {HklDPlaneAngle, M_PI/180., "Degree", "°"}; static HklUnit const hkl_unit_angle_rad = {HklDPlaneAngle, 1., "Radian", "rad"}; static HklUnit const hkl_unit_length_nm = {HklDLength, 1e-9, "Nano Meter", "nm"}; static HklUnit const hkl_unit_angle_mrad = {HklDPlaneAngle, 1e-3, "Milli Radian", "mrad"}; static HklUnit const hkl_unit_length_mm = {HklDLength, 1e-3, "Milli Meter", "mm"}; static HklUnit const hkl_unit_length_meter = {HklDLength, 1., "Meter", "m"}; extern HklUnit *hkl_unit_dup(const HklUnit *self); extern void hkl_unit_free(HklUnit *self); extern int hkl_unit_compatible(const HklUnit *unit1, const HklUnit *unit2); /** * hkl_unit_factor: * @self: * @unit: * * compute the factor to convert from one @Hklunit to another one. * @self * factor = @unit * * Returns: the factor of the conversion. **/ static inline double hkl_unit_factor(const HklUnit *from, const HklUnit *to) { double res = 1.0; if (from == NULL) { if (to == NULL) { res = 1.0; }else{ res = 1.0 / to->factor; } }else{ if (to == NULL){ res = from->factor; }else{ res = from->factor / to->factor; } } return res; } G_END_DECLS #endif /* __HKL_UNIT_PRIVATE_H__ */ hkl-5.0.0.2449/hkl/hkl-axis-private.h0000644000175000017500000000416313236600666017246 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_AXIS_PRIVATE_H__ #define __HKL_AXIS_PRIVATE_H__ #include "hkl-parameter-private.h" // for _HklParameter #include "hkl-quaternion-private.h" // for _HklQuaternion #include "hkl-vector-private.h" // for HklVector, HklQuaternion #include "hkl.h" // for HklParameter, etc G_BEGIN_DECLS typedef struct _HklAxis HklAxis; typedef struct _HklRotationWithOrigin HklRotationWithOrigin; typedef struct _HklTranslation HklTranslation; struct _HklAxis { HklParameter parameter; HklVector axis_v; HklQuaternion q; /* internal */ }; struct _HklRotationWithOrigin { HklAxis axis; HklVector origin; }; struct _HklTranslation { HklParameter parameter; HklVector axis_v; }; extern HklParameter *hkl_parameter_new_rotation(const char* name, HklVector const *axis_v, const HklUnit *punit); extern HklParameter *hkl_parameter_new_rotation_with_origin(const char* name, const HklVector *axis_v, const HklVector *origin, const HklUnit *punit); extern HklParameter *hkl_parameter_new_translation(const char *name, const HklVector *axis_v, const HklUnit *punit); G_END_DECLS #endif /* __HKL_AXIS_PRIVATE_H__ */ hkl-5.0.0.2449/hkl/hkl-type-builtins.h.template0000644000175000017500000000122712710332473021244 0ustar00piccapicca00000000000000/*** BEGIN file-header ***/ #ifndef __HKL_TYPE_BUILTINS_H__ #define __HKL_TYPE_BUILTINS_H__ #include // for G_BEGIN_DECLS, G_END_DECLS, etc #include // GType #include "hkl.h" // for HKLAPI G_BEGIN_DECLS /*** END file-header ***/ /*** BEGIN file-production ***/ /* enumerations from "@filename@" */ /*** END file-production ***/ /*** BEGIN value-header ***/ HKLAPI GType @enum_name@_get_type (void) G_GNUC_CONST; #define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ()) /*** END value-header ***/ /*** BEGIN file-tail ***/ G_END_DECLS #endif /* __HKL_TYPE_BUILTINS_H__ */ /*** END file-tail ***/ hkl-5.0.0.2449/hkl/ccan/0000755000175000017500000000000013237020537014577 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl/ccan/array_size/0000755000175000017500000000000013237020537016747 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl/ccan/array_size/array_size.h0000644000175000017500000000161313210507774021275 0ustar00piccapicca00000000000000/* CC0 (Public domain) - see LICENSE file for details */ #ifndef CCAN_ARRAY_SIZE_H #define CCAN_ARRAY_SIZE_H #include #include /** * ARRAY_SIZE - get the number of elements in a visible array * @arr: the array whose size you want. * * This does not work on pointers, or arrays declared as [], or * function parameters. With correct compiler support, such usage * will cause a build error (see build_assert). */ #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + _array_size_chk(arr)) #if HAVE_BUILTIN_TYPES_COMPATIBLE_P && HAVE_TYPEOF /* Two gcc extensions. * &a[0] degrades to a pointer: a different type from an array */ #define _array_size_chk(arr) \ BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(typeof(arr), \ typeof(&(arr)[0]))) #else #define _array_size_chk(arr) 0 #endif #endif /* CCAN_ALIGNOF_H */ hkl-5.0.0.2449/hkl/ccan/noerr/0000755000175000017500000000000013237020537015724 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl/ccan/noerr/noerr.c0000644000175000017500000000127313210507774017224 0ustar00piccapicca00000000000000/* CC0 (Public domain) - see LICENSE file for details */ #include "noerr.h" #include #include #include int close_noerr(int fd) { int saved_errno = errno, ret; if (close(fd) != 0) ret = errno; else ret = 0; errno = saved_errno; return ret; } int fclose_noerr(FILE *fp) { int saved_errno = errno, ret; if (fclose(fp) != 0) ret = errno; else ret = 0; errno = saved_errno; return ret; } int unlink_noerr(const char *pathname) { int saved_errno = errno, ret; if (unlink(pathname) != 0) ret = errno; else ret = 0; errno = saved_errno; return ret; } void free_noerr(void *p) { int saved_errno = errno; free(p); errno = saved_errno; } hkl-5.0.0.2449/hkl/ccan/noerr/noerr.h0000644000175000017500000000210613210507774017225 0ustar00piccapicca00000000000000/* CC0 (Public domain) - see LICENSE file for details */ #ifndef NOERR_H #define NOERR_H #include /** * close_noerr - close without stomping errno. * @fd: the file descriptor to close. * * errno is saved and restored across the call to close: if an error occurs, * the resulting (non-zero) errno is returned. */ int close_noerr(int fd); /** * fclose_noerr - close without stomping errno. * @fp: the FILE pointer. * * errno is saved and restored across the call to fclose: if an error occurs, * the resulting (non-zero) errno is returned. */ int fclose_noerr(FILE *fp); /** * unlink_noerr - unlink a file without stomping errno. * @pathname: the path to unlink. * * errno is saved and restored across the call to unlink: if an error occurs, * the resulting (non-zero) errno is returned. */ int unlink_noerr(const char *pathname); /** * free_noerr - free memory without stomping errno. * @p: the pointer to free. * * errno is saved and restored across the call to free: the standard leaves * that undefined. */ void free_noerr(void *p); #endif /* NOERR_H */ hkl-5.0.0.2449/hkl/ccan/check_type/0000755000175000017500000000000013237020537016715 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl/ccan/check_type/check_type.h0000644000175000017500000000452713210507774021220 0ustar00piccapicca00000000000000/* CC0 (Public domain) - see LICENSE file for details */ #ifndef CCAN_CHECK_TYPE_H #define CCAN_CHECK_TYPE_H #include /** * check_type - issue a warning or build failure if type is not correct. * @expr: the expression whose type we should check (not evaluated). * @type: the exact type we expect the expression to be. * * This macro is usually used within other macros to try to ensure that a macro * argument is of the expected type. No type promotion of the expression is * done: an unsigned int is not the same as an int! * * check_type() always evaluates to 0. * * If your compiler does not support typeof, then the best we can do is fail * to compile if the sizes of the types are unequal (a less complete check). * * Example: * // They should always pass a 64-bit value to _set_some_value! * #define set_some_value(expr) \ * _set_some_value((check_type((expr), uint64_t), (expr))) */ /** * check_types_match - issue a warning or build failure if types are not same. * @expr1: the first expression (not evaluated). * @expr2: the second expression (not evaluated). * * This macro is usually used within other macros to try to ensure that * arguments are of identical types. No type promotion of the expressions is * done: an unsigned int is not the same as an int! * * check_types_match() always evaluates to 0. * * If your compiler does not support typeof, then the best we can do is fail * to compile if the sizes of the types are unequal (a less complete check). * * Example: * // Do subtraction to get to enclosing type, but make sure that * // pointer is of correct type for that member. * #define container_of(mbr_ptr, encl_type, mbr) \ * (check_types_match((mbr_ptr), &((encl_type *)0)->mbr), \ * ((encl_type *) \ * ((char *)(mbr_ptr) - offsetof(enclosing_type, mbr)))) */ #if HAVE_TYPEOF #define check_type(expr, type) \ ((typeof(expr) *)0 != (type *)0) #define check_types_match(expr1, expr2) \ ((typeof(expr1) *)0 != (typeof(expr2) *)0) #else #include /* Without typeof, we can only test the sizes. */ #define check_type(expr, type) \ BUILD_ASSERT_OR_ZERO(sizeof(expr) == sizeof(type)) #define check_types_match(expr1, expr2) \ BUILD_ASSERT_OR_ZERO(sizeof(expr1) == sizeof(expr2)) #endif /* HAVE_TYPEOF */ #endif /* CCAN_CHECK_TYPE_H */ hkl-5.0.0.2449/hkl/ccan/configurator.c0000644000175000017500000005404413211074266017454 0ustar00piccapicca00000000000000/* Simple tool to create config.h. * Would be much easier with ccan modules, but deliberately standalone. * * Copyright 2011 Rusty Russell . MIT license. * * c12r_err, c12r_errx functions copied from ccan/err/err.c * Copyright Rusty Russell . CC0 (Public domain) License. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #define _POSIX_C_SOURCE 200809L /* For pclose, popen, strdup */ #include #include #include #include #include #include #ifdef _MSC_VER #define popen _popen #define pclose _pclose #endif #ifdef _MSC_VER #define DEFAULT_COMPILER "cl" /* Note: Dash options avoid POSIX path conversion when used under msys bash * and are therefore preferred to slash (e.g. -nologo over /nologo) * Note: Disable Warning 4200 "nonstandard extension used : zero-sized array * in struct/union" for flexible array members. */ #define DEFAULT_FLAGS "-nologo -Zi -W4 -wd4200 " \ "-D_CRT_NONSTDC_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS" #define DEFAULT_OUTPUT_EXE_FLAG "-Fe:" #else #define DEFAULT_COMPILER "cc" #define DEFAULT_FLAGS "-g3 -ggdb -Wall -Wundef -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wold-style-definition" #define DEFAULT_OUTPUT_EXE_FLAG "-o" #endif #define OUTPUT_FILE "configurator.out" #define INPUT_FILE "configuratortest.c" #ifdef _WIN32 #define DIR_SEP "\\" #else #define DIR_SEP "/" #endif static const char *progname = ""; static int verbose; enum test_style { OUTSIDE_MAIN = 0x1, DEFINES_FUNC = 0x2, INSIDE_MAIN = 0x4, DEFINES_EVERYTHING = 0x8, MAY_NOT_COMPILE = 0x10, EXECUTE = 0x8000 }; struct test { const char *name; enum test_style style; const char *depends; const char *link; const char *fragment; const char *flags; const char *overrides; /* On success, force this to '1' */ bool done; bool answer; }; static struct test tests[] = { { "HAVE_32BIT_OFF_T", DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE, NULL, NULL, "#include \n" "int main(void) {\n" " return sizeof(off_t) == 4 ? 0 : 1;\n" "}\n" }, { "HAVE_ALIGNOF", INSIDE_MAIN, NULL, NULL, "return __alignof__(double) > 0 ? 0 : 1;" }, { "HAVE_ASPRINTF", DEFINES_FUNC, NULL, NULL, "#ifndef _GNU_SOURCE\n" "#define _GNU_SOURCE\n" "#endif\n" "#include \n" "static char *func(int x) {" " char *p;\n" " if (asprintf(&p, \"%u\", x) == -1) p = NULL;" " return p;\n" "}" }, { "HAVE_ATTRIBUTE_COLD", DEFINES_FUNC, NULL, NULL, "static int __attribute__((cold)) func(int x) { return x; }" }, { "HAVE_ATTRIBUTE_CONST", DEFINES_FUNC, NULL, NULL, "static int __attribute__((const)) func(int x) { return x; }" }, { "HAVE_ATTRIBUTE_PURE", DEFINES_FUNC, NULL, NULL, "static int __attribute__((pure)) func(int x) { return x; }" }, { "HAVE_ATTRIBUTE_MAY_ALIAS", OUTSIDE_MAIN, NULL, NULL, "typedef short __attribute__((__may_alias__)) short_a;" }, { "HAVE_ATTRIBUTE_NORETURN", DEFINES_FUNC, NULL, NULL, "#include \n" "static void __attribute__((noreturn)) func(int x) { exit(x); }" }, { "HAVE_ATTRIBUTE_PRINTF", DEFINES_FUNC, NULL, NULL, "static void __attribute__((format(__printf__, 1, 2))) func(const char *fmt, ...) { (void)fmt; }" }, { "HAVE_ATTRIBUTE_UNUSED", OUTSIDE_MAIN, NULL, NULL, "static int __attribute__((unused)) func(int x) { return x; }" }, { "HAVE_ATTRIBUTE_USED", OUTSIDE_MAIN, NULL, NULL, "static int __attribute__((used)) func(int x) { return x; }" }, { "HAVE_BACKTRACE", DEFINES_FUNC, NULL, NULL, "#include \n" "static int func(int x) {" " void *bt[10];\n" " return backtrace(bt, 10) < x;\n" "}" }, { "HAVE_BIG_ENDIAN", INSIDE_MAIN|EXECUTE, NULL, NULL, "union { int i; char c[sizeof(int)]; } u;\n" "u.i = 0x01020304;\n" "return u.c[0] == 0x01 && u.c[1] == 0x02 && u.c[2] == 0x03 && u.c[3] == 0x04 ? 0 : 1;" }, { "HAVE_BSWAP_64", DEFINES_FUNC, "HAVE_BYTESWAP_H", NULL, "#include \n" "static int func(int x) { return bswap_64(x); }" }, { "HAVE_BUILTIN_CHOOSE_EXPR", INSIDE_MAIN, NULL, NULL, "return __builtin_choose_expr(1, 0, \"garbage\");" }, { "HAVE_BUILTIN_CLZ", INSIDE_MAIN, NULL, NULL, "return __builtin_clz(1) == (sizeof(int)*8 - 1) ? 0 : 1;" }, { "HAVE_BUILTIN_CLZL", INSIDE_MAIN, NULL, NULL, "return __builtin_clzl(1) == (sizeof(long)*8 - 1) ? 0 : 1;" }, { "HAVE_BUILTIN_CLZLL", INSIDE_MAIN, NULL, NULL, "return __builtin_clzll(1) == (sizeof(long long)*8 - 1) ? 0 : 1;" }, { "HAVE_BUILTIN_CTZ", INSIDE_MAIN, NULL, NULL, "return __builtin_ctz(1 << (sizeof(int)*8 - 1)) == (sizeof(int)*8 - 1) ? 0 : 1;" }, { "HAVE_BUILTIN_CTZL", INSIDE_MAIN, NULL, NULL, "return __builtin_ctzl(1UL << (sizeof(long)*8 - 1)) == (sizeof(long)*8 - 1) ? 0 : 1;" }, { "HAVE_BUILTIN_CTZLL", INSIDE_MAIN, NULL, NULL, "return __builtin_ctzll(1ULL << (sizeof(long long)*8 - 1)) == (sizeof(long long)*8 - 1) ? 0 : 1;" }, { "HAVE_BUILTIN_CONSTANT_P", INSIDE_MAIN, NULL, NULL, "return __builtin_constant_p(1) ? 0 : 1;" }, { "HAVE_BUILTIN_EXPECT", INSIDE_MAIN, NULL, NULL, "return __builtin_expect(argc == 1, 1) ? 0 : 1;" }, { "HAVE_BUILTIN_FFS", INSIDE_MAIN, NULL, NULL, "return __builtin_ffs(0) == 0 ? 0 : 1;" }, { "HAVE_BUILTIN_FFSL", INSIDE_MAIN, NULL, NULL, "return __builtin_ffsl(0L) == 0 ? 0 : 1;" }, { "HAVE_BUILTIN_FFSLL", INSIDE_MAIN, NULL, NULL, "return __builtin_ffsll(0LL) == 0 ? 0 : 1;" }, { "HAVE_BUILTIN_POPCOUNTL", INSIDE_MAIN, NULL, NULL, "return __builtin_popcountl(255L) == 8 ? 0 : 1;" }, { "HAVE_BUILTIN_TYPES_COMPATIBLE_P", INSIDE_MAIN, NULL, NULL, "return __builtin_types_compatible_p(char *, int) ? 1 : 0;" }, { "HAVE_ICCARM_INTRINSICS", DEFINES_FUNC, NULL, NULL, "#include \n" "int func(int v) {\n" " return __CLZ(__RBIT(v));\n" "}" }, { "HAVE_BYTESWAP_H", OUTSIDE_MAIN, NULL, NULL, "#include \n" }, { "HAVE_CLOCK_GETTIME", DEFINES_FUNC, "HAVE_STRUCT_TIMESPEC", NULL, "#include \n" "static struct timespec func(void) {\n" " struct timespec ts;\n" " clock_gettime(CLOCK_REALTIME, &ts);\n" " return ts;\n" "}\n" }, { "HAVE_CLOCK_GETTIME_IN_LIBRT", DEFINES_FUNC, "HAVE_STRUCT_TIMESPEC !HAVE_CLOCK_GETTIME", "-lrt", "#include \n" "static struct timespec func(void) {\n" " struct timespec ts;\n" " clock_gettime(CLOCK_REALTIME, &ts);\n" " return ts;\n" "}\n", /* This means HAVE_CLOCK_GETTIME, too */ "HAVE_CLOCK_GETTIME" }, { "HAVE_COMPOUND_LITERALS", INSIDE_MAIN, NULL, NULL, "int *foo = (int[]) { 1, 2, 3, 4 };\n" "return foo[0] ? 0 : 1;" }, { "HAVE_FCHDIR", DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE, NULL, NULL, "#include \n" "#include \n" "#include \n" "#include \n" "int main(void) {\n" " int fd = open(\"..\", O_RDONLY);\n" " return fchdir(fd) == 0 ? 0 : 1;\n" "}\n" }, { "HAVE_ERR_H", DEFINES_FUNC, NULL, NULL, "#include \n" "static void func(int arg) {\n" " if (arg == 0)\n" " err(1, \"err %u\", arg);\n" " if (arg == 1)\n" " errx(1, \"err %u\", arg);\n" " if (arg == 3)\n" " warn(\"warn %u\", arg);\n" " if (arg == 4)\n" " warnx(\"warn %u\", arg);\n" "}\n" }, { "HAVE_FILE_OFFSET_BITS", DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE, "HAVE_32BIT_OFF_T", NULL, "#define _FILE_OFFSET_BITS 64\n" "#include \n" "int main(void) {\n" " return sizeof(off_t) == 8 ? 0 : 1;\n" "}\n" }, { "HAVE_FOR_LOOP_DECLARATION", INSIDE_MAIN, NULL, NULL, "int ret = 1;\n" "for (int i = 0; i < argc; i++) { ret = 0; };\n" "return ret;" }, { "HAVE_FLEXIBLE_ARRAY_MEMBER", OUTSIDE_MAIN, NULL, NULL, "struct foo { unsigned int x; int arr[]; };" }, { "HAVE_GETPAGESIZE", DEFINES_FUNC, NULL, NULL, "#include \n" "static int func(void) { return getpagesize(); }" }, { "HAVE_ISBLANK", DEFINES_FUNC, NULL, NULL, "#ifndef _GNU_SOURCE\n" "#define _GNU_SOURCE\n" "#endif\n" "#include \n" "static int func(void) { return isblank(' '); }" }, { "HAVE_LITTLE_ENDIAN", INSIDE_MAIN|EXECUTE, NULL, NULL, "union { int i; char c[sizeof(int)]; } u;\n" "u.i = 0x01020304;\n" "return u.c[0] == 0x04 && u.c[1] == 0x03 && u.c[2] == 0x02 && u.c[3] == 0x01 ? 0 : 1;" }, { "HAVE_MEMMEM", DEFINES_FUNC, NULL, NULL, "#ifndef _GNU_SOURCE\n" "#define _GNU_SOURCE\n" "#endif\n" "#include \n" "static void *func(void *h, size_t hl, void *n, size_t nl) {\n" "return memmem(h, hl, n, nl);" "}\n", }, { "HAVE_MEMRCHR", DEFINES_FUNC, NULL, NULL, "#ifndef _GNU_SOURCE\n" "#define _GNU_SOURCE\n" "#endif\n" "#include \n" "static void *func(void *s, int c, size_t n) {\n" "return memrchr(s, c, n);" "}\n", }, { "HAVE_MMAP", DEFINES_FUNC, NULL, NULL, "#include \n" "static void *func(int fd) {\n" " return mmap(0, 65536, PROT_READ, MAP_SHARED, fd, 0);\n" "}" }, { "HAVE_PROC_SELF_MAPS", DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE, NULL, NULL, "#include \n" "#include \n" "#include \n" "int main(void) {\n" " return open(\"/proc/self/maps\", O_RDONLY) != -1 ? 0 : 1;\n" "}\n" }, { "HAVE_QSORT_R_PRIVATE_LAST", DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE, NULL, NULL, "#ifndef _GNU_SOURCE\n" "#define _GNU_SOURCE\n" "#endif\n" "#include \n" "static int cmp(const void *lp, const void *rp, void *priv) {\n" " *(unsigned int *)priv = 1;\n" " return *(const int *)lp - *(const int *)rp; }\n" "int main(void) {\n" " int array[] = { 9, 2, 5 };\n" " unsigned int called = 0;\n" " qsort_r(array, 3, sizeof(int), cmp, &called);\n" " return called && array[0] == 2 && array[1] == 5 && array[2] == 9 ? 0 : 1;\n" "}\n" }, { "HAVE_STRUCT_TIMESPEC", DEFINES_FUNC, NULL, NULL, "#include \n" "static void func(void) {\n" " struct timespec ts;\n" " ts.tv_sec = ts.tv_nsec = 1;\n" "}\n" }, { "HAVE_SECTION_START_STOP", DEFINES_FUNC, NULL, NULL, "static void *__attribute__((__section__(\"mysec\"))) p = &p;\n" "static int func(void) {\n" " extern void *__start_mysec[], *__stop_mysec[];\n" " return __stop_mysec - __start_mysec;\n" "}\n" }, { "HAVE_STACK_GROWS_UPWARDS", DEFINES_EVERYTHING|EXECUTE, NULL, NULL, "#include \n" "static ptrdiff_t nest(const void *base, unsigned int i)\n" "{\n" " if (i == 0)\n" " return (const char *)&i - (const char *)base;\n" " return nest(base, i-1);\n" "}\n" "int main(int argc, char *argv[]) {\n" " (void)argv;\n" " return (nest(&argc, argc) > 0) ? 0 : 1;\n" "}\n" }, { "HAVE_STATEMENT_EXPR", INSIDE_MAIN, NULL, NULL, "return ({ int x = argc; x == argc ? 0 : 1; });" }, { "HAVE_SYS_FILIO_H", OUTSIDE_MAIN, NULL, NULL, /* Solaris needs this for FIONREAD */ "#include \n" }, { "HAVE_SYS_TERMIOS_H", OUTSIDE_MAIN, NULL, NULL, "#include \n" }, { "HAVE_SYS_UNISTD_H", OUTSIDE_MAIN, NULL, NULL, "#include \n" }, { "HAVE_TYPEOF", INSIDE_MAIN, NULL, NULL, "__typeof__(argc) i; i = argc; return i == argc ? 0 : 1;" }, { "HAVE_UNALIGNED_ACCESS", DEFINES_EVERYTHING|EXECUTE, NULL, NULL, "#include \n" "int main(int argc, char *argv[]) {\n" " (void)argc;\n" " char pad[sizeof(int *) * 1];\n" " strncpy(pad, argv[0], sizeof(pad));\n" " int *x = (int *)pad, *y = (int *)(pad + 1);\n" " return *x == *y;\n" "}\n" }, { "HAVE_UTIME", DEFINES_FUNC, NULL, NULL, "#include \n" "#include \n" "static int func(const char *filename) {\n" " struct utimbuf times = { 0 };\n" " return utime(filename, ×);\n" "}" }, { "HAVE_WARN_UNUSED_RESULT", DEFINES_FUNC, NULL, NULL, "#include \n" "#include \n" "static __attribute__((warn_unused_result)) int func(int i) {\n" " return i + 1;\n" "}" }, { "HAVE_OPENMP", INSIDE_MAIN, NULL, NULL, "int i;\n" "#pragma omp parallel for\n" "for(i = 0; i < 0; i++) {};\n" "return 0;\n", "-Werror -fopenmp" }, { "HAVE_VALGRIND_MEMCHECK_H", OUTSIDE_MAIN, NULL, NULL, "#include \n" }, { "HAVE_UCONTEXT", DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE, NULL, NULL, "#include \n" "static int x = 0;\n" "static char stack[2048];\n" "static ucontext_t a, b;\n" "static void fn(void) {\n" " x |= 2;\n" " setcontext(&b);\n" " x |= 4;\n" "}\n" "int main(void) {\n" " x |= 1;\n" " getcontext(&a);\n" " a.uc_stack.ss_sp = stack;\n" " a.uc_stack.ss_size = sizeof(stack);\n" " makecontext(&a, fn, 0);\n" " swapcontext(&b, &a);\n" " return (x == 3) ? 0 : 1;\n" "}\n" }, { "HAVE_POINTER_SAFE_MAKECONTEXT", DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE, "HAVE_UCONTEXT", NULL, "#include \n" "#include \n" "static int worked = 0;\n" "static char stack[1024];\n" "static ucontext_t a, b;\n" "static void fn(void *p, void *q) {\n" " void *cp = &worked;\n" " void *cq = (void *)(~((ptrdiff_t)cp));\n" " if ((p == cp) && (q == cq))\n" " worked = 1;\n" " setcontext(&b);\n" "}\n" "int main(void) {\n" " void *ap = &worked;\n" " void *aq = (void *)(~((ptrdiff_t)ap));\n" " getcontext(&a);\n" " a.uc_stack.ss_sp = stack;\n" " a.uc_stack.ss_size = sizeof(stack);\n" " makecontext(&a, (void (*)(void))fn, 2, ap, aq);\n" " swapcontext(&b, &a);\n" " return worked ? 0 : 1;\n" "}\n" }, }; static void c12r_err(int eval, const char *fmt, ...) { int err_errno = errno; va_list ap; fprintf(stderr, "%s: ", progname); va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); fprintf(stderr, ": %s\n", strerror(err_errno)); exit(eval); } static void c12r_errx(int eval, const char *fmt, ...) { va_list ap; fprintf(stderr, "%s: ", progname); va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); fprintf(stderr, "\n"); exit(eval); } static size_t fcopy(FILE *fsrc, FILE *fdst) { char buffer[BUFSIZ]; size_t rsize, wsize; size_t copied = 0; while ((rsize = fread(buffer, 1, BUFSIZ, fsrc)) > 0) { wsize = fwrite(buffer, 1, rsize, fdst); copied += wsize; if (wsize != rsize) break; } return copied; } static char *grab_stream(FILE *file) { size_t max, ret, size = 0; char *buffer; max = BUFSIZ; buffer = malloc(max); while ((ret = fread(buffer+size, 1, max - size, file)) == max - size) { size += ret; buffer = realloc(buffer, max *= 2); } size += ret; if (ferror(file)) c12r_err(1, "reading from command"); buffer[size] = '\0'; return buffer; } static char *run(const char *cmd, int *exitstatus) { static const char redir[] = " 2>&1"; size_t cmdlen; char *cmdredir; FILE *cmdout; char *ret; cmdlen = strlen(cmd); cmdredir = malloc(cmdlen + sizeof(redir)); memcpy(cmdredir, cmd, cmdlen); memcpy(cmdredir + cmdlen, redir, sizeof(redir)); cmdout = popen(cmdredir, "r"); if (!cmdout) c12r_err(1, "popen \"%s\"", cmdredir); free(cmdredir); ret = grab_stream(cmdout); *exitstatus = pclose(cmdout); return ret; } static char *connect_args(const char *argv[], const char *outflag, const char *files) { unsigned int i; char *ret; size_t len = strlen(outflag) + strlen(files) + 1; for (i = 1; argv[i]; i++) len += 1 + strlen(argv[i]); ret = malloc(len); len = 0; for (i = 1; argv[i]; i++) { strcpy(ret + len, argv[i]); len += strlen(argv[i]); if (argv[i+1] || *outflag) ret[len++] = ' '; } strcpy(ret + len, outflag); len += strlen(outflag); strcpy(ret + len, files); return ret; } static struct test *find_test(const char *name) { unsigned int i; for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) { if (strcmp(tests[i].name, name) == 0) return &tests[i]; } abort(); } #define PRE_BOILERPLATE "/* Test program generated by configurator. */\n" #define MAIN_START_BOILERPLATE \ "int main(int argc, char *argv[]) {\n" \ " (void)argc;\n" \ " (void)argv;\n" #define USE_FUNC_BOILERPLATE "(void)func;\n" #define MAIN_BODY_BOILERPLATE "return 0;\n" #define MAIN_END_BOILERPLATE "}\n" static bool run_test(const char *cmd, struct test *test) { char *output, *newcmd; FILE *outf; int status; if (test->done) return test->answer; if (test->depends) { size_t len; const char *deps = test->depends; char *dep; /* Space-separated dependencies, could be ! for inverse. */ while ((len = strcspn(deps, " ")) != 0) { bool positive = true; if (deps[len]) { dep = strdup(deps); dep[len] = '\0'; } else { dep = (char *)deps; } if (dep[0] == '!') { dep++; positive = false; } if (run_test(cmd, find_test(dep)) != positive) { test->answer = false; test->done = true; return test->answer; } if (deps[len]) free(dep); deps += len; deps += strspn(deps, " "); } } outf = fopen(INPUT_FILE, verbose > 1 ? "w+" : "w"); if (!outf) c12r_err(1, "creating %s", INPUT_FILE); fprintf(outf, "%s", PRE_BOILERPLATE); switch (test->style & ~(EXECUTE|MAY_NOT_COMPILE)) { case INSIDE_MAIN: fprintf(outf, "%s", MAIN_START_BOILERPLATE); fprintf(outf, "%s", test->fragment); fprintf(outf, "%s", MAIN_END_BOILERPLATE); break; case OUTSIDE_MAIN: fprintf(outf, "%s", test->fragment); fprintf(outf, "%s", MAIN_START_BOILERPLATE); fprintf(outf, "%s", MAIN_BODY_BOILERPLATE); fprintf(outf, "%s", MAIN_END_BOILERPLATE); break; case DEFINES_FUNC: fprintf(outf, "%s", test->fragment); fprintf(outf, "%s", MAIN_START_BOILERPLATE); fprintf(outf, "%s", USE_FUNC_BOILERPLATE); fprintf(outf, "%s", MAIN_BODY_BOILERPLATE); fprintf(outf, "%s", MAIN_END_BOILERPLATE); break; case DEFINES_EVERYTHING: fprintf(outf, "%s", test->fragment); break; default: abort(); } if (verbose > 1) { fseek(outf, 0, SEEK_SET); fcopy(outf, stdout); } fclose(outf); newcmd = strdup(cmd); if (test->flags) { newcmd = realloc(newcmd, strlen(newcmd) + strlen(" ") + strlen(test->flags) + 1); strcat(newcmd, " "); strcat(newcmd, test->flags); if (verbose > 1) printf("Extra flags line: %s", newcmd); } if (test->link) { newcmd = realloc(newcmd, strlen(newcmd) + strlen(" ") + strlen(test->link) + 1); strcat(newcmd, " "); strcat(newcmd, test->link); if (verbose > 1) printf("Extra link line: %s", newcmd); } output = run(newcmd, &status); free(newcmd); if (status != 0 || strstr(output, "warning")) { if (verbose) printf("Compile %s for %s, status %i: %s\n", status ? "fail" : "warning", test->name, status, output); if ((test->style & EXECUTE) && !(test->style & MAY_NOT_COMPILE)) c12r_errx(1, "Test for %s did not compile:\n%s", test->name, output); test->answer = false; free(output); } else { /* Compile succeeded. */ free(output); /* We run INSIDE_MAIN tests for sanity checking. */ if ((test->style & EXECUTE) || (test->style & INSIDE_MAIN)) { output = run("." DIR_SEP OUTPUT_FILE, &status); if (!(test->style & EXECUTE) && status != 0) c12r_errx(1, "Test for %s failed with %i:\n%s", test->name, status, output); if (verbose && status) printf("%s exited %i\n", test->name, status); free(output); } test->answer = (status == 0); } test->done = true; if (test->answer && test->overrides) { struct test *override = find_test(test->overrides); override->done = true; override->answer = true; } return test->answer; } int main(int argc, const char *argv[]) { char *cmd; unsigned int i; const char *default_args[] = { "", DEFAULT_COMPILER, DEFAULT_FLAGS, NULL }; const char *outflag = DEFAULT_OUTPUT_EXE_FLAG; if (argc > 0) progname = argv[0]; while (argc > 1) { if (strcmp(argv[1], "--help") == 0) { printf("Usage: configurator [-v] [-O] [ ...]\n" " will have \" \" appended\n" "Default: %s %s %s\n", DEFAULT_COMPILER, DEFAULT_FLAGS, DEFAULT_OUTPUT_EXE_FLAG); exit(0); } if (strncmp(argv[1], "-O", 2) == 0) { argc--; argv++; outflag = argv[1] + 2; if (!*outflag) { fprintf(stderr, "%s: option requires an argument -- O\n", argv[0]); exit(1); } } else if (strcmp(argv[1], "-v") == 0) { argc--; argv++; verbose++; } else if (strcmp(argv[1], "-vv") == 0) { argc--; argv++; verbose += 2; } else { break; } } if (argc == 1) argv = default_args; cmd = connect_args(argv, outflag, OUTPUT_FILE " " INPUT_FILE); for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) run_test(cmd, &tests[i]); free(cmd); remove(OUTPUT_FILE); remove(INPUT_FILE); printf("/* Generated by CCAN configurator */\n" "#ifndef CCAN_CONFIG_H\n" "#define CCAN_CONFIG_H\n"); printf("#ifndef _GNU_SOURCE\n"); printf("#define _GNU_SOURCE /* Always use GNU extensions. */\n"); printf("#endif\n"); printf("#define CCAN_COMPILER \"%s\"\n", argv[1]); cmd = connect_args(argv + 1, "", ""); printf("#define CCAN_CFLAGS \"%s\"\n", cmd); free(cmd); printf("#define CCAN_OUTPUT_EXE_CFLAG \"%s\"\n\n", outflag); /* This one implies "#include #include #include #include #include /** * streq - Are two strings equal? * @a: first string * @b: first string * * This macro is arguably more readable than "!strcmp(a, b)". * * Example: * if (streq(somestring, "")) * printf("String is empty!\n"); */ #define streq(a,b) (strcmp((a),(b)) == 0) /** * strstarts - Does this string start with this prefix? * @str: string to test * @prefix: prefix to look for at start of str * * Example: * if (strstarts(somestring, "foo")) * printf("String %s begins with 'foo'!\n", somestring); */ #define strstarts(str,prefix) (strncmp((str),(prefix),strlen(prefix)) == 0) /** * strends - Does this string end with this postfix? * @str: string to test * @postfix: postfix to look for at end of str * * Example: * if (strends(somestring, "foo")) * printf("String %s end with 'foo'!\n", somestring); */ static inline bool strends(const char *str, const char *postfix) { if (strlen(str) < strlen(postfix)) return false; return streq(str + strlen(str) - strlen(postfix), postfix); } /** * stringify - Turn expression into a string literal * @expr: any C expression * * Example: * #define PRINT_COND_IF_FALSE(cond) \ * ((cond) || printf("%s is false!", stringify(cond))) */ #define stringify(expr) stringify_1(expr) /* Double-indirection required to stringify expansions */ #define stringify_1(expr) #expr /** * strcount - Count number of (non-overlapping) occurrences of a substring. * @haystack: a C string * @needle: a substring * * Example: * assert(strcount("aaa aaa", "a") == 6); * assert(strcount("aaa aaa", "ab") == 0); * assert(strcount("aaa aaa", "aa") == 2); */ size_t strcount(const char *haystack, const char *needle); /** * STR_MAX_CHARS - Maximum possible size of numeric string for this type. * @type_or_expr: a pointer or integer type or expression. * * This provides enough space for a nul-terminated string which represents the * largest possible value for the type or expression. * * Note: The implementation adds extra space so hex values or negative * values will fit (eg. sprintf(... "%p"). ) * * Example: * char str[STR_MAX_CHARS(int)]; * * sprintf(str, "%i", 7); */ #define STR_MAX_CHARS(type_or_expr) \ ((sizeof(type_or_expr) * CHAR_BIT + 8) / 9 * 3 + 2 \ + STR_MAX_CHARS_TCHECK_(type_or_expr)) #if HAVE_TYPEOF /* Only a simple type can have 0 assigned, so test that. */ #define STR_MAX_CHARS_TCHECK_(type_or_expr) \ (sizeof(({ typeof(type_or_expr) x = 0; x; }))*0) #else #define STR_MAX_CHARS_TCHECK_(type_or_expr) 0 #endif /** * cisalnum - isalnum() which takes a char (and doesn't accept EOF) * @c: a character * * Surprisingly, the standard ctype.h isalnum() takes an int, which * must have the value of EOF (-1) or an unsigned char. This variant * takes a real char, and doesn't accept EOF. */ static inline bool cisalnum(char c) { return isalnum((unsigned char)c); } static inline bool cisalpha(char c) { return isalpha((unsigned char)c); } static inline bool cisascii(char c) { return isascii((unsigned char)c); } #if HAVE_ISBLANK static inline bool cisblank(char c) { return isblank((unsigned char)c); } #endif static inline bool ciscntrl(char c) { return iscntrl((unsigned char)c); } static inline bool cisdigit(char c) { return isdigit((unsigned char)c); } static inline bool cisgraph(char c) { return isgraph((unsigned char)c); } static inline bool cislower(char c) { return islower((unsigned char)c); } static inline bool cisprint(char c) { return isprint((unsigned char)c); } static inline bool cispunct(char c) { return ispunct((unsigned char)c); } static inline bool cisspace(char c) { return isspace((unsigned char)c); } static inline bool cisupper(char c) { return isupper((unsigned char)c); } static inline bool cisxdigit(char c) { return isxdigit((unsigned char)c); } #include /* These checks force things out of line, hence they are under DEBUG. */ #ifdef CCAN_STR_DEBUG #include /* These are commonly misused: they take -1 or an *unsigned* char value. */ #undef isalnum #undef isalpha #undef isascii #undef isblank #undef iscntrl #undef isdigit #undef isgraph #undef islower #undef isprint #undef ispunct #undef isspace #undef isupper #undef isxdigit /* You can use a char if char is unsigned. */ #if HAVE_BUILTIN_TYPES_COMPATIBLE_P && HAVE_TYPEOF #define str_check_arg_(i) \ ((i) + BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(typeof(i), \ char) \ || (char)255 > 0)) #else #define str_check_arg_(i) (i) #endif #define isalnum(i) str_isalnum(str_check_arg_(i)) #define isalpha(i) str_isalpha(str_check_arg_(i)) #define isascii(i) str_isascii(str_check_arg_(i)) #if HAVE_ISBLANK #define isblank(i) str_isblank(str_check_arg_(i)) #endif #define iscntrl(i) str_iscntrl(str_check_arg_(i)) #define isdigit(i) str_isdigit(str_check_arg_(i)) #define isgraph(i) str_isgraph(str_check_arg_(i)) #define islower(i) str_islower(str_check_arg_(i)) #define isprint(i) str_isprint(str_check_arg_(i)) #define ispunct(i) str_ispunct(str_check_arg_(i)) #define isspace(i) str_isspace(str_check_arg_(i)) #define isupper(i) str_isupper(str_check_arg_(i)) #define isxdigit(i) str_isxdigit(str_check_arg_(i)) #if HAVE_TYPEOF /* With GNU magic, we can make const-respecting standard string functions. */ #undef strstr #undef strchr #undef strrchr /* + 0 is needed to decay array into pointer. */ #define strstr(haystack, needle) \ ((typeof((haystack) + 0))str_strstr((haystack), (needle))) #define strchr(haystack, c) \ ((typeof((haystack) + 0))str_strchr((haystack), (c))) #define strrchr(haystack, c) \ ((typeof((haystack) + 0))str_strrchr((haystack), (c))) #endif #endif /* CCAN_STR_DEBUG */ #endif /* CCAN_STR_H */ hkl-5.0.0.2449/hkl/ccan/str/str_debug.h0000644000175000017500000000140613210507774017543 0ustar00piccapicca00000000000000/* CC0 (Public domain) - see LICENSE file for details */ #ifndef CCAN_STR_DEBUG_H #define CCAN_STR_DEBUG_H /* #define CCAN_STR_DEBUG 1 */ #ifdef CCAN_STR_DEBUG /* Because we mug the real ones with macros, we need our own wrappers. */ int str_isalnum(int i); int str_isalpha(int i); int str_isascii(int i); #if HAVE_ISBLANK int str_isblank(int i); #endif int str_iscntrl(int i); int str_isdigit(int i); int str_isgraph(int i); int str_islower(int i); int str_isprint(int i); int str_ispunct(int i); int str_isspace(int i); int str_isupper(int i); int str_isxdigit(int i); char *str_strstr(const char *haystack, const char *needle); char *str_strchr(const char *s, int c); char *str_strrchr(const char *s, int c); #endif /* CCAN_STR_DEBUG */ #endif /* CCAN_STR_DEBUG_H */ hkl-5.0.0.2449/hkl/ccan/str/str.c0000644000175000017500000000043713210507774016373 0ustar00piccapicca00000000000000/* CC0 (Public domain) - see LICENSE file for details */ #include size_t strcount(const char *haystack, const char *needle) { size_t i = 0, nlen = strlen(needle); while ((haystack = strstr(haystack, needle)) != NULL) { i++; haystack += nlen; } return i; } hkl-5.0.0.2449/hkl/ccan/str/debug.c0000644000175000017500000000312413210507774016645 0ustar00piccapicca00000000000000/* CC0 (Public domain) - see LICENSE file for details */ #include #include #include #include #include #ifdef CCAN_STR_DEBUG /* Because we mug the real ones with macros, we need our own wrappers. */ int str_isalnum(int i) { assert(i >= -1 && i < 256); return isalnum(i); } int str_isalpha(int i) { assert(i >= -1 && i < 256); return isalpha(i); } int str_isascii(int i) { assert(i >= -1 && i < 256); return isascii(i); } #if HAVE_ISBLANK int str_isblank(int i) { assert(i >= -1 && i < 256); return isblank(i); } #endif int str_iscntrl(int i) { assert(i >= -1 && i < 256); return iscntrl(i); } int str_isdigit(int i) { assert(i >= -1 && i < 256); return isdigit(i); } int str_isgraph(int i) { assert(i >= -1 && i < 256); return isgraph(i); } int str_islower(int i) { assert(i >= -1 && i < 256); return islower(i); } int str_isprint(int i) { assert(i >= -1 && i < 256); return isprint(i); } int str_ispunct(int i) { assert(i >= -1 && i < 256); return ispunct(i); } int str_isspace(int i) { assert(i >= -1 && i < 256); return isspace(i); } int str_isupper(int i) { assert(i >= -1 && i < 256); return isupper(i); } int str_isxdigit(int i) { assert(i >= -1 && i < 256); return isxdigit(i); } #undef strstr #undef strchr #undef strrchr char *str_strstr(const char *haystack, const char *needle) { return strstr(haystack, needle); } char *str_strchr(const char *haystack, int c) { return strchr(haystack, c); } char *str_strrchr(const char *haystack, int c) { return strrchr(haystack, c); } #endif hkl-5.0.0.2449/hkl/ccan/generator/0000755000175000017500000000000013237020537016565 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl/ccan/generator/generator.h0000644000175000017500000001443513211074266020733 0ustar00piccapicca00000000000000/* Licensed under LGPLv2.1+ - see LICENSE file for details */ #ifndef CCAN_GENERATOR_H #define CCAN_GENERATOR_H #include #if !HAVE_TYPEOF #error Generators require typeof #endif #if !HAVE_STATEMENT_EXPR #error Generators require statement expressions #endif #include #include #include #include #include #include #if !COROUTINE_AVAILABLE #error Generators require coroutines #endif /* * Internals - included just for the use of inlines and macros */ struct generator_ { struct coroutine_state gen; struct coroutine_state caller; bool complete; void *base; }; static inline struct generator_ *generator_state_(const void *ret) { return (struct generator_ *)ret - 1; } static inline void *generator_argp_(const void *ret) { return generator_state_(ret)->base; } struct generator_incomplete_; #define generator_rtype_(gen_) \ typeof((*(gen_))((struct generator_incomplete_ *)NULL)) void *generator_new_(void (*fn)(void *), size_t retsize); void generator_free_(void *ret, size_t retsize); /* * API */ /** * generator_t - type for an in-progress generator * @rtype: type of values the generator yield */ #define generator_t(rtype_) \ typeof(rtype_ (*)(struct generator_incomplete_ *)) /** * generator_declare - declare (but don't define) a generator function * @name: name for the generator * @rtype: return type for the generator * * Declares (as an extern) a generator function named @name, which * will yield return values of type @rtype. * * Example: * generator_declare(count_to_3, int); */ #define generator_declare(name_, rtype_, ...) \ generator_t(rtype_) name_(generator_parms_outer_(__VA_ARGS__)) /** * generator_def - define a generator function * @name: name for the generator * @rtype: return type for the generator * * Define a generator function named @name yielding return values of * type @rtype. The generator_def() line is followed immediately by a * block containing the generator's code. * * Example: * generator_def(count_to_3, int) * { * generator_yield(1); * generator_yield(2); * generator_yield(3); * } */ #define generator_parm_(t_, n_) t_ n_ #define generator_parms_(...) \ CPPMAGIC_2MAP(generator_parm_, __VA_ARGS__) #define generator_parms_inner_(...) \ CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ (, generator_parms_(__VA_ARGS__))() #define generator_parms_outer_(...) \ CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ (generator_parms_(__VA_ARGS__))(void) #define generator_argfield_(t_, n_) t_ n_; #define generator_argstruct_(...) \ struct { \ CPPMAGIC_JOIN(, CPPMAGIC_2MAP(generator_argfield_, \ __VA_ARGS__)) \ } #define generator_arg_unpack_(t_, n_) args->n_ #define generator_args_unpack_(...) \ CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ (, CPPMAGIC_2MAP(generator_arg_unpack_, __VA_ARGS__))() #define generator_arg_pack_(t_, n_) args->n_ = n_ #define generator_args_pack_(...) \ CPPMAGIC_JOIN(;, CPPMAGIC_2MAP(generator_arg_pack_, __VA_ARGS__)) #define generator_def_(name_, rtype_, storage_, ...) \ static void name_##_generator_(rtype_ *ret_ \ generator_parms_inner_(__VA_ARGS__)); \ static void name_##_generator__(void *ret) \ { \ struct generator_ *gen; \ UNNEEDED generator_argstruct_(__VA_ARGS__) *args; \ gen = generator_state_(ret); \ args = generator_argp_(ret); \ name_##_generator_(ret generator_args_unpack_(__VA_ARGS__)); \ gen->complete = true; \ coroutine_jump(&gen->caller); \ assert(0); \ } \ storage_ generator_t(rtype_) \ name_(generator_parms_outer_(__VA_ARGS__)) \ { \ generator_t(rtype_) gen = generator_new_(name_##_generator__, \ sizeof(rtype_)); \ UNNEEDED generator_argstruct_(__VA_ARGS__) *args = \ generator_argp_(gen); \ generator_args_pack_(__VA_ARGS__); \ return gen; \ } \ static void name_##_generator_(rtype_ *ret_ \ generator_parms_inner_(__VA_ARGS__)) #define generator_def(name_, rtype_, ...) \ generator_def_(name_, rtype_, , __VA_ARGS__) /** * generator_def_static - define a private / local generator function * @name: name for the generator * @rtype: return type for the generator * * As generator_def, but the resulting generator function will be * local to this module. */ #define generator_def_static(name_, rtype_, ...) \ generator_def_(name_, rtype_, static, __VA_ARGS__) /** * generator_yield - yield (return) a value from a generator * @val: value to yield * * Invoke only from within a generator. Yield the given value to the * caller. This will stop execution of the generator code until the * caller next invokes generator_next(), at which point it will * continue from the generator_yield statement. */ #define generator_yield(val_) \ do { \ struct generator_ *gen_ = generator_state_(ret_); \ *(ret_) = (val_); \ coroutine_switch(&gen_->gen, &gen_->caller); \ } while (0) /** * generator_next - get next value from a generator * @gen: a generator state variable * * Returns a pointer to a (correctly typed) buffer containing the next * value yielded by @gen, or NULL if @gen is finished. The buffer * contents is only valid until the next time @gen is called or * manipulated. */ static inline void *generator_next_(void *ret_) { struct generator_ *gen = generator_state_(ret_); if (gen->complete) return NULL; coroutine_switch(&gen->caller, &gen->gen); return gen->complete ? NULL : ret_; } #define generator_next(gen_) \ ((generator_rtype_(gen_) *)generator_next_(gen_)) /** * generator_next_val - store next value from a generator * @val: a variable of type suitable to store the generator's return * type (lvalue) * @gen: a generator state variable * * Returns 'true' if @gen yielded a new value, false if @gen is * complete. If a new value was yielded, it is stored in @val. */ #define generator_next_val(val_, gen_) \ ({ \ generator_rtype_(gen_) *ret; \ ret = generator_next(gen_); \ if (ret) \ (val_) = *ret; \ !!ret; \ }) #define generator_free(gen_) \ generator_free_((generator_rtype_(gen_) *)(gen_), \ sizeof(generator_rtype_(gen_))) #endif /* CCAN_GENERATOR_H */ hkl-5.0.0.2449/hkl/ccan/generator/generator.c0000644000175000017500000000242013237017527020722 0ustar00piccapicca00000000000000/* Licensed LGPLv2.1+ - see LICENSE file for details */ #include #include #include #include #include #define DEFAULT_STATE_SIZE (8192*4) #define STATE_ALIGN ALIGNOF(struct generator_) static size_t generator_metasize(size_t retsize) { retsize = (retsize + STATE_ALIGN) & ~(STATE_ALIGN - 1); return sizeof(struct generator_) + retsize; } void *generator_new_(void (*fn)(void *), size_t retsize) { char *base; size_t size = DEFAULT_STATE_SIZE; size_t metasize = generator_metasize(retsize); struct coroutine_stack *stack; void *ret; struct generator_ *gen; base = malloc(size); if (!base) abort(); retsize = (retsize + STATE_ALIGN) & ~(STATE_ALIGN - 1); stack = coroutine_stack_init(base, size, metasize); gen = coroutine_stack_to_metadata(stack, metasize); ret = gen + 1; gen->base = base; gen->complete = false; coroutine_init(&gen->gen, fn, ret, stack); return ret; } void generator_free_(void *ret, size_t retsize) { struct generator_ *gen = generator_state_(ret); size_t metasize = generator_metasize(retsize); struct coroutine_stack *stack; stack = coroutine_stack_from_metadata(gen, metasize); coroutine_stack_release(stack, metasize); free(gen->base); } hkl-5.0.0.2449/hkl/ccan/darray/0000755000175000017500000000000013237020537016061 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl/ccan/darray/darray.h0000644000175000017500000003036313211074266017521 0ustar00piccapicca00000000000000/* * Copyright (C) 2011 Joseph Adams * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef CCAN_DARRAY_H #define CCAN_DARRAY_H #include #include #include /* * SYNOPSIS * * Life cycle of a darray (dynamically-allocated array): * * darray(int) a = darray_new(); * darray_free(a); * * struct {darray(int) a;} foo; * darray_init(foo.a); * darray_free(foo.a); * * Typedefs for darrays of common types: * * darray_char, darray_schar, darray_uchar * darray_short, darray_int, darray_long * darray_ushort, darray_uint, darray_ulong * * Access: * * T darray_item(darray(T) arr, size_t index); * size_t darray_size(darray(T) arr); * size_t darray_alloc(darray(T) arr); * bool darray_empty(darray(T) arr); * * Insertion (single item): * * void darray_append(darray(T) arr, T item); * void darray_prepend(darray(T) arr, T item); * void darray_insert(darray(T) arr, size_t index, T item); * void darray_push(darray(T) arr, T item); // same as darray_append * * Insertion (multiple items): * * void darray_append_items(darray(T) arr, T *items, size_t count); * void darray_prepend_items(darray(T) arr, T *items, size_t count); * * void darray_appends(darray(T) arr, [T item, [...]]); * void darray_prepends(darray(T) arr, [T item, [...]]); * * // Same functionality as above, but does not require typeof. * void darray_appends_t(darray(T) arr, #T, [T item, [...]]); * void darray_prepends_t(darray(T) arr, #T, [T item, [...]]); * * Removal: * * T darray_pop(darray(T) arr | darray_size(arr) != 0); * T* darray_pop_check(darray(T*) arr); * void darray_remove(darray(T) arr, size_t index); * * Replacement: * * void darray_from_items(darray(T) arr, T *items, size_t count); * void darray_from_c(darray(T) arr, T c_array[N]); * * String buffer: * * void darray_append_string(darray(char) arr, const char *str); * void darray_append_lit(darray(char) arr, char stringLiteral[N+1]); * * void darray_prepend_string(darray(char) arr, const char *str); * void darray_prepend_lit(darray(char) arr, char stringLiteral[N+1]); * * void darray_from_string(darray(T) arr, const char *str); * void darray_from_lit(darray(char) arr, char stringLiteral[N+1]); * * Size management: * * void darray_resize(darray(T) arr, size_t newSize); * void darray_resize0(darray(T) arr, size_t newSize); * * void darray_realloc(darray(T) arr, size_t newAlloc); * void darray_growalloc(darray(T) arr, size_t newAlloc); * * void darray_make_room(darray(T) arr, size_t room); * * Traversal: * * darray_foreach(T *&i, darray(T) arr) {...} * darray_foreach_reverse(T *&i, darray(T) arr) {...} * * Except for darray_foreach, darray_foreach_reverse, and darray_remove, * all macros evaluate their non-darray arguments only once. */ /*** Life cycle ***/ #define darray(type) struct {type *item; size_t size; size_t alloc;} #define darray_new() {0,0,0} #define darray_init(arr) do {(arr).item=0; (arr).size=0; (arr).alloc=0;} while(0) #define darray_free(arr) do {free((arr).item);} while(0) /* * Typedefs for darrays of common types. These are useful * when you want to pass a pointer to an darray(T) around. * * The following will produce an incompatible pointer warning: * * void foo(darray(int) *arr); * darray(int) arr = darray_new(); * foo(&arr); * * The workaround: * * void foo(darray_int *arr); * darray_int arr = darray_new(); * foo(&arr); */ typedef darray(char) darray_char; typedef darray(signed char) darray_schar; typedef darray(unsigned char) darray_uchar; typedef darray(short) darray_short; typedef darray(int) darray_int; typedef darray(long) darray_long; typedef darray(unsigned short) darray_ushort; typedef darray(unsigned int) darray_uint; typedef darray(unsigned long) darray_ulong; /*** Access ***/ #define darray_item(arr, i) ((arr).item[i]) #define darray_size(arr) ((arr).size) #define darray_alloc(arr) ((arr).alloc) #define darray_empty(arr) ((arr).size == 0) /*** Insertion (single item) ***/ #define darray_append(arr, ...) do { \ darray_resize(arr, (arr).size+1); \ (arr).item[(arr).size-1] = (__VA_ARGS__); \ } while(0) #define darray_prepend(arr, ...) do { \ darray_resize(arr, (arr).size+1); \ memmove((arr).item+1, (arr).item, ((arr).size-1)*sizeof(*(arr).item)); \ (arr).item[0] = (__VA_ARGS__); \ } while(0) #define darray_insert(arr, i, ...) do { \ size_t index_ = (i); \ darray_resize(arr, (arr).size+1); \ memmove((arr).item+index_+1, (arr).item+index_, ((arr).size-index_-1)*sizeof(*(arr).item)); \ (arr).item[index_] = (__VA_ARGS__); \ } while(0) #define darray_push(arr, ...) darray_append(arr, __VA_ARGS__) /*** Insertion (multiple items) ***/ #define darray_append_items(arr, items, count) do { \ size_t count_ = (count), oldSize_ = (arr).size; \ darray_resize(arr, oldSize_ + count_); \ memcpy((arr).item + oldSize_, items, count_ * sizeof(*(arr).item)); \ } while(0) #define darray_prepend_items(arr, items, count) do { \ size_t count_ = (count), oldSize_ = (arr).size; \ darray_resize(arr, count_ + oldSize_); \ memmove((arr).item + count_, (arr).item, oldSize_ * sizeof(*(arr).item)); \ memcpy((arr).item, items, count_ * sizeof(*(arr).item)); \ } while(0) #define darray_append_items_nullterminate(arr, items, count) do { \ size_t count_ = (count), oldSize_ = (arr).size; \ darray_resize(arr, oldSize_ + count_ + 1); \ memcpy((arr).item + oldSize_, items, count_ * sizeof(*(arr).item)); \ (arr).item[--(arr).size] = 0; \ } while(0) #define darray_prepend_items_nullterminate(arr, items, count) do { \ size_t count_ = (count), oldSize_ = (arr).size; \ darray_resize(arr, count_ + oldSize_ + 1); \ memmove((arr).item + count_, (arr).item, oldSize_ * sizeof(*(arr).item)); \ memcpy((arr).item, items, count_ * sizeof(*(arr).item)); \ (arr).item[--(arr).size] = 0; \ } while(0) #if HAVE_TYPEOF #define darray_appends(arr, ...) darray_appends_t(arr, typeof((*(arr).item)), __VA_ARGS__) #define darray_prepends(arr, ...) darray_prepends_t(arr, typeof((*(arr).item)), __VA_ARGS__) #endif #define darray_appends_t(arr, type, ...) do { \ type src_[] = {__VA_ARGS__}; \ darray_append_items(arr, src_, sizeof(src_)/sizeof(*src_)); \ } while(0) #define darray_prepends_t(arr, type, ...) do { \ type src_[] = {__VA_ARGS__}; \ darray_prepend_items(arr, src_, sizeof(src_)/sizeof(*src_)); \ } while(0) /*** Removal ***/ /* Warning: Do not call darray_pop on an empty darray. */ #define darray_pop(arr) ((arr).item[--(arr).size]) #define darray_pop_check(arr) ((arr).size ? darray_pop(arr) : NULL) /* Warning, slow: Requires copying all elements after removed item. */ #define darray_remove(arr, i) do { \ size_t index_ = (i); \ if (index_ < arr.size-1) \ memmove(&(arr).item[index_], &(arr).item[index_+1], ((arr).size-1-index_)*sizeof(*(arr).item)); \ (arr).size--; \ } while(0) /*** Replacement ***/ #define darray_from_items(arr, items, count) do {size_t count_ = (count); darray_resize(arr, count_); memcpy((arr).item, items, count_*sizeof(*(arr).item));} while(0) #define darray_from_c(arr, c_array) darray_from_items(arr, c_array, sizeof(c_array)/sizeof(*(c_array))) /*** String buffer ***/ #define darray_append_string(arr, str) do {const char *str_ = (str); darray_append_items(arr, str_, strlen(str_)+1); (arr).size--;} while(0) #define darray_append_lit(arr, stringLiteral) do {darray_append_items(arr, stringLiteral, sizeof(stringLiteral)); (arr).size--;} while(0) #define darray_prepend_string(arr, str) do { \ const char *str_ = (str); \ darray_prepend_items_nullterminate(arr, str_, strlen(str_)); \ } while(0) #define darray_prepend_lit(arr, stringLiteral) \ darray_prepend_items_nullterminate(arr, stringLiteral, sizeof(stringLiteral) - 1) #define darray_from_string(arr, str) do {const char *str_ = (str); darray_from_items(arr, str_, strlen(str_)+1); (arr).size--;} while(0) #define darray_from_lit(arr, stringLiteral) do {darray_from_items(arr, stringLiteral, sizeof(stringLiteral)); (arr).size--;} while(0) /*** Size management ***/ #define darray_resize(arr, newSize) darray_growalloc(arr, (arr).size = (newSize)) #define darray_resize0(arr, newSize) do { \ size_t oldSize_ = (arr).size, newSize_ = (newSize); \ (arr).size = newSize_; \ if (newSize_ > oldSize_) { \ darray_growalloc(arr, newSize_); \ memset(&(arr).item[oldSize_], 0, (newSize_ - oldSize_) * sizeof(*(arr).item)); \ } \ } while(0) #define darray_realloc(arr, newAlloc) do { \ (arr).item = realloc((arr).item, ((arr).alloc = (newAlloc)) * sizeof(*(arr).item)); \ } while(0) #define darray_growalloc(arr, need) do { \ size_t need_ = (need); \ if (need_ > (arr).alloc) \ darray_realloc(arr, darray_next_alloc((arr).alloc, need_)); \ } while(0) #if HAVE_STATEMENT_EXPR==1 #define darray_make_room(arr, room) ({size_t newAlloc = (arr).size+(room); if ((arr).alloc &(arr).item[0]; ) #endif /* CCAN_DARRAY_H */ /* darray_growalloc(arr, newAlloc) sees if the darray can currently hold newAlloc items; if not, it increases the alloc to satisfy this requirement, allocating slack space to avoid having to reallocate for every size increment. darray_from_string(arr, str) copies a string to an darray_char. darray_push(arr, item) pushes an item to the end of the darray. darray_pop(arr) pops it back out. Be sure there is at least one item in the darray before calling. darray_pop_check(arr) does the same as darray_pop, but returns NULL if there are no more items left in the darray. darray_make_room(arr, room) ensures there's 'room' elements of space after the end of the darray, and it returns a pointer to this space. Currently requires HAVE_STATEMENT_EXPR, but I plan to remove this dependency by creating an inline function. The following require HAVE_TYPEOF==1 : darray_appends(arr, item0, item1...) appends a collection of comma-delimited items to the darray. darray_prepends(arr, item0, item1...) prepends a collection of comma-delimited items to the darray.\ Examples: darray(int) arr; int *i; darray_appends(arr, 0,1,2,3,4); darray_appends(arr, -5,-4,-3,-2,-1); darray_foreach(i, arr) printf("%d ", *i); printf("\n"); darray_free(arr); typedef struct {int n,d;} Fraction; darray(Fraction) fractions; Fraction *i; darray_appends(fractions, {3,4}, {3,5}, {2,1}); darray_foreach(i, fractions) printf("%d/%d\n", i->n, i->d); darray_free(fractions); */ hkl-5.0.0.2449/hkl/ccan/coroutine/0000755000175000017500000000000013237020537016606 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl/ccan/coroutine/coroutine.h0000644000175000017500000001672313211074266020777 0ustar00piccapicca00000000000000/* Licensed under LGPLv2.1+ - see LICENSE file for details */ #ifndef CCAN_COROUTINE_H #define CCAN_COROUTINE_H /*#define CCAN_COROUTINE_DEBUG 1*/ #include #include #include #include #include #include #include /** * struct coroutine_stack * * Describes a stack suitable for executing a coroutine. This * structure is always contained within the stack it describes. */ struct coroutine_stack { uint64_t magic; size_t size; int valgrind_id; }; /** * struct coroutine_state * * Describes the state of an in-progress coroutine. */ struct coroutine_state; /* * Stack management */ /** * COROUTINE_STK_OVERHEAD - internal stack overhead * * Number of bytes of a stack which coroutine needs for its own * tracking information. */ #define COROUTINE_STK_OVERHEAD sizeof(struct coroutine_stack) /** * COROUTINE_MIN_STKSZ - Minimum coroutine stack size * * Contains the minimum size for a coroutine stack (not including * overhead). On systems with MINSTKSZ, guaranteed to be at least as * large as MINSTKSZ. */ #define COROUTINE_MIN_STKSZ 2048 /** * COROUTINE_STACK_MAGIC_BUF - Magic number for coroutine stacks in a user * supplied buffer */ #define COROUTINE_STACK_MAGIC_BUF 0xc040c040574cb00f /** * COROUTINE_STACK_MAGIC_ALLOC - Magic number for coroutine stacks * allocated by this module */ #define COROUTINE_STACK_MAGIC_ALLOC 0xc040c040574ca110 /** * coroutine_stack_init - Prepare a coroutine stack in an existing buffer * @buf: buffer to use for the coroutine stack * @bufsize: size of @buf * @metasize: size of metadata to add to the stack (not including * coroutine internal overhead) * * Prepares @buf for use as a coroutine stack, returning a * coroutine_stack *, allocated from within the buffer. Returns NULL * on failure. * * This will fail if the bufsize < (COROUTINE_MIN_STKSZ + * COROUTINE_STK_OVERHEAD + metasize). */ struct coroutine_stack *coroutine_stack_init(void *buf, size_t bufsize, size_t metasize); /** * coroutine_stack_alloc - Allocate a coroutine stack * @totalsize: total size to allocate * @metasize: size of metadata to add to the stack (not including * coroutine internal overhead) * * Allocates a coroutine stack of size @totalsize, including both * internal overhead (COROUTINE_STK_OVERHEAD) and metadata of size * @metasize. Where available this will also create a guard page, so * that overruning the stack will result in an immediate crash, rather * than data corruption. * * This will fail if the totalsize < (COROUTINE_MIN_STKSZ + * COROUTINE_STK_OVERHEAD + metasize). */ struct coroutine_stack *coroutine_stack_alloc(size_t bufsize, size_t metasize); /** * coroutine_stack_release - Stop using a coroutine stack * @stack: coroutine stack to release * @metasize: size of metadata * * This releases @stack, making it no longer suitable for use as a * coroutine stack. @metasize must be equal to the metasize passed to * coroutine_stack_init. */ void coroutine_stack_release(struct coroutine_stack *stack, size_t metasize); /** * coroutine_stack_check - Validate and return a coroutine stack * @stack: stack to check * @abortstr: the location to print on aborting, or NULL. * * Debugging check if @stack doesn't appear to be a valid coroutine * stack, and @abortstr is non-NULL it will be printed and the * function will abort. * * Returns @stack if it appears valid, NULL if not (it can never * return NULL if @abortstr is set). */ struct coroutine_stack *coroutine_stack_check(struct coroutine_stack *stack, const char *abortstr); /** * coroutine_stack_to_metadata - Returns pointer to user's metadata * allocated within the stack * @stack: coroutine stack * @metasize: size of metadata * * Returns a pointer to the metadata area within @stack. This is of * size given at initialization time, and won't be overwritten by * coroutines executing on the stack. It's up to the caller what to * put in here. @metasize must be equal to the value passed to * coroutine_stack_init(). */ static inline void *coroutine_stack_to_metadata(struct coroutine_stack *stack, size_t metasize) { #if HAVE_STACK_GROWS_UPWARDS return (char *)stack - metasize; #else return (char *)stack + COROUTINE_STK_OVERHEAD; #endif } /** * coroutine_stack_from_metadata - Returns pointer to coroutine stack * pointer given pointer to user metadata * @metadat: user metadata within a stack * @metasize: size of metadata * * Returns a pointer to the coroutine_stack handle within a stack. * The argument must be a pointer returned by * coroutine_stack_to_metadata() at an earlier time. @metasize must be * equal to the value passed to coroutine_stack_init(). */ static inline struct coroutine_stack * coroutine_stack_from_metadata(void *metadata, size_t metasize) { #if HAVE_STACK_GROWS_UPWARDS return (struct coroutine_stack *)((char *)metadata + metasize); #else return (struct coroutine_stack *)((char *)metadata - COROUTINE_STK_OVERHEAD); #endif } /** * coroutine_stack_size - Return size of a coroutine stack * @stack: coroutine stack * * Returns the size of the coroutine stack @stack. This does not * include the overhead of struct coroutine_stack or metdata. */ size_t coroutine_stack_size(const struct coroutine_stack *stack); /* * Coroutine switching */ #if HAVE_UCONTEXT #include #define COROUTINE_AVAILABLE 1 #else #define COROUTINE_AVAILABLE 0 #endif struct coroutine_state { #if HAVE_UCONTEXT ucontext_t uc; #endif /* HAVE_UCONTEXT */ }; #if COROUTINE_AVAILABLE /** * coroutine_init - Prepare a coroutine for execution * @cs: coroutine_state structure to initialize * @fn: function to start executing in the coroutine * @arg: argument for @fn * @stack: stack to use for the coroutine * * Prepares @cs as a new coroutine which will execute starting with * function @fn, using stack @stack. */ void coroutine_init_(struct coroutine_state *cs, void (*fn)(void *), void *arg, struct coroutine_stack *stack); #define coroutine_init(cs, fn, arg, stack) \ coroutine_init_((cs), \ typesafe_cb(void, void *, (fn), (arg)), \ (arg), (stack)) /** * coroutine_jump - Irreversibly switch to executing a coroutine * @to: coroutine to switch to * * Immediately jump to executing coroutine @to (at whatever point in * execution it was up to). Never returns. */ void NORETURN coroutine_jump(const struct coroutine_state *to); /** * coroutine_switch - Switch coroutines * @from: coroutine in which to store current execution state * @to: coroutine to switch to * * Stop executing the current routine, saving its state in @from, and * switch to executing the coroutine @to. Returns only when something * switches or jumps back to @from. */ void coroutine_switch(struct coroutine_state *from, const struct coroutine_state *to); #else static inline void coroutine_init(struct coroutine_state *cs, void (*fn)(void *), void *arg, struct coroutine_stack *stack) { assert(0); } static inline void NORETURN coroutine_jump(const struct coroutine_state *to) { assert(0); } static inline void coroutine_switch(struct coroutine_state *from, const struct coroutine_state *to) { assert(0); } #endif /* !COROUTINE_AVAILABLE */ #endif /* CCAN_COROUTINE_H */ hkl-5.0.0.2449/hkl/ccan/coroutine/coroutine.c0000644000175000017500000001262413211074266020766 0ustar00piccapicca00000000000000/* GNU LGPL version 2 (or later) - see LICENSE file for details */ #include #include #include #include #include #include #include #include #include #include #include /* * Stack management */ /* Returns lowest stack addres, regardless of growth direction */ static UNNEEDED void *coroutine_stack_base(struct coroutine_stack *stack) { #if HAVE_STACK_GROWS_UPWARDS return (char *)(stack + 1); #else return (char *)stack - stack->size; #endif } #if HAVE_VALGRIND_MEMCHECK_H #include static void vg_register_stack(struct coroutine_stack *stack) { char *base = coroutine_stack_base(stack); VALGRIND_MAKE_MEM_UNDEFINED(base, stack->size); stack->valgrind_id = VALGRIND_STACK_REGISTER(base, base + stack->size - 1); } static void vg_deregister_stack(struct coroutine_stack *stack) { VALGRIND_MAKE_MEM_UNDEFINED(coroutine_stack_base(stack), stack->size); VALGRIND_STACK_DEREGISTER(stack->valgrind_id); } static bool vg_addressable(void *p, size_t len) { return !VALGRIND_CHECK_MEM_IS_ADDRESSABLE(p, len); } #else #define vg_register_stack(stack) do { } while (0) #define vg_deregister_stack(stack) do { } while (0) #define vg_addressable(p, len) (true) #endif struct coroutine_stack *coroutine_stack_init(void *buf, size_t bufsize, size_t metasize) { struct coroutine_stack *stack; size_t size = bufsize - sizeof(*stack) - metasize; #ifdef MINSIGSTKSZ BUILD_ASSERT(COROUTINE_MIN_STKSZ >= MINSIGSTKSZ); #endif if (bufsize < (COROUTINE_MIN_STKSZ + sizeof(*stack) + metasize)) return NULL; #if HAVE_STACK_GROWS_UPWARDS stack = (char *)buf + metasize; #else stack = (struct coroutine_stack *) ((char *)buf + bufsize - metasize) - 1; #endif stack->magic = COROUTINE_STACK_MAGIC_BUF; stack->size = size; vg_register_stack(stack); return stack; } struct coroutine_stack *coroutine_stack_alloc(size_t totalsize, size_t metasize) { struct coroutine_stack *stack; size_t pgsz = getpagesize(); size_t mapsize; char *map, *guard; int rc; mapsize = ((totalsize + (pgsz - 1)) & ~(pgsz - 1)) + pgsz; map = mmap(NULL, mapsize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); if (map == MAP_FAILED) return NULL; #if HAVE_STACK_GROWS_UPWARDS guard = map + mapsize - pgsz; stack = (struct coroutine_stack *)(guard - totalsize + metasize); #else guard = map; stack = (struct coroutine_stack *)(map + pgsz + totalsize - metasize) - 1; #endif rc = mprotect(guard, pgsz, PROT_NONE); if (rc != 0) { munmap(map, mapsize); return NULL; } stack->magic = COROUTINE_STACK_MAGIC_ALLOC; stack->size = totalsize - sizeof(*stack) - metasize; vg_register_stack(stack); return stack; } static void coroutine_stack_free(struct coroutine_stack *stack, size_t metasize) { void *map; size_t pgsz = getpagesize(); size_t totalsize = stack->size + sizeof(*stack) + metasize; size_t mapsize = ((totalsize + (pgsz - 1)) & ~(pgsz - 1)) + pgsz; #if HAVE_STACK_GROWS_UPWARDS map = (char *)(stack + 1) + stack->size + pgsz - mapsize; #else map = (char *)stack - stack->size - pgsz; #endif munmap(map, mapsize); } void coroutine_stack_release(struct coroutine_stack *stack, size_t metasize) { vg_deregister_stack(stack); switch (stack->magic) { case COROUTINE_STACK_MAGIC_BUF: memset(stack, 0, sizeof(*stack)); break; case COROUTINE_STACK_MAGIC_ALLOC: coroutine_stack_free(stack, metasize); break; default: abort(); } } struct coroutine_stack *coroutine_stack_check(struct coroutine_stack *stack, const char *abortstr) { if (stack && vg_addressable(stack, sizeof(*stack)) && ((stack->magic == COROUTINE_STACK_MAGIC_BUF) || (stack->magic == COROUTINE_STACK_MAGIC_ALLOC)) && (stack->size >= COROUTINE_MIN_STKSZ)) return stack; if (abortstr) { if (!stack) fprintf(stderr, "%s: NULL coroutine stack\n", abortstr); else fprintf(stderr, "%s: Bad coroutine stack at %p (magic=0x%"PRIx64" size=%zd)\n", abortstr, stack, stack->magic, stack->size); abort(); } return NULL; } size_t coroutine_stack_size(const struct coroutine_stack *stack) { return stack->size; } #if HAVE_UCONTEXT static void coroutine_uc_stack(stack_t *uc_stack, const struct coroutine_stack *stack) { uc_stack->ss_size = coroutine_stack_size(stack); uc_stack->ss_sp = coroutine_stack_base((struct coroutine_stack *)stack); } #endif /* HAVE_UCONTEXT */ /* * Coroutine switching */ #if HAVE_UCONTEXT void coroutine_init_(struct coroutine_state *cs, void (*fn)(void *), void *arg, struct coroutine_stack *stack) { getcontext (&cs->uc); coroutine_uc_stack(&cs->uc.uc_stack, stack); if (HAVE_POINTER_SAFE_MAKECONTEXT) { makecontext(&cs->uc, (void *)fn, 1, arg); } else { ptrdiff_t si = ptr2int(arg); ptrdiff_t mask = (1UL << (sizeof(int) * 8)) - 1; int lo = si & mask; int hi = si >> (sizeof(int) * 8); makecontext(&cs->uc, (void *)fn, 2, lo, hi); } } void coroutine_jump(const struct coroutine_state *to) { setcontext(&to->uc); assert(0); } void coroutine_switch(struct coroutine_state *from, const struct coroutine_state *to) { int rc; rc = swapcontext(&from->uc, &to->uc); assert(rc == 0); } #endif /* HAVE_UCONTEXT */ hkl-5.0.0.2449/hkl/ccan/cppmagic/0000755000175000017500000000000013237020537016362 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl/ccan/cppmagic/cppmagic.h0000644000175000017500000001274713211074266020331 0ustar00piccapicca00000000000000/* MIT (BSD) license - see LICENSE file for details */ #ifndef CCAN_CPPMAGIC_H #define CCAN_CPPMAGIC_H /** * CPPMAGIC_NOTHING - expands to nothing */ #define CPPMAGIC_NOTHING() /** * CPPMAGIC_STRINGIFY - convert arguments to a string literal */ #define _CPPMAGIC_STRINGIFY(...) #__VA_ARGS__ #define CPPMAGIC_STRINGIFY(...) _CPPMAGIC_STRINGIFY(__VA_ARGS__) /** * CPPMAGIC_GLUE2 - glue arguments together * * CPPMAGIC_GLUE2(@a_, @b_) * expands to the expansion of @a_ followed immediately * (combining tokens) by the expansion of @b_ */ #define _CPPMAGIC_GLUE2(a_, b_) a_##b_ #define CPPMAGIC_GLUE2(a_, b_) _CPPMAGIC_GLUE2(a_, b_) /** * CPPMAGIC_1ST - return 1st argument * * CPPMAGIC_1ST(@a_, ...) * expands to the expansion of @a_ */ #define CPPMAGIC_1ST(a_, ...) a_ /** * CPPMAGIC_2ND - return 2nd argument * * CPPMAGIC_2ST(@a_, @b_, ...) * expands to the expansion of @b_ */ #define CPPMAGIC_2ND(a_, b_, ...) b_ /** * CPPMAGIC_ISZERO - is argument '0' * * CPPMAGIC_ISZERO(@a) * expands to '1' if @a is '0', otherwise expands to '0'. */ #define _CPPMAGIC_ISPROBE(...) CPPMAGIC_2ND(__VA_ARGS__, 0) #define _CPPMAGIC_PROBE() $, 1 #define _CPPMAGIC_ISZERO_0 _CPPMAGIC_PROBE() #define CPPMAGIC_ISZERO(a_) \ _CPPMAGIC_ISPROBE(CPPMAGIC_GLUE2(_CPPMAGIC_ISZERO_, a_)) /** * CPPMAGIC_NONZERO - is argument not '0' * * CPPMAGIC_NONZERO(@a) * expands to '0' if @a is '0', otherwise expands to '1'. */ #define CPPMAGIC_NONZERO(a_) CPPMAGIC_ISZERO(CPPMAGIC_ISZERO(a_)) /** * CPPMAGIC_NONEMPTY - does the macro have any arguments? * * CPPMAGIC_NONEMPTY() * expands to '0' * CPPMAGIC_NONEMPTY(@a) * CPPMAGIC_NONEMPTY(@a, ...) * expand to '1' */ #define _CPPMAGIC_EOA() 0 #define CPPMAGIC_NONEMPTY(...) \ CPPMAGIC_NONZERO(CPPMAGIC_1ST(_CPPMAGIC_EOA __VA_ARGS__)()) /** * CPPMAGIC_ISEMPTY - does the macro have no arguments? * * CPPMAGIC_ISEMPTY() * expands to '1' * CPPMAGIC_ISEMPTY(@a) * CPPMAGIC_ISEMPTY(@a, ...) * expand to '0' */ #define CPPMAGIC_ISEMPTY(...) \ CPPMAGIC_ISZERO(CPPMAGIC_NONEMPTY(__VA_ARGS__)) /* * CPPMAGIC_IFELSE - preprocessor conditional * * CPPMAGIC_IFELSE(@cond)(@if)(@else) * expands to @else if @cond is '0', otherwise expands to @if */ #define _CPPMAGIC_IF_0(...) _CPPMAGIC_IF_0_ELSE #define _CPPMAGIC_IF_1(...) __VA_ARGS__ _CPPMAGIC_IF_1_ELSE #define _CPPMAGIC_IF_0_ELSE(...) __VA_ARGS__ #define _CPPMAGIC_IF_1_ELSE(...) #define _CPPMAGIC_IFELSE(cond_) CPPMAGIC_GLUE2(_CPPMAGIC_IF_, cond_) #define CPPMAGIC_IFELSE(cond_) \ _CPPMAGIC_IFELSE(CPPMAGIC_NONZERO(cond_)) /** * CPPMAGIC_EVAL - force multiple expansion passes * * Forces macros in the arguments to be expanded repeatedly (up to * 1024 times) even when CPP would usually stop expanding. */ #define CPPMAGIC_EVAL1(...) __VA_ARGS__ #define CPPMAGIC_EVAL2(...) \ CPPMAGIC_EVAL1(CPPMAGIC_EVAL1(__VA_ARGS__)) #define CPPMAGIC_EVAL4(...) \ CPPMAGIC_EVAL2(CPPMAGIC_EVAL2(__VA_ARGS__)) #define CPPMAGIC_EVAL8(...) \ CPPMAGIC_EVAL4(CPPMAGIC_EVAL4(__VA_ARGS__)) #define CPPMAGIC_EVAL16(...) \ CPPMAGIC_EVAL8(CPPMAGIC_EVAL8(__VA_ARGS__)) #define CPPMAGIC_EVAL32(...) \ CPPMAGIC_EVAL16(CPPMAGIC_EVAL16(__VA_ARGS__)) #define CPPMAGIC_EVAL64(...) \ CPPMAGIC_EVAL32(CPPMAGIC_EVAL32(__VA_ARGS__)) #define CPPMAGIC_EVAL128(...) \ CPPMAGIC_EVAL64(CPPMAGIC_EVAL64(__VA_ARGS__)) #define CPPMAGIC_EVAL256(...) \ CPPMAGIC_EVAL128(CPPMAGIC_EVAL128(__VA_ARGS__)) #define CPPMAGIC_EVAL512(...) \ CPPMAGIC_EVAL256(CPPMAGIC_EVAL256(__VA_ARGS__)) #define CPPMAGIC_EVAL1024(...) \ CPPMAGIC_EVAL512(CPPMAGIC_EVAL512(__VA_ARGS__)) #define CPPMAGIC_EVAL(...) CPPMAGIC_EVAL1024(__VA_ARGS__) /** * CPPMAGIC_DEFER1, CPPMAGIC_DEFER2 - defer expansion */ #define CPPMAGIC_DEFER1(a_) a_ CPPMAGIC_NOTHING() #define CPPMAGIC_DEFER2(a_) a_ CPPMAGIC_NOTHING CPPMAGIC_NOTHING()() /** * CPPMAGIC_MAP - iterate another macro across arguments * @m: name of a one argument macro * * CPPMAGIC_MAP(@m, @a1, @a2, ... @an) * expands to the expansion of @m(@a1) , @m(@a2) , ... , @m(@an) */ #define _CPPMAGIC_MAP_() _CPPMAGIC_MAP #define _CPPMAGIC_MAP(m_, a_, ...) \ m_(a_) \ CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ (, CPPMAGIC_DEFER2(_CPPMAGIC_MAP_)()(m_, __VA_ARGS__)) \ () #define CPPMAGIC_MAP(m_, ...) \ CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ (CPPMAGIC_EVAL(_CPPMAGIC_MAP(m_, __VA_ARGS__))) \ () /** * CPPMAGIC_2MAP - iterate another macro across pairs of arguments * @m: name of a two argument macro * * CPPMAGIC_2MAP(@m, @a1, @b1, @a2, @b2, ..., @an, @bn) * expands to the expansion of * @m(@a1, @b1) , @m(@a2, @b2) , ... , @m(@an, @bn) */ #define _CPPMAGIC_2MAP_() _CPPMAGIC_2MAP #define _CPPMAGIC_2MAP(m_, a_, b_, ...) \ m_(a_, b_) \ CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ (, CPPMAGIC_DEFER2(_CPPMAGIC_2MAP_)()(m_, __VA_ARGS__)) \ () #define CPPMAGIC_2MAP(m_, ...) \ CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ (CPPMAGIC_EVAL(_CPPMAGIC_2MAP(m_, __VA_ARGS__))) \ () /** * CPPMAGIC_JOIN - separate arguments with given delimiter * @d: delimiter * * CPPMAGIC_JOIN(@d, @a1, @a2, ..., @an) * expands to the expansion of @a1 @d @a2 @d ... @d @an */ #define _CPPMAGIC_JOIN_() _CPPMAGIC_JOIN #define _CPPMAGIC_JOIN(d_, a_, ...) \ a_ \ CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ (d_ CPPMAGIC_DEFER2(_CPPMAGIC_JOIN_)()(d_, __VA_ARGS__)) \ () #define CPPMAGIC_JOIN(d_, ...) \ CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ (CPPMAGIC_EVAL(_CPPMAGIC_JOIN(d_, __VA_ARGS__))) \ () #endif /* CCAN_CPPMAGIC_H */ hkl-5.0.0.2449/hkl/ccan/compiler/0000755000175000017500000000000013237020537016411 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl/ccan/compiler/compiler.h0000644000175000017500000001352413210507774020405 0ustar00piccapicca00000000000000/* CC0 (Public domain) - see LICENSE file for details */ #ifndef CCAN_COMPILER_H #define CCAN_COMPILER_H #include #ifndef COLD #if HAVE_ATTRIBUTE_COLD /** * COLD - a function is unlikely to be called. * * Used to mark an unlikely code path and optimize appropriately. * It is usually used on logging or error routines. * * Example: * static void COLD moan(const char *reason) * { * fprintf(stderr, "Error: %s (%s)\n", reason, strerror(errno)); * } */ #define COLD __attribute__((__cold__)) #else #define COLD #endif #endif #ifndef NORETURN #if HAVE_ATTRIBUTE_NORETURN /** * NORETURN - a function does not return * * Used to mark a function which exits; useful for suppressing warnings. * * Example: * static void NORETURN fail(const char *reason) * { * fprintf(stderr, "Error: %s (%s)\n", reason, strerror(errno)); * exit(1); * } */ #define NORETURN __attribute__((__noreturn__)) #else #define NORETURN #endif #endif #ifndef PRINTF_FMT #if HAVE_ATTRIBUTE_PRINTF /** * PRINTF_FMT - a function takes printf-style arguments * @nfmt: the 1-based number of the function's format argument. * @narg: the 1-based number of the function's first variable argument. * * This allows the compiler to check your parameters as it does for printf(). * * Example: * void PRINTF_FMT(2,3) my_printf(const char *prefix, const char *fmt, ...); */ #define PRINTF_FMT(nfmt, narg) \ __attribute__((format(__printf__, nfmt, narg))) #else #define PRINTF_FMT(nfmt, narg) #endif #endif #ifndef CONST_FUNCTION #if HAVE_ATTRIBUTE_CONST /** * CONST_FUNCTION - a function's return depends only on its argument * * This allows the compiler to assume that the function will return the exact * same value for the exact same arguments. This implies that the function * must not use global variables, or dereference pointer arguments. */ #define CONST_FUNCTION __attribute__((__const__)) #else #define CONST_FUNCTION #endif #ifndef PURE_FUNCTION #if HAVE_ATTRIBUTE_PURE /** * PURE_FUNCTION - a function is pure * * A pure function is one that has no side effects other than it's return value * and uses no inputs other than it's arguments and global variables. */ #define PURE_FUNCTION __attribute__((__pure__)) #else #define PURE_FUNCTION #endif #endif #endif #if HAVE_ATTRIBUTE_UNUSED #ifndef UNNEEDED /** * UNNEEDED - a variable/function may not be needed * * This suppresses warnings about unused variables or functions, but tells * the compiler that if it is unused it need not emit it into the source code. * * Example: * // With some preprocessor options, this is unnecessary. * static UNNEEDED int counter; * * // With some preprocessor options, this is unnecessary. * static UNNEEDED void add_to_counter(int add) * { * counter += add; * } */ #define UNNEEDED __attribute__((__unused__)) #endif #ifndef NEEDED #if HAVE_ATTRIBUTE_USED /** * NEEDED - a variable/function is needed * * This suppresses warnings about unused variables or functions, but tells * the compiler that it must exist even if it (seems) unused. * * Example: * // Even if this is unused, these are vital for debugging. * static NEEDED int counter; * static NEEDED void dump_counter(void) * { * printf("Counter is %i\n", counter); * } */ #define NEEDED __attribute__((__used__)) #else /* Before used, unused functions and vars were always emitted. */ #define NEEDED __attribute__((__unused__)) #endif #endif #ifndef UNUSED /** * UNUSED - a parameter is unused * * Some compilers (eg. gcc with -W or -Wunused) warn about unused * function parameters. This suppresses such warnings and indicates * to the reader that it's deliberate. * * Example: * // This is used as a callback, so needs to have this prototype. * static int some_callback(void *unused UNUSED) * { * return 0; * } */ #define UNUSED __attribute__((__unused__)) #endif #else #ifndef UNNEEDED #define UNNEEDED #endif #ifndef NEEDED #define NEEDED #endif #ifndef UNUSED #define UNUSED #endif #endif #ifndef IS_COMPILE_CONSTANT #if HAVE_BUILTIN_CONSTANT_P /** * IS_COMPILE_CONSTANT - does the compiler know the value of this expression? * @expr: the expression to evaluate * * When an expression manipulation is complicated, it is usually better to * implement it in a function. However, if the expression being manipulated is * known at compile time, it is better to have the compiler see the entire * expression so it can simply substitute the result. * * This can be done using the IS_COMPILE_CONSTANT() macro. * * Example: * enum greek { ALPHA, BETA, GAMMA, DELTA, EPSILON }; * * // Out-of-line version. * const char *greek_name(enum greek greek); * * // Inline version. * static inline const char *_greek_name(enum greek greek) * { * switch (greek) { * case ALPHA: return "alpha"; * case BETA: return "beta"; * case GAMMA: return "gamma"; * case DELTA: return "delta"; * case EPSILON: return "epsilon"; * default: return "**INVALID**"; * } * } * * // Use inline if compiler knows answer. Otherwise call function * // to avoid copies of the same code everywhere. * #define greek_name(g) \ * (IS_COMPILE_CONSTANT(greek) ? _greek_name(g) : greek_name(g)) */ #define IS_COMPILE_CONSTANT(expr) __builtin_constant_p(expr) #else /* If we don't know, assume it's not. */ #define IS_COMPILE_CONSTANT(expr) 0 #endif #endif #ifndef WARN_UNUSED_RESULT #if HAVE_WARN_UNUSED_RESULT /** * WARN_UNUSED_RESULT - warn if a function return value is unused. * * Used to mark a function where it is extremely unlikely that the caller * can ignore the result, eg realloc(). * * Example: * // buf param may be freed by this; need return value! * static char *WARN_UNUSED_RESULT enlarge(char *buf, unsigned *size) * { * return realloc(buf, (*size) *= 2); * } */ #define WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) #else #define WARN_UNUSED_RESULT #endif #endif #endif /* CCAN_COMPILER_H */ hkl-5.0.0.2449/hkl/ccan/Makefile.am0000644000175000017500000000200013211074265016622 0ustar00piccapicca00000000000000AM_CFLAGS=-I$(top_srcdir) noinst_PROGRAMS=configurator BUILT_SOURCES=ccan_config.h ccan_config.h: configurator $(builddir)/configurator $(CC) $(CCAN_CFLAGS) > $@.tmp && mv $@.tmp $@ noinst_LTLIBRARIES=libccan.la libccan_la_SOURCES = \ ccan_config.h \ array_size/array_size.h \ noerr/noerr.c \ noerr/noerr.h \ check_type/check_type.h \ str/str.h \ str/str_debug.h \ str/str.c \ str/debug.c \ generator/generator.h \ generator/generator.c \ darray/darray.h \ coroutine/coroutine.h \ coroutine/coroutine.c \ cppmagic/cppmagic.h \ compiler/compiler.h \ autodata/autodata.h \ autodata/autodata.c \ container_of/container_of.h \ build_assert/build_assert.h \ typesafe_cb/typesafe_cb.h \ list/list.c \ list/list.h \ alignof/alignof.h \ ptr_valid/ptr_valid.c \ ptr_valid/ptr_valid.h \ ptrint/ptrint.h ccanincludedir=$(includedir)/hkl-@VMAJ@/hkl/ccan nobase_ccaninclude_HEADERS= \ darray/darray.h nodist_ccaninclude_HEADERS=ccan_config.h EXTRA_DIST=configurator.c CLEANFILES=configurator ccan_config.h hkl-5.0.0.2449/hkl/ccan/autodata/0000755000175000017500000000000013237020537016401 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl/ccan/autodata/autodata.h0000644000175000017500000000624113210507774020363 0ustar00piccapicca00000000000000// Licensed under BSD-MIT: See LICENSE. #ifndef CCAN_AUTODATA_H #define CCAN_AUTODATA_H #include #include #include #if HAVE_SECTION_START_STOP /** * AUTODATA_TYPE - declare the type for a given autodata name. * @name: the name for this set of autodata * @type: the type this autodata points to * * This macro is usually placed in a header: it must preceed any * autodata functions in the file. * * Example: * #include * * // My set of char pointers. * AUTODATA_TYPE(names, char); */ #define AUTODATA_TYPE(name, type) \ typedef type autodata_##name##_; \ extern type *__start_xautodata_##name[], *__stop_xautodata_##name[] /** * AUTODATA - add a pointer to this autodata set * @name: the name of the set of autodata * @ptr: the compile-time-known pointer * * This embeds @ptr into the binary, with the tag corresponding to * @name (which must look like a valid identifier, no punctuation!). * The type of @ptr must match that given by AUTODATA_TYPE. It is * usually a file-level declaration. * * Example: * // Put two char pointers into the names AUTODATA set. * AUTODATA(names, "Arabella"); * AUTODATA(names, "Alex"); */ #define AUTODATA(name, ptr) \ static const autodata_##name##_ *NEEDED \ __attribute__((section("xautodata_" #name))) \ AUTODATA_VAR_(name, __LINE__) = (ptr); /** * autodata_get - get an autodata set * @name: the name of the set of autodata * @nump: the number of items in the set. * * This extract the embedded pointers matching @name. It may fail * if malloc() fails, or if there is no AUTODATA at all. * * The return will be a pointer to an array of @type pointers (from * AUTODATA_TYPE). * * Example: * static void print_embedded_names(void) * { * unsigned int i; * size_t num; * char **n = autodata_get(names, &num); * * for (i = 0; i < num; i++) * printf("%s\n", n[i]); * } */ #define autodata_get(name, nump) \ ((autodata_##name##_ **) \ autodata_get_section(__start_xautodata_##name, \ __stop_xautodata_##name, (nump))) #endif /* HAVE_SECTION_START_STOP */ /** * autodata_free - free the table returned by autodata_get() * @p: the table. */ void autodata_free(void *p); /* Internal functions. */ #define AUTODATA_VAR__(name, line) autodata_##name##_##line #define AUTODATA_VAR_(name, line) AUTODATA_VAR__(name, line) #if HAVE_SECTION_START_STOP void *autodata_get_section(void *start, void *stop, size_t *nump); #else #define AUTODATA_TYPE(name, type) \ typedef type autodata_##name##_; \ static const void *autodata_##name##_ex = &autodata_##name##_ex #define AUTODATA_MAGIC ((long)0xFEEDA10DA7AF00D5ULL) #define AUTODATA(name, ptr) \ static const autodata_##name##_ *NEEDED \ AUTODATA_VAR_(name, __LINE__)[4] = \ { (void *)AUTODATA_MAGIC, \ (void *)&AUTODATA_VAR_(name, __LINE__), \ (ptr), \ (void *)#name } #define autodata_get(name, nump) \ ((autodata_##name##_ **) \ autodata_make_table(&autodata_##name##_ex, #name, (nump))) void *autodata_make_table(const void *example, const char *name, size_t *nump); #endif #endif /* CCAN_AUTODATA_H */ hkl-5.0.0.2449/hkl/ccan/autodata/autodata.c0000644000175000017500000000350313211074265020347 0ustar00piccapicca00000000000000// Licensed under BSD-MIT: See LICENSE. #include "autodata.h" #include #include #include #if HAVE_SECTION_START_STOP void *autodata_get_section(void *start, void *stop, size_t *nump) { *nump = (void **)(stop) - (void **)(start); return start; } void autodata_free(void *table UNNEEDED) { } #else #include void *autodata_make_table(const void *example, const char *name, size_t *nump) { const char *start, *end, *tag; struct ptr_valid_batch batch; const void *const magic = (void *)AUTODATA_MAGIC; void **table = NULL; char first_magic; if (!ptr_valid_batch_start(&batch)) return NULL; /* Get range to search. */ for (start = (char *)((intptr_t)example & ~(getpagesize() - 1)); ptr_valid_batch(&batch, start-getpagesize(), 1, sizeof(void *), false); start -= getpagesize()); for (end = (char *)((intptr_t)example & ~(getpagesize() - 1)); ptr_valid_batch(&batch, end, 1, sizeof(void *), false); end += getpagesize()); *nump = 0; first_magic = *(char *)&magic; for (tag = memchr(start, first_magic, end - start); tag; tag = memchr(tag+1, first_magic, end - (tag + 1))) { void *adata[4]; /* We can read 4 void *'s here? */ if (tag + sizeof(adata) > end) continue; memcpy(adata, tag, sizeof(adata)); /* False match? */ if (adata[0] != (void *)AUTODATA_MAGIC || adata[1] != tag) continue; /* OK, check name. */ if (!ptr_valid_batch_string(&batch, adata[3]) || strcmp(name, adata[3]) != 0) continue; if (!ptr_valid_batch_read(&batch, (char *)adata[2])) continue; table = realloc(table, sizeof(void *) * (*nump + 1)); if (!table) break; table[*nump] = adata[2]; (*nump)++; } ptr_valid_batch_end(&batch); return table; } void autodata_free(void *table) { free(table); } #endif hkl-5.0.0.2449/hkl/ccan/container_of/0000755000175000017500000000000013237020537017245 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl/ccan/container_of/container_of.h0000644000175000017500000001031013210507774022063 0ustar00piccapicca00000000000000/* CC0 (Public domain) - see LICENSE file for details */ #ifndef CCAN_CONTAINER_OF_H #define CCAN_CONTAINER_OF_H #include #include #include /** * container_of - get pointer to enclosing structure * @member_ptr: pointer to the structure member * @containing_type: the type this member is within * @member: the name of this member within the structure. * * Given a pointer to a member of a structure, this macro does pointer * subtraction to return the pointer to the enclosing type. * * Example: * struct foo { * int fielda, fieldb; * // ... * }; * struct info { * int some_other_field; * struct foo my_foo; * }; * * static struct info *foo_to_info(struct foo *foo) * { * return container_of(foo, struct info, my_foo); * } */ #define container_of(member_ptr, containing_type, member) \ ((containing_type *) \ ((char *)(member_ptr) \ - container_off(containing_type, member)) \ + check_types_match(*(member_ptr), ((containing_type *)0)->member)) /** * container_of_or_null - get pointer to enclosing structure, or NULL * @member_ptr: pointer to the structure member * @containing_type: the type this member is within * @member: the name of this member within the structure. * * Given a pointer to a member of a structure, this macro does pointer * subtraction to return the pointer to the enclosing type, unless it * is given NULL, in which case it also returns NULL. * * Example: * struct foo { * int fielda, fieldb; * // ... * }; * struct info { * int some_other_field; * struct foo my_foo; * }; * * static struct info *foo_to_info_allowing_null(struct foo *foo) * { * return container_of_or_null(foo, struct info, my_foo); * } */ static inline char *container_of_or_null_(void *member_ptr, size_t offset) { return member_ptr ? (char *)member_ptr - offset : NULL; } #define container_of_or_null(member_ptr, containing_type, member) \ ((containing_type *) \ container_of_or_null_(member_ptr, \ container_off(containing_type, member)) \ + check_types_match(*(member_ptr), ((containing_type *)0)->member)) /** * container_off - get offset to enclosing structure * @containing_type: the type this member is within * @member: the name of this member within the structure. * * Given a pointer to a member of a structure, this macro does * typechecking and figures out the offset to the enclosing type. * * Example: * struct foo { * int fielda, fieldb; * // ... * }; * struct info { * int some_other_field; * struct foo my_foo; * }; * * static struct info *foo_to_info(struct foo *foo) * { * size_t off = container_off(struct info, my_foo); * return (void *)((char *)foo - off); * } */ #define container_off(containing_type, member) \ offsetof(containing_type, member) /** * container_of_var - get pointer to enclosing structure using a variable * @member_ptr: pointer to the structure member * @container_var: a pointer of same type as this member's container * @member: the name of this member within the structure. * * Given a pointer to a member of a structure, this macro does pointer * subtraction to return the pointer to the enclosing type. * * Example: * static struct info *foo_to_i(struct foo *foo) * { * struct info *i = container_of_var(foo, i, my_foo); * return i; * } */ #if HAVE_TYPEOF #define container_of_var(member_ptr, container_var, member) \ container_of(member_ptr, typeof(*container_var), member) #else #define container_of_var(member_ptr, container_var, member) \ ((void *)((char *)(member_ptr) - \ container_off_var(container_var, member))) #endif /** * container_off_var - get offset of a field in enclosing structure * @container_var: a pointer to a container structure * @member: the name of a member within the structure. * * Given (any) pointer to a structure and a its member name, this * macro does pointer subtraction to return offset of member in a * structure memory layout. * */ #if HAVE_TYPEOF #define container_off_var(var, member) \ container_off(typeof(*var), member) #else #define container_off_var(var, member) \ ((const char *)&(var)->member - (const char *)(var)) #endif #endif /* CCAN_CONTAINER_OF_H */ hkl-5.0.0.2449/hkl/ccan/Makefile.in0000644000175000017500000007074213237017634016662 0ustar00piccapicca00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = configurator$(EXEEXT) subdir = hkl/ccan ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(nobase_ccaninclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libccan_la_LIBADD = am__dirstamp = $(am__leading_dot)dirstamp am_libccan_la_OBJECTS = noerr/noerr.lo str/str.lo str/debug.lo \ generator/generator.lo coroutine/coroutine.lo \ autodata/autodata.lo list/list.lo ptr_valid/ptr_valid.lo libccan_la_OBJECTS = $(am_libccan_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = PROGRAMS = $(noinst_PROGRAMS) configurator_SOURCES = configurator.c configurator_OBJECTS = configurator.$(OBJEXT) configurator_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libccan_la_SOURCES) configurator.c DIST_SOURCES = $(libccan_la_SOURCES) configurator.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(ccanincludedir)" \ "$(DESTDIR)$(ccanincludedir)" HEADERS = $(nobase_ccaninclude_HEADERS) $(nodist_ccaninclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASY = @ASY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BULLET_CFLAGS = @BULLET_CFLAGS@ BULLET_LIBS = @BULLET_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMACS = @EMACS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ G3D_CFLAGS = @G3D_CFLAGS@ G3D_LIBS = @G3D_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GNUPLOT = @GNUPLOT@ GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ GOBJECT_LIBS = @GOBJECT_LIBS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTKGLEXT_CFLAGS = @GTKGLEXT_CFLAGS@ GTKGLEXT_LIBS = @GTKGLEXT_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HDF5_CFLAGS = @HDF5_CFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VMAJ = @VMAJ@ YAML_CFLAGS = @YAML_CFLAGS@ YAML_LIBS = @YAML_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ release_info = @release_info@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ version_info = @version_info@ AM_CFLAGS = -I$(top_srcdir) BUILT_SOURCES = ccan_config.h noinst_LTLIBRARIES = libccan.la libccan_la_SOURCES = \ ccan_config.h \ array_size/array_size.h \ noerr/noerr.c \ noerr/noerr.h \ check_type/check_type.h \ str/str.h \ str/str_debug.h \ str/str.c \ str/debug.c \ generator/generator.h \ generator/generator.c \ darray/darray.h \ coroutine/coroutine.h \ coroutine/coroutine.c \ cppmagic/cppmagic.h \ compiler/compiler.h \ autodata/autodata.h \ autodata/autodata.c \ container_of/container_of.h \ build_assert/build_assert.h \ typesafe_cb/typesafe_cb.h \ list/list.c \ list/list.h \ alignof/alignof.h \ ptr_valid/ptr_valid.c \ ptr_valid/ptr_valid.h \ ptrint/ptrint.h ccanincludedir = $(includedir)/hkl-@VMAJ@/hkl/ccan nobase_ccaninclude_HEADERS = \ darray/darray.h nodist_ccaninclude_HEADERS = ccan_config.h EXTRA_DIST = configurator.c CLEANFILES = configurator ccan_config.h all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu hkl/ccan/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu hkl/ccan/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } noerr/$(am__dirstamp): @$(MKDIR_P) noerr @: > noerr/$(am__dirstamp) noerr/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) noerr/$(DEPDIR) @: > noerr/$(DEPDIR)/$(am__dirstamp) noerr/noerr.lo: noerr/$(am__dirstamp) noerr/$(DEPDIR)/$(am__dirstamp) str/$(am__dirstamp): @$(MKDIR_P) str @: > str/$(am__dirstamp) str/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) str/$(DEPDIR) @: > str/$(DEPDIR)/$(am__dirstamp) str/str.lo: str/$(am__dirstamp) str/$(DEPDIR)/$(am__dirstamp) str/debug.lo: str/$(am__dirstamp) str/$(DEPDIR)/$(am__dirstamp) generator/$(am__dirstamp): @$(MKDIR_P) generator @: > generator/$(am__dirstamp) generator/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) generator/$(DEPDIR) @: > generator/$(DEPDIR)/$(am__dirstamp) generator/generator.lo: generator/$(am__dirstamp) \ generator/$(DEPDIR)/$(am__dirstamp) coroutine/$(am__dirstamp): @$(MKDIR_P) coroutine @: > coroutine/$(am__dirstamp) coroutine/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) coroutine/$(DEPDIR) @: > coroutine/$(DEPDIR)/$(am__dirstamp) coroutine/coroutine.lo: coroutine/$(am__dirstamp) \ coroutine/$(DEPDIR)/$(am__dirstamp) autodata/$(am__dirstamp): @$(MKDIR_P) autodata @: > autodata/$(am__dirstamp) autodata/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) autodata/$(DEPDIR) @: > autodata/$(DEPDIR)/$(am__dirstamp) autodata/autodata.lo: autodata/$(am__dirstamp) \ autodata/$(DEPDIR)/$(am__dirstamp) list/$(am__dirstamp): @$(MKDIR_P) list @: > list/$(am__dirstamp) list/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) list/$(DEPDIR) @: > list/$(DEPDIR)/$(am__dirstamp) list/list.lo: list/$(am__dirstamp) list/$(DEPDIR)/$(am__dirstamp) ptr_valid/$(am__dirstamp): @$(MKDIR_P) ptr_valid @: > ptr_valid/$(am__dirstamp) ptr_valid/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) ptr_valid/$(DEPDIR) @: > ptr_valid/$(DEPDIR)/$(am__dirstamp) ptr_valid/ptr_valid.lo: ptr_valid/$(am__dirstamp) \ ptr_valid/$(DEPDIR)/$(am__dirstamp) libccan.la: $(libccan_la_OBJECTS) $(libccan_la_DEPENDENCIES) $(EXTRA_libccan_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libccan_la_OBJECTS) $(libccan_la_LIBADD) $(LIBS) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list configurator$(EXEEXT): $(configurator_OBJECTS) $(configurator_DEPENDENCIES) $(EXTRA_configurator_DEPENDENCIES) @rm -f configurator$(EXEEXT) $(AM_V_CCLD)$(LINK) $(configurator_OBJECTS) $(configurator_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f autodata/*.$(OBJEXT) -rm -f autodata/*.lo -rm -f coroutine/*.$(OBJEXT) -rm -f coroutine/*.lo -rm -f generator/*.$(OBJEXT) -rm -f generator/*.lo -rm -f list/*.$(OBJEXT) -rm -f list/*.lo -rm -f noerr/*.$(OBJEXT) -rm -f noerr/*.lo -rm -f ptr_valid/*.$(OBJEXT) -rm -f ptr_valid/*.lo -rm -f str/*.$(OBJEXT) -rm -f str/*.lo distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/configurator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@autodata/$(DEPDIR)/autodata.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@coroutine/$(DEPDIR)/coroutine.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@generator/$(DEPDIR)/generator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@list/$(DEPDIR)/list.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@noerr/$(DEPDIR)/noerr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ptr_valid/$(DEPDIR)/ptr_valid.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@str/$(DEPDIR)/debug.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@str/$(DEPDIR)/str.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -rm -rf autodata/.libs autodata/_libs -rm -rf coroutine/.libs coroutine/_libs -rm -rf generator/.libs generator/_libs -rm -rf list/.libs list/_libs -rm -rf noerr/.libs noerr/_libs -rm -rf ptr_valid/.libs ptr_valid/_libs -rm -rf str/.libs str/_libs install-nobase_ccanincludeHEADERS: $(nobase_ccaninclude_HEADERS) @$(NORMAL_INSTALL) @list='$(nobase_ccaninclude_HEADERS)'; test -n "$(ccanincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(ccanincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(ccanincludedir)" || exit 1; \ fi; \ $(am__nobase_list) | while read dir files; do \ xfiles=; for file in $$files; do \ if test -f "$$file"; then xfiles="$$xfiles $$file"; \ else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ test -z "$$xfiles" || { \ test "x$$dir" = x. || { \ echo " $(MKDIR_P) '$(DESTDIR)$(ccanincludedir)/$$dir'"; \ $(MKDIR_P) "$(DESTDIR)$(ccanincludedir)/$$dir"; }; \ echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(ccanincludedir)/$$dir'"; \ $(INSTALL_HEADER) $$xfiles "$(DESTDIR)$(ccanincludedir)/$$dir" || exit $$?; }; \ done uninstall-nobase_ccanincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(nobase_ccaninclude_HEADERS)'; test -n "$(ccanincludedir)" || list=; \ $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ dir='$(DESTDIR)$(ccanincludedir)'; $(am__uninstall_files_from_dir) install-nodist_ccanincludeHEADERS: $(nodist_ccaninclude_HEADERS) @$(NORMAL_INSTALL) @list='$(nodist_ccaninclude_HEADERS)'; test -n "$(ccanincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(ccanincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(ccanincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(ccanincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(ccanincludedir)" || exit $$?; \ done uninstall-nodist_ccanincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(nodist_ccaninclude_HEADERS)'; test -n "$(ccanincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(ccanincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(ccanincludedir)" "$(DESTDIR)$(ccanincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f autodata/$(DEPDIR)/$(am__dirstamp) -rm -f autodata/$(am__dirstamp) -rm -f coroutine/$(DEPDIR)/$(am__dirstamp) -rm -f coroutine/$(am__dirstamp) -rm -f generator/$(DEPDIR)/$(am__dirstamp) -rm -f generator/$(am__dirstamp) -rm -f list/$(DEPDIR)/$(am__dirstamp) -rm -f list/$(am__dirstamp) -rm -f noerr/$(DEPDIR)/$(am__dirstamp) -rm -f noerr/$(am__dirstamp) -rm -f ptr_valid/$(DEPDIR)/$(am__dirstamp) -rm -f ptr_valid/$(am__dirstamp) -rm -f str/$(DEPDIR)/$(am__dirstamp) -rm -f str/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) autodata/$(DEPDIR) coroutine/$(DEPDIR) generator/$(DEPDIR) list/$(DEPDIR) noerr/$(DEPDIR) ptr_valid/$(DEPDIR) str/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-nobase_ccanincludeHEADERS \ install-nodist_ccanincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) autodata/$(DEPDIR) coroutine/$(DEPDIR) generator/$(DEPDIR) list/$(DEPDIR) noerr/$(DEPDIR) ptr_valid/$(DEPDIR) str/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-nobase_ccanincludeHEADERS \ uninstall-nodist_ccanincludeHEADERS .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES clean-noinstPROGRAMS \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man \ install-nobase_ccanincludeHEADERS \ install-nodist_ccanincludeHEADERS install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-nobase_ccanincludeHEADERS \ uninstall-nodist_ccanincludeHEADERS .PRECIOUS: Makefile ccan_config.h: configurator $(builddir)/configurator $(CC) $(CCAN_CFLAGS) > $@.tmp && mv $@.tmp $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: hkl-5.0.0.2449/hkl/ccan/build_assert/0000755000175000017500000000000013237020537017257 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl/ccan/build_assert/build_assert.h0000644000175000017500000000231413210507774022114 0ustar00piccapicca00000000000000/* CC0 (Public domain) - see LICENSE file for details */ #ifndef CCAN_BUILD_ASSERT_H #define CCAN_BUILD_ASSERT_H /** * BUILD_ASSERT - assert a build-time dependency. * @cond: the compile-time condition which must be true. * * Your compile will fail if the condition isn't true, or can't be evaluated * by the compiler. This can only be used within a function. * * Example: * #include * ... * static char *foo_to_char(struct foo *foo) * { * // This code needs string to be at start of foo. * BUILD_ASSERT(offsetof(struct foo, string) == 0); * return (char *)foo; * } */ #define BUILD_ASSERT(cond) \ do { (void) sizeof(char [1 - 2*!(cond)]); } while(0) /** * BUILD_ASSERT_OR_ZERO - assert a build-time dependency, as an expression. * @cond: the compile-time condition which must be true. * * Your compile will fail if the condition isn't true, or can't be evaluated * by the compiler. This can be used in an expression: its value is "0". * * Example: * #define foo_to_char(foo) \ * ((char *)(foo) \ * + BUILD_ASSERT_OR_ZERO(offsetof(struct foo, string) == 0)) */ #define BUILD_ASSERT_OR_ZERO(cond) \ (sizeof(char [1 - 2*!(cond)]) - 1) #endif /* CCAN_BUILD_ASSERT_H */ hkl-5.0.0.2449/hkl/ccan/ccan_config.h0000644000175000017500000000404513237017711017204 0ustar00piccapicca00000000000000/* Generated by CCAN configurator */ #ifndef CCAN_CONFIG_H #define CCAN_CONFIG_H #ifndef _GNU_SOURCE #define _GNU_SOURCE /* Always use GNU extensions. */ #endif #define CCAN_COMPILER "gcc" #define CCAN_CFLAGS "" #define CCAN_OUTPUT_EXE_CFLAG "-o" #define HAVE_CCAN 1 #define HAVE_32BIT_OFF_T 1 #define HAVE_ALIGNOF 1 #define HAVE_ASPRINTF 1 #define HAVE_ATTRIBUTE_COLD 1 #define HAVE_ATTRIBUTE_CONST 1 #define HAVE_ATTRIBUTE_PURE 1 #define HAVE_ATTRIBUTE_MAY_ALIAS 1 #define HAVE_ATTRIBUTE_NORETURN 1 #define HAVE_ATTRIBUTE_PRINTF 1 #define HAVE_ATTRIBUTE_UNUSED 1 #define HAVE_ATTRIBUTE_USED 1 #define HAVE_BACKTRACE 1 #define HAVE_BIG_ENDIAN 0 #define HAVE_BSWAP_64 1 #define HAVE_BUILTIN_CHOOSE_EXPR 1 #define HAVE_BUILTIN_CLZ 1 #define HAVE_BUILTIN_CLZL 1 #define HAVE_BUILTIN_CLZLL 1 #define HAVE_BUILTIN_CTZ 1 #define HAVE_BUILTIN_CTZL 1 #define HAVE_BUILTIN_CTZLL 1 #define HAVE_BUILTIN_CONSTANT_P 1 #define HAVE_BUILTIN_EXPECT 1 #define HAVE_BUILTIN_FFS 1 #define HAVE_BUILTIN_FFSL 1 #define HAVE_BUILTIN_FFSLL 1 #define HAVE_BUILTIN_POPCOUNTL 1 #define HAVE_BUILTIN_TYPES_COMPATIBLE_P 1 #define HAVE_ICCARM_INTRINSICS 0 #define HAVE_BYTESWAP_H 1 #define HAVE_CLOCK_GETTIME 1 #define HAVE_CLOCK_GETTIME_IN_LIBRT 0 #define HAVE_COMPOUND_LITERALS 1 #define HAVE_FCHDIR 1 #define HAVE_ERR_H 1 #define HAVE_FILE_OFFSET_BITS 1 #define HAVE_FOR_LOOP_DECLARATION 1 #define HAVE_FLEXIBLE_ARRAY_MEMBER 1 #define HAVE_GETPAGESIZE 1 #define HAVE_ISBLANK 1 #define HAVE_LITTLE_ENDIAN 1 #define HAVE_MEMMEM 1 #define HAVE_MEMRCHR 1 #define HAVE_MMAP 1 #define HAVE_PROC_SELF_MAPS 1 #define HAVE_QSORT_R_PRIVATE_LAST 1 #define HAVE_STRUCT_TIMESPEC 1 #define HAVE_SECTION_START_STOP 1 #define HAVE_STACK_GROWS_UPWARDS 0 #define HAVE_STATEMENT_EXPR 1 #define HAVE_SYS_FILIO_H 0 #define HAVE_SYS_TERMIOS_H 1 #define HAVE_SYS_UNISTD_H 1 #define HAVE_TYPEOF 1 #define HAVE_UNALIGNED_ACCESS 1 #define HAVE_UTIME 1 #define HAVE_WARN_UNUSED_RESULT 1 #define HAVE_OPENMP 1 #define HAVE_VALGRIND_MEMCHECK_H 1 #define HAVE_UCONTEXT 1 #define HAVE_POINTER_SAFE_MAKECONTEXT 1 #endif /* CCAN_CONFIG_H */ hkl-5.0.0.2449/hkl/ccan/typesafe_cb/0000755000175000017500000000000013237020537017063 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl/ccan/typesafe_cb/typesafe_cb.h0000644000175000017500000001165113211074266021524 0ustar00piccapicca00000000000000/* CC0 (Public domain) - see LICENSE file for details */ #ifndef CCAN_TYPESAFE_CB_H #define CCAN_TYPESAFE_CB_H #include #if HAVE_TYPEOF && HAVE_BUILTIN_CHOOSE_EXPR && HAVE_BUILTIN_TYPES_COMPATIBLE_P /** * typesafe_cb_cast - only cast an expression if it matches a given type * @desttype: the type to cast to * @oktype: the type we allow * @expr: the expression to cast * * This macro is used to create functions which allow multiple types. * The result of this macro is used somewhere that a @desttype type is * expected: if @expr is exactly of type @oktype, then it will be * cast to @desttype type, otherwise left alone. * * This macro can be used in static initializers. * * This is merely useful for warnings: if the compiler does not * support the primitives required for typesafe_cb_cast(), it becomes an * unconditional cast, and the @oktype argument is not used. In * particular, this means that @oktype can be a type which uses the * "typeof": it will not be evaluated if typeof is not supported. * * Example: * // We can take either an unsigned long or a void *. * void _set_some_value(void *val); * #define set_some_value(e) \ * _set_some_value(typesafe_cb_cast(void *, (e), unsigned long)) */ #define typesafe_cb_cast(desttype, oktype, expr) \ __builtin_choose_expr( \ __builtin_types_compatible_p(__typeof__(0?(expr):(expr)), \ oktype), \ (desttype)(expr), (expr)) #else #define typesafe_cb_cast(desttype, oktype, expr) ((desttype)(expr)) #endif /** * typesafe_cb_cast3 - only cast an expression if it matches given types * @desttype: the type to cast to * @ok1: the first type we allow * @ok2: the second type we allow * @ok3: the third type we allow * @expr: the expression to cast * * This is a convenient wrapper for multiple typesafe_cb_cast() calls. * You can chain them inside each other (ie. use typesafe_cb_cast() * for expr) if you need more than 3 arguments. * * Example: * // We can take either a long, unsigned long, void * or a const void *. * void _set_some_value(void *val); * #define set_some_value(expr) \ * _set_some_value(typesafe_cb_cast3(void *,, \ * long, unsigned long, const void *,\ * (expr))) */ #define typesafe_cb_cast3(desttype, ok1, ok2, ok3, expr) \ typesafe_cb_cast(desttype, ok1, \ typesafe_cb_cast(desttype, ok2, \ typesafe_cb_cast(desttype, ok3, \ (expr)))) /** * typesafe_cb - cast a callback function if it matches the arg * @rtype: the return type of the callback function * @atype: the (pointer) type which the callback function expects. * @fn: the callback function to cast * @arg: the (pointer) argument to hand to the callback function. * * If a callback function takes a single argument, this macro does * appropriate casts to a function which takes a single atype argument if the * callback provided matches the @arg. * * It is assumed that @arg is of pointer type: usually @arg is passed * or assigned to a void * elsewhere anyway. * * Example: * void _register_callback(void (*fn)(void *arg), void *arg); * #define register_callback(fn, arg) \ * _register_callback(typesafe_cb(void, (fn), void*, (arg)), (arg)) */ #define typesafe_cb(rtype, atype, fn, arg) \ typesafe_cb_cast(rtype (*)(atype), \ rtype (*)(__typeof__(arg)), \ (fn)) /** * typesafe_cb_preargs - cast a callback function if it matches the arg * @rtype: the return type of the callback function * @atype: the (pointer) type which the callback function expects. * @fn: the callback function to cast * @arg: the (pointer) argument to hand to the callback function. * * This is a version of typesafe_cb() for callbacks that take other arguments * before the @arg. * * Example: * void _register_callback(void (*fn)(int, void *arg), void *arg); * #define register_callback(fn, arg) \ * _register_callback(typesafe_cb_preargs(void, void *, \ * (fn), (arg), int), \ * (arg)) */ #define typesafe_cb_preargs(rtype, atype, fn, arg, ...) \ typesafe_cb_cast(rtype (*)(__VA_ARGS__, atype), \ rtype (*)(__VA_ARGS__, __typeof__(arg)), \ (fn)) /** * typesafe_cb_postargs - cast a callback function if it matches the arg * @rtype: the return type of the callback function * @atype: the (pointer) type which the callback function expects. * @fn: the callback function to cast * @arg: the (pointer) argument to hand to the callback function. * * This is a version of typesafe_cb() for callbacks that take other arguments * after the @arg. * * Example: * void _register_callback(void (*fn)(void *arg, int), void *arg); * #define register_callback(fn, arg) \ * _register_callback(typesafe_cb_postargs(void, (fn), void *, \ * (arg), int), \ * (arg)) */ #define typesafe_cb_postargs(rtype, atype, fn, arg, ...) \ typesafe_cb_cast(rtype (*)(atype, __VA_ARGS__), \ rtype (*)(__typeof__(arg), __VA_ARGS__), \ (fn)) #endif /* CCAN_CAST_IF_TYPE_H */ hkl-5.0.0.2449/hkl/ccan/list/0000755000175000017500000000000013237020537015552 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl/ccan/list/list.c0000644000175000017500000000175013210507774016700 0ustar00piccapicca00000000000000/* Licensed under BSD-MIT - see LICENSE file for details */ #include #include #include "list.h" static void *corrupt(const char *abortstr, const struct list_node *head, const struct list_node *node, unsigned int count) { if (abortstr) { fprintf(stderr, "%s: prev corrupt in node %p (%u) of %p\n", abortstr, node, count, head); abort(); } return NULL; } struct list_node *list_check_node(const struct list_node *node, const char *abortstr) { const struct list_node *p, *n; int count = 0; for (p = node, n = node->next; n != node; p = n, n = n->next) { count++; if (n->prev != p) return corrupt(abortstr, node, n, count); } /* Check prev on head node. */ if (node->prev != p) return corrupt(abortstr, node, node, 0); return (struct list_node *)node; } struct list_head *list_check(const struct list_head *h, const char *abortstr) { if (!list_check_node(&h->n, abortstr)) return NULL; return (struct list_head *)h; } hkl-5.0.0.2449/hkl/ccan/list/list.h0000644000175000017500000005737313211074266016715 0ustar00piccapicca00000000000000/* Licensed under BSD-MIT - see LICENSE file for details */ #ifndef CCAN_LIST_H #define CCAN_LIST_H //#define CCAN_LIST_DEBUG 1 #include #include #include #include #include /** * struct list_node - an entry in a doubly-linked list * @next: next entry (self if empty) * @prev: previous entry (self if empty) * * This is used as an entry in a linked list. * Example: * struct child { * const char *name; * // Linked list of all us children. * struct list_node list; * }; */ struct list_node { struct list_node *next, *prev; }; /** * struct list_head - the head of a doubly-linked list * @h: the list_head (containing next and prev pointers) * * This is used as the head of a linked list. * Example: * struct parent { * const char *name; * struct list_head children; * unsigned int num_children; * }; */ struct list_head { struct list_node n; }; /** * list_check - check head of a list for consistency * @h: the list_head * @abortstr: the location to print on aborting, or NULL. * * Because list_nodes have redundant information, consistency checking between * the back and forward links can be done. This is useful as a debugging check. * If @abortstr is non-NULL, that will be printed in a diagnostic if the list * is inconsistent, and the function will abort. * * Returns the list head if the list is consistent, NULL if not (it * can never return NULL if @abortstr is set). * * See also: list_check_node() * * Example: * static void dump_parent(struct parent *p) * { * struct child *c; * * printf("%s (%u children):\n", p->name, p->num_children); * list_check(&p->children, "bad child list"); * list_for_each(&p->children, c, list) * printf(" -> %s\n", c->name); * } */ struct list_head *list_check(const struct list_head *h, const char *abortstr); /** * list_check_node - check node of a list for consistency * @n: the list_node * @abortstr: the location to print on aborting, or NULL. * * Check consistency of the list node is in (it must be in one). * * See also: list_check() * * Example: * static void dump_child(const struct child *c) * { * list_check_node(&c->list, "bad child list"); * printf("%s\n", c->name); * } */ struct list_node *list_check_node(const struct list_node *n, const char *abortstr); #define LIST_LOC __FILE__ ":" stringify(__LINE__) #ifdef CCAN_LIST_DEBUG #define list_debug(h, loc) list_check((h), loc) #define list_debug_node(n, loc) list_check_node((n), loc) #else #define list_debug(h, loc) ((void)loc, h) #define list_debug_node(n, loc) ((void)loc, n) #endif /** * LIST_HEAD_INIT - initializer for an empty list_head * @name: the name of the list. * * Explicit initializer for an empty list. * * See also: * LIST_HEAD, list_head_init() * * Example: * static struct list_head my_list = LIST_HEAD_INIT(my_list); */ #define LIST_HEAD_INIT(name) { { &(name).n, &(name).n } } /** * LIST_HEAD - define and initialize an empty list_head * @name: the name of the list. * * The LIST_HEAD macro defines a list_head and initializes it to an empty * list. It can be prepended by "static" to define a static list_head. * * See also: * LIST_HEAD_INIT, list_head_init() * * Example: * static LIST_HEAD(my_global_list); */ #define LIST_HEAD(name) \ struct list_head name = LIST_HEAD_INIT(name) /** * list_head_init - initialize a list_head * @h: the list_head to set to the empty list * * Example: * ... * struct parent *parent = malloc(sizeof(*parent)); * * list_head_init(&parent->children); * parent->num_children = 0; */ static inline void list_head_init(struct list_head *h) { h->n.next = h->n.prev = &h->n; } /** * list_node_init - initialize a list_node * @n: the list_node to link to itself. * * You don't need to use this normally! But it lets you list_del(@n) * safely. */ static inline void list_node_init(struct list_node *n) { n->next = n->prev = n; } /** * list_add_after - add an entry after an existing node in a linked list * @h: the list_head to add the node to (for debugging) * @p: the existing list_node to add the node after * @n: the new list_node to add to the list. * * The existing list_node must already be a member of the list. * The new list_node does not need to be initialized; it will be overwritten. * * Example: * struct child c1, c2, c3; * LIST_HEAD(h); * * list_add_tail(&h, &c1.list); * list_add_tail(&h, &c3.list); * list_add_after(&h, &c1.list, &c2.list); */ #define list_add_after(h, p, n) list_add_after_(h, p, n, LIST_LOC) static inline void list_add_after_(struct list_head *h, struct list_node *p, struct list_node *n, const char *abortstr) { n->next = p->next; n->prev = p; p->next->prev = n; p->next = n; (void)list_debug(h, abortstr); } /** * list_add - add an entry at the start of a linked list. * @h: the list_head to add the node to * @n: the list_node to add to the list. * * The list_node does not need to be initialized; it will be overwritten. * Example: * struct child *child = malloc(sizeof(*child)); * * child->name = "marvin"; * list_add(&parent->children, &child->list); * parent->num_children++; */ #define list_add(h, n) list_add_(h, n, LIST_LOC) static inline void list_add_(struct list_head *h, struct list_node *n, const char *abortstr) { list_add_after_(h, &h->n, n, abortstr); } /** * list_add_before - add an entry before an existing node in a linked list * @h: the list_head to add the node to (for debugging) * @p: the existing list_node to add the node before * @n: the new list_node to add to the list. * * The existing list_node must already be a member of the list. * The new list_node does not need to be initialized; it will be overwritten. * * Example: * list_head_init(&h); * list_add_tail(&h, &c1.list); * list_add_tail(&h, &c3.list); * list_add_before(&h, &c3.list, &c2.list); */ #define list_add_before(h, p, n) list_add_before_(h, p, n, LIST_LOC) static inline void list_add_before_(struct list_head *h, struct list_node *p, struct list_node *n, const char *abortstr) { n->next = p; n->prev = p->prev; p->prev->next = n; p->prev = n; (void)list_debug(h, abortstr); } /** * list_add_tail - add an entry at the end of a linked list. * @h: the list_head to add the node to * @n: the list_node to add to the list. * * The list_node does not need to be initialized; it will be overwritten. * Example: * list_add_tail(&parent->children, &child->list); * parent->num_children++; */ #define list_add_tail(h, n) list_add_tail_(h, n, LIST_LOC) static inline void list_add_tail_(struct list_head *h, struct list_node *n, const char *abortstr) { list_add_before_(h, &h->n, n, abortstr); } /** * list_empty - is a list empty? * @h: the list_head * * If the list is empty, returns true. * * Example: * assert(list_empty(&parent->children) == (parent->num_children == 0)); */ #define list_empty(h) list_empty_(h, LIST_LOC) static inline bool list_empty_(const struct list_head *h, const char* abortstr) { (void)list_debug(h, abortstr); return h->n.next == &h->n; } /** * list_empty_nodebug - is a list empty (and don't perform debug checks)? * @h: the list_head * * If the list is empty, returns true. * This differs from list_empty() in that if CCAN_LIST_DEBUG is set it * will NOT perform debug checks. Only use this function if you REALLY * know what you're doing. * * Example: * assert(list_empty_nodebug(&parent->children) == (parent->num_children == 0)); */ #ifndef CCAN_LIST_DEBUG #define list_empty_nodebug(h) list_empty(h) #else static inline bool list_empty_nodebug(const struct list_head *h) { return h->n.next == &h->n; } #endif /** * list_empty_nocheck - is a list empty? * @h: the list_head * * If the list is empty, returns true. This doesn't perform any * debug check for list consistency, so it can be called without * locks, racing with the list being modified. This is ok for * checks where an incorrect result is not an issue (optimized * bail out path for example). */ static inline bool list_empty_nocheck(const struct list_head *h) { return h->n.next == &h->n; } /** * list_del - delete an entry from an (unknown) linked list. * @n: the list_node to delete from the list. * * Note that this leaves @n in an undefined state; it can be added to * another list, but not deleted again. * * See also: * list_del_from(), list_del_init() * * Example: * list_del(&child->list); * parent->num_children--; */ #define list_del(n) list_del_(n, LIST_LOC) static inline void list_del_(struct list_node *n, const char* abortstr) { (void)list_debug_node(n, abortstr); n->next->prev = n->prev; n->prev->next = n->next; #ifdef CCAN_LIST_DEBUG /* Catch use-after-del. */ n->next = n->prev = NULL; #endif } /** * list_del_init - delete a node, and reset it so it can be deleted again. * @n: the list_node to be deleted. * * list_del(@n) or list_del_init() again after this will be safe, * which can be useful in some cases. * * See also: * list_del_from(), list_del() * * Example: * list_del_init(&child->list); * parent->num_children--; */ #define list_del_init(n) list_del_init_(n, LIST_LOC) static inline void list_del_init_(struct list_node *n, const char *abortstr) { list_del_(n, abortstr); list_node_init(n); } /** * list_del_from - delete an entry from a known linked list. * @h: the list_head the node is in. * @n: the list_node to delete from the list. * * This explicitly indicates which list a node is expected to be in, * which is better documentation and can catch more bugs. * * See also: list_del() * * Example: * list_del_from(&parent->children, &child->list); * parent->num_children--; */ static inline void list_del_from(struct list_head *h, struct list_node *n) { #ifdef CCAN_LIST_DEBUG { /* Thorough check: make sure it was in list! */ struct list_node *i; for (i = h->n.next; i != n; i = i->next) assert(i != &h->n); } #endif /* CCAN_LIST_DEBUG */ /* Quick test that catches a surprising number of bugs. */ assert(!list_empty(h)); list_del(n); } /** * list_swap - swap out an entry from an (unknown) linked list for a new one. * @o: the list_node to replace from the list. * @n: the list_node to insert in place of the old one. * * Note that this leaves @o in an undefined state; it can be added to * another list, but not deleted/swapped again. * * See also: * list_del() * * Example: * struct child x1, x2; * LIST_HEAD(xh); * * list_add(&xh, &x1.list); * list_swap(&x1.list, &x2.list); */ #define list_swap(o, n) list_swap_(o, n, LIST_LOC) static inline void list_swap_(struct list_node *o, struct list_node *n, const char* abortstr) { (void)list_debug_node(o, abortstr); *n = *o; n->next->prev = n; n->prev->next = n; #ifdef CCAN_LIST_DEBUG /* Catch use-after-del. */ o->next = o->prev = NULL; #endif } /** * list_entry - convert a list_node back into the structure containing it. * @n: the list_node * @type: the type of the entry * @member: the list_node member of the type * * Example: * // First list entry is children.next; convert back to child. * child = list_entry(parent->children.n.next, struct child, list); * * See Also: * list_top(), list_for_each() */ #define list_entry(n, type, member) container_of(n, type, member) /** * list_top - get the first entry in a list * @h: the list_head * @type: the type of the entry * @member: the list_node member of the type * * If the list is empty, returns NULL. * * Example: * struct child *first; * first = list_top(&parent->children, struct child, list); * if (!first) * printf("Empty list!\n"); */ #define list_top(h, type, member) \ ((type *)list_top_((h), list_off_(type, member))) static inline const void *list_top_(const struct list_head *h, size_t off) { if (list_empty(h)) return NULL; return (const char *)h->n.next - off; } /** * list_pop - remove the first entry in a list * @h: the list_head * @type: the type of the entry * @member: the list_node member of the type * * If the list is empty, returns NULL. * * Example: * struct child *one; * one = list_pop(&parent->children, struct child, list); * if (!one) * printf("Empty list!\n"); */ #define list_pop(h, type, member) \ ((type *)list_pop_((h), list_off_(type, member))) static inline const void *list_pop_(const struct list_head *h, size_t off) { struct list_node *n; if (list_empty(h)) return NULL; n = h->n.next; list_del(n); return (const char *)n - off; } /** * list_tail - get the last entry in a list * @h: the list_head * @type: the type of the entry * @member: the list_node member of the type * * If the list is empty, returns NULL. * * Example: * struct child *last; * last = list_tail(&parent->children, struct child, list); * if (!last) * printf("Empty list!\n"); */ #define list_tail(h, type, member) \ ((type *)list_tail_((h), list_off_(type, member))) static inline const void *list_tail_(const struct list_head *h, size_t off) { if (list_empty(h)) return NULL; return (const char *)h->n.prev - off; } /** * list_for_each - iterate through a list. * @h: the list_head (warning: evaluated multiple times!) * @i: the structure containing the list_node * @member: the list_node member of the structure * * This is a convenient wrapper to iterate @i over the entire list. It's * a for loop, so you can break and continue as normal. * * Example: * list_for_each(&parent->children, child, list) * printf("Name: %s\n", child->name); */ #define list_for_each(h, i, member) \ list_for_each_off(h, i, list_off_var_(i, member)) /** * list_for_each_rev - iterate through a list backwards. * @h: the list_head * @i: the structure containing the list_node * @member: the list_node member of the structure * * This is a convenient wrapper to iterate @i over the entire list. It's * a for loop, so you can break and continue as normal. * * Example: * list_for_each_rev(&parent->children, child, list) * printf("Name: %s\n", child->name); */ #define list_for_each_rev(h, i, member) \ list_for_each_rev_off(h, i, list_off_var_(i, member)) /** * list_for_each_rev_safe - iterate through a list backwards, * maybe during deletion * @h: the list_head * @i: the structure containing the list_node * @nxt: the structure containing the list_node * @member: the list_node member of the structure * * This is a convenient wrapper to iterate @i over the entire list backwards. * It's a for loop, so you can break and continue as normal. The extra * variable * @nxt is used to hold the next element, so you can delete @i * from the list. * * Example: * struct child *next; * list_for_each_rev_safe(&parent->children, child, next, list) { * printf("Name: %s\n", child->name); * } */ #define list_for_each_rev_safe(h, i, nxt, member) \ list_for_each_rev_safe_off(h, i, nxt, list_off_var_(i, member)) /** * list_for_each_safe - iterate through a list, maybe during deletion * @h: the list_head * @i: the structure containing the list_node * @nxt: the structure containing the list_node * @member: the list_node member of the structure * * This is a convenient wrapper to iterate @i over the entire list. It's * a for loop, so you can break and continue as normal. The extra variable * @nxt is used to hold the next element, so you can delete @i from the list. * * Example: * list_for_each_safe(&parent->children, child, next, list) { * list_del(&child->list); * parent->num_children--; * } */ #define list_for_each_safe(h, i, nxt, member) \ list_for_each_safe_off(h, i, nxt, list_off_var_(i, member)) /** * list_next - get the next entry in a list * @h: the list_head * @i: a pointer to an entry in the list. * @member: the list_node member of the structure * * If @i was the last entry in the list, returns NULL. * * Example: * struct child *second; * second = list_next(&parent->children, first, list); * if (!second) * printf("No second child!\n"); */ #define list_next(h, i, member) \ ((list_typeof(i))list_entry_or_null(list_debug(h, \ __FILE__ ":" stringify(__LINE__)), \ (i)->member.next, \ list_off_var_((i), member))) /** * list_prev - get the previous entry in a list * @h: the list_head * @i: a pointer to an entry in the list. * @member: the list_node member of the structure * * If @i was the first entry in the list, returns NULL. * * Example: * first = list_prev(&parent->children, second, list); * if (!first) * printf("Can't go back to first child?!\n"); */ #define list_prev(h, i, member) \ ((list_typeof(i))list_entry_or_null(list_debug(h, \ __FILE__ ":" stringify(__LINE__)), \ (i)->member.prev, \ list_off_var_((i), member))) /** * list_append_list - empty one list onto the end of another. * @to: the list to append into * @from: the list to empty. * * This takes the entire contents of @from and moves it to the end of * @to. After this @from will be empty. * * Example: * struct list_head adopter; * * list_append_list(&adopter, &parent->children); * assert(list_empty(&parent->children)); * parent->num_children = 0; */ #define list_append_list(t, f) list_append_list_(t, f, \ __FILE__ ":" stringify(__LINE__)) static inline void list_append_list_(struct list_head *to, struct list_head *from, const char *abortstr) { struct list_node *from_tail = list_debug(from, abortstr)->n.prev; struct list_node *to_tail = list_debug(to, abortstr)->n.prev; /* Sew in head and entire list. */ to->n.prev = from_tail; from_tail->next = &to->n; to_tail->next = &from->n; from->n.prev = to_tail; /* Now remove head. */ list_del(&from->n); list_head_init(from); } /** * list_prepend_list - empty one list into the start of another. * @to: the list to prepend into * @from: the list to empty. * * This takes the entire contents of @from and moves it to the start * of @to. After this @from will be empty. * * Example: * list_prepend_list(&adopter, &parent->children); * assert(list_empty(&parent->children)); * parent->num_children = 0; */ #define list_prepend_list(t, f) list_prepend_list_(t, f, LIST_LOC) static inline void list_prepend_list_(struct list_head *to, struct list_head *from, const char *abortstr) { struct list_node *from_tail = list_debug(from, abortstr)->n.prev; struct list_node *to_head = list_debug(to, abortstr)->n.next; /* Sew in head and entire list. */ to->n.next = &from->n; from->n.prev = &to->n; to_head->prev = from_tail; from_tail->next = to_head; /* Now remove head. */ list_del(&from->n); list_head_init(from); } /* internal macros, do not use directly */ #define list_for_each_off_dir_(h, i, off, dir) \ for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, \ (off)); \ list_node_from_off_((void *)i, (off)) != &(h)->n; \ i = list_node_to_off_(list_node_from_off_((void *)i, (off))->dir, \ (off))) #define list_for_each_safe_off_dir_(h, i, nxt, off, dir) \ for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, \ (off)), \ nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, \ (off)); \ list_node_from_off_(i, (off)) != &(h)->n; \ i = nxt, \ nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, \ (off))) /** * list_for_each_off - iterate through a list of memory regions. * @h: the list_head * @i: the pointer to a memory region wich contains list node data. * @off: offset(relative to @i) at which list node data resides. * * This is a low-level wrapper to iterate @i over the entire list, used to * implement all oher, more high-level, for-each constructs. It's a for loop, * so you can break and continue as normal. * * WARNING! Being the low-level macro that it is, this wrapper doesn't know * nor care about the type of @i. The only assumption made is that @i points * to a chunk of memory that at some @offset, relative to @i, contains a * properly filled `struct list_node' which in turn contains pointers to * memory chunks and it's turtles all the way down. With all that in mind * remember that given the wrong pointer/offset couple this macro will * happily churn all you memory until SEGFAULT stops it, in other words * caveat emptor. * * It is worth mentioning that one of legitimate use-cases for that wrapper * is operation on opaque types with known offset for `struct list_node' * member(preferably 0), because it allows you not to disclose the type of * @i. * * Example: * list_for_each_off(&parent->children, child, * offsetof(struct child, list)) * printf("Name: %s\n", child->name); */ #define list_for_each_off(h, i, off) \ list_for_each_off_dir_((h),(i),(off),next) /** * list_for_each_rev_off - iterate through a list of memory regions backwards * @h: the list_head * @i: the pointer to a memory region wich contains list node data. * @off: offset(relative to @i) at which list node data resides. * * See list_for_each_off for details */ #define list_for_each_rev_off(h, i, off) \ list_for_each_off_dir_((h),(i),(off),prev) /** * list_for_each_safe_off - iterate through a list of memory regions, maybe * during deletion * @h: the list_head * @i: the pointer to a memory region wich contains list node data. * @nxt: the structure containing the list_node * @off: offset(relative to @i) at which list node data resides. * * For details see `list_for_each_off' and `list_for_each_safe' * descriptions. * * Example: * list_for_each_safe_off(&parent->children, child, * next, offsetof(struct child, list)) * printf("Name: %s\n", child->name); */ #define list_for_each_safe_off(h, i, nxt, off) \ list_for_each_safe_off_dir_((h),(i),(nxt),(off),next) /** * list_for_each_rev_safe_off - iterate backwards through a list of * memory regions, maybe during deletion * @h: the list_head * @i: the pointer to a memory region wich contains list node data. * @nxt: the structure containing the list_node * @off: offset(relative to @i) at which list node data resides. * * For details see `list_for_each_rev_off' and `list_for_each_rev_safe' * descriptions. * * Example: * list_for_each_rev_safe_off(&parent->children, child, * next, offsetof(struct child, list)) * printf("Name: %s\n", child->name); */ #define list_for_each_rev_safe_off(h, i, nxt, off) \ list_for_each_safe_off_dir_((h),(i),(nxt),(off),prev) /* Other -off variants. */ #define list_entry_off(n, type, off) \ ((type *)list_node_from_off_((n), (off))) #define list_head_off(h, type, off) \ ((type *)list_head_off((h), (off))) #define list_tail_off(h, type, off) \ ((type *)list_tail_((h), (off))) #define list_add_off(h, n, off) \ list_add((h), list_node_from_off_((n), (off))) #define list_del_off(n, off) \ list_del(list_node_from_off_((n), (off))) #define list_del_from_off(h, n, off) \ list_del_from(h, list_node_from_off_((n), (off))) /* Offset helper functions so we only single-evaluate. */ static inline void *list_node_to_off_(struct list_node *node, size_t off) { return (void *)((char *)node - off); } static inline struct list_node *list_node_from_off_(void *ptr, size_t off) { return (struct list_node *)((char *)ptr + off); } /* Get the offset of the member, but make sure it's a list_node. */ #define list_off_(type, member) \ (container_off(type, member) + \ check_type(((type *)0)->member, struct list_node)) #define list_off_var_(var, member) \ (container_off_var(var, member) + \ check_type(var->member, struct list_node)) #if HAVE_TYPEOF #define list_typeof(var) typeof(var) #else #define list_typeof(var) void * #endif /* Returns member, or NULL if at end of list. */ static inline void *list_entry_or_null(const struct list_head *h, const struct list_node *n, size_t off) { if (n == &h->n) return NULL; return (char *)n - off; } #endif /* CCAN_LIST_H */ hkl-5.0.0.2449/hkl/ccan/alignof/0000755000175000017500000000000013237020537016216 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl/ccan/alignof/alignof.h0000644000175000017500000000077713211074265020020 0ustar00piccapicca00000000000000/* CC0 (Public domain) - see LICENSE file for details */ #ifndef CCAN_ALIGNOF_H #define CCAN_ALIGNOF_H #include /** * ALIGNOF - get the alignment of a type * @t: the type to test * * This returns a safe alignment for the given type. */ #if HAVE_ALIGNOF /* A GCC extension. */ #define ALIGNOF(t) __alignof__(t) #else /* Alignment by measuring structure padding. */ #define ALIGNOF(t) ((char *)(&((struct { char c; t _h; } *)0)->_h) - (char *)0) #endif #endif /* CCAN_ALIGNOF_H */ hkl-5.0.0.2449/hkl/ccan/ptr_valid/0000755000175000017500000000000013237020537016563 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl/ccan/ptr_valid/ptr_valid.c0000644000175000017500000001533213211074266020717 0ustar00piccapicca00000000000000// Licensed under BSD-MIT: See LICENSE. #include "ptr_valid.h" #include #include #include #include #include #include #include #include #include #if HAVE_PROC_SELF_MAPS static char *grab(const char *filename) { int ret, fd; size_t max = 16384, s = 0; char *buffer; fd = open(filename, O_RDONLY); if (fd < 0) return NULL; buffer = malloc(max+1); if (!buffer) goto close; while ((ret = read(fd, buffer + s, max - s)) > 0) { s += ret; if (s == max) { buffer = realloc(buffer, max*2+1); if (!buffer) goto close; max *= 2; } } if (ret < 0) goto free; close(fd); buffer[s] = '\0'; return buffer; free: free(buffer); close: close_noerr(fd); return NULL; } static char *skip_line(char *p) { char *nl = strchr(p, '\n'); if (!nl) return NULL; return nl + 1; } static struct ptr_valid_map *add_map(struct ptr_valid_map *map, unsigned int *num, unsigned int *max, unsigned long start, unsigned long end, bool is_write) { if (*num == *max) { *max *= 2; map = realloc(map, sizeof(*map) * *max); if (!map) return NULL; } map[*num].start = (void *)start; map[*num].end = (void *)end; map[*num].is_write = is_write; (*num)++; return map; } static struct ptr_valid_map *get_proc_maps(unsigned int *num) { char *buf, *p; struct ptr_valid_map *map; unsigned int max = 16; buf = grab("/proc/self/maps"); if (!buf) { *num = 0; return NULL; } map = malloc(sizeof(*map) * max); if (!map) goto free_buf; *num = 0; for (p = buf; p && *p; p = skip_line(p)) { unsigned long start, end; char *endp; /* Expect '- rw... */ start = strtoul(p, &endp, 16); if (*endp != '-') goto malformed; end = strtoul(endp+1, &endp, 16); if (*endp != ' ') goto malformed; endp++; if (endp[0] != 'r' && endp[0] != '-') goto malformed; if (endp[1] != 'w' && endp[1] != '-') goto malformed; /* We only add readable mappings. */ if (endp[0] == 'r') { map = add_map(map, num, &max, start, end, endp[1] == 'w'); if (!map) goto free_buf; } } free(buf); return map; malformed: free(map); free_buf: free(buf); *num = 0; return NULL; } #else static struct ptr_valid_map *get_proc_maps(unsigned int *num) { *num = 0; return NULL; } #endif static bool check_with_maps(struct ptr_valid_batch *batch, const char *p, size_t size, bool is_write) { unsigned int i; for (i = 0; i < batch->num_maps; i++) { if (p >= batch->maps[i].start && p < batch->maps[i].end) { /* Overlap into other maps? Recurse with remainder. */ if (p + size > batch->maps[i].end) { size_t len = p + size - batch->maps[i].end; if (!check_with_maps(batch, batch->maps[i].end, len, is_write)) return false; } return !is_write || batch->maps[i].is_write; } } return false; } static void finish_child(struct ptr_valid_batch *batch) { close(batch->to_child); close(batch->from_child); waitpid(batch->child_pid, NULL, 0); batch->child_pid = 0; } static bool child_alive(struct ptr_valid_batch *batch) { return batch->child_pid != 0; } static void run_child(int infd, int outfd) { volatile char *p; /* This is how we expect to exit. */ while (read(infd, &p, sizeof(p)) == sizeof(p)) { size_t i, size; bool is_write; char ret = 0; /* This is weird. */ if (read(infd, &size, sizeof(size)) != sizeof(size)) exit(1); if (read(infd, &is_write, sizeof(is_write)) != sizeof(is_write)) exit(2); for (i = 0; i < size; i++) { ret = p[i]; if (is_write) p[i] = ret; } /* If we're still here, the answer is "yes". */ if (write(outfd, &ret, 1) != 1) exit(3); } exit(0); } static bool create_child(struct ptr_valid_batch *batch) { int outpipe[2], inpipe[2]; if (pipe(outpipe) != 0) return false; if (pipe(inpipe) != 0) goto close_outpipe; fflush(stdout); batch->child_pid = fork(); if (batch->child_pid == 0) { close(outpipe[1]); close(inpipe[0]); run_child(outpipe[0], inpipe[1]); } if (batch->child_pid == -1) goto cleanup_pid; close(outpipe[0]); close(inpipe[1]); batch->to_child = outpipe[1]; batch->from_child = inpipe[0]; return true; cleanup_pid: batch->child_pid = 0; close_noerr(inpipe[0]); close_noerr(inpipe[1]); close_outpipe: close_noerr(outpipe[0]); close_noerr(outpipe[1]); return false; } static bool check_with_child(struct ptr_valid_batch *batch, const void *p, size_t size, bool is_write) { char ret; if (!child_alive(batch)) { if (!create_child(batch)) return false; } if (write(batch->to_child, &p, sizeof(p)) + write(batch->to_child, &size, sizeof(size)) + write(batch->to_child, &is_write, sizeof(is_write)) != sizeof(p) + sizeof(size) + sizeof(is_write)) { finish_child(batch); errno = EFAULT; return false; } if (read(batch->from_child, &ret, sizeof(ret)) != sizeof(ret)) { finish_child(batch); errno = EFAULT; return false; } return true; } /* msync seems most well-defined test, but page could be mapped with * no permissions, and can't distiguish readonly from writable. */ bool ptr_valid_batch(struct ptr_valid_batch *batch, const void *p, size_t alignment, size_t size, bool write) { char *start, *end; bool ret; if ((intptr_t)p & (alignment - 1)) return false; start = (void *)((intptr_t)p & ~(getpagesize() - 1)); end = (void *)(((intptr_t)p + size - 1) & ~(getpagesize() - 1)); /* We cache single page hits. */ if (start == end) { if (batch->last && batch->last == start) return batch->last_ok; } if (batch->num_maps) ret = check_with_maps(batch, p, size, write); else ret = check_with_child(batch, p, size, write); if (start == end) { batch->last = start; batch->last_ok = ret; } return ret; } bool ptr_valid_batch_string(struct ptr_valid_batch *batch, const char *p) { while (ptr_valid_batch(batch, p, 1, 1, false)) { if (*p == '\0') return true; p++; } return false; } bool ptr_valid(const void *p, size_t alignment, size_t size, bool write) { bool ret; struct ptr_valid_batch batch; if (!ptr_valid_batch_start(&batch)) return false; ret = ptr_valid_batch(&batch, p, alignment, size, write); ptr_valid_batch_end(&batch); return ret; } bool ptr_valid_string(const char *p) { bool ret; struct ptr_valid_batch batch; if (!ptr_valid_batch_start(&batch)) return false; ret = ptr_valid_batch_string(&batch, p); ptr_valid_batch_end(&batch); return ret; } bool ptr_valid_batch_start(struct ptr_valid_batch *batch) { batch->child_pid = 0; batch->maps = get_proc_maps(&batch->num_maps); batch->last = NULL; return true; } void ptr_valid_batch_end(struct ptr_valid_batch *batch) { if (child_alive(batch)) finish_child(batch); free(batch->maps); } hkl-5.0.0.2449/hkl/ccan/ptr_valid/ptr_valid.h0000644000175000017500000001350013210507774020723 0ustar00piccapicca00000000000000// Licensed under BSD-MIT: See LICENSE. #ifndef CCAN_PTR_VALID_H #define CCAN_PTR_VALID_H #include #include #include /** * ptr_valid_read - can I safely read from a pointer? * @p: the proposed pointer. * * This function verifies that the pointer @p is safe to dereference for * reading. It is very slow, particularly if the answer is "no". * * Sets errno to EFAULT on failure. * * See Also: * ptr_valid_batch_read() */ #define ptr_valid_read(p) \ ptr_valid_r((p), PTR_VALID_ALIGNOF(*(p)), sizeof(*(p))) /** * ptr_valid_write - can I safely write to a pointer? * @p: the proposed pointer. * * This function verifies that the pointer @p is safe to dereference * for writing (and reading). It is very slow, particularly if the * answer is "no". * * Sets errno to EFAULT on failure. * * See Also: * ptr_valid_batch_write() */ #define ptr_valid_write(p) \ ptr_valid_w((p), PTR_VALID_ALIGNOF(*(p)), sizeof(*(p))) /** * ptr_valid_string - can I safely read a string? * @p: the proposed string. * * This function verifies that the pointer @p is safe to dereference * up to a nul character. It is very slow, particularly if the answer * is "no". * * Sets errno to EFAULT on failure. * * See Also: * ptr_valid_batch_string() */ bool ptr_valid_string(const char *p); /** * ptr_valid - generic pointer check function * @p: the proposed pointer. * @align: the alignment requirements of the pointer. * @size: the size of the region @p should point to * @write: true if @p should be writable as well as readable. * * This function verifies that the pointer @p is safe to dereference. * It is very slow, particularly if the answer is "no". * * Sets errno to EFAULT on failure. * * See Also: * ptr_valid_batch() */ bool ptr_valid(const void *p, size_t align, size_t size, bool write); /** * struct ptr_valid_batch - pointer to store state for batch ptr ops * * Treat as private. */ struct ptr_valid_batch { unsigned int num_maps; struct ptr_valid_map *maps; int child_pid; int to_child, from_child; void *last; bool last_ok; }; /** * ptr_valid_batch_start - prepare for a batch of ptr_valid checks. * @batch: an uninitialized ptr_valid_batch structure. * * This initializes @batch; this same @batch pointer can be reused * until the memory map changes (eg. via mmap(), munmap() or even * malloc() and free()). * * This is useful to check many pointers, because otherwise it can be * extremely slow. * * Example: * struct linked { * struct linked *next; * const char *str; * }; * * static bool check_linked_carefully(struct linked *head) * { * struct ptr_valid_batch batch; * struct linked *old = head; * bool half = true; * * // If this fails, we can't check. Assume OK. * if (!ptr_valid_batch_start(&batch)) * return true; * * while (head) { * if (!ptr_valid_batch_read(&batch, head)) * goto fail; * if (!ptr_valid_batch_string(&batch, head->str)) * goto fail; * // Loop detection; move old at half speed of head. * if (half) * old = old->next; * half = !half; * if (head == old) { * errno = ELOOP; * goto fail; * } * } * ptr_valid_batch_end(&batch); * return true; * * fail: * ptr_valid_batch_end(&batch); * return false; * } * * See Also: * ptr_valid_batch_stop() */ bool ptr_valid_batch_start(struct ptr_valid_batch *batch); /** * ptr_valid_batch_read - can I safely read from a pointer? * @batch: the batch initialized by ptr_valid_batch_start(). * @p: the proposed pointer. * * Batched version of ptr_valid_read(). */ #define ptr_valid_batch_read(batch, p) \ ptr_valid_batch_r((batch), \ (p), PTR_VALID_ALIGNOF(*(p)), sizeof(*(p))) /** * ptr_valid_batch_write - can I safely write to a pointer? * @batch: the batch initialized by ptr_valid_batch_start(). * @p: the proposed pointer. * * Batched version of ptr_valid_write(). */ #define ptr_valid_batch_write(batch, p) \ ptr_valid_batch_w((batch), \ (p), PTR_VALID_ALIGNOF(*(p)), sizeof(*(p))) /** * ptr_valid_batch_string - can I safely read a string? * @batch: the batch initialized by ptr_valid_batch_start(). * @p: the proposed string. * * Batched version of ptr_valid_string(). */ bool ptr_valid_batch_string(struct ptr_valid_batch *batch, const char *p); /** * ptr_valid_batch - generic batched pointer check function * @batch: the batch initialized by ptr_valid_batch_start(). * @p: the proposed pointer. * @align: the alignment requirements of the pointer. * @size: the size of the region @p should point to * @write: true if @p should be writable as well as readable. * * Batched version of ptr_valid(). */ bool ptr_valid_batch(struct ptr_valid_batch *batch, const void *p, size_t alignment, size_t size, bool write); /** * ptr_valid_batch_end - end a batch of ptr_valid checks. * @batch: a ptr_valid_batch structure. * * This is used after all checks are complete. * * See Also: * ptr_valid_batch_start() */ void ptr_valid_batch_end(struct ptr_valid_batch *batch); /* These wrappers get constness correct. */ static inline bool ptr_valid_r(const void *p, size_t align, size_t size) { return ptr_valid(p, align, size, false); } static inline bool ptr_valid_w(void *p, size_t align, size_t size) { return ptr_valid(p, align, size, true); } static inline bool ptr_valid_batch_r(struct ptr_valid_batch *batch, const void *p, size_t align, size_t size) { return ptr_valid_batch(batch, p, align, size, false); } static inline bool ptr_valid_batch_w(struct ptr_valid_batch *batch, void *p, size_t align, size_t size) { return ptr_valid_batch(batch, p, align, size, true); } struct ptr_valid_map { const char *start, *end; bool is_write; }; #if HAVE_ALIGNOF #define PTR_VALID_ALIGNOF(var) __alignof__(var) #else /* Can't check this... */ #define PTR_VALID_ALIGNOF(var) 1 #endif #endif /* CCAN_PTR_VALID_H */ hkl-5.0.0.2449/hkl/ccan/ptrint/0000755000175000017500000000000013237020537016117 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl/ccan/ptrint/ptrint.h0000644000175000017500000000161013211074266017606 0ustar00piccapicca00000000000000/* CC0 (Public domain) - see LICENSE file for details */ #ifndef CCAN_PTRINT_H #define CCAN_PTRINT_H #include #include #include #include /* * This is a deliberately incomplete type, because it should never be * dereferenced - instead it marks pointer values which are actually * encoding integers */ typedef struct ptrint ptrint_t; CONST_FUNCTION static inline ptrdiff_t ptr2int(const ptrint_t *p) { /* * ptrdiff_t is the right size by definition, but to avoid * surprises we want a warning if the user can't fit at least * a regular int in there */ BUILD_ASSERT(sizeof(int) <= sizeof(ptrdiff_t)); return (const char *)p - (const char *)NULL; } CONST_FUNCTION static inline ptrint_t *int2ptr(ptrdiff_t i) { return (ptrint_t *)((char *)NULL + i); } #endif /* CCAN_PTRINT_H */ hkl-5.0.0.2449/hkl/hkl-engine-soleil-sixs-med.c0000644000175000017500000004315313236600666021110 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include #include "hkl-factory-private.h" // for autodata_factories_, etc #include "hkl-axis-private.h" // for HklAxis #include "hkl-pseudoaxis-common-hkl-private.h" // for hkl_engine_hkl_new, etc #include "hkl-pseudoaxis-common-q-private.h" // for hkl_engine_q2_new, etc #include "hkl-pseudoaxis-common-tth-private.h" // for hkl_engine_tth2_new, etc #include "hkl-pseudoaxis-common-readonly-private.h" #define PITCH "pitch" #define BETA "beta" #define MU "mu" #define OMEGA "omega" #define GAMMA "gamma" #define DELTA "delta" #define ETA_A "eta_a" /* #define DEBUG */ /*********************/ /* MED 2+2 HklEngine */ /*********************/ static int _reflectivity_func(const gsl_vector *x, void *params, gsl_vector *f) { const double mu = x->data[0]; const double gamma = x->data[2]; CHECK_NAN(x->data, x->size); RUBh_minus_Q(x->data, params, f->data); f->data[3] = gamma - 2 * mu; return GSL_SUCCESS; } static const HklFunction reflectivity_func = { .function = _reflectivity_func, .size = 4, }; static HklMode* mu_fixed_2_2() { static const char* axes_r[] = {BETA, MU, OMEGA, GAMMA, DELTA}; static const char* axes_w[] = {OMEGA, GAMMA, DELTA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("mu_fixed", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklMode* reflectivity_2_2() { static const char* axes_r[] = {BETA, MU, OMEGA, GAMMA, DELTA}; static const char* axes_w[] = {MU, OMEGA, GAMMA, DELTA}; static const HklFunction *functions[] = {&reflectivity_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("reflectivity", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklMode *emergence_fixed_2_2() { static const char* axes_r[] = {BETA, MU, OMEGA, GAMMA, DELTA}; static const char* axes_w[] = {MU, OMEGA, GAMMA, DELTA}; static const HklFunction* functions[] = {&emergence_fixed_func}; static const HklParameter parameters[] = { HKL_MODE_HKL_EMERGENCE_FIXED_PARAMETERS_DEFAULTS(0, 1, 0, 0), }; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS("emergence_fixed", axes_r, axes_w, functions, parameters), }; return hkl_mode_hkl_emergence_fixed_new(&info); } static HklEngine *hkl_engine_soleil_sixs_med_2_2_hkl_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_hkl_new(engines); default_mode = mu_fixed_2_2(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); hkl_engine_add_mode(self, reflectivity_2_2()); hkl_engine_add_mode(self, emergence_fixed_2_2()); return self; } /* mode incidence */ REGISTER_READONLY_INCIDENCE(hkl_engine_soleil_sixs_med_2_2_incidence_new, P99_PROTECT({BETA, MU, OMEGA}), surface_parameters_y); REGISTER_READONLY_EMERGENCE(hkl_engine_soleil_sixs_med_2_2_emergence_new, P99_PROTECT({BETA, MU, OMEGA, GAMMA, DELTA}), surface_parameters_y); /*********************/ /* MED 1+2 HklEngine */ /*********************/ static HklMode* pitch_fixed() { static const char *axes_r[] = {PITCH, MU, GAMMA, DELTA}; static const char* axes_w[] = {MU, GAMMA, DELTA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklMode *delta_fixed() { static const char *axes_r[] = {PITCH, MU, GAMMA, DELTA}; static const char* axes_w[] = {PITCH, MU, GAMMA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklEngine *hkl_engine_soleil_sixs_med_1_2_hkl_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_hkl_new(engines); default_mode = pitch_fixed(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); hkl_engine_add_mode(self, delta_fixed()); return self; } /* mode incidence */ REGISTER_READONLY_INCIDENCE(hkl_engine_soleil_sixs_med_1_2_incidence_new, P99_PROTECT({PITCH, MU}), surface_parameters_z); REGISTER_READONLY_EMERGENCE(hkl_engine_soleil_sixs_med_1_2_emergence_new, P99_PROTECT({PITCH, MU, GAMMA, DELTA}), surface_parameters_z); /*********************/ /* MED 2+3 HklEngine */ /*********************/ typedef struct _HklSlitsFit HklSlitsFit; struct _HklSlitsFit { HklGeometry *geometry; HklVector surface; unsigned int slits_id; unsigned int len; HklParameter *axis; }; static int slits_func(const gsl_vector *x, void *params, gsl_vector *f) { double const *x_data = gsl_vector_const_ptr(x, 0); double *f_data = gsl_vector_ptr(f, 0); HklVector n_slits = {{0, 0, 1}}; HklSlitsFit *parameters = params; hkl_parameter_value_set(parameters->axis, x_data[0], HKL_UNIT_DEFAULT, NULL); hkl_geometry_update(parameters->geometry); /* compute the orientation of the slits */ hkl_vector_rotated_quaternion(&n_slits, &darray_item(parameters->geometry->holders, 1)->q); /* both directions must be perpendicular */ f_data[0] = hkl_vector_scalar_product(¶meters->surface, &n_slits); return GSL_SUCCESS; } static int fit_slits_orientation(HklSlitsFit *params) { size_t i; gsl_multiroot_fsolver_type const *T; gsl_multiroot_fsolver *s; gsl_multiroot_function f; gsl_vector *x; double *x_data; int status; int res = FALSE; int iter; /* now solve the system */ /* Initialize method */ T = gsl_multiroot_fsolver_hybrid; s = gsl_multiroot_fsolver_alloc (T, params->len); x = gsl_vector_alloc(params->len); x_data = gsl_vector_ptr(x, 0); /* initialize x with the right values */ x_data[0] = params->axis->_value; f.f = slits_func; f.n = params->len; f.params = params; gsl_multiroot_fsolver_set (s, &f, x); /* iterate to find the solution */ iter = 0; do { ++iter; status = gsl_multiroot_fsolver_iterate(s); if (status || iter % 100 == 0) { /* Restart from another point. */ for(i=0; ilen; ++i) x_data[i] = (double)rand() / RAND_MAX * 180. / M_PI; gsl_multiroot_fsolver_set(s, &f, x); gsl_multiroot_fsolver_iterate(s); } status = gsl_multiroot_test_residual (s->f, HKL_EPSILON); } while (status == GSL_CONTINUE && iter < 1000); #ifdef DEBUG fprintf(stdout, "\n fitting the detector position using thoses axes :"); for(i=0; ilen; ++i) fprintf(stdout, " \"%s\"", params->axis->name); fprintf(stdout, " status : %d iter : %d", status, iter); fprintf(stdout, " x: ["); for(i=0; ilen; ++i) fprintf(stdout, " %.7f", s->x->data[i]); fprintf(stdout, "] f: ["); for(i=0; ilen; ++i) fprintf(stdout, " %.7f", s->f->data[i]); fprintf(stdout, "]\n"); hkl_geometry_fprintf(stdout, params->geometry); #endif if(status != GSL_CONTINUE){ res = TRUE; /* put the axes in the -pi, pi range. */ gsl_sf_angle_restrict_pos_e(¶ms->axis->_value); } /* release memory */ gsl_vector_free(x); gsl_multiroot_fsolver_free(s); return res; } static void hkl_geometry_list_multiply_soleil_sixs_med_2_3(HklGeometryList *self, HklGeometryListItem *item) { HklSlitsFit params; HklGeometry *geometry; double slits_position; HklHolder *sample_holder; HklHolder *detector_holder; /* For each solution already found we will generate another one */ /* we will set the right slit orientation for a given detector arm position */ geometry = item->geometry; sample_holder = darray_item(geometry->holders, 0); detector_holder = darray_item(geometry->holders, 1); /* get the index of the axis corresponding to the slits */ /* for now the last holder is the detector one */ params.slits_id = detector_holder->config->idx[detector_holder->config->len-1]; params.len = 1; /* only one axis to fit */ params.geometry = geometry; params.axis = darray_item(params.geometry->axes, params.slits_id); /* compute the surface orientation fixed during the fit */ /* use the last sample axis as sample surface normal */ params.surface = container_of(darray_item(geometry->axes, sample_holder->config->idx[sample_holder->config->len - 1]), HklAxis, parameter)->axis_v; hkl_vector_rotated_quaternion(¶ms.surface, &sample_holder->q); /* we just need to fit the slits orientation */ /* save it's value before */ slits_position = hkl_parameter_value_get(params.axis, HKL_UNIT_DEFAULT); if (fit_slits_orientation(¶ms) != TRUE) hkl_parameter_value_set(params.axis, slits_position, HKL_UNIT_DEFAULT, NULL); } static HklMode* mu_fixed_2_3() { static const char *axes_r[] = {BETA, MU, OMEGA, GAMMA, DELTA, ETA_A}; static const char* axes_w[] = {OMEGA, GAMMA, DELTA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("mu_fixed", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklMode* gamma_fixed_2_3() { static const char *axes_r[] = {BETA, MU, OMEGA, GAMMA, DELTA, ETA_A}; static const char* axes_w[] = {MU, OMEGA, DELTA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("gamma_fixed", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklMode *emergence_fixed_2_3() { static const char* axes_r[] = {BETA, MU, OMEGA, GAMMA, DELTA, ETA_A}; static const char* axes_w[] = {MU, OMEGA, GAMMA, DELTA}; static const HklFunction* functions[] = {&emergence_fixed_func}; static const HklParameter parameters[] = { HKL_MODE_HKL_EMERGENCE_FIXED_PARAMETERS_DEFAULTS(0, 1, 0, 0), }; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS("emergence_fixed", axes_r, axes_w, functions, parameters), }; return hkl_mode_hkl_emergence_fixed_new(&info); } static HklEngine *hkl_engine_soleil_sixs_med_2_3_hkl_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_hkl_new(engines); default_mode = mu_fixed_2_3(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); hkl_engine_add_mode(self, gamma_fixed_2_3()); hkl_engine_add_mode(self, emergence_fixed_2_3()); return self; } /***********************/ /* SOLEIL SIXS MED 2+2 */ /***********************/ #define HKL_GEOMETRY_TYPE_SOLEIL_SIXS_MED_2_2_DESCRIPTION \ "+ xrays source fix allong the :math:`\\vec{x}` direction (1, 0, 0)\n" \ "+ 3 axes for the sample\n" \ "\n" \ " + **" BETA "** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ " + **" MU "** : rotation around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ " + **" OMEGA "** : rotating around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ "\n" \ "+ 3 axis for the detector\n" \ "\n" \ " + **" BETA "** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ " + **" GAMMA "** : rotation around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ " + **" DELTA "** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" static const char* hkl_geometry_soleil_sixs_med_2_2_axes[] = {BETA, MU, OMEGA, GAMMA, DELTA}; static HklGeometry *hkl_geometry_new_soleil_sixs_med_2_2(const HklFactory *factory) { HklGeometry *self = hkl_geometry_new(factory, &hkl_geometry_operations_defaults); HklHolder *h; h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, BETA, 0, -1, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, MU, 0, 0, 1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, OMEGA, 0, -1, 0, &hkl_unit_angle_deg); h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, BETA, 0, -1, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, GAMMA, 0, 0, 1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, DELTA, 0, -1, 0, &hkl_unit_angle_deg); return self; } static HklEngineList *hkl_engine_list_new_soleil_sixs_med_2_2(const HklFactory *factory) { HklEngineList *self = hkl_engine_list_new(); hkl_engine_soleil_sixs_med_2_2_hkl_new(self); hkl_engine_q2_new(self); hkl_engine_qper_qpar_new(self); hkl_engine_tth2_new(self); hkl_engine_soleil_sixs_med_2_2_incidence_new(self); hkl_engine_soleil_sixs_med_2_2_emergence_new(self); return self; } REGISTER_DIFFRACTOMETER(soleil_sixs_med_2_2,"SOLEIL SIXS MED2+2", HKL_GEOMETRY_TYPE_SOLEIL_SIXS_MED_2_2_DESCRIPTION); /***********************/ /* SOLEIL SIXS MED 1+2 */ /***********************/ #define HKL_GEOMETRY_TYPE_SOLEIL_SIXS_MED_1_2_DESCRIPTION \ "+ xrays source fix allong the :math:`\\vec{x}` direction (1, 0, 0)\n" \ "+ 2 axes for the sample\n" \ "\n" \ " + **" PITCH "** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ " + **" MU "** : rotation around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ "\n" \ "+ 3 axis for the detector\n" \ "\n" \ " + **" PITCH "** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ " + **" GAMMA "** : rotation around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ " + **" DELTA "** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" static const char* hkl_geometry_soleil_sixs_med_1_2_axes[] = {PITCH, MU, GAMMA, DELTA}; static HklGeometry *hkl_geometry_new_soleil_sixs_med_1_2(const HklFactory *factory) { HklGeometry *self = hkl_geometry_new(factory, &hkl_geometry_operations_defaults); HklHolder *h; h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, PITCH, 0, -1, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, MU, 0, 0, 1, &hkl_unit_angle_deg); h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, PITCH, 0, -1, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, GAMMA, 0, 0, 1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, DELTA, 0, -1, 0, &hkl_unit_angle_deg); return self; } static HklEngineList *hkl_engine_list_new_soleil_sixs_med_1_2(const HklFactory *factory) { HklEngineList *self = hkl_engine_list_new(); hkl_engine_soleil_sixs_med_1_2_hkl_new(self); hkl_engine_q2_new(self); hkl_engine_qper_qpar_new(self); hkl_engine_tth2_new(self); hkl_engine_soleil_sixs_med_1_2_incidence_new(self); hkl_engine_soleil_sixs_med_1_2_emergence_new(self); return self; } REGISTER_DIFFRACTOMETER(soleil_sixs_med_1_2, "SOLEIL SIXS MED1+2", HKL_GEOMETRY_TYPE_SOLEIL_SIXS_MED_1_2_DESCRIPTION); /***********************/ /* SOLEIL SIXS MED 2+3 */ /***********************/ #define HKL_GEOMETRY_TYPE_SOLEIL_SIXS_MED_2_3_DESCRIPTION \ "+ xrays source fix allong the :math:`\\vec{x}` direction (1, 0, 0)\n" \ "+ 3 axes for the sample\n" \ "\n" \ " + **" BETA "** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ " + **" MU "** : rotation around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ " + **" OMEGA "** : rotating around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ "\n" \ "+ 4 axis for the detector\n" \ "\n" \ " + **" BETA "** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ " + **" GAMMA "** : rotation around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ " + **" DELTA "** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ " + **" ETA_A "** : rotation around the :math:`-\\vec{x}` direction (-1, 0, 0)\n" static const char* hkl_geometry_soleil_sixs_med_2_3_axes[] = {BETA, MU, OMEGA, GAMMA, DELTA, ETA_A}; static HklGeometry *hkl_geometry_new_soleil_sixs_med_2_3(const HklFactory *factory) { HklGeometry *self = hkl_geometry_new(factory, &hkl_geometry_operations_defaults); HklHolder *h; h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, BETA, 0, -1, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, MU, 0, 0, 1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, OMEGA, 0, -1, 0, &hkl_unit_angle_deg); h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, BETA, 0, -1, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, GAMMA, 0, 0, 1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, DELTA, 0, -1, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, ETA_A, -1, 0, 0, &hkl_unit_angle_deg); return self; } static HklEngineList *hkl_engine_list_new_soleil_sixs_med_2_3(const HklFactory *factory) { HklEngineList *self = hkl_engine_list_new(); self->geometries->multiply = hkl_geometry_list_multiply_soleil_sixs_med_2_3; hkl_engine_soleil_sixs_med_2_3_hkl_new(self); hkl_engine_q2_new(self); hkl_engine_qper_qpar_new(self); hkl_engine_tth2_new(self); hkl_engine_soleil_sixs_med_2_2_incidence_new(self); hkl_engine_soleil_sixs_med_2_2_emergence_new(self); return self; } REGISTER_DIFFRACTOMETER(soleil_sixs_med_2_3, "SOLEIL SIXS MED2+3", HKL_GEOMETRY_TYPE_SOLEIL_SIXS_MED_2_3_DESCRIPTION); hkl-5.0.0.2449/hkl/hkl-pseudoaxis-private.h0000644000175000017500000004047013236600666020467 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_PSEUDOAXIS_PRIVATE_H__ #define __HKL_PSEUDOAXIS_PRIVATE_H__ #include // for gsl_sf_angle_restrict_symm #include // for size_t #include // for free #include // for NULL #include // for uint #include "hkl-detector-private.h" #include "hkl-geometry-private.h" // for hkl_geometry_update, etc #include "hkl-macros-private.h" // for HKL_MALLOC #include "hkl-parameter-private.h" // for hkl_parameter_list_free, etc #include "hkl.h" // for HklEngine, HklMode, etc #include "hkl/ccan/array_size/array_size.h" #include "hkl/ccan/darray/darray.h" // for darray_foreach, etc G_BEGIN_DECLS typedef struct _HklModeOperations HklModeOperations; typedef struct _HklModeInfo HklModeInfo; typedef struct _HklMode HklMode; typedef struct _HklEngineInfo HklEngineInfo; typedef struct _HklEngineOperations HklEngineOperations; typedef darray(HklMode *) darray_mode; /***********/ /* HklMode */ /***********/ struct _HklModeInfo { const char *name; const darray_string axes_r; const darray_string axes_w; const darray(const HklParameter) parameters; }; #define HKL_MODE_INFO_RO(_name, _axes) .name=_name, .axes_r=DARRAY(_axes) #define HKL_MODE_INFO(_name, _axes_r, _axes_w) HKL_MODE_INFO_RO((_name), (_axes_r)), .axes_w=DARRAY((_axes_w)) #define HKL_MODE_INFO_RO_WITH_PARAMS(_name, _axes, _parameters) HKL_MODE_INFO_RO((_name), (_axes)), .parameters=DARRAY(_parameters) #define HKL_MODE_INFO_WITH_PARAMS(_name, _axes_r, _axes_w, _parameters) \ HKL_MODE_INFO(_name, _axes_r, _axes_w), .parameters=DARRAY(_parameters) struct _HklModeOperations { unsigned long capabilities; void (* free)(HklMode *self); int (* initialized_get)(const HklMode *self); int (* initialized_set)(HklMode *self, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, int initialized, GError **error); int (* get)(HklMode *self, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error); int (* set)(HklMode *self, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error); }; #define HKL_MODE_OPERATIONS_DEFAULTS .capabilities=HKL_ENGINE_CAPABILITIES_READABLE | HKL_ENGINE_CAPABILITIES_WRITABLE, \ .free=hkl_mode_free_real, \ .initialized_get=hkl_mode_initialized_get_real, \ .initialized_set=hkl_mode_initialized_set_real, \ .get=hkl_mode_get_real, \ .set=hkl_mode_set_real struct _HklMode { const HklModeInfo *info; const HklModeOperations *ops; darray_parameter parameters; darray_string parameters_names; int initialized; }; static inline void hkl_mode_free_real(HklMode *self) { HklParameter **parameter; darray_foreach(parameter, self->parameters){ hkl_parameter_free(*parameter); } darray_free(self->parameters); darray_free(self->parameters_names); free(self); } static inline int hkl_mode_initialized_get_real(const HklMode *self) { return self->initialized; } static inline int hkl_mode_initialized_get(const HklMode *self) { return self->ops->initialized_get(self); } static inline int hkl_mode_initialized_set_real(UNUSED HklMode *self, UNUSED HklEngine *engine, UNUSED HklGeometry *geometry, UNUSED HklDetector *detector, UNUSED HklSample *sample, UNUSED int initialized, UNUSED GError **error) { /* by default do nothing and no error */ return TRUE; } static inline int hkl_mode_initialized_set(HklMode *self, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, int initialized, GError **error) { return self->ops->initialized_set(self, engine, geometry, detector, sample, initialized, error); } static inline int hkl_mode_get_real(UNUSED HklMode *self, UNUSED HklEngine *engine, UNUSED HklGeometry *geometry, UNUSED HklDetector *detector, UNUSED HklSample *sample, UNUSED GError **error) { /* by default do nothing and no error */ return FALSE; } static inline int hkl_mode_set_real(UNUSED HklMode *self, UNUSED HklEngine *engine, UNUSED HklGeometry *geometry, UNUSED HklDetector *detector, UNUSED HklSample *sample, UNUSED GError **error) { /* by default do nothing and no error */ return FALSE; } static inline int hkl_mode_init(HklMode *self, const HklModeInfo *info, const HklModeOperations *ops, int initialized) { const HklParameter *parameter; /* ensure part */ if (!self) return FALSE; self->info = info; self->ops = ops; /* parameters */ darray_init(self->parameters); darray_init(self->parameters_names); darray_foreach(parameter, self->info->parameters){ darray_append(self->parameters, hkl_parameter_new_copy(parameter)); darray_append(self->parameters_names, parameter->name); } self->initialized = initialized; return TRUE; } static inline HklMode *hkl_mode_new(const HklModeInfo *info, const HklModeOperations *op, int initialized) { HklMode *self = NULL; self = HKL_MALLOC(HklMode); hkl_mode_init(self, info, op, initialized); return self; } /** * hkl_mode_free: (skip) * @self: * * delete an HklMode **/ static inline void hkl_mode_free(HklMode *self) { self->ops->free(self); } /*************/ /* HklEngine */ /*************/ struct _HklEngineInfo { const char *name; const darray(const HklParameter *) pseudo_axes; unsigned int dependencies; }; #define HKL_ENGINE_INFO(_name, _pseudo_axes, _dependencies) .name = (_name), \ .pseudo_axes = DARRAY(_pseudo_axes), \ .dependencies = (_dependencies) struct _HklEngine { const HklEngineInfo *info; const HklEngineOperations *ops; HklGeometry *geometry; HklDetector *detector; HklSample *sample; HklMode *mode; /* not owned */ HklEngineList *engines; /* not owned */ darray_parameter axes; darray_parameter pseudo_axes; darray_string pseudo_axis_names; darray_mode modes; darray_string mode_names; }; struct _HklEngineList { _darray(HklEngine *); HklGeometryList *geometries; HklGeometry *geometry; HklDetector *detector; HklSample *sample; darray_parameter pseudo_axes; }; #define HKL_ENGINE_ERROR hkl_engine_error_quark () static GQuark hkl_engine_error_quark (void) { return g_quark_from_static_string ("hkl-engine-error-quark"); } typedef enum { HKL_ENGINE_ERROR_PSEUDO_AXIS_VALUES_GET, /* can not get the engine pseudo axes values */ HKL_ENGINE_ERROR_PSEUDO_AXIS_VALUES_SET, /* can not set the engine pseudo axes values */ HKL_ENGINE_ERROR_PSEUDO_AXIS_SET, /* can not set the pseudo axis */ HKL_ENGINE_ERROR_INITIALIZE, /* can not initialize the engine */ HKL_ENGINE_ERROR_SET, /* can not set the engine */ HKL_ENGINE_ERROR_GET, /* can not get the engine */ HKL_ENGINE_ERROR_PARAMETER_GET, /* can not get the parameter */ HKL_ENGINE_ERROR_PARAMETER_SET, /* can not set the parameter */ HKL_ENGINE_ERROR_CURRENT_MODE_SET, /* can not select the mode */ } HklEngineError; static inline void set_geometry_axes(HklEngine *engine, const double values[]) { HklParameter **axis; uint i = 0; darray_foreach(axis, engine->axes){ hkl_parameter_value_set(*axis, values[i++], HKL_UNIT_DEFAULT, NULL); } hkl_geometry_update(engine->geometry); } static inline void hkl_engine_release(HklEngine *self) { HklMode **mode; if(self->geometry) hkl_geometry_free(self->geometry); if(self->detector) hkl_detector_free(self->detector); if(self->sample) hkl_sample_free(self->sample); /* release the mode added */ darray_foreach(mode, self->modes){ hkl_mode_free(*mode); } darray_free(self->modes); darray_free(self->axes); darray_free(self->pseudo_axes); darray_free(self->pseudo_axis_names); darray_free(self->mode_names); } struct _HklEngineOperations { void (*free)(HklEngine *self); }; #define HKL_ENGINE_OPERATIONS_DEFAULTS .free=hkl_engine_free_real static inline void hkl_engine_free_real(UNUSED HklEngine *self) { } static inline void hkl_engine_free(HklEngine *self) { self->ops->free(self); } static inline void hkl_engine_init(HklEngine *self, const HklEngineInfo *info, const HklEngineOperations *ops, HklEngineList *engines) { self->info = info; self->ops = ops; darray_init(self->modes); darray_init(self->pseudo_axes); darray_init(self->pseudo_axis_names); darray_init(self->mode_names); self->geometry = NULL; self->detector = NULL; self->sample = NULL; self->engines = engines; darray_append(*engines, self); } static inline HklParameter *register_mode_parameter(HklMode *mode, unsigned int index) { return darray_item(mode->parameters, index); } static inline HklParameter *register_pseudo_axis(HklEngine *self, HklEngineList *engines, const HklParameter *pseudo_axis) { HklParameter **param; HklParameter *parameter; /* try to find an already existing pseudo axis in the list. */ darray_foreach(param, engines->pseudo_axes){ if(!strcmp(pseudo_axis->name, (*param)->name)){ parameter = *param; goto out; } } parameter = hkl_parameter_new_copy(pseudo_axis); darray_append(engines->pseudo_axes, parameter); out: darray_append(self->pseudo_axes, parameter); darray_append(self->pseudo_axis_names, parameter->name); return parameter; } /** * hkl_engine_add_mode: (skip) * @self: * @mode: the mode to add * * add an HklMode to the self HklEngine **/ static inline void hkl_engine_add_mode(HklEngine *self, HklMode *mode) { darray_append(self->modes, mode); darray_append(self->mode_names, mode->info->name); } /** * hkl_engine_add_geometry: (skip) * @self: the current PseudoAxeEngine * @x: x A vector of double with the axes values to put in the geometry. * * This method try to be clever by allocating memory only if the * current length of the geometries is not large enought. Then it just * set the geometry axes and copy it to the right geometries. We do * not gives the x len as it is equal to the self->axes_len. * **/ static inline void hkl_engine_add_geometry(HklEngine *self, double const x[]) { HklParameter **axis; uint i = 0; /* copy the axes configuration into the engine->geometry */ darray_foreach(axis, self->axes){ hkl_parameter_value_set(*axis, gsl_sf_angle_restrict_symm(x[i++]), HKL_UNIT_DEFAULT, NULL); } hkl_geometry_list_add(self->engines->geometries, self->geometry); } static inline void hkl_engine_prepare_internal(HklEngine *self) { if(!self || !self->engines) return; /* set */ if(self->geometry) hkl_geometry_free(self->geometry); self->geometry = hkl_geometry_new_copy(self->engines->geometry); if(self->detector) hkl_detector_free(self->detector); self->detector = hkl_detector_new_copy(self->engines->detector); if(self->sample) hkl_sample_free(self->sample); self->sample = hkl_sample_new_copy(self->engines->sample); /* fill the axes member from the function */ if(self->mode){ const char **axis_name; darray_free(self->axes); darray_init(self->axes); darray_foreach(axis_name, self->mode->info->axes_w){ HklParameter *axis = hkl_geometry_get_axis_by_name(self->geometry, *axis_name); darray_append(self->axes, axis); } } /* reset the geometries len */ hkl_geometry_list_reset(self->engines->geometries); } /** * hkl_engine_mode_set: (skip) * @self: the HklEngine * @name: the mode to select * * This method also populate the self->axes from the mode->axis_names. * this is to speed the computation of the numerical axes. **/ static inline void hkl_engine_mode_set(HklEngine *self, HklMode *mode) { self->mode = mode; } static inline int hkl_engine_get(HklEngine *self, GError **error) HKL_ARG_NONNULL(1); /** * hkl_engine_get: (skip) * @self: The HklEngine * @error: return location for a GError, or NULL * * get the values of the pseudo-axes from the real-axes values * * return value: TRUE if succeded or FALSE otherwise. **/ static inline int hkl_engine_get(HklEngine *self, GError **error) { hkl_error (error == NULL || *error == NULL); if(!self->engines || !self->engines->geometry || !self->engines->detector || !self->engines->sample || !self->mode || !self->mode->ops->get){ g_set_error(error, HKL_ENGINE_ERROR, HKL_ENGINE_ERROR_GET, "Internal error"); return FALSE; } if (!self->mode->ops->get(self->mode, self, self->engines->geometry, self->engines->detector, self->engines->sample, error)){ hkl_assert(error == NULL || *error != NULL); return FALSE; } hkl_assert(error == NULL || *error == NULL); return TRUE; } /** * hkl_engine_set: (skip) * @self: the HklEngine * @error: return location for a GError, or NULL * * use the HklPseudoaxisEngine values to compute the real axes values. * * return value: TRUE if succeded or FALSE otherwise. **/ static inline int hkl_engine_set(HklEngine *self, GError **error) { hkl_error (error == NULL || *error == NULL); if(!self->geometry || !self->detector || !self->sample || !self->mode || !self->mode->ops->set){ g_set_error(error, HKL_ENGINE_ERROR, HKL_ENGINE_ERROR_SET, "Internal error"); return FALSE; } hkl_engine_prepare_internal(self); if (!self->mode->ops->set(self->mode, self, self->geometry, self->detector, self->sample, error)){ hkl_assert(error == NULL || *error != NULL); return FALSE; } hkl_assert(error == NULL || *error == NULL); hkl_geometry_list_multiply(self->engines->geometries); hkl_geometry_list_multiply_from_range(self->engines->geometries); hkl_geometry_list_remove_invalid(self->engines->geometries); hkl_geometry_list_sort(self->engines->geometries, self->engines->geometry); if(self->engines->geometries->n_items == 0){ g_set_error(error, HKL_ENGINE_ERROR, HKL_ENGINE_ERROR_SET, "no remaining solutions"); return FALSE; } return TRUE; } /* HklEngineList */ #define HKL_ENGINE_LIST_ERROR hkl_engine_list_error_quark () static inline GQuark hkl_engine_list_error_quark (void) { return g_quark_from_static_string ("hkl-engine-list-error-quark"); } typedef enum { HKL_ENGINE_LIST_ERROR_ENGINE_GET_BY_NAME, /* can not set this geometry */ HKL_ENGINE_LIST_ERROR_PSEUDO_AXIS_GET_BY_NAME, /* can not set this geometry */ } HklEngineListError; /** * hkl_engine_list_new: (skip) * * default constructor * * Returns: **/ static inline HklEngineList *hkl_engine_list_new(void) { HklEngineList *self = NULL; self = HKL_MALLOC(HklEngineList); darray_init(*self); self->geometries = hkl_geometry_list_new(); self->geometry = NULL; self->detector = NULL; self->sample = NULL; darray_init(self->pseudo_axes); return self; } /** * hkl_engine_list_new_copy: (skip) * @self: * * dummy copy constructor for the binding * * Returns: (transfer none): NULL all the time the structure is non-copyable **/ static inline const HklEngineList *hkl_engine_list_new_copy(UNUSED const HklEngineList *self) { return NULL; } /** * hkl_engine_list_clear: (skip) * @self: the engine list to clear * * remove all engine from the engine list **/ static inline void hkl_engine_list_clear(HklEngineList *self) { HklEngine **engine; HklParameter **parameter; darray_foreach(engine, *self){ hkl_engine_free(*engine); } darray_free(*self); darray_foreach(parameter, self->pseudo_axes){ hkl_parameter_free(*parameter); } darray_free(self->pseudo_axes); } G_END_DECLS #endif /* __HKL_PSEUDOAXIS_PRIVATE_H__ */ hkl-5.0.0.2449/hkl/hkl-source-private.h0000644000175000017500000000353613236600666017605 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_SOURCE_PRIVATE_H__ #define __HKL_SOURCE_PRIVATE_H__ #include // for FILE #include "hkl-vector-private.h" // for HklVector #include "hkl.h" // for G_BEGIN_DECLS, etc G_BEGIN_DECLS #define HKL_SOURCE_DEFAULT_WAVE_LENGTH (1.54) typedef struct _HklSource HklSource; struct _HklSource { double wave_length; HklVector direction; }; extern HklSource *hkl_source_dup(const HklSource *self); extern void hkl_source_free(HklSource *self); extern int hkl_source_init(HklSource *self, double wave_length, double x, double y, double z); extern int hkl_source_cmp(HklSource const *self, HklSource const *s); extern void hkl_source_compute_ki(HklSource const *self, HklVector *ki); extern double hkl_source_get_wavelength(HklSource const *self); extern void hkl_source_fprintf(FILE *f, HklSource const *self); G_END_DECLS #endif /* __HKL_SOURCE_PRIVATE_H__ */ hkl-5.0.0.2449/hkl/hkl-detector.c0000644000175000017500000000642213237017527016435 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for fprintf, NULL, FILE #include // for free #include "hkl-detector-private.h" // for _HklDetector #include "hkl-geometry-private.h" // for HklHolder, _HklGeometry, etc #include "hkl-macros-private.h" // for HKL_MALLOC #include "hkl-source-private.h" // for HklSource #include "hkl-vector-private.h" // for hkl_vector_init, etc #include "hkl.h" // for HklDetector, HklGeometry, etc #include "hkl/ccan/darray/darray.h" // for darray_item /** * hkl_detector_new: (skip) * * Create a new default #HklDetector * * Returns: **/ HklDetector *hkl_detector_new(void) { HklDetector *self = NULL; self = HKL_MALLOC(HklDetector); self->idx = HKL_HOLDER_DETECTOR_IDX; self->holder = NULL; return self; } /** * hkl_detector_new_copy: (skip) * @src: the detector to copy * * the copy constructor * * Returns: **/ HklDetector *hkl_detector_new_copy(const HklDetector *src) { HklDetector *self; self = HKL_MALLOC(HklDetector); *self = *src; return self; } /** * hkl_detector_free: (skip) * @self: * * destructor **/ void hkl_detector_free(HklDetector *self) { free(self); } /** * hkl_detector_attach_to_holder: (skip) * @self: * @holder: * * attach the #HklDetector to an #HklHolder **/ void hkl_detector_attach_to_holder(HklDetector *self, HklHolder const *holder) { self->holder = holder; } /** * hkl_detector_compute_kf: (skip) * @self: * @g: (in): the diffractometer #HklGeometry use to compute kf. * @kf: (out caller-allocates): the #HklVector fill with the kf coordinates. * * Compute the kf vector of the #HklDetector * * Returns: HKL_SUCCESS if everythongs goes fine. HKL_FAIL otherwise. **/ int hkl_detector_compute_kf(HklDetector const *self, HklGeometry *g, HklVector *kf) { HklHolder *holder; hkl_geometry_update(g); holder = hkl_geometry_detector_holder_get(g, self); if (holder) { hkl_vector_init(kf, HKL_TAU / g->source.wave_length, 0, 0); hkl_vector_rotated_quaternion(kf, &holder->q); return TRUE; } else return FALSE; } /** * hkl_detector_fprintf: (skip) * @f: * @self: * * print to a FILE the detector members **/ void hkl_detector_fprintf(FILE *f, const HklDetector *self) { fprintf(f, "detector->idx: %zd\n", self->idx); fprintf(f, "detector->holder: %p\n", self->holder); } hkl-5.0.0.2449/hkl/hkl-pseudoaxis-common-psi.c0000644000175000017500000002330313236600666021065 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for ::GSL_SUCCESS #include // for gsl_vector #include // for gsl_isnan #include // for fprintf, stderr #include // for NULL, exit, free #include // for uint #include "hkl-detector-private.h" // for hkl_detector_compute_kf #include "hkl-geometry-private.h" // for HklHolder, _HklGeometry, etc #include "hkl-macros-private.h" // for HKL_MALLOC, hkl_assert, etc #include "hkl-matrix-private.h" // for hkl_matrix_solve, etc #include "hkl-parameter-private.h" #include "hkl-pseudoaxis-auto-private.h" // for HklModeAutoInfo, etc #include "hkl-pseudoaxis-common-psi-private.h" // for HklEnginePsi, etc #include "hkl-pseudoaxis-private.h" // for _HklEngine, HklEngineInfo, etc #include "hkl-quaternion-private.h" // for hkl_quaternion_to_matrix #include "hkl-sample-private.h" // for _HklSample #include "hkl-source-private.h" // for hkl_source_compute_ki #include "hkl-vector-private.h" // for HklVector, etc #include "hkl.h" // for HklEngine, HklGeometry, etc #include "hkl/ccan/array_size/array_size.h" // for ARRAY_SIZE #include "hkl/ccan/container_of/container_of.h" // for container_of #include "hkl/ccan/darray/darray.h" // for darray_item #define HKL_MODE_PSI_ERROR hkl_mode_psi_error_quark () static GQuark hkl_mode_psi_error_quark (void) { return g_quark_from_static_string ("hkl-mode-psi-error-quark"); } typedef enum { HKL_MODE_PSI_ERROR_INIT, /* can not init the engine */ HKL_MODE_PSI_ERROR_GET, /* can not get the engine */ } HklModePsiError; /***********************/ /* numerical functions */ /***********************/ int _psi_func(const gsl_vector *x, void *params, gsl_vector *f) { HklVector dhkl0, hkl1; HklVector ki, kf, Q, n; HklMatrix RUB; HklEngine *engine = params; HklEnginePsi *psi_engine = container_of(engine, HklEnginePsi, engine); HklModePsi *modepsi = container_of(engine->mode, HklModePsi, parent); HklHolder *sample_holder; CHECK_NAN(x->data, x->size); /* update the workspace from x; */ set_geometry_axes(engine, x->data); /* kf - ki = Q */ ki = hkl_geometry_ki_get(engine->geometry); kf = hkl_geometry_kf_get(engine->geometry, engine->detector); Q = kf; hkl_vector_minus_vector(&Q, &ki); if (hkl_vector_is_null(&Q)){ f->data[0] = 1; f->data[1] = 1; f->data[2] = 1; f->data[3] = 1; }else{ /* R * UB */ /* for now the 0 holder is the sample holder. */ sample_holder = hkl_geometry_sample_holder_get(engine->geometry, engine->sample); hkl_quaternion_to_matrix(&sample_holder->q, &RUB); hkl_matrix_times_matrix(&RUB, &engine->sample->UB); /* compute dhkl0 */ hkl_matrix_solve(&RUB, &dhkl0, &Q); hkl_vector_minus_vector(&dhkl0, &modepsi->hkl0); /* compute the intersection of the plan P(kf, ki) and PQ (normal Q) */ /* * now that dhkl0 have been computed we can use a * normalized Q to compute n and psi */ hkl_vector_normalize(&Q); n = kf; hkl_vector_vectorial_product(&n, &ki); hkl_vector_vectorial_product(&n, &Q); /* compute hkl1 in the laboratory referentiel */ /* for now the 0 holder is the sample holder. */ for(unsigned int i=0; i<3; ++i) hkl1.data[i] = darray_item(engine->mode->parameters, i)->_value; hkl_matrix_times_vector(&engine->sample->UB, &hkl1); hkl_vector_rotated_quaternion(&hkl1, &sample_holder->q); /* project hkl1 on the plan of normal Q */ hkl_vector_project_on_plan(&hkl1, &Q); if (hkl_vector_is_null(&hkl1)){ /* hkl1 colinear with Q */ f->data[0] = dhkl0.data[0]; f->data[1] = dhkl0.data[1]; f->data[2] = dhkl0.data[2]; f->data[3] = 1; }else{ f->data[0] = dhkl0.data[0]; f->data[1] = dhkl0.data[1]; f->data[2] = dhkl0.data[2]; f->data[3] = psi_engine->psi->_value - hkl_vector_oriented_angle(&n, &hkl1, &Q); } } return GSL_SUCCESS; } static int hkl_mode_initialized_set_psi_real(HklMode *self, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, int initialized, GError **error) { HklVector ki; HklMatrix RUB; HklModePsi *psi_mode = container_of(self, HklModePsi, parent); HklHolder *sample_holder = hkl_geometry_sample_holder_get(geometry, sample); hkl_error (error == NULL || *error == NULL); if(initialized){ /* update the geometry internals */ hkl_geometry_update(geometry); /* R * UB */ /* for now the 0 holder is the sample holder. */ hkl_quaternion_to_matrix(&sample_holder->q, &RUB); hkl_matrix_times_matrix(&RUB, &sample->UB); /* kf - ki = Q0 */ ki = hkl_geometry_ki_get(geometry); psi_mode->Q0 = hkl_geometry_kf_get(geometry, detector); hkl_vector_minus_vector(&psi_mode->Q0, &ki); if (hkl_vector_is_null(&psi_mode->Q0)){ g_set_error(error, HKL_MODE_PSI_ERROR, HKL_MODE_PSI_ERROR_INIT, "can not initialize the \"%s\" engine when hkl is null", engine->info->name); return FALSE; }else /* compute hkl0 */ hkl_matrix_solve(&RUB, &psi_mode->hkl0, &psi_mode->Q0); } self->initialized = initialized; return TRUE; } static int hkl_mode_get_psi_real(HklMode *base, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error) { HklVector ki; HklVector kf; HklVector Q; HklVector hkl1; HklVector n; if (!base || !engine || !engine->mode || !geometry || !detector || !sample){ g_set_error(error, HKL_MODE_PSI_ERROR, HKL_MODE_PSI_ERROR_GET, "internal error"); return FALSE; } /* get kf, ki and Q */ ki = hkl_geometry_ki_get(geometry); kf = hkl_geometry_kf_get(geometry, detector); Q = kf; hkl_vector_minus_vector(&Q, &ki); if (hkl_vector_is_null(&Q)){ g_set_error(error, HKL_MODE_PSI_ERROR, HKL_MODE_PSI_ERROR_GET, "can not compute psi when hkl is null (kf == ki)"); return FALSE; }else{ HklHolder *sample_holder = hkl_geometry_sample_holder_get(geometry, sample); /* needed for a problem of precision */ hkl_vector_normalize(&Q); /* compute the intersection of the plan P(kf, ki) and PQ (normal Q) */ n = kf; hkl_vector_vectorial_product(&n, &ki); hkl_vector_vectorial_product(&n, &Q); /* compute hkl1 in the laboratory referentiel */ /* the geometry was already updated in the detector compute kf */ /* for now the 0 holder is the sample holder. */ for(unsigned int i=0; i<3; ++i) hkl1.data[i] = darray_item(base->parameters, i)->_value; hkl_matrix_times_vector(&sample->UB, &hkl1); hkl_vector_rotated_quaternion(&hkl1, &sample_holder->q); /* project hkl1 on the plan of normal Q */ hkl_vector_project_on_plan(&hkl1, &Q); if (hkl_vector_is_null(&hkl1)){ g_set_error(error, HKL_MODE_PSI_ERROR, HKL_MODE_PSI_ERROR_GET, "can not compute psi when Q and the ref vector are colinear"); return FALSE; }else{ HklEnginePsi *psi_engine = container_of(engine, HklEnginePsi, engine); /* compute the angle beetween hkl1 and n */ psi_engine->psi->_value = hkl_vector_oriented_angle(&n, &hkl1, &Q); } } return TRUE; } HklMode *hkl_mode_psi_new(const HklModeAutoInfo *auto_info) { static const HklModeOperations operations = { HKL_MODE_OPERATIONS_AUTO_DEFAULTS, .capabilities = HKL_ENGINE_CAPABILITIES_READABLE | HKL_ENGINE_CAPABILITIES_WRITABLE | HKL_ENGINE_CAPABILITIES_INITIALIZABLE, .initialized_set = hkl_mode_initialized_set_psi_real, .get = hkl_mode_get_psi_real, }; HklModePsi *self; if (darray_size(auto_info->info.axes_w) != 4){ fprintf(stderr, "This generic HklModePsi need exactly 4 axes"); exit(128); } self = HKL_MALLOC(HklModePsi); /* the base constructor; */ hkl_mode_auto_init(&self->parent, auto_info, &operations, FALSE); return &self->parent; } /*************/ /* HklEngine */ /*************/ static void hkl_engine_psi_free_real(HklEngine *base) { HklEnginePsi *self=container_of(base, HklEnginePsi, engine); hkl_engine_release(&self->engine); free(self); } HklEngine *hkl_engine_psi_new(HklEngineList *engines) { HklEnginePsi *self; static const HklParameter psi = { HKL_PARAMETER_DEFAULTS_ANGLE, .name = "psi", .description = "angle between the reference vector and the diffraction plan", }; static const HklParameter *pseudo_axes[] = {&psi}; static const HklEngineInfo info = { HKL_ENGINE_INFO("psi", pseudo_axes, HKL_ENGINE_DEPENDENCIES_AXES | HKL_ENGINE_DEPENDENCIES_ENERGY | HKL_ENGINE_DEPENDENCIES_SAMPLE), }; static const HklEngineOperations operations = { HKL_ENGINE_OPERATIONS_DEFAULTS, .free=hkl_engine_psi_free_real, }; self = HKL_MALLOC(HklEnginePsi); hkl_engine_init(&self->engine, &info, &operations, engines); self->psi = register_pseudo_axis(&self->engine, engines, &psi); return &self->engine; } hkl-5.0.0.2449/hkl/hkl-pseudoaxis-common.c0000644000175000017500000001346213236600666020301 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel * Maria-Teresa Nunez-Pardo-de-Verra */ #include "hkl-detector-private.h" // for hkl_detector_compute_kf #include "hkl-geometry-private.h" // for HklHolder, _HklGeometry, etc #include "hkl-matrix-private.h" // for hkl_matrix_times_vector, etc #include "hkl-pseudoaxis-common-readonly-private.h" // for HklEngineHkl #include "hkl-sample-private.h" // for _HklSample #include "hkl-vector-private.h" // for HklVector, etc /*******/ /* hkl */ /*******/ struct HklHklRead { HklVector ki; HklVector kf; HklVector Q; HklVector hkl; }; struct HklHklRead hkl_hkl_read(const HklGeometry *geometry, const HklDetector *detector, const HklSample *sample) { struct HklHklRead result; HklMatrix RUB; HklHolder *sample_holder = hkl_geometry_sample_holder_get(geometry, sample); result.ki = hkl_geometry_ki_get(geometry); result.kf = hkl_geometry_kf_get(geometry, detector); result.Q = result.kf; hkl_vector_minus_vector(&result.Q, &result.ki); /* R * UB */ hkl_quaternion_to_matrix(&sample_holder->q, &RUB); hkl_matrix_times_matrix(&RUB, &sample->UB); hkl_matrix_solve(&RUB, &result.hkl, &result.Q); return result; } struct HklHklWrite { HklVector ki; HklVector kf; HklVector Q; HklVector hkl; HklVector dQ; }; struct HklHklWrite hkl_hkl_write(const HklGeometry *geometry, const HklDetector *detector, const HklSample *sample, const HklVector *hkl) { struct HklHklWrite result; HklHolder *sample_holder = hkl_geometry_sample_holder_get(geometry, sample); result.ki = hkl_geometry_ki_get(geometry); result.kf = hkl_geometry_kf_get(geometry, detector); result.Q = result.kf; hkl_vector_minus_vector(&result.Q, &result.ki); result.hkl = *hkl; hkl_matrix_times_vector(&sample->UB, &result.hkl); /* Hkl = hkl_holder_transformation_apply(sample_holder, &Hkl); */ hkl_vector_rotated_quaternion(&result.hkl, &sample_holder->q); result.dQ = result.Q; hkl_vector_minus_vector(&result.dQ, &result.hkl); return result; } /**************************/ /* hkl double_diffraction */ /**************************/ struct HklDoubleDiffractionWrite { struct HklHklWrite hkl1W; struct HklHklWrite hkl2W; HklVector kf2; }; struct HklDoubleDiffractionWrite hkl_double_diffraction_write(const HklGeometry *geometry, const HklDetector *detector, const HklSample *sample, const HklVector *hkl1, const HklVector *hkl2) { struct HklDoubleDiffractionWrite result; result.hkl1W = hkl_hkl_write(geometry, detector, sample, hkl1); result.hkl2W = hkl_hkl_write(geometry, detector, sample, hkl2); result.kf2 = result.hkl2W.hkl; hkl_vector_add_vector(&result.kf2, &result.hkl2W.ki); return result; } /******************************************/ /* the psi_constant_vertical get set part */ /******************************************/ struct HklPsiWrite { struct HklHklWrite hklW; struct HklHklWrite hkl2W; HklVector Qn; /* Q normalized */ HklVector hkl2; /* projection of hkl2 on plan Q */ HklVector n; /* compute n the intersection of the plan P(kf, ki) and PQn (normal Qn) */ double psi; /* computed psi */ int status; }; struct HklPsiWrite hkl_psi_write(const HklGeometry *geometry, const HklDetector *detector, const HklSample *sample, const HklVector *hkl, const HklVector *hkl2) { struct HklPsiWrite result; result.hklW = hkl_hkl_write(geometry, detector, sample, hkl); result.Qn = result.hklW.Q; result.status = hkl_vector_normalize(&result.Qn); /* if |Q| > epsilon ok */ if (result.status){ result.hkl2W = hkl_hkl_write(geometry, detector, sample, hkl2); /* project hkl on the plan of normal Q */ result.hkl2 = result.hkl2W.hkl; hkl_vector_project_on_plan(&result.hkl2, &result.Qn); /* compute n the intersection of the plan P(kf, ki) and PQ (normal Q) */ result.n = result.hklW.kf; hkl_vector_vectorial_product(&result.n, &result.hklW.ki); hkl_vector_vectorial_product(&result.n, &result.Qn); /* compute psi */ result.psi = hkl_vector_oriented_angle(&result.n, &result.hkl2, &result.Qn); } return result; } /***********************/ /* hkl emergence fixed */ /***********************/ struct HklEmergenceFixedWrite { struct HklHklWrite hklW; HklVector n; /* the surface orientation */ double emergence; /* the computed emergence */ }; struct HklEmergenceFixedWrite hkl_emergence_fixed_write(const HklGeometry *geometry, const HklDetector *detector, const HklSample *sample, const HklVector *hkl, const HklVector *n) { struct HklEmergenceFixedWrite result; const HklHolder *sample_holder = hkl_geometry_sample_holder_get(geometry, sample); result.hklW = hkl_hkl_write(geometry, detector, sample, hkl); /* compute the orientation of the surface */ result.n = *n; hkl_vector_rotated_quaternion(&result.n, &sample_holder->q); result.emergence = _emergence(&result.n, &result.hklW.kf); return result; } hkl-5.0.0.2449/hkl/hkl-factory-private.h0000644000175000017500000000357213236600666017754 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_FACTORY_PRIVATE_H__ #define __HKL_FACTORY_PRIVATE_H__ #include "hkl.h" #include "hkl/ccan/autodata/autodata.h" G_BEGIN_DECLS typedef HklGeometry* (* HklFactoryGeometryFunction) (const HklFactory *factory); typedef HklEngineList* (* HklFactoryEngineListFunction) (const HklFactory *factory); struct _HklFactory { const char *name; const char *description; const darray_string axes; HklFactoryGeometryFunction create_new_geometry; HklFactoryEngineListFunction create_new_engine_list; }; #define REGISTER_DIFFRACTOMETER(name_, real_name_, description_) \ static HklFactory name_ = { \ .name = real_name_, \ .description = description_, \ .axes = DARRAY(hkl_geometry_ ## name_ ## _axes), \ .create_new_geometry = &hkl_geometry_new_ ## name_, \ .create_new_engine_list = &hkl_engine_list_new_ ## name_ \ }; \ AUTODATA(factories, &name_) AUTODATA_TYPE(factories, HklFactory); G_END_DECLS #endif /* __HKL_FACTORY_H__ */ hkl-5.0.0.2449/hkl/hkl-macros-private.h0000644000175000017500000000601113236600666017560 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_MACROS_PRIVATE_H__ #define __HKL_MACROS_PRIVATE_H__ #include // for assert #include // for fprintf, printf, stderr #include // for calloc, exit, free #include "hkl.h" // for G_BEGIN_DECLS, etc /* specific part for the eulerian -> kappa conversion */ #define HKL_EULERIAN_KAPPA_SOLUTION 1 /* the assert method */ #if !defined(NDEBUG) && !_MSC_VER # include # include # define hkl_assert(x) do{ if (!(x)) {hkl_printbt(); assert(x); } } while(0) #else # define hkl_assert(x) #endif #define hkl_error(expr) do{ \ if(!(expr)){ \ g_error(__STRING(expr)); \ } \ } while(0) /* use for the printf format methods took from glib */ #define G_GNUC_PRINTF( format_idx, arg_idx ) \ __attribute__((__format__ (__printf__, format_idx, arg_idx))) /* use for the hkl_list */ #define alloc_nr(x) (((x)+16)*3/2) /* * Realloc the buffer pointed at by variable 'x' so that it can hold * at least 'nr' entries; the number of entries currently allocated * is 'alloc', using the standard growing factor alloc_nr() macro. * * DO NOT USE any expression with side-effect for 'x' or 'alloc'. */ #define ALLOC_GROW(x, nr, alloc) \ do { \ if ((nr) > alloc) { \ if (alloc_nr(alloc) < (nr)) \ alloc = (nr); \ else \ alloc = alloc_nr(alloc); \ x = realloc((x), alloc * sizeof(*(x))); \ } \ } while(0) #ifndef NORETURN # ifdef __GNUC__ # define NORETURN __attribute__((__noreturn__)) # else # define NORETURN # ifndef __attribute__ # define __attribute__(x) # endif # endif #endif #define DARRAY(_items) {.item=_items, .size=ARRAY_SIZE(_items), .alloc=ARRAY_SIZE(_items)} G_BEGIN_DECLS extern void hkl_printbt(void); static void *_hkl_malloc(int size, const char *error) { void *tmp; tmp = calloc(1, size); if(!tmp){ fprintf(stderr, "%s", error); exit(128); } return tmp; } G_END_DECLS /* malloc method */ #define HKL_MALLOC(type) (type *)_hkl_malloc(sizeof(type), "Can not allocate memory for a " #type) #endif hkl-5.0.0.2449/hkl/hkl-pseudoaxis-common-tth-private.h0000644000175000017500000000226313236600666022550 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_PSEUDOAXIS_COMMON_TTH_PRIVATE_H__ #define __HKL_PSEUDOAXIS_COMMON_TTH_PRIVATE_H__ #include "hkl.h" G_BEGIN_DECLS typedef struct _HklEngineTth2 HklEngineTth2; extern HklEngine *hkl_engine_tth2_new(HklEngineList *engines); G_END_DECLS #endif hkl-5.0.0.2449/hkl/hkl-parameter.c0000644000175000017500000002455013236600666016607 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for fprintf, FILE #include // for free, malloc, NULL #include // for strcmp #include "hkl-interval-private.h" // for HklInterval #include "hkl-macros-private.h" // for HKL_MALLOC #include "hkl-parameter-private.h" // for _HklParameter, etc #include "hkl-unit-private.h" // for hkl_unit_factor, HklUnit, etc #include "hkl.h" // for HklParameter, etc #include "hkl/ccan/darray/darray.h" // for darray_size, darray_item, etc /****************/ /* HklParameter */ /****************/ static int hkl_parameter_init(HklParameter *self, const char *name, const char *description, double min, double value, double max, int fit, int changed, const HklUnit *unit, const HklUnit *punit) { if (min <= value && value <= max && strcmp(name, "") && strcmp(description, "") && hkl_unit_compatible(unit, punit)) { self->name = name; self->description = description; self->range.min = min; self->range.max = max; self->_value = value; self->unit = unit; self->punit = punit; self->fit = fit; self->changed = changed; self->ops = &hkl_parameter_operations_defaults; } else return FALSE; return TRUE; } /** * hkl_parameter_new: (skip) * @name: * @min: * @value: * @max: * @fit: * @changed: * @unit: * @punit: * * create a new #HklParameter * * Returns: **/ HklParameter *hkl_parameter_new(const char *name, const char *description, double min, double value, double max, int fit, int changed, const HklUnit *unit, const HklUnit *punit) { HklParameter *self; self = HKL_MALLOC(HklParameter); if (!hkl_parameter_init(self, name, description, min, value, max, fit, changed, unit, punit)) { free(self); self = NULL; } return self; } /** * hkl_parameter_new_copy: (skip) * @self: * * copy an #HklParameter * * Returns: **/ HklParameter *hkl_parameter_new_copy(const HklParameter *self) { return self->ops->copy(self); } /** * hkl_parameter_free: (skip) * @self: * * delete an #HklParameter **/ void hkl_parameter_free(HklParameter *self) { self->ops->free(self); } /** * hkl_parameter_init_copy: (skip) * @self: the this ptr * @src: the parameter to copy from * @error: return location for a GError, or NULL * * Returns: TRUE on success, FALSE if an error occurred **/ int hkl_parameter_init_copy(HklParameter *self, const HklParameter *src, GError **error) { return self->ops->init_copy(self, src, error); } /** * hkl_parameter_name_get: * @self: the this ptr * * Returns: the name of the #HklParameter **/ const char *hkl_parameter_name_get(const HklParameter *self) { return self->name; } /** * hkl_parameter_default_unit_get: * @self: the this ptr * * Returns: the default unit of the #HklParameter **/ const char *hkl_parameter_default_unit_get(const HklParameter *self) { return self->unit->name; } /** * hkl_parameter_user_unit_get: * @self: the this ptr * * Returns: the user unit of the #HklParameter **/ const char *hkl_parameter_user_unit_get(const HklParameter *self) { return self->punit->name; } /** * hkl_parameter_value_get: * @self: the this ptr * @unit_type: the unit type (default or user) of the returned value * * Returns: the value of the #HklParameter **/ inline double hkl_parameter_value_get(const HklParameter *self, HklUnitEnum unit_type) { switch(unit_type){ case HKL_UNIT_DEFAULT: return self->_value; break; case HKL_UNIT_USER: return self->_value * hkl_unit_factor(self->unit, self->punit); break; default: return NAN; } } /** * hkl_parameter_value_get_closest: * @self: the this ptr * @ref: the reference #HklParameter * * * * Returns: the closest value of the ref #HklParameter from the * current self #HklParameter **/ inline double hkl_parameter_value_get_closest(const HklParameter *self, const HklParameter *ref) { return self->ops->get_value_closest(self, ref); } /** * hkl_parameter_value_set: * @self: this ptr * @value: the value to set * @unit_type: the unit type (default or user) of the returned value * @error: return location for a GError, or NULL * * set the value of an #HklParameter * * Returns: TRUE on success, FALSE if an error occurred **/ inline int hkl_parameter_value_set(HklParameter *self, double value, HklUnitEnum unit_type, GError **error) { return self->ops->set_value(self, value, unit_type, error); } /** * hkl_parameter_value_set_smallest_in_range: (skip) * @self: the this ptr **/ inline void hkl_parameter_value_set_smallest_in_range(HklParameter *self) { self->ops->set_value_smallest_in_range(self); } /** * hkl_parameter_min_max_get: * @self: the this ptr * @min: (out caller-allocates): the returned minimum value * @max: (out caller-allocates): the returned maximum value * @unit_type: the unit type (default or user) of the returned values * * get the min and max value of the #HklParameter * **/ void hkl_parameter_min_max_get(const HklParameter *self, double *min, double *max, HklUnitEnum unit_type) { double factor; switch (unit_type){ case HKL_UNIT_DEFAULT: *min = self->range.min; *max = self->range.max; break; case HKL_UNIT_USER: factor = hkl_unit_factor(self->unit, self->punit); *min = factor * self->range.min; *max = factor * self->range.max; break; } } /** * hkl_parameter_min_max_set: * @self: the this ptr * @min: the minimum value to set * @max: the maximum value to set * @unit_type: the unit type (default or user) of the min, max * @error: return location for a GError, or NULL * * set the #HklParameter range. * @todo test and set the GError * * Returns: TRUE on success, FALSE if an error occurred **/ int hkl_parameter_min_max_set(HklParameter *self, double min, double max, HklUnitEnum unit_type, GError **error) { double factor; hkl_error (error == NULL || *error == NULL); if (min > max){ g_set_error(error, HKL_PARAMETER_ERROR, HKL_PARAMETER_ERROR_MIN_MAX_SET, "can not set this range min > max\n"); return FALSE; } switch (unit_type){ case HKL_UNIT_DEFAULT: self->range.min = min; self->range.max = max; break; case HKL_UNIT_USER: factor = hkl_unit_factor(self->unit, self->punit); self->range.min = min / factor; self->range.max = max / factor; break; } return TRUE; } /** * hkl_parameter_fit_get: * @self: the this ptr * * Retuen value: the #HklParameter fit value, True is the parameter can be fitted, not otherwise * @todo test **/ int hkl_parameter_fit_get(const HklParameter *self) { return self->fit; } /** * hkl_parameter_fit_set: * @self: the this ptr * @fit: the fit value to set * * set the #HklParameter fit value, True is the parameter can be fitted, not otherwise * @todo test **/ void hkl_parameter_fit_set(HklParameter *self, int fit) { self->fit = fit; } /** * hkl_parameter_randomize: (skip) * @self: * * randomize the #HklParameter value into the min,max range **/ void hkl_parameter_randomize(HklParameter *self) { self->ops->randomize(self); } /** * hkl_parameter_is_valid: (skip) * @self: * * check if the value of the #HklParameter is in the min,max range * * Returns: **/ int hkl_parameter_is_valid(const HklParameter *self) { return self->ops->is_valid(self); } /** * hkl_parameter_is_valid_range: (skip) * @self: * * check if the value of the #HklParameter is in the min,max range * strictly (min < value < max). * * Returns: **/ int hkl_parameter_is_valid_range(const HklParameter *self) { return self->ops->is_valid_range(self); } /** * hkl_parameter_fprintf: (skip) * @f: * @self: * * print into the #FILE f an #HklParameter **/ void hkl_parameter_fprintf(FILE *f, const HklParameter *self) { double factor = hkl_unit_factor(self->unit, self->punit); if (self->punit) fprintf(f, "\"%s\" : %.7f %s [%.7f : %.7f] (%d)", self->name, self->_value * factor, self->punit->repr, self->range.min * factor, self->range.max * factor, self->fit); else fprintf(f, "\"%s\" : %.7f [%.7f : %.7f] (%d)", self->name, self->_value * factor, self->range.min * factor, self->range.max * factor, self->fit); } /** * hkl_parameter_axis_v_get: * @self: the this ptr * * Returns: (allow-none): **/ const HklVector *hkl_parameter_axis_v_get(const HklParameter *self) { return self->ops->axis_v_get(self); } /** * hkl_parameter_quaternion_get: * @self: the this ptr * * Returns: (allow-none): **/ const HklQuaternion *hkl_parameter_quaternion_get(const HklParameter *self) { return self->ops->quaternion_get(self); } /** * hkl_parameter_description_get: * @self: the this ptr * * Returns: the #HklParameter description **/ const char *hkl_parameter_description_get(const HklParameter *self) { return self->description; } /** * hkl_parameter_transformation_cmp: (skip) * @self: the this ptr * @p2: the second parameter to test with * * Returns: if two parameter transformations are compatibles. * (0) compatible, (!= 0) not-compatible **/ int hkl_parameter_transformation_cmp(const HklParameter *self, const HklParameter *p2) { return self->ops->transformation_cmp(self, p2); } /** * hkl_parameter_transformation_apply: (skip) * @self: the this ptr * @v: the #HklVector to transform * * Returns: the transformed #HklVector **/ HklVector hkl_parameter_transformation_apply(const HklParameter *self, const HklVector *v) { return self->ops->transformation_apply(self, v); } hkl-5.0.0.2449/hkl/hkl-pseudoaxis-common-readonly.c0000644000175000017500000002203213236600666022105 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl-pseudoaxis-common-readonly-private.h" #include "hkl-pseudoaxis-private.h" /* incidence */ typedef struct _HklEngineIncidence HklEngineIncidence; struct _HklEngineIncidence { HklEngine engine; HklParameter *incidence; HklParameter *azimuth; }; #define HKL_MODE_INCIDENCE_ERROR hkl_mode_incidence_error_quark () static GQuark hkl_mode_incidence_error_quark (void) { return g_quark_from_static_string ("hkl-mode-incidence-error-quark"); } typedef enum { HKL_MODE_INCIDENCE_ERROR_GET, /* can not get the engine */ HKL_MODE_INCIDENCE_ERROR_SET, /* can not set the engine */ } HklModeIncidenceError; static int hkl_mode_incidence_get_real(HklMode *base, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error) { HklVector ki; double incidence; double azimuth; static const HklVector Y = { .data = {0, 1, 0}, }; if (!base || !engine || !engine->mode || !geometry || !detector || !sample){ g_set_error(error, HKL_MODE_INCIDENCE_ERROR, HKL_MODE_INCIDENCE_ERROR_GET, "internal error"); return FALSE; } HklEngineIncidence *engine_incidence = container_of(engine, HklEngineIncidence, engine); const HklModeIncidence *mode = container_of(base, HklModeIncidence, parent); HklVector n = { .data = { mode->n_x->_value, mode->n_y->_value, mode->n_z->_value, } }; /* first check the parameters */ if (hkl_vector_is_null(&n)){ g_set_error(error, HKL_MODE_INCIDENCE_ERROR, HKL_MODE_INCIDENCE_ERROR_GET, "can not compute the incidence when the surface vector is null."); return FALSE; } /* compute the orientation of the surface */ const HklHolder *sample_holder = hkl_geometry_sample_holder_get(geometry, sample); hkl_vector_rotated_quaternion(&n, &sample_holder->q); ki = hkl_geometry_ki_get(geometry); incidence = _incidence(&n, &ki); hkl_vector_project_on_plan(&n, &ki); azimuth = hkl_vector_angle(&n, &Y); engine_incidence->incidence->_value = incidence; engine_incidence->azimuth->_value = azimuth; return TRUE; } static int hkl_mode_readonly_set_real(HklMode *base, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error) { g_set_error(error, HKL_MODE_INCIDENCE_ERROR, HKL_MODE_INCIDENCE_ERROR_SET, "The \"%s\" engine is readonly", base->info->name); return FALSE; } HklMode *hkl_mode_incidence_new(const HklModeInfo *info) { static const HklModeOperations operations = { HKL_MODE_OPERATIONS_DEFAULTS, .capabilities = HKL_ENGINE_CAPABILITIES_READABLE, .get = hkl_mode_incidence_get_real, .set = hkl_mode_readonly_set_real, }; HklModeIncidence *self = HKL_MALLOC(HklModeIncidence); /* the base constructor; */ hkl_mode_init(&self->parent, info, &operations, TRUE); self->n_x = register_mode_parameter(&self->parent, 0); self->n_y = register_mode_parameter(&self->parent, 1); self->n_z = register_mode_parameter(&self->parent, 2); return &self->parent; } static void hkl_engine_incidence_free_real(HklEngine *base) { HklEngineIncidence *self=container_of(base, HklEngineIncidence, engine); hkl_engine_release(&self->engine); free(self); } HklEngine *hkl_engine_incidence_new(HklEngineList *engines) { HklEngineIncidence *self; static const HklParameter incidence = { HKL_PARAMETER_DEFAULTS_ANGLE, .name = "incidence", .description = "incidence of the incomming beam.", }; static const HklParameter azimuth = { HKL_PARAMETER_DEFAULTS_ANGLE, .name = "azimuth", .description = "azimuth of the sample surface (projection of $\\vec{n}$ on the $yOz$ plan", }; static const HklParameter *pseudo_axes[] = {&incidence, &azimuth}; static HklEngineInfo info = { HKL_ENGINE_INFO("incidence", pseudo_axes, HKL_ENGINE_DEPENDENCIES_AXES | HKL_ENGINE_DEPENDENCIES_SAMPLE), }; static HklEngineOperations operations = { HKL_ENGINE_OPERATIONS_DEFAULTS, .free=hkl_engine_incidence_free_real, }; self = HKL_MALLOC(HklEngineIncidence); hkl_engine_init(&self->engine, &info, &operations, engines); self->incidence = register_pseudo_axis(&self->engine, engines, &incidence); self->azimuth = register_pseudo_axis(&self->engine, engines, &azimuth); return &self->engine; } /* emergence */ typedef struct _HklEngineEmergence HklEngineEmergence; struct _HklEngineEmergence { HklEngine engine; HklParameter *emergence; HklParameter *azimuth; }; #define HKL_MODE_EMERGENCE_ERROR hkl_mode_emergence_error_quark () static GQuark hkl_mode_emergence_error_quark (void) { return g_quark_from_static_string ("hkl-mode-emergence-error-quark"); } typedef enum { HKL_MODE_EMERGENCE_ERROR_GET, /* can not get the engine */ HKL_MODE_EMERGENCE_ERROR_SET, /* can not set the engine */ } HklModeEmergenceError; static int hkl_mode_emergence_get_real(HklMode *base, HklEngine *engine_base, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error) { HklVector kf; double emergence; double azimuth; static const HklVector X = { .data = {1, 0, 0}, }; static const HklVector Y = { .data = {0, 1, 0}, }; if (!base || !engine_base || !engine_base->mode || !geometry || !detector || !sample){ g_set_error(error, HKL_MODE_EMERGENCE_ERROR, HKL_MODE_EMERGENCE_ERROR_GET, "internal error"); return FALSE; } HklEngineEmergence *engine = container_of(engine_base, HklEngineEmergence, engine); const HklModeIncidence *mode = container_of(base, HklModeIncidence, parent); HklVector n = { .data = { mode->n_x->_value, mode->n_y->_value, mode->n_z->_value, } }; /* first check the parameters */ if (hkl_vector_is_null(&n)){ g_set_error(error, HKL_MODE_EMERGENCE_ERROR, HKL_MODE_EMERGENCE_ERROR_GET, "Can not compute the emergence when the surface vector is null."); return FALSE; } /* compute the orientation of the surface */ const HklHolder *sample_holder = hkl_geometry_sample_holder_get(geometry, sample); hkl_vector_rotated_quaternion(&n, &sample_holder->q); kf = hkl_geometry_kf_get(geometry, detector); emergence = _emergence(&n, &kf); hkl_vector_project_on_plan(&n, &X); azimuth = hkl_vector_angle(&n, &Y); engine->emergence->_value = emergence; engine->azimuth->_value = azimuth; return TRUE; } HklMode *hkl_mode_emergence_new(const HklModeInfo *info) { static const HklModeOperations operations = { HKL_MODE_OPERATIONS_DEFAULTS, .capabilities = HKL_ENGINE_CAPABILITIES_READABLE, .get = hkl_mode_emergence_get_real, .set = hkl_mode_readonly_set_real, }; HklModeIncidence *self = HKL_MALLOC(HklModeIncidence); /* the base constructor; */ hkl_mode_init(&self->parent, info, &operations, TRUE); self->n_x = register_mode_parameter(&self->parent, 0); self->n_y = register_mode_parameter(&self->parent, 1); self->n_z = register_mode_parameter(&self->parent, 2); return &self->parent; } static void hkl_engine_emergence_free_real(HklEngine *base) { HklEngineEmergence *self=container_of(base, HklEngineEmergence, engine); hkl_engine_release(&self->engine); free(self); } HklEngine *hkl_engine_emergence_new(HklEngineList *engines) { HklEngineEmergence *self; static const HklParameter emergence = { HKL_PARAMETER_DEFAULTS_ANGLE, .name = "emergence", .description = "incidence of the outgoing beam.", }; static const HklParameter azimuth = { HKL_PARAMETER_DEFAULTS_ANGLE, .name = "azimuth", .description = "azimuth of the sample surface (projection of $\\vec{n}$ on the $yOz$ plan", }; static const HklParameter *pseudo_axes[] = {&emergence, &azimuth}; static HklEngineInfo info = { HKL_ENGINE_INFO("emergence", pseudo_axes, HKL_ENGINE_DEPENDENCIES_AXES | HKL_ENGINE_DEPENDENCIES_SAMPLE), }; static HklEngineOperations operations = { HKL_ENGINE_OPERATIONS_DEFAULTS, .free=hkl_engine_emergence_free_real, }; self = HKL_MALLOC(HklEngineEmergence); hkl_engine_init(&self->engine, &info, &operations, engines); self->emergence = register_pseudo_axis(&self->engine, engines, &emergence); self->azimuth = register_pseudo_axis(&self->engine, engines, &azimuth); return &self->engine; } hkl-5.0.0.2449/hkl/hkl-unit.c0000644000175000017500000000474513236600666015612 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for GSL_NAN #include // for gsl_isnan #include // for free, NULL #include "hkl-macros-private.h" // for HKL_MALLOC #include "hkl-unit-private.h" // for HklUnit, etc #include "hkl.h" // for FALSE, HKL_DEGTORAD, etc /** * hkl_unit_dup: (skip) * @self: * * copy an #Hklunit * * Returns: the copied #HklUnit (memory must be release with * hkl_unit_free) **/ HklUnit* hkl_unit_dup(const HklUnit *self) { if (!self) return NULL; HklUnit *dup = HKL_MALLOC(HklUnit); *dup = *self; return dup; } /** * hkl_unit_free: (skip) * @self: * * release the memory of an #HklUnit **/ void hkl_unit_free(HklUnit *self) { if (self) free(self); } /** * hkl_unit_compatible: (skip) * @self: the first @HklUnit * @unit: the second @HklUnit to check * * check if two units are compatible. * * Returns: TRUE or FALSE **/ int hkl_unit_compatible(const HklUnit *unit1, const HklUnit *unit2) { int res = FALSE; if (unit1 == NULL) { if (unit2 == NULL) { res = TRUE; }else{ res = FALSE; } }else{ if (unit2 == NULL){ res = FALSE; }else{ res = ( (unit1->dimension.l == unit2->dimension.l) && (unit1->dimension.m == unit2->dimension.m) && (unit1->dimension.t == unit2->dimension.t) && (unit1->dimension.i == unit2->dimension.i) && (unit1->dimension.th == unit2->dimension.th) && (unit1->dimension.n == unit2->dimension.n) && (unit1->dimension.j == unit2->dimension.j)); } } return res; } hkl-5.0.0.2449/hkl/hkl-vector-private.h0000644000175000017500000000712513236600666017605 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_VECTOR_PRIVATE_H__ #define __HKL_VECTOR_PRIVATE_H__ #include // for FILE #include "hkl.h" // for G_BEGIN_DECLS, etc G_BEGIN_DECLS HklVector* hkl_vector_dup(const HklVector* self); void hkl_vector_free(HklVector* self); extern void hkl_vector_fprintf(FILE *file, const HklVector *self); extern int hkl_vector_cmp(const HklVector *self, const HklVector *vector); extern int hkl_vector_is_opposite(const HklVector *self, const HklVector *vector); extern void hkl_vector_add_vector(HklVector *self, const HklVector *vector); extern void hkl_vector_minus_vector(HklVector *self, const HklVector *vector); extern void hkl_vector_div_double(HklVector *self, const double d); extern void hkl_vector_times_double(HklVector *self, const double d); extern void hkl_vector_times_vector(HklVector *self, const HklVector *vector); extern void hkl_vector_times_matrix(HklVector *self, const HklMatrix *m); extern double hkl_vector_sum(const HklVector *self); extern double hkl_vector_scalar_product(const HklVector *self, const HklVector *vector); extern void hkl_vector_vectorial_product(HklVector *self, const HklVector *vector); extern double hkl_vector_angle(const HklVector *self, const HklVector *vector); extern double hkl_vector_oriented_angle(const HklVector *self, const HklVector *vector, const HklVector *ref); extern double hkl_vector_oriented_angle_points(const HklVector *self, const HklVector *p2, const HklVector *p3, const HklVector *ref); extern double hkl_vector_norm2(const HklVector *self); extern int hkl_vector_normalize(HklVector *self); extern int hkl_vector_is_colinear(const HklVector *self, const HklVector *vector); extern void hkl_vector_randomize(HklVector *self); extern void hkl_vector_randomize_vector(HklVector *self, const HklVector *vector); extern void hkl_vector_randomize_vector_vector(HklVector *self, const HklVector *vector1, const HklVector *vector2); extern void hkl_vector_rotated_around_vector(HklVector *self, const HklVector *axe, double angle); extern void hkl_vector_rotated_quaternion(HklVector *self, const HklQuaternion *qr); extern void hkl_vector_rotated_around_line(HklVector *self, double angle, const HklVector *c1, const HklVector *c2); extern int hkl_vector_is_null(const HklVector *self); extern void hkl_vector_project_on_plan(HklVector *self, const HklVector *normal); extern void hkl_vector_project_on_plan_with_point(HklVector *self, const HklVector *normal, const HklVector *point); G_END_DECLS #endif hkl-5.0.0.2449/hkl/hkl-source.c0000644000175000017500000000671713236600666016134 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for fabs, sqrt #include // for fprintf, FILE #include // for free #include "hkl-macros-private.h" // for HKL_MALLOC #include "hkl-source-private.h" // for HklSource #include "hkl-vector-private.h" // for hkl_vector_div_double, etc #include "hkl.h" // for HKL_EPSILON, FALSE, etc /** * hkl_source_dup: * @self: the #Hklsource to copy * * copy constructor * TODO test * * Returns: **/ HklSource *hkl_source_dup(const HklSource *self) { HklSource *dup = HKL_MALLOC(HklSource); *dup = *self; return dup; } /** * hkl_source_free: * @self: the #Hklsource to delete * * destructor * TODO: test **/ void hkl_source_free(HklSource *self) { if (self) free(self); } /** * hkl_source_init: * @self: the #Hklsource to initialize * @wave_length: the wave length to set * @x: x coordinates of the ki vector * @y: y coordinates of the ki vector * @z: z coordinates of the ki vector * * initialize the #HklSource * * Returns: HKL_SUCCESS if everythongs goes fine, HKL_FAIL otherwise **/ int hkl_source_init(HklSource *self, double wave_length, double x, double y, double z) { if (wave_length > HKL_EPSILON && ( x > HKL_EPSILON || y > HKL_EPSILON || z > HKL_EPSILON)) { double norm; norm = sqrt(x*x + y*y + z*z); self->wave_length = wave_length; hkl_vector_init(&self->direction, x, y, z); hkl_vector_div_double(&self->direction, norm); return TRUE; } else return FALSE; } /** * hkl_source_cmp: (skip) * @self: 1st #Hklsource * @s: 2nd #Hklsource * * compare two sources * * Returns: **/ int hkl_source_cmp(HklSource const *self, HklSource const *s) { return ( (fabs(self->wave_length - s->wave_length) < HKL_EPSILON) && hkl_vector_is_colinear(&self->direction, &s->direction)); } /** * hkl_source_compute_ki: (skip) * @self: * @ki: (out caller-allocates): * * compute the ki hkl_vector **/ void hkl_source_compute_ki(HklSource const *self, HklVector *ki) { *ki = self->direction; hkl_vector_times_double(ki, HKL_TAU / self->wave_length); } /** * hkl_source_get_wavelength: (skip) * @self: * * get the wave_length * * Returns: the wave_length **/ double hkl_source_get_wavelength(HklSource const *self) { return self->wave_length; } /** * hkl_source_fprintf: (skip) * @f: * @self: * * printf the source **/ void hkl_source_fprintf(FILE *f, HklSource const *self) { fprintf(f, "%f", self->wave_length); hkl_vector_fprintf(f, &self->direction); } hkl-5.0.0.2449/hkl/hkl-engine-petra3-p09-eh2.c0000644000175000017500000002302213236600666020343 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for gsl_isnan #include "hkl-factory-private.h" // for autodata_factories_, etc #include "hkl-pseudoaxis-common-hkl-private.h" #define MU "mu" #define OMEGA "omega" #define CHI "chi" #define PHI "phi" #define DELTA "delta" #define GAMMA "gamma" /********/ /* mode */ /********/ static HklMode *zaxis_alpha_fixed() { static const char *axes_r[] = {MU, OMEGA, CHI, PHI, DELTA, GAMMA}; static const char *axes_w[] = {OMEGA, DELTA, GAMMA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("zaxis + alpha-fixed", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklMode *zaxis_beta_fixed() { static const char *axes_r[] = {MU, OMEGA, CHI, PHI, DELTA, GAMMA}; static const char *axes_w[] = {MU, DELTA, GAMMA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("zaxis + beta-fixed", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } /* zaxis + alpha=beta */ static int _reflectivity(const gsl_vector *x, void *params, gsl_vector *f) { const double mu = x->data[0]; const double gamma = x->data[3]; CHECK_NAN(x->data, x->size); RUBh_minus_Q(x->data, params, f->data); f->data[3] = mu - gamma; return GSL_SUCCESS; } static const HklFunction reflectivity = { .function = _reflectivity, .size = 4, }; static HklMode *zaxis_alpha_eq_beta() { static const char *axes_r[] = {MU, OMEGA, CHI, PHI, DELTA, GAMMA}; static const char *axes_w[] = {MU, OMEGA, DELTA, GAMMA}; static const HklFunction *functions[] = {&reflectivity}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("zaxis + alpha=beta", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } /* 4-circles bissecting horizontal */ static int _bissector_horizontal(const gsl_vector *x, void *params, gsl_vector *f) { const double omega = x->data[0]; const double delta = x->data[3]; CHECK_NAN(x->data, x->size); RUBh_minus_Q(x->data, params, f->data); f->data[3] = delta - 2 * fmod(omega, M_PI); return GSL_SUCCESS; } static const HklFunction bissector_horizontal = { .function = _bissector_horizontal, .size = 4, }; static HklMode *fourc_bissector_horizontal() { static const char *axes_r[] = {MU, OMEGA, CHI, PHI, DELTA, GAMMA}; static const char *axes_w[] = {OMEGA, CHI, PHI, DELTA}; static const HklFunction *functions[] = {&bissector_horizontal}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("4-circles bissecting horizontal", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklMode *fourc_constant_omega_horizontal() { static const char *axes_r[] = {MU, OMEGA, CHI, PHI, DELTA, GAMMA}; static const char *axes_w[] = {CHI, PHI, DELTA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("4-circles constant omega horizontal", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklMode *fourc_constant_chi_horizontal() { static const char *axes_r[] = {MU, OMEGA, CHI, PHI, DELTA, GAMMA}; static const char *axes_w[] = {OMEGA, PHI, DELTA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("4-circles constant chi horizontal", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklMode *fourc_constant_phi_horizontal() { static const char *axes_r[] = {MU, OMEGA, CHI, PHI, DELTA, GAMMA}; static const char *axes_w[] = {OMEGA, CHI, DELTA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("4-circles constant phi horizontal", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklMode *lifting_detector_mu() { static const char *axes_r[] = {MU, OMEGA, CHI, PHI, DELTA, GAMMA}; static const char *axes_w[] = {MU, DELTA, GAMMA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("lifting detector mu", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklMode *lifting_detector_omega() { static const char *axes_r[] = {MU, OMEGA, CHI, PHI, DELTA, GAMMA}; static const char *axes_w[] = {OMEGA, DELTA, GAMMA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("lifting detector omega", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklMode *lifting_detector_chi() { static const char *axes_r[] = {MU, OMEGA, CHI, PHI, DELTA, GAMMA}; static const char *axes_w[] = {CHI, DELTA, GAMMA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("lifting detector chi", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklMode *lifting_detector_phi() { static const char *axes_r[] = {MU, OMEGA, CHI, PHI, DELTA, GAMMA}; static const char *axes_w[] = {PHI, DELTA, GAMMA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("lifting detector phi", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } /**********************/ /* pseudo axis engine */ /**********************/ static HklEngine *hkl_engine_petra3_p09_eh2_hkl_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_hkl_new(engines); default_mode = zaxis_alpha_fixed(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); hkl_engine_add_mode(self, zaxis_beta_fixed()); hkl_engine_add_mode(self, zaxis_alpha_eq_beta()); hkl_engine_add_mode(self, fourc_bissector_horizontal()); hkl_engine_add_mode(self, fourc_constant_omega_horizontal()); hkl_engine_add_mode(self, fourc_constant_chi_horizontal()); hkl_engine_add_mode(self, fourc_constant_phi_horizontal()); hkl_engine_add_mode(self, lifting_detector_mu()); hkl_engine_add_mode(self, lifting_detector_omega()); hkl_engine_add_mode(self, lifting_detector_chi()); hkl_engine_add_mode(self, lifting_detector_phi()); return self; } /******************/ /* PETRA3 P09 EH2 */ /******************/ #define HKL_GEOMETRY_TYPE_PETRA3_P09_EH2_DESCRIPTION \ "+ xrays source fix allong the :math:`\\vec{x}` direction (1, 0, 0)\n" \ "+ 4 axes for the sample\n" \ "\n" \ " + **" MU "** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ " + **" OMEGA "** : rotation around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ " + **" CHI "** : rotating around the :math:`\\vec{x}` direction (1, 0, 0)\n" \ " + **" PHI "** : rotating around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ "\n" \ "+ 3 axis for the detector\n" \ "\n" \ " + **" MU "** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ " + **" DELTA "** : rotation around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ " + **" GAMMA "** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" static const char* hkl_geometry_petra3_p09_eh2_axes[] = {MU, OMEGA, CHI, PHI, DELTA, GAMMA}; static HklGeometry *hkl_geometry_new_petra3_p09_eh2(const HklFactory *factory) { HklGeometry *self = hkl_geometry_new(factory, &hkl_geometry_operations_defaults); HklHolder *h; h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, MU, 0, -1, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, OMEGA, 0, 0, 1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, CHI, 1, 0, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, PHI, 0, 0, 1, &hkl_unit_angle_deg); h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, MU, 0, -1, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, DELTA, 0, 0, 1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, GAMMA, 0, -1, 0, &hkl_unit_angle_deg); return self; } static HklEngineList *hkl_engine_list_new_petra3_p09_eh2(const HklFactory *factory) { HklEngineList *self = hkl_engine_list_new(); hkl_engine_petra3_p09_eh2_hkl_new(self); return self; } REGISTER_DIFFRACTOMETER(petra3_p09_eh2, "PETRA3 P09 EH2", HKL_GEOMETRY_TYPE_PETRA3_P09_EH2_DESCRIPTION); hkl-5.0.0.2449/hkl/hkl-pseudoaxis-common-q-private.h0000644000175000017500000000244713236600666022215 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_PSEUDOAXIS_COMMON_Q_PRIVATE_H__ #define __HKL_PSEUDOAXIS_COMMON_Q_PRIVATE_H__ #include "hkl.h" G_BEGIN_DECLS extern double qmax(double wavelength); extern HklEngine *hkl_engine_q_new(HklEngineList *engines); extern HklEngine *hkl_engine_q2_new(HklEngineList *engines); extern HklEngine *hkl_engine_qper_qpar_new(HklEngineList *engines); G_END_DECLS #endif hkl-5.0.0.2449/hkl/hkl-trajectory.c0000644000175000017500000000761313237017527017015 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl-macros-private.h" #include "hkl-geometry-private.h" #include "hkl-trajectory-private.h" HklTrajectoryResult * hkl_trajectory_result_new(void) { HklTrajectoryResult *self = HKL_MALLOC(HklTrajectoryResult); darray_init(self->geometries); return self; } void hkl_trajectory_result_free(HklTrajectoryResult *self) { HklGeometry **geometry; darray_foreach(geometry, self->geometries){ hkl_geometry_free(*geometry); } darray_free(self->geometries); } void hkl_trajectory_add_geometry(HklTrajectoryResult *self, const HklGeometry *geometry) { darray_append(self->geometries, hkl_geometry_new_copy(geometry)); } /* HklTrajectoryStats */ HklTrajectoryStats *hkl_trajectory_stats_new(int n) { HklTrajectoryStats *self = HKL_MALLOC(HklTrajectoryStats); self->n = 0; darray_init(self->nb_solutions); darray_init(self->axes_min); darray_init(self->axes_max); darray_init(self->axes_range); darray_resize0(self->axes_range, n); return self; } void hkl_trajectory_stats_free(HklTrajectoryStats *self) { darray_free(self->axes_range); darray_free(self->axes_max); darray_free(self->axes_min); darray_free(self->nb_solutions); free(self); } void hkl_trajectory_stats_add(HklTrajectoryStats *self, const HklGeometryList *geometries) { size_t i; const HklGeometryListItem *item = hkl_geometry_list_items_first_get(geometries); const HklGeometry *geometry = hkl_geometry_list_item_geometry_get(item); size_t n = darray_size(*hkl_geometry_axis_names_get(geometry)); darray_append(self->nb_solutions, hkl_geometry_list_n_items_get(geometries)); if(self->n == 0){ darray_resize(self->axes_min, n); darray_resize(self->axes_max, n); darray_resize(self->axes_range, n); hkl_geometry_axis_values_get(geometry, &darray_item(self->axes_min, 0), n, HKL_UNIT_USER); hkl_geometry_axis_values_get(geometry, &darray_item(self->axes_max, 0), n, HKL_UNIT_USER); }else{ double values[n]; hkl_geometry_axis_values_get(geometry, values, n, HKL_UNIT_USER); for(i=0; iaxes_min, i)) darray_item(self->axes_min, i) = values[i]; else if (values[i] > darray_item(self->axes_max, i)) darray_item(self->axes_max, i) = values[i]; } } for(i=0;iaxes_range, i) = darray_item(self->axes_max, i) - darray_item(self->axes_min, i); self->n += 1; } void hkl_trajectory_stats_fprintf(FILE *f, const HklTrajectoryStats *self) { size_t *p; double *v; fprintf(f, "Number of points of the trajectory: %zd\n", self->n); fprintf(f, "Solutions per points:"); darray_foreach(p, self->nb_solutions){ fprintf(f, " %zd", *p); } fprintf(f, "\n"); fprintf(f, "Axes minium:"); darray_foreach(v, self->axes_min){ fprintf(f, " %f", *v); } fprintf(f, "\n"); fprintf(f, "Axes max:"); darray_foreach(v, self->axes_max){ fprintf(f, " %f", *v); } fprintf(f, "\n"); fprintf(f, "Axes range:"); darray_foreach(v, self->axes_range){ fprintf(f, " %f", *v); } fprintf(f, "\n"); } hkl-5.0.0.2449/hkl/hkl-pseudoaxis-common-eulerians.c0000644000175000017500000002002513236600666022257 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel * Jens Krüger */ #include // for gsl_sf_angle_restrict_symm #include // for sin, asin, M_PI_2, tan, etc #include // for free #include // for uint #include "hkl-geometry-private.h" #include "hkl-macros-private.h" // for HKL_MALLOC #include "hkl-parameter-private.h" // for _HklParameter, etc #include "hkl-pseudoaxis-common-eulerians-private.h" #include "hkl-pseudoaxis-private.h" // for _HklPseudoAxis, etc #include "hkl.h" // for HklParameter, HklPseudoAxis, etc #include "hkl/ccan/array_size/array_size.h" // for ARRAY_SIZE #include "hkl/ccan/container_of/container_of.h" // for container_of #include "hkl/ccan/darray/darray.h" // for darray_item typedef struct _HklModeEulerians HklModeEulerians; typedef struct _HklEngineEulerians HklEngineEulerians; struct _HklModeEulerians { HklMode parent; HklParameter *solutions; }; struct _HklEngineEulerians { HklEngine engine; HklParameter *omega; HklParameter *chi; HklParameter *phi; }; #define HKL_MODE_EULERIANS_ERROR hkl_mode_eulerians_error_quark () static GQuark hkl_mode_eulerians_error_quark (void) { return g_quark_from_static_string ("hkl-mode-eulerians-error-quark"); } typedef enum { HKL_MODE_EULERIANS_ERROR_SET, /* can not set the engine */ } HklModeEuleriansError; static int kappa_to_eulerian(const double angles[], double *omega, double *chi, double *phi, double alpha, int solution) { const double komega = angles[0]; const double kappa = gsl_sf_angle_restrict_symm(angles[1]); const double kphi = angles[2]; const double p = atan(tan(kappa/2.) * cos(alpha)); if (solution){ *omega = komega + p - M_PI_2; *chi = 2 * asin(sin(kappa/2.) * sin(alpha)); *phi = kphi + p + M_PI_2; }else{ *omega = komega + p + M_PI_2; *chi = -2 * asin(sin(kappa/2.) * sin(alpha)); *phi = kphi + p - M_PI_2; } return TRUE; } static int eulerian_to_kappa(const double omega, const double chi, const double phi, double angles[], double alpha, double solution) { int status = TRUE; double *komega = &angles[0]; double *kappa = &angles[1]; double *kphi = &angles[2]; if (fabs(chi) <= alpha * 2){ const double p = asin(tan(chi/2.)/tan(alpha)); if (solution){ *komega = omega - p + M_PI_2; *kappa = 2 * asin(sin(chi/2.)/sin(alpha)); *kphi = phi - p - M_PI_2; }else{ *komega = omega + p - M_PI_2; *kappa = -2 * asin(sin(chi/2.)/sin(alpha)); *kphi = phi + p + M_PI_2; } }else status = FALSE; return status; } void kappa_2_kappap(double komega, double kappa, double kphi, double alpha, double *komegap, double *kappap, double *kphip) { double p = atan(tan(kappa/2.) * cos(alpha)); double omega = komega + p - M_PI_2; double phi = kphi + p + M_PI_2; *komegap = gsl_sf_angle_restrict_symm(2*omega - komega); *kappap = -kappa; *kphip = gsl_sf_angle_restrict_symm(2*phi - kphi); } /***********/ /* HklMode */ /***********/ static int hkl_mode_get_eulerians_real(HklMode *base, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error) { HklModeEulerians *self = container_of(base, HklModeEulerians, parent); HklEngineEulerians *eulerians = container_of(engine, HklEngineEulerians, engine);; const double angles[] = { hkl_parameter_value_get( hkl_geometry_get_axis_by_name(geometry, "komega"), HKL_UNIT_DEFAULT), hkl_parameter_value_get( hkl_geometry_get_axis_by_name(geometry, "kappa"), HKL_UNIT_DEFAULT), hkl_parameter_value_get( hkl_geometry_get_axis_by_name(geometry, "kphi"), HKL_UNIT_DEFAULT), }; hkl_geometry_update(geometry); kappa_to_eulerian(angles, &eulerians->omega->_value, &eulerians->chi->_value, &eulerians->phi->_value, 50 * HKL_DEGTORAD, self->solutions->_value); return TRUE; } static int hkl_mode_set_eulerians_real(HklMode *base, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error) { HklModeEulerians *self = container_of(base, HklModeEulerians, parent); HklEngineEulerians *eulerians = container_of(engine, HklEngineEulerians, engine);; double angles[3]; if(!eulerian_to_kappa(eulerians->omega->_value, eulerians->chi->_value, eulerians->phi->_value, angles, 50 * HKL_DEGTORAD, self->solutions->_value)){ g_set_error(error, HKL_MODE_EULERIANS_ERROR, HKL_MODE_EULERIANS_ERROR_SET, "unreachable solution : 0° < chi < 50°"); return FALSE; }else hkl_engine_add_geometry(engine, angles); return TRUE; } static HklMode *mode_eulerians() { static const char *axes[] = {"komega", "kappa", "kphi"}; static const HklParameter parameters[] = { { HKL_PARAMETER_DEFAULTS,.name = "solutions", ._value = 1, .description = "(0/1) to select the first or second solution", .range = { .max = 1 }, }, }; static const HklModeInfo info = { HKL_MODE_INFO_WITH_PARAMS("eulerians", axes, axes, parameters), }; static const HklModeOperations operations = { HKL_MODE_OPERATIONS_DEFAULTS, .get = hkl_mode_get_eulerians_real, .set = hkl_mode_set_eulerians_real, }; HklModeEulerians *self = HKL_MALLOC(HklModeEulerians); /* the base constructor; */ hkl_mode_init(&self->parent, &info, &operations, TRUE); self->solutions = register_mode_parameter(&self->parent, 0); return &self->parent; }; /*************/ /* HklEngine */ /*************/ static void hkl_engine_eulerians_free_real(HklEngine *base) { HklEngineEulerians *self; self = container_of(base, HklEngineEulerians, engine); hkl_engine_release(&self->engine); free(self); } HklEngine *hkl_engine_eulerians_new(HklEngineList *engines) { HklEngineEulerians *self; HklMode *mode; static const HklParameter omega = { HKL_PARAMETER_DEFAULTS_ANGLE, .name = "omega", .description = "omega equivalent for a four circle eulerian geometry", }; static const HklParameter chi = { HKL_PARAMETER_DEFAULTS_ANGLE, .name = "chi", .description = "chi equivalent for a four circle eulerian geometry", }; static const HklParameter phi = { HKL_PARAMETER_DEFAULTS_ANGLE, .name = "phi", .description = "phi equivalent for a four circle eulerian geometry", }; static const HklParameter *pseudo_axes[] = {&omega, &chi, &phi}; static HklEngineInfo info = { HKL_ENGINE_INFO("eulerians", pseudo_axes, HKL_ENGINE_DEPENDENCIES_AXES), }; static HklEngineOperations operations = { HKL_ENGINE_OPERATIONS_DEFAULTS, .free=hkl_engine_eulerians_free_real, }; self = HKL_MALLOC(HklEngineEulerians); hkl_engine_init(&self->engine, &info, &operations, engines); /* add the pseudo axes with the new API */ self->omega = register_pseudo_axis(&self->engine, engines, &omega); self->chi = register_pseudo_axis(&self->engine, engines, &chi); self->phi = register_pseudo_axis(&self->engine, engines, &phi); /* eulerians [default] */ mode = mode_eulerians(); hkl_engine_add_mode(&self->engine, mode); hkl_engine_mode_set(&self->engine, mode); return &self->engine; } hkl-5.0.0.2449/hkl/Makefile.am0000644000175000017500000001144613236600666015743 0ustar00piccapicca00000000000000## Process this file with automake to produce Makefile.in SUBDIRS = ccan . api2 AM_LDFLAGS = \ -no-undefined -version-info 5:0:0 \ $(GLIB_LIBS) \ $(GSL_LIBS) AM_CFLAGS = \ -DG_LOG_DOMAIN=\"Hkl\" \ -I$(top_srcdir) \ -I$(top_builddir) \ $(GLIB_CFLAGS) \ $(GSL_CFLAGS) hkl_c_sources = \ hkl-axis.c \ hkl-detector.c \ hkl-detector-factory.c \ hkl-factory.c \ hkl-geometry.c \ hkl-interval.c \ hkl-lattice.c \ hkl-macros.c \ hkl-matrix.c \ hkl-parameter.c \ hkl-pseudoaxis.c \ hkl-pseudoaxis-auto.c \ hkl-pseudoaxis-common.c \ hkl-pseudoaxis-common-eulerians.c \ hkl-pseudoaxis-common-hkl.c \ hkl-pseudoaxis-common-psi.c \ hkl-pseudoaxis-common-q.c \ hkl-pseudoaxis-common-readonly.c \ hkl-pseudoaxis-common-tth.c \ hkl-engine-2c.c \ hkl-engine-e4c.c \ hkl-engine-k4c.c \ hkl-engine-e6c.c \ hkl-engine-k6c.c \ hkl-engine-petra3-p08-lisa.c \ hkl-engine-petra3-p09-eh2.c \ hkl-engine-soleil-sirius-turret.c \ hkl-engine-soleil-sixs-med.c \ hkl-engine-zaxis.c \ hkl-quaternion.c \ hkl-sample.c \ hkl-source.c \ hkl-trajectory.c \ hkl-unit.c \ hkl-vector.c hkl_public_h_sources = ../hkl.h hkl_private_h_sources = \ hkl-axis-private.h \ hkl-detector-private.h \ hkl-factory-private.h \ hkl-geometry-private.h \ hkl-interval-private.h \ hkl-lattice-private.h \ hkl-macros-private.h \ hkl-matrix-private.h \ hkl-parameter-private.h \ hkl-pseudoaxis-private.h \ hkl-pseudoaxis-auto-private.h \ hkl-pseudoaxis-common-private.h \ hkl-pseudoaxis-common-eulerians-private.h \ hkl-pseudoaxis-common-hkl-private.h \ hkl-pseudoaxis-common-psi-private.h \ hkl-pseudoaxis-common-q-private.h \ hkl-pseudoaxis-common-readonly-private.h \ hkl-pseudoaxis-common-tth-private.h \ hkl-quaternion-private.h \ hkl-sample-private.h \ hkl-source-private.h \ hkl-trajectory-private.h \ hkl-unit-private.h \ hkl-vector-private.h lib_LTLIBRARIES = libhkl.la libhkl_la_SOURCES = $(hkl_c_sources) $(hkl_private_h_sources) libhkl_la_LIBADD = ccan/libccan.la libhkl_la_CFLAGS = \ $(AM_CFLAGS) \ -Wno-initializer-overrides \ -Wno-unused-result \ -fvisibility=hidden # just compile the template diffractometer to be sure that it is valid noinst_LTLIBRARIES = libdummy.la libdummy_la_SOURCES = hkl-engine-template.c # introspection -include $(INTROSPECTION_MAKEFILE) INTROSPECTION_GIRS = INTROSPECTION_SCANNER_ARGS = \ --add-include-path=$(srcdir) \ --add-include-path=. \ --warn-all INTROSPECTION_COMPILER_ARGS = \ --includedir=$(srcdir) \ --includedir=. if HAVE_INTROSPECTION libhkl_la_SOURCES += \ hkl-types.c \ hkl-types.h \ hkl-type-builtins.c \ hkl-type-builtins.h \ hkl-binding.c \ hkl-binding-private.h introspection_files = \ ../hkl.h \ hkl-binding-private.h \ hkl-types.h \ hkl-vector.c \ hkl-matrix.c \ hkl-quaternion.c \ hkl-parameter.c \ hkl-axis.c \ hkl-geometry.c \ hkl-detector.c \ hkl-detector-factory.c \ hkl-lattice.c \ hkl-sample.c \ hkl-pseudoaxis.c \ hkl-factory.c \ hkl-binding.c \ hkl-types.c \ hkl-type-builtins.c \ hkl-type-builtins.h AM_LDFLAGS += $(GOBJECT_LIBS) AM_CFLAGS += $(GOBJECT_CFLAGS) hkl-type-builtins.h: stamp-hkl-type-builtins.h @true stamp-hkl-type-builtins.h: $(hkl_public_h_sources) $(srcdir)/hkl-type-builtins.h.template ( cd $(srcdir) && $(GLIB_MKENUMS) --template hkl-type-builtins.h.template \ $(hkl_public_h_sources) ) >> xgen-gtbh \ && (cmp -s xgen-gtbh hkl-type-builtins.h || cp xgen-gtbh hkl-type-builtins.h ) \ && rm -f xgen-gtbh \ && echo timestamp > $(@F) hkl-type-builtins.c: $(hkl_public_h_sources) $(srcdir)/hkl-type-builtins.c.template hkl-type-builtins.h ( cd $(srcdir) && $(GLIB_MKENUMS) --template hkl-type-builtins.c.template \ $(hkl_public_h_sources) ) > xgen-gtbc \ && cp xgen-gtbc hkl-type-builtins.c \ && rm -f xgen-gtbc Hkl-@VMAJ@.0.gir: $(INTROSPECTION_SCANNER) libhkl.la Makefile Hkl_@VMAJ@_0_gir_NAMESPACE = Hkl Hkl_@VMAJ@_0_gir_VERSION = @VMAJ@.0 Hkl_@VMAJ@_0_gir_LIBS = libhkl.la Hkl_@VMAJ@_0_gir_FILES = $(introspection_files) Hkl_@VMAJ@_0_gir_PACKAGES = gobject-2.0 Hkl_@VMAJ@_0_gir_CFLAGS = $(INCLUDES) $(AM_CPPFLAGS) $(AM_CFLAGS) Hkl_@VMAJ@_0_gir_EXPORT_PACKAGES = hkl-@VMAJ@.0 Hkl_@VMAJ@_0_gir_SCANNERFLAGS = --warn-all --c-include='hkl.h' INTROSPECTION_GIRS += Hkl-@VMAJ@.0.gir girdir = $(datadir)/gir-1.0 gir_DATA = $(INTROSPECTION_GIRS) typelibsdir = $(libdir)/girepository-1.0 typelibs_DATA = $(INTROSPECTION_GIRS:.gir=.typelib) EXTRA_DIST = \ hkl-type-builtins.h.template \ hkl-type-builtins.c.template CLEANFILES = $(gir_DATA) $(typelibs_DATA) stamp-hkl-type-builtins.h hkl-type-builtins.h hkl-type-builtins.c endif # Support for GNU Flymake, in Emacs. check-syntax: AM_CFLAGS += -fsyntax-only -pipe check-syntax: test -z "$(CHK_SOURCES)" || $(COMPILE) $(CHK_SOURCES) # check for includes with iwyu iwyu: @list='$(libhkl_la_SOURCES)';\ for p in $$list; do\ iwyu $(AM_CFLAGS) $$p; \ done; .PHONY: check-syntax iwyu hkl-5.0.0.2449/hkl/hkl-binding.c0000644000175000017500000002641313236600666016241 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2012-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for malloc #include // for NULL, strdup #include // for uint #include "hkl.h" // for HklGeometry, HklEngine, etc #include "hkl-binding-private.h" #include "hkl-factory-private.h" // for __start_xautodata_factories, etc #include "hkl-geometry-private.h" // for _HklGeometry, etc #include "hkl-parameter-private.h" #include "hkl-pseudoaxis-private.h" // for _HklEngine, HklEngineInfo #include "hkl-sample-private.h" // for _HklSampleReflection, etc #include "hkl/ccan/autodata/autodata.h" // for autodata_get #include "hkl/ccan/darray/darray.h" // for darray_foreach, darray_size #include "hkl/ccan/list/list.h" // for list_for_each, list_head /*****************/ /* HklQuaternion */ /*****************/ /** * hkl_quaternion_to_matrix_binding: (rename-to hkl_quaternion_to_matrix) * @self: the #HklQuaternion use to compute the #HklMatrix * * Returns: (transfer full): the @HklQuaternion@ as a @HklMatrix@. */ HklMatrix *hkl_quaternion_to_matrix_binding(const HklQuaternion *self) { HklMatrix *m = hkl_matrix_new(); hkl_quaternion_to_matrix(self, m); return m; } /**************/ /* HklFactory */ /**************/ /** * hkl_factories: * * return all the Hkl factories objects as a dictionnary * * Returns: (element-type utf8 Hkl.Factory) (transfer container): **/ GHashTable *hkl_factories(void) { GHashTable *table = NULL; size_t i, n; HklFactory **factories; table = g_hash_table_new(g_str_hash, g_str_equal); factories = autodata_get(factories, &n); for(i=0; iaxes) == 0) return NULL; *len = darray_size(self->axes); values = malloc(darray_size(self->axes) * sizeof(*values)); darray_foreach(axis, self->axes){ values[i++] = hkl_parameter_value_get(*axis, unit_type); } return values; } /** * hkl_geometry_sample_rotation_get_binding: (rename-to hkl_geometry_sample_rotation_get) * @self: the self @HklGeometry@ * @sample: the rotated sample. * * return the rotation part of the given sample in the laboratory basis. * * Returns: (transfer full): the rotation express as a quaternion. **/ HklQuaternion *hkl_geometry_sample_rotation_get_binding(const HklGeometry *self, const HklSample *sample) { HklQuaternion q = hkl_geometry_sample_rotation_get(self, sample); return hkl_quaternion_dup(&q); } /** * hkl_geometry_detector_rotation_get_binding: (rename-to hkl_geometry_detector_rotation_get) * @self: the self @HklGeometry@ * * return the rotation part of the given detector in the laboratory * basis. * * Returns: (transfer full): the rotation express as a quaternion. **/ HklQuaternion *hkl_geometry_detector_rotation_get_binding(const HklGeometry *self, const HklDetector *detector) { HklQuaternion q = hkl_geometry_detector_rotation_get(self, detector); return hkl_quaternion_dup(&q); } /*******************/ /* HklGeometryList */ /*******************/ /** * hkl_geometry_list_items: * @self: the #HklGeometryList * * Return value: (element-type HklGeometryListItem) (transfer container): list of items, * free the list with g_slist_free when done. **/ GSList* hkl_geometry_list_items(HklGeometryList *self) { GSList *list = NULL; HklGeometryListItem *item; list_for_each(&self->items, item, list) list = g_slist_append(list, item); return list; } /*************/ /* HklEngine */ /*************/ /** * hkl_engine_modes_names_get_binding: (rename-to hkl_engine_modes_names_get) * @self: the this ptr * @length: (out caller-allocates): return the length of the returned array. * * Return value: (array length=length) (transfer none): All the modes supported by the #HklEngine **/ const char **hkl_engine_modes_names_get_binding(const HklEngine *self, size_t *length) { *length = darray_size(self->mode_names); return &darray_item(self->mode_names, 0); } /** * hkl_engine_pseudo_axis_names_get_binding: (rename-to hkl_engine_pseudo_axis_names_get) * @self: the this ptr * @length: (out caller-allocates): return the length of the returned array. * * Return value: (array length=length) (transfer none): All the pseudo_axes names of the #HklEngine * **/ const char **hkl_engine_pseudo_axis_names_get_binding(HklEngine *self, size_t *length) { *length = darray_size(self->pseudo_axis_names); return &darray_item(self->pseudo_axis_names, 0); } /** * hkl_engine_parameters_names_get_binding: (rename-to hkl_engine_parameters_names_get) * @self: the this ptr * @length: (out caller-allocates): return the length of the returned array. * * Return value: (array length=length) (transfer none): All the parameters of #HklEngine. **/ const char **hkl_engine_parameters_names_get_binding(const HklEngine *self, size_t *length) { *length = darray_size(self->mode->parameters_names); return &darray_item(self->mode->parameters_names, 0); } /** * hkl_engine_axis_names_get_binding: (rename-to hkl_engine_axis_names_get) * @self: the this ptr * @mode: the #HklEngineAxesNamesGet * @length: (out caller-allocates): return the length of the returned array. * * Return value: (array length=length) (transfer none): axes of the #HklEngine for the given mode. **/ const char **hkl_engine_axis_names_get_binding(const HklEngine *self, HklEngineAxisNamesGet mode, size_t *length) { const darray_string *axes = hkl_engine_axis_names_get(self, mode); *length = darray_size(*axes); return &darray_item(*axes, 0); } /** * hkl_engine_parameters_values_get_binding: (rename-to hkl_engine_parameters_values_get) * @self: the this ptr * @len: (out caller-allocates): the length of the returned array * @unit_type: the unit type (default or user) of the returned value * * Return value: (array length=len) (transfer container): list of parameters values, * free the list with free when done. **/ double *hkl_engine_parameters_values_get_binding(const HklEngine *self, guint *len, HklUnitEnum unit_type) { double *values; uint i = 0; HklParameter **parameter; if(!self || !len || !self->mode || darray_size(self->mode->parameters) == 0) return NULL; *len = darray_size(self->mode->parameters); values = malloc(*len * sizeof(*values)); darray_foreach(parameter, self->mode->parameters){ values[i++] = hkl_parameter_value_get(*parameter, unit_type); } return values; } /** * hkl_engine_pseudo_axis_values_get_binding: (rename-to hkl_engine_pseudo_axis_values_get) * @self: the this ptr * @len: (out caller-allocates): the length of the returned array * @unit_type: the unit type (default or user) of the returned value * * Return value: (array length=len) (transfer container): list of pseudo axes values, * free the list with free when done. **/ double *hkl_engine_pseudo_axis_values_get_binding(const HklEngine *self, guint *len, HklUnitEnum unit_type) { double *values; uint i = 0; HklParameter **axis; if(!self || !len || darray_size(self->pseudo_axes) == 0) return NULL; *len = darray_size(self->pseudo_axes); values = malloc(darray_size(self->pseudo_axes) * sizeof(*values)); darray_foreach(axis, self->pseudo_axes){ values[i++] = hkl_parameter_value_get(*axis, unit_type); } return values; } /** * hkl_engine_list_engines_get_as_gslist: (rename-to hkl_engine_list_engines_get) * @self: the this ptr * * Return value: (element-type HklEngine) (transfer container): list of engines, * free the list with g_slist_free when done. **/ GSList* hkl_engine_list_engines_get_as_gslist(HklEngineList *self) { GSList *list = NULL; HklEngine **engine; darray_foreach(engine, *self){ list = g_slist_append(list, *engine); } return list; } /*************/ /* HklSample */ /*************/ /** * hkl_sample_reflections_get: * @self: the this ptr * * Return value: (element-type HklSampleReflection) (transfer container): list of reflections, * free the list with g_slist_free when done. */ GSList *hkl_sample_reflections_get(const HklSample *self) { GSList *list = NULL; HklSampleReflection *reflection; list_for_each(&self->reflections, reflection, list){ list = g_slist_append(list, reflection); } return list; } /** * hkl_sample_add_reflection_binding: (rename-to hkl_sample_add_reflection) * @self: the this ptr * @geometry: the geometry of the HklSampleReflection * @detector: the detector of the HklSampleReflection * @h: the h coordinate * @k: the k coordinate * @l: the l coordinate * @error: return location for a GError, or NULL * * Return value: (transfer none): the newly created HklSampleReflection **/ HklSampleReflection *hkl_sample_add_reflection_binding(HklSample *self, const HklGeometry *geometry, const HklDetector *detector, double h, double k, double l, GError **error) { HklSampleReflection *reflection; hkl_error (error == NULL || *error == NULL); reflection = hkl_sample_reflection_new(geometry, detector, h, k, l, error); if(!reflection){ g_assert (error == NULL || *error != NULL); return NULL; } g_assert (error == NULL || *error == NULL); hkl_sample_add_reflection(self, reflection); return reflection; } hkl-5.0.0.2449/hkl/hkl-interval-private.h0000644000175000017500000000464313236600666020131 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef _HKL_INTERVAL_PRIVATE_H #define _HKL_INTERVAL_PRIVATE_H #include "hkl.h" // for G_BEGIN_DECLS, etc G_BEGIN_DECLS typedef struct _HklInterval HklInterval; struct _HklInterval { double min; double max; }; extern HklInterval* hkl_interval_dup(const HklInterval *self); extern void hkl_interval_free(HklInterval *self); extern int hkl_interval_cmp(const HklInterval *self, const HklInterval *interval); extern void hkl_interval_plus_interval(HklInterval *self, const HklInterval *interval); extern void hkl_interval_plus_double(HklInterval *self, double const d); extern void hkl_interval_minus_interval(HklInterval *self, const HklInterval *interval); extern void hkl_interval_minus_double(HklInterval *self, double const d); extern void hkl_interval_times_interval(HklInterval *self, const HklInterval *interval); extern void hkl_interval_times_double(HklInterval *self, double const d); extern void hkl_interval_divides_double(HklInterval *self, double const d); extern int hkl_interval_contain_zero(const HklInterval *self); extern void hkl_interval_cos(HklInterval *self); extern void hkl_interval_acos(HklInterval *self); extern void hkl_interval_sin(HklInterval *self); extern void hkl_interval_asin(HklInterval *self); extern void hkl_interval_tan(HklInterval *self); extern void hkl_interval_atan(HklInterval *self); extern double hkl_interval_length(const HklInterval *self); extern void hkl_interval_angle_restrict_symm(HklInterval *self); G_END_DECLS #endif hkl-5.0.0.2449/hkl/hkl-pseudoaxis-common-tth.c0000644000175000017500000001243113236600666021071 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel * Jens Krüger */ #include // for ::GSL_SUCCESS #include // for gsl_sf_angle_restrict_symm #include // for gsl_isnan #include // for gsl_vector #include // for sin, atan2, signbit #include // for free #include "hkl-detector-private.h" // for hkl_detector_compute_kf #include "hkl-geometry-private.h" // for _HklGeometry, HklHolder #include "hkl-macros-private.h" // for HKL_MALLOC #include "hkl-parameter-private.h" // for _HklParameter, etc #include "hkl-pseudoaxis-auto-private.h" // for HklFunction, etc #include "hkl-pseudoaxis-common-tth-private.h" // for HklEngineQ2, etc #include "hkl-pseudoaxis-private.h" // for _HklEngine, etc #include "hkl-source-private.h" // for hkl_source_compute_ki, etc #include "hkl-vector-private.h" // for HklVector, hkl_vector_angle, etc #include "hkl.h" // for HklEngine, HklParameter, etc #include "hkl/ccan/array_size/array_size.h" // for ARRAY_SIZE #include "hkl/ccan/container_of/container_of.h" // for container_of #include "hkl/ccan/darray/darray.h" // for darray_item /********/ /* tth2 */ /********/ struct _HklEngineTth2 { HklEngine engine; HklParameter *tth; HklParameter *alpha; }; static void _tth2(HklGeometry *geometry, HklDetector *detector, double *tth, double *alpha) { HklVector kf, ki; static HklVector x = { .data = {1, 0, 0}, }; ki = hkl_geometry_ki_get(geometry); kf = hkl_geometry_kf_get(geometry, detector); *tth = hkl_vector_angle(&ki, &kf); /* project kf on the x plan to compute alpha */ hkl_vector_project_on_plan(&kf, &x); *alpha = atan2(kf.data[2], kf.data[1]); } static int _tth2_func(const gsl_vector *x, void *params, gsl_vector *f) { HklEngine *engine = params; const HklEngineTth2 *engine_tth2 = container_of(engine, HklEngineTth2, engine); double tth; double alpha; CHECK_NAN(x->data, x->size); /* update the workspace from x */ set_geometry_axes(engine, x->data); _tth2(engine->geometry, engine->detector, &tth, &alpha); f->data[0] = engine_tth2->tth->_value - tth; f->data[1] = engine_tth2->alpha->_value - alpha; return GSL_SUCCESS; } static const HklFunction tth2_func = { .function = _tth2_func, .size = 2, }; static int get_tth2_real(HklMode *self, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error) { HklEngineTth2 *engine_tth2 = container_of(engine, HklEngineTth2, engine); _tth2(geometry, detector, &engine_tth2->tth->_value, &engine_tth2->alpha->_value); return TRUE; } static HklMode *mode_tth2(void) { static const char* axes[] = {"gamma", "delta"}; static const HklFunction *functions[] = {&tth2_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("tth2", axes, axes, functions), }; static const HklModeOperations operations = { HKL_MODE_OPERATIONS_AUTO_DEFAULTS, .get = get_tth2_real, }; return hkl_mode_auto_new(&info, &operations, TRUE); } static void hkl_engine_tth2_free_real(HklEngine *base) { HklEngineTth2 *self = container_of(base, HklEngineTth2, engine); hkl_engine_release(&self->engine); free(self); } HklEngine *hkl_engine_tth2_new(HklEngineList *engines) { HklEngineTth2 *self; HklMode *mode; static const HklParameter tth = { HKL_PARAMETER_DEFAULTS_ANGLE, .name="tth", .description = "the $2 \\theta$ angle", }; static const HklParameter alpha = { HKL_PARAMETER_DEFAULTS_ANGLE, .name = "alpha", .description = "angle of the projection of $\\vec{q}$ on the $yOz$ plan and $\\vec{y}$", }; static const HklParameter *pseudo_axes[] = {&tth, &alpha}; static const HklEngineInfo info = { HKL_ENGINE_INFO("tth2", pseudo_axes, HKL_ENGINE_DEPENDENCIES_AXES), }; static const HklEngineOperations operations = { HKL_ENGINE_OPERATIONS_DEFAULTS, .free=hkl_engine_tth2_free_real, }; self = HKL_MALLOC(HklEngineTth2); hkl_engine_init(&self->engine, &info, &operations, engines); self->tth = register_pseudo_axis(&self->engine, engines, &tth); self->alpha = register_pseudo_axis(&self->engine, engines, &alpha); /* tth2 [default] */ mode = mode_tth2(); hkl_engine_add_mode(&self->engine, mode); hkl_engine_mode_set(&self->engine, mode); return &self->engine; } hkl-5.0.0.2449/hkl/hkl-quaternion-private.h0000644000175000017500000000434213236600666020466 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_QUATERNION_PRIVATE_H__ #define __HKL_QUATERNION_PRIVATE_H__ #include // for FILE #include "hkl.h" // for G_BEGIN_DECLS, etc G_BEGIN_DECLS extern HklQuaternion *hkl_quaternion_dup(const HklQuaternion* self); extern void hkl_quaternion_free(HklQuaternion *self); extern void hkl_quaternion_init(HklQuaternion *self, double a, double b, double c, double d); extern void hkl_quaternion_init_from_vector(HklQuaternion *self, const HklVector *v); extern void hkl_quaternion_init_from_angle_and_axe(HklQuaternion *self, double angle, const HklVector *v); extern void hkl_quaternion_fprintf(FILE *file, const HklQuaternion *self); extern int hkl_quaternion_cmp(const HklQuaternion *self, const HklQuaternion *q); extern void hkl_quaternion_minus_quaternion(HklQuaternion *self, const HklQuaternion *q); extern void hkl_quaternion_times_quaternion(HklQuaternion *self, const HklQuaternion *q); extern double hkl_quaternion_norm2(const HklQuaternion *self); extern void hkl_quaternion_conjugate(HklQuaternion *self); extern void hkl_quaternion_to_matrix(const HklQuaternion *self, HklMatrix *m); extern void hkl_quaternion_to_angle_and_axe(const HklQuaternion *self, double *angle, HklVector *v); G_END_DECLS #endif hkl-5.0.0.2449/hkl/hkl-axis.c0000644000175000017500000003431213237016617015566 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for GSL_NAN #include // for gsl_sf_angle_restrict_symm #include // for gsl_isnan #include // for M_PI, ceil, fabs, floor #include // for FILE #include // for NULL, free #include "hkl-axis-private.h" // for HklAxis #include "hkl-interval-private.h" // for HklInterval, etc #include "hkl-macros-private.h" // for HKL_MALLOC #include "hkl-parameter-private.h" // for _HklParameter, etc #include "hkl-quaternion-private.h" // for hkl_quaternion_fprintf, etc #include "hkl-vector-private.h" // for hkl_vector_fprintf, etc #include "hkl.h" // for HklParameter, TRUE, etc #include "hkl/ccan/container_of/container_of.h" // for container_of /***********/ /* HklAxis */ /***********/ static inline HklParameter *hkl_axis_copy_real(const HklParameter *base) { HklAxis *self = container_of(base, HklAxis, parameter); HklAxis *dup; dup = HKL_MALLOC(HklAxis); *dup = *self; return &dup->parameter; } static inline void hkl_axis_free_real(HklParameter *self) { free(container_of(self, HklAxis, parameter)); } static inline void hkl_axis_update(HklAxis *self) { hkl_quaternion_init_from_angle_and_axe(&self->q, self->parameter._value, &self->axis_v); } static inline int hkl_axis_init_copy_real(HklParameter *self, const HklParameter *src, GError **error) { HklAxis *axis_self = container_of(self, HklAxis, parameter); HklAxis *axis_src = container_of(src, HklAxis, parameter); hkl_error (error == NULL || *error == NULL); *axis_self = *axis_src; self->changed = TRUE; return TRUE; } static inline int hkl_axis_set_value_real(HklParameter *self, double value, HklUnitEnum unit_type, GError **error) { HklAxis *axis = container_of(self, HklAxis, parameter); hkl_error (error == NULL || *error == NULL); if(!hkl_parameter_value_set_real(self, value, unit_type, error)){ g_assert (error == NULL || *error != NULL); return FALSE; } g_assert (error == NULL || *error == NULL); hkl_axis_update(axis); return TRUE; } static inline void hkl_axis_set_value_smallest_in_range_real(HklParameter *self) { double value, min; value = self->_value; min = self->range.min; if(value < min) hkl_axis_set_value_real(self, value + 2*M_PI*ceil((min - value)/(2*M_PI)), HKL_UNIT_DEFAULT, NULL); else hkl_axis_set_value_real(self, value - 2*M_PI*floor((value - min)/(2*M_PI)), HKL_UNIT_DEFAULT, NULL); } static inline void hkl_axis_randomize_real(HklParameter *self) { hkl_parameter_randomize_real(self); hkl_axis_update(container_of(self, HklAxis, parameter)); } /* * given a current position of angle a min and max interval find the closest * equivalent angle + n delta_angle in a given direction. * CAUSION angle MUST be in [min, max] otherwise... */ static void find_angle(double current, double *angle, double *distance, double min, double max, double delta_angle) { double new_angle = *angle; double new_distance; while(new_angle >= min && new_angle <= max) { new_distance = fabs(new_angle - current); if (new_distance <= *distance) { *angle = new_angle; *distance = new_distance; } new_angle += delta_angle; } } static inline double hkl_axis_get_value_closest_real(const HklParameter *self, const HklParameter *ref) { double angle = self->_value; if(hkl_parameter_is_valid(self)){ if(hkl_interval_length(&self->range) >= 2*M_PI){ int k; double current = ref->_value; double distance = fabs(current - angle); double delta = 2. * M_PI; double min = self->range.min; double max = self->range.max; /* three cases */ if (angle > max) { k = (int)(floor((max - angle) / delta)); angle += k * delta; find_angle(current, &angle, &distance, min, max, -delta); } else if (angle < min) { k = (int) (ceil((min - angle) / delta)); angle += k * delta; find_angle(current, &angle, &distance, min, max, delta); } else { find_angle(current, &angle, &distance, min, max, -delta); find_angle(current, &angle, &distance, min, max, delta); } } }else angle = GSL_NAN; return angle; } /* * check if the angle or its equivalent is in between [min, max] */ static inline int hkl_axis_is_valid_real(const HklParameter *self) { double value = self->_value; int res = FALSE; HklInterval range = self->range; if(hkl_interval_length(&range) > 2*M_PI) res = TRUE; else{ hkl_interval_angle_restrict_symm(&range); value = gsl_sf_angle_restrict_symm(value); if(range.min <= range.max){ if(range.min <= value && range.max >= value) res = TRUE; }else{ if(value <= range.max || value >= range.min) res = TRUE; } } return res; } static inline void hkl_axis_fprintf_real(FILE *f, const HklParameter *self) { HklAxis *axis = container_of(self, HklAxis, parameter); hkl_parameter_fprintf_real(f, self); hkl_vector_fprintf(f, &axis->axis_v); hkl_quaternion_fprintf(f, &axis->q); } static inline const HklVector *hkl_axis_axis_v_get_real(const HklParameter *self) { return &container_of(self, HklAxis, parameter)->axis_v; } static inline const HklQuaternion *hkl_axis_quaternion_get_real(const HklParameter *self) { return &container_of(self, HklAxis, parameter)->q; } static inline int hkl_axis_transformation_cmp_real(const HklParameter *base, const HklParameter *p2) { const HklAxis *self = container_of(base, HklAxis, parameter); const HklAxis *axis2 = container_of(p2, HklAxis, parameter); return hkl_parameter_transformation_cmp_real(base, p2) || hkl_vector_cmp(&self->axis_v, &axis2->axis_v); } static inline HklVector hkl_axis_transformation_apply_real(const HklParameter *base, const HklVector *v) { const HklAxis *self = container_of(base, HklAxis, parameter); HklVector res = *v; hkl_vector_rotated_quaternion(&res, &self->q); return res; } #define HKL_PARAMETER_OPERATIONS_AXIS_DEFAULTS \ HKL_PARAMETER_OPERATIONS_DEFAULTS, \ .copy = hkl_axis_copy_real, \ .free = hkl_axis_free_real, \ .init_copy = hkl_axis_init_copy_real, \ .get_value_closest = hkl_axis_get_value_closest_real, \ .set_value = hkl_axis_set_value_real, \ .set_value_smallest_in_range = hkl_axis_set_value_smallest_in_range_real, \ .randomize = hkl_axis_randomize_real, \ .is_valid = hkl_axis_is_valid_real, \ .fprintf = hkl_axis_fprintf_real, \ .axis_v_get = hkl_axis_axis_v_get_real, \ .quaternion_get = hkl_axis_quaternion_get_real, \ .transformation_cmp = hkl_axis_transformation_cmp_real, \ .transformation_apply = hkl_axis_transformation_apply_real static HklParameterOperations hkl_parameter_operations_axis = { HKL_PARAMETER_OPERATIONS_AXIS_DEFAULTS, }; HklParameter *hkl_parameter_new_rotation(const char *name, HklVector const *axis_v, const HklUnit *punit) { HklAxis axis0 = { .parameter = { HKL_PARAMETER_DEFAULTS_ANGLE, .name = name, .punit = punit, .ops = &hkl_parameter_operations_axis, }, .axis_v = *axis_v, .q = {{1., 0., 0., 0.}}, }; HklAxis *self = HKL_MALLOC(HklAxis); *self = axis0; return &self->parameter; } /*************************/ /* HklRotationWithOrigin */ /*************************/ static inline HklParameter *hkl_rotation_with_origin_copy_real(const HklParameter *base) { HklRotationWithOrigin *self = container_of(container_of(base, HklAxis, parameter), HklRotationWithOrigin, axis); HklRotationWithOrigin *dup; dup = HKL_MALLOC(HklRotationWithOrigin); *dup = *self; return &dup->axis.parameter; } static inline void hkl_rotation_with_origin_free_real(HklParameter *base) { free(container_of(container_of(base, HklAxis, parameter), HklRotationWithOrigin, axis)); } static inline int hkl_rotation_with_origin_init_copy_real(HklParameter *base, const HklParameter *base_src, GError **error) { HklRotationWithOrigin *self = container_of(container_of(base, HklAxis, parameter), HklRotationWithOrigin, axis); HklRotationWithOrigin *src = container_of(container_of(base_src, HklAxis, parameter), HklRotationWithOrigin, axis); hkl_error (error == NULL || *error == NULL); *self = *src; base->changed = TRUE; return TRUE; } static inline int hkl_rotation_with_origin_transformation_cmp_real(const HklParameter *base, const HklParameter *base_p2) { HklRotationWithOrigin *self = container_of(container_of(base, HklAxis, parameter), HklRotationWithOrigin, axis); HklRotationWithOrigin *p2 = container_of(container_of(base_p2, HklAxis, parameter), HklRotationWithOrigin, axis); return hkl_axis_transformation_cmp_real(base, base_p2) || hkl_vector_cmp(&self->origin, &p2->origin); } static inline HklVector hkl_rotation_with_origin_transformation_apply_real(const HklParameter *base, const HklVector *v) { const HklAxis *axis = container_of(base, HklAxis, parameter); const HklRotationWithOrigin *self = container_of(axis, HklRotationWithOrigin, axis); HklVector res = *v; hkl_vector_minus_vector(&res, &self->origin); hkl_vector_rotated_quaternion(&res, &axis->q); hkl_vector_add_vector(&res, &self->origin); return res; } #define HKL_PARAMETER_OPERATIONS_ROTATION_WITH_ORIGIN_DEFAULTS \ HKL_PARAMETER_OPERATIONS_AXIS_DEFAULTS, \ .copy = hkl_rotation_with_origin_copy_real, \ .free = hkl_rotation_with_origin_free_real, \ .init_copy = hkl_rotation_with_origin_init_copy_real, \ .transformation_cmp = hkl_rotation_with_origin_transformation_cmp_real, \ .transformation_apply = hkl_rotation_with_origin_transformation_apply_real static HklParameterOperations hkl_parameter_operations_rotation_with_origin = { HKL_PARAMETER_OPERATIONS_ROTATION_WITH_ORIGIN_DEFAULTS, }; HklParameter *hkl_parameter_new_rotation_with_origin(const char *name, HklVector const *axis_v, HklVector const *origin, const HklUnit *punit) { HklRotationWithOrigin rotation0 = { .axis = { .parameter = { HKL_PARAMETER_DEFAULTS_ANGLE, .name = name, .punit = punit, .ops = &hkl_parameter_operations_rotation_with_origin, }, .axis_v = *axis_v, .q = {{1., 0., 0., 0.}}, }, .origin = *origin, }; HklRotationWithOrigin *self = HKL_MALLOC(HklRotationWithOrigin); *self = rotation0; return &self->axis.parameter; } /**********************/ /* HklTranslation */ /**********************/ static inline HklParameter *hkl_translation_copy_real(const HklParameter *base) { HklTranslation *self = container_of(base, HklTranslation, parameter); HklTranslation *dup; dup = HKL_MALLOC(HklTranslation); *dup = *self; return &dup->parameter; } static inline void hkl_translation_free_real(HklParameter *base) { free(container_of(base, HklTranslation, parameter)); } static inline int hkl_translation_init_copy_real(HklParameter *base, const HklParameter *base_src, GError **error) { HklTranslation *self = container_of(base, HklTranslation, parameter); HklTranslation *src = container_of(base_src, HklTranslation, parameter); /* need to check that parameters are compatibles */ hkl_error (error == NULL || *error == NULL); *self = *src; base->changed = TRUE; return TRUE; } static inline void hkl_translation_fprintf_real(FILE *f, const HklParameter *base) { HklTranslation *self = container_of(base, HklTranslation, parameter); hkl_parameter_fprintf_real(f, base); hkl_vector_fprintf(f, &self->axis_v); } static inline const HklVector *hkl_translation_axis_v_get_real(const HklParameter *base) { return &container_of(base, HklTranslation, parameter)->axis_v; } static inline int hkl_translation_transformation_cmp_real(const HklParameter *base, const HklParameter *p2) { const HklTranslation *self = container_of(base, HklTranslation, parameter); const HklTranslation *translation2 = container_of(p2, HklTranslation, parameter); return hkl_parameter_transformation_cmp_real(base, p2) || hkl_vector_cmp(&self->axis_v, &translation2->axis_v); } static inline HklVector hkl_translation_transformation_apply_real(const HklParameter *base, const HklVector *v) { const HklTranslation *self = container_of(base, HklTranslation, parameter); HklVector res = self->axis_v; hkl_vector_times_double(&res, base->_value); hkl_vector_add_vector(&res, v); return res; } #define HKL_PARAMETER_OPERATIONS_TRANSLATION_DEFAULTS \ HKL_PARAMETER_OPERATIONS_DEFAULTS, \ .copy = hkl_translation_copy_real, \ .free = hkl_translation_free_real, \ .init_copy = hkl_translation_init_copy_real, \ .fprintf = hkl_translation_fprintf_real , \ .axis_v_get = hkl_translation_axis_v_get_real, \ .transformation_cmp = hkl_translation_transformation_cmp_real, \ .transformation_apply = hkl_translation_transformation_apply_real static HklParameterOperations hkl_parameter_operations_translation = { HKL_PARAMETER_OPERATIONS_TRANSLATION_DEFAULTS, }; HklParameter *hkl_parameter_new_translation(const char *name, HklVector const *axis_v, const HklUnit *punit) { HklTranslation translation0 = { .parameter = { HKL_PARAMETER_DEFAULTS, .name = name, .unit = &hkl_unit_length_meter, .punit = punit, .ops = &hkl_parameter_operations_translation, }, .axis_v = *axis_v, }; HklTranslation *self = HKL_MALLOC(HklTranslation); *self = translation0; return &self->parameter; } hkl-5.0.0.2449/hkl/hkl-types.c0000644000175000017500000000637313236600666015776 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2011-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include #include "hkl-types.h" #include "glib/gthread.h" // for g_once_init_enter, etc #include "glibconfig.h" // for gsize #include "hkl-detector-private.h" // for hkl_detector_new_copy #include "hkl-geometry-private.h" // for hkl_geometry_list_free, etc #include "hkl-matrix-private.h" // for hkl_matrix_dup #include "hkl-pseudoaxis-private.h" // for hkl_engine_list_new_copy #include "hkl-sample-private.h" // for hkl_sample_reflection_free, etc #include "hkl-unit-private.h" // for hkl_unit_dup, hkl_unit_free #include "hkl-vector-private.h" // for hkl_vector_dup, etc #define HKL_TYPE(type, camelcase_type, copy, free) \ GType hkl_## type ## _get_type (void) { \ static volatile gsize hkl_type_id__volatile = 0; \ if (g_once_init_enter (&hkl_type_id__volatile)) { \ GType hkl_type_id; \ hkl_type_id = g_boxed_type_register_static ( \ #camelcase_type, \ (GBoxedCopyFunc) copy, \ (GBoxedFreeFunc) free); \ g_once_init_leave (&hkl_type_id__volatile, hkl_type_id); \ } \ return hkl_type_id__volatile; \ } static void * hkl_fake_ref(void *src) { return src; } static void hkl_fake_unref(void *src) { return; } HKL_TYPE(detector, HklDetector, hkl_detector_new_copy, hkl_detector_free); HKL_TYPE(engine, HklEngine, hkl_fake_ref, hkl_fake_unref); HKL_TYPE(engine_list, HklEngineList, hkl_engine_list_new_copy, hkl_engine_list_free); HKL_TYPE(factory, HklFactory, hkl_fake_ref, hkl_fake_unref); HKL_TYPE(geometry, HklGeometry, hkl_geometry_new_copy, hkl_geometry_free); HKL_TYPE(geometry_list, HklGeometryList, hkl_geometry_list_new_copy, hkl_geometry_list_free); HKL_TYPE(geometry_list_item, HklGeometryListItem, hkl_geometry_list_item_new_copy, hkl_geometry_list_item_free); HKL_TYPE(lattice, HklLattice, hkl_lattice_new_copy, hkl_lattice_free); HKL_TYPE(matrix, HklMatrix, hkl_matrix_dup, hkl_matrix_free); HKL_TYPE(parameter, HklParameter, hkl_parameter_new_copy, hkl_parameter_free); HKL_TYPE(quaternion, HklQuaternion, hkl_quaternion_dup, hkl_quaternion_free); HKL_TYPE(sample, HklSample, hkl_sample_new_copy, hkl_sample_free); HKL_TYPE(sample_reflection, HklSampleReflection, hkl_fake_ref, hkl_fake_unref); HKL_TYPE(unit, HklUnit, hkl_unit_dup, hkl_unit_free); HKL_TYPE(vector, HklVector, hkl_vector_dup, hkl_vector_free); hkl-5.0.0.2449/hkl/hkl-pseudoaxis-common-hkl-private.h0000644000175000017500000001607613236600666022536 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel * Maria-Teresa Nunez-Pardo-de-Verra */ #ifndef __HKL_PSEUDOAXIS_COMMON_HKL_PRIVATE__ #define __HKL_PSEUDOAXIS_COMMON_HKL_PRIVATE__ #include // for gsl_vector #include "hkl-pseudoaxis-auto-private.h" #include "hkl-pseudoaxis-private.h" // for HklModeOperations, etc #include "hkl.h" // for HklEngine, HklDetector, etc #include "hkl-pseudoaxis-common-readonly-private.h" typedef struct _HklEngineHkl HklEngineHkl; struct _HklEngineHkl { HklEngine engine; HklParameter *h; HklParameter *k; HklParameter *l; }; extern int _RUBh_minus_Q_func(const gsl_vector *x, void *params, gsl_vector *f); extern int _double_diffraction_func(const gsl_vector *x, void *params, gsl_vector *f); extern int _psi_constant_vertical_func(const gsl_vector *x, void *params, gsl_vector *f); extern int _emergence_fixed_func(const gsl_vector *x, void *params, gsl_vector *f); extern int RUBh_minus_Q(double const x[], void *params, double f[]); extern int _double_diffraction(double const x[], void *params, double f[]); extern int hkl_is_reachable(HklEngine *engine, double wavelength, GError **error); extern int hkl_mode_get_hkl_real(HklMode *self, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error); extern int hkl_mode_set_hkl_real(HklMode *self, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error); extern int hkl_mode_initialized_set_psi_constant_vertical_real(HklMode *base, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, int initialized, GError **error); extern HklEngine *hkl_engine_hkl_new(HklEngineList *engines); #define HKL_MODE_OPERATIONS_HKL_DEFAULTS \ HKL_MODE_OPERATIONS_AUTO_DEFAULTS, \ .get = hkl_mode_get_hkl_real #define HKL_MODE_OPERATIONS_HKL_FULL_DEFAULTS \ HKL_MODE_OPERATIONS_HKL_DEFAULTS, \ .set = hkl_mode_set_hkl_real static const HklModeOperations hkl_mode_operations = { HKL_MODE_OPERATIONS_HKL_DEFAULTS, }; static const HklModeOperations hkl_full_mode_operations = { HKL_MODE_OPERATIONS_HKL_FULL_DEFAULTS, }; static const HklModeOperations psi_constant_vertical_mode_operations = { HKL_MODE_OPERATIONS_HKL_FULL_DEFAULTS, .capabilities = HKL_ENGINE_CAPABILITIES_READABLE | HKL_ENGINE_CAPABILITIES_WRITABLE | HKL_ENGINE_CAPABILITIES_INITIALIZABLE, .initialized_set = hkl_mode_initialized_set_psi_constant_vertical_real, }; static const HklModeOperations constant_incidence_mode_operations = { HKL_MODE_OPERATIONS_AUTO_WITH_INIT_DEFAULTS, .get = hkl_mode_get_hkl_real, .set = hkl_mode_set_hkl_real }; static const HklFunction RUBh_minus_Q_func = { .function = _RUBh_minus_Q_func, .size = 3, }; static const HklFunction double_diffraction_func = { .function = _double_diffraction_func, .size = 4, }; static const HklFunction psi_constant_vertical_func = { .function = _psi_constant_vertical_func, .size = 4, }; /* mode parameters */ #define CONSTANT_PARAMETER(_name) \ { \ HKL_PARAMETER_DEFAULTS_ANGLE, .name = #_name, \ .description = "the freezed value", \ } #define PSI_CONSTANT_PARAMETERS(_h2, _k2, _l2, _psi) \ { \ HKL_PARAMETER_DEFAULTS, .name = "h2", ._value = _h2, \ .description = "h coordinate of the reference plan", \ .range = { .min=-1, .max=1 }, \ }, \ { \ HKL_PARAMETER_DEFAULTS, .name = "k2", ._value = _k2, \ .description = "k coordinate of the reference plan", \ .range = { .min=-1, .max=1 }, \ }, \ { \ HKL_PARAMETER_DEFAULTS, .name = "l2", ._value = _l2, \ .description = "l coordinate of the reference plan", \ .range = { .min=-1, .max=1 }, \ }, \ { \ HKL_PARAMETER_DEFAULTS_ANGLE, .name = "psi", ._value = _psi, \ .description = "expected angle between the reference and the diffraction plans", \ } static const HklParameter constant_omega_parameters[] = { CONSTANT_PARAMETER(omega) }; static const HklParameter constant_chi_parameters[] = { CONSTANT_PARAMETER(chi) }; static const HklParameter constant_phi_parameters[] = { CONSTANT_PARAMETER(phi) }; /* outside the mode because used in more than one mode */ static const HklParameter double_diffraction_parameters[] = { { HKL_PARAMETER_DEFAULTS, .name = "h2", ._value = 1, .description = "h coordinate of the second diffracting plan", .range = {.min=-1, .max=1}, }, { HKL_PARAMETER_DEFAULTS, .name = "k2", ._value = 1, .description = "k coordinate of the second diffracting plan", .range = {.min=-1, .max=1}, }, { HKL_PARAMETER_DEFAULTS, .name = "l2", ._value = 1, .description = "l coordinate of the second diffracting plan", .range = {.min=-1, .max=1}, }, }; static const HklParameter psi_constant_parameters[] = { PSI_CONSTANT_PARAMETERS(1, 1, 1, 0) }; static const HklParameter constant_incidence_parameters[] = { SURFACE_PARAMETERS(1, 1, 1), { HKL_PARAMETER_DEFAULTS_ANGLE, .name = "incidence", .description = "expected incidence of the incoming beam $\\vec{k_i}$ on the surface." }, { HKL_PARAMETER_DEFAULTS_ANGLE, .name = "azimuth", ._value = M_PI_2, .description = "expected azimuth", }, }; #define HKL_PARAMETER_EMERGENCE_DEFAULTS \ HKL_PARAMETER_DEFAULTS_ANGLE, \ .name="emergence", \ .description = "expected emergence of the outgoing beam $\\vec{k_f}$ from the surface $\\vec{n}$." #define HKL_PARAMETER_EMERGENCE_AZIMUTH_DEFAULTS \ HKL_PARAMETER_DEFAULTS_ANGLE, \ .name="emergence_azimuth", \ ._value = M_PI_2, \ .description = "expected azimuth of the outgoing beam $\\vec{k_f}$ from the surface $\\vec{n}$ projected into the yOz plan." /*******************/ /* Emergence fixed */ /*******************/ static const HklFunction emergence_fixed_func = { .function = _emergence_fixed_func, .size = 4, }; #define HKL_MODE_HKL_EMERGENCE_FIXED_PARAMETERS_DEFAULTS(_x, _y, _z, _emergence) \ SURFACE_PARAMETERS(_x, _y, _z), \ { \ HKL_PARAMETER_EMERGENCE_DEFAULTS, \ ._value = _emergence, \ } extern HklMode *hkl_mode_hkl_emergence_fixed_new(const HklModeAutoInfo *info); #endif hkl-5.0.0.2449/hkl/hkl-type-builtins.h0000644000175000017500000000231613237020043017422 0ustar00piccapicca00000000000000 /* This file is generated by glib-mkenums, do not modify it. This code is licensed under the same license as the containing project. Note that it links to GLib, so must comply with the LGPL linking clauses. */ #ifndef __HKL_TYPE_BUILTINS_H__ #define __HKL_TYPE_BUILTINS_H__ #include // for G_BEGIN_DECLS, G_END_DECLS, etc #include // GType #include "hkl.h" // for HKLAPI G_BEGIN_DECLS /* enumerations from "../hkl.h" */ HKLAPI GType hkl_unit_enum_get_type (void) G_GNUC_CONST; #define HKL_TYPE_UNIT_ENUM (hkl_unit_enum_get_type ()) HKLAPI GType hkl_detector_type_get_type (void) G_GNUC_CONST; #define HKL_TYPE_DETECTOR_TYPE (hkl_detector_type_get_type ()) HKLAPI GType hkl_engine_capabilities_get_type (void) G_GNUC_CONST; #define HKL_TYPE_ENGINE_CAPABILITIES (hkl_engine_capabilities_get_type ()) HKLAPI GType hkl_engine_axis_names_get_get_type (void) G_GNUC_CONST; #define HKL_TYPE_ENGINE_AXIS_NAMES_GET (hkl_engine_axis_names_get_get_type ()) HKLAPI GType hkl_engine_dependencies_get_type (void) G_GNUC_CONST; #define HKL_TYPE_ENGINE_DEPENDENCIES (hkl_engine_dependencies_get_type ()) G_END_DECLS #endif /* __HKL_TYPE_BUILTINS_H__ */ /* Generated data ends here */ hkl-5.0.0.2449/hkl/hkl-sample-private.h0000644000175000017500000000530113236600666017556 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_SAMPLE_PRIVATE_H__ #define __HKL_SAMPLE_PRIVATE_H__ #include // for FILE #include "ccan/list/list.h" // for list_head, list_node #include "hkl-matrix-private.h" // for _HklMatrix #include "hkl-vector-private.h" // for HklVector #include "hkl.h" // for HklParameter, etc G_BEGIN_DECLS /*************/ /* HklSample */ /*************/ struct _HklSample { char *name; HklLattice *lattice; HklMatrix U; HklMatrix UB; HklParameter *ux; HklParameter *uy; HklParameter *uz; struct list_head reflections; size_t n_reflections; }; #define HKL_SAMPLE_ERROR hkl_sample_error_quark () static inline GQuark hkl_sample_error_quark (void) { return g_quark_from_static_string ("hkl-sample-error-quark"); } typedef enum { HKL_SAMPLE_ERROR_MINIMIZED, /* can not minimize the sample */ HKL_SAMPLE_ERROR_COMPUTE_UB_BUSING_LEVY, /* can not compute UB */ } HklSampleError; extern void hkl_sample_fprintf(FILE *f, const HklSample *self); /***********************/ /* hklSampleReflection */ /***********************/ struct _HklSampleReflection { HklGeometry *geometry; HklDetector *detector; HklSample *sample; HklVector hkl; HklVector _hkl; int flag; struct list_node list; }; #define HKL_SAMPLE_REFLECTION_ERROR hkl_sample_reflection_error_quark () static inline GQuark hkl_sample_reflection_error_quark (void) { return g_quark_from_static_string ("hkl-sample-reflection-error-quark"); } typedef enum { HKL_SAMPLE_REFLECTION_ERROR_HKL_SET, /* can not set the hkl part of the reflection */ } HklSampleReflectionError; extern HklSampleReflection *hkl_sample_reflection_new_copy(const HklSampleReflection *self); extern void hkl_sample_reflection_free(HklSampleReflection *self); G_END_DECLS #endif hkl-5.0.0.2449/hkl/hkl-engine-zaxis.c0000644000175000017500000001210513236600666017221 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for gsl_isnan #include "hkl-factory-private.h" // for autodata_factories_, etc #include "hkl-pseudoaxis-common-hkl-private.h" // for RUBh_minus_Q, etc #include "hkl-pseudoaxis-common-q-private.h" // for hkl_engine_q2_new, etc #include "hkl-pseudoaxis-common-tth-private.h" // for hkl_engine_tth2_new, etc #include "hkl-pseudoaxis-common-readonly-private.h" // for hkl_engine_tth2_new, etc #define MU "mu" #define OMEGA "omega" #define DELTA "delta" #define GAMMA "gamma" /* #define DEBUG */ static HklMode* _zaxis() { static const char *axes_r[] = {MU, OMEGA, DELTA, GAMMA}; static const char *axes_w[] = {OMEGA, DELTA, GAMMA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("zaxis", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } /* reflectivity */ static int _reflectivity_func(const gsl_vector *x, void *params, gsl_vector *f) { const double mu = x->data[0]; const double gamma = x->data[3]; CHECK_NAN(x->data, x->size); RUBh_minus_Q(x->data, params, f->data); f->data[3] = mu - gamma; return GSL_SUCCESS; } static const HklFunction reflectivity_func = { .function = _reflectivity_func, .size = 4, }; static HklMode* reflectivity() { static const char* axes[] = {MU, OMEGA, DELTA, GAMMA}; static const HklFunction *functions[] = {&reflectivity_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes, axes, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } /**********************/ /* pseudo axis engine */ /**********************/ static HklEngine *hkl_engine_zaxis_hkl_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_hkl_new(engines); default_mode = _zaxis(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); hkl_engine_add_mode(self, reflectivity()); return self; } /*****************/ /* mode readonly */ /*****************/ REGISTER_READONLY_INCIDENCE(hkl_engine_zaxis_incidence_new, P99_PROTECT({MU, OMEGA}), surface_parameters_y); REGISTER_READONLY_EMERGENCE(hkl_engine_zaxis_emergence_new, P99_PROTECT({MU, OMEGA, DELTA, GAMMA}), surface_parameters_y); /*********/ /* ZAXIS */ /*********/ #define HKL_GEOMETRY_TYPE_ZAXIS_DESCRIPTION \ "For this geometry the **mu** axis is common to the sample and the detector.\n" \ "\n" \ "+ xrays source fix allong the :math:`\\vec{x}` direction (1, 0, 0)\n" \ "+ 2 axes for the sample\n" \ "\n" \ " + **" MU "** : rotation around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ " + **" OMEGA "** : rotating around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ "\n" \ "+ 3 axis for the detector\n" \ "\n" \ " + **" MU "** : rotation around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ " + **" DELTA "** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ " + **" GAMMA "** : rotation around the :math:`\\vec{z}` direction (0, 0, 1)\n" static const char* hkl_geometry_zaxis_axes[] = {MU, OMEGA, DELTA, GAMMA}; static HklGeometry *hkl_geometry_new_zaxis(const HklFactory *factory) { HklGeometry *self = hkl_geometry_new(factory, &hkl_geometry_operations_defaults); HklHolder *h; h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, MU, 0, 0, 1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, OMEGA, 0, -1, 0, &hkl_unit_angle_deg); h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, MU, 0, 0, 1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, DELTA, 0, -1, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, GAMMA, 0, 0, 1, &hkl_unit_angle_deg); return self; } static HklEngineList *hkl_engine_list_new_zaxis(const HklFactory *factory) { HklEngineList *self = hkl_engine_list_new(); hkl_engine_zaxis_hkl_new(self); hkl_engine_q2_new(self); hkl_engine_qper_qpar_new(self); hkl_engine_tth2_new(self); hkl_engine_zaxis_incidence_new(self); hkl_engine_zaxis_emergence_new(self); return self; } REGISTER_DIFFRACTOMETER(zaxis, "ZAXIS", HKL_GEOMETRY_TYPE_ZAXIS_DESCRIPTION); hkl-5.0.0.2449/hkl/hkl-trajectory-private.h0000644000175000017500000000372313236600666020471 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl.h" /* HklTrajectoryResult */ typedef darray(HklGeometry *) darray_geometry; typedef struct _HklTrajectoryResult HklTrajectoryResult; struct _HklTrajectoryResult { darray_geometry geometries; }; extern HklTrajectoryResult * hkl_trajectory_result_new(void); extern void hkl_trajectory_result_free(HklTrajectoryResult *self); extern void hkl_trajectory_add_geometry(HklTrajectoryResult *self, const HklGeometry *geometry); /* HklTrajectoryStats */ typedef darray(double) darray_double; typedef darray(size_t) darray_sizet; typedef struct _HklTrajectoryStats HklTrajectoryStats; struct _HklTrajectoryStats { size_t n; darray_sizet nb_solutions; darray_double axes_min; darray_double axes_max; darray_double axes_range; }; extern HklTrajectoryStats *hkl_trajectory_stats_new(int n); extern void hkl_trajectory_stats_free(HklTrajectoryStats *self); extern void hkl_trajectory_stats_add(HklTrajectoryStats *self, const HklGeometryList *geometries); extern void hkl_trajectory_stats_fprintf(FILE *f, const HklTrajectoryStats *self); hkl-5.0.0.2449/hkl/hkl-macros.c0000644000175000017500000000302213236600666016102 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for backtrace, etc #include "hkl-macros-private.h" #ifndef _MSC_VER void hkl_printbt(void) { void *array[20]; int size; char **strings; int i; size = backtrace(array, 20); strings = backtrace_symbols(array, size); printf("Got a backtrace:\n"); for(i=0; i. * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for fabs, acos, cos, sin, sqrt, etc #include // for fprintf, FILE #include // for rand, RAND_MAX, free #include // for memcpy #include "hkl-macros-private.h" // for HKL_MALLOC #include "hkl-matrix-private.h" // for _HklMatrix #include "hkl-quaternion-private.h" // for _HklQuaternion #include "hkl-vector-private.h" // for HklVector, HklQuaternion #include "hkl.h" // for HklMatrix, HKL_EPSILON, etc /** * hkl_vector_dup: (skip) * @self: the HklVector to copy * * Copy an HklVector * * Returns: A copy of self which need to be free using hkl_vector_free **/ HklVector* hkl_vector_dup (const HklVector* self) { HklVector* dup; dup = HKL_MALLOC(HklVector); memcpy(dup, self, sizeof (HklVector)); return dup; } /** * hkl_vector_free: (skip) * @self: * * delete an HklVector struct **/ void hkl_vector_free (HklVector* self) { free(self); } /** * hkl_vector_init: * @self: the #HklVector to initialize. * @x: the first coordinate value * @y: the second coordinate value * @z: the third coordinate value * * initialize an #HklVector **/ void hkl_vector_init(HklVector *self, double x, double y, double z) { self->data[0] = x; self->data[1] = y; self->data[2] = z; } /** * hkl_vector_fprintf: (skip) * @file: the stream to print into * @self: the #HklVector to print. * * print an #HklVector into a stream **/ void hkl_vector_fprintf(FILE *file, const HklVector *self) { fprintf(file, "|%f, %f, %f|", self->data[0], self->data[1], self->data[2]); } /** * hkl_vector_cmp: (skip) * @self: the first vector * @vector: th vector to compare with * * compare two #HklVector. this comparison use HKL_EPSILON * to do the comparison. * * Returns: FALSE if both are equals, TRUE otherwise. **/ int hkl_vector_cmp(const HklVector *self, const HklVector *vector) { unsigned int i; for (i=0; i<3; i++) if ( fabs(self->data[i] - vector->data[i]) > HKL_EPSILON ) return TRUE; return FALSE; } /** * hkl_vector_is_opposite: (skip) * @self: * @vector: * * Check if two vectors are oposite. * * Returns: TRUE is vector are oposite vectors. **/ int hkl_vector_is_opposite(const HklVector *self, const HklVector *vector) { unsigned int i; for (i=0; i<3; i++) if ( fabs(self->data[i] + vector->data[i]) > HKL_EPSILON ) return FALSE; return TRUE; } /** * hkl_vector_add_vector: (skip) * @self: the modified #HklVector * @vector: the #hklvector to add * * add an #HklVector to another one. **/ void hkl_vector_add_vector(HklVector *self, const HklVector *vector) { unsigned int i; for (i=0;i<3;i++) self->data[i] += vector->data[i]; } /** * hkl_vector_minus_vector: (skip) * @self: the modified #HklVector * @vector: the #hklvector to substract * * substract an #HklVector to another one. **/ void hkl_vector_minus_vector(HklVector *self, const HklVector *vector) { unsigned int i; for (i=0;i<3;i++) self->data[i] -= vector->data[i]; } /** * hkl_vector_div_double: (skip) * @self: the #HklVector to divide. * @d: constant use to divide the #HklVector * * divide an #HklVector by constant. **/ void hkl_vector_div_double(HklVector *self, const double d) { unsigned int i; for (i=0;i<3;i++) self->data[i] /= d; } /** * hkl_vector_times_double: (skip) * @self: the #HklVector to modify * @d: the multiply factor * * multiply an #HklVector by a constant value. **/ void hkl_vector_times_double(HklVector *self, const double d) { unsigned int i; for (i=0;i<3;i++) self->data[i] *= d; } /** * hkl_vector_times_vector: (skip) * @self: the #HklVector to modify * @vector: the #HklVector use to modify the first one * * multiply an #HklVector by another one. This method multiply * coordinate by coordinate. **/ void hkl_vector_times_vector(HklVector *self, const HklVector *vector) { unsigned int i; for (i=0;i<3;i++) self->data[i] *= vector->data[i]; } /** * hkl_vector_times_matrix: (skip) * @self: the #HklVector to multiply * @m: the #HklMatrix use to multiply the #HklVector * * multiply an #HklVector by an #HklMatrix. * compute v'= M . v **/ void hkl_vector_times_matrix(HklVector *self, const HklMatrix *m) { HklVector tmp; tmp = *self; self->data[0] = tmp.data[0] *m->data[0][0] + tmp.data[1] *m->data[1][0] + tmp.data[2] *m->data[2][0]; self->data[1] = tmp.data[0] *m->data[0][1] + tmp.data[1] *m->data[1][1] + tmp.data[2] *m->data[2][1]; self->data[2] = tmp.data[0] *m->data[0][2] + tmp.data[1] *m->data[1][2] + tmp.data[2] *m->data[2][2]; } /** * hkl_vector_sum: (skip) * @self: the #HklVector to sum. * * compute the #HklVector sum of all its elements. * * Returns: the sum of all elements. **/ double hkl_vector_sum(const HklVector *self) { return self->data[0] + self->data[1] + self->data[2]; } /** * hkl_vector_scalar_product: (skip) * @self: the first #HklVector * @vector: the second #HklVector * * compute the scalar product of two #HklVector * * Returns: the scalar product. **/ double hkl_vector_scalar_product(const HklVector *self, const HklVector *vector) { unsigned int i; double scalar = 0; for (i=0;i<3;i++) scalar += self->data[i] *vector->data[i]; return scalar; } /** * hkl_vector_vectorial_product: (skip) * @self: the first #HklVector (modify) * @vector: the second #HklVector * * compute the vectorial product of two vectors **/ void hkl_vector_vectorial_product(HklVector *self, const HklVector *vector) { HklVector tmp; tmp = *self; self->data[0] = tmp.data[1] * vector->data[2] - tmp.data[2] * vector->data[1]; self->data[1] = tmp.data[2] * vector->data[0] - tmp.data[0] * vector->data[2]; self->data[2] = tmp.data[0] * vector->data[1] - tmp.data[1] * vector->data[0]; } /** * hkl_vector_angle: (skip) * @self: the fist #HklVector * @vector: the second #HklVector * * compute the angles beetween two #HklVector * * Returns: the return value is in beetween [0, pi] **/ double hkl_vector_angle(const HklVector *self, const HklVector *vector) { double angle; double cos_angle; double norm; double norm_self; double norm_vector; norm_self = hkl_vector_norm2(self); norm_vector = hkl_vector_norm2(vector); if (norm_self < HKL_EPSILON || norm_vector < HKL_EPSILON) return 0.0; norm = norm_self * norm_vector; cos_angle = hkl_vector_scalar_product(self, vector) / norm; /* problem with round */ if (cos_angle >= 1 ) angle = 0; else if (cos_angle <= -1 ) angle = M_PI; else angle = acos(cos_angle); return angle; } /** * hkl_vector_oriented_angle: (skip) * @self: the first #HklVector * @vector: the second #HklVector * @ref: the reference #HklVector * * compute the angles beetween two #HklVector and use * a reference #HklVector to orientate the space. That's * way the return value can be in beetween [-pi, pi]. * the (self, vector, ref) is a right oriented base. * * Returns: the angles [-pi, pi] **/ double hkl_vector_oriented_angle(const HklVector *self, const HklVector *vector, const HklVector *ref) { double angle; HklVector tmp; HklVector ref_u; angle = hkl_vector_angle(self, vector); tmp = *self; hkl_vector_vectorial_product(&tmp, vector); hkl_vector_normalize(&tmp); ref_u = *ref; hkl_vector_normalize(&ref_u); if (hkl_vector_is_opposite(&tmp, &ref_u)) angle = -angle; return angle; } /** * hkl_vector_oriented_angle_points: (skip) * @self: the first point * @p2: the second point * @p3: the third point * @ref: the reference #HklVector * * compute the angles beetween three points (p1, p2, p3) and use * a reference #HklVector to orientate the space. That's * way the return value can be in beetween [-pi, pi]. * the (self, vector, ref) is a right oriented base. * * Returns: the angles [-pi, pi] **/ double hkl_vector_oriented_angle_points(const HklVector *self, const HklVector *p2, const HklVector *p3, const HklVector *ref) { HklVector v1; HklVector v2; v1 = *self; v2 = *p3; hkl_vector_minus_vector(&v1, p2); hkl_vector_minus_vector(&v2, p2); return hkl_vector_oriented_angle(&v1, &v2, ref); } /** * hkl_vector_normalize: (skip) * @self: the #HklVector to normalize * * normalize a hkl_vector * * Returns: TRUE if the #HklVector can be normalized, FALSE otherwise **/ int hkl_vector_normalize(HklVector *self) { double norm = hkl_vector_norm2(self); if ( norm <= HKL_EPSILON ) return FALSE; hkl_vector_div_double(self, norm); return TRUE; } /** * hkl_vector_is_colinear: (skip) * @self: the first #HklVector * @vector: the second #HklVector * * check if two #HklVector are colinears * * Returns: TRUE if both are colinear. **/ int hkl_vector_is_colinear(const HklVector *self, const HklVector *vector) { int is_colinear = 0; HklVector tmp = *self; hkl_vector_vectorial_product(&tmp, vector); if (hkl_vector_norm2(&tmp) < HKL_EPSILON) is_colinear = 1; return is_colinear; } /** * hkl_vector_randomize: (skip) * @self: the #HklVector to randomize * * initialize a vector with random values. * coordinates range [-1, 1] */ void hkl_vector_randomize(HklVector *self) { self->data[0] = -1 + 2 *rand()/(RAND_MAX+1.0); self->data[1] = -1 + 2 *rand()/(RAND_MAX+1.0); self->data[2] = -1 + 2 *rand()/(RAND_MAX+1.0); } /** * hkl_vector_randomize_vector: (skip) * @self: the #HklVector to randomize * @vector: the #HklVector result to avoid * * randomize an #HklVector an be sure that it is not equal * to the #HklVector vector. **/ void hkl_vector_randomize_vector(HklVector *self, const HklVector *vector) { do hkl_vector_randomize(self); while (!hkl_vector_cmp(self, vector)); } /** * hkl_vector_randomize_vector_vector: (skip) * @self: the #HklVector to randomize * @vector1: the first #HklVector solution to avoid * @vector2: the second #HklVector solution to avoid * * randomize an #HklVector an be sure that it is not equal * to the #HklVector vector1 and vector2. * **/ void hkl_vector_randomize_vector_vector(HklVector *self, const HklVector *vector1, const HklVector *vector2) { do hkl_vector_randomize(self); while (!hkl_vector_cmp(self, vector1) || !hkl_vector_cmp(self, vector2)); } /** * hkl_vector_rotated_around_vector: (skip) * @self: the #HklVector to rotate * @axe: the axe of rotation * @angle: the angle of the rotation * * rotate a vector around another one with a given angle. **/ void hkl_vector_rotated_around_vector(HklVector *self, const HklVector *axe, double angle) { double c = cos(angle); double s = sin(angle); HklVector axe_n; HklVector tmp; axe_n = *axe; hkl_vector_normalize(&axe_n); tmp = *self; self->data[0] = (c + (1 - c) * axe_n.data[0] * axe_n.data[0]) * tmp.data[0]; self->data[0] += ((1 - c) * axe_n.data[0] * axe_n.data[1] - axe_n.data[2] * s) * tmp.data[1]; self->data[0] += ((1 - c) * axe_n.data[0] * axe_n.data[2] + axe_n.data[1] * s) * tmp.data[2]; self->data[1] = ((1 - c) * axe_n.data[0] * axe_n.data[1] + axe_n.data[2] * s) * tmp.data[0]; self->data[1] += (c + (1 - c) * axe_n.data[1] * axe_n.data[1]) * tmp.data[1]; self->data[1] += ((1 - c) * axe_n.data[1] * axe_n.data[2] - axe_n.data[0] * s) * tmp.data[2]; self->data[2] = ((1 - c) * axe_n.data[0] * axe_n.data[2] - axe_n.data[1] * s) * tmp.data[0]; self->data[2] += ((1 - c) * axe_n.data[1] * axe_n.data[2] + axe_n.data[0] * s) * tmp.data[1]; self->data[2] += (c + (1 - c) * axe_n.data[2] * axe_n.data[2]) * tmp.data[2]; } /** * hkl_vector_norm2: (skip) * @self: the #hklvector use to compute the norm2 * * compute the norm2 of an #HklVector * * Returns: the sqrt(|v|) **/ double hkl_vector_norm2(const HklVector *self) { return sqrt(self->data[0] * self->data[0] + self->data[1] * self->data[1] + self->data[2] * self->data[2]); } /** * hkl_vector_rotated_quaternion: (skip) * @self: the #HklVector to rotate * @qr: the #HklQuaternion use to rotate the vector * * rotate an #HklVector using an #HklQuaternion. **/ void hkl_vector_rotated_quaternion(HklVector *self, const HklQuaternion *qr) { double v1 = self->data[0]; double v2 = self->data[1]; double v3 = self->data[2]; double a = qr->data[0]; double b = qr->data[1]; double c = qr->data[2]; double d = qr->data[3]; double t2 = a*b; double t3 = a*c; double t4 = a*d; double t5 = -b*b; double t6 = b*c; double t7 = b*d; double t8 = -c*c; double t9 = c*d; double t10 = -d*d; self->data[0] = 2*( (t8 + t10)*v1 + (t6 - t4)*v2 + (t3 + t7)*v3 ) + v1; self->data[1] = 2*( (t4 + t6)*v1 + (t5 + t10)*v2 + (t9 - t2)*v3 ) + v2; self->data[2] = 2*( (t7 - t3)*v1 + (t2 + t9)*v2 + (t5 + t8)*v3 ) + v3; } /** * hkl_vector_rotated_around_line: (skip) * @self: the point to rotate around a line * @angle: the angle of the rotation * @c1: the fist point of the line * @c2: the second point of the line * * This method rotate a point around a line defined by two points * of a certain amount of angle. The rotation is right handed. * this mean that c2 - c1 gives the direction of the rotation. **/ void hkl_vector_rotated_around_line(HklVector *self, double angle, const HklVector *c1, const HklVector *c2) { HklVector axis; if (!self || !c1 || !c2 || fabs(angle) < HKL_EPSILON) return; axis = *c2; hkl_vector_minus_vector(&axis, c1); /* the c2 - c1 vector must be non null */ hkl_vector_minus_vector(self, c1); hkl_vector_rotated_around_vector(self, &axis, angle); hkl_vector_add_vector(self, c1); } /** * hkl_vector_is_null: (skip) * @self: the #hklvector to check * * check if all the coordinates of an #HklVector are null. * * Returns: HKl_TRUE if all |elements| are below HKL_EPSILON, HKl_FALSE otherwise * * Todo: test */ int hkl_vector_is_null(const HklVector *self) { unsigned int i; for (i=0; i<3; i++) if ( fabs(self->data[i]) > HKL_EPSILON ) return FALSE; return TRUE; } /** * hkl_vector_project_on_plan: (skip) * @self: the vector to project * @normal: the normal of the plane. * * project an #HklVector on a plan of normal which contain * the origin [0, 0, 0] * **/ void hkl_vector_project_on_plan(HklVector *self, const HklVector *normal) { HklVector tmp; if(!self || !normal) return; tmp = *normal; hkl_vector_normalize(&tmp); hkl_vector_times_double(&tmp, hkl_vector_scalar_product(self, &tmp)); hkl_vector_minus_vector(self, &tmp); } /** * hkl_vector_project_on_plan_with_point: (skip) * @self: the vector to project (modify) * @normal: the normal of the plane. * @point: a point of the plan. * * project an #HklVector on a plan of normal #normal which contain #point. **/ void hkl_vector_project_on_plan_with_point(HklVector *self, const HklVector *normal, const HklVector *point) { HklVector tmp; double d1, d2; if(!self || !normal || !point) return; tmp = *normal; hkl_vector_normalize(&tmp); d1 = hkl_vector_scalar_product(self, &tmp); d2 = hkl_vector_scalar_product(point, &tmp); hkl_vector_times_double(&tmp, d1 - d2); hkl_vector_minus_vector(self, &tmp); } hkl-5.0.0.2449/hkl/hkl-engine-2c.c0000644000175000017500000000434113236600666016372 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl-macros-private.h" #include "hkl-factory-private.h" // for autodata_factories_, etc #include "hkl-pseudoaxis-private.h" // for hkl_engine_list_add, etc #include "hkl/ccan/array_size/array_size.h" #define OMEGA "omega" #define TTH "tth" #define HKL_GEOMETRY_TWOC_DESCRIPTION \ "+ xrays source fix allong the :math:`\\vec{x}` direction (1, 0, 0)\n" \ "+ 1 axes for the sample\n" \ "\n" \ " + **" OMEGA "** : rotating around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ "\n" \ "+ 1 axis for the detector\n" \ "\n" \ " + **" TTH "** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" static const char* hkl_geometry_twoC_axes[] = {OMEGA, TTH}; static HklGeometry *hkl_geometry_new_twoC(const HklFactory *factory) { HklGeometry *self = hkl_geometry_new(factory, &hkl_geometry_operations_defaults); HklHolder *h; h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, OMEGA, 0, -1, 0, &hkl_unit_angle_deg); h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, TTH, 0, -1, 0, &hkl_unit_angle_deg); return self; } static HklEngineList *hkl_engine_list_new_twoC(const HklFactory *factory) { HklEngineList *self = hkl_engine_list_new(); return self; } REGISTER_DIFFRACTOMETER(twoC, "TwoC", HKL_GEOMETRY_TWOC_DESCRIPTION); hkl-5.0.0.2449/hkl/hkl-type-builtins.c.template0000644000175000017500000000160712710332473021241 0ustar00piccapicca00000000000000/*** BEGIN file-header ***/ #undef HKL_DISABLE_DEPRECATED #define HKL_ENABLE_BROKEN #include #include "hkl.h" #include "hkl-type-builtins.h" /*** END file-header ***/ /*** BEGIN file-production ***/ /* enumerations from "@filename@" */ /*** END file-production ***/ /*** BEGIN value-header ***/ GType @enum_name@_get_type (void) { static GType etype = 0; if (G_UNLIKELY(etype == 0)) { static const G@Type@Value values[] = { /*** END value-header ***/ /*** BEGIN value-production ***/ { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, /*** END value-production ***/ /*** BEGIN value-tail ***/ { 0, NULL, NULL } }; etype = g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); } return etype; } /*** END value-tail ***/ /*** BEGIN file-tail ***/ #define __HKL_TYPE_BUILTINS_C__ /*** END file-tail ***/ hkl-5.0.0.2449/hkl/hkl-factory.c0000644000175000017500000000321413236600666016270 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl-factory-private.h" // for autodata_factories_, etc HklFactory **hkl_factory_get_all(size_t *n) { return autodata_get(factories, n); } HklFactory *hkl_factory_get_by_name(const char *name, GError **error) { size_t i, n; HklFactory **factories; factories = autodata_get(factories, &n); for(i=0;iname)) return factories[i]; return NULL; } const char *hkl_factory_name_get(const HklFactory *self) { return self->name; } HklGeometry *hkl_factory_create_new_geometry(const HklFactory *self) { return self->create_new_geometry(self); } HklEngineList *hkl_factory_create_new_engine_list(const HklFactory *self) { return self->create_new_engine_list(self); } hkl-5.0.0.2449/hkl/Makefile.in0000644000175000017500000024675013237017634015762 0ustar00piccapicca00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_INTROSPECTION_TRUE@am__append_1 = \ @HAVE_INTROSPECTION_TRUE@ hkl-types.c \ @HAVE_INTROSPECTION_TRUE@ hkl-types.h \ @HAVE_INTROSPECTION_TRUE@ hkl-type-builtins.c \ @HAVE_INTROSPECTION_TRUE@ hkl-type-builtins.h \ @HAVE_INTROSPECTION_TRUE@ hkl-binding.c \ @HAVE_INTROSPECTION_TRUE@ hkl-binding-private.h @HAVE_INTROSPECTION_TRUE@am__append_2 = $(GOBJECT_LIBS) @HAVE_INTROSPECTION_TRUE@am__append_3 = $(GOBJECT_CFLAGS) @HAVE_INTROSPECTION_TRUE@am__append_4 = Hkl-@VMAJ@.0.gir subdir = hkl ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \ "$(DESTDIR)$(typelibsdir)" LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) libdummy_la_LIBADD = am_libdummy_la_OBJECTS = hkl-engine-template.lo libdummy_la_OBJECTS = $(am_libdummy_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libhkl_la_DEPENDENCIES = ccan/libccan.la am__libhkl_la_SOURCES_DIST = hkl-axis.c hkl-detector.c \ hkl-detector-factory.c hkl-factory.c hkl-geometry.c \ hkl-interval.c hkl-lattice.c hkl-macros.c hkl-matrix.c \ hkl-parameter.c hkl-pseudoaxis.c hkl-pseudoaxis-auto.c \ hkl-pseudoaxis-common.c hkl-pseudoaxis-common-eulerians.c \ hkl-pseudoaxis-common-hkl.c hkl-pseudoaxis-common-psi.c \ hkl-pseudoaxis-common-q.c hkl-pseudoaxis-common-readonly.c \ hkl-pseudoaxis-common-tth.c hkl-engine-2c.c hkl-engine-e4c.c \ hkl-engine-k4c.c hkl-engine-e6c.c hkl-engine-k6c.c \ hkl-engine-petra3-p08-lisa.c hkl-engine-petra3-p09-eh2.c \ hkl-engine-soleil-sirius-turret.c hkl-engine-soleil-sixs-med.c \ hkl-engine-zaxis.c hkl-quaternion.c hkl-sample.c hkl-source.c \ hkl-trajectory.c hkl-unit.c hkl-vector.c hkl-axis-private.h \ hkl-detector-private.h hkl-factory-private.h \ hkl-geometry-private.h hkl-interval-private.h \ hkl-lattice-private.h hkl-macros-private.h \ hkl-matrix-private.h hkl-parameter-private.h \ hkl-pseudoaxis-private.h hkl-pseudoaxis-auto-private.h \ hkl-pseudoaxis-common-private.h \ hkl-pseudoaxis-common-eulerians-private.h \ hkl-pseudoaxis-common-hkl-private.h \ hkl-pseudoaxis-common-psi-private.h \ hkl-pseudoaxis-common-q-private.h \ hkl-pseudoaxis-common-readonly-private.h \ hkl-pseudoaxis-common-tth-private.h hkl-quaternion-private.h \ hkl-sample-private.h hkl-source-private.h \ hkl-trajectory-private.h hkl-unit-private.h \ hkl-vector-private.h hkl-types.c hkl-types.h \ hkl-type-builtins.c hkl-type-builtins.h hkl-binding.c \ hkl-binding-private.h am__objects_1 = libhkl_la-hkl-axis.lo libhkl_la-hkl-detector.lo \ libhkl_la-hkl-detector-factory.lo libhkl_la-hkl-factory.lo \ libhkl_la-hkl-geometry.lo libhkl_la-hkl-interval.lo \ libhkl_la-hkl-lattice.lo libhkl_la-hkl-macros.lo \ libhkl_la-hkl-matrix.lo libhkl_la-hkl-parameter.lo \ libhkl_la-hkl-pseudoaxis.lo libhkl_la-hkl-pseudoaxis-auto.lo \ libhkl_la-hkl-pseudoaxis-common.lo \ libhkl_la-hkl-pseudoaxis-common-eulerians.lo \ libhkl_la-hkl-pseudoaxis-common-hkl.lo \ libhkl_la-hkl-pseudoaxis-common-psi.lo \ libhkl_la-hkl-pseudoaxis-common-q.lo \ libhkl_la-hkl-pseudoaxis-common-readonly.lo \ libhkl_la-hkl-pseudoaxis-common-tth.lo \ libhkl_la-hkl-engine-2c.lo libhkl_la-hkl-engine-e4c.lo \ libhkl_la-hkl-engine-k4c.lo libhkl_la-hkl-engine-e6c.lo \ libhkl_la-hkl-engine-k6c.lo \ libhkl_la-hkl-engine-petra3-p08-lisa.lo \ libhkl_la-hkl-engine-petra3-p09-eh2.lo \ libhkl_la-hkl-engine-soleil-sirius-turret.lo \ libhkl_la-hkl-engine-soleil-sixs-med.lo \ libhkl_la-hkl-engine-zaxis.lo libhkl_la-hkl-quaternion.lo \ libhkl_la-hkl-sample.lo libhkl_la-hkl-source.lo \ libhkl_la-hkl-trajectory.lo libhkl_la-hkl-unit.lo \ libhkl_la-hkl-vector.lo am__objects_2 = @HAVE_INTROSPECTION_TRUE@am__objects_3 = libhkl_la-hkl-types.lo \ @HAVE_INTROSPECTION_TRUE@ libhkl_la-hkl-type-builtins.lo \ @HAVE_INTROSPECTION_TRUE@ libhkl_la-hkl-binding.lo am_libhkl_la_OBJECTS = $(am__objects_1) $(am__objects_2) \ $(am__objects_3) libhkl_la_OBJECTS = $(am_libhkl_la_OBJECTS) libhkl_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libhkl_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libdummy_la_SOURCES) $(libhkl_la_SOURCES) DIST_SOURCES = $(libdummy_la_SOURCES) $(am__libhkl_la_SOURCES_DIST) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(gir_DATA) $(typelibs_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASY = @ASY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BULLET_CFLAGS = @BULLET_CFLAGS@ BULLET_LIBS = @BULLET_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMACS = @EMACS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ G3D_CFLAGS = @G3D_CFLAGS@ G3D_LIBS = @G3D_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GNUPLOT = @GNUPLOT@ GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ GOBJECT_LIBS = @GOBJECT_LIBS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTKGLEXT_CFLAGS = @GTKGLEXT_CFLAGS@ GTKGLEXT_LIBS = @GTKGLEXT_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HDF5_CFLAGS = @HDF5_CFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VMAJ = @VMAJ@ YAML_CFLAGS = @YAML_CFLAGS@ YAML_LIBS = @YAML_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ release_info = @release_info@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ version_info = @version_info@ SUBDIRS = ccan . api2 AM_LDFLAGS = -no-undefined -version-info 5:0:0 $(GLIB_LIBS) \ $(GSL_LIBS) $(am__append_2) AM_CFLAGS = -DG_LOG_DOMAIN=\"Hkl\" -I$(top_srcdir) -I$(top_builddir) \ $(GLIB_CFLAGS) $(GSL_CFLAGS) $(am__append_3) hkl_c_sources = \ hkl-axis.c \ hkl-detector.c \ hkl-detector-factory.c \ hkl-factory.c \ hkl-geometry.c \ hkl-interval.c \ hkl-lattice.c \ hkl-macros.c \ hkl-matrix.c \ hkl-parameter.c \ hkl-pseudoaxis.c \ hkl-pseudoaxis-auto.c \ hkl-pseudoaxis-common.c \ hkl-pseudoaxis-common-eulerians.c \ hkl-pseudoaxis-common-hkl.c \ hkl-pseudoaxis-common-psi.c \ hkl-pseudoaxis-common-q.c \ hkl-pseudoaxis-common-readonly.c \ hkl-pseudoaxis-common-tth.c \ hkl-engine-2c.c \ hkl-engine-e4c.c \ hkl-engine-k4c.c \ hkl-engine-e6c.c \ hkl-engine-k6c.c \ hkl-engine-petra3-p08-lisa.c \ hkl-engine-petra3-p09-eh2.c \ hkl-engine-soleil-sirius-turret.c \ hkl-engine-soleil-sixs-med.c \ hkl-engine-zaxis.c \ hkl-quaternion.c \ hkl-sample.c \ hkl-source.c \ hkl-trajectory.c \ hkl-unit.c \ hkl-vector.c hkl_public_h_sources = ../hkl.h hkl_private_h_sources = \ hkl-axis-private.h \ hkl-detector-private.h \ hkl-factory-private.h \ hkl-geometry-private.h \ hkl-interval-private.h \ hkl-lattice-private.h \ hkl-macros-private.h \ hkl-matrix-private.h \ hkl-parameter-private.h \ hkl-pseudoaxis-private.h \ hkl-pseudoaxis-auto-private.h \ hkl-pseudoaxis-common-private.h \ hkl-pseudoaxis-common-eulerians-private.h \ hkl-pseudoaxis-common-hkl-private.h \ hkl-pseudoaxis-common-psi-private.h \ hkl-pseudoaxis-common-q-private.h \ hkl-pseudoaxis-common-readonly-private.h \ hkl-pseudoaxis-common-tth-private.h \ hkl-quaternion-private.h \ hkl-sample-private.h \ hkl-source-private.h \ hkl-trajectory-private.h \ hkl-unit-private.h \ hkl-vector-private.h lib_LTLIBRARIES = libhkl.la libhkl_la_SOURCES = $(hkl_c_sources) $(hkl_private_h_sources) \ $(am__append_1) libhkl_la_LIBADD = ccan/libccan.la libhkl_la_CFLAGS = \ $(AM_CFLAGS) \ -Wno-initializer-overrides \ -Wno-unused-result \ -fvisibility=hidden # just compile the template diffractometer to be sure that it is valid noinst_LTLIBRARIES = libdummy.la libdummy_la_SOURCES = hkl-engine-template.c INTROSPECTION_GIRS = $(am__append_4) INTROSPECTION_SCANNER_ARGS = \ --add-include-path=$(srcdir) \ --add-include-path=. \ --warn-all INTROSPECTION_COMPILER_ARGS = \ --includedir=$(srcdir) \ --includedir=. @HAVE_INTROSPECTION_TRUE@introspection_files = \ @HAVE_INTROSPECTION_TRUE@ ../hkl.h \ @HAVE_INTROSPECTION_TRUE@ hkl-binding-private.h \ @HAVE_INTROSPECTION_TRUE@ hkl-types.h \ @HAVE_INTROSPECTION_TRUE@ hkl-vector.c \ @HAVE_INTROSPECTION_TRUE@ hkl-matrix.c \ @HAVE_INTROSPECTION_TRUE@ hkl-quaternion.c \ @HAVE_INTROSPECTION_TRUE@ hkl-parameter.c \ @HAVE_INTROSPECTION_TRUE@ hkl-axis.c \ @HAVE_INTROSPECTION_TRUE@ hkl-geometry.c \ @HAVE_INTROSPECTION_TRUE@ hkl-detector.c \ @HAVE_INTROSPECTION_TRUE@ hkl-detector-factory.c \ @HAVE_INTROSPECTION_TRUE@ hkl-lattice.c \ @HAVE_INTROSPECTION_TRUE@ hkl-sample.c \ @HAVE_INTROSPECTION_TRUE@ hkl-pseudoaxis.c \ @HAVE_INTROSPECTION_TRUE@ hkl-factory.c \ @HAVE_INTROSPECTION_TRUE@ hkl-binding.c \ @HAVE_INTROSPECTION_TRUE@ hkl-types.c \ @HAVE_INTROSPECTION_TRUE@ hkl-type-builtins.c \ @HAVE_INTROSPECTION_TRUE@ hkl-type-builtins.h @HAVE_INTROSPECTION_TRUE@Hkl_@VMAJ@_0_gir_NAMESPACE = Hkl @HAVE_INTROSPECTION_TRUE@Hkl_@VMAJ@_0_gir_VERSION = @VMAJ@.0 @HAVE_INTROSPECTION_TRUE@Hkl_@VMAJ@_0_gir_LIBS = libhkl.la @HAVE_INTROSPECTION_TRUE@Hkl_@VMAJ@_0_gir_FILES = $(introspection_files) @HAVE_INTROSPECTION_TRUE@Hkl_@VMAJ@_0_gir_PACKAGES = gobject-2.0 @HAVE_INTROSPECTION_TRUE@Hkl_@VMAJ@_0_gir_CFLAGS = $(INCLUDES) $(AM_CPPFLAGS) $(AM_CFLAGS) @HAVE_INTROSPECTION_TRUE@Hkl_@VMAJ@_0_gir_EXPORT_PACKAGES = hkl-@VMAJ@.0 @HAVE_INTROSPECTION_TRUE@Hkl_@VMAJ@_0_gir_SCANNERFLAGS = --warn-all --c-include='hkl.h' @HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0 @HAVE_INTROSPECTION_TRUE@gir_DATA = $(INTROSPECTION_GIRS) @HAVE_INTROSPECTION_TRUE@typelibsdir = $(libdir)/girepository-1.0 @HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(INTROSPECTION_GIRS:.gir=.typelib) @HAVE_INTROSPECTION_TRUE@EXTRA_DIST = \ @HAVE_INTROSPECTION_TRUE@ hkl-type-builtins.h.template \ @HAVE_INTROSPECTION_TRUE@ hkl-type-builtins.c.template @HAVE_INTROSPECTION_TRUE@CLEANFILES = $(gir_DATA) $(typelibs_DATA) stamp-hkl-type-builtins.h hkl-type-builtins.h hkl-type-builtins.c all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu hkl/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu hkl/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libdummy.la: $(libdummy_la_OBJECTS) $(libdummy_la_DEPENDENCIES) $(EXTRA_libdummy_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libdummy_la_OBJECTS) $(libdummy_la_LIBADD) $(LIBS) libhkl.la: $(libhkl_la_OBJECTS) $(libhkl_la_DEPENDENCIES) $(EXTRA_libhkl_la_DEPENDENCIES) $(AM_V_CCLD)$(libhkl_la_LINK) -rpath $(libdir) $(libhkl_la_OBJECTS) $(libhkl_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-engine-template.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-axis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-binding.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-detector-factory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-detector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-engine-2c.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-engine-e4c.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-engine-e6c.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-engine-k4c.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-engine-k6c.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-engine-petra3-p08-lisa.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-engine-petra3-p09-eh2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-engine-soleil-sirius-turret.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-engine-soleil-sixs-med.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-engine-zaxis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-factory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-geometry.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-interval.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-lattice.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-macros.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-matrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-parameter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-pseudoaxis-auto.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-eulerians.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-hkl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-psi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-q.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-readonly.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-tth.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-pseudoaxis-common.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-pseudoaxis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-quaternion.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-sample.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-source.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-trajectory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-type-builtins.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-types.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-unit.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhkl_la-hkl-vector.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< libhkl_la-hkl-axis.lo: hkl-axis.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-axis.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-axis.Tpo -c -o libhkl_la-hkl-axis.lo `test -f 'hkl-axis.c' || echo '$(srcdir)/'`hkl-axis.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-axis.Tpo $(DEPDIR)/libhkl_la-hkl-axis.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-axis.c' object='libhkl_la-hkl-axis.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-axis.lo `test -f 'hkl-axis.c' || echo '$(srcdir)/'`hkl-axis.c libhkl_la-hkl-detector.lo: hkl-detector.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-detector.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-detector.Tpo -c -o libhkl_la-hkl-detector.lo `test -f 'hkl-detector.c' || echo '$(srcdir)/'`hkl-detector.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-detector.Tpo $(DEPDIR)/libhkl_la-hkl-detector.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-detector.c' object='libhkl_la-hkl-detector.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-detector.lo `test -f 'hkl-detector.c' || echo '$(srcdir)/'`hkl-detector.c libhkl_la-hkl-detector-factory.lo: hkl-detector-factory.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-detector-factory.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-detector-factory.Tpo -c -o libhkl_la-hkl-detector-factory.lo `test -f 'hkl-detector-factory.c' || echo '$(srcdir)/'`hkl-detector-factory.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-detector-factory.Tpo $(DEPDIR)/libhkl_la-hkl-detector-factory.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-detector-factory.c' object='libhkl_la-hkl-detector-factory.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-detector-factory.lo `test -f 'hkl-detector-factory.c' || echo '$(srcdir)/'`hkl-detector-factory.c libhkl_la-hkl-factory.lo: hkl-factory.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-factory.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-factory.Tpo -c -o libhkl_la-hkl-factory.lo `test -f 'hkl-factory.c' || echo '$(srcdir)/'`hkl-factory.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-factory.Tpo $(DEPDIR)/libhkl_la-hkl-factory.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-factory.c' object='libhkl_la-hkl-factory.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-factory.lo `test -f 'hkl-factory.c' || echo '$(srcdir)/'`hkl-factory.c libhkl_la-hkl-geometry.lo: hkl-geometry.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-geometry.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-geometry.Tpo -c -o libhkl_la-hkl-geometry.lo `test -f 'hkl-geometry.c' || echo '$(srcdir)/'`hkl-geometry.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-geometry.Tpo $(DEPDIR)/libhkl_la-hkl-geometry.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-geometry.c' object='libhkl_la-hkl-geometry.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-geometry.lo `test -f 'hkl-geometry.c' || echo '$(srcdir)/'`hkl-geometry.c libhkl_la-hkl-interval.lo: hkl-interval.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-interval.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-interval.Tpo -c -o libhkl_la-hkl-interval.lo `test -f 'hkl-interval.c' || echo '$(srcdir)/'`hkl-interval.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-interval.Tpo $(DEPDIR)/libhkl_la-hkl-interval.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-interval.c' object='libhkl_la-hkl-interval.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-interval.lo `test -f 'hkl-interval.c' || echo '$(srcdir)/'`hkl-interval.c libhkl_la-hkl-lattice.lo: hkl-lattice.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-lattice.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-lattice.Tpo -c -o libhkl_la-hkl-lattice.lo `test -f 'hkl-lattice.c' || echo '$(srcdir)/'`hkl-lattice.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-lattice.Tpo $(DEPDIR)/libhkl_la-hkl-lattice.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-lattice.c' object='libhkl_la-hkl-lattice.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-lattice.lo `test -f 'hkl-lattice.c' || echo '$(srcdir)/'`hkl-lattice.c libhkl_la-hkl-macros.lo: hkl-macros.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-macros.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-macros.Tpo -c -o libhkl_la-hkl-macros.lo `test -f 'hkl-macros.c' || echo '$(srcdir)/'`hkl-macros.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-macros.Tpo $(DEPDIR)/libhkl_la-hkl-macros.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-macros.c' object='libhkl_la-hkl-macros.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-macros.lo `test -f 'hkl-macros.c' || echo '$(srcdir)/'`hkl-macros.c libhkl_la-hkl-matrix.lo: hkl-matrix.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-matrix.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-matrix.Tpo -c -o libhkl_la-hkl-matrix.lo `test -f 'hkl-matrix.c' || echo '$(srcdir)/'`hkl-matrix.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-matrix.Tpo $(DEPDIR)/libhkl_la-hkl-matrix.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-matrix.c' object='libhkl_la-hkl-matrix.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-matrix.lo `test -f 'hkl-matrix.c' || echo '$(srcdir)/'`hkl-matrix.c libhkl_la-hkl-parameter.lo: hkl-parameter.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-parameter.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-parameter.Tpo -c -o libhkl_la-hkl-parameter.lo `test -f 'hkl-parameter.c' || echo '$(srcdir)/'`hkl-parameter.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-parameter.Tpo $(DEPDIR)/libhkl_la-hkl-parameter.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-parameter.c' object='libhkl_la-hkl-parameter.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-parameter.lo `test -f 'hkl-parameter.c' || echo '$(srcdir)/'`hkl-parameter.c libhkl_la-hkl-pseudoaxis.lo: hkl-pseudoaxis.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-pseudoaxis.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-pseudoaxis.Tpo -c -o libhkl_la-hkl-pseudoaxis.lo `test -f 'hkl-pseudoaxis.c' || echo '$(srcdir)/'`hkl-pseudoaxis.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-pseudoaxis.Tpo $(DEPDIR)/libhkl_la-hkl-pseudoaxis.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-pseudoaxis.c' object='libhkl_la-hkl-pseudoaxis.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-pseudoaxis.lo `test -f 'hkl-pseudoaxis.c' || echo '$(srcdir)/'`hkl-pseudoaxis.c libhkl_la-hkl-pseudoaxis-auto.lo: hkl-pseudoaxis-auto.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-pseudoaxis-auto.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-pseudoaxis-auto.Tpo -c -o libhkl_la-hkl-pseudoaxis-auto.lo `test -f 'hkl-pseudoaxis-auto.c' || echo '$(srcdir)/'`hkl-pseudoaxis-auto.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-pseudoaxis-auto.Tpo $(DEPDIR)/libhkl_la-hkl-pseudoaxis-auto.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-pseudoaxis-auto.c' object='libhkl_la-hkl-pseudoaxis-auto.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-pseudoaxis-auto.lo `test -f 'hkl-pseudoaxis-auto.c' || echo '$(srcdir)/'`hkl-pseudoaxis-auto.c libhkl_la-hkl-pseudoaxis-common.lo: hkl-pseudoaxis-common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-pseudoaxis-common.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common.Tpo -c -o libhkl_la-hkl-pseudoaxis-common.lo `test -f 'hkl-pseudoaxis-common.c' || echo '$(srcdir)/'`hkl-pseudoaxis-common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common.Tpo $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-pseudoaxis-common.c' object='libhkl_la-hkl-pseudoaxis-common.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-pseudoaxis-common.lo `test -f 'hkl-pseudoaxis-common.c' || echo '$(srcdir)/'`hkl-pseudoaxis-common.c libhkl_la-hkl-pseudoaxis-common-eulerians.lo: hkl-pseudoaxis-common-eulerians.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-pseudoaxis-common-eulerians.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-eulerians.Tpo -c -o libhkl_la-hkl-pseudoaxis-common-eulerians.lo `test -f 'hkl-pseudoaxis-common-eulerians.c' || echo '$(srcdir)/'`hkl-pseudoaxis-common-eulerians.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-eulerians.Tpo $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-eulerians.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-pseudoaxis-common-eulerians.c' object='libhkl_la-hkl-pseudoaxis-common-eulerians.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-pseudoaxis-common-eulerians.lo `test -f 'hkl-pseudoaxis-common-eulerians.c' || echo '$(srcdir)/'`hkl-pseudoaxis-common-eulerians.c libhkl_la-hkl-pseudoaxis-common-hkl.lo: hkl-pseudoaxis-common-hkl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-pseudoaxis-common-hkl.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-hkl.Tpo -c -o libhkl_la-hkl-pseudoaxis-common-hkl.lo `test -f 'hkl-pseudoaxis-common-hkl.c' || echo '$(srcdir)/'`hkl-pseudoaxis-common-hkl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-hkl.Tpo $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-hkl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-pseudoaxis-common-hkl.c' object='libhkl_la-hkl-pseudoaxis-common-hkl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-pseudoaxis-common-hkl.lo `test -f 'hkl-pseudoaxis-common-hkl.c' || echo '$(srcdir)/'`hkl-pseudoaxis-common-hkl.c libhkl_la-hkl-pseudoaxis-common-psi.lo: hkl-pseudoaxis-common-psi.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-pseudoaxis-common-psi.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-psi.Tpo -c -o libhkl_la-hkl-pseudoaxis-common-psi.lo `test -f 'hkl-pseudoaxis-common-psi.c' || echo '$(srcdir)/'`hkl-pseudoaxis-common-psi.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-psi.Tpo $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-psi.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-pseudoaxis-common-psi.c' object='libhkl_la-hkl-pseudoaxis-common-psi.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-pseudoaxis-common-psi.lo `test -f 'hkl-pseudoaxis-common-psi.c' || echo '$(srcdir)/'`hkl-pseudoaxis-common-psi.c libhkl_la-hkl-pseudoaxis-common-q.lo: hkl-pseudoaxis-common-q.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-pseudoaxis-common-q.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-q.Tpo -c -o libhkl_la-hkl-pseudoaxis-common-q.lo `test -f 'hkl-pseudoaxis-common-q.c' || echo '$(srcdir)/'`hkl-pseudoaxis-common-q.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-q.Tpo $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-q.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-pseudoaxis-common-q.c' object='libhkl_la-hkl-pseudoaxis-common-q.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-pseudoaxis-common-q.lo `test -f 'hkl-pseudoaxis-common-q.c' || echo '$(srcdir)/'`hkl-pseudoaxis-common-q.c libhkl_la-hkl-pseudoaxis-common-readonly.lo: hkl-pseudoaxis-common-readonly.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-pseudoaxis-common-readonly.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-readonly.Tpo -c -o libhkl_la-hkl-pseudoaxis-common-readonly.lo `test -f 'hkl-pseudoaxis-common-readonly.c' || echo '$(srcdir)/'`hkl-pseudoaxis-common-readonly.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-readonly.Tpo $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-readonly.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-pseudoaxis-common-readonly.c' object='libhkl_la-hkl-pseudoaxis-common-readonly.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-pseudoaxis-common-readonly.lo `test -f 'hkl-pseudoaxis-common-readonly.c' || echo '$(srcdir)/'`hkl-pseudoaxis-common-readonly.c libhkl_la-hkl-pseudoaxis-common-tth.lo: hkl-pseudoaxis-common-tth.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-pseudoaxis-common-tth.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-tth.Tpo -c -o libhkl_la-hkl-pseudoaxis-common-tth.lo `test -f 'hkl-pseudoaxis-common-tth.c' || echo '$(srcdir)/'`hkl-pseudoaxis-common-tth.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-tth.Tpo $(DEPDIR)/libhkl_la-hkl-pseudoaxis-common-tth.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-pseudoaxis-common-tth.c' object='libhkl_la-hkl-pseudoaxis-common-tth.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-pseudoaxis-common-tth.lo `test -f 'hkl-pseudoaxis-common-tth.c' || echo '$(srcdir)/'`hkl-pseudoaxis-common-tth.c libhkl_la-hkl-engine-2c.lo: hkl-engine-2c.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-engine-2c.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-engine-2c.Tpo -c -o libhkl_la-hkl-engine-2c.lo `test -f 'hkl-engine-2c.c' || echo '$(srcdir)/'`hkl-engine-2c.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-engine-2c.Tpo $(DEPDIR)/libhkl_la-hkl-engine-2c.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-engine-2c.c' object='libhkl_la-hkl-engine-2c.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-engine-2c.lo `test -f 'hkl-engine-2c.c' || echo '$(srcdir)/'`hkl-engine-2c.c libhkl_la-hkl-engine-e4c.lo: hkl-engine-e4c.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-engine-e4c.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-engine-e4c.Tpo -c -o libhkl_la-hkl-engine-e4c.lo `test -f 'hkl-engine-e4c.c' || echo '$(srcdir)/'`hkl-engine-e4c.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-engine-e4c.Tpo $(DEPDIR)/libhkl_la-hkl-engine-e4c.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-engine-e4c.c' object='libhkl_la-hkl-engine-e4c.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-engine-e4c.lo `test -f 'hkl-engine-e4c.c' || echo '$(srcdir)/'`hkl-engine-e4c.c libhkl_la-hkl-engine-k4c.lo: hkl-engine-k4c.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-engine-k4c.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-engine-k4c.Tpo -c -o libhkl_la-hkl-engine-k4c.lo `test -f 'hkl-engine-k4c.c' || echo '$(srcdir)/'`hkl-engine-k4c.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-engine-k4c.Tpo $(DEPDIR)/libhkl_la-hkl-engine-k4c.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-engine-k4c.c' object='libhkl_la-hkl-engine-k4c.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-engine-k4c.lo `test -f 'hkl-engine-k4c.c' || echo '$(srcdir)/'`hkl-engine-k4c.c libhkl_la-hkl-engine-e6c.lo: hkl-engine-e6c.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-engine-e6c.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-engine-e6c.Tpo -c -o libhkl_la-hkl-engine-e6c.lo `test -f 'hkl-engine-e6c.c' || echo '$(srcdir)/'`hkl-engine-e6c.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-engine-e6c.Tpo $(DEPDIR)/libhkl_la-hkl-engine-e6c.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-engine-e6c.c' object='libhkl_la-hkl-engine-e6c.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-engine-e6c.lo `test -f 'hkl-engine-e6c.c' || echo '$(srcdir)/'`hkl-engine-e6c.c libhkl_la-hkl-engine-k6c.lo: hkl-engine-k6c.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-engine-k6c.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-engine-k6c.Tpo -c -o libhkl_la-hkl-engine-k6c.lo `test -f 'hkl-engine-k6c.c' || echo '$(srcdir)/'`hkl-engine-k6c.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-engine-k6c.Tpo $(DEPDIR)/libhkl_la-hkl-engine-k6c.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-engine-k6c.c' object='libhkl_la-hkl-engine-k6c.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-engine-k6c.lo `test -f 'hkl-engine-k6c.c' || echo '$(srcdir)/'`hkl-engine-k6c.c libhkl_la-hkl-engine-petra3-p08-lisa.lo: hkl-engine-petra3-p08-lisa.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-engine-petra3-p08-lisa.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-engine-petra3-p08-lisa.Tpo -c -o libhkl_la-hkl-engine-petra3-p08-lisa.lo `test -f 'hkl-engine-petra3-p08-lisa.c' || echo '$(srcdir)/'`hkl-engine-petra3-p08-lisa.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-engine-petra3-p08-lisa.Tpo $(DEPDIR)/libhkl_la-hkl-engine-petra3-p08-lisa.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-engine-petra3-p08-lisa.c' object='libhkl_la-hkl-engine-petra3-p08-lisa.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-engine-petra3-p08-lisa.lo `test -f 'hkl-engine-petra3-p08-lisa.c' || echo '$(srcdir)/'`hkl-engine-petra3-p08-lisa.c libhkl_la-hkl-engine-petra3-p09-eh2.lo: hkl-engine-petra3-p09-eh2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-engine-petra3-p09-eh2.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-engine-petra3-p09-eh2.Tpo -c -o libhkl_la-hkl-engine-petra3-p09-eh2.lo `test -f 'hkl-engine-petra3-p09-eh2.c' || echo '$(srcdir)/'`hkl-engine-petra3-p09-eh2.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-engine-petra3-p09-eh2.Tpo $(DEPDIR)/libhkl_la-hkl-engine-petra3-p09-eh2.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-engine-petra3-p09-eh2.c' object='libhkl_la-hkl-engine-petra3-p09-eh2.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-engine-petra3-p09-eh2.lo `test -f 'hkl-engine-petra3-p09-eh2.c' || echo '$(srcdir)/'`hkl-engine-petra3-p09-eh2.c libhkl_la-hkl-engine-soleil-sirius-turret.lo: hkl-engine-soleil-sirius-turret.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-engine-soleil-sirius-turret.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-engine-soleil-sirius-turret.Tpo -c -o libhkl_la-hkl-engine-soleil-sirius-turret.lo `test -f 'hkl-engine-soleil-sirius-turret.c' || echo '$(srcdir)/'`hkl-engine-soleil-sirius-turret.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-engine-soleil-sirius-turret.Tpo $(DEPDIR)/libhkl_la-hkl-engine-soleil-sirius-turret.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-engine-soleil-sirius-turret.c' object='libhkl_la-hkl-engine-soleil-sirius-turret.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-engine-soleil-sirius-turret.lo `test -f 'hkl-engine-soleil-sirius-turret.c' || echo '$(srcdir)/'`hkl-engine-soleil-sirius-turret.c libhkl_la-hkl-engine-soleil-sixs-med.lo: hkl-engine-soleil-sixs-med.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-engine-soleil-sixs-med.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-engine-soleil-sixs-med.Tpo -c -o libhkl_la-hkl-engine-soleil-sixs-med.lo `test -f 'hkl-engine-soleil-sixs-med.c' || echo '$(srcdir)/'`hkl-engine-soleil-sixs-med.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-engine-soleil-sixs-med.Tpo $(DEPDIR)/libhkl_la-hkl-engine-soleil-sixs-med.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-engine-soleil-sixs-med.c' object='libhkl_la-hkl-engine-soleil-sixs-med.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-engine-soleil-sixs-med.lo `test -f 'hkl-engine-soleil-sixs-med.c' || echo '$(srcdir)/'`hkl-engine-soleil-sixs-med.c libhkl_la-hkl-engine-zaxis.lo: hkl-engine-zaxis.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-engine-zaxis.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-engine-zaxis.Tpo -c -o libhkl_la-hkl-engine-zaxis.lo `test -f 'hkl-engine-zaxis.c' || echo '$(srcdir)/'`hkl-engine-zaxis.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-engine-zaxis.Tpo $(DEPDIR)/libhkl_la-hkl-engine-zaxis.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-engine-zaxis.c' object='libhkl_la-hkl-engine-zaxis.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-engine-zaxis.lo `test -f 'hkl-engine-zaxis.c' || echo '$(srcdir)/'`hkl-engine-zaxis.c libhkl_la-hkl-quaternion.lo: hkl-quaternion.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-quaternion.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-quaternion.Tpo -c -o libhkl_la-hkl-quaternion.lo `test -f 'hkl-quaternion.c' || echo '$(srcdir)/'`hkl-quaternion.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-quaternion.Tpo $(DEPDIR)/libhkl_la-hkl-quaternion.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-quaternion.c' object='libhkl_la-hkl-quaternion.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-quaternion.lo `test -f 'hkl-quaternion.c' || echo '$(srcdir)/'`hkl-quaternion.c libhkl_la-hkl-sample.lo: hkl-sample.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-sample.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-sample.Tpo -c -o libhkl_la-hkl-sample.lo `test -f 'hkl-sample.c' || echo '$(srcdir)/'`hkl-sample.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-sample.Tpo $(DEPDIR)/libhkl_la-hkl-sample.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-sample.c' object='libhkl_la-hkl-sample.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-sample.lo `test -f 'hkl-sample.c' || echo '$(srcdir)/'`hkl-sample.c libhkl_la-hkl-source.lo: hkl-source.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-source.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-source.Tpo -c -o libhkl_la-hkl-source.lo `test -f 'hkl-source.c' || echo '$(srcdir)/'`hkl-source.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-source.Tpo $(DEPDIR)/libhkl_la-hkl-source.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-source.c' object='libhkl_la-hkl-source.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-source.lo `test -f 'hkl-source.c' || echo '$(srcdir)/'`hkl-source.c libhkl_la-hkl-trajectory.lo: hkl-trajectory.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-trajectory.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-trajectory.Tpo -c -o libhkl_la-hkl-trajectory.lo `test -f 'hkl-trajectory.c' || echo '$(srcdir)/'`hkl-trajectory.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-trajectory.Tpo $(DEPDIR)/libhkl_la-hkl-trajectory.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-trajectory.c' object='libhkl_la-hkl-trajectory.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-trajectory.lo `test -f 'hkl-trajectory.c' || echo '$(srcdir)/'`hkl-trajectory.c libhkl_la-hkl-unit.lo: hkl-unit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-unit.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-unit.Tpo -c -o libhkl_la-hkl-unit.lo `test -f 'hkl-unit.c' || echo '$(srcdir)/'`hkl-unit.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-unit.Tpo $(DEPDIR)/libhkl_la-hkl-unit.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-unit.c' object='libhkl_la-hkl-unit.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-unit.lo `test -f 'hkl-unit.c' || echo '$(srcdir)/'`hkl-unit.c libhkl_la-hkl-vector.lo: hkl-vector.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-vector.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-vector.Tpo -c -o libhkl_la-hkl-vector.lo `test -f 'hkl-vector.c' || echo '$(srcdir)/'`hkl-vector.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-vector.Tpo $(DEPDIR)/libhkl_la-hkl-vector.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-vector.c' object='libhkl_la-hkl-vector.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-vector.lo `test -f 'hkl-vector.c' || echo '$(srcdir)/'`hkl-vector.c libhkl_la-hkl-types.lo: hkl-types.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-types.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-types.Tpo -c -o libhkl_la-hkl-types.lo `test -f 'hkl-types.c' || echo '$(srcdir)/'`hkl-types.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-types.Tpo $(DEPDIR)/libhkl_la-hkl-types.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-types.c' object='libhkl_la-hkl-types.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-types.lo `test -f 'hkl-types.c' || echo '$(srcdir)/'`hkl-types.c libhkl_la-hkl-type-builtins.lo: hkl-type-builtins.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-type-builtins.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-type-builtins.Tpo -c -o libhkl_la-hkl-type-builtins.lo `test -f 'hkl-type-builtins.c' || echo '$(srcdir)/'`hkl-type-builtins.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-type-builtins.Tpo $(DEPDIR)/libhkl_la-hkl-type-builtins.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-type-builtins.c' object='libhkl_la-hkl-type-builtins.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-type-builtins.lo `test -f 'hkl-type-builtins.c' || echo '$(srcdir)/'`hkl-type-builtins.c libhkl_la-hkl-binding.lo: hkl-binding.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -MT libhkl_la-hkl-binding.lo -MD -MP -MF $(DEPDIR)/libhkl_la-hkl-binding.Tpo -c -o libhkl_la-hkl-binding.lo `test -f 'hkl-binding.c' || echo '$(srcdir)/'`hkl-binding.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhkl_la-hkl-binding.Tpo $(DEPDIR)/libhkl_la-hkl-binding.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hkl-binding.c' object='libhkl_la-hkl-binding.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhkl_la_CFLAGS) $(CFLAGS) -c -o libhkl_la-hkl-binding.lo `test -f 'hkl-binding.c' || echo '$(srcdir)/'`hkl-binding.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-girDATA: $(gir_DATA) @$(NORMAL_INSTALL) @list='$(gir_DATA)'; test -n "$(girdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(girdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(girdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \ done uninstall-girDATA: @$(NORMAL_UNINSTALL) @list='$(gir_DATA)'; test -n "$(girdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(girdir)'; $(am__uninstall_files_from_dir) install-typelibsDATA: $(typelibs_DATA) @$(NORMAL_INSTALL) @list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(typelibsdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(typelibsdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibsdir)" || exit $$?; \ done uninstall-typelibsDATA: @$(NORMAL_UNINSTALL) @list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typelibsdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-girDATA install-typelibsDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \ uninstall-typelibsDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libLTLIBRARIES \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-girDATA install-html install-html-am \ install-info install-info-am install-libLTLIBRARIES \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip install-typelibsDATA installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-girDATA \ uninstall-libLTLIBRARIES uninstall-typelibsDATA .PRECIOUS: Makefile # introspection -include $(INTROSPECTION_MAKEFILE) @HAVE_INTROSPECTION_TRUE@hkl-type-builtins.h: stamp-hkl-type-builtins.h @HAVE_INTROSPECTION_TRUE@ @true @HAVE_INTROSPECTION_TRUE@stamp-hkl-type-builtins.h: $(hkl_public_h_sources) $(srcdir)/hkl-type-builtins.h.template @HAVE_INTROSPECTION_TRUE@ ( cd $(srcdir) && $(GLIB_MKENUMS) --template hkl-type-builtins.h.template \ @HAVE_INTROSPECTION_TRUE@ $(hkl_public_h_sources) ) >> xgen-gtbh \ @HAVE_INTROSPECTION_TRUE@ && (cmp -s xgen-gtbh hkl-type-builtins.h || cp xgen-gtbh hkl-type-builtins.h ) \ @HAVE_INTROSPECTION_TRUE@ && rm -f xgen-gtbh \ @HAVE_INTROSPECTION_TRUE@ && echo timestamp > $(@F) @HAVE_INTROSPECTION_TRUE@hkl-type-builtins.c: $(hkl_public_h_sources) $(srcdir)/hkl-type-builtins.c.template hkl-type-builtins.h @HAVE_INTROSPECTION_TRUE@ ( cd $(srcdir) && $(GLIB_MKENUMS) --template hkl-type-builtins.c.template \ @HAVE_INTROSPECTION_TRUE@ $(hkl_public_h_sources) ) > xgen-gtbc \ @HAVE_INTROSPECTION_TRUE@ && cp xgen-gtbc hkl-type-builtins.c \ @HAVE_INTROSPECTION_TRUE@ && rm -f xgen-gtbc @HAVE_INTROSPECTION_TRUE@Hkl-@VMAJ@.0.gir: $(INTROSPECTION_SCANNER) libhkl.la Makefile # Support for GNU Flymake, in Emacs. check-syntax: AM_CFLAGS += -fsyntax-only -pipe check-syntax: test -z "$(CHK_SOURCES)" || $(COMPILE) $(CHK_SOURCES) # check for includes with iwyu iwyu: @list='$(libhkl_la_SOURCES)';\ for p in $$list; do\ iwyu $(AM_CFLAGS) $$p; \ done; .PHONY: check-syntax iwyu # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: hkl-5.0.0.2449/hkl/hkl-pseudoaxis-auto-private.h0000644000175000017500000001244213236600666021433 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_PSEUDOAXIS_AUTO_H__ #define __HKL_PSEUDOAXIS_AUTO_H__ #include // for gsl_vector #include // for NULL #include // for uint #include "hkl-detector-private.h" // for hkl_detector_new_copy #include "hkl-geometry-private.h" // for hkl_geometry_new_copy #include "hkl-macros-private.h" // for hkl_assert, etc #include "hkl-pseudoaxis-private.h" // for HklModeOperations, etc #include "hkl.h" // for HklMode, hkl_detector_free, etc #include "hkl/ccan/container_of/container_of.h" // for container_of #include "hkl/ccan/array_size/array_size.h" // ARRAY_SIZE G_BEGIN_DECLS typedef struct _HklFunction HklFunction; typedef struct _HklModeAutoInfo HklModeAutoInfo; typedef struct _HklModeAutoWithInit HklModeAutoWithInit; /***************/ /* HklModeAuto */ /***************/ struct _HklFunction { const uint size; int (* function) (const gsl_vector *x, void *params, gsl_vector *f); }; typedef darray(const HklFunction*) darray_function; struct _HklModeAutoInfo { const HklModeInfo info; darray_function functions; }; #define HKL_MODE_OPERATIONS_AUTO_DEFAULTS \ HKL_MODE_OPERATIONS_DEFAULTS, \ .set = hkl_mode_auto_set_real #define CHECK_NAN(x, len) do{ \ for(uint i=0; igeometry) hkl_geometry_free(self->geometry); if(self->detector) hkl_detector_free(self->detector); if(self->sample) hkl_sample_free(self->sample); hkl_mode_free_real(mode); } static NEEDED int hkl_mode_auto_with_init_initialized_set_real(HklMode *mode, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, int initialized, GError **error) { HklModeAutoWithInit *self = container_of(mode, HklModeAutoWithInit, mode); hkl_error(error == NULL || *error == NULL); if(initialized){ if(geometry){ if(self->geometry) hkl_geometry_free(self->geometry); self->geometry = hkl_geometry_new_copy(geometry); } if(detector){ if(self->detector) hkl_detector_free(self->detector); self->detector = hkl_detector_new_copy(detector); } if(sample){ if(self->sample) hkl_sample_free(self->sample); self->sample = hkl_sample_new_copy(sample); } } mode->initialized = initialized; return TRUE; } extern HklMode *hkl_mode_auto_with_init_new(const HklModeAutoInfo *info, const HklModeOperations *ops, int initialized); G_END_DECLS #endif /* __HKL_PSEUDOAXIS_AUTO_H__ */ hkl-5.0.0.2449/hkl/hkl-engine-template.c0000644000175000017500000001727213236600666017710 0ustar00piccapicca00000000000000/* COPY THIS FILE INTO hkl-engine-xxx.c and fill the XXX */ /* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * Copyright (C) 2014 XXX copyright owner XXX * * Authors: Picca Frédéric-Emmanuel * XXXX */ #include // for gsl_isnan #include "hkl-factory-private.h" // for autodata_factories_, etc #include "hkl-pseudoaxis-common-hkl-private.h" // for hkl_mode_operations, etc #include "hkl-pseudoaxis-common-psi-private.h" // for hkl_engine_psi_new, etc #include "hkl-pseudoaxis-common-q-private.h" // for hkl_engine_q2_new, etc #include "hkl-pseudoaxis-common-tth-private.h" // for hkl_engine_tth2_new, etc #include "hkl-pseudoaxis-common-readonly-private.h" /**************/ /* Axes names */ /**************/ #define MU "mu" #define OMEGA "omega" #define CHI "chi" #define PHI "phi" #define GAMMA "gamma" #define DELTA "delta" /************/ /* Geometry */ /************/ #define HKL_GEOMETRY_EULERIAN6C_DESCRIPTION \ "+ xrays source fix allong the :math:`\\vec{x}` direction (1, 0, 0)\n" \ "+ 4 axes for the sample\n" \ "\n" \ " + **" MU "** : rotating around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ " + **" OMEGA "** : rotating around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ " + **" CHI "** : rotating around the :math:`\\vec{x}` direction (1, 0, 0)\n" \ " + **" PHI "** : rotating around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ "\n" \ "+ 2 axes for the detector\n" \ "\n" \ " + **" GAMMA "** : rotation around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ " + **" DELTA "** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" static const char* hkl_geometry_eulerian6C_axes[] = {MU, OMEGA, CHI, PHI, GAMMA, DELTA}; static HklGeometry *hkl_geometry_new_eulerian6C(const HklFactory *factory) { HklGeometry *self = hkl_geometry_new(factory, &hkl_geometry_operations_defaults); HklHolder *h; h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, MU, 0, 0, 1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, OMEGA, 0, -1, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, CHI, 1, 0, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, PHI, 0, -1, 0, &hkl_unit_angle_deg); h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, GAMMA, 0, 0, 1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, DELTA, 0, -1, 0, &hkl_unit_angle_deg); return self; } /*********/ /* Modes */ /*********/ /* exemple of a lowlevel gsl function use to compute an hkl bissector * vertical mode for an E6C diffractometer */ static int _bissector_vertical_func(const gsl_vector *x, void *params, gsl_vector *f) { const double omega = x->data[0]; const double tth = x->data[3]; /* this method check that all the x values are valid. Sometime * the computation produce NAN values. In that case * computation is skipped */ CHECK_NAN(x->data, x->size); /* do the hkl computation which fill the f[0..2] values */ RUBh_minus_Q(x->data, params, f->data); /* here a mode specific equation requiered due to the number * of axes to fit (4 in this case) */ f->data[3] = tth - 2 * fmod(omega,M_PI); return GSL_SUCCESS; } /* Declare the number of axes expected by the gsl low level * function. So during the HklMode configuration there is a runtime * check which ensure that the right number of axes are given to the * HklMode. */ static const HklFunction bissector_vertical_func = { .function = _bissector_vertical_func, .size = 4, }; /* exemple of a mode with 4 axes. In that case you need the previously * defined function */ static HklMode *bissector_vertical(void) { /* axes_r is the axes list requiered to compute the pseudo axes values */ static const char* axes_r[] = {MU, OMEGA, CHI, PHI, GAMMA, DELTA}; /* axes_w is the axes list use when you write the pseudo axes * values. You move only thoses axes when you use this * mode. */ static const char* axes_w[] = {OMEGA, CHI, PHI, DELTA}; /* here a list of functions use to solve the mode */ static const HklFunction *functions[] = {&bissector_vertical_func}; /* here just the description of the mode: name, axes_r, axes_w, functions */ static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; /* instantiate a new mode */ return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } /* here an exemple of a three axes hkl mode, a convenience function is * provided to do the computation (RUBh_minus_Q_func). This funtion * takes only three axes. So writing a generic hkl mode with only * three axes is really simple */ static HklMode *constant_omega_vertical(void) { static const char* axes_r[] = {MU, OMEGA, CHI, PHI, GAMMA, DELTA}; static const char* axes_w[] = {CHI, PHI, DELTA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode* psi_vertical() { static const char *axes_r[] = {MU, OMEGA, CHI, PHI, GAMMA, DELTA}; static const char *axes_w[] = {OMEGA, CHI, PHI, DELTA}; static const HklFunction *functions[] = {&psi_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes_r, axes_w, functions, psi_parameters), }; return hkl_mode_psi_new(&info); } /*****************/ /* mode readonly */ /*****************/ REGISTER_READONLY_INCIDENCE(hkl_engine_template_incidence_new, P99_PROTECT({MU, OMEGA, CHI, PHI}), surface_parameters_y); REGISTER_READONLY_EMERGENCE(hkl_engine_template_emergence_new, P99_PROTECT({MU, OMEGA, CHI, PHI, GAMMA, DELTA}), surface_parameters_y); /***********/ /* Engines */ /***********/ static HklEngine *hkl_engine_e6c_hkl_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_hkl_new(engines); default_mode = bissector_vertical(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); hkl_engine_add_mode(self, constant_omega_vertical()); return self; } static HklEngine *hkl_engine_e6c_psi_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_psi_new(engines); default_mode = psi_vertical(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); return self; } /***************/ /* Engine list */ /***************/ static HklEngineList *hkl_engine_list_new_eulerian6C(const HklFactory *factory) { HklEngineList *self = hkl_engine_list_new(); hkl_engine_e6c_hkl_new(self); hkl_engine_e6c_psi_new(self); hkl_engine_q2_new(self); hkl_engine_qper_qpar_new(self); hkl_engine_tth2_new(self); hkl_engine_template_incidence_new(self); hkl_engine_template_emergence_new(self); return self; } /* Register the diffractometer into the factory */ REGISTER_DIFFRACTOMETER(eulerian6C, "E6C", HKL_GEOMETRY_EULERIAN6C_DESCRIPTION); hkl-5.0.0.2449/hkl/hkl-engine-soleil-sirius-turret.c0000644000175000017500000001154413236600666022217 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl-factory-private.h" // for autodata_factories_, etc #include "hkl-pseudoaxis-common-hkl-private.h" // for hkl_engine_hkl_new, etc #include "hkl-pseudoaxis-common-q-private.h" // for hkl_engine_q2_new, etc #include "hkl-pseudoaxis-common-tth-private.h" // for hkl_engine_tth2_new, etc #include "hkl-pseudoaxis-common-readonly-private.h" #define BASEPITCH "basepitch" #define THETAH "thetah" #define ALPHAY "alphay" #define ALPHAX "alphax" #define DELTA "delta" #define GAMMA "gamma" /************/ /* mode hkl */ /************/ static HklMode* lifting_detector_thetah() { static const char *axes_r[] = {BASEPITCH, THETAH, ALPHAY, ALPHAX, DELTA, GAMMA}; static const char* axes_w[] = {THETAH, DELTA, GAMMA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklEngine *hkl_engine_soleil_sirius_turret_hkl_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_hkl_new(engines); default_mode = lifting_detector_thetah(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); return self; } /*****************/ /* mode readonly */ /*****************/ REGISTER_READONLY_INCIDENCE(hkl_engine_soleil_sirius_turret_incidence_new, P99_PROTECT({BASEPITCH, THETAH, ALPHAY, ALPHAX}), surface_parameters_z); REGISTER_READONLY_EMERGENCE(hkl_engine_soleil_sirius_turret_emergence_new, P99_PROTECT({BASEPITCH, THETAH, ALPHAY, ALPHAX, DELTA, GAMMA}), surface_parameters_z); /************************/ /* SOLEIL SIRIUS TURRET */ /************************/ #define HKL_GEOMETRY_TYPE_SOLEIL_SIRIUS_TURRET_DESCRIPTION \ "+ xrays source fix allong the :math:`\\vec{x}` direction (1, 0, 0)\n" \ "+ 4 axes for the sample\n" \ "\n" \ " + **" BASEPITCH "** : rotation around the :math:`\\vec{y}` direction (0, 1, 0)\n" \ " + **" THETAH "** : rotation around the :math:`-\\vec{z}` direction (0, 0, -1)\n" \ " + **" ALPHAY "** : rotation around the :math:`\\vec{y}` direction (0, 1, 0)\n" \ " + **" ALPHAX "** : rotating around the :math:`\\vec{x}` direction (1, 0, 0)\n" \ "\n" \ "+ 3 axis for the detector\n" \ "\n" \ " + **" BASEPITCH "** : rotation around the :math:`\\vec{y}` direction (0, 1, 0)\n" \ " + **" DELTA "** : rotation around the :math:`-\\vec{y}` direction (0, 0, -1)\n" \ " + **" GAMMA "** : rotation around the :math:`\\vec{z}` direction (0, -1, 0)\n" static const char* hkl_geometry_soleil_sirius_turret_axes[] = {BASEPITCH, THETAH, ALPHAY, ALPHAX, DELTA, GAMMA}; static HklGeometry *hkl_geometry_new_soleil_sirius_turret(const HklFactory *factory) { HklGeometry *self = hkl_geometry_new(factory, &hkl_geometry_operations_defaults); HklHolder *h; h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, BASEPITCH, 0, 1, 0, &hkl_unit_angle_mrad); hkl_holder_add_rotation(h, THETAH, 0, 0, -1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, ALPHAY, 0, 1, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, ALPHAX, 1, 0, 0, &hkl_unit_angle_deg); h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, BASEPITCH, 0, 1, 0, &hkl_unit_angle_mrad); hkl_holder_add_rotation(h, DELTA, 0, 0, -1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, GAMMA, 0, -1, 0, &hkl_unit_angle_deg); return self; } static HklEngineList *hkl_engine_list_new_soleil_sirius_turret(const HklFactory *factory) { HklEngineList *self = hkl_engine_list_new(); hkl_engine_soleil_sirius_turret_hkl_new(self); hkl_engine_q2_new(self); hkl_engine_qper_qpar_new(self); hkl_engine_tth2_new(self); hkl_engine_soleil_sirius_turret_incidence_new(self); hkl_engine_soleil_sirius_turret_emergence_new(self); return self; } REGISTER_DIFFRACTOMETER(soleil_sirius_turret, "SOLEIL SIRIUS TURRET", HKL_GEOMETRY_TYPE_SOLEIL_SIRIUS_TURRET_DESCRIPTION); hkl-5.0.0.2449/hkl/hkl-pseudoaxis-common-readonly-private.h0000644000175000017500000000721313236600666023566 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel * Maria-Teresa Nunez-Pardo-de-Verra */ #ifndef __HKL_PSEUDOAXIS_COMMON_READONLY_PRIVATE__ #define __HKL_PSEUDOAXIS_COMMON_READONLY_PRIVATE__ #include "hkl-pseudoaxis-private.h" typedef struct _HklModeIncidence HklModeIncidence; struct _HklModeIncidence { HklMode parent; HklParameter *n_x; HklParameter *n_y; HklParameter *n_z; }; extern HklMode *hkl_mode_incidence_new(const HklModeInfo *info); extern HklEngine *hkl_engine_incidence_new(HklEngineList *engines); static inline double _incidence(const HklVector *v1, const HklVector *v2) { return hkl_vector_angle(v1, v2) - M_PI_2; } static inline double _emergence(const HklVector *v1, const HklVector *v2) { return M_PI_2 - hkl_vector_angle(v1, v2); } extern HklMode *hkl_mode_emergence_new(const HklModeInfo *info); extern HklEngine *hkl_engine_emergence_new(HklEngineList *engines); /* mode parameters */ #define SURFACE_PARAMETERS(_x, _y, _z) \ { \ HKL_PARAMETER_DEFAULTS, .name = "x", ._value = (_x), \ .description = "the x coordinate of the surface $\\vec{n}$", \ .range = { .min=-1, .max=1 }, \ }, \ { \ HKL_PARAMETER_DEFAULTS, .name = "y", ._value = (_y), \ .description = "the y coordinate of the surface $\\vec{n}$", \ .range = { .min=-1, .max=1 }, \ }, \ { \ HKL_PARAMETER_DEFAULTS, .name = "z", ._value = (_z), \ .description = "the z coordinate of the surface $\\vec{n}$", \ .range = { .min=-1, .max=1 }, \ } static const HklParameter surface_parameters_y[] = { SURFACE_PARAMETERS(0, 1, 0), }; static const HklParameter surface_parameters_z[] = { SURFACE_PARAMETERS(0, 0, 1), }; #define P99_PROTECT(...) __VA_ARGS__ #define HKL_MODE_INFO_incidence_DEFAULTS(_axes, _parameters) \ HKL_MODE_INFO_RO_WITH_PARAMS("incidence", (_axes), (_parameters)) #define HKL_MODE_INFO_emergence_DEFAULTS(_axes, _parameters) \ HKL_MODE_INFO_RO_WITH_PARAMS("emergence", (_axes), (_parameters)) #define REGISTER_READONLY(_engine, _func, _axes, _parameters) \ static HklEngine* _func(HklEngineList *engines) \ { \ HklEngine *self = hkl_engine_ ## _engine ## _new(engines); \ static const char *axes[] = _axes; \ static const HklModeInfo info = { \ HKL_MODE_INFO_ ## _engine ## _DEFAULTS(axes, _parameters), \ }; \ HklMode *default_mode = hkl_mode_ ## _engine ## _new(&info); \ hkl_engine_add_mode(self, default_mode); \ hkl_engine_mode_set(self, default_mode); \ return self; \ } #define REGISTER_READONLY_INCIDENCE(_func, _axes, _parameters) REGISTER_READONLY(incidence, _func, P99_PROTECT(_axes), _parameters) #define REGISTER_READONLY_EMERGENCE(_func, _axes, _parameters) REGISTER_READONLY(emergence, _func, P99_PROTECT(_axes), _parameters) #endif hkl-5.0.0.2449/hkl/hkl-pseudoaxis-common-eulerians-private.h0000644000175000017500000000255513236600666023744 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_PSEUDOAXIS_COMMON_EULERIANS_H__ #define __HKL_PSEUDOAXIS_COMMON_EULERIANS_H__ #include "hkl.h" // for HklParameter, etc G_BEGIN_DECLS extern HklEngine *hkl_engine_eulerians_new(HklEngineList *engines); extern void kappa_2_kappap(double komega, double kappa, double kphi, double alpha, double *komegap, double *kappap, double *kphip); G_END_DECLS #endif /* __HKL_PSEUDOAXIS_COMMON_EULERIANS_H__ */ hkl-5.0.0.2449/hkl/hkl-quaternion.c0000644000175000017500000002021613236600666017007 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for fabs, sin, M_PI, acos, cos, etc #include // for fprintf, FILE #include // for free #include // for memcpy, memset #include "hkl-macros-private.h" // for hkl_assert, HKL_MALLOC #include "hkl-matrix-private.h" // for _HklMatrix #include "hkl-quaternion-private.h" // for _HklQuaternion #include "hkl-vector-private.h" // for HklQuaternion, HklVector, etc #include "hkl.h" // for HklMatrix, HKL_EPSILON, etc /* public */ /** * hkl_quaternion_dup: (skip) * @self: * * * * Returns: **/ HklQuaternion *hkl_quaternion_dup(const HklQuaternion* self) { HklQuaternion *dup; dup = HKL_MALLOC(HklQuaternion); memcpy(dup, self, sizeof(*self)); return dup; } /** * hkl_quaternion_free: (skip) * @self: * * **/ void hkl_quaternion_free(HklQuaternion *self) { if(!self) return; free(self); } /** * hkl_quaternion_init: * @self: the #HklQuaternion to initialize * @a: the 1st element value * @b: the 2nd element value * @c: the 3rd element value * @d: the 4th element value * * initialize the four elements of an #HklQuaternion **/ void hkl_quaternion_init(HklQuaternion *self, double a, double b, double c, double d) { self->data[0] = a; self->data[1] = b; self->data[2] = c; self->data[3] = d; } /** * hkl_quaternion_fprintf: * @file: the file to send the #HklQuaternion into * @self: the #HklQuaternion to write into the file stream. * * print an #HklQuaternion into a FILE stream **/ void hkl_quaternion_fprintf(FILE *file, HklQuaternion const *self) { double const *Q; Q = self->data; fprintf(file, "<%f, %f, %f, %f>", Q[0], Q[1], Q[2], Q[3]); } /** * hkl_quaternion_init_from_vector: * @self: the #HklQuaternion to set * @v: the #HklVector used to set the self #HklQuaternion * * initialize an #HklQuaternion from an #HklVector **/ void hkl_quaternion_init_from_vector(HklQuaternion *self, HklVector const *v) { self->data[0] = 0; memcpy(&self->data[1], &v->data[0], sizeof(v->data)); } /** * hkl_quaternion_init_from_angle_and_axe: * @self: the #HklQuaternion to set * @angle: the angles of the rotation * @v: the axe of rotation * * initialize an #HklQuaternion from a vector and a angle. **/ void hkl_quaternion_init_from_angle_and_axe(HklQuaternion *self, double angle, HklVector const *v) { double norm; double c; double s; /* check that parameters are ok. */ norm = hkl_vector_norm2(v); c = cos(angle / 2.); s = sin(angle / 2.) / norm; self->data[0] = c; self->data[1] = s * v->data[0]; self->data[2] = s * v->data[1]; self->data[3] = s * v->data[2]; } /** * hkl_quaternion_cmp: * @self: the first #HklQuaternion * @q: the second #HklQuaternion * * compare two #HklQuaternion. * * Returns: #TRUE if both are equal, #FALSE otherwise. **/ int hkl_quaternion_cmp(HklQuaternion const *self, HklQuaternion const *q) { unsigned int i; for (i=0;i<4;i++) if ( fabs(self->data[i] - q->data[i]) > HKL_EPSILON ) return FALSE; return TRUE; } /** * hkl_quaternion_minus_quaternion: * @self: the #HklQuaternion to modify. * @q: the #HklQuaternion to substract * * substract two #HklQuaternions * Todo: test **/ void hkl_quaternion_minus_quaternion(HklQuaternion *self, const HklQuaternion *q) { unsigned int i; for (i=0;i<4;i++) self->data[i] -= q->data[i]; } /** * hkl_quaternion_times_quaternion: * @self: the #HklQuaternion to modify * @q: the #HklQuaternion to multiply by * * multiply two quaternions **/ void hkl_quaternion_times_quaternion(HklQuaternion *self, const HklQuaternion *q) { HklQuaternion Tmp; double *Q; Tmp = *self; Q = Tmp.data; if (self == q){ self->data[0] = Q[0]*Q[0] - Q[1]*Q[1] - Q[2]*Q[2] - Q[3]*Q[3]; self->data[1] = Q[0]*Q[1] + Q[1]*Q[0] + Q[2]*Q[3] - Q[3]*Q[2]; self->data[2] = Q[0]*Q[2] - Q[1]*Q[3] + Q[2]*Q[0] + Q[3]*Q[1]; self->data[3] = Q[0]*Q[3] + Q[1]*Q[2] - Q[2]*Q[1] + Q[3]*Q[0]; }else{ double const *Q1 = q->data; self->data[0] = Q[0]*Q1[0] - Q[1]*Q1[1] - Q[2]*Q1[2] - Q[3]*Q1[3]; self->data[1] = Q[0]*Q1[1] + Q[1]*Q1[0] + Q[2]*Q1[3] - Q[3]*Q1[2]; self->data[2] = Q[0]*Q1[2] - Q[1]*Q1[3] + Q[2]*Q1[0] + Q[3]*Q1[1]; self->data[3] = Q[0]*Q1[3] + Q[1]*Q1[2] - Q[2]*Q1[1] + Q[3]*Q1[0]; } } /** * hkl_quaternion_norm2: * @self: the quaternion use to compute the norm * * compute the norm2 of an #HklQuaternion * * Returns: the self #hklquaternion norm **/ double hkl_quaternion_norm2(const HklQuaternion *self) { double sum2 = 0; unsigned int i; for (i=0;i<4;i++) sum2 += self->data[i] *self->data[i]; return sqrt(sum2); } /** * hkl_quaternion_conjugate: * @self: the #HklQuaternion to conjugate * * compute the conjugate of a quaternion **/ void hkl_quaternion_conjugate(HklQuaternion *self) { unsigned int i; for (i=1;i<4;i++) self->data[i] = -self->data[i]; } /** * hkl_quaternion_to_matrix: * @self: the #HklQuaternion use to compute the #HklMatrix * @m: (out caller-allocates): the #HklMatrix return. * * Compute the rotation matrix of a Quaternion. * * compute the rotation matrix corresponding to the unitary quaternion. * \f$ q = a + b \cdot i + c \cdot j + d \cdot k \f$ * * \f$ * \left( * \begin{array}{ccc} * a^2+b^2-c^2-d^2 & 2bc-2ad & 2ac+2bd\\ * 2ad+2bc & a^2-b^2+c^2-d^2 & 2cd-2ab\\ * 2bd-2ac & 2ab+2cd & a^2-b^2-c^2+d^2 * \end{array} * \right) * \f$ * Todo: optimize */ void hkl_quaternion_to_matrix(const HklQuaternion *self, HklMatrix *m) { double const *Q; /* check that parameters are ok. */ hkl_assert(fabs(hkl_quaternion_norm2(self) - 1) < HKL_EPSILON); Q = self->data; m->data[0][0] = Q[0]*Q[0] + Q[1]*Q[1] - Q[2]*Q[2] - Q[3]*Q[3]; m->data[0][1] = 2 * (Q[1]*Q[2] - Q[0]*Q[3]); m->data[0][2] = 2 * (Q[0]*Q[2] + Q[1]*Q[3]); m->data[1][0] = 2 * (Q[0]*Q[3] + Q[1]*Q[2]); m->data[1][1] = Q[0]*Q[0] - Q[1]*Q[1] + Q[2]*Q[2] - Q[3]*Q[3]; m->data[1][2] = 2 * (Q[2]*Q[3] - Q[0]*Q[1]); m->data[2][0] = 2 * (Q[1]*Q[3] - Q[0]*Q[2]); m->data[2][1] = 2 * (Q[0]*Q[1] + Q[2]*Q[3]); m->data[2][2] = Q[0]*Q[0] - Q[1]*Q[1] - Q[2]*Q[2] + Q[3]*Q[3]; } /** * hkl_quaternion_to_angle_and_axe: * @self: The #HklQuaternion use to compute the angle and the roation axis. * @angle: the returned angle of the rotation. * @v: the returned axis of the rotation. * * compute the axe and angle of the unitary quaternion angle [-pi, pi] * if q is the (1, 0, 0, 0) quaternion return the (0,0,0) axe and a 0 angle */ void hkl_quaternion_to_angle_and_axe(HklQuaternion const *self, double *angle, HklVector *v) { double angle_2; double cos_angle_2; double sin_angle_2; /* check that parameters are ok. (norm must be equal to 1) */ hkl_assert(fabs(hkl_quaternion_norm2(self) - 1) < HKL_EPSILON); /* compute the angle */ cos_angle_2 = self->data[0]; angle_2 = acos(cos_angle_2); *angle = 2 *angle_2; /* we want an angle between -pi, pi */ if (*angle > M_PI) *angle -= 2 *M_PI; /* compute the axe */ sin_angle_2 = sin(angle_2); if (fabs(sin_angle_2) > HKL_EPSILON) { /* compute the axe using the vector part of the unitary quaterninon */ memcpy(v->data, &self->data[1], sizeof(v->data)); hkl_vector_div_double(v, sin_angle_2); } else { *angle = 0; memset(v->data, 0, sizeof(v->data)); } } hkl-5.0.0.2449/hkl/hkl-types.h0000644000175000017500000000541613236600666016000 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_GLIB_H__ #define __HKL_GLIB_H__ #include // for GType #include "hkl.h" // for HKLAPI G_BEGIN_DECLS #define TYPE_HKL_DETECTOR (hkl_detector_get_type ()) HKLAPI GType hkl_detector_get_type (void) G_GNUC_CONST; #define TYPE_HKL_ENGINE (hkl_engine_get_type ()) HKLAPI GType hkl_engine_get_type (void) G_GNUC_CONST; #define TYPE_HKL_ENGINE_LIST (hkl_engine_list_get_type ()) HKLAPI GType hkl_engine_list_get_type (void) G_GNUC_CONST; #define TYPE_HKL_FACTORY (hkl_factory_get_type ()) HKLAPI GType hkl_factory_get_type (void) G_GNUC_CONST; #define TYPE_HKL_GEOMETRY (hkl_geometry_get_type ()) HKLAPI GType hkl_geometry_get_type (void) G_GNUC_CONST; #define TYPE_HKL_GEOMETRY_LIST (hkl_geometry_list_get_type ()) HKLAPI GType hkl_geometry_list_get_type (void) G_GNUC_CONST; #define TYPE_HKL_GEOMETRY_LIST_ITEM (hkl_geometry_list_item_get_type ()) HKLAPI GType hkl_geometry_list_item_get_type (void) G_GNUC_CONST; #define TYPE_HKL_LATTICE (hkl_lattice_get_type ()) HKLAPI GType hkl_lattice_get_type (void) G_GNUC_CONST; #define TYPE_HKL_MATRIX (hkl_matrix_get_type ()) HKLAPI GType hkl_matrix_get_type (void) G_GNUC_CONST; #define TYPE_HKL_PARAMETER (hkl_parameter_get_type ()) HKLAPI GType hkl_parameter_get_type (void) G_GNUC_CONST; #define TYPE_HKL_SAMPLE_REFLECTION (hkl_sample_reflection_get_type ()) HKLAPI GType hkl_sample_reflection_get_type (void) G_GNUC_CONST; #define TYPE_HKL_SAMPLE (hkl_sample_get_type ()) HKLAPI GType hkl_sample_get_type (void) G_GNUC_CONST; #define TYPE_HKL_UNIT (hkl_unit_get_type ()) HKLAPI GType hkl_unit_get_type (void) G_GNUC_CONST; #define TYPE_HKL_VECTOR (hkl_vector_get_type ()) HKLAPI GType hkl_vector_get_type (void) G_GNUC_CONST; #define TYPE_HKL_QUATERNION (hkl_quaternion_get_type ()) HKLAPI GType hkl_quaternion_get_type (void) G_GNUC_CONST; G_END_DECLS #endif hkl-5.0.0.2449/hkl/hkl-parameter-private.h0000644000175000017500000002033113236600666020255 0ustar00piccapicca00000000000000 /* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_PARAMETER_PRIVATE_H__ #define __HKL_PARAMETER_PRIVATE_H__ #include // for M_PI #include // for FILE, fprintf, NULL #include // for free, rand, RAND_MAX #include "ccan/compiler/compiler.h" #include "hkl-interval-private.h" // for HklInterval #include "hkl-macros-private.h" // for HKL_MALLOC #include "hkl-unit-private.h" // for HklUnit, hkl_unit_factor #include "hkl.h" // for HklParameter, TRUE, etc G_BEGIN_DECLS typedef struct _HklParameterOperations HklParameterOperations; struct _HklParameter { const char *name; const char *description; HklInterval range; double _value; const HklUnit *unit; const HklUnit *punit; int fit; int changed; const HklParameterOperations *ops; }; #define HKL_PARAMETER_DEFAULTS .name="dummy", .description="no description", .range={.min=-DBL_MAX, .max=DBL_MAX}, ._value=0, .unit=NULL, .punit=NULL, .fit=TRUE, .changed=TRUE, .ops = &hkl_parameter_operations_defaults #define HKL_PARAMETER_DEFAULTS_ANGLE HKL_PARAMETER_DEFAULTS, .range={.min=-M_PI, .max=M_PI}, .unit = &hkl_unit_angle_rad, .punit = &hkl_unit_angle_deg #define HKL_PARAMETER_ERROR hkl_parameter_error_quark () static inline GQuark hkl_parameter_error_quark (void) { return g_quark_from_static_string ("hkl-parameter-error-quark"); } typedef enum { HKL_PARAMETER_ERROR_MIN_MAX_SET, /* can not set the min max */ } HklParameterError; /****************/ /* HklParameter */ /****************/ struct _HklParameterOperations { HklParameter * (*copy)(const HklParameter *self); void (*free)(HklParameter *self); int (*init_copy)(HklParameter *self, const HklParameter *src, GError **error); double (*get_value_closest)(const HklParameter *self, const HklParameter *other); int (*set_value)(HklParameter *self, double value, HklUnitEnum unit_type, GError **error); void (*set_value_smallest_in_range)(HklParameter *self); void (*randomize)(HklParameter *self); int (*is_valid)(const HklParameter *self); int (*is_valid_range)(const HklParameter *self); void (*fprintf)(FILE *f, const HklParameter *self); const HklVector * (*axis_v_get)(const HklParameter *self); const HklQuaternion * (*quaternion_get)(const HklParameter *self); int (*transformation_cmp)(const HklParameter *self, const HklParameter *p2); HklVector (*transformation_apply)(const HklParameter *self, const HklVector *v); }; #define HKL_PARAMETER_OPERATIONS_DEFAULTS \ .copy = hkl_parameter_copy_real, \ .free = hkl_parameter_free_real, \ .init_copy = hkl_parameter_init_copy_real, \ .get_value_closest = hkl_parameter_value_get_closest_real, \ .set_value = hkl_parameter_value_set_real, \ .set_value_smallest_in_range = hkl_parameter_value_set_smallest_in_range_real, \ .randomize = hkl_parameter_randomize_real, \ .is_valid = hkl_parameter_is_valid_real, \ .is_valid_range = hkl_parameter_is_valid_real, \ .fprintf = hkl_parameter_fprintf_real, \ .axis_v_get = hkl_parameter_axis_v_get_real, \ .quaternion_get = hkl_parameter_quaternion_get_real, \ .transformation_cmp = hkl_parameter_transformation_cmp_real, \ .transformation_apply = hkl_parameter_transformation_apply_real static inline HklParameter *hkl_parameter_copy_real(const HklParameter *self) { HklParameter *dup = HKL_MALLOC(HklParameter); *dup = *self; return dup; } static inline void hkl_parameter_free_real(HklParameter *self) { free(self); } static inline int hkl_parameter_init_copy_real(HklParameter *self, const HklParameter *src, GError **error) { hkl_error (error == NULL || *error == NULL); hkl_error (self->name == src->name || strcmp(self->name, src->name) == 0); *self = *src; self->changed = TRUE; return TRUE; } static inline double hkl_parameter_value_get_closest_real(const HklParameter *self, UNUSED const HklParameter *ref) { return self->_value; } static inline int hkl_parameter_value_set_real(HklParameter *self, double value, HklUnitEnum unit_type, GError **error) { hkl_error (error == NULL || *error == NULL); switch (unit_type) { case HKL_UNIT_DEFAULT: self->_value = value; break; case HKL_UNIT_USER: self->_value = value / hkl_unit_factor(self->unit, self->punit); break; } self->changed = TRUE; return TRUE; } static inline void hkl_parameter_value_set_smallest_in_range_real(UNUSED HklParameter *self) { /* DOES NOTHING for a standard parameter */ } static inline void hkl_parameter_randomize_real(HklParameter *self) { if (self->fit) { double alea = (double)rand() / (RAND_MAX + 1.); self->_value = self->range.min + (self->range.max - self->range.min) * alea; self->changed = TRUE; } } static inline int hkl_parameter_is_valid_real(const HklParameter *self) { if(self->_value < (self->range.min - HKL_EPSILON) || self->_value > (self->range.max + HKL_EPSILON)) return FALSE; else return TRUE; } static inline void hkl_parameter_fprintf_real(FILE *f, const HklParameter *self) { double factor = hkl_unit_factor(self->unit, self->punit); if (self->punit) fprintf(f, "\"%s\" : %.7f %s [%.7f : %.7f] (%d)", self->name, self->_value * factor, self->punit->repr, self->range.min * factor, self->range.max * factor, self->fit); else fprintf(f, "\"%s\" : %.7f [%.7f : %.7f] (%d)", self->name, self->_value * factor, self->range.min * factor, self->range.max * factor, self->fit); } static inline const HklVector *hkl_parameter_axis_v_get_real(UNUSED const HklParameter *self) { return NULL; } static inline const HklQuaternion *hkl_parameter_quaternion_get_real(UNUSED const HklParameter *self) { return NULL; } static inline int hkl_parameter_transformation_cmp_real(const HklParameter *self, const HklParameter *p2) { return self->ops != p2->ops; } static inline HklVector hkl_parameter_transformation_apply_real(UNUSED const HklParameter *self, const HklVector *v) { return *v; } static NEEDED HklParameterOperations hkl_parameter_operations_defaults = { HKL_PARAMETER_OPERATIONS_DEFAULTS, }; extern HklParameter *hkl_parameter_new(const char *name, const char *description, double min, double value, double max, int fit, int changed, const HklUnit *unit, const HklUnit *punit); extern int hkl_parameter_init_copy(HklParameter *self, const HklParameter *src, GError **error); extern double hkl_parameter_value_get_closest(const HklParameter *self, const HklParameter *ref); extern void hkl_parameter_value_set_smallest_in_range(HklParameter *self); extern int hkl_parameter_is_valid(const HklParameter *self); extern int hkl_parameter_is_valid_range(const HklParameter *self); extern void hkl_parameter_fprintf(FILE *f, const HklParameter *self); extern int hkl_parameter_transformation_cmp(const HklParameter *self, const HklParameter *p2); extern HklVector hkl_parameter_transformation_apply(const HklParameter *self, const HklVector *v); /********************/ /* HklParameterList */ /********************/ typedef darray(HklParameter *) darray_parameter; G_END_DECLS #endif /* __HKL_PARAMETER_PRIVATE_H__ */ hkl-5.0.0.2449/hkl/hkl-pseudoaxis.c0000644000175000017500000005037113237017527017012 0ustar00piccapicca00000000000000/* * This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for fprintf, FILE #include // for free #include // for NULL, strcmp #include // for uint #include "hkl-detector-private.h" // for hkl_detector_new_copy #include "hkl-geometry-private.h" // for _HklGeometryList, etc #include "hkl-macros-private.h" // for hkl_assert, HKL_MALLOC, etc #include "hkl-parameter-private.h" // for hkl_parameter_list_fprintf, etc #include "hkl-pseudoaxis-private.h" // for _HklEngine, _HklEngineList, etc #include "hkl-sample-private.h" #include "hkl.h" // for HklEngine, HklEngineList, etc #include "hkl/ccan/container_of/container_of.h" // for container_of #include "hkl/ccan/darray/darray.h" // for darray_foreach, darray_init, etc /***********/ /* HklMode */ /***********/ /** * hkl_mode_fprintf: (skip) * @f: * @self: * * print to a FILE the HklPSeudoAxisEngineMode members **/ void hkl_mode_fprintf(FILE *f, const HklMode *self) { HklParameter **parameter; const char **axis; fprintf(f, "mode: \"%s\"\n", self->info->name); fprintf(f, "initialized_get: %p\n", self->ops->initialized_get); fprintf(f, "initialized_set: %p\n", self->ops->initialized_set); fprintf(f, "get: %p\n", self->ops->get); fprintf(f, "set: %p\n", self->ops->set); darray_foreach(parameter, self->parameters){ fprintf(f, "\n "); hkl_parameter_fprintf(f, *parameter); } fprintf(f, "axes (read) names:"); darray_foreach(axis, self->info->axes_r) fprintf(f, " %s", *axis); fprintf(f, "\n"); fprintf(f, "axes (write) names:"); darray_foreach(axis, self->info->axes_w) fprintf(f, " %s", *axis); fprintf(f, "\n"); } /*************/ /* HklEngine */ /*************/ /** * hkl_engine_name_get: * @self: the this ptr * * Return value: the name of the HklEngine **/ const char *hkl_engine_name_get(const HklEngine *self) { return self->info->name; } /** * hkl_engine_len: (skip) * @self: the this ptr * * Return value: the len of the pseudo axes of the HklEngine **/ unsigned int hkl_engine_len(const HklEngine *self) { return darray_size(self->info->pseudo_axes); } /** * hkl_engine_pseudo_axis_names_get: * @self: the this ptr * * Return value: (type gpointer): the pseudo_axes managed by this #HklEngine **/ const darray_string *hkl_engine_pseudo_axis_names_get(HklEngine *self) { return &self->pseudo_axis_names; } /** * hkl_engine_pseudo_axis_values_get: * @self: the this ptr * @values: (array length=n_values): the values to get * @n_values: the size of the values array. * @unit_type: the unit type (default or user) of the returned value * * Get the engine pseudo axes values * * return value: TRUE if succeded or FALSE otherwise. **/ int hkl_engine_pseudo_axis_values_get(HklEngine *self, double values[], size_t n_values, HklUnitEnum unit_type, GError **error) { hkl_error(error == NULL ||*error == NULL); if(n_values != darray_size(self->info->pseudo_axes)){ g_set_error(error, HKL_ENGINE_ERROR, HKL_ENGINE_ERROR_PSEUDO_AXIS_VALUES_GET, "cannot get engine pseudo axes, wrong number of parameter (%zd) given, (%zd) expected\n", n_values, darray_size(self->info->pseudo_axes)); return FALSE; } if(!hkl_engine_get(self, error)){ g_assert(error == NULL || *error != NULL); return FALSE; } g_assert(error == NULL || *error == NULL); for(size_t i=0; ipseudo_axes, i), unit_type); } return TRUE; } /** * hkl_engine_pseudo_axis_values_set: * @self: the this ptr * @values: (array length=n_values): the values to set * @n_values: the size of the values array. * @unit_type: the unit type (default or user) of the returned value * @error: return location for a GError, or NULL * * Set the engine pseudo axes values * * Return value: #HklGeometryList or NULL if no solution was found, * use hkl_geometry_list_free to release the memory once done. **/ HklGeometryList *hkl_engine_pseudo_axis_values_set(HklEngine *self, double values[], size_t n_values, HklUnitEnum unit_type, GError **error) { #if LOGGING char *msg; size_t msg_size; FILE *stream; #endif HklGeometryList *solutions = NULL; hkl_error(error == NULL ||*error == NULL); if(n_values != darray_size(self->info->pseudo_axes)){ g_set_error(error, HKL_ENGINE_ERROR, HKL_ENGINE_ERROR_PSEUDO_AXIS_VALUES_SET, "cannot set engine pseudo axes, wrong number of parameter (%zd) given, (%zd) expected\n", n_values, darray_size(self->info->pseudo_axes)); goto out; } #if LOGGING stream = open_memstream(&msg, &msg_size); fprintf(stream, "%s(", __func__); fprintf(stream, "self: %s, values: [", hkl_engine_name_get(self)); for(size_t i=0; iengines->geometry); hkl_sample_fprintf(stream, self->engines->sample); hkl_engine_fprintf(stream, self); #endif for(size_t i=0; ipseudo_axes, i), values[i], unit_type, error)){ goto clean_stream_out; } } if(!hkl_engine_set(self, error)){ #if LOGGING fflush(stream); g_message(msg); if(error && *error != NULL) g_warning("%s", (*error)->message); #endif goto clean_stream_out; } solutions = hkl_geometry_list_new_copy(self->engines->geometries); #if LOGGING hkl_geometry_list_fprintf(stream, solutions); fflush(stream); g_message(msg); #endif clean_stream_out: #if LOGGING fclose(stream); free(msg); #endif out: return solutions; } /** * hkl_engine_pseudo_axis_get: * @self: the this ptr * @name: the name of the expected pseudo_axis * @error: return location for a GError, or NULL * * get the #HklParameter with the given @name. * * Returns: (allow-none): retun the parameter or NULL if the engine * does not contain this pseudo_axis. * TODO: unit test **/ const HklParameter *hkl_engine_pseudo_axis_get(const HklEngine *self, const char *name, GError **error) { HklParameter **parameter; hkl_error (error == NULL || *error == NULL); darray_foreach(parameter, self->pseudo_axes) if(!strcmp((*parameter)->name, name)) return *parameter; g_set_error(error, HKL_ENGINE_ERROR, HKL_ENGINE_ERROR_PSEUDO_AXIS_SET, "This pseudo axis doesn not contain this pseudo axis \"%s\"\n", name); return NULL; } /** * hkl_engine_pseudo_axis_set: (skip) * @self: the this ptr * @name: the name of the pseudo_axis to set * @parameter: the parameter to set. * @error: return location for a GError, or NULL * * set a parameter of the #HklEngine * * Return value: #HklGeometryList or NULL if no solution was found, * use hkl_geometry_list_free to release the memory once done. **/ HklGeometryList *hkl_engine_pseudo_axis_set(HklEngine *self, const char *name, const HklParameter *parameter, GError **error) { HklParameter **p; hkl_error (error == NULL || *error == NULL); hkl_error (strcmp(name, parameter->name) == 0); darray_foreach(p, self->pseudo_axes) if(!strcmp((*p)->name, parameter->name)){ /* todo save the previous value to restore this value */ hkl_parameter_init_copy(*p, parameter, NULL); if(!hkl_engine_set(self, error)){ g_assert(error == NULL || *error != NULL); return NULL; } g_assert(error == NULL || *error == NULL); return hkl_geometry_list_new_copy(self->engines->geometries); } g_set_error(error, HKL_ENGINE_ERROR, HKL_ENGINE_ERROR_PSEUDO_AXIS_SET, "Can not find the pseudo axis \"%s\" in the \"%s\" engine\n", parameter->name, self->info->name); return NULL; } /** * hkl_engine_capabilities_get: * @self: the this ptr * * return the capabilities of the engine. Theses capabilities can * change, from on mode to the other. for now there is three kind of * capabilities. * * HKL_ENGINE_CAP_READABLE: pseudo axes values can be read from the HklEngine * * HKL_ENGINE_CAP_WRITABLE: pseudo axes values can be set for this #HklEngine * * HKL_ENGINE_CAP_INITIALISABLE: this pseudo axes must be initialized * with hkl_engine_initialize before * reading or writing on it. * * Returns: **/ unsigned int hkl_engine_capabilities_get(const HklEngine *self) { return self->mode->ops->capabilities; } /** * hkl_engine_modes_names_get: * @self: the this ptr * * Return value: (type gpointer): All the modes supported by the #HklEngine **/ const darray_string *hkl_engine_modes_names_get(const HklEngine *self) { return &self->mode_names; } /** * hkl_engine_parameters_names_get: * @self: the this ptr * * Return value: (type gpointer): All the parameters of #HklEngine. **/ const darray_string *hkl_engine_parameters_names_get(const HklEngine *self) { return &self->mode->parameters_names; } /** * hkl_engine_parameters_values_get: (skip) * @self: the this ptr * @values: (array length=n_values): the values to get * @n_values: the size of the values array. * @unit_type: the unit type (default or user) of the returned value * * Get the engine parameters values **/ void hkl_engine_parameters_values_get(const HklEngine *self, double values[], size_t n_values, HklUnitEnum unit_type) { g_return_if_fail (n_values == darray_size(self->mode->parameters)); for(size_t i=0; imode->parameters, i), unit_type); } /** * hkl_engine_parameters_values_set: * @self: the this ptr * @values: (array length=n_values): the values to set * @n_values: the size of the values array. * @unit_type: the unit type (default or user) of the returned value * @error: return location for a GError, or NULL * * Set the engine parameters values * * return value: TRUE if succeded or FALSE otherwise. **/ int hkl_engine_parameters_values_set(HklEngine *self, double values[], size_t n_values, HklUnitEnum unit_type, GError **error) { hkl_error (error == NULL || *error == NULL || n_values == darray_size(self->mode->parameters)); for(size_t i=0; imode->parameters, i), values[i], unit_type, error)){ g_assert (error == NULL || *error != NULL); return FALSE; } } g_assert (error == NULL || *error == NULL); return TRUE; } /** * hkl_engine_parameter_get: * @self: the this ptr * @name: the name of the expected parameter * @error: return location for a GError, or NULL * * get the #HklParameter with the given @name. * * Returns: (allow-none): return the parameter or NULL if the engine * does not contain this parameter. **/ const HklParameter *hkl_engine_parameter_get(const HklEngine *self, const char *name, GError **error) { HklParameter **parameter; hkl_error (error == NULL || *error == NULL); darray_foreach(parameter, self->mode->parameters) if(!strcmp((*parameter)->name, name)) return *parameter; g_set_error(error, HKL_ENGINE_ERROR, HKL_ENGINE_ERROR_PARAMETER_GET, "this engine does not contain this parameter \"%s\"\n", name); return NULL; } /** * hkl_engine_parameter_set: * @self: the this ptr * @name: the name of the parameter to set. * @parameter: the parameter to set. * @error: return location for a GError, or NULL * * set a parameter of the #HklEngine * TODO add an error * * return value: TRUE if succeded or FALSE otherwise. **/ int hkl_engine_parameter_set(HklEngine *self, const char *name, const HklParameter *parameter, GError **error) { HklParameter **p; hkl_error (error == NULL || *error == NULL); darray_foreach(p, self->mode->parameters) if(!strcmp(name, (*p)->name)){ const char *old_name = (*p)->name; hkl_parameter_init_copy(*p, parameter, NULL); /* we do not check if the name is identical so force the right name */ /* TODO rethink this HklParameter assignement */ (*p)->name = old_name; return TRUE; } g_set_error(error, HKL_ENGINE_ERROR, HKL_ENGINE_ERROR_PARAMETER_SET, "this engine does not contain this parameter \"%s\"\n", parameter->name); return FALSE; } /** * hkl_engine_current_mode_get: * @self: the this ptr * * Returns: the current HklEngine mode **/ const char *hkl_engine_current_mode_get(const HklEngine *self) { return self->mode->info->name; } /** * hkl_engine_current_mode_set: * @self: the HklEngine * @name: the mode to select * @error: return location for a GError, or NULL * * This method also populate the self->axes from the mode->axis_names. * this is to speed the computation of the numerical axes. * * return value: TRUE if succeded or FALSE otherwise. **/ int hkl_engine_current_mode_set(HklEngine *self, const char *name, GError **error) { HklMode **mode; hkl_error (error == NULL || *error == NULL); darray_foreach(mode, self->modes) if(!strcmp((*mode)->info->name, name)){ hkl_engine_mode_set(self, *mode); return TRUE; } g_set_error(error, HKL_ENGINE_ERROR, HKL_ENGINE_ERROR_CURRENT_MODE_SET, "this engine does not contain this mode \"%s\"\n", name); return FALSE; } /** * hkl_engine_axis_names_get: * @self: the this ptr * @mode: * * return a list of axes relevant when reading or writing on the * #HklEngine. * * exemple, for a K6C diffractometer in "lifting detector" mode, your * Engine control only 3 motors when writing, but the hkl values * depends on the 6 motors when reading. * * Returns: (type gpointer): **/ const darray_string *hkl_engine_axis_names_get(const HklEngine *self, HklEngineAxisNamesGet mode) { switch(mode){ case HKL_ENGINE_AXIS_NAMES_GET_READ: return &self->mode->info->axes_r; case HKL_ENGINE_AXIS_NAMES_GET_WRITE: return &self->mode->info->axes_w; default: return NULL; } } int hkl_engine_initialized_get(const HklEngine *self) { return hkl_mode_initialized_get(self->mode); } /** * hkl_engine_initialized_set: * @self: the HklEngine * @initialized: TRUE or FALSE to activated or deactivate the HklEngine * @error: return location for a GError, or NULL * * initialize the HklEngine * * return value: TRUE if succeded or FALSE otherwise. **/ int hkl_engine_initialized_set(HklEngine *self, int initialized, GError **error) { hkl_error (error == NULL || *error == NULL); if(!self->geometry || !self->detector || !self->sample || !self->mode) { g_set_error(error, HKL_ENGINE_ERROR, HKL_ENGINE_ERROR_INITIALIZE, "Internal error"); return FALSE; } return hkl_mode_initialized_set(self->mode, self, self->engines->geometry, self->engines->detector, self->engines->sample, initialized, error); } /** * hkl_engine_dependencies_get: * @self: the this ptr * * return all dependencies of the engine which are not mode parameters * or axes. The possible combination of values are defined in * #HklEngineDependencies enum. * * return value: **/ unsigned int hkl_engine_dependencies_get(const HklEngine *self) { return self->info->dependencies; } /** * hkl_engine_fprintf: (skip) * @f: the FILE * @self: the HklEngine * * print to a FILE the HklEngine **/ void hkl_engine_fprintf(FILE *f, const HklEngine *self) { HklParameter **pseudo_axis; fprintf(f, "\nPseudoAxesEngine : \"%s\"", self->info->name); /* mode */ if (self->mode) { fprintf(f, " %s", self->mode->info->name); for(uint i=0; imode->parameters); ++i){ fprintf(f, "\n "); hkl_parameter_fprintf( f, darray_item(self->mode->parameters, i)); } fprintf(f, "\n"); } /* the pseudoAxes part */ darray_foreach(pseudo_axis, self->pseudo_axes){ fprintf(f, "\n "); hkl_parameter_fprintf(f, *pseudo_axis); } if(self->engines->geometries->n_items != 0){ fprintf(f, "\n "); hkl_geometry_list_fprintf(f, self->engines->geometries); } fprintf(f, "\n"); } /*****************/ /* HklEngineList */ /*****************/ /** * hkl_engine_list_free: (skip) * @self: the #HklEngineList to destroy * * destructor **/ void hkl_engine_list_free(HklEngineList *self) { hkl_engine_list_clear(self); hkl_geometry_list_free(self->geometries); free(self); } /** * hkl_engine_list_engines_get: (skip) * @self: the this ptr * * Return: a pointer on the engine array **/ darray_engine *hkl_engine_list_engines_get(HklEngineList *self) { return (darray_engine *)self; } /** * hkl_engine_list_geometry_get: (skip) * @self: the this ptr * * Return: a pointer on the geometry member **/ HklGeometry *hkl_engine_list_geometry_get(HklEngineList *self) { return self->geometry; } int hkl_engine_list_geometry_set(HklEngineList *self, const HklGeometry *geometry) { if(!hkl_geometry_set(self->geometry, geometry)) return FALSE; hkl_engine_list_get(self); return TRUE; } /** * hkl_engine_list_select_solution: * @self: the this ptr * @item: the #HklGeoemtryListItem selected. * * this method set the geometry member with the selected solution. * * return value: TRUE if succeded or FALSE otherwise. **/ int hkl_engine_list_select_solution(HklEngineList *self, const HklGeometryListItem *item) { return hkl_geometry_init_geometry(self->geometry, item->geometry); } /** * hkl_engine_list_engine_get_by_name: * @self: the this ptr * @name: the name of the requested #HklPseudoAxisEngin * @error: return location for a GError, or NULL * * get the #HklEngine by its name from the list. * * Returns: (transfer none) (allow-none): the requested engine **/ HklEngine *hkl_engine_list_engine_get_by_name(HklEngineList *self, const char *name, GError **error) { HklEngine **engine; hkl_error (error == NULL || *error == NULL); darray_foreach(engine, *self){ if (!strcmp((*engine)->info->name, name)) return *engine; } g_set_error(error, HKL_ENGINE_LIST_ERROR, HKL_ENGINE_LIST_ERROR_ENGINE_GET_BY_NAME, "this engine list does not contain this engine \"%s\"", name); return NULL; } /** * hkl_engine_list_init: * @self: the engine list * @geometry: the associated #HklGeometry * @detector: the associated #HklDetector * @sample: the associated #HklSample * * before using an engine list you must associate all engines to a * Geometry, a detector and a sample. **/ void hkl_engine_list_init(HklEngineList *self, HklGeometry *geometry, HklDetector *detector, HklSample *sample) { HklEngine **engine; self->geometry = geometry; self->detector = detector; self->sample = sample; darray_foreach(engine, *self){ hkl_engine_prepare_internal(*engine); } } /** * hkl_engine_list_get: * @self: the list of #HklEngine * * apply the get method to all the #HklEngine of the list * after this it is possible to retrive all the #HklPseudoAxis values. * * Returns: HKL_SUCCESS or HKL_FAIL if one of the #HklEngine * get method failed. **/ int hkl_engine_list_get(HklEngineList *self) { HklEngine **engine; int res = TRUE; darray_foreach(engine, *self){ res &= hkl_engine_get(*engine, NULL); } return res; } /** * hkl_engine_list_fprintf: (skip) * @f: the File * @self: the list * * print to a FILE the #HklEngineList **/ void hkl_engine_list_fprintf(FILE *f, const HklEngineList *self) { HklEngine **engine; darray_foreach(engine, *self){ hkl_engine_fprintf(f, *engine); } } hkl-5.0.0.2449/hkl/hkl-lattice-private.h0000644000175000017500000000335113236600666017725 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_LATTICE_PRIVATE_H__ #define __HKL_LATTICE_PRIVATE_H__ #include #include "hkl.h" G_BEGIN_DECLS struct _HklLattice { HklParameter *a; HklParameter *b; HklParameter *c; HklParameter *alpha; HklParameter *beta; HklParameter *gamma; HklParameter *volume; }; #define HKL_LATTICE_ERROR hkl_lattice_error_quark () static inline GQuark hkl_lattice_error_quark (void) { return g_quark_from_static_string ("hkl-lattice-error-quark"); } typedef enum { HKL_LATTICE_CHECK_LATTICE, /* the lattice parameters are not valid */ } HklLatticeError; extern void hkl_lattice_lattice_set(HklLattice *self, const HklLattice *lattice); extern void hkl_lattice_randomize(HklLattice *self); extern void hkl_lattice_fprintf(FILE *f, const HklLattice *self); G_END_DECLS #endif /* __HKL_LATTICE_PRIVATE_H__ */ hkl-5.0.0.2449/hkl/hkl-engine-e4c.c0000644000175000017500000002452713236600666016551 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for gsl_isnan #include "hkl-factory-private.h" // for autodata_factories_, etc #include "hkl-pseudoaxis-common-q-private.h" // for hkl_engine_q2_new, etc #include "hkl-pseudoaxis-common-hkl-private.h" // for hkl_mode_operations, etc #include "hkl-pseudoaxis-common-psi-private.h" // for hkl_engine_psi_new, etc #include "hkl-pseudoaxis-common-readonly-private.h" #define OMEGA "omega" #define CHI "chi" #define PHI "phi" #define TTH "tth" /************/ /* mode hkl */ /************/ static int _bissector_func(const gsl_vector *x, void *params, gsl_vector *f) { const double omega = x->data[0]; const double tth = x->data[3]; CHECK_NAN(x->data, x->size); RUBh_minus_Q(x->data, params, f->data); f->data[3] = tth - 2 * fmod(omega,M_PI); return GSL_SUCCESS; } static const HklFunction bissector_func = { .function = _bissector_func, .size = 4, }; static HklMode *bissector(void) { static const char* axes[] = {OMEGA, CHI, PHI, TTH}; static const HklFunction *functions[] = {&bissector_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes, axes, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklMode *constant_omega(void) { static const char* axes_r[] = {OMEGA, CHI, PHI, TTH}; static const char* axes_w[] = {CHI, PHI, TTH}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklMode *constant_chi(void) { static const char* axes_r[] = {OMEGA, CHI, PHI, TTH}; static const char* axes_w[] = {OMEGA, PHI, TTH}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklMode *constant_phi(void) { static const char* axes_r[] = {OMEGA, CHI, PHI, TTH}; static const char* axes_w[] = {OMEGA, CHI, TTH}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklMode *double_diffraction(void) { static const char* axes[] = {OMEGA, CHI, PHI, TTH}; static const HklFunction *functions[] = {&double_diffraction_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes, axes, functions, double_diffraction_parameters), }; return hkl_mode_auto_new(&info, &hkl_full_mode_operations, TRUE); } static HklMode *psi_constant(void) { static const char* axes[] = {OMEGA, CHI, PHI, TTH}; static const HklFunction *functions[] = {&psi_constant_vertical_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes, axes, functions, psi_constant_parameters), }; return hkl_mode_auto_new(&info, &psi_constant_vertical_mode_operations, TRUE); } static HklEngine *hkl_engine_e4c_hkl_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_hkl_new(engines); default_mode = bissector(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); hkl_engine_add_mode(self, constant_omega()); hkl_engine_add_mode(self, constant_chi()); hkl_engine_add_mode(self, constant_phi()); hkl_engine_add_mode(self, double_diffraction()); hkl_engine_add_mode(self, psi_constant()); return self; } /************/ /* mode psi */ /************/ static HklMode *psi(void) { static const char *axes[] = {OMEGA, CHI, PHI, TTH}; static const HklFunction *functions[] = {&psi_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes, axes, functions, psi_parameters), }; return hkl_mode_psi_new(&info); } static HklEngine *hkl_engine_e4c_psi_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_psi_new(engines); default_mode = psi(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); return self; } /*****************/ /* mode readonly */ /*****************/ REGISTER_READONLY_INCIDENCE(hkl_engine_e4c_incidence_new, P99_PROTECT({OMEGA, CHI, PHI}), surface_parameters_y); REGISTER_READONLY_EMERGENCE(hkl_engine_e4c_emergence_new, P99_PROTECT({OMEGA, CHI, PHI, TTH}), surface_parameters_y); /********/ /* E4CV */ /********/ #define HKL_GEOMETRY_EULERIAN4C_VERTICAL_DESCRIPTION \ "+ xrays source fix allong the :math:`\\vec{x}` direction (1, 0, 0)\n" \ "+ 3 axes for the sample\n" \ "\n" \ " + **" OMEGA "** : rotating around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ " + **" CHI "** : rotating around the :math:`\\vec{x}` direction (1, 0, 0)\n" \ " + **" PHI "** : rotating around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ "\n" \ "+ 1 axis for the detector\n" \ "\n" \ " + **" TTH "** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" static const char* hkl_geometry_eulerian4C_vertical_axes[] = {OMEGA, CHI, PHI, TTH}; static HklGeometry *hkl_geometry_new_eulerian4C_vertical(const HklFactory *factory) { HklGeometry *self = hkl_geometry_new(factory, &hkl_geometry_operations_defaults); HklHolder *h; h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, OMEGA, 0, -1, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, CHI, 1, 0, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, PHI, 0, -1, 0, &hkl_unit_angle_deg); h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, TTH, 0, -1, 0, &hkl_unit_angle_deg); return self; } static HklEngineList *hkl_engine_list_new_eulerian4C_vertical(const HklFactory *factory) { HklEngineList *self = hkl_engine_list_new(); hkl_engine_e4c_hkl_new(self); hkl_engine_e4c_psi_new(self); hkl_engine_q_new(self); hkl_engine_e4c_incidence_new(self); hkl_engine_e4c_emergence_new(self); return self; } REGISTER_DIFFRACTOMETER(eulerian4C_vertical, "E4CV", HKL_GEOMETRY_EULERIAN4C_VERTICAL_DESCRIPTION); /***************/ /* SOLEIL MARS */ /***************/ #define HKL_GEOMETRY_TYPE_SOLEIL_MARS_DESCRIPTION \ "+ xrays source fix allong the :math:`\\vec{x}` direction (1, 0, 0)\n" \ "+ 3 axes for the sample\n" \ "\n" \ " + **" OMEGA "** : rotating around the :math:`\\vec{z}` direction (0, -1, 0)\n" \ " + **" CHI "** : rotating around the :math:`\\vec{x}` direction (-1, 0, 0)\n" \ " + **" PHI "** : rotating around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ "\n" \ "+ 1 axis for the detector\n" \ "\n" \ " + **" TTH "** : rotation around the :math:`\\vec{z}` direction (0, -1, 0)\n" static const char* hkl_geometry_soleil_mars_axes[] = {OMEGA, CHI, PHI, TTH}; static HklGeometry *hkl_geometry_new_soleil_mars(const HklFactory *factory) { HklGeometry *self = hkl_geometry_new(factory, &hkl_geometry_operations_defaults); HklHolder *h; h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, OMEGA, 0, -1, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, CHI, -1, 0, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, PHI, 0, 0, 1, &hkl_unit_angle_deg); h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, TTH, 0, -1, 0, &hkl_unit_angle_deg); return self; } static HklEngineList *hkl_engine_list_new_soleil_mars(const HklFactory *factory) { HklEngineList *self = hkl_engine_list_new(); hkl_engine_e4c_hkl_new(self); hkl_engine_e4c_psi_new(self); hkl_engine_q_new(self); hkl_engine_e4c_incidence_new(self); hkl_engine_e4c_emergence_new(self); return self; } REGISTER_DIFFRACTOMETER(soleil_mars, "SOLEIL MARS", HKL_GEOMETRY_TYPE_SOLEIL_MARS_DESCRIPTION); /********/ /* E4CH */ /********/ #define HKL_GEOMETRY_TYPE_EULERIAN4C_HORIZONTAL_DESCRIPTION \ "+ xrays source fix allong the :math:`\\vec{x}` direction (1, 0, 0)\n" \ "+ 3 axes for the sample\n" \ "\n" \ " + **" OMEGA "** : rotating around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ " + **" CHI "** : rotating around the :math:`\\vec{x}` direction (1, 0, 0)\n" \ " + **" PHI "** : rotating around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ "\n" \ "+ 1 axis for the detector\n" \ "\n" \ " + **" TTH "** : rotation around the :math:`\\vec{z}` direction (0, 0, 1)\n" static const char* hkl_geometry_eulerian4C_horizontal_axes[] = {OMEGA, CHI, PHI, TTH}; static HklGeometry *hkl_geometry_new_eulerian4C_horizontal(const HklFactory *factory) { HklGeometry *self = hkl_geometry_new(factory, &hkl_geometry_operations_defaults); HklHolder *h; h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, OMEGA, 0, 0, 1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, CHI, 1, 0, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, PHI, 0, 0, 1, &hkl_unit_angle_deg); h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, TTH, 0, 0, 1, &hkl_unit_angle_deg); return self; } static HklEngineList *hkl_engine_list_new_eulerian4C_horizontal(const HklFactory *factory) { HklEngineList *self = hkl_engine_list_new(); hkl_engine_e4c_hkl_new(self); hkl_engine_e4c_psi_new(self); hkl_engine_q_new(self); hkl_engine_e4c_incidence_new(self); hkl_engine_e4c_emergence_new(self); return self; } REGISTER_DIFFRACTOMETER(eulerian4C_horizontal, "E4CH", HKL_GEOMETRY_TYPE_EULERIAN4C_HORIZONTAL_DESCRIPTION); hkl-5.0.0.2449/hkl/hkl-pseudoaxis-common-hkl.c0000644000175000017500000006432513236600666021061 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel * Maria-Teresa Nunez-Pardo-de-Verra */ #include // for ::GSL_SUCCESS, etc #include #include // for gsl_sf_angle_restrict_pos #include // for gsl_vector, etc #include // for fabs, M_PI #include // for size_t #include // for free, malloc, rand, etc #include // for NULL #include // for uint #include "hkl-axis-private.h" // for HklAxis #include "hkl-detector-private.h" // for hkl_detector_compute_kf #include "hkl-geometry-private.h" // for HklHolder, _HklGeometry, etc #include "hkl-macros-private.h" // for hkl_assert, HKL_MALLOC, etc #include "hkl-matrix-private.h" // for hkl_matrix_times_vector, etc #include "hkl-parameter-private.h" // for _HklParameter, etc #include "hkl-pseudoaxis-auto-private.h" // for CHECK_NAN, etc #include "hkl-pseudoaxis-common-private.h" #include "hkl-pseudoaxis-common-hkl-private.h" // for HklEngineHkl #include "hkl-pseudoaxis-common-q-private.h" // for HklEngineHkl #include "hkl-pseudoaxis-private.h" // for _HklEngine, _HklMode, etc #include "hkl-quaternion-private.h" // for hkl_quaternion_init, etc #include "hkl-sample-private.h" // for _HklSample #include "hkl-vector-private.h" // for HklVector, etc #include "hkl.h" // for HklEngine, HklGeometry, etc #include "hkl/ccan/array_size/array_size.h" // for ARRAY_SIZE #include "hkl/ccan/container_of/container_of.h" // for container_of #include "hkl/ccan/darray/darray.h" // for darray_item, darray_size /* #define DEBUG */ /*******************************************/ /* common methode use by hkl getter/setter */ /*******************************************/ typedef struct _HklDetectorFit HklDetectorFit; struct _HklDetectorFit { HklGeometry *geometry; HklDetector *detector; HklVector *kf0; HklParameter **axes; size_t len; }; /* this method is used to fit only the detector position */ /* usable with only 1 or 2 axes */ static int fit_detector_function(const gsl_vector *x, void *params, gsl_vector *f) { size_t i; HklDetectorFit *fitp = params; HklVector kf; /* update the workspace from x; */ for(i=0; ilen; ++i) hkl_parameter_value_set(fitp->axes[i], x->data[i], HKL_UNIT_DEFAULT, NULL); hkl_geometry_update(fitp->geometry); kf = hkl_geometry_kf_get(fitp->geometry, fitp->detector); f->data[0] = fabs(fitp->kf0->data[0] - kf.data[0]) + fabs(fitp->kf0->data[1] - kf.data[1]) + fabs(fitp->kf0->data[2] - kf.data[2]); if (fitp->len > 1) f->data[1] = fabs(fitp->kf0->data[1] - kf.data[1]); #if 0 fprintf(stdout, "\nkf0 [%f, %f, %f], kf [%f, %f, %f]", fitp->kf0->data[0], fitp->kf0->data[1], fitp->kf0->data[2], kf.data[0], kf.data[1], kf.data[2]); fprintf(stdout, " x : ["); for(i=0; ilen; ++i) fprintf(stdout, " %.7f", x_data[i]); fprintf(stdout, "] | f : ["); for(i=0; ilen; ++i) fprintf(stdout, " %.7f", f_data[i]); fprintf(stdout, "]\n"); #endif return GSL_SUCCESS; } static int fit_detector_position(HklMode *mode, HklGeometry *geometry, HklDetector *detector, const HklSample *sample, HklVector *kf) { const char **axis_name; HklDetectorFit params; gsl_multiroot_fsolver_type const *T; gsl_multiroot_fsolver *s; gsl_multiroot_function f; gsl_vector *x; int status; int res = FALSE; int iter; const HklHolder *sample_holder = hkl_geometry_sample_holder_get(geometry, sample); const HklHolder *detector_holder = hkl_geometry_detector_holder_get(geometry, detector); /* fit the detector part to find the position of the detector for a given kf */ /* FIXME for now the sample and detector holder are respectively the first and the second one */ /* we need to find the right axes to use for the fit */ /* BECARFULL the sample part must not move during this fit. So exclude an axis */ /* if it is also part of the sample holder. */ /* For now compare the holder axes with the axes of the mode to generate the right gsl multiroot solver */ params.geometry = geometry; params.detector = detector; params.kf0 = kf; params.axes = malloc(sizeof(*params.axes) * detector_holder->config->len); params.len = 0; /* for each axis of the mode */ darray_foreach(axis_name, mode->info->axes_w){ size_t k; size_t tmp; tmp = hkl_geometry_get_axis_idx_by_name(params.geometry, *axis_name); /* check that this axis is in the detector's holder */ for(k=0; kconfig->len; ++k) if(tmp == detector_holder->config->idx[k]){ size_t j; int ko = 0; /* and not in the sample's holder */ for(j=0; jconfig->len; ++j){ if (tmp == sample_holder->config->idx[j]){ ko = 1; break; } } if(!ko) params.axes[params.len++] = darray_item(params.geometry->axes, tmp); } } /* if no detector axis found ???? abort */ /* maybe put this at the begining of the method */ if (params.len > 0){ size_t i; /* now solve the system */ /* Initialize method */ T = gsl_multiroot_fsolver_hybrid; s = gsl_multiroot_fsolver_alloc (T, params.len); x = gsl_vector_alloc(params.len); /* initialize x with the right values */ for(i=0; idata[i] = hkl_parameter_value_get(params.axes[i], HKL_UNIT_DEFAULT); f.f = fit_detector_function; f.n = params.len; f.params = ¶ms; gsl_multiroot_fsolver_set (s, &f, x); /* iterate to find the solution */ iter = 0; do { ++iter; status = gsl_multiroot_fsolver_iterate(s); if (status || iter % 100 == 0) { /* Restart from another point. */ for(i=0; idata[i] = (double)rand() / RAND_MAX * 180. / M_PI; gsl_multiroot_fsolver_set(s, &f, x); gsl_multiroot_fsolver_iterate(s); } status = gsl_multiroot_test_residual (s->f, HKL_EPSILON); } while (status == GSL_CONTINUE && iter < 1000); #ifdef DEBUG fprintf(stdout, "\n fitting the detector position using thoses axes :"); for(i=0; iname); fprintf(stdout, " status : %d iter : %d", status, iter); fprintf(stdout, " x: ["); for(i=0; ix->data[i]); fprintf(stdout, "] f: ["); for(i=0; if->data[i]); fprintf(stdout, "]\n"); hkl_geometry_fprintf(stdout, params.geometry); #endif if(status != GSL_CONTINUE){ res = TRUE; /* put the axes in the -pi, pi range. */ for(i=0; iaxes */ /* which is part of the axis_names of the mode */ /* return -1 if there is no axes of the mode in the sample part of the geometry */ static int get_last_sample_axis_idx(HklGeometry *geometry, const HklSample *sample, const darray_string *axes) { int last = -1; const char **axis_name; HklHolder *sample_holder = hkl_geometry_sample_holder_get(geometry, sample); darray_foreach(axis_name, *axes){ size_t i; size_t idx; /* FIXME for now the sample holder is the first one */ idx = hkl_geometry_get_axis_idx_by_name(geometry, *axis_name); for(i=0; iconfig->len; ++i) if(idx == sample_holder->config->idx[i]){ last = last > (int)i ? last : (int)i; break; } } return last; } static const HklVector reciprocal_plan(const HklEngineHkl *engine_hkl) { const HklVector hkl = { .data = { engine_hkl->h->_value, engine_hkl->k->_value, engine_hkl->l->_value, }, }; return hkl; } int hkl_is_reachable(HklEngine *engine, double wavelength, GError **error) { const HklEngineHkl *engine_hkl = container_of(engine, HklEngineHkl, engine); HklVector Hkl = reciprocal_plan(engine_hkl); hkl_matrix_times_vector(&engine->sample->UB, &Hkl); if (hkl_vector_norm2(&Hkl) > qmax(wavelength)){ g_set_error(error, HKL_ENGINE_ERROR, HKL_ENGINE_ERROR_SET, "unreachable hkl, try to change the wavelength"); return FALSE; } return TRUE; } /** * _RUBh_minus_Q_func: (skip) * @x: * @params: * @f: * * Only usefull if you need to create a new hkl mode. * * Returns: **/ int _RUBh_minus_Q_func(const gsl_vector *x, void *params, gsl_vector *f) { CHECK_NAN(x->data, x->size); return RUBh_minus_Q(x->data, params, f->data); } /** * RUBh_minus_Q: (skip) * @x: * @params: * @f: * * * * Returns: **/ int RUBh_minus_Q(double const x[], void *params, double f[]) { HklEngine *engine = params; HklEngineHkl *engine_hkl = container_of(engine, HklEngineHkl, engine); const HklVector Hkl = reciprocal_plan(engine_hkl); /* update the workspace from x; */ set_geometry_axes(engine, x); const struct HklHklWrite w = hkl_hkl_write(engine->geometry, engine->detector, engine->sample, &Hkl); f[0] = w.dQ.data[0]; f[1] = w.dQ.data[1]; f[2] = w.dQ.data[2]; return GSL_SUCCESS; } int hkl_mode_get_hkl_real(HklMode *self, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error) { HklEngineHkl *engine_hkl = container_of(engine, HklEngineHkl, engine); /* update the geometry internals */ hkl_geometry_update(geometry); const struct HklHklRead r = hkl_hkl_read(geometry, detector, sample); engine_hkl->h->_value = r.hkl.data[0]; engine_hkl->k->_value = r.hkl.data[1]; engine_hkl->l->_value = r.hkl.data[2]; return TRUE; } int hkl_mode_set_hkl_real(HklMode *self, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error) { int last_axis; hkl_error (error == NULL || *error == NULL); /* check the input parameters */ if(!hkl_is_reachable(engine, geometry->source.wave_length, error)){ hkl_assert(error == NULL || *error != NULL); return FALSE; } hkl_assert(error == NULL || *error == NULL); /* compute the mode */ if(!hkl_mode_auto_set_real(self, engine, geometry, detector, sample, error)){ hkl_assert(error == NULL || *error != NULL); //fprintf(stdout, "message :%s\n", (*error)->message); return FALSE; } hkl_assert(error == NULL || *error == NULL); /* check that the mode allow to move a sample axis */ /* FIXME for now the sample holder is the first one */ last_axis = get_last_sample_axis_idx(geometry, sample, &self->info->axes_w); if(last_axis >= 0){ uint i; const HklGeometryListItem *item; uint len = engine->engines->geometries->n_items; /* For each solution already found we will generate another one */ /* using the Ewalds construction by rotating Q around the last sample */ /* axis of the mode until it intersect again the Ewald sphere. */ /* FIXME do not work if ki is colinear with the axis. */ /* for this we needs : */ /* - the coordinates of the end of the Q vector (q) */ /* - the last sample axis orientation of the mode (axis_v) */ /* - the coordinates of the center of the ewalds sphere (c) */ /* - the coordinates of the center of rotation of the sample (o = 0, 0, 0) */ /* then we can : */ /* - project the origin in plane of normal axis_v containing q (o') */ /* - project the center of the ewalds sphere into the same plan (c') */ /* - rotate q around this (o', c') line of 180° to find the (q2) solution */ /* - compute the (kf2) corresponding to this q2 solution */ /* at the end we just need to solve numerically the position of the detector */ /* we will add solution to the geometries so save its length before */ for(i=0, item=list_top(&engine->engines->geometries->items, HklGeometryListItem, list); iengines->geometries->items, item, list)){ int j; HklVector ki; HklVector kf2; HklVector q; HklVector axis_v; HklQuaternion qr; HklAxis *axis; HklVector cp = {{0}}; HklVector op = {{0}}; double angle; HklGeometry *geom = hkl_geometry_new_copy(item->geometry); HklHolder *sample_holder = hkl_geometry_sample_holder_get(geom, sample); geom = hkl_geometry_new_copy(item->geometry); /* get the Q vector kf - ki */ ki = hkl_geometry_ki_get(geom); q = hkl_geometry_kf_get(geom, detector); hkl_vector_minus_vector(&q, &ki); /* compute the current orientation of the last axis */ axis = container_of(darray_item(geom->axes, sample_holder->config->idx[last_axis]), HklAxis, parameter); axis_v = axis->axis_v; hkl_quaternion_init(&qr, 1, 0, 0, 0); for(j=0; jaxes, sample_holder->config->idx[j]), HklAxis, parameter)->q); hkl_vector_rotated_quaternion(&axis_v, &qr); /* - project the center of the ewalds sphere into the same plan (c') */ hkl_vector_minus_vector(&cp, &ki); hkl_vector_project_on_plan_with_point(&cp, &axis_v, &q); hkl_vector_project_on_plan_with_point(&op, &axis_v, &q); /* - rotate q around this (o', c') line of 180° to find the (q2) solution */ kf2 = q; hkl_vector_rotated_around_line(&kf2, M_PI, &cp, &op); angle = hkl_vector_oriented_angle_points(&q, &op, &kf2, &axis_v); /* TODO parameter list for geometry */ if(!hkl_parameter_value_set(&axis->parameter, hkl_parameter_value_get(&axis->parameter, HKL_UNIT_DEFAULT) + angle, HKL_UNIT_DEFAULT, error)) return FALSE; hkl_geometry_update(geom); #ifdef DEBUG fprintf(stdout, "\n- try to add a solution by rotating Q <%f, %f, %f> around the \"%s\" axis <%f, %f, %f> of %f radian", q.data[0], q.data[1], q.data[2], ((HklParameter *)axis)->name, axis_v.data[0], axis_v.data[1], axis_v.data[2], angle); fprintf(stdout, "\n op: <%f, %f, %f>", op.data[0], op.data[1], op.data[2]); fprintf(stdout, "\n q2: <%f, %f, %f>", kf2.data[0], kf2.data[1], kf2.data[2]); #endif hkl_vector_add_vector(&kf2, &ki); /* at the end we just need to solve numerically the position of the detector */ if(fit_detector_position(self, geom, detector, sample, &kf2)) hkl_geometry_list_add(engine->engines->geometries, geom); hkl_geometry_free(geom); } } return TRUE; } /***************************************/ /* the double diffraction get set part */ /***************************************/ static HklVector reciprocal_plan2(const HklMode *mode) { const HklVector hkl2 = { .data = { darray_item(mode->parameters, 0)->_value, darray_item(mode->parameters, 1)->_value, darray_item(mode->parameters, 2)->_value, }, }; return hkl2; } /** * double_diffraction: (skip) * @x: * @params: * @f: * * * * Returns: **/ int _double_diffraction(double const x[], void *params, double f[]) { HklEngine *engine = params; HklEngineHkl *engine_hkl = container_of(engine, HklEngineHkl, engine); const HklVector hkl1 = reciprocal_plan(engine_hkl); const HklVector hkl2 = reciprocal_plan2(engine->mode); /* update the workspace from x; */ set_geometry_axes(engine, x); const struct HklDoubleDiffractionWrite w = hkl_double_diffraction_write(engine->geometry, engine->detector, engine->sample, &hkl1, &hkl2); f[0] = w.hkl1W.dQ.data[0]; f[1] = w.hkl1W.dQ.data[1]; f[2] = w.hkl1W.dQ.data[2]; f[3] = hkl_vector_norm2(&w.kf2) - hkl_vector_norm2(&w.hkl2W.ki); /* 2nd diffraction condition */ return GSL_SUCCESS; } /** * double_diffraction_func: (skip) * @x: * @params: * @f: * * * * Returns: **/ int _double_diffraction_func(gsl_vector const *x, void *params, gsl_vector *f) { CHECK_NAN(x->data, x->size); _double_diffraction(x->data, params, f->data); return GSL_SUCCESS; } /******************************************/ /* the psi_constant_vertical get set part */ /******************************************/ /** * psi_constant_vertical_func: (skip) * @x: * @params: * @f: * * * * Returns: **/ int _psi_constant_vertical_func(gsl_vector const *x, void *params, gsl_vector *f) { CHECK_NAN(x->data, x->size); HklEngine *engine = params; HklEngineHkl *engine_hkl = container_of(engine, HklEngineHkl, engine); const HklVector hkl = reciprocal_plan(engine_hkl); const HklVector hkl2 = reciprocal_plan2(engine->mode); /* update the workspace from x; */ set_geometry_axes(engine, x->data); const struct HklPsiWrite w = hkl_psi_write(engine->geometry, engine->detector, engine->sample, &hkl, &hkl2); if(w.status){ #ifdef DEBUG fprintf(stdout, "\n"); hkl_geometry_fprintf(stdout, engine->geometry); fprintf(stdout, "\n"); fprintf(stdout, "%s n : <%f, %f, %f> hkl : <%f, %f, %f> Q : <%f, %f, %f> angle : %f\n", __func__, w.n.data[0], w.n.data[1], w.n.data[2], w.hkl.data[0], w.hkl.data[1], w.hkl.data[2], w.Qn.data[0], w.Qn.data[1], w.Qn.data[2], w.psi * HKL_RADTODEG); #endif f->data[0] = w.hklW.dQ.data[0]; f->data[1] = w.hklW.dQ.data[1]; f->data[2] = w.hklW.dQ.data[2]; if(hkl_vector_norm2(&w.hkl2) > HKL_EPSILON) f->data[3] = darray_item(engine->mode->parameters, 3)->_value - w.psi; else f->data[3] = 1; }else{ f->data[0] = 1; f->data[1] = 1; f->data[2] = 1; f->data[3] = 1; } return GSL_SUCCESS; } #define HKL_MODE_PSI_CONSTANT_VERTICAL_ERROR hkl_mode_psi_constant_vertical_error_quark () static GQuark hkl_mode_psi_constant_vertical_error_quark (void) { return g_quark_from_static_string ("hkl-mode-psi-constant-vertical-error-quark"); } typedef enum { HKL_MODE_PSI_CONSTANT_VERTICAL_ERROR_INITIALIZED_SET, /* can not init the engine */ } HklModePsiConstantVerticalError; int hkl_mode_initialized_set_psi_constant_vertical_real(HklMode *self, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, int initialized, GError **error) { if(initialized){ HklEngineHkl *engine_hkl = container_of(engine, HklEngineHkl, engine); const HklVector hkl = reciprocal_plan(engine_hkl); const HklVector hkl2 = reciprocal_plan2(engine->mode); const struct HklPsiWrite w = hkl_psi_write(geometry, detector, sample, &hkl, &hkl2); /* kf - ki = Q */ if (hkl_vector_is_null(&w.hklW.Q)){ g_set_error(error, HKL_MODE_PSI_CONSTANT_VERTICAL_ERROR, HKL_MODE_PSI_CONSTANT_VERTICAL_ERROR_INITIALIZED_SET, "can not initialize the \"%s\" mode with a null hkl (kf == ki)" "\nplease select a non-null hkl", self->info->name); return FALSE; }else{ if (hkl_vector_is_null(&w.hkl2)){ g_set_error(error, HKL_MODE_PSI_CONSTANT_VERTICAL_ERROR, HKL_MODE_PSI_CONSTANT_VERTICAL_ERROR_INITIALIZED_SET, "can not initialize the \"%s\" mode" "\nwhen Q and the ref vector are colinear." "\nplease change one or both of them", engine->mode->info->name); return FALSE; }else{ /* compute the angle beetween hkl and n and * store in in the fourth parameter */ if (!hkl_parameter_value_set(darray_item(self->parameters, 3), w.psi, HKL_UNIT_DEFAULT, error)) return FALSE; } } } self->initialized = initialized; return TRUE; } /*******************/ /* emergence fixed */ /*******************/ typedef struct _HklModeAutoHklEmergenceFixed HklModeAutoHklEmergenceFixed; struct _HklModeAutoHklEmergenceFixed { HklMode parent; HklParameter *n_x; /* not owned */ HklParameter *n_y; /* not owned */ HklParameter *n_z; /* not owned */ HklParameter *emergence; /* not owned */ }; #define HKL_MODE_HKL_EMERGENCE_FIXED_ERROR hkl_mode_hkl_emergence_fixed_error_quark () static GQuark hkl_mode_hkl_emergence_fixed_error_quark (void) { return g_quark_from_static_string ("hkl-mode-hkl-emergence-fixed-error-quark"); } typedef enum { HKL_MODE_HKL_EMERGENCE_FIXED_ERROR_INITIALIZED_SET, /* can not init the engine */ HKL_MODE_HKL_EMERGENCE_FIXED_ERROR_SET, /* can not set the engine */ } HklModeAutoHklEmergenceFixedError; static HklVector surface(const HklModeAutoHklEmergenceFixed *mode){ HklVector n = { .data = { mode->n_x->_value, mode->n_y->_value, mode->n_z->_value, } }; return n; } static double expected_emergence(const HklModeAutoHklEmergenceFixed *mode){ return mode->emergence->_value; } static int hkl_mode_hkl_emergence_fixed_initialized_set_real(HklMode *self, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, int initialized, GError **error) { const HklModeAutoHklEmergenceFixed *mode = container_of(self, HklModeAutoHklEmergenceFixed, parent); const HklEngineHkl *engine_hkl = container_of(engine, HklEngineHkl, engine); const HklVector hkl = reciprocal_plan(engine_hkl); const HklVector n = surface(mode); /* first check the parameters */ if (hkl_vector_is_null(&n)){ g_set_error(error, HKL_MODE_HKL_EMERGENCE_FIXED_ERROR, HKL_MODE_HKL_EMERGENCE_FIXED_ERROR_INITIALIZED_SET, "Can not compute emergence fixed when the surface vector is null."); return FALSE; } /* compute emergence and keep it */ const struct HklEmergenceFixedWrite w = hkl_emergence_fixed_write(geometry, detector, sample, &hkl, &n); mode->emergence->_value = w.emergence; self->initialized = initialized; return TRUE; } int _emergence_fixed_func(const gsl_vector *x, void *params, gsl_vector *f) { CHECK_NAN(x->data, x->size); HklEngine *engine = params; const HklEngineHkl *engine_hkl = container_of(engine, HklEngineHkl, engine); const HklModeAutoHklEmergenceFixed *mode = container_of(engine->mode, HklModeAutoHklEmergenceFixed, parent); const HklVector hkl = reciprocal_plan(engine_hkl); const HklVector n = surface(mode); /* update the workspace from x; */ set_geometry_axes(engine, x->data); const struct HklEmergenceFixedWrite w = hkl_emergence_fixed_write(engine->geometry, engine->detector, engine->sample, &hkl, &n); f->data[0] = w.hklW.dQ.data[0]; f->data[1] = w.hklW.dQ.data[1]; f->data[2] = w.hklW.dQ.data[2]; f->data[3] = expected_emergence(mode) - w.emergence; return GSL_SUCCESS; } int hkl_mode_hkl_emergence_fixed_set_real(HklMode *self, HklEngine *engine, HklGeometry *geometry, HklDetector *detector, HklSample *sample, GError **error) { const HklModeAutoHklEmergenceFixed *mode = container_of(self, HklModeAutoHklEmergenceFixed, parent); HklVector n = surface(mode); /* first check the parameters */ if (hkl_vector_is_null(&n)){ g_set_error(error, HKL_MODE_HKL_EMERGENCE_FIXED_ERROR, HKL_MODE_HKL_EMERGENCE_FIXED_ERROR_SET, "Can not compute hkl with emergence fixed when the surface vector is null."); return FALSE; } return hkl_mode_set_hkl_real(self, engine, geometry, detector, sample, error); } HklMode *hkl_mode_hkl_emergence_fixed_new(const HklModeAutoInfo *auto_info) { static const HklModeOperations operations = { HKL_MODE_OPERATIONS_HKL_FULL_DEFAULTS, .capabilities = HKL_ENGINE_CAPABILITIES_READABLE | HKL_ENGINE_CAPABILITIES_WRITABLE | HKL_ENGINE_CAPABILITIES_INITIALIZABLE, .initialized_set = hkl_mode_hkl_emergence_fixed_initialized_set_real, .set = hkl_mode_hkl_emergence_fixed_set_real, }; HklModeAutoHklEmergenceFixed *self; if (darray_size(auto_info->info.axes_w) != 4){ fprintf(stderr, "This generic HklModeAutoHklEmergenceFixed need exactly 4 axes"); exit(128); } self = HKL_MALLOC(HklModeAutoHklEmergenceFixed); /* the base constructor; */ hkl_mode_auto_init(&self->parent, auto_info, &operations, FALSE); self->n_x = register_mode_parameter(&self->parent, 0); self->n_y = register_mode_parameter(&self->parent, 1); self->n_z = register_mode_parameter(&self->parent, 2); self->emergence = register_mode_parameter(&self->parent, 3); return &self->parent; } /*************/ /* HklEngine */ /*************/ static void hkl_engine_hkl_free_real(HklEngine *base) { HklEngineHkl *self = container_of(base, HklEngineHkl, engine); hkl_engine_release(&self->engine); free(self); } HklEngine *hkl_engine_hkl_new(HklEngineList *engines) { HklEngineHkl *self; static const HklParameter h = { HKL_PARAMETER_DEFAULTS, .name = "h", .description = "h coordinate of the diffracting plan", .range = { .min=-1, .max=1 }, }; static const HklParameter k = { HKL_PARAMETER_DEFAULTS, .name = "k", .description = "k coordinate of the diffracting plan", .range = { .min=-1, .max=1 }, }; static const HklParameter l = { HKL_PARAMETER_DEFAULTS, .name = "l", .description = "l coordinate of the diffracting plan", .range={ .min=-1, .max=1 }, }; static const HklParameter *pseudo_axes[] = {&h, &k, &l}; static HklEngineInfo info = { HKL_ENGINE_INFO("hkl", pseudo_axes, HKL_ENGINE_DEPENDENCIES_AXES | HKL_ENGINE_DEPENDENCIES_ENERGY | HKL_ENGINE_DEPENDENCIES_SAMPLE), }; static HklEngineOperations operations = { HKL_ENGINE_OPERATIONS_DEFAULTS, .free=hkl_engine_hkl_free_real, }; self = HKL_MALLOC(HklEngineHkl); hkl_engine_init(&self->engine, &info, &operations, engines); self->h = register_pseudo_axis(&self->engine, engines, &h); self->k = register_pseudo_axis(&self->engine, engines, &k); self->l = register_pseudo_axis(&self->engine, engines, &l); return &self->engine; } hkl-5.0.0.2449/hkl/hkl-detector-factory.c0000644000175000017500000000260613236600666020103 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for NULL #include "hkl-detector-private.h" // for hkl_detector_new #include "hkl.h" // for HklDetector, etc /** * hkl_detector_factory_new: * @type: * * Detector factory * * Returns: **/ HklDetector *hkl_detector_factory_new(HklDetectorType type) { HklDetector *detector = NULL; switch(type) { case HKL_DETECTOR_TYPE_0D: detector = hkl_detector_new(); break; } return detector; } hkl-5.0.0.2449/hkl/hkl-engine-k6c.c0000644000175000017500000007714713236600666016567 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for gsl_isnan #include "hkl-factory-private.h" // for autodata_factories_, etc #include "hkl-pseudoaxis-common-eulerians-private.h" #include "hkl-pseudoaxis-common-hkl-private.h" // for RUBh_minus_Q, etc #include "hkl-pseudoaxis-common-psi-private.h" // for hkl_engine_psi_new, etc #include "hkl-pseudoaxis-common-q-private.h" // for hkl_engine_q2_new, etc #include "hkl-pseudoaxis-common-readonly-private.h" #include "hkl-pseudoaxis-common-tth-private.h" // for hkl_engine_tth2_new, etc #define MU "mu" #define KOMEGA "komega" #define KAPPA "kappa" #define KPHI "kphi" #define GAMMA "gamma" #define DELTA "delta" static void hkl_geometry_list_multiply_k6c_real(HklGeometryList *self, HklGeometryListItem *item) { HklGeometry *geometry; HklGeometry *copy; double komega, komegap; double kappa, kappap; double kphi, kphip; geometry = item->geometry; komega = hkl_parameter_value_get(darray_item(geometry->axes, 1), HKL_UNIT_DEFAULT); kappa = hkl_parameter_value_get(darray_item(geometry->axes, 2), HKL_UNIT_DEFAULT); kphi = hkl_parameter_value_get(darray_item(geometry->axes, 3), HKL_UNIT_DEFAULT); kappa_2_kappap(komega, kappa, kphi, 50 * HKL_DEGTORAD, &komegap, &kappap, &kphip); copy = hkl_geometry_new_copy(geometry); /* TODO parameter list for the geometry */ hkl_parameter_value_set(darray_item(copy->axes, 1), komegap, HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(darray_item(copy->axes, 2), kappap, HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(darray_item(copy->axes, 3), kphip, HKL_UNIT_DEFAULT, NULL); hkl_geometry_update(copy); hkl_geometry_list_add(self, copy); hkl_geometry_free(copy); } /***********************/ /* numerical functions */ /***********************/ static int _bissector_h_f1(const gsl_vector *x, void *params, gsl_vector *f) { const double mu = x->data[0]; const double komega = x->data[1]; const double kappa = x->data[2]; const double gamma = x->data[4]; double omega; CHECK_NAN(x->data, x->size); omega = komega + atan(tan(kappa/2.)*cos(50 * HKL_DEGTORAD)) - M_PI_2; RUBh_minus_Q(x->data, params, f->data); f->data[3] = fmod(omega, M_PI); f->data[4] = fmod(gamma - 2 * fmod(mu, M_PI), 2*M_PI); return GSL_SUCCESS; } static const HklFunction bissector_h_f1 = { .function = _bissector_h_f1, .size = 5, }; static int _bissector_h_f2(const gsl_vector *x, void *params, gsl_vector *f) { const double mu = x->data[0]; const double komega = x->data[1]; const double kappa = x->data[2]; const double gamma = x->data[4]; double omega; CHECK_NAN(x->data, x->size); omega = komega + atan(tan(kappa/2.)*cos(50 * HKL_DEGTORAD)) + M_PI_2; RUBh_minus_Q(x->data, params, f->data); f->data[3] = fmod(omega, M_PI); f->data[4] = fmod(gamma - 2 * fmod(mu, M_PI), 2*M_PI); return GSL_SUCCESS; } static const HklFunction bissector_h_f2 = { .function = _bissector_h_f2, .size = 5, }; static int _constant_kphi_h_f1(const gsl_vector *x, void *params, gsl_vector *f) { const double komega = x->data[1]; const double kappa = x->data[2]; double omega; CHECK_NAN(x->data, x->size); omega = komega + atan(tan(kappa/2.)*cos(50 * HKL_DEGTORAD)) - M_PI_2; RUBh_minus_Q(x->data, params, f->data); f->data[3] = fmod(omega, M_PI); return GSL_SUCCESS; } static const HklFunction constant_kphi_h_f1 = { .function = _constant_kphi_h_f1, .size = 4, }; static int _constant_kphi_h_f2(const gsl_vector *x, void *params, gsl_vector *f) { const double komega = x->data[1]; const double kappa = x->data[2]; double omega; CHECK_NAN(x->data, x->size); omega = komega + atan(tan(kappa/2.)*cos(50 * HKL_DEGTORAD)) + M_PI_2; RUBh_minus_Q(x->data, params, f->data); f->data[3] = fmod(omega, M_PI); return GSL_SUCCESS; } static const HklFunction constant_kphi_h_f2 = { .function = _constant_kphi_h_f2, .size = 4, }; static int _constant_phi_h_f1(const gsl_vector *x, void *params, gsl_vector *f) { const double komega = x->data[1]; const double kappa = x->data[2]; const double kphi = x->data[3]; double omega, phi, p; CHECK_NAN(x->data, x->size); p = atan(tan(kappa/2.)*cos(50 * HKL_DEGTORAD)); omega = komega + p - M_PI_2; phi = kphi + p + M_PI_2; RUBh_minus_Q(x->data, params, f->data); f->data[3] = fmod(omega, M_PI); f->data[4] = phi; return GSL_SUCCESS; } static const HklFunction constant_phi_h_f1 = { .function = _constant_phi_h_f1, .size = 5, }; static int _constant_phi_h_f2(const gsl_vector *x, void *params, gsl_vector *f) { const double komega = x->data[1]; const double kappa = x->data[2]; const double kphi = x->data[3]; double omega, phi, p; CHECK_NAN(x->data, x->size); p = atan(tan(kappa/2.)*cos(50 * HKL_DEGTORAD)); omega = komega + p + M_PI_2; phi = kphi + p - M_PI_2; RUBh_minus_Q(x->data, params, f->data); f->data[3] = fmod(omega, M_PI); f->data[4] = phi; return GSL_SUCCESS; } static const HklFunction constant_phi_h_f2 = { .function = _constant_phi_h_f2, .size = 5, }; static int _bissector_v(const gsl_vector *x, void *params, gsl_vector *f) { const double komega = x->data[0]; const double kappa = x->data[1]; const double delta = x->data[3]; double omega; CHECK_NAN(x->data, x->size); omega = komega + atan(tan(kappa/2.)*cos(50 * HKL_DEGTORAD)) - M_PI_2; RUBh_minus_Q(x->data, params, f->data); f->data[3] = fmod(delta - 2 * fmod(omega, M_PI), 2*M_PI); return GSL_SUCCESS; } static const HklFunction bissector_v = { .function = _bissector_v, .size = 4, }; static int _constant_omega_v(const gsl_vector *x, void *params, gsl_vector *f) { const double komega = x->data[0]; const double kappa = x->data[1]; double omega; HklEngine *engine = params; double omega0 = darray_item(engine->mode->parameters, 0)->_value; CHECK_NAN(x->data, x->size); omega = komega + atan(tan(kappa/2.)*cos(50 * HKL_DEGTORAD)) - M_PI_2; RUBh_minus_Q(x->data, params, f->data); f->data[3] = omega0 - omega; return GSL_SUCCESS; } static const HklFunction constant_omega_v = { .function = _constant_omega_v, .size = 4, }; static int _constant_chi_v(const gsl_vector *x, void *params, gsl_vector *f) { const double kappa = x->data[1]; double chi; HklEngine *engine = params; double chi0 = darray_item(engine->mode->parameters, 0)->_value; CHECK_NAN(x->data, x->size); chi = 2 * asin(sin(kappa/2.) * sin(50 * HKL_DEGTORAD)); RUBh_minus_Q(x->data, params, f->data); f->data[3] = chi0 - chi; return GSL_SUCCESS; } static const HklFunction constant_chi_v = { .function = _constant_chi_v, .size = 4, }; static int _constant_phi_v(const gsl_vector *x, void *params, gsl_vector *f) { const double kappa = x->data[1]; const double kphi = x->data[2]; double phi; HklEngine *engine = params; double phi0 = darray_item(engine->mode->parameters, 0)->_value; CHECK_NAN(x->data, x->size); phi = kphi + atan(tan(kappa/2.)*cos(50 * HKL_DEGTORAD)) + M_PI_2; RUBh_minus_Q(x->data, params, f->data); f->data[3] = phi0 - phi; return GSL_SUCCESS; } static const HklFunction constant_phi_v = { .function = _constant_phi_v, .size = 4, }; static int _double_diffraction_h(const gsl_vector *x, void *params, gsl_vector *f) { const double komega = x->data[1]; const double kappa = x->data[2]; double omega; CHECK_NAN(x->data, x->size); omega = komega + atan(tan(kappa/2.)*cos(50 * HKL_DEGTORAD)) - M_PI_2; _double_diffraction(x->data, params, f->data); f->data[4] = fmod(omega, M_PI); return GSL_SUCCESS; } static const HklFunction double_diffraction_h = { .function = _double_diffraction_h, .size = 5, }; static int _constant_incidence_func(const gsl_vector *x, void *params, gsl_vector *f) { static const HklVector Y = { .data = {0, 1, 0}, }; double incidence; double azimuth; HklEngine *engine = params; HklModeAutoWithInit *mode = container_of(engine->mode, HklModeAutoWithInit, mode); HklVector n; double incidence0; double azimuth0; HklVector ki; CHECK_NAN(x->data, x->size); RUBh_minus_Q(x->data, params, f->data); /* get the mode parameters */ n.data[0] = darray_item(engine->mode->parameters, 0)->_value; n.data[1] = darray_item(engine->mode->parameters, 1)->_value; n.data[2] = darray_item(engine->mode->parameters, 2)->_value; incidence0 = darray_item(engine->mode->parameters, 3)->_value; azimuth0 = darray_item(engine->mode->parameters, 4)->_value; /* compute the two angles */ /* first check that the mode was already initialized if not * the surface is oriented along the nx, ny, nz axis for all * diffractometer angles equal to zero */ if(mode->geometry){ HklQuaternion q0 = hkl_geometry_sample_holder_get(mode->geometry, mode->sample)->q; hkl_quaternion_conjugate(&q0); hkl_vector_rotated_quaternion(&n, &q0); } hkl_vector_rotated_quaternion(&n, &hkl_geometry_sample_holder_get(engine->geometry, mode->sample)->q); ki = hkl_geometry_ki_get(engine->geometry); incidence = _incidence(&n, &ki); hkl_vector_project_on_plan(&n, &ki); azimuth = hkl_vector_angle(&n, &Y); f->data[3] = incidence0 - incidence; f->data[4] = azimuth0 - azimuth; return GSL_SUCCESS; } static const HklFunction constant_incidence_func = { .function = _constant_incidence_func, .size = 5, }; /*******/ /* K6C */ /*******/ /************/ /* hkl mode */ /************/ static HklMode *bissector_vertical(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, GAMMA, DELTA}; static const char* axes_w[] = {KOMEGA, KAPPA, KPHI, DELTA}; static const HklFunction *functions[] = {&bissector_v}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *constant_omega_vertical(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, GAMMA, DELTA}; static const char* axes_w[] = {KOMEGA, KAPPA, KPHI, DELTA}; static const HklFunction *functions[] = {&constant_omega_v}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes_r, axes_w, functions, constant_omega_parameters), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *constant_chi_vertical(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, GAMMA, DELTA}; static const char* axes_w[] = {KOMEGA, KAPPA, KPHI, DELTA}; static const HklFunction *functions[] = {&constant_chi_v}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes_r, axes_w, functions, constant_chi_parameters), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *constant_phi_vertical(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, GAMMA, DELTA}; static const char* axes_w[] = {KOMEGA, KAPPA, KPHI, DELTA}; static const HklFunction *functions[] = {&constant_phi_v}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes_r, axes_w, functions, constant_phi_parameters), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *lifting_detector_kphi(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, GAMMA, DELTA}; static const char* axes_w[] = {KPHI, GAMMA, DELTA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *lifting_detector_komega(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, GAMMA, DELTA}; static const char* axes_w[] = {KOMEGA, GAMMA, DELTA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *lifting_detector_mu(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, GAMMA, DELTA}; static const char* axes_w[] = {MU, GAMMA, DELTA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *double_diffraction_vertical(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, GAMMA, DELTA}; static const char* axes_w[] = {KOMEGA, KAPPA, KPHI, DELTA}; static const HklFunction *functions[] = {&double_diffraction_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes_r, axes_w, functions, double_diffraction_parameters), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *bissector_horizontal(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, GAMMA, DELTA}; static const char* axes_w[] = {MU, KOMEGA, KAPPA, KPHI, GAMMA}; static const HklFunction *functions[] = {&bissector_h_f1, &bissector_h_f2}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *constant_phi_horizontal(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, GAMMA, DELTA}; static const char* axes_w[] = {MU, KOMEGA, KAPPA, KPHI, GAMMA}; static const HklFunction *functions[] = {&constant_phi_h_f1, &constant_phi_h_f2}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes_r, axes_w, functions, constant_phi_parameters), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *constant_kphi_horizontal(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, GAMMA, DELTA}; static const char* axes_w[] = {MU, KOMEGA, KAPPA, GAMMA}; static const HklFunction *functions[] = {&constant_kphi_h_f1, &constant_kphi_h_f2}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO(__func__, axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *double_diffraction_horizontal(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, GAMMA, DELTA}; static const char* axes_w[] = {MU, KOMEGA, KAPPA, KPHI, GAMMA}; static const HklFunction *functions[] = {&double_diffraction_h}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes_r, axes_w, functions, double_diffraction_parameters), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *psi_constant_vertical(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, GAMMA, DELTA}; static const char* axes_w[] = {KOMEGA, KAPPA, KPHI, DELTA}; static const HklFunction *functions[] = {&psi_constant_vertical_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes_r, axes_w, functions, psi_constant_parameters), }; return hkl_mode_auto_new(&info, &psi_constant_vertical_mode_operations, TRUE); } static HklMode *constant_incidence(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, GAMMA, DELTA}; static const char* axes_w[] = {KOMEGA, KAPPA, KPHI, GAMMA, DELTA}; static const HklFunction *functions[] = {&constant_incidence_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes_r, axes_w, functions, constant_incidence_parameters), }; return hkl_mode_auto_with_init_new(&info, &constant_incidence_mode_operations, TRUE); } static HklEngine *hkl_engine_k6c_hkl_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_hkl_new(engines); default_mode = bissector_vertical(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); hkl_engine_add_mode(self, constant_omega_vertical()); hkl_engine_add_mode(self, constant_chi_vertical()); hkl_engine_add_mode(self, constant_phi_vertical()); hkl_engine_add_mode(self, lifting_detector_kphi()); hkl_engine_add_mode(self, lifting_detector_komega()); hkl_engine_add_mode(self, lifting_detector_mu()); hkl_engine_add_mode(self, double_diffraction_vertical()); hkl_engine_add_mode(self, bissector_horizontal()); hkl_engine_add_mode(self, constant_phi_horizontal()); hkl_engine_add_mode(self, constant_kphi_horizontal()); hkl_engine_add_mode(self, double_diffraction_horizontal()); hkl_engine_add_mode(self, psi_constant_vertical()); hkl_engine_add_mode(self, constant_incidence()); return self; } /************/ /* psi mode */ /************/ static HklMode *psi_vertical(void) { static const char *axes_r[] = {MU, KOMEGA, KAPPA, KPHI, GAMMA, DELTA}; static const char *axes_w[] = {KOMEGA, KAPPA, KPHI, DELTA}; static const HklFunction *functions[] = {&psi_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes_r, axes_w, functions, psi_parameters), }; return hkl_mode_psi_new(&info); } static HklEngine *hkl_engine_k6c_psi_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_psi_new(engines); default_mode = psi_vertical(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); return self; } /*****************/ /* mode readonly */ /*****************/ REGISTER_READONLY_INCIDENCE(hkl_engine_k6c_incidence_new, P99_PROTECT({MU, KOMEGA, KAPPA, KPHI}), surface_parameters_y); REGISTER_READONLY_EMERGENCE(hkl_engine_k6c_emergence_new, P99_PROTECT({MU, KOMEGA, KAPPA, KPHI, GAMMA, DELTA}), surface_parameters_y); #define HKL_GEOMETRY_KAPPA6C_DESCRIPTION \ "For this geometry there is a special parameters called :math:`\\alpha` which is the\n" \ "angle between the kappa rotation axis and the :math:`\\vec{y}` direction.\n" \ "\n" \ "+ xrays source fix allong the :math:`\\vec{x}` direction (1, 0, 0)\n" \ "+ 4 axes for the sample\n" \ "\n" \ " + **mu** : rotating around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ " + **komega** : rotating around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ " + **kappa** : rotating around the :math:`\\vec{x}` direction (0, :math:`-\\cos\\alpha`, :math:`-\\sin\\alpha`)\n" \ " + **kphi** : rotating around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ "\n" \ "+ 2 axes for the detector\n" \ "\n" \ " + **gamma** : rotation around the :math:`\\vec{z}` direction (0, 0, 1)\n" \ " + **delta** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" static const char* hkl_geometry_kappa6C_axes[] = {MU, KOMEGA, KAPPA, KPHI, GAMMA, DELTA}; static HklGeometry *hkl_geometry_new_kappa6C(const HklFactory *factory) { HklGeometry *self = hkl_geometry_new(factory, &hkl_geometry_operations_defaults); double alpha = 50 * HKL_DEGTORAD; HklHolder *h; h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, MU, 0, 0, 1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, KOMEGA, 0, -1, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, KAPPA, 0, -cos(alpha), -sin(alpha), &hkl_unit_angle_deg); hkl_holder_add_rotation(h, KPHI, 0, -1, 0, &hkl_unit_angle_deg); h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, GAMMA, 0, 0, 1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, DELTA, 0, -1, 0, &hkl_unit_angle_deg); return self; } static HklEngineList *hkl_engine_list_new_kappa6C(const HklFactory *factory) { HklEngineList *self = hkl_engine_list_new(); self->geometries->multiply = hkl_geometry_list_multiply_k6c_real; hkl_engine_k6c_hkl_new(self); hkl_engine_eulerians_new(self); hkl_engine_k6c_psi_new(self); hkl_engine_q2_new(self); hkl_engine_qper_qpar_new(self); hkl_engine_k6c_incidence_new(self); hkl_engine_tth2_new(self); hkl_engine_k6c_emergence_new(self); return self; } REGISTER_DIFFRACTOMETER(kappa6C, "K6C", HKL_GEOMETRY_KAPPA6C_DESCRIPTION); /***********************/ /* SOLEIL sirius kappa */ /***********************/ /* hkl mode */ static HklMode *bissector_vertical_soleil_sirius_kappa(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, DELTA, GAMMA}; static const char* axes_w[] = {KOMEGA, KAPPA, KPHI, GAMMA}; static const HklFunction *functions[] = {&bissector_v}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("bissector_vertical", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *constant_omega_vertical_soleil_sirius_kappa(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, DELTA, GAMMA}; static const char* axes_w[] = {KOMEGA, KAPPA, KPHI, GAMMA}; static const HklFunction *functions[] = {&constant_omega_v}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS("constant_omega_vertical", axes_r, axes_w, functions, constant_omega_parameters), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *constant_chi_vertical_soleil_sirius_kappa(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, DELTA, GAMMA}; static const char* axes_w[] = {KOMEGA, KAPPA, KPHI, GAMMA}; static const HklFunction *functions[] = {&constant_chi_v}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS("constant_chi_vertical", axes_r, axes_w, functions, constant_chi_parameters), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *constant_phi_vertical_soleil_sirius_kappa(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, DELTA, GAMMA}; static const char* axes_w[] = {KOMEGA, KAPPA, KPHI, GAMMA}; static const HklFunction *functions[] = {&constant_phi_v}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS("constant_phi_vertical", axes_r, axes_w, functions, constant_phi_parameters), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *lifting_detector_kphi_soleil_sirius_kappa(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, DELTA, GAMMA}; static const char* axes_w[] = {KPHI, DELTA, GAMMA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("lifting_detector_kphi", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *lifting_detector_komega_soleil_sirius_kappa(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, DELTA, GAMMA}; static const char* axes_w[] = {KOMEGA, DELTA, GAMMA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("lifting_detector_komega", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *lifting_detector_mu_soleil_sirius_kappa(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, DELTA, GAMMA}; static const char* axes_w[] = {MU, DELTA, GAMMA}; static const HklFunction *functions[] = {&RUBh_minus_Q_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("lifting_detector_mu", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *double_diffraction_vertical_soleil_sirius_kappa(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, DELTA, GAMMA}; static const char* axes_w[] = {KOMEGA, KAPPA, KPHI, GAMMA}; static const HklFunction *functions[] = {&double_diffraction_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS("double_diffraction_vertical", axes_r, axes_w, functions, double_diffraction_parameters), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *bissector_horizontal_soleil_sirius_kappa(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, DELTA, GAMMA}; static const char* axes_w[] = {MU, KOMEGA, KAPPA, KPHI, DELTA}; static const HklFunction *functions[] = {&bissector_h_f1, &bissector_h_f2}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("bissector_horizontal", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *constant_phi_horizontal_soleil_sirius_kappa(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, DELTA, GAMMA}; static const char* axes_w[] = {MU, KOMEGA, KAPPA, KPHI, DELTA}; static const HklFunction *functions[] = {&constant_phi_h_f1, &constant_phi_h_f2}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS("constant_phi_horizontal", axes_r, axes_w, functions, constant_phi_parameters), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *constant_kphi_horizontal_soleil_sirius_kappa(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, DELTA, GAMMA}; static const char* axes_w[] = {MU, KOMEGA, KAPPA, DELTA}; static const HklFunction *functions[] = {&constant_kphi_h_f1, &constant_kphi_h_f2}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO("constant_kphi_horizontal", axes_r, axes_w, functions), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *double_diffraction_horizontal_soleil_sirius_kappa(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, DELTA, GAMMA}; static const char* axes_w[] = {MU, KOMEGA, KAPPA, KPHI, DELTA}; static const HklFunction *functions[] = {&double_diffraction_h}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS("double_diffraction_horizontal", axes_r, axes_w, functions, double_diffraction_parameters), }; return hkl_mode_auto_new(&info, &hkl_mode_operations, TRUE); } static HklMode *psi_constant_vertical_soleil_sirius_kappa(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, DELTA, GAMMA}; static const char* axes_w[] = {KOMEGA, KAPPA, KPHI, GAMMA}; static const HklFunction *functions[] = {&psi_constant_vertical_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS("psi_constant_vertical", axes_r, axes_w, functions, psi_constant_parameters), }; return hkl_mode_auto_new(&info, &psi_constant_vertical_mode_operations, TRUE); } static HklMode *constant_incidence_soleil_sirius_kappa(void) { static const char* axes_r[] = {MU, KOMEGA, KAPPA, KPHI, DELTA, GAMMA}; static const char* axes_w[] = {KOMEGA, KAPPA, KPHI, DELTA, GAMMA}; static const HklFunction *functions[] = {&constant_incidence_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS("constant_incidence", axes_r, axes_w, functions, constant_incidence_parameters), }; return hkl_mode_auto_with_init_new(&info, &constant_incidence_mode_operations, TRUE); } static HklEngine *hkl_engine_soleil_sirius_kappa_hkl_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_hkl_new(engines); default_mode = bissector_vertical_soleil_sirius_kappa(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); hkl_engine_add_mode(self, constant_omega_vertical_soleil_sirius_kappa()); hkl_engine_add_mode(self, constant_chi_vertical_soleil_sirius_kappa()); hkl_engine_add_mode(self, constant_phi_vertical_soleil_sirius_kappa()); hkl_engine_add_mode(self, lifting_detector_kphi_soleil_sirius_kappa()); hkl_engine_add_mode(self, lifting_detector_komega_soleil_sirius_kappa()); hkl_engine_add_mode(self, lifting_detector_mu_soleil_sirius_kappa()); hkl_engine_add_mode(self, double_diffraction_vertical_soleil_sirius_kappa()); hkl_engine_add_mode(self, bissector_horizontal_soleil_sirius_kappa()); hkl_engine_add_mode(self, constant_phi_horizontal_soleil_sirius_kappa()); hkl_engine_add_mode(self, constant_kphi_horizontal_soleil_sirius_kappa()); hkl_engine_add_mode(self, double_diffraction_horizontal_soleil_sirius_kappa()); hkl_engine_add_mode(self, psi_constant_vertical_soleil_sirius_kappa()); hkl_engine_add_mode(self, constant_incidence_soleil_sirius_kappa()); return self; } /* psi mode */ static HklMode *psi_vertical_soleil_sirius_kappa() { static const char *axes_r[] = {MU, KOMEGA, KAPPA, KPHI, DELTA, GAMMA}; static const char *axes_w[] = {KOMEGA, KAPPA, KPHI, GAMMA}; static const HklFunction *functions[] = {&psi_func}; static const HklModeAutoInfo info = { HKL_MODE_AUTO_INFO_WITH_PARAMS(__func__, axes_r, axes_w, functions, psi_parameters), }; return hkl_mode_psi_new(&info); } static HklEngine *hkl_engine_soleil_sirius_kappa_psi_new(HklEngineList *engines) { HklEngine *self; HklMode *default_mode; self = hkl_engine_psi_new(engines); default_mode = psi_vertical_soleil_sirius_kappa(); hkl_engine_add_mode(self, default_mode); hkl_engine_mode_set(self, default_mode); return self; } /* SOLEIL SIRIUS KAPPA */ #define HKL_GEOMETRY_TYPE_SOLEIL_SIRIUS_KAPPA_DESCRIPTION \ "+ xrays source fix along the :math:`\\vec{x}` direction (1, 0, 0)\n" \ "+ 4 axes for the sample\n" \ "\n" \ " + **" MU "** : rotating around the :math:`-\\vec{z}` direction (0, 0, -1)\n" \ " + **" KOMEGA "** : rotating around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ " + **" KAPPA "** : rotating around the :math:`\\vec{x}` direction (0, :math:`-\\cos\\alpha`, :math:`-\\sin\\alpha`)\n" \ " + **" KPHI "** : rotating around the :math:`-\\vec{y}` direction (0, -1, 0)\n" \ "\n" \ "+ 2 axes for the detector\n" \ "\n" \ " + **" DELTA "** : rotation around the :math:`-\\vec{z}` direction (0, 0, -1)\n" \ " + **" GAMMA "** : rotation around the :math:`-\\vec{y}` direction (0, -1, 0)\n" static const char* hkl_geometry_soleil_sirius_kappa_axes[] = {MU, KOMEGA, KAPPA, KPHI, DELTA, GAMMA}; static HklGeometry *hkl_geometry_new_soleil_sirius_kappa(const HklFactory *factory) { HklGeometry *self = hkl_geometry_new(factory, &hkl_geometry_operations_defaults); double alpha = 50 * HKL_DEGTORAD; HklHolder *h; h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, MU, 0, 0, -1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, KOMEGA, 0, -1, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, KAPPA, 0, -cos(alpha), -sin(alpha), &hkl_unit_angle_deg); hkl_holder_add_rotation(h, KPHI, 0, -1, 0, &hkl_unit_angle_deg); h = hkl_geometry_add_holder(self); hkl_holder_add_rotation(h, DELTA, 0, 0, -1, &hkl_unit_angle_deg); hkl_holder_add_rotation(h, GAMMA, 0, -1, 0, &hkl_unit_angle_deg); return self; } static HklEngineList *hkl_engine_list_new_soleil_sirius_kappa(const HklFactory *factory) { HklEngineList *self = hkl_engine_list_new(); self->geometries->multiply = hkl_geometry_list_multiply_k6c_real; hkl_engine_soleil_sirius_kappa_hkl_new(self); hkl_engine_eulerians_new(self); hkl_engine_soleil_sirius_kappa_psi_new(self); hkl_engine_q2_new(self); hkl_engine_qper_qpar_new(self); hkl_engine_tth2_new(self); hkl_engine_k6c_incidence_new(self); hkl_engine_k6c_emergence_new(self); return self; } REGISTER_DIFFRACTOMETER(soleil_sirius_kappa, "SOLEIL SIRIUS KAPPA", HKL_GEOMETRY_TYPE_SOLEIL_SIRIUS_KAPPA_DESCRIPTION); hkl-5.0.0.2449/hkl/hkl-sample.c0000644000175000017500000006627413236600666016121 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ /* for strdup */ #define _XOPEN_SOURCE 500 #include // for gsl_set_error_handler, etc #include // for gsl_multimin_function, etc #include // for GSL_NAN #include // for gsl_vector_get, etc #include // for M_PI, fabs #include // for size_t #include // for fprintf, FILE #include // for free #include // for NULL, strdup #include "hkl-detector-private.h" // for hkl_detector_new_copy, etc #include "hkl-geometry-private.h" // for _HklGeometry, etc #include "hkl-lattice-private.h" // for _HklLattice, etc #include "hkl-macros-private.h" // for HKL_MALLOC #include "hkl-matrix-private.h" // for hkl_matrix_init_from_euler, etc #include "hkl-parameter-private.h" // for hkl_parameter_fprintf, etc #include "hkl-quaternion-private.h" // for hkl_quaternion_conjugate, etc #include "hkl-sample-private.h" // for _HklSample, etc #include "hkl-source-private.h" // for hkl_source_compute_ki #include "hkl-unit-private.h" // for hkl_unit_angle_deg, etc #include "hkl-vector-private.h" // for HklVector, hkl_vector_angle, etc #include "hkl.h" // for HklSample, etc #include "hkl/ccan/darray/darray.h" // for darray_foreach, darray_item #include "hkl/ccan/list/list.h" // for list_head, list_add_tail, etc /* #define DEBUG */ #define ITER_MAX 10000 /* private */ static void hkl_sample_clear_all_reflections(HklSample *self) { HklSampleReflection *reflection; HklSampleReflection *next; list_for_each_safe(&self->reflections, reflection, next, list){ list_del(&reflection->list); hkl_sample_reflection_free(reflection); } } static void hkl_sample_copy_all_reflections(HklSample *self, const HklSample *src) { HklSampleReflection *reflection; list_head_init(&self->reflections); list_for_each(&src->reflections, reflection, list){ list_add_tail(&self->reflections, &hkl_sample_reflection_new_copy(reflection)->list); } self->n_reflections = src->n_reflections; } static void hkl_sample_sample_set(HklSample *self, const HklSample *src) { if(self->name) free(self->name); self->name = strdup(src->name); hkl_lattice_lattice_set(self->lattice, src->lattice); self->U = src->U; self->UB = src->UB; hkl_parameter_init_copy(self->ux, src->ux, NULL); hkl_parameter_init_copy(self->uy, src->uy, NULL); hkl_parameter_init_copy(self->uz, src->uz, NULL); /* copy all the reflections */ hkl_sample_clear_all_reflections(self); hkl_sample_copy_all_reflections(self, src); } static void hkl_sample_reflection_update(HklSampleReflection *self) { HklVector ki; HklQuaternion q; const HklHolder *sample_holder = hkl_geometry_sample_holder_get(self->geometry, self->sample); const HklHolder *detector_holder = hkl_geometry_detector_holder_get(self->geometry, self->detector); if(!self) return; /* compute the _hkl using only the axes of the geometry */ /* first Q from angles */ hkl_source_compute_ki(&self->geometry->source, &ki); self->_hkl = ki; hkl_vector_rotated_quaternion(&self->_hkl, &detector_holder->q); hkl_vector_minus_vector(&self->_hkl, &ki); q = sample_holder->q; hkl_quaternion_conjugate(&q); hkl_vector_rotated_quaternion(&self->_hkl, &q); } static void hkl_sample_compute_UxUyUz(HklSample *self) { double ux; double uy; double uz; hkl_matrix_to_euler(&self->U, &ux, &uy, &uz); hkl_parameter_value_set(self->ux, ux, HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->uy, uy, HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->uz, uz, HKL_UNIT_DEFAULT, NULL); } static int hkl_sample_compute_UB(HklSample *self) { HklMatrix B; if (!hkl_lattice_get_B(self->lattice, &B)) return FALSE; self->UB = self->U; hkl_matrix_times_matrix(&self->UB, &B); return TRUE; } /* * this structure is used by the minimization gsl algorithm. * in the set_UB method */ struct set_UB_t { HklSample *sample; const HklMatrix UB; }; static int hkl_sample_init_from_gsl_vector(HklSample *self, const gsl_vector *x) { double euler_x, euler_y, euler_z; euler_x = gsl_vector_get(x, 0); euler_y = gsl_vector_get(x, 1); euler_z = gsl_vector_get(x, 2); hkl_parameter_value_set(self->ux, euler_x, HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->uy, euler_y, HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->uz, euler_z, HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->lattice->a, gsl_vector_get(x, 3), HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->lattice->b, gsl_vector_get(x, 4), HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->lattice->c, gsl_vector_get(x, 5), HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->lattice->alpha, gsl_vector_get(x, 6), HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->lattice->beta, gsl_vector_get(x, 7), HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->lattice->gamma, gsl_vector_get(x, 8), HKL_UNIT_DEFAULT, NULL); hkl_matrix_init_from_euler(&self->U, euler_x, euler_y, euler_z); if (!hkl_sample_compute_UB(self)) return FALSE; return TRUE; } static void hkl_sample_to_gsl_vector(HklSample *self, gsl_vector *x) { gsl_vector_set (x, 0, hkl_parameter_value_get(self->ux, HKL_UNIT_DEFAULT)); gsl_vector_set (x, 1, hkl_parameter_value_get(self->uy, HKL_UNIT_DEFAULT)); gsl_vector_set (x, 2, hkl_parameter_value_get(self->uz, HKL_UNIT_DEFAULT)); gsl_vector_set (x, 3, hkl_parameter_value_get(self->lattice->a, HKL_UNIT_DEFAULT)); gsl_vector_set (x, 4, hkl_parameter_value_get(self->lattice->b, HKL_UNIT_DEFAULT)); gsl_vector_set (x, 5, hkl_parameter_value_get(self->lattice->c, HKL_UNIT_DEFAULT)); gsl_vector_set (x, 6, hkl_parameter_value_get(self->lattice->alpha, HKL_UNIT_DEFAULT)); gsl_vector_set (x, 7, hkl_parameter_value_get(self->lattice->beta, HKL_UNIT_DEFAULT)); gsl_vector_set (x, 8, hkl_parameter_value_get(self->lattice->gamma, HKL_UNIT_DEFAULT)); } static double set_UB_fitness(const gsl_vector *x, void *params) { size_t i, j; double fitness = 0.; struct set_UB_t *parameters = params; HklSample *sample = parameters->sample; if (!hkl_sample_init_from_gsl_vector(sample, x)) return GSL_NAN; for(i=0; i<3; ++i) for(j=0; j<3; ++j){ double tmp = parameters->UB.data[i][j] - sample->UB.data[i][j]; fitness += tmp * tmp; } #ifdef DEBUG fprintf(stderr, "fitness: %f\n", fitness); #endif return fitness; } static double mono_crystal_fitness(const gsl_vector *x, void *params) { size_t i; double fitness; HklSample *sample = params; HklSampleReflection *reflection; if (!hkl_sample_init_from_gsl_vector(sample, x)) return GSL_NAN; fitness = 0.; list_for_each(&sample->reflections, reflection, list){ if(reflection->flag){ HklVector UBh; UBh = reflection->hkl; hkl_matrix_times_vector(&sample->UB, &UBh); for(i=0; i<3; ++i) { double tmp = UBh.data[i] - reflection->_hkl.data[i]; fitness += tmp * tmp; } } } return fitness; } static int minimize(HklSample *sample, double (* f) (const gsl_vector * x, void * params), void *params, GError **error) { HklSample *saved; gsl_multimin_fminimizer_type const *T = gsl_multimin_fminimizer_nmsimplex; gsl_multimin_fminimizer *s = NULL; gsl_vector *ss, *x; gsl_multimin_function minex_func; size_t iter = 0; int status; double size = 0; int res = TRUE; hkl_error (error == NULL || *error == NULL); /* save the sample state */ saved = hkl_sample_new_copy(sample); /* Starting point */ x = gsl_vector_alloc (9); hkl_sample_to_gsl_vector(sample, x); /* Set initial step sizes to 1 */ ss = gsl_vector_alloc (9); gsl_vector_set (ss, 0, sample->ux->fit); gsl_vector_set (ss, 1, sample->uy->fit); gsl_vector_set (ss, 2, sample->uz->fit); gsl_vector_set (ss, 3, sample->lattice->a->fit); gsl_vector_set (ss, 4, sample->lattice->b->fit); gsl_vector_set (ss, 5, sample->lattice->c->fit); gsl_vector_set (ss, 6, sample->lattice->alpha->fit); gsl_vector_set (ss, 7, sample->lattice->beta->fit); gsl_vector_set (ss, 8, sample->lattice->gamma->fit); /* Initialize method and iterate */ minex_func.n = 9; minex_func.f = f; minex_func.params = params; s = gsl_multimin_fminimizer_alloc (T, 9); gsl_set_error_handler_off(); gsl_multimin_fminimizer_set (s, &minex_func, x, ss); do { ++iter; status = gsl_multimin_fminimizer_iterate(s); #ifdef DEBUG fprintf(stderr, "status iterate: %d (%d): %s\n", status, iter, gsl_strerror(status)); #endif if (status) break; size = gsl_multimin_fminimizer_size (s); status = gsl_multimin_test_size (size, HKL_EPSILON / 2.); #ifdef DEBUG fprintf(stderr, "status test: %d size: %f :%s\n", status, size, gsl_strerror(status)); fprintf(stderr, " x:"); for(int i=0; i<9; ++i) fprintf(stderr, " %f", gsl_vector_get(s->x, i)); fprintf(stderr, "\n"); #endif } while (status == GSL_CONTINUE && iter < ITER_MAX); gsl_vector_free(x); gsl_vector_free(ss); gsl_multimin_fminimizer_free(s); gsl_set_error_handler (NULL); if (status == GSL_CONTINUE){ hkl_sample_sample_set(sample, saved); /* restore the saved sample */ g_set_error(error, HKL_SAMPLE_ERROR, HKL_SAMPLE_ERROR_MINIMIZED, "Minimization failed after %d iterations.", ITER_MAX); res = FALSE; } hkl_sample_free(saved); return res; } /*************/ /* HklSample */ /*************/ /** * hkl_sample_new: * @name: * * constructor * * Returns: **/ HklSample* hkl_sample_new(const char *name) { HklSample *self = NULL; self = HKL_MALLOC(HklSample); self->name = strdup(name); self->lattice = hkl_lattice_new_default(); hkl_matrix_init(&self->U,1, 0, 0, 0, 1, 0, 0, 0, 1); hkl_matrix_init(&self->UB,1, 0, 0, 0, 1, 0, 0, 0, 1); self->ux = hkl_parameter_new("ux", "the sample rotation around $\vec{x}$", -M_PI, 0., M_PI, TRUE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg); self->uy = hkl_parameter_new("uy", "the sample rotation around $\vec{y}$", -M_PI, 0., M_PI, TRUE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg); self->uz = hkl_parameter_new("uz", "the sample rotation around $\vec{z}$", -M_PI, 0., M_PI, TRUE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg); hkl_sample_compute_UB(self); list_head_init(&self->reflections); self->n_reflections = 0; return self; } /** * hkl_sample_new_copy: (skip) * @self: * * copy constructor * * Returns: **/ HklSample *hkl_sample_new_copy(const HklSample *self) { HklSample *dup = NULL; dup = HKL_MALLOC(HklSample); dup->name = strdup(self->name); dup->lattice = hkl_lattice_new_copy(self->lattice); dup->U = self->U; dup->UB = self->UB; dup->ux = hkl_parameter_new_copy(self->ux); dup->uy = hkl_parameter_new_copy(self->uy); dup->uz = hkl_parameter_new_copy(self->uz); hkl_sample_copy_all_reflections(dup, self); return dup; } /** * hkl_sample_free: (skip) * @self: * * destructor **/ void hkl_sample_free(HklSample *self) { free(self->name); hkl_lattice_free(self->lattice); hkl_parameter_free(self->ux); hkl_parameter_free(self->uy); hkl_parameter_free(self->uz); hkl_sample_clear_all_reflections(self); free(self); } /** * hkl_sample_name_get: * @self: the this ptr * * Return value: the name of the sample **/ const char *hkl_sample_name_get(const HklSample *self) { return self->name; } /** * hkl_sample_name_set: * @self: the this ptr * @name: the new name to set * * set the name of the sample **/ void hkl_sample_name_set(HklSample *self, const char *name) { if(self->name) free(self->name); self->name = strdup(name); } /** * hkl_sample_lattice_get: * @self: the this ptr * * Return value: the lattice parameters of the sample. **/ const HklLattice *hkl_sample_lattice_get(HklSample *self) { return self->lattice; } /** * hkl_sample_lattice_set: * @self: the this ptr * @lattice: the lattice to set **/ void hkl_sample_lattice_set(HklSample *self, const HklLattice *lattice) { hkl_lattice_lattice_set(self->lattice, lattice); hkl_sample_compute_UB(self); } /** * hkl_sample_ux_get: * @self: the this ptr * * Return value: the ux part of the U matrix. **/ const HklParameter *hkl_sample_ux_get(const HklSample *self) { return self->ux; } /** * hkl_sample_uy_get: * @self: the this ptr * * Return value: the uy part of the U matrix. **/ const HklParameter *hkl_sample_uy_get(const HklSample *self) { return self->uy; } /** * hkl_sample_uz_get: * @self: the this ptr * * Return value: the uz part of the U matrix. **/ const HklParameter *hkl_sample_uz_get(const HklSample *self) { return self->uz; } /** * hkl_sample_ux_set: * @self: the this ptr * @ux: the ux parameter to set * @error: return location for a GError, or NULL * * set the ux part of the U matrix. * * Returns: TRUE on success, FALSE if an error occurred **/ int hkl_sample_ux_set(HklSample *self, const HklParameter *ux, GError **error) { hkl_error (error == NULL || *error == NULL); if(!hkl_parameter_init_copy(self->ux, ux, error)){ g_assert (error == NULL || *error != NULL); return FALSE; } g_assert (error == NULL || *error == NULL); hkl_matrix_init_from_euler(&self->U, hkl_parameter_value_get(self->ux, HKL_UNIT_DEFAULT), hkl_parameter_value_get(self->uy, HKL_UNIT_DEFAULT), hkl_parameter_value_get(self->uz, HKL_UNIT_DEFAULT)); hkl_sample_compute_UB(self); return TRUE; } /** * hkl_sample_uy_set: * @self: the this ptr * @uy: the uy parameter to set * @error: return location for a GError, or NULL * * set the uy part of the U matrix. * * Returns: TRUE on success, FALSE if an error occurred **/ int hkl_sample_uy_set(HklSample *self, const HklParameter *uy, GError **error) { hkl_error (error == NULL || *error == NULL); if(!hkl_parameter_init_copy(self->uy, uy, error)){ g_assert (error == NULL || *error != NULL); return FALSE; } g_assert (error == NULL || *error == NULL); hkl_matrix_init_from_euler(&self->U, hkl_parameter_value_get(self->ux, HKL_UNIT_DEFAULT), hkl_parameter_value_get(self->uy, HKL_UNIT_DEFAULT), hkl_parameter_value_get(self->uz, HKL_UNIT_DEFAULT)); hkl_sample_compute_UB(self); return TRUE; } /** * hkl_sample_uz_set: * @self: the this ptr * @uz: the uz parameter to set * @error: return location for a GError, or NULL * * set the uz part of the U matrix. * * Returns: TRUE on success, FALSE if an error occurred **/ int hkl_sample_uz_set(HklSample *self, const HklParameter *uz, GError **error) { hkl_error (error == NULL || *error == NULL); if(!hkl_parameter_init_copy(self->uz, uz, error)){ g_assert (error == NULL || *error != NULL); return FALSE; } g_assert (error == NULL || *error == NULL); hkl_matrix_init_from_euler(&self->U, hkl_parameter_value_get(self->ux, HKL_UNIT_DEFAULT), hkl_parameter_value_get(self->uy, HKL_UNIT_DEFAULT), hkl_parameter_value_get(self->uz, HKL_UNIT_DEFAULT)); hkl_sample_compute_UB(self); return TRUE; } /** * hkl_sample_U_get: * @self: the this ptr * * Return value: the U matrix of the sample **/ const HklMatrix *hkl_sample_U_get(const HklSample *self) { return &self->U; } /* * TODO implemente the error */ void hkl_sample_U_set(HklSample *self, const HklMatrix *U, GError **error) { double x, y, z; hkl_matrix_matrix_set(&self->U, U); hkl_sample_compute_UB(self); hkl_matrix_to_euler(&self->U, &x, &y, &z); hkl_parameter_value_set(self->ux, x, HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->uy, y, HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->uz, z, HKL_UNIT_DEFAULT, NULL); } /** * hkl_sample_UB_get: * @self: the this ptr. * * Return value: get the UB matrix of the sample **/ const HklMatrix *hkl_sample_UB_get(const HklSample *self) { return &self->UB; } /** * hkl_sample_UB_set: * @self: the sample to modify * @UB: the UB matrix to set * @error: error set in case of impossibility * * Set the UB matrix using an external UB matrix. In fact you give * the UB matrix but only the U matrix of the sample is affected by * this operation. We keep the B matrix constant. * U * B = UB -> U = UB * B^-1 * TODO implemente the error **/ int hkl_sample_UB_set(HklSample *self, const HklMatrix *UB, GError **error) { struct set_UB_t params = { .sample = self, .UB = *UB }; return minimize(self, set_UB_fitness, ¶ms, error); } /** * hkl_sample_n_reflections_get: (skip) * @self: the this ptr * * return the number of reflections of the sample * * Returns: **/ size_t hkl_sample_n_reflections_get(const HklSample *self) { return self->n_reflections; } /** * hkl_sample_reflections_first_get: (skip) * @self: the this ptr * * Return value: the first HklSampleReflection of the sample. **/ HklSampleReflection *hkl_sample_reflections_first_get(HklSample *self) { return list_top(&self->reflections, HklSampleReflection, list); } /** * hkl_sample_reflections_next_get: (skip) * @self: the this ptr * @reflection: the current reflection * * Return value: (allow-none): the next reflection or NULL if no more reflection **/ HklSampleReflection *hkl_sample_reflections_next_get(HklSample *self, HklSampleReflection *reflection) { return list_next(&self->reflections, reflection, list); } /** * hkl_sample_add_reflection: * @self: the this ptr * @reflection: The reflection to add * * add a reflection to the sample, if the reflection is already part * of the sample reflection list, this method does nothing. **/ void hkl_sample_add_reflection(HklSample *self, HklSampleReflection *reflection) { HklSampleReflection *ref; list_for_each(&self->reflections, ref, list){ if (ref == reflection) return; } reflection->sample = self; hkl_sample_reflection_update(reflection); list_add_tail(&self->reflections, &reflection->list); self->n_reflections++; } /** * hkl_sample_del_reflection: * @self: the this ptr * @reflection: the reflection to remove. * * remove an HklSampleRefelction from the reflections list. **/ void hkl_sample_del_reflection(HklSample *self, HklSampleReflection *reflection) { list_del(&reflection->list); hkl_sample_reflection_free(reflection); self->n_reflections--; } /** * hkl_sample_compute_UB_busing_levy: * @self: the this ptr * @r1: the first #HklsampleReflection * @r2: the second #HklSampleReflection * * compute the UB matrix using the Busing and Levy method * #todo: add ref * * Returns: 0 or 1 if it succeed **/ int hkl_sample_compute_UB_busing_levy(HklSample *self, const HklSampleReflection *r1, const HklSampleReflection *r2, GError **error) { hkl_error (error == NULL || *error == NULL); if (!hkl_vector_is_colinear(&r1->hkl, &r2->hkl)) { HklVector h1c; HklVector h2c; HklMatrix B; HklMatrix Tc; /* Compute matrix Tc from r1 and r2. */ h1c = r1->hkl; h2c = r2->hkl; hkl_lattice_get_B(self->lattice, &B); hkl_matrix_times_vector(&B, &h1c); hkl_matrix_times_vector(&B, &h2c); hkl_matrix_init_from_two_vector(&Tc, &h1c, &h2c); hkl_matrix_transpose(&Tc); /* compute U */ hkl_matrix_init_from_two_vector(&self->U, &r1->_hkl, &r2->_hkl); hkl_matrix_times_matrix(&self->U, &Tc); hkl_sample_compute_UxUyUz(self); hkl_sample_compute_UB(self); }else{ g_set_error(error, HKL_SAMPLE_ERROR, HKL_SAMPLE_ERROR_COMPUTE_UB_BUSING_LEVY, "It is not possible to compute the UB matrix when the given reflections are colinear"); return FALSE; } g_assert (error == NULL || *error == NULL); return TRUE; } /** * hkl_sample_affine: * @self: the this ptr * * affine the sample * * Returns: the fitness of the affined #HklSample **/ int hkl_sample_affine(HklSample *self, GError **error) { return minimize(self, mono_crystal_fitness, self, error); } /** * hkl_sample_get_reflection_measured_angle: * @self: the this ptr * @r1: the first #HklSampleReflection * @r2: the second #HklSampleReflection * * get the measured angles between two #HklSampleReflection * * Returns: the measured angle beetween them **/ double hkl_sample_get_reflection_measured_angle(const HklSample *self, const HklSampleReflection *r1, const HklSampleReflection *r2) { return hkl_vector_angle(&r1->_hkl, &r2->_hkl); } /** * hkl_sample_get_reflection_theoretical_angle: * @self: the this ptr * @r1: the first #HklSampleReflection * @r2: the second #HklSampleReflection * * get the theoretical angles between two #HklSampleReflection * * Returns: the theoretical angle beetween them **/ double hkl_sample_get_reflection_theoretical_angle(const HklSample *self, const HklSampleReflection *r1, const HklSampleReflection *r2) { HklVector hkl1; HklVector hkl2; hkl1 = r1->hkl; hkl2 = r2->hkl; hkl_matrix_times_vector(&self->UB, &hkl1); hkl_matrix_times_vector(&self->UB, &hkl2); return hkl_vector_angle(&hkl1, &hkl2); } /** * hkl_sample_fprintf: (skip) * @f: * @self: * * print to a file a sample **/ void hkl_sample_fprintf(FILE *f, const HklSample *self) { if(!self) return; fprintf(f, "\nSample name: \"%s\"", self->name); fprintf(f, "\nLattice parameters:"); fprintf(f, "\n "); hkl_parameter_fprintf(f, self->lattice->a); fprintf(f, "\n "); hkl_parameter_fprintf(f, self->lattice->b); fprintf(f, "\n "); hkl_parameter_fprintf(f, self->lattice->c); fprintf(f, "\n "); hkl_parameter_fprintf(f, self->lattice->alpha); fprintf(f, "\n "); hkl_parameter_fprintf(f, self->lattice->beta); fprintf(f, "\n "); hkl_parameter_fprintf(f, self->lattice->gamma); fprintf(f, "\n "); hkl_parameter_fprintf(f, self->ux); fprintf(f, "\n "); hkl_parameter_fprintf(f, self->uy); fprintf(f, "\n "); hkl_parameter_fprintf(f, self->uz); fprintf(f, "\nUB:\n"); hkl_matrix_fprintf(f, &self->UB); if (!list_empty(&self->reflections)){ HklSampleReflection *reflection; HklParameter **axis; reflection = list_top(&self->reflections, HklSampleReflection, list); fprintf(f, "Reflections:"); fprintf(f, "\n"); fprintf(f, "%-10.6s %-10.6s %-10.6s", "h", "k", "l"); darray_foreach(axis, reflection->geometry->axes){ fprintf(f, " %-10.6s", (*axis)->name); } list_for_each(&self->reflections, reflection, list){ fprintf(f, "\n%-10.6f %-10.6f %-10.6f", reflection->hkl.data[0], reflection->hkl.data[1], reflection->hkl.data[2]); darray_foreach(axis, reflection->geometry->axes){ fprintf(f, " %-10.6f", hkl_parameter_value_get(*axis, HKL_UNIT_USER)); } } } } /***********************/ /* HklSampleReflection */ /***********************/ /** * hkl_sample_reflection_new: * @geometry: * @detector: * @h: * @k: * @l: * * constructeur * * Returns: **/ HklSampleReflection *hkl_sample_reflection_new(const HklGeometry *geometry, const HklDetector *detector, double h, double k, double l, GError **error) { HklSampleReflection *self = NULL; self = HKL_MALLOC(HklSampleReflection); self->geometry = hkl_geometry_new_copy(geometry); self->detector = hkl_detector_new_copy(detector); self->sample = NULL; self->hkl.data[0] = h; self->hkl.data[1] = k; self->hkl.data[2] = l; self->flag = TRUE; return self; } /** * hkl_sample_reflection_new_copy: (skip) * @self: * * copy constructor * * Returns: **/ HklSampleReflection *hkl_sample_reflection_new_copy(const HklSampleReflection *self) { HklSampleReflection *dup = NULL; dup = HKL_MALLOC(HklSampleReflection); dup->geometry = hkl_geometry_new_copy(self->geometry); dup->detector = hkl_detector_new_copy(self->detector); dup->hkl = self->hkl; dup->_hkl = self->_hkl; dup->flag = self->flag; return dup; } /** * hkl_sample_reflection_free: (skip) * @self: * * destructor **/ void hkl_sample_reflection_free(HklSampleReflection *self) { hkl_geometry_free(self->geometry); hkl_detector_free(self->detector); free(self); } /** * hkl_sample_reflection_hkl_get: * @self: the this ptr * @h: (out caller-allocates): the h-coordinate of the #HklSampleReflection * @k: (out caller-allocates): the k-coordinate of the #HklSampleReflection * @l: (out caller-allocates): the l-coordinate of the #HklSampleReflection * * get the hkl coordinates of the #HklSampleReflection **/ void hkl_sample_reflection_hkl_get(const HklSampleReflection *self, double *h, double *k, double *l) { *h = self->hkl.data[0]; *k = self->hkl.data[1]; *l = self->hkl.data[2]; } /** * hkl_sample_reflection_hkl_set: * @self: the this ptr * @h: the h-coordinate of the #HklSampleReflection * @k: the k-coordinate of the #HklSampleReflection * @l: the l-coordinate of the #HklSampleReflection * @error: return location for a GError, or NULL * * set the hkl coordinates of the #HklSampleReflection * * Returns: TRUE on success, FALSE if an error occurred **/ int hkl_sample_reflection_hkl_set(HklSampleReflection *self, double h, double k, double l, GError **error) { hkl_error (error == NULL || *error == NULL); if((fabs(h) + fabs(k) + fabs(l) < HKL_EPSILON)){ g_set_error(error, HKL_SAMPLE_REFLECTION_ERROR, HKL_SAMPLE_REFLECTION_ERROR_HKL_SET, "it is not allow to set a null hkl reflection\n"); return FALSE; } self->hkl.data[0] = h; self->hkl.data[1] = k; self->hkl.data[2] = l; return TRUE; } /** * hkl_sample_reflection_flag_get: * @self: the this ptr * * get the flag of the reflection * * Returns: the flag value **/ int hkl_sample_reflection_flag_get(const HklSampleReflection *self) { return self->flag; } /** * hkl_sample_reflection_flag_set: * @self: the this ptr * @flag: the value of the flag to set * * set the flag of the reflection. **/ void hkl_sample_reflection_flag_set(HklSampleReflection *self, int flag) { self->flag = flag; } /** * hkl_sample_reflection_geometry_get: * @self: the this ptr * * get the #HklGeometry stored in the #HklSampleReflection * * Returns: the geometry saved into the reflection. **/ const HklGeometry *hkl_sample_reflection_geometry_get(HklSampleReflection *self) { return self->geometry; } /** * hkl_sample_reflection_geometry_set: * @self: the this ptr * @geometry: the geometry to set in the #HklSampleReflection * * set the geometry of the reflection **/ void hkl_sample_reflection_geometry_set(HklSampleReflection *self, const HklGeometry *geometry) { if(self->geometry){ if(self->geometry != geometry){ hkl_geometry_free(self->geometry); self->geometry = hkl_geometry_new_copy(geometry); } }else self->geometry = hkl_geometry_new_copy(geometry); hkl_sample_reflection_update(self); } hkl-5.0.0.2449/hkl/hkl-lattice.c0000644000175000017500000005215713236600666016260 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include // for cos, sin, M_PI, atan2, sqrt #include // for fprintf, FILE #include // for NULL, free #include "hkl-lattice-private.h" // for _HklLattice #include "hkl-macros-private.h" // for HKL_MALLOC #include "hkl-matrix-private.h" // for _HklMatrix #include "hkl-parameter-private.h" // for hkl_parameter_init_copy, etc #include "hkl-unit-private.h" // for hkl_unit_length_nm, etc #include "hkl-vector-private.h" // for hkl_vector_angle, etc #include "hkl.h" // for HklLattice, etc /* private */ static double convert_to_default(const HklParameter *p, double value, HklUnitEnum unit_type) { switch(unit_type){ case HKL_UNIT_DEFAULT: return value; case HKL_UNIT_USER: return value / hkl_unit_factor(p->unit, p->punit); default: return NAN; } } static int check_lattice_param(double a, double b, double c, double alpha, double beta, double gamma, double *volume, GError **error) { hkl_error (error == NULL || *error == NULL); double D = 1. - cos(alpha)*cos(alpha) - cos(beta)*cos(beta) - cos(gamma)*cos(gamma) + 2. * cos(alpha)*cos(beta)*cos(gamma); if (D < 0.){ g_set_error(error, HKL_LATTICE_ERROR, HKL_LATTICE_CHECK_LATTICE, "these lattice parameters are not valid, check alpha, beta and gamma"); return FALSE; }else{ *volume = a * b * c * sqrt(D); return TRUE; } } /* public */ /** * hkl_lattice_new: * @a: the length of the a parameter * @b: the length of the b parameter * @c: the length of the c parameter * @alpha: the angle between b and c (radian) * @beta: the angle between a and c (radian) * @gamma: the angle between a and b (radian) * @error: return location for a GError, or NULL * * constructor * * Returns: a new HklLattice **/ HklLattice *hkl_lattice_new(double a, double b, double c, double alpha, double beta, double gamma, GError **error) { HklLattice *self = NULL; double volume; hkl_error (error == NULL || *error == NULL); if(!check_lattice_param(a, b, c, alpha, beta, gamma, &volume, error)) { g_assert (error == NULL || *error != NULL); return FALSE; } g_assert (error == NULL || *error == NULL); self = HKL_MALLOC(HklLattice); self->a = hkl_parameter_new("a", "The length of the first lattice vector", 0, a, a+10, TRUE, TRUE, &hkl_unit_length_nm, &hkl_unit_length_nm); self->b = hkl_parameter_new("b", "The length of the second lattice vector", 0, b, b+10, TRUE, TRUE, &hkl_unit_length_nm, &hkl_unit_length_nm); self->c = hkl_parameter_new("c", "The length of the third lattice vector", 0, c, c+10, TRUE, TRUE, &hkl_unit_length_nm, &hkl_unit_length_nm); self->alpha = hkl_parameter_new("alpha", "The angle between the second and third lattice vector", -M_PI, alpha, M_PI, TRUE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg); self->beta = hkl_parameter_new("beta", "The angle between the first and third lattice vector", -M_PI, beta, M_PI, TRUE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg); self->gamma = hkl_parameter_new("gamma", "The angle between the first and second lattice vector", -M_PI, gamma, M_PI, TRUE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg); self->volume = hkl_parameter_new("volume", "The volume of the lattice", 0, volume, a*b*c, FALSE, FALSE, &hkl_unit_length_nm, &hkl_unit_length_nm); return self; } /** * hkl_lattice_new_copy: (skip) * @self: * * copy constructor * * Returns: **/ HklLattice *hkl_lattice_new_copy(const HklLattice *self) { HklLattice *copy = NULL; copy = HKL_MALLOC(HklLattice); copy->a = hkl_parameter_new_copy(self->a); copy->b = hkl_parameter_new_copy(self->b); copy->c = hkl_parameter_new_copy(self->c); copy->alpha = hkl_parameter_new_copy(self->alpha); copy->beta = hkl_parameter_new_copy(self->beta); copy->gamma = hkl_parameter_new_copy(self->gamma); copy->volume = hkl_parameter_new_copy(self->volume); return copy; } /** * hkl_lattice_new_default: (skip) * * default constructor * * Returns: **/ HklLattice* hkl_lattice_new_default(void) { return hkl_lattice_new(1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, NULL); } /** * hkl_lattice_free: (skip) * @self: * * destructor **/ void hkl_lattice_free(HklLattice *self) { hkl_parameter_free(self->a); hkl_parameter_free(self->b); hkl_parameter_free(self->c); hkl_parameter_free(self->alpha); hkl_parameter_free(self->beta); hkl_parameter_free(self->gamma); hkl_parameter_free(self->volume); free(self); } #define HKL_LATTICE_X_SET(_p, _parameter, _error) do{ \ hkl_error ((_error) == NULL || *(_error) == NULL); \ double a, b, c, alpha, beta, gamma; \ /* check if the combinaison of parameters is ok */ \ hkl_lattice_get(self, &a, &b, &c, &alpha, &beta, &gamma, HKL_UNIT_DEFAULT); \ _p = hkl_parameter_value_get((_parameter), HKL_UNIT_DEFAULT); \ \ if(!hkl_lattice_set(self, a, b, c, alpha, beta, gamma, HKL_UNIT_DEFAULT, (_error))){ \ g_assert ((_error) == NULL || *(_error) != NULL); \ return FALSE; \ } \ g_assert ((_error) == NULL || *(_error) == NULL); \ return hkl_parameter_init_copy(self->_p, (_parameter), (_error)); \ }while(0) /** * hkl_lattice_a_get: * @self: the this ptr **/ const HklParameter *hkl_lattice_a_get(const HklLattice *self) { return self->a; } /** * hkl_lattice_a_set: * @self: the this ptr * @parameter: the parameter to set * @error: return location for a GError, or NULL * * Returns: TRUE on success, FALSE if an error occurred **/ int hkl_lattice_a_set(HklLattice *self, const HklParameter *parameter, GError **error) { HKL_LATTICE_X_SET(a, parameter, error); } /** * hkl_lattice_b_get: * @self: the this ptr **/ const HklParameter *hkl_lattice_b_get(const HklLattice *self) { return self->b; } /** * hkl_lattice_b_set: * @self: the this ptr * @parameter: the parameter to set * @error: return location for a GError, or NULL * * Returns: TRUE on success, FALSE if an error occurred **/ int hkl_lattice_b_set(HklLattice *self, const HklParameter *parameter, GError **error) { HKL_LATTICE_X_SET(b, parameter, error); } /** * hkl_lattice_c_get: * @self: the this ptr **/ const HklParameter *hkl_lattice_c_get(const HklLattice *self) { return self->c; } /** * hkl_lattice_c_set: * @self: the this ptr * @parameter: the parameter to set * @error: return location for a GError, or NULL * * Returns: TRUE on success, FALSE if an error occurred **/ int hkl_lattice_c_set(HklLattice *self, const HklParameter *parameter, GError **error) { HKL_LATTICE_X_SET(c, parameter, error); } /** * hkl_lattice_alpha_get: * @self: the this ptr **/ const HklParameter *hkl_lattice_alpha_get(const HklLattice *self) { return self->alpha; } /** * hkl_lattice_alpha_set: * @self: the this ptr * @parameter: the parameter to set * @error: return location for a GError, or NULL * * Returns: TRUE on success, FALSE if an error occurred **/ int hkl_lattice_alpha_set(HklLattice *self, const HklParameter *parameter, GError **error) { HKL_LATTICE_X_SET(alpha, parameter, error); } /** * hkl_lattice_beta_get: * @self: the this ptr **/ const HklParameter *hkl_lattice_beta_get(const HklLattice *self) { return self->beta; } /** * hkl_lattice_beta_set: * @self: the this ptr * @parameter: the parameter to set * @error: return location for a GError, or NULL * * Returns: TRUE on success, FALSE if an error occurred **/ int hkl_lattice_beta_set(HklLattice *self, const HklParameter *parameter, GError **error) { HKL_LATTICE_X_SET(beta, parameter, error); } /** * hkl_lattice_gamma_get: * @self: the this ptr **/ const HklParameter *hkl_lattice_gamma_get(const HklLattice *self) { return self->gamma; } /** * hkl_lattice_gamma_set: * @self: the this ptr * @parameter: the parameter to set * @error: return location for a GError, or NULL * * Returns: TRUE on success, FALSE if an error occurred **/ int hkl_lattice_gamma_set(HklLattice *self, const HklParameter *parameter, GError **error) { HKL_LATTICE_X_SET(gamma, parameter, error); } /** * hkl_lattice_volume_get: * @self: the this ptr **/ const HklParameter *hkl_lattice_volume_get(const HklLattice *self) { return self->volume; } /** * hkl_lattice_lattice_set: (skip) * @self: the this ptr * @lattice: the lattice to set from. **/ void hkl_lattice_lattice_set(HklLattice *self, const HklLattice *lattice) { if (self == lattice) return; hkl_parameter_init_copy(self->a, lattice->a, NULL); hkl_parameter_init_copy(self->b, lattice->b, NULL); hkl_parameter_init_copy(self->c, lattice->c, NULL); hkl_parameter_init_copy(self->alpha, lattice->alpha, NULL); hkl_parameter_init_copy(self->beta, lattice->beta, NULL); hkl_parameter_init_copy(self->gamma, lattice->gamma, NULL); hkl_parameter_init_copy(self->volume, lattice->volume, NULL); } /** * hkl_lattice_set: * @self: * @a: * @b: * @c: * @alpha: * @beta: * @gamma: * * set the lattice parameters * * Returns: **/ int hkl_lattice_set(HklLattice *self, double a, double b, double c, double alpha, double beta, double gamma, HklUnitEnum unit_type, GError **error) { hkl_error (error == NULL || *error == NULL); double _a, _b, _c, _alpha, _beta, _gamma; double _volume; _a = convert_to_default(self->a, a, unit_type); _b = convert_to_default(self->b, b, unit_type); _c = convert_to_default(self->c, c, unit_type); _alpha = convert_to_default(self->alpha, alpha, unit_type); _beta = convert_to_default(self->beta, beta, unit_type); _gamma = convert_to_default(self->gamma, gamma, unit_type); /* need to do the conversion before the check */ if(!check_lattice_param(_a, _b, _c, _alpha, _beta, _gamma, &_volume, error)){ g_assert (error == NULL || *error != NULL); return FALSE; } g_assert (error == NULL || *error == NULL); hkl_parameter_value_set(self->a, _a, HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->b, _b, HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->c, _c, HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->alpha, _alpha, HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->beta, _beta, HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->gamma, _gamma, HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->volume, _volume, HKL_UNIT_DEFAULT, NULL); return TRUE; } /** * hkl_lattice_get: * @self: * @a: (out caller-allocates): * @b: (out caller-allocates): * @c: (out caller-allocates): * @alpha: (out caller-allocates): * @beta: (out caller-allocates): * @gamma: (out caller-allocates): * * get the lattice parameters **/ void hkl_lattice_get(const HklLattice *self, double *a, double *b, double *c, double *alpha, double *beta, double *gamma, HklUnitEnum unit_type) { *a = hkl_parameter_value_get(self->a, unit_type); *b = hkl_parameter_value_get(self->b, unit_type); *c = hkl_parameter_value_get(self->c, unit_type); *alpha = hkl_parameter_value_get(self->alpha, unit_type); *beta = hkl_parameter_value_get(self->beta, unit_type); *gamma = hkl_parameter_value_get(self->gamma, unit_type); } /** * hkl_lattice_get_B: (skip) * @self: * @B: (out): where to store the B matrix * * Get the B matrix from the lattice parameters * * Returns: **/ int hkl_lattice_get_B(const HklLattice *self, HklMatrix *B) { double D; double c_alpha, s_alpha; double c_beta, s_beta; double c_gamma, s_gamma; double b11, b22, tmp; c_alpha = cos(hkl_parameter_value_get(self->alpha, HKL_UNIT_DEFAULT)); c_beta = cos(hkl_parameter_value_get(self->beta, HKL_UNIT_DEFAULT)); c_gamma = cos(hkl_parameter_value_get(self->gamma, HKL_UNIT_DEFAULT)); D = 1 - c_alpha*c_alpha - c_beta*c_beta - c_gamma*c_gamma + 2*c_alpha*c_beta*c_gamma; if (D > 0.) D = sqrt(D); else return FALSE; s_alpha = sin(hkl_parameter_value_get(self->alpha, HKL_UNIT_DEFAULT)); s_beta = sin(hkl_parameter_value_get(self->beta, HKL_UNIT_DEFAULT)); s_gamma = sin(hkl_parameter_value_get(self->gamma, HKL_UNIT_DEFAULT)); b11 = HKL_TAU / (hkl_parameter_value_get(self->b, HKL_UNIT_DEFAULT) * s_alpha); b22 = HKL_TAU / hkl_parameter_value_get(self->c, HKL_UNIT_DEFAULT); tmp = b22 / s_alpha; B->data[0][0] = HKL_TAU * s_alpha / (hkl_parameter_value_get(self->a, HKL_UNIT_DEFAULT) * D); B->data[0][1] = b11 / D * (c_alpha*c_beta - c_gamma); B->data[0][2] = tmp / D * (c_gamma*c_alpha - c_beta); B->data[1][0] = 0; B->data[1][1] = b11; B->data[1][2] = tmp / (s_beta*s_gamma) * (c_beta*c_gamma - c_alpha); B->data[2][0] = 0; B->data[2][1] = 0; B->data[2][2] = b22; return TRUE; } /** * hkl_lattice_get_1_B: (skip) * @self: the @HklLattice * @B: (out): where to store the 1/B matrix * * Compute the invert of B (needed by the hkl_sample_UB_set method) * should be optimized * * Returns: TRUE or FALSE depending of the success of the * computation. **/ int hkl_lattice_get_1_B(const HklLattice *self, HklMatrix *B) { HklMatrix tmp; double a; double b; double c; double d; double e; double f; /* * first compute the B matrix * | a b c | * | 0 d e | * | 0 0 f | */ hkl_lattice_get_B(self, &tmp); /* * now invert this triangular matrix */ a = tmp.data[0][0]; b = tmp.data[0][1]; c = tmp.data[0][2]; d = tmp.data[1][1]; e = tmp.data[1][2]; f = tmp.data[2][2]; B->data[0][0] = 1 / a; B->data[0][1] = -b / a / d; B->data[0][2] = (b * e - d * c) / a / d / f; B->data[1][0] = 0; B->data[1][1] = 1 / d; B->data[1][2] = -e / d / f; B->data[2][0] = 0; B->data[2][1] = 0; B->data[2][2] = 1 / f; return TRUE; } /** * hkl_lattice_reciprocal: * @self: the this ptr * @reciprocal: the lattice where the result will be computed * * compute the reciprocal #HklLattice and put the result id the * provided @reciprocal parameter * * Returns: 0 or 1 if it succeed. **/ int hkl_lattice_reciprocal(const HklLattice *self, HklLattice *reciprocal) { double c_alpha, c_beta, c_gamma; double s_alpha, s_beta, s_gamma; double c_beta1, c_beta2, c_beta3; double s_beta1, s_beta2, s_beta3; double s_beta_s_gamma, s_gamma_s_alpha, s_alpha_s_beta; double D; c_alpha = cos(hkl_parameter_value_get(self->alpha, HKL_UNIT_DEFAULT)); c_beta = cos(hkl_parameter_value_get(self->beta, HKL_UNIT_DEFAULT)); c_gamma = cos(hkl_parameter_value_get(self->gamma, HKL_UNIT_DEFAULT)); D = 1 - c_alpha*c_alpha - c_beta*c_beta - c_gamma*c_gamma + 2*c_alpha*c_beta*c_gamma; if (D > 0.) D = sqrt(D); else return FALSE; s_alpha = sin(hkl_parameter_value_get(self->alpha, HKL_UNIT_DEFAULT)); s_beta = sin(hkl_parameter_value_get(self->beta, HKL_UNIT_DEFAULT)); s_gamma = sin(hkl_parameter_value_get(self->gamma, HKL_UNIT_DEFAULT)); s_beta_s_gamma = s_beta * s_gamma; s_gamma_s_alpha = s_gamma * s_alpha; s_alpha_s_beta = s_alpha * s_beta; c_beta1 = (c_beta * c_gamma - c_alpha) / s_beta_s_gamma; c_beta2 = (c_gamma * c_alpha - c_beta) / s_gamma_s_alpha; c_beta3 = (c_alpha * c_beta - c_gamma) / s_alpha_s_beta; s_beta1 = D / s_beta_s_gamma; s_beta2 = D / s_gamma_s_alpha; s_beta3 = D / s_alpha_s_beta; hkl_lattice_set(reciprocal, HKL_TAU * s_alpha / (hkl_parameter_value_get(self->a, HKL_UNIT_DEFAULT) * D), HKL_TAU * s_beta / (hkl_parameter_value_get(self->b, HKL_UNIT_DEFAULT) * D), HKL_TAU * s_gamma / (hkl_parameter_value_get(self->c, HKL_UNIT_DEFAULT) * D), atan2(s_beta1, c_beta1), atan2(s_beta2, c_beta2), atan2(s_beta3, c_beta3), HKL_UNIT_DEFAULT, NULL); return TRUE; } /** * hkl_lattice_randomize: (skip) * @self: * * randomize the lattice **/ void hkl_lattice_randomize(HklLattice *self) { static HklVector vector_x = {{1, 0, 0}}; HklVector a, b, c; HklVector axe; unsigned int angles_to_randomize; /* La valeur des angles alpha, beta et gamma ne sont pas indépendant. */ /* Il faut donc gérer les différents cas. */ hkl_parameter_randomize(self->a); hkl_parameter_randomize(self->b); hkl_parameter_randomize(self->c); angles_to_randomize = self->alpha->fit + self->beta->fit + self->gamma->fit; switch (angles_to_randomize) { case 0: break; case 1: if (self->alpha->fit) { /* alpha */ a = b = c = vector_x; /* randomize b */ hkl_vector_randomize_vector(&axe, &a); hkl_vector_rotated_around_vector(&b, &axe, hkl_parameter_value_get(self->gamma, HKL_UNIT_DEFAULT)); /* randomize c */ hkl_vector_randomize_vector(&axe, &a); hkl_vector_rotated_around_vector(&c, &axe, hkl_parameter_value_get(self->beta, HKL_UNIT_DEFAULT)); /* compute the alpha angle. */ hkl_parameter_value_set(self->alpha, hkl_vector_angle(&b, &c), HKL_UNIT_DEFAULT, NULL); } else if (self->beta->fit) { /* beta */ a = b = vector_x; /* randomize b */ hkl_vector_randomize_vector(&axe, &a); hkl_vector_rotated_around_vector(&b, &axe, hkl_parameter_value_get(self->gamma, HKL_UNIT_DEFAULT)); /* randomize c */ c = b; hkl_vector_randomize_vector(&axe, &b); hkl_vector_rotated_around_vector(&c, &axe, hkl_parameter_value_get(self->alpha, HKL_UNIT_DEFAULT)); /* compute beta */ hkl_parameter_value_set(self->beta, hkl_vector_angle(&a, &c), HKL_UNIT_DEFAULT, NULL); } else { /* gamma */ a = c = vector_x; /* randomize c */ hkl_vector_randomize_vector(&axe, &a); hkl_vector_rotated_around_vector(&c, &axe, hkl_parameter_value_get(self->beta, HKL_UNIT_DEFAULT)); /* randomize b */ b = c; hkl_vector_randomize_vector(&axe, &c); hkl_vector_rotated_around_vector(&b, &axe, hkl_parameter_value_get(self->alpha, HKL_UNIT_DEFAULT)); /* compute gamma */ hkl_parameter_value_set(self->gamma, hkl_vector_angle(&a, &b), HKL_UNIT_DEFAULT, NULL); } break; case 2: if (self->alpha->fit) { if (self->beta->fit) { /* alpha + beta */ a = b = vector_x; /* randomize b */ hkl_vector_randomize_vector(&axe, &a); hkl_vector_rotated_around_vector(&b, &axe, hkl_parameter_value_get(self->gamma, HKL_UNIT_DEFAULT)); /* randomize c */ hkl_vector_randomize_vector_vector(&c, &a, &b); hkl_parameter_value_set(self->alpha, hkl_vector_angle(&b, &c), HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->beta, hkl_vector_angle(&a, &c), HKL_UNIT_DEFAULT, NULL); } else { /* alpha + gamma */ a = c = vector_x; /* randomize c */ hkl_vector_randomize_vector(&axe, &a); hkl_vector_rotated_around_vector(&c, &axe, hkl_parameter_value_get(self->beta, HKL_UNIT_DEFAULT)); /* randomize c */ hkl_vector_randomize_vector_vector(&b, &a, &c); hkl_parameter_value_set(self->alpha, hkl_vector_angle(&b, &c), HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->gamma, hkl_vector_angle(&a, &b), HKL_UNIT_DEFAULT, NULL); } } else { /* beta + gamma */ b = c = vector_x; /* randomize c */ hkl_vector_randomize_vector(&axe, &b); hkl_vector_rotated_around_vector(&c, &axe, hkl_parameter_value_get(self->alpha, HKL_UNIT_DEFAULT)); /* randomize c */ hkl_vector_randomize_vector_vector(&a, &b, &c); hkl_parameter_value_set(self->beta, hkl_vector_angle(&a, &c), HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->gamma, hkl_vector_angle(&a, &b), HKL_UNIT_DEFAULT, NULL); } break; case 3: hkl_vector_randomize(&a); hkl_vector_randomize_vector(&b, &a); hkl_vector_randomize_vector_vector(&c, &b, &a); hkl_parameter_value_set(self->alpha, hkl_vector_angle(&b, &c), HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->beta, hkl_vector_angle(&a, &c), HKL_UNIT_DEFAULT, NULL); hkl_parameter_value_set(self->gamma, hkl_vector_angle(&a, &b), HKL_UNIT_DEFAULT, NULL); break; } } /** * hkl_lattice_fprintf: (skip) * @f: * @self: * * print into a file the lattice. **/ void hkl_lattice_fprintf(FILE *f, HklLattice const *self) { fprintf(f, "\n"); hkl_parameter_fprintf(f, self->a); fprintf(f, "\n"); hkl_parameter_fprintf(f, self->b); fprintf(f, "\n"); hkl_parameter_fprintf(f, self->c); fprintf(f, "\n"); hkl_parameter_fprintf(f, self->alpha); fprintf(f, "\n"); hkl_parameter_fprintf(f, self->beta); fprintf(f, "\n"); hkl_parameter_fprintf(f, self->gamma); } hkl-5.0.0.2449/hkl3d.pc.in0000644000175000017500000000044112774775075015075 0ustar00piccapicca00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: hkl3d Description: Library for hkl Diffractometer computation Version: @VERSION@ Requires: hkl libg3d URL: http://repo.or.cz/w/hkl3d.git Libs: -L${libdir} -lhkl3d Cflags: -I${includedir}/hkl3d-@VMAJ@ hkl-5.0.0.2449/config/0000755000175000017500000000000013237020542014356 5ustar00piccapicca00000000000000hkl-5.0.0.2449/config/ltmain.sh0000644000175000017500000117147413237017572016226 0ustar00piccapicca00000000000000#! /bin/sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2014-01-03.01 # libtool (GNU libtool) 2.4.6 # Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.6 Debian-2.4.6-2" package_revision=2.4.6 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2015-01-20.17; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # Copyright (C) 2004-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # As a special exception to the GNU General Public License, if you distribute # this file as part of a program or library that is built using GNU Libtool, # you may include this file under the same distribution terms that you use # for the rest of that program. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath=$0 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1+=\\ \$func_quote_for_eval_result" }' else func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1=\$$1\\ \$func_quote_for_eval_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_for_eval ARG... # -------------------------- # Aesthetically quote ARGs to be evaled later. # This function returns two values: # i) func_quote_for_eval_result # double-quoted, suitable for a subsequent eval # ii) func_quote_for_eval_unquoted_result # has all characters that are still active within double # quotes backslashified. func_quote_for_eval () { $debug_cmd func_quote_for_eval_unquoted_result= func_quote_for_eval_result= while test 0 -lt $#; do case $1 in *[\\\`\"\$]*) _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; *) _G_unquoted_arg=$1 ;; esac if test -n "$func_quote_for_eval_unquoted_result"; then func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" else func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" fi case $_G_unquoted_arg in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_quoted_arg=\"$_G_unquoted_arg\" ;; *) _G_quoted_arg=$_G_unquoted_arg ;; esac if test -n "$func_quote_for_eval_result"; then func_append func_quote_for_eval_result " $_G_quoted_arg" else func_append func_quote_for_eval_result "$_G_quoted_arg" fi shift done } # func_quote_for_expand ARG # ------------------------- # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { $debug_cmd case $1 in *[\\\`\"]*) _G_arg=`$ECHO "$1" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; *) _G_arg=$1 ;; esac case $_G_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_arg=\"$_G_arg\" ;; esac func_quote_for_expand_result=$_G_arg } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_for_expand "$_G_cmd" eval "func_notquiet $func_quote_for_expand_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_for_expand "$_G_cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # Set a version string for this script. scriptversion=2014-01-07.03; # UTC # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # Copyright (C) 2010-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# warranty; '. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # to the main code. A hook is just a named list of of function, that can # be run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of functions called by FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It is assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook funcions.n" ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do eval $_G_hook '"$@"' # store returned options list back into positional # parameters for next 'cmd' execution. eval _G_hook_result=\$${_G_hook}_result eval set dummy "$_G_hook_result"; shift done func_quote_for_eval ${1+"$@"} func_run_hooks_result=$func_quote_for_eval_result } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list in your hook function, remove any # options that you action, and then pass back the remaining unprocessed # options in '_result', escaped suitably for # 'eval'. Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # func_quote_for_eval ${1+"$@"} # my_options_prep_result=$func_quote_for_eval_result # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # # Note that for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # ;; # *) set dummy "$_G_opt" "$*"; shift; break ;; # esac # done # # func_quote_for_eval ${1+"$@"} # my_silent_option_result=$func_quote_for_eval_result # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # # func_quote_for_eval ${1+"$@"} # my_option_validation_result=$func_quote_for_eval_result # } # func_add_hook func_validate_options my_option_validation # # You'll alse need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd func_options_prep ${1+"$@"} eval func_parse_options \ ${func_options_prep_result+"$func_options_prep_result"} eval func_validate_options \ ${func_parse_options_result+"$func_parse_options_result"} eval func_run_hooks func_options \ ${func_validate_options_result+"$func_validate_options_result"} # save modified positional parameters for caller func_options_result=$func_run_hooks_result } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propogate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before # returning. func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} # save modified positional parameters for caller func_options_prep_result=$func_run_hooks_result } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd func_parse_options_result= # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} # Adjust func_parse_options positional parameters to match eval set dummy "$func_run_hooks_result"; shift # Break out of the loop if we already parsed every option. test $# -gt 0 || break _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) test $# = 0 && func_missing_arg $_G_opt && break case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} func_parse_options_result=$func_quote_for_eval_result } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE # save modified positional parameters for caller func_validate_options_result=$func_run_hooks_result } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables after # splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} test "x$func_split_equals_lhs" = "x$1" \ && func_split_equals_rhs= }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /(C)/!b go :more /\./!{ N s|\n# | | b more } :go /^# Written by /,/# warranty; / { s|^# || s|^# *$|| s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| p } /^# Written by / { s|^# || p } /^warranty; /q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.6' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --mode=MODE use operation mode MODE --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname $scriptversion Debian-2.4.6-2 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . GNU libtool home page: . General help using GNU software: ." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func__fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Pass back the list of options. func_quote_for_eval ${1+"$@"} libtool_options_prep_result=$func_quote_for_eval_result } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} libtool_parse_options_result=$func_quote_for_eval_result } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote_for_eval ${1+"$@"} libtool_validate_options_result=$func_quote_for_eval_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module=$wl-multi_module continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -os2dllname) prev=os2dllname continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang # -fsanitize=* Clang/GCC memory and address sanitizer -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ -specs=*|-fsanitize=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_for_eval "$arg" arg=$func_quote_for_eval_result fi ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the '$prevarg' option requires an argument" if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname=$func_basename_result libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs=$tmp_deplibs fi if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; then case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs=$dlprefiles fi if test dlopen = "$pass"; then # Collect dlpreopened libraries save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test lib != "$linkmode" && test prog != "$linkmode"; then func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib=$searchdir/lib$name$search_ext if test -f "$lib"; then if test .la = "$search_ext"; then found=: else found=false fi break 2 fi done done if $found; then # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll=$l done if test "X$ll" = "X$old_library"; then # only static version available found=false func_dirname "$lib" "" "." ladir=$func_dirname_result lib=$ladir/$old_library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi else # deplib doesn't seem to be a libtool library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l *.ltframework) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=: fi ;; pass_all) valid_a_lib=: ;; esac if $valid_a_lib; then echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." fi ;; esac continue ;; prog) if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test conv = "$pass"; then deplibs="$deplib $deplibs" elif test prog = "$linkmode"; then if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=: continue ;; esac # case $deplib $found || test -f "$lib" \ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir=$func_dirname_result dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass" || { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test yes = "$prefer_static_libs" || test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib=$l done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. if test dlopen = "$pass"; then test -z "$libdir" \ && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || test yes != "$dlopen_support" || test no = "$build_libtool_libs" then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir=$ladir fi ;; esac func_basename "$lib" laname=$func_basename_result # Find the relevant object directory and library name. if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library '$lib' was moved." dir=$ladir absdir=$abs_ladir libdir=$abs_ladir else dir=$lt_sysroot$libdir absdir=$lt_sysroot$libdir fi test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir=$ladir absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else dir=$ladir/$objdir absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test dlpreopen = "$pass"; then if test -z "$libdir" && test prog = "$linkmode"; then func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=false if test no != "$link_all_deplibs" || test -z "$library_names" || test no = "$build_libtool_libs"; then linkalldeplibs=: fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && { { test no = "$prefer_static_libs" || test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if $alldeplibs && { test pass_all = "$deplibs_check_method" || { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule=$dlpremoduletest break fi done if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test lib = "$linkmode" && test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result versuffix=-$major ;; esac eval soname=\"$soname_spec\" else soname=$realname fi # Make a new name for the extract_expsyms_cmds to use soroot=$soname func_basename "$soroot" soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test no = "$hardcode_direct"; then add=$dir/$linklib case $host in *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add=$dir/$old_library fi elif test -n "$old_library"; then add=$dir/$old_library fi fi esac elif test no = "$hardcode_minus_L"; then case $host in *-*-sunos*) add_shlibpath=$dir ;; esac add_dir=-L$dir add=-l$name elif test no = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; relink) if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$dir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name elif test yes = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; *) lib_linked=no ;; esac if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test prog = "$linkmode"; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test yes != "$hardcode_direct" && test yes != "$hardcode_minus_L" && test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add=-l$name elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib"; then add=$inst_prefix_dir$libdir/$linklib else add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name fi if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test prog = "$linkmode"; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test unsupported != "$hardcode_direct"; then test -n "$old_library" && linklib=$old_library compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test yes = "$build_libtool_libs"; then # Not a shared library if test pass_all != "$deplibs_check_method"; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system cannot link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test yes = "$module"; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test lib = "$linkmode"; then if test -n "$dependency_libs" && { test yes != "$hardcode_into_libs" || test yes = "$build_old_libs" || test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of '$dir'" absdir=$dir fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names"; then for tmp in $deplibrary_names; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl"; then depdepl=$absdir/$objdir/$depdepl darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) path=-L$absdir/$objdir ;; esac else eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "'$deplib' seems to be moved" path=-L$absdir fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test link = "$pass"; then if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs=$newdependency_libs if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test dlopen != "$pass"; then test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= } if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" else vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Add Sun CC postdeps if required: test CXX = "$tagname" && { case $host_os in linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; solaris*) func_cc_basename "$CC" case $func_cc_basename_result in CC* | sunCC*) func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; esac } # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i= ;; esac if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test prog = "$linkmode"; then dlfiles=$newdlfiles fi if test prog = "$linkmode" || test lib = "$linkmode"; then dlprefiles=$newdlprefiles fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs=$output func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test no = "$module" \ && func_fatal_help "libtool library '$output' must begin with 'lib'" if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test pass_all != "$deplibs_check_method"; then func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test no = "$dlself" \ || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test 1 -lt "$#" \ && func_warning "ignoring multiple '-rpath's for a libtool library" install_libdir=$1 oldlibs= if test -z "$rpath"; then if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift IFS=$save_ifs test -n "$7" && \ func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major=$1 number_minor=$2 number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|freebsd-elf|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; freebsd-aout|qnx|sunos) current=$number_major revision=$number_minor age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_minor lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type '$version_type'" ;; esac ;; no) current=$1 revision=$2 age=$3 ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT '$current' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION '$revision' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE '$age' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE '$age' is greater than the current interface number '$current'" func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring_prefix$major.$iface:$verstring done # Before this point, $major must not contain '.'. major=.$major versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=.$current.$age.$revision verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring:$iface.0 done # Make executables depend on our current version. func_append verstring ":$current.0" ;; qnx) major=.$current versuffix=.$current ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result versuffix=-$major ;; *) func_fatal_configuration "unknown library version type '$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring=0.0 ;; esac if test no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= major= newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test yes = "$allow_libtool_libs_with_static_runtimes"; then for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test yes = "$droppeddeps"; then if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath=$finalize_shlibpath test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname=$realname fi if test -z "$dlname"; then dlname=$soname fi lib=$output_objdir/$realname linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS=$save_ifs if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi ${skipped_export-false} && { func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi } libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs # Restore the uninstalled library and exit if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ func_warning "'-version-info' is ignored for objects" test -n "$release" && \ func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj=$output ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS } if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "'-version-info' is ignored for programs" test -n "$release" && \ func_warning "'-release' is ignored for programs" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " $wl-bind_at_load" func_append finalize_command " $wl-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath=$rpath rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath=$rpath if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.$objext"; then func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test yes = "$no_install"; then # We don't need to create a wrapper script. link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi case $hardcode_action,$fast_install in relink,*) # Fast installation is not supported link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath func_warning "this platform does not like uninstalled shared libraries" func_warning "'$output' will be relinked during installation" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource=$output_path/$objdir/lt-$output_name.c cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac if test -n "$addlibs"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; then if test -z "$install_libdir"; then break fi output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name=$func_basename_result func_resolve_sysroot "$deplib" eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic for arg do case $arg in -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir=$func_dirname_result if test . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif $rmforce; then continue fi rmfiles=$file case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.$objext" if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name"; then func_append rmfiles " $odir/lt-$noexename.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi test -z "$opt_mode" && { help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: hkl-5.0.0.2449/config/missing0000755000175000017500000001533013237017632015765 0ustar00piccapicca00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: hkl-5.0.0.2449/config/config.guess0000755000175000017500000012544713237017632016721 0ustar00piccapicca00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2017 Free Software Foundation, Inc. timestamp='2017-11-07' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || \ echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case "${UNAME_MACHINE_ARCH}" in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case "${UNAME_MACHINE_ARCH}" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} exit ;; *:MidnightBSD:*:*) echo ${UNAME_MACHINE}-unknown-midnightbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; *:Sortix:*:*) echo ${UNAME_MACHINE}-unknown-sortix exit ;; *:Redox:*:*) echo ${UNAME_MACHINE}-unknown-redox exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = hppa2.0w ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; e2k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; k1om:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; mips64el:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; SX-ACE:SUPER-UX:*:*) echo sxace-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; NSX-*:NONSTOP_KERNEL:*:*) echo nsx-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; esac echo "$0: unable to guess system type" >&2 case "${UNAME_MACHINE}:${UNAME_SYSTEM}" in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: hkl-5.0.0.2449/config/install-sh0000755000175000017500000003546313237017632016403 0ustar00piccapicca00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2014-09-12.12; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) # $RANDOM is not portable (e.g. dash); use it when possible to # lower collision chance tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 # As "mkdir -p" follows symlinks and we work in /tmp possibly; so # create the $tmpdir first (and fail if unsuccessful) to make sure # that nobody tries to guess the $tmpdir name. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: hkl-5.0.0.2449/config/depcomp0000755000175000017500000005601713237017635015755 0ustar00piccapicca00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2016-01-11.22; # UTC # Copyright (C) 1999-2017 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: hkl-5.0.0.2449/config/config.sub0000755000175000017500000010752413237017632016360 0ustar00piccapicca00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2017 Free Software Foundation, Inc. timestamp='2017-11-23' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pru \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | wasm32 \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pru-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | wasm32-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; asmjs) basic_machine=asmjs-unknown ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2*) basic_machine=m68k-bull os=-sysv3 ;; e500v[12]) basic_machine=powerpc-unknown os=$os"spe" ;; e500v[12]-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` os=$os"spe" ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; nsx-tandem) basic_machine=nsx-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; wasm32) basic_machine=wasm32-unknown ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; x64) basic_machine=x86_64-pc ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases that might get confused # with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # Now accept the basic system types. # The portable systems comes first. # Each alternative MUST end in a * to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. case $basic_machine in arm*) os=-eabi ;; *) os=-elf ;; esac ;; -nacl*) ;; -ios) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; pru-*) os=-elf ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: hkl-5.0.0.2449/config/test-driver0000755000175000017500000001104013237017635016561 0ustar00piccapicca00000000000000#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2013-07-13.22; # UTC # Copyright (C) 2011-2014 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>$log_file # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: hkl-5.0.0.2449/config/compile0000755000175000017500000001624513237017632015752 0ustar00piccapicca00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: hkl-5.0.0.2449/hkl.h0000644000175000017500000005511713236600666014063 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_H__ #define __HKL_H__ #include // for M_PI #include // for size_t #include // for FILE #include // for g_set_error, GError etc #include // for darray /* deprecated */ #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) # define HKL_DEPRECATED __attribute__((__deprecated__)) #elif defined(_MSC_VER) && (_MSC_VER >= 1300) # define HKL_DEPRECATED __declspec(deprecated) #else # define HKL_DEPRECATED #endif #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) # define HKL_DEPRECATED_FOR(f) __attribute__((__deprecated__("Use '" #f "' instead"))) #elif defined(_MSC_FULL_VER) && (_MSC_FULL_VER > 140050320) # define HKL_DEPRECATED_FOR(f) __declspec(deprecated("is deprecated. Use '" #f "' instead")) #else # define HKL_DEPRECATED_FOR(f) HKL_DEPRECATED #endif #define HKL_TINY 1e-7 #define HKL_EPSILON 1e-6 #define HKL_DEGTORAD (M_PI/180.) #define HKL_RADTODEG (180./M_PI) /* tau = 2pi or 1 */ #define HKL_TAU (2. * M_PI) /* #define HKL_TAU 1 */ #ifdef HKLAPI # undef HKLAPI #endif #ifdef __GNUC__ # if __GNUC__ >= 4 # define HKLAPI __attribute__ ((visibility("default"))) # else # define HKLAPI # endif #else /** * @def HKLAPI * @brief Used to export functions(by changing visibility). */ # define HKLAPI #endif #if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) # define HKL_ARG_NONNULL(...) __attribute__ ((__nonnull__(__VA_ARGS__))) #else # define HKL_ARG_NONNULL(...) #endif # if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) # define HKL_WARN_UNUSED_RESULT __attribute__ ((__warn_unused_result__)) # else # define HKL_WARN_UNUSED_RESULT # endif #define _darray(type) type *item; size_t size; size_t alloc G_BEGIN_DECLS /**********/ /* Vector */ /**********/ typedef struct _HklVector HklVector; struct _HklVector { double data[3]; }; #define HKL_VECTOR_X {{1, 0, 0}} #define HKL_VECTOR_Y {{0, 1, 0}} #define HKL_VECTOR_Z {{0, 0, 1}} HKLAPI void hkl_vector_init(HklVector *self, double x, double y, double z); /**************/ /* Quaternion */ /**************/ typedef struct _HklQuaternion HklQuaternion; typedef struct _HklMatrix HklMatrix; /* forwarded declaration */ struct _HklQuaternion { double data[4]; }; typedef darray(const char *) darray_string; HKLAPI void hkl_quaternion_to_matrix(const HklQuaternion *self, HklMatrix *m) HKL_ARG_NONNULL(1, 2); /**********/ /* Matrix */ /**********/ HKLAPI HklMatrix *hkl_matrix_new(void) HKL_WARN_UNUSED_RESULT; HKLAPI HklMatrix *hkl_matrix_new_full(double m11, double m12, double m13, double m21, double m22, double m23, double m31, double m32, double m33) HKL_WARN_UNUSED_RESULT; HKLAPI HklMatrix *hkl_matrix_new_euler(double euler_x, double euler_y, double euler_z) HKL_WARN_UNUSED_RESULT; HKLAPI double hkl_matrix_get(const HklMatrix *self, unsigned int i, unsigned int j) HKL_ARG_NONNULL(1); HKLAPI void hkl_matrix_free(HklMatrix *self) HKL_ARG_NONNULL(1); HKLAPI void hkl_matrix_init(HklMatrix *self, double m11, double m12, double m13, double m21, double m22, double m23, double m31, double m32, double m33) HKL_ARG_NONNULL(1); HKLAPI int hkl_matrix_cmp(const HklMatrix *self, const HklMatrix *m) HKL_ARG_NONNULL(1, 2); HKLAPI void hkl_matrix_times_matrix(HklMatrix *self, const HklMatrix *m) HKL_ARG_NONNULL(1, 2); /********/ /* Unit */ /********/ typedef enum _HklUnitEnum { HKL_UNIT_DEFAULT, HKL_UNIT_USER } HklUnitEnum; /*************/ /* Parameter */ /*************/ typedef struct _HklParameter HklParameter; /* HklParameter */ HKLAPI HklParameter *hkl_parameter_new_copy(const HklParameter *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI void hkl_parameter_free(HklParameter *self) HKL_ARG_NONNULL(1); HKLAPI const char *hkl_parameter_name_get(const HklParameter *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI const char *hkl_parameter_default_unit_get(const HklParameter *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI const char *hkl_parameter_user_unit_get(const HklParameter *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI double hkl_parameter_value_get(const HklParameter *self, HklUnitEnum unit_type) HKL_ARG_NONNULL(1); HKLAPI int hkl_parameter_value_set(HklParameter *self, double value, HklUnitEnum unit_type, GError **error) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI void hkl_parameter_min_max_get(const HklParameter *self, double *min, double *max, HklUnitEnum unit_type) HKL_ARG_NONNULL(1, 2, 3); HKLAPI int hkl_parameter_min_max_set(HklParameter *self, double min, double max, HklUnitEnum unit_type, GError **error) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI int hkl_parameter_fit_get(const HklParameter *self) HKL_ARG_NONNULL(1); HKLAPI void hkl_parameter_fit_set(HklParameter *self, int fit) HKL_ARG_NONNULL(1); HKLAPI void hkl_parameter_randomize(HklParameter *self) HKL_ARG_NONNULL(1); /* getter and setter specific to certain type of HklParameter */ HKLAPI const HklVector *hkl_parameter_axis_v_get(const HklParameter *self) HKL_ARG_NONNULL(1)HKL_WARN_UNUSED_RESULT; HKLAPI const HklQuaternion *hkl_parameter_quaternion_get(const HklParameter *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI const char *hkl_parameter_description_get(const HklParameter *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI void hkl_parameter_fprintf(FILE *f, const HklParameter *self) HKL_ARG_NONNULL(1, 2); /************/ /* Detector */ /************/ typedef struct _HklDetector HklDetector; typedef enum _HklDetectorType { HKL_DETECTOR_TYPE_0D } HklDetectorType; HKLAPI HklDetector *hkl_detector_factory_new(HklDetectorType type) HKL_WARN_UNUSED_RESULT; HKLAPI HklDetector *hkl_detector_new_copy(const HklDetector *src) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI void hkl_detector_free(HklDetector *self) HKL_ARG_NONNULL(1); HKLAPI void hkl_detector_fprintf(FILE *f, const HklDetector *self) HKL_ARG_NONNULL(1, 2); /************/ /* Geometry */ /************/ typedef struct _HklGeometry HklGeometry; typedef struct _HklGeometryList HklGeometryList; typedef struct _HklGeometryListItem HklGeometryListItem; typedef struct _HklSample HklSample; /* forwarded declaration */ /* HklGeometry */ HKLAPI HklGeometry *hkl_geometry_new_copy(const HklGeometry *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI void hkl_geometry_free(HklGeometry *self) HKL_ARG_NONNULL(1); HKLAPI int hkl_geometry_set(HklGeometry *self, const HklGeometry *src) HKL_ARG_NONNULL(1, 2); HKLAPI const darray_string *hkl_geometry_axis_names_get(const HklGeometry *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI const HklParameter *hkl_geometry_axis_get(const HklGeometry *self, const char *name, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; HKLAPI int hkl_geometry_axis_set(HklGeometry *self, const char *name, const HklParameter *axis, GError **error) HKL_ARG_NONNULL(1, 2, 3) HKL_WARN_UNUSED_RESULT; HKLAPI void hkl_geometry_axis_values_get(const HklGeometry *self, double values[], size_t n_values, HklUnitEnum unit_type) HKL_ARG_NONNULL(1, 2); HKLAPI int hkl_geometry_axis_values_set(HklGeometry *self, double values[], size_t n_values, HklUnitEnum unit_type, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; HKLAPI const char *hkl_geometry_name_get(const HklGeometry *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI double hkl_geometry_wavelength_get(const HklGeometry *self, HklUnitEnum unit_type) HKL_ARG_NONNULL(1); HKLAPI int hkl_geometry_wavelength_set(HklGeometry *self, double wavelength, HklUnitEnum unit_type, GError **error) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI void hkl_geometry_randomize(HklGeometry *self) HKL_ARG_NONNULL(1); /* TODO after bissecting it seems that this method is slow (to replace) */ HKLAPI int hkl_geometry_set_values_v(HklGeometry *self, HklUnitEnum unit_type, GError **error, ...) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI HklQuaternion hkl_geometry_sample_rotation_get(const HklGeometry *self, const HklSample *sample) HKL_ARG_NONNULL(1, 2); HKLAPI HklQuaternion hkl_geometry_detector_rotation_get(const HklGeometry *self, const HklDetector *detector) HKL_ARG_NONNULL(1, 2); HKLAPI void hkl_geometry_fprintf(FILE *file, const HklGeometry *self) HKL_ARG_NONNULL(1, 2); /* HklGeometryList */ #define HKL_GEOMETRY_LIST_FOREACH(item, list) for((item)=hkl_geometry_list_items_first_get((list)); \ (item); \ (item)=hkl_geometry_list_items_next_get((list), (item))) HKLAPI void hkl_geometry_list_free(HklGeometryList *self) HKL_ARG_NONNULL(1); HKLAPI size_t hkl_geometry_list_n_items_get(const HklGeometryList *self) HKL_ARG_NONNULL(1); HKLAPI const HklGeometryListItem *hkl_geometry_list_items_first_get(const HklGeometryList *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI const HklGeometryListItem *hkl_geometry_list_items_next_get(const HklGeometryList *self, const HklGeometryListItem *item) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; /* HklGeometryListItem */ HKLAPI const HklGeometry *hkl_geometry_list_item_geometry_get(const HklGeometryListItem *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; /**********/ /* Sample */ /**********/ typedef struct _HklLattice HklLattice; typedef struct _HklSampleReflection HklSampleReflection; /* Lattice */ HKLAPI HklLattice *hkl_lattice_new(double a, double b, double c, double alpha, double beta, double gamma, GError **error) HKL_WARN_UNUSED_RESULT; HKLAPI HklLattice *hkl_lattice_new_copy(const HklLattice *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI HklLattice *hkl_lattice_new_default(void) HKL_WARN_UNUSED_RESULT; HKLAPI void hkl_lattice_free(HklLattice *self) HKL_ARG_NONNULL(1); HKLAPI const HklParameter *hkl_lattice_a_get(const HklLattice *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI int hkl_lattice_a_set(HklLattice *self, const HklParameter *parameter, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; HKLAPI const HklParameter *hkl_lattice_b_get(const HklLattice *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI int hkl_lattice_b_set(HklLattice *self, const HklParameter *parameter, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; HKLAPI const HklParameter *hkl_lattice_c_get(const HklLattice *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI int hkl_lattice_c_set(HklLattice *self, const HklParameter *parameter, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; HKLAPI const HklParameter *hkl_lattice_alpha_get(const HklLattice *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI int hkl_lattice_alpha_set(HklLattice *self, const HklParameter *parameter, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; HKLAPI const HklParameter *hkl_lattice_beta_get(const HklLattice *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI int hkl_lattice_beta_set(HklLattice *self, const HklParameter *parameter, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; HKLAPI const HklParameter *hkl_lattice_gamma_get(const HklLattice *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI int hkl_lattice_gamma_set(HklLattice *self, const HklParameter *parameter, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; HKLAPI const HklParameter *hkl_lattice_volume_get(const HklLattice *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI int hkl_lattice_set(HklLattice *self, double a, double b, double c, double alpha, double beta, double gamma, HklUnitEnum unit_type, GError **error) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI void hkl_lattice_get(const HklLattice *self, double *a, double *b, double *c, double *alpha, double *beta, double *gamma, HklUnitEnum unit_type) HKL_ARG_NONNULL(1, 2, 3, 4, 5, 6, 7); HKLAPI int hkl_lattice_get_B(const HklLattice *self, HklMatrix *B) HKL_ARG_NONNULL(1, 2); HKLAPI int hkl_lattice_get_1_B(const HklLattice *self, HklMatrix *B) HKL_ARG_NONNULL(1, 2); HKLAPI int hkl_lattice_reciprocal(const HklLattice *self, HklLattice *reciprocal) HKL_ARG_NONNULL(1, 2); /* HklSample */ HKLAPI HklSample *hkl_sample_new(const char *name) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI HklSample *hkl_sample_new_copy(const HklSample *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI void hkl_sample_free(HklSample *self) HKL_ARG_NONNULL(1); HKLAPI const char *hkl_sample_name_get(const HklSample *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI void hkl_sample_name_set(HklSample *self, const char *name) HKL_ARG_NONNULL(1, 2); HKLAPI const HklLattice *hkl_sample_lattice_get(HklSample *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI void hkl_sample_lattice_set(HklSample *self, const HklLattice *lattice) HKL_ARG_NONNULL(1, 2); HKLAPI const HklParameter *hkl_sample_ux_get(const HklSample *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI int hkl_sample_ux_set(HklSample *self, const HklParameter *ux, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; HKLAPI const HklParameter *hkl_sample_uy_get(const HklSample *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI int hkl_sample_uy_set(HklSample *self, const HklParameter *uy, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; HKLAPI const HklParameter *hkl_sample_uz_get(const HklSample *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI int hkl_sample_uz_set(HklSample *self, const HklParameter *uz, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; HKLAPI const HklMatrix *hkl_sample_U_get(const HklSample *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI void hkl_sample_U_set(HklSample *self, const HklMatrix *U, GError **error) HKL_ARG_NONNULL(1); HKLAPI const HklMatrix *hkl_sample_UB_get(const HklSample *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI int hkl_sample_UB_set(HklSample *self, const HklMatrix *UB, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; HKLAPI size_t hkl_sample_n_reflections_get(const HklSample *self) HKL_ARG_NONNULL(1); #define HKL_SAMPLE_REFLECTIONS_FOREACH(_item, _list) for((_item)=hkl_sample_reflections_first_get((_list)); \ (_item); \ (_item)=hkl_sample_reflections_next_get((_list), (_item))) HKLAPI HklSampleReflection *hkl_sample_reflections_first_get(HklSample *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI HklSampleReflection *hkl_sample_reflections_next_get(HklSample *self, HklSampleReflection *reflection) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; HKLAPI void hkl_sample_del_reflection(HklSample *self, HklSampleReflection *reflection) HKL_ARG_NONNULL(1, 2); HKLAPI void hkl_sample_add_reflection(HklSample *self, HklSampleReflection *reflection) HKL_ARG_NONNULL(1, 2); HKLAPI int hkl_sample_compute_UB_busing_levy(HklSample *self, const HklSampleReflection *r1, const HklSampleReflection *r2, GError **error) HKL_ARG_NONNULL(1, 2, 3) HKL_WARN_UNUSED_RESULT; HKLAPI double hkl_sample_get_reflection_measured_angle(const HklSample *self, const HklSampleReflection *r1, const HklSampleReflection *r2) HKL_ARG_NONNULL(1, 2, 3); HKLAPI double hkl_sample_get_reflection_theoretical_angle(const HklSample *self, const HklSampleReflection *r1, const HklSampleReflection *r2) HKL_ARG_NONNULL(1, 2, 3); HKLAPI int hkl_sample_affine(HklSample *self, GError **error) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; /* HklSampleReflection */ HKLAPI HklSampleReflection *hkl_sample_reflection_new(const HklGeometry *geometry, const HklDetector *detector, double h, double k, double l, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; HKLAPI void hkl_sample_reflection_hkl_get(const HklSampleReflection *self, double *h, double *k, double *l) HKL_ARG_NONNULL(1, 2, 3, 4); HKLAPI int hkl_sample_reflection_hkl_set(HklSampleReflection *self, double h, double k, double l, GError **error) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI int hkl_sample_reflection_flag_get(const HklSampleReflection *self) HKL_ARG_NONNULL(1); HKLAPI void hkl_sample_reflection_flag_set(HklSampleReflection *self, int flag) HKL_ARG_NONNULL(1); HKLAPI const HklGeometry *hkl_sample_reflection_geometry_get(HklSampleReflection *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI void hkl_sample_reflection_geometry_set(HklSampleReflection *self, const HklGeometry *geometry) HKL_ARG_NONNULL(1, 2); /**************/ /* PseudoAxis */ /**************/ typedef struct _HklEngine HklEngine; typedef struct _HklEngineList HklEngineList; typedef darray(HklEngine *) darray_engine; /* HklEngine */ HKLAPI const char *hkl_engine_name_get(const HklEngine *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI unsigned int hkl_engine_len(const HklEngine *self) HKL_ARG_NONNULL(1); HKLAPI const darray_string *hkl_engine_pseudo_axis_names_get(HklEngine *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI int hkl_engine_pseudo_axis_values_get(HklEngine *self, double values[], size_t n_values, HklUnitEnum unit_type, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; HKLAPI HklGeometryList *hkl_engine_pseudo_axis_values_set(HklEngine *self, double values[], size_t n_values, HklUnitEnum unit_type, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; HKLAPI const HklParameter *hkl_engine_pseudo_axis_get(const HklEngine *self, const char *name, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; typedef enum _HklEngineCapabilities { HKL_ENGINE_CAPABILITIES_READABLE = 1u << 0, HKL_ENGINE_CAPABILITIES_WRITABLE = 1u << 1, HKL_ENGINE_CAPABILITIES_INITIALIZABLE = 1u << 2, } HklEngineCapabilities; HKLAPI unsigned int hkl_engine_capabilities_get(const HklEngine *self) HKL_ARG_NONNULL(1); HKLAPI int hkl_engine_initialized_get(const HklEngine *self) HKL_ARG_NONNULL(1); HKLAPI int hkl_engine_initialized_set(HklEngine *self, int initialized, GError **error) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI void hkl_engine_fprintf(FILE *f, const HklEngine *self) HKL_ARG_NONNULL(1, 2); /* mode */ HKLAPI const darray_string *hkl_engine_modes_names_get(const HklEngine *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI const char *hkl_engine_current_mode_get(const HklEngine *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI int hkl_engine_current_mode_set(HklEngine *self, const char *name, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; typedef enum _HklEngineAxisNamesGet { HKL_ENGINE_AXIS_NAMES_GET_READ, HKL_ENGINE_AXIS_NAMES_GET_WRITE, } HklEngineAxisNamesGet; HKLAPI const darray_string *hkl_engine_axis_names_get(const HklEngine *self, HklEngineAxisNamesGet mode) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI const darray_string *hkl_engine_parameters_names_get(const HklEngine *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI const HklParameter *hkl_engine_parameter_get(const HklEngine *self, const char *name, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; HKLAPI int hkl_engine_parameter_set(HklEngine *self, const char *name, const HklParameter *parameter, GError **error) HKL_ARG_NONNULL(1, 2, 3) HKL_WARN_UNUSED_RESULT; HKLAPI void hkl_engine_parameters_values_get(const HklEngine *self, double values[], size_t n_values, HklUnitEnum unit_type) HKL_ARG_NONNULL(1, 2); HKLAPI int hkl_engine_parameters_values_set(HklEngine *self, double values[], size_t n_values, HklUnitEnum unit_type, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; typedef enum _HklEngineDependencies { HKL_ENGINE_DEPENDENCIES_AXES = 1u << 0, HKL_ENGINE_DEPENDENCIES_ENERGY = 1u << 1, HKL_ENGINE_DEPENDENCIES_SAMPLE = 1u << 2, } HklEngineDependencies; HKLAPI unsigned int hkl_engine_dependencies_get(const HklEngine *self) HKL_ARG_NONNULL(1); /* HklEngineList */ HKLAPI void hkl_engine_list_free(HklEngineList *self) HKL_ARG_NONNULL(1); HKLAPI darray_engine *hkl_engine_list_engines_get(HklEngineList *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI HklGeometry *hkl_engine_list_geometry_get(HklEngineList *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI int hkl_engine_list_geometry_set(HklEngineList *self, const HklGeometry *geometry) HKL_ARG_NONNULL(1, 2); HKLAPI int hkl_engine_list_select_solution(HklEngineList *self, const HklGeometryListItem *item) HKL_ARG_NONNULL(1); HKLAPI HklEngine *hkl_engine_list_engine_get_by_name(HklEngineList *self, const char *name, GError **error) HKL_ARG_NONNULL(1, 2) HKL_WARN_UNUSED_RESULT; HKLAPI void hkl_engine_list_init(HklEngineList *self, HklGeometry *geometry, HklDetector *detector, HklSample *sample) HKL_ARG_NONNULL(1, 2, 3, 4); HKLAPI int hkl_engine_list_get(HklEngineList *self) HKL_ARG_NONNULL(1); HKLAPI void hkl_engine_list_fprintf(FILE *f, const HklEngineList *self) HKL_ARG_NONNULL(1, 2); /***********/ /* Factory */ /***********/ typedef struct _HklFactory HklFactory; HKLAPI HklFactory **hkl_factory_get_all(size_t *n) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI HklFactory *hkl_factory_get_by_name(const char *name, GError **error) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI const char *hkl_factory_name_get(const HklFactory *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI HklGeometry *hkl_factory_create_new_geometry(const HklFactory *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI HklEngineList *hkl_factory_create_new_engine_list(const HklFactory *self) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; G_END_DECLS #endif hkl-5.0.0.2449/hkl.pc.in0000644000175000017500000000045512774775075014653 0ustar00piccapicca00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: hkl Description: Library for hkl Diffractometer computation Version: @VERSION@ URL: http://repo.or.cz/w/hkl.git Requires: gsl glib-2.0 Libs: -L${libdir} -lhkl Libs.private: -lm Cflags: -I${includedir}/hkl-@VMAJ@ hkl-5.0.0.2449/README0000644000175000017500000000073712710332473014004 0ustar00piccapicca00000000000000To build you need -PREREQUIRED gsl >= 1.12 (lib -- required) http://www.gnu.org/software/gsl/ gtkmm >= 2.18 (gui -- optional) http://www.gtkmm.org libg3d (gui -- optional) http://automagically.de/g3dviewer/ libyaml (gui -- optional) http://pyyaml.org/wiki/LibYAML gtk-doc >= 1.9 (doc -- optional) http://www.gtk.org/gtk-doc/ povray (doc -- optional) http://www.povray.org/ asymptote (doc -- optional) http://asymptote.sourceforge.net/hkl-5.0.0.2449/AUTHORS0000644000175000017500000000030312710332472014160 0ustar00piccapicca00000000000000Picca Frédéric-Emmanuel Maria-Teresa Nunez-Pardo-de-Verra Jens Krüger Oussama Sboui hkl-5.0.0.2449/config.h.in0000644000175000017500000002061613237017630015145 0ustar00piccapicca00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the `atexit' function. */ #undef HAVE_ATEXIT /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ #undef HAVE_DOPRNT /* Define to 1 if you have the `dup2' function. */ #undef HAVE_DUP2 /* Define to 1 if you have the `fchdir' function. */ #undef HAVE_FCHDIR /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the header file. */ #undef HAVE_FLOAT_H /* Define to 1 if you have the `floor' function. */ #undef HAVE_FLOOR /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `isascii' function. */ #undef HAVE_ISASCII /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H /* Define to 1 if you have the `memchr' function. */ #undef HAVE_MEMCHR /* Define to 1 if you have the `memmove' function. */ #undef HAVE_MEMMOVE /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the `mkdir' function. */ #undef HAVE_MKDIR /* Define to 1 if you have the `pow' function. */ #undef HAVE_POW /* Define to 1 if you have the `putenv' function. */ #undef HAVE_PUTENV /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #undef HAVE_REALLOC /* Define to 1 if you have the `rmdir' function. */ #undef HAVE_RMDIR /* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT /* Define to 1 if you have the `sqrt' function. */ #undef HAVE_SQRT /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strncasecmp' function. */ #undef HAVE_STRNCASECMP /* Define to 1 if you have the `strrchr' function. */ #undef HAVE_STRRCHR /* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define to 1 if you have the `strtol' function. */ #undef HAVE_STRTOL /* Define to 1 if you have the `strtoul' function. */ #undef HAVE_STRTOUL /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_VFORK_H /* Define to 1 if you have the `vprintf' function. */ #undef HAVE_VPRINTF /* Define to 1 if `fork' works. */ #undef HAVE_WORKING_FORK /* Define to 1 if `vfork' works. */ #undef HAVE_WORKING_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_YAML_H /* activate the logging or not */ #undef LOGGING /* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Version number of package */ #undef VERSION /* Major version */ #undef VMAJ /* Micro version */ #undef VMIC /* Minor version */ #undef VMIN /* Revison */ #undef VREV /* Define for Solaris 2.5.1 so the uint32_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT32_T /* Define for Solaris 2.5.1 so the uint64_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT64_T /* Define for Solaris 2.5.1 so the uint8_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT8_T /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to the type of a signed integer type of width exactly 16 bits if such a type exists and the standard includes do not define it. */ #undef int16_t /* Define to the type of a signed integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef int32_t /* Define to the type of a signed integer type of width exactly 64 bits if such a type exists and the standard includes do not define it. */ #undef int64_t /* Define to the type of a signed integer type of width exactly 8 bits if such a type exists and the standard includes do not define it. */ #undef int8_t /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc /* Define to `int' if does not define. */ #undef pid_t /* Define to rpl_realloc if the replacement function should be used. */ #undef realloc /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to the type of an unsigned integer type of width exactly 16 bits if such a type exists and the standard includes do not define it. */ #undef uint16_t /* Define to the type of an unsigned integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef uint32_t /* Define to the type of an unsigned integer type of width exactly 64 bits if such a type exists and the standard includes do not define it. */ #undef uint64_t /* Define to the type of an unsigned integer type of width exactly 8 bits if such a type exists and the standard includes do not define it. */ #undef uint8_t /* Define as `fork' if `vfork' does not work. */ #undef vfork hkl-5.0.0.2449/Makefile.am0000644000175000017500000001145713236600666015167 0ustar00piccapicca00000000000000## Process this file with automake to produce Makefile.in ACLOCAL_AMFLAGS = -I m4 AM_DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-introspection --enable-hkl3d SUBDIRS = hkl if HKL3D SUBDIRS += hkl3d data endif SUBDIRS += tests if GUI SUBDIRS += gui endif if HKL_DOC SUBDIRS += Documentation endif if CONTRIB SUBDIRS += contrib endif EXTRA_DIST = hkl.pc.in hkl3d.pc.in installed_mainheaderdir = $(includedir)/hkl-@VMAJ@ dist_installed_mainheader_DATA = hkl.h pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = hkl.pc if HKL3D #for not do not install noinst_DATA = hkl3d.pc endif release: git clean -xdf git fetch git checkout next cd scripts && ./clean-all -git commit -a -m "pre-release" git checkout maint git merge -m "release" next ./autogen.sh ./configure $(AM_DISTCHECK_CONFIGURE_FLAGS) $(MAKE) $(MAKE) distcheck git tag v`./configure -V | head -n 1 | awk '{print $$3}'` git checkout next ## lcov part .PHONY: lcov genlcov lcov-clean release # use recursive makes in order to ignore errors during check lcov: -$(MAKE) $(AM_MAKEFLAGS) -k check $(MAKE) $(AM_MAKEFLAGS) genlcov # we have to massage the lcov.info file slightly to hide the effect of libtool # placing the objects files in the .libs/ directory separate from the *.c # we also have to delete tests/.libs/*.gcda genlcov: rm -f $(top_builddir)/test/hkl/.libs/*.gcda $(LTP) --directory $(top_builddir) --capture --output-file hkl-lcov.info --test-name hkl-lcov --no-checksum --compat-libtool LANG=C $(LTP_GENHTML) --prefix $(top_builddir) --output-directory hkl-lcov --title "hkl Code Coverage" --legend --show-details hkl-lcov.info lcov-clean: -$(LTP) --directory $(top_builddir) -z -rm -rf hkl-lcov.info hkl-lcov -find -name '*.gcda' -print | xargs rm -find -name '*.gcno' -print | xargs rm distclean-local: lcov-clean ## Generate the Changelog file for the distribution. dist-hook: @if test -d "$(srcdir)/.git"; \ then \ echo Creating ChangeLog && \ ( cd "$(top_srcdir)" && \ echo '# Generated by Makefile. Do not edit.'; echo; \ $(top_srcdir)/config/missing --run git log --stat ) > ChangeLog.tmp \ && mv -f ChangeLog.tmp $(top_distdir)/ChangeLog \ || ( rm -f ChangeLog.tmp ; \ echo Failed to generate ChangeLog >&2 ); \ else \ echo A git clone is required to generate a ChangeLog >&2; \ fi ## Update the ccan library CCAN_PUBLIC_MODULES=darray CCAN_PRIVATE_MODULES=array_size container_of autodata list generator CCAN_LOCAL_REPO=/tmp/ccan CCAN_LOCAL_EXTRACT=/tmp/ccan.tmp CCAN_URL=https://github.com/rustyrussell/ccan.git CCAN_CREATE_TREE=rm -rf $(CCAN_LOCAL_EXTRACT) && cd $(CCAN_LOCAL_REPO) && tools/create-ccan-tree -b automake $(CCAN_LOCAL_EXTRACT) CCAN_DEST=$(top_srcdir)/hkl/ CCAN_TMP_DEST=/tmp/ccan.next ccan-update: @if test -d $(CCAN_LOCAL_REPO); \ then \ cd $(CCAN_LOCAL_REPO) && git pull; \ else \ git clone $(CCAN_URL) $(CCAN_LOCAL_REPO); \ fi @echo Extracting all the modules @$(CCAN_CREATE_TREE) $(CCAN_PUBLIC_MODULES) $(CCAN_PRIVATE_MODULES) @rm -rf $(CCAN_TMP_DEST) && mkdir -p $(CCAN_TMP_DEST) @rsync -av --exclude=Makefile.am $(CCAN_LOCAL_EXTRACT)/* $(CCAN_TMP_DEST) @find $(CCAN_TMP_DEST)/ccan -maxdepth 2 -name '*.[ch]' | xargs sed -i -e 's,ccan/,hkl/ccan/,' @find $(CCAN_TMP_DEST)/ccan -maxdepth 2 -name '*.[ch]' | xargs sed -i -e 's,"config.h",,' @find $(CCAN_TMP_DEST)/ccan -maxdepth 2 -name '_info' | xargs rm -f @find $(CCAN_TMP_DEST)/ccan -maxdepth 2 -name 'test' | xargs rm -rf @$(CCAN_CREATE_TREE) $(CCAN_PUBLIC_MODULES) @echo Generating the Makefile.am @(\ echo "AM_CFLAGS=-I\$$(top_srcdir)"; echo;\ echo "noinst_PROGRAMS=configurator";\ echo "BUILT_SOURCES=ccan_config.h";\ echo "ccan_config.h: configurator";\ (\ echo -e "\t\$$(builddir)/configurator \$$(CC) \$$(CCAN_CFLAGS) > \$$@.tmp && mv \$$@.tmp \$$@";\ );\ echo "noinst_LTLIBRARIES=libccan.la";\ echo "libccan_la_SOURCES = \\";\ (\ echo -e "\tccan_config.h \\";\ cd $(CCAN_TMP_DEST)/ccan && find . -maxdepth 2 -name '*.[ch]'\ | sed -e 's,^./,\t,;$$!s,$$, \\,'; echo;\ );\ echo "ccanincludedir=\$$(includedir)/hkl-@""VMAJ@/hkl/ccan";\ echo "nobase_ccaninclude_HEADERS= \\";\ (\ cd $(CCAN_LOCAL_EXTRACT)/ccan && find . -maxdepth 2 -name '*.[h]'\ | sed -e 's,^./,\t,;$$!s,$$, \\,';\ );\ echo "nodist_ccaninclude_HEADERS=ccan_config.h";\ echo "EXTRA_DIST=configurator.c";\ echo "CLEANFILES=configurator ccan_config.h";\ ) > $(CCAN_TMP_DEST)/ccan/Makefile.am @echo Extracting the configurator @rsync -av $(CCAN_LOCAL_REPO)/tools/configurator/configurator.c $(CCAN_TMP_DEST)/ccan @echo purge the previous ccan directory cd $(CCAN_DEST) && rm -rf licenses && find ccan -mindepth 1 -type d \! -name ".*" | xargs rm -rf rsync -av $(CCAN_TMP_DEST)/* $(top_srcdir)/hkl hkl-5.0.0.2449/tests/0000755000175000017500000000000013237020541014252 5ustar00piccapicca00000000000000hkl-5.0.0.2449/tests/hkl-pseudoaxis-soleil-sixs-med-t.c0000644000175000017500000001060113211074266022636 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2010 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl.h" #include #include #include #include "hkl-axis-private.h" /* temporary */ #define GET_GAMMA(geometries) hkl_parameter_value_get( \ hkl_geometry_axis_get( \ hkl_geometry_list_item_geometry_get( \ hkl_geometry_list_items_first_get((geometries))), \ "gamma", NULL), HKL_UNIT_USER) /* tests */ static void qper_qpar(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; HklGeometry *geometry; HklDetector *detector; HklSample *sample; double qper_qpar[2]; double gamma; HklGeometryList *geometries; static struct Sample gaas = { .name = "test", .lattice=Cubic(1.54), .ux = -90.0 * HKL_DEGTORAD, .uy = 0.0 * HKL_DEGTORAD, .uz = 0.0 * HKL_DEGTORAD, }; struct Geometry gconfig = SoleilSixsMed2_3(1.54, 0., 0.1, 0., 0., 90., 0.); geometry = newGeometry(gconfig); engines = newEngines(gconfig); sample = newSample(gaas); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "qper_qpar", NULL); /* the init part */ res &= DIAG(hkl_engine_initialized_set(engine, TRUE, NULL)); /* gamma must be positif */ qper_qpar[0] = 0.1; qper_qpar[1] = 4.; geometries = hkl_engine_pseudo_axis_values_set(engine, qper_qpar, ARRAY_SIZE(qper_qpar), HKL_UNIT_DEFAULT, NULL); if(geometries){ gamma = GET_GAMMA(geometries); is_double(2.61077, gamma, HKL_EPSILON * 10, __func__); hkl_geometry_list_free(geometries); } /* gamma must be negatif */ qper_qpar[0] = -0.1; qper_qpar[1] = 4.; geometries = hkl_engine_pseudo_axis_values_set(engine, qper_qpar, ARRAY_SIZE(qper_qpar), HKL_UNIT_DEFAULT, NULL); if(geometries){ gamma = GET_GAMMA(geometries); is_double(-2.7956354, gamma, HKL_EPSILON * 10, __func__); hkl_geometry_list_free(geometries); } ok(res, __func__); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } static void med_2_3(void) { int res = TRUE; HklEngineList *engines; HklEngine *hkl; HklGeometry *geometry; HklGeometryList *geometries; HklDetector *detector; HklSample *sample; static double hkl_p[] = {1.95, 2, 6}; static struct Sample gaas = { .name = "GaAs", .lattice = Hexagonal(4.759, 12.992), .ux = -90.59 * HKL_DEGTORAD, .uy = -9.97 * HKL_DEGTORAD, .uz = 176.35 * HKL_DEGTORAD, }; static struct Geometry gconfig = SoleilSixsMed2_3(1.54980, 0, 1, -14.27, 99.62, 60.98, 0); /* Wavelength 1.54980 */ /* Mode mu_fixed */ /* Ux -90.59 Uy -9.97 Uz 176.35 */ /* A 4.759 B 4.759 C 12.992 */ /* Alpha 90 Beta 90 Gamma 120 */ geometry = newGeometry(gconfig); engines = newEngines(gconfig); sample = newSample(gaas); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); hkl = hkl_engine_list_engine_get_by_name(engines, "hkl", NULL); res &= DIAG(hkl_engine_current_mode_set(hkl, "mu_fixed", NULL)); /* hkl 1.95, 2, 6 (should not fail) */ geometries = hkl_engine_pseudo_axis_values_set(hkl, hkl_p, ARRAY_SIZE(hkl_p), HKL_UNIT_DEFAULT, NULL); res &= DIAG((geometries != NULL)); hkl_geometry_list_free(geometries); ok(res == TRUE, __func__); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } int main(void) { plan(4); qper_qpar(); med_2_3(); return 0; } hkl-5.0.0.2449/tests/hkl-pseudoaxis-t.c0000644000175000017500000004022713236600666017637 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include #include #include "hkl.h" #include #include #define DEBUG typedef int (* test_func) (HklEngine *engine, HklEngineList *engine_list, unsigned int n); static int __test(unsigned int nb_iter, test_func f, int foreach_mode) { HklFactory **factories; size_t i, j, n; HklGeometry *geometry = NULL; HklDetector *detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); HklSample *sample = newSample(cu); HklEngineList *engines; int res = TRUE; const char **mode; factories = hkl_factory_get_all(&n); for(i=0; i geometry */ if(HKL_ENGINE_CAPABILITIES_INITIALIZABLE & hkl_engine_capabilities_get(engine)) res &= DIAG(hkl_engine_initialized_set(engine, TRUE, NULL)); res &= DIAG(hkl_engine_pseudo_axis_values_get(engine, currents, n_pseudo_axes, HKL_UNIT_DEFAULT, NULL)); /* idem with error management */ error = NULL; res &= DIAG(hkl_engine_pseudo_axis_values_get(engine, currents, n_pseudo_axes, HKL_UNIT_DEFAULT, &error)); res &= DIAG(NULL == error); for(i=0; i geometry */ res &= DIAG(hkl_engine_initialized_set(engine, TRUE, &error)); /* geometry -> pseudo */ solutions = hkl_engine_pseudo_axis_values_set(engine, targets, n_pseudo_axes, HKL_UNIT_DEFAULT, &error); if(solutions) { const HklGeometryListItem *item; HKL_GEOMETRY_LIST_FOREACH(item, solutions){ hkl_geometry_set(geometry, hkl_geometry_list_item_geometry_get(item)); res &= DIAG(hkl_engine_pseudo_axis_values_get(engine, currents, n_pseudo_axes, HKL_UNIT_DEFAULT, &error)); for(j=0; j 1) n = atoi(argv[1]); else n = 10; factories(); get(); set(n); pseudo_axis_get(); capabilities(); initialized(); modes(); axis_names(); parameters(); depends(); return 0; } hkl-5.0.0.2449/tests/bindings/0000755000175000017500000000000013237020542016050 5ustar00piccapicca00000000000000hkl-5.0.0.2449/tests/bindings/polarisation.py0000755000175000017500000003132212774775103021151 0ustar00piccapicca00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import os import math import unittest from collections import namedtuple from gi.repository import GLib from gi.repository import Hkl from numpy import (array, cross, dot, empty, hstack, reshape, vstack) from numpy.linalg import inv, norm ######### # Types # ######### Detector = namedtuple('Detector', ['type']) Diffractometer = namedtuple('Diffractometer', ['dtype', 'sample', 'detector', 'source', 'engine']) Engine = namedtuple('Engine', ['name', 'mode']) Lattice = namedtuple('Lattice', ['a', 'b', 'c', 'alpha', 'beta', 'gamma']) Reflection = namedtuple('Reflection', ['hkl', 'values']) Sample = namedtuple('Sample', ['lattice', 'or0', 'or1', 'ux', 'uy', 'uz']) Source = namedtuple('Source', ['wavelength', 'energy']) HklDiffractometer = namedtuple('HklDiffractometer', ['sample', 'detector', 'geometry', 'engines']) ################## # Helper methods # ################## def hkl_matrix_to_numpy(m): M = empty((3, 3)) for i in range(3): for j in range(3): M[i, j] = m.get(i, j) return M def from_numpy_to_hkl_vector(v): V = Hkl.Vector() V.init(v[0], v[1], v[2]) return V ######################### # Hkl Type constructors # ######################### def new_hkl_sample(config): # sample sample = Hkl.Sample.new("test") lattice = Hkl.Lattice.new(config.lattice.a, config.lattice.b, config.lattice.c, math.radians(config.lattice.alpha), math.radians(config.lattice.beta), math.radians(config.lattice.gamma)) sample.lattice_set(lattice) parameter = sample.ux_get() parameter.value_set(config.ux, Hkl.UnitEnum.USER) sample.ux_set(parameter) parameter = sample.uy_get() parameter.value_set(config.uy, Hkl.UnitEnum.USER) sample.uy_set(parameter) parameter = sample.uz_get() parameter.value_set(config.uz, Hkl.UnitEnum.USER) sample.uz_set(parameter) return sample def new_hkl_detector(config): return Hkl.Detector.factory_new(config.type) def new_hkl_geometry(dtype, wavelength, init_values): factory = Hkl.factories()[dtype] geometry = factory.create_new_geometry() geometry.axis_values_set(init_values, Hkl.UnitEnum.USER) geometry.wavelength_set(wavelength, Hkl.UnitEnum.USER) return geometry def new_hkl_engines(dtype): factory = Hkl.factories()[dtype] engines = factory.create_new_engine_list() return engines def new_hkl_diffractometer(config): sample = new_hkl_sample(config.sample) detector = new_hkl_detector(config.detector) # add reflection or0 geometry = new_hkl_geometry(config.dtype, config.source.wavelength, config.sample.or0.values) or0 = sample.add_reflection(geometry, detector, config.sample.or0.hkl[0], config.sample.or0.hkl[1], config.sample.or0.hkl[2]) # add reflection or1 geometry.axis_values_set(config.sample.or1.values, Hkl.UnitEnum.USER) or1 = sample.add_reflection(geometry, detector, config.sample.or1.hkl[0], config.sample.or1.hkl[1], config.sample.or1.hkl[2]) # compute UB with or0 and or1 # sample.compute_UB_busing_levy(or0, or1) # UB = hkl_matrix_to_numpy(sample.UB_get()) # compute angles for reciprocal lattice vector h, k, l engines = new_hkl_engines(config.dtype) # set the engine mode engine = engines.engine_get_by_name(config.engine.name) engine.current_mode_set(config.engine.mode) return HklDiffractometer(sample, geometry, detector, engines) ################# # Config parser # ################# def find(filename): if os.path.exists(filename): return filename else: datadir = os.getenv('DATADIR') if datadir: filename = os.path.join(datadir, filename) if os.path.exists(filename): return filename else: raise Exception("Can not find: " + filename) else: raise Exception("Cannot find: " + filename) def parse_reflection(line): ref = line.split() hkl = [float(x) for x in ref[2:5]] angles = [float(x) for x in ref[7:13]] return Reflection(hkl, angles) def parse(filename, dtype): with open(filename, 'r') as f: for line in f: if str(line).find('Wavelength') != -1: wavelength = float(line.split()[1]) energy = 12.39842 / wavelength if str(line).find('A') != -1 and str(line).find('B') != -1 and str(line).find('C') != -1: abc = line.split() a = float(abc[1]) b = float(abc[3]) c = float(abc[5]) if str(line).find('Alpha') != -1 and str(line).find('Beta') != -1 and str(line).find('Gamma') != -1: abg = line.split() alpha = float(abg[1]) beta = float(abg[3]) gamma = float(abg[5]) if str(line).find('R0') != -1: or0 = parse_reflection(line) if str(line).find('R1') != -1: or1 = parse_reflection(line) if str(line).find('Ux') != -1 and str(line).find('Uy') != -1 and str(line).find('Uz') != -1: uxuyuz = line.split() ux = float(uxuyuz[1]) uy = float(uxuyuz[3]) uz = float(uxuyuz[5]) if str(line).find('Engine') != -1: engine_name = line.split()[1] if str(line).find('Mode') != -1: mode_name = line.split()[1] lattice = Lattice(a, b, c, alpha, beta, gamma) sample = Sample(lattice, or0, or1, ux, uy, uz) detector = Detector(0) source = Source(wavelength, energy) engine = Engine(engine_name, mode_name) return Diffractometer(dtype, sample, detector, source, engine) ###################### # hight level method # ###################### def ca(config, hkl, engine_name='hkl'): sample, geometry, detector, engines = new_hkl_diffractometer(config) engines.init(geometry, detector, sample) engine = engines.engine_get_by_name(engine_name) solutions = engine.pseudo_axis_values_set(hkl, Hkl.UnitEnum.USER) first_solution = solutions.items()[0] values = first_solution.geometry_get().axis_values_get(Hkl.UnitEnum.USER) return Reflection(hkl, values) def get_UB(config): sample, geometry, detector, engines = new_hkl_diffractometer(config) return hkl_matrix_to_numpy(sample.UB_get()) def get_R_and_P(config, values): sample, geometry, detector, engines = new_hkl_diffractometer(config) geometry.axis_values_set(values, Hkl.UnitEnum.USER) R = hkl_matrix_to_numpy(geometry.sample_rotation_get(sample).to_matrix()) P = hkl_matrix_to_numpy(geometry.detector_rotation_get(detector).to_matrix()) return R, P ############## # Unit tests # ############## class Polarisation(unittest.TestCase): def test_petraIII(self): dtype = "E6C" # RUBh = kf - ki = (P ki - ki) = (P - I) ki config = parse(find('crystal.ini'), dtype) print config gaga = ca(config, [0.5, 14.5, 0.43]) print gaga UB = get_UB(config) print "UB: " print UB # the hkl vectors a*, b*, c* expressed in the laboratory basis for the current Q # transformation matrix T reciprocal space --> laboratory # values_w = [0, 34.16414, 79.52420, 0, 0, 38.29633] # values_w = [0, 35.06068, 80.78517, 0, 0, 43.91934] # values_w = [0, 36.45961, 81.75533, 0, 0, 49.7139] # values_w = [0, 38.24551, 82.52447, 0, 0, 55.68957] # values_w = [0, 40.34955, 83.14900, 0, 0, 61.86603] # values_w = [0, 42.73321, 83.66607, 0, 0, 68.27333] # values_w = [0, 45.37981, 84.10117, 0, 0, 74.95312] # values_w = [0, 48.29079, 84.47230, 0, 0, 81.96226] values_w = [0, 51.48568, 84.79259, 0, 0, 89.37964] # mu, omega, chi, phi, gamma, delta R, P = get_R_and_P(config, values_w) print "R: " print R print "P: " print P RUB = dot(R, UB) print "RUB: " print RUB astar = dot(RUB, [1, 0, 0]) bstar = dot(RUB, [0, 1, 0]) cstar = dot(RUB, [0, 0, 1]) # transformation matrix: reciprocal space --> laboratory T = hstack((reshape(astar, (3, 1)), reshape(bstar, (3, 1)), reshape(cstar, (3, 1)))) Tbis = vstack((reshape(astar, (1, 3)), reshape(bstar, (1, 3)), reshape(cstar, (1, 3)))) # transformation matrix: laboratory --> reciprocal space Tinv = inv(T) print '' # print 'cstar in laboratory frame :',cstar # print 'cstar in laboratory frame from T:',dot(T, hkl) # print 'cstar in rec. space from Tinv :',dot(Tinv, dot(T, hkl)) # compute kf ki = array([1, 0, 0]) * math.pi * 2 / config.source.wavelength kf = dot(P, ki) # compute Q Q = kf - ki print '' print 'Energy (keV):', config.source print 'Lattice parameters:', config.sample.lattice print '1st orienting reflection:', config.sample.or0.hkl, 'with angles: ', config.sample.or0.values print '2nd orienting reflection:', config.sample.or1.hkl, 'with angles: ', config.sample.or1.values print '' print 'UB matrix:' print UB print '' print 'Transformation matrix T(reciprocal space)--> laboratory frame:' print T, print '' print '' print 'Transformation matrix T(laboratory frame)--> reciprocal space :' print Tinv # compute Q # hkl = [0.5, 6.5, 0.43] # hkl = [0.5, 7.5, 0.43] # hkl = [0.5, 8.5, 0.43] # hkl = [0.5, 9.5, 0.43] # hkl = [0.5, 10.5, 0.43] # hkl = [0.5, 11.5, 0.43] # hkl = [0.5, 12.5, 0.43] # hkl = [0.5, 13.5, 0.43] hkl = [0.5, 14.5, 0.43] ''' print '' print 'Q in lab. frame from code :', dot(dot(R, UB), hkl), ', normalized:',(dot(dot(R, UB), hkl))/norm(dot(dot(R, UB), hkl)), ', norm:', norm(dot(dot(R, UB), hkl)) print 'Q in lab. frame from T :', dot(T, hkl), ', normalized:', (dot(T, hkl))/norm(dot(T, hkl)), ', norm:', norm(dot(T, hkl)) print 'Q in lab. frame from ki, kf :', Q, ', normalized:', Q/norm(Q),', norm:', norm(Q) print '' print 'Q in rec. space from Tinv of T :', dot(Tinv, dot(T, hkl)) print '' print 'difference factor:',(norm(dot(T, hkl)))/(norm(Q)) print '' print 'kf',kf,', norm:',norm(kf) print 'ki',ki,', norm:',norm(ki) ''' print '' print 'Q in rec. space from Tinv of T :', dot(Tinv, dot(T, hkl)) print '' # # compute u1, u2, u3 in reciprocal space coordinates # u1,u2,u3 in laboratory frame u1xyz = ki+kf u2xyz = cross(ki, kf) u3xyz = ki-kf # print '(u1,u2,u3) in laboratory frame:',u1xyz,u2xyz,u3xyz # u1,u2,u3 in reciprocal space u1 = dot(Tinv, u1xyz) / norm(dot(Tinv, u1xyz)) u2 = dot(Tinv, u2xyz) / norm(dot(Tinv, u2xyz)) u3 = dot(Tinv, u3xyz) / norm(dot(Tinv, u3xyz)) u1 = dot(Tinv, u1xyz) u2 = dot(Tinv, u2xyz) u3 = dot(Tinv, u3xyz) print '(u1,u2,u3) in reciprocal space from Tinv, unnormalized:',\ u1, u2, u3 print '(u1,u2,u3) in reciprocal space from Tinv, normalized to 1:',\ dot(Tinv, u1xyz) / norm(dot(Tinv, u1xyz)), \ dot(Tinv, u2xyz) / norm(dot(Tinv, u2xyz)), \ dot(Tinv, u3xyz) / norm(dot(Tinv, u3xyz)) # print '(u1,u2,u3) in reciprocal space from Tinv:', \ # dot(Tinv, u1xyz), dot(Tinv, u2xyz), dot(Tinv, u3xyz) print '' # TRANSFORMATION MATRIX reciprocal lattice basis to u1 u2 u3 basis ABC = hstack((reshape([1, 0, 0], (3, 1)), reshape([0, 1, 0], (3, 1)), reshape([0, 0, 1], (3, 1)))) U = hstack((reshape(u1, (3, 1)), reshape(u2, (3, 1)), reshape(u3, (3, 1)))) M = dot(ABC, inv(U)) print 'Transformation matrix reciprocal lattice basis to u1 u2 u3 basis:' print M # keep in order to pass the test self.assertTrue(True) if __name__ == '__main__': unittest.main(verbosity=2) hkl-5.0.0.2449/tests/bindings/trajectory.py0000755000175000017500000001065112710332473020622 0ustar00piccapicca00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import math import numpy import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages from matplotlib import rcParams from gi.repository import GLib from gi.repository import Hkl def compute_hkl_trajectories(engines, engine, hkl1=None, hkl2=None, n=100): """ compute all the trajectories for a given engine already configured """ if not hkl1: hkl1 = [0, 0, 1] if not hkl2: hkl2 = [0, 1, 1] h = numpy.linspace(hkl1[0], hkl2[0], n + 1) k = numpy.linspace(hkl1[1], hkl2[1], n + 1) l = numpy.linspace(hkl1[2], hkl2[2], n + 1) # set the hkl engine and get the results trajectories = [] for hh, kk, ll in zip(h, k, l): try: solutions = engine.pseudo_axis_values_set([hh, kk, ll], Hkl.UnitEnum.USER) first_solution = solutions.items()[0] for i, item in enumerate(solutions.items()): try: trajectories[i] except IndexError: trajectories.append([]) values = item.geometry_get().axis_values_get(Hkl.UnitEnum.USER) trajectories[i].append(values) engines.select_solution(first_solution) except GLib.GError, err: pass return trajectories def _plot_legend(axes): plt.subplot(3, 4, 1) plt.title("legend") print "legende", 1 for name in axes: plt.plot([0, 0], label=name) plt.legend() def plot_hkl_trajectory(filename, geometry, engines, hkl1=None, hkl2=None, n=100): """ plot the trajectory for a engine. It is possible to limit the number of trajectory using the max_traj keyword """ axis_names = geometry.axis_names_get() hkl = engines.engine_get_by_name("hkl") page = 1 plt.clf() plt.suptitle("\"" + filename + "\" " + repr( hkl1) + " -> " + repr(hkl2) + " page " + str(page)) _plot_legend(axis_names) idx = 2 for mode in hkl.modes_names_get(): hkl.current_mode_set(mode) trajectories = compute_hkl_trajectories(engines, hkl, hkl1=hkl1, hkl2=hkl2, n=n) print "\"" + filename + "\"", idx, mode, len(trajectories) plt.subplot(3, 4, idx) plt.title(mode) if not len(trajectories): plt.text(0.5, 0.5, "Failed", size=20, rotation=0., ha="center", va="center", bbox=dict(boxstyle="round", ec=(1., 0.5, 0.5), fc=(1., 0.8, 0.8), ) ) plt.draw() else: plt.ylim(-180, 180) if len(trajectories[0]) == 1: plt.plot(trajectories[0], 'o-') else: plt.plot(trajectories[0], '-') idx += 1 if idx > 12: pp.savefig() plt.clf() page += 1 _plot_legend(axis_names) plt.suptitle(filename + " " + repr( hkl1) + " -> " + repr(hkl2) + " page " + str(page)) idx = 2 pp.savefig() pp = PdfPages('trajectories.pdf') rcParams['font.size'] = 6 def main(): sample = Hkl.Sample.new("toto") lattice = Hkl.Lattice.new(1.54, 1.54, 1.54, math.radians(90.), math.radians(90.), math.radians(90.)) sample.lattice_set(lattice) detector = Hkl.Detector.factory_new(Hkl.DetectorType(0)) for key, factory in Hkl.factories().iteritems(): geometry = factory.create_new_geometry() engines = factory.create_new_engine_list() # here we set the detector arm with only positiv values for # now tth or delta arm for axis in geometry.axis_names_get(): if axis in ["tth", "delta"]: tmp = geometry.axis_get(axis) tmp.min_max_set(0, 180., Hkl.UnitEnum.USER) geometry.axis_set(axis, tmp) engines.init(geometry, detector, sample) engines_names = [engine.name_get() for engine in engines.engines_get()] if 'hkl' in engines_names: plot_hkl_trajectory(key, geometry, engines, hkl1=[0, 0, 1], hkl2=[0, 1, 1], n=100) pp.close() if __name__ == '__main__': main() hkl-5.0.0.2449/tests/bindings/Makefile.am0000644000175000017500000000103112774775103020116 0ustar00piccapicca00000000000000TESTS_ENVIRONMENT=env GI_TYPELIB_PATH=$(top_builddir)/hkl DATADIR=$(srcdir) $(LIBTOOL) --mode=execute -dlopen $(top_builddir)/hkl/libhkl.la TESTS = python.py trajectory.py polarisation.py EXTRA_DIST = $(TESTS) crystal.ini ipython: env GI_TYPELIB_PATH=$(top_builddir)/hkl $(LIBTOOL) --mode=execute -dlopen $(top_builddir)/hkl/libhkl.la ipython -i -c "from gi.repository import Hkl" gdb: env GI_TYPELIB_PATH=$(top_builddir)/hkl $(LIBTOOL) --mode=execute -dlopen $(top_builddir)/hkl/libhkl.la gdb python CLEANFILES = trajectories.pdf hkl-5.0.0.2449/tests/bindings/python.py0000755000175000017500000003451212710332515017754 0ustar00piccapicca00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ This file is part of the hkl library. The hkl library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. The hkl library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with the hkl library. If not, see . Copyright (C) 2012-2013 Synchrotron SOLEIL L'Orme des Merisiers Saint-Aubin BP 48 91192 GIF-sur-YVETTE CEDEX Authors: Picca Frédéric-Emmanuel """ import math import unittest from gi.repository import GLib from gi.repository import Hkl class TestAPI(unittest.TestCase): """Test all the Hkl API, if something brakes here it means that API has changed !!! """ def test_vector_api(self): """ enforce the Vector api """ v = Hkl.Vector() self.assertTrue(type(v) == Hkl.Vector) self.assertTrue(type(v.data) == list) self.assertTrue(3 == len(v.data)) self.assertTrue(v.data == [0.0, 0.0, 0.0]) v.init(1, 2, 3) self.assertTrue(v.data == [1.0, 2.0, 3.0]) del v def test_quaternion_api(self): """ enforce the Vector api """ q = Hkl.Quaternion() self.assertTrue(type(q) == Hkl.Quaternion) self.assertTrue(type(q.data) == list) self.assertTrue(4 == len(q.data)) del q def test_factory_api(self): """ enforce the Factory API """ # factories dict factories = Hkl.factories() for key, factory in factories.iteritems(): self.assertTrue(type(key) == str) self.assertTrue(type(factory) == Hkl.Factory) # create all the geometry and engines geometry = factory.create_new_geometry() self.assertTrue(type(geometry) == Hkl.Geometry) engines = factory.create_new_engine_list() self.assertTrue(type(engines) == Hkl.EngineList) del factories def test_detector_api(self): """ enforce the detector API """ # create an 0D HklDetector detector = Hkl.Detector.factory_new(Hkl.DetectorType(0)) self.assertTrue(type(detector) is Hkl.Detector) del detector def test_geometry_api(self): """ enforce the geometry API """ # get the config for a given geometry and create the # corresponding HklGeometry factory = Hkl.factories()['K6C'] geometry = factory.create_new_geometry() detector = Hkl.Detector.factory_new(Hkl.DetectorType(0)) sample = Hkl.Sample.new("toto") # source access wavelength = 1. geometry.wavelength_set(wavelength, Hkl.UnitEnum.USER) self.assertTrue(wavelength == geometry.wavelength_get(Hkl.UnitEnum.USER)) # noqa # set the geometry axes values values_w = [0, 30, 0, 0, 0, 60] geometry.axis_values_set(values_w, Hkl.UnitEnum.USER) values_r = geometry.axis_values_get(Hkl.UnitEnum.USER) # check that the read and write values of the geometry are # almost equals for r, w in zip(values_w, values_r): self.assertAlmostEqual(r, w) # check that we can access the axes axis_names = geometry.axis_names_get() for name in axis_names: axis = geometry.axis_get(name) axis.min_max_set(0, math.radians(180), Hkl.UnitEnum.USER) v = axis.axis_v_get() q = axis.quaternion_get() geometry.axis_set(name, axis) # check xxx_rotation_get q = geometry.sample_rotation_get(sample) m = q.to_matrix() self.assertTrue(type(m) == Hkl.Matrix) self.assertTrue(type(q) == Hkl.Quaternion) q = geometry.detector_rotation_get(detector) m = q.to_matrix() self.assertTrue(type(m) == Hkl.Matrix) self.assertTrue(type(q) == Hkl.Quaternion) del sample del detector del geometry def test_engine_api(self): """ enforce the HklEngine API """ detector = Hkl.Detector.factory_new(Hkl.DetectorType(0)) factory = Hkl.factories()['K6C'] geometry = factory.create_new_geometry() values_w = [0., 30., 0., 0., 0., 60.] geometry.axis_values_set(values_w, Hkl.UnitEnum.USER) sample = Hkl.Sample.new("toto") lattice = sample.lattice_get() lattice.set(1.54, 1.54, 1.54, 90, 90, 90, Hkl.UnitEnum.USER) sample.lattice_set(lattice) # compute all the pseudo axes managed by all engines engines = factory.create_new_engine_list() engines.init(geometry, detector, sample) engines.get() # get the hkl engine and do a computation hkl = engines.engine_get_by_name("hkl") values = hkl.pseudo_axis_values_get(Hkl.UnitEnum.USER) # check for all modes for mode in hkl.modes_names_get(): self.assertTrue(type(mode) is str) # set the hkl engine and get the results for _ in range(100): try: solutions = hkl.pseudo_axis_values_set(values, Hkl.UnitEnum.USER) self.assertTrue(type(solutions) is Hkl.GeometryList) for item in solutions.items(): self.assertTrue(type(item) is Hkl.GeometryListItem) self.assertTrue(type(item.geometry_get()) is Hkl.Geometry) values[1] += .01 except GLib.GError, err: print values, err # check that all the values computed are reachable for engine in engines.engines_get(): self.assertTrue(type(engine) is Hkl.Engine) self.assertTrue(type(engine.name_get()) is str) self.assertTrue(type(engine.pseudo_axis_names_get()) is list) self.assertTrue(type(engine.modes_names_get()) is list) self.assertTrue(len(engine.modes_names_get())) for mode in engine.modes_names_get(): self.assertTrue(type(mode) is str) values = engine.pseudo_axis_values_get(Hkl.UnitEnum.USER) self.assertTrue(type(values) is list) for value in values: self.assertTrue(type(value) is float) # check that all engine parameters and axes are reachables for engine in engines.engines_get(): for mode in engine.modes_names_get(): engine.current_mode_set(mode) parameters = engine.parameters_names_get() self.assertTrue(type(parameters) is list) [self.assertTrue(type(_) is str) for _ in parameters] # all together values = engine.parameters_values_get(Hkl.UnitEnum.USER) [self.assertTrue(type(_) is float) for _ in values] engine.parameters_values_set(values, Hkl.UnitEnum.USER) # one by one for parameter in parameters: p = engine.parameter_get(parameter) self.assertTrue(type(p.description_get()) is str) # check that parameters are writable. values = engine.parameters_values_get(Hkl.UnitEnum.USER) values = [1.] * len(values) engine.parameters_values_set(values, Hkl.UnitEnum.USER) [self.assertTrue(ref == v) for ref, v in zip(values, engine.parameters_values_get(Hkl.UnitEnum.USER))] axes_r = engine.axis_names_get(Hkl.EngineAxisNamesGet.READ) self.assertTrue(type(axes_r) is list) [self.assertTrue(type(_) is str) for _ in axes_r] axes_w = engine.axis_names_get(Hkl.EngineAxisNamesGet.WRITE) self.assertTrue(type(axes_w) is list) [self.assertTrue(type(_) is str) for _ in axes_w] # check all the capabilities for engine in engines.engines_get(): capabilities = engine.capabilities_get() self.assertTrue(capabilities & Hkl.EngineCapabilities.READABLE) if engine.name_get() not in ["incidence", "emergence"]: self.assertTrue(capabilities & Hkl.EngineCapabilities.WRITABLE) if engine.name_get() == "psi": self.assertTrue(capabilities & Hkl.EngineCapabilities.INITIALIZABLE) # check initialized_get/set for engine in engines.engines_get(): initialized = engine.initialized_get() capabilities = engine.capabilities_get() if capabilities & Hkl.EngineCapabilities.INITIALIZABLE: engine.initialized_set(False) self.assertTrue(False == engine.initialized_get()) engine.initialized_set(True) self.assertTrue(True == engine.initialized_get()) # check all the dependencies for engine in engines.engines_get(): dependencies = engine.dependencies_get() self.assertTrue(dependencies & Hkl.EngineDependencies.AXES) @unittest.skip("for testing figures") def test_doc_example(self): # execfile("../../Documentation/sphinx/source/bindings/python.py") execfile( "../../Documentation/sphinx/source/pyplots/trajectory_simple.py") execfile( "../../Documentation/sphinx/source/pyplots/trajectory_full.py") self.assertTrue(False) def test_lattice_api(self): lattice = Hkl.Lattice.new(1.54, 1.54, 1.54, math.radians(90.), math.radians(90.), math.radians(90.)) lattice2 = lattice.copy() # check all the accessors a = lattice.a_get() b = lattice.b_get() c = lattice.c_get() alpha = lattice.alpha_get() beta = lattice.beta_get() gamma = lattice.gamma_get() lattice.a_set(a) lattice.b_set(b) lattice.c_set(c) lattice.alpha_set(alpha) lattice.beta_set(beta) lattice.gamma_set(gamma) # change the lattice parameter by expanding the tuple from # the get method. the lattice should not change. a, b, c, alpha, beta, gamma = lattice.get(Hkl.UnitEnum.DEFAULT) lattice.set(a, b, c, alpha, beta, gamma, Hkl.UnitEnum.DEFAULT) # now change the lattice parameter lattice.set(1, 2, 3, 90, 90, 90, Hkl.UnitEnum.USER) # this new lattice is different from the one in the sample self.assertTrue(lattice.get(Hkl.UnitEnum.DEFAULT) != lattice2.get(Hkl.UnitEnum.DEFAULT)) del lattice2 del lattice def test_sample_api(self): """ enforce the HklSample API """ # create a sample sample = Hkl.Sample.new("toto") self.assertTrue(sample.name_get() == "toto") # check that the copy constructor is working copy = sample.copy() self.assertTrue(copy.name_get() == sample.name_get()) # we can change the name of the copy without affecting the original copy.name_set("titi") self.assertTrue(copy.name_get() != sample.name_get()) # set the lattice parameters lattice = Hkl.Lattice.new(1.54, 1.54, 1.54, math.radians(90.), math.radians(90.), math.radians(90.)) sample.lattice_set(lattice) # change the lattice parameter by expanding the tuple from # the get method. the lattice should not change. a, b, c, alpha, beta, gamma = lattice.get(Hkl.UnitEnum.DEFAULT) lattice.set(a, b, c, alpha, beta, gamma, Hkl.UnitEnum.DEFAULT) # this new lattice is identical to the one from the sample v = lattice.get(Hkl.UnitEnum.DEFAULT) self.assertTrue(v == sample.lattice_get().get(Hkl.UnitEnum.DEFAULT)) # now change the lattice parameter lattice.set(1, 2, 3, 90, 90, 90, Hkl.UnitEnum.USER) # this new lattice is different from the one in the sample v = lattice.get(Hkl.UnitEnum.DEFAULT) self.assertTrue(v != sample.lattice_get().get(Hkl.UnitEnum.DEFAULT)) # gives access to the ux, uy, uz part ux = sample.ux_get() uy = sample.uy_get() uz = sample.uz_get() sample.ux_set(ux) sample.uy_set(uy) sample.uz_set(uz) # read and write the U matrix U = sample.U_get() UB = sample.UB_get() sample.UB_set(UB) # get the reciprocal lattice reciprocal = lattice.copy() lattice.reciprocal(reciprocal) # get the lattice volume lattice.volume_get() del sample del lattice def test_reflection_api(self): detector = Hkl.Detector.factory_new(Hkl.DetectorType(0)) factory = Hkl.factories()['K6C'] geometry = factory.create_new_geometry() values_w = [0., 30., 0., 0., 0., 60.] geometry.axis_values_set(values_w, Hkl.UnitEnum.USER) sample = Hkl.Sample.new("toto") # add reflection r1 = sample.add_reflection(geometry, detector, 1, 1, 1) r2 = sample.add_reflection(geometry, detector, 1, 1, 1) # get the hkl part self.assertTrue(r2.hkl_get() == (1.0, 1.0, 1.0)) r2.hkl_set(1, 0, 1) self.assertTrue(r2.hkl_get() == (1.0, 0.0, 1.0)) # get the flag part flag = r1.flag_get() r1.flag_set(flag) # get the geometry part g = r1.geometry_get() r1.geometry_set(g) # compute the angles sample.get_reflection_measured_angle(r1, r2) sample.get_reflection_theoretical_angle(r1, r2) # remove all the reflections reflections = sample.reflections_get() for reflection in reflections: sample.del_reflection(reflection) del reflections del sample if __name__ == '__main__': unittest.main(verbosity=2) hkl-5.0.0.2449/tests/bindings/Makefile.in0000644000175000017500000006770313237017635020143 0ustar00piccapicca00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = tests/bindings ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/config/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASY = @ASY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BULLET_CFLAGS = @BULLET_CFLAGS@ BULLET_LIBS = @BULLET_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMACS = @EMACS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ G3D_CFLAGS = @G3D_CFLAGS@ G3D_LIBS = @G3D_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GNUPLOT = @GNUPLOT@ GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ GOBJECT_LIBS = @GOBJECT_LIBS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTKGLEXT_CFLAGS = @GTKGLEXT_CFLAGS@ GTKGLEXT_LIBS = @GTKGLEXT_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HDF5_CFLAGS = @HDF5_CFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VMAJ = @VMAJ@ YAML_CFLAGS = @YAML_CFLAGS@ YAML_LIBS = @YAML_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ release_info = @release_info@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ version_info = @version_info@ TESTS_ENVIRONMENT = env GI_TYPELIB_PATH=$(top_builddir)/hkl DATADIR=$(srcdir) $(LIBTOOL) --mode=execute -dlopen $(top_builddir)/hkl/libhkl.la TESTS = python.py trajectory.py polarisation.py EXTRA_DIST = $(TESTS) crystal.ini CLEANFILES = trajectories.pdf all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/bindings/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/bindings/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? python.py.log: python.py @p='python.py'; \ b='python.py'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) trajectory.py.log: trajectory.py @p='trajectory.py'; \ b='trajectory.py'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) polarisation.py.log: polarisation.py @p='polarisation.py'; \ b='polarisation.py'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ clean-libtool cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \ uninstall uninstall-am .PRECIOUS: Makefile ipython: env GI_TYPELIB_PATH=$(top_builddir)/hkl $(LIBTOOL) --mode=execute -dlopen $(top_builddir)/hkl/libhkl.la ipython -i -c "from gi.repository import Hkl" gdb: env GI_TYPELIB_PATH=$(top_builddir)/hkl $(LIBTOOL) --mode=execute -dlopen $(top_builddir)/hkl/libhkl.la gdb python # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: hkl-5.0.0.2449/tests/bindings/crystal.ini0000644000175000017500000000110512774775077020260 0ustar00piccapicca00000000000000Created at 2016-06-02 14:12 Crystal EuPtIn4_eh1_ver Wavelength 1.62751693358 A 4.542 B 16.955 C 7.389 Alpha 90.0 Beta 90.0 Gamma 90.0 R0 0 0.0 8.0 0.0 0 1 0.0 22.31594 89.1377 0.0 0.0 45.15857 R1 1 0.0 12.0 1.0 0 1 0.0 34.96232 78.3139 0.0 0.0 71.8007 Engine hkl Mode constant_phi_vertical PsiRef not available in current engine mode AutoEnergyUpdate 1 U00 1.381 U01 -0.002 U02 -0.054 U10 0.005 U11 0.371 U12 -0.013 U20 0.087 U21 0.006 U22 0.849 Ux 0.878929693221 Uy -3.6132870009 Uz 0.263869539307 SaveDirectory /home/p09user/crystals/ hkl-5.0.0.2449/tests/hkl-bench-t.c0000644000175000017500000001342213236600666016527 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include #include #include #include "hkl.h" static void hkl_test_bench_run_real(HklEngine *engine, HklGeometry *geometry, double values[], size_t n_values, size_t n) { size_t i; const darray_string *modes = hkl_engine_modes_names_get(engine); const char **mode; /* pseudo -> geometry */ darray_foreach(mode, *modes){ double min, max, mean; const darray_string *parameters; size_t n_params; if (FALSE == hkl_engine_current_mode_set(engine, *mode, NULL)) continue; parameters = hkl_engine_parameters_names_get(engine); n_params = darray_size(*parameters); if (n_params){ double params[n_params]; hkl_engine_parameters_values_get(engine, params, n_params, HKL_UNIT_DEFAULT); values[0] = 1; if(FALSE == hkl_engine_parameters_values_set(engine, params, n_params, HKL_UNIT_DEFAULT, NULL)) continue; } mean = max = 0; min = 1000; /* arbitrary value always greater than the real min */ for(i=0; i max ? t : max; mean += t; } fprintf(stdout, "\"%s\" \"%s\" \"%s\" (%d/%d) iterations %f / %f / %f [min/mean/max] ms each\n", hkl_geometry_name_get(geometry), hkl_engine_name_get(engine), *mode, n, i, min, mean/n, max); } } static void hkl_test_bench_run_v(HklEngineList *engines, HklGeometry *geometry, char const *name, unsigned int n, ...) { va_list ap; size_t i; HklEngine *engine = hkl_engine_list_engine_get_by_name(engines, name, NULL); size_t n_values = darray_size(*hkl_engine_pseudo_axis_names_get(engine)); double values[n_values]; va_start(ap, n); for(i=0; i 1) n = atoi(argv[1]); else n = 10; hkl_test_bench_k6c(n); hkl_test_bench_eulerians(); ok(TRUE == TRUE, __func__); return 0; } hkl-5.0.0.2449/tests/hkl-parameter-t.c0000644000175000017500000001334713236600666017436 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl.h" #include #include #include "hkl-parameter-private.h" static void new(void) { HklParameter *p; ok(NULL == hkl_parameter_new("", "", 2, 1, 3, FALSE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg), __func__); ok(NULL == hkl_parameter_new("", "", 2, 1, 3, FALSE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg), __func__); ok(NULL == hkl_parameter_new("", "", 2, 1, 3, FALSE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg), __func__); ok(NULL == hkl_parameter_new("toto", "", 2, 1, 3, FALSE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg), __func__); ok(NULL == hkl_parameter_new("toto", "", 1, 2, 3, FALSE, TRUE, &hkl_unit_angle_rad, &hkl_unit_length_nm), __func__); p = hkl_parameter_new("toto", "no description", 1, 2, 3, FALSE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg); ok(0 == !p, __func__); is_double(1., p->range.min, HKL_EPSILON, __func__); is_double(2., p->_value, HKL_EPSILON, __func__); is_double(3., p->range.max, HKL_EPSILON, __func__); ok(FALSE == p->fit, __func__); ok(TRUE == p->changed, __func__); ok(&hkl_unit_angle_rad == p->unit, __func__); ok(&hkl_unit_angle_deg == p->punit, __func__); hkl_parameter_free(p); } static void new_copy(void) { HklParameter *copy, *p; p = hkl_parameter_new("toto", "no description", 1, 2, 3, FALSE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg); copy = hkl_parameter_new_copy(p); ok(copy->name == p->name, __func__); ok(copy->description == p->description, __func__); is_double(copy->range.min, p->range.min, HKL_EPSILON, __func__); is_double(copy->_value, p->_value, HKL_EPSILON, __func__); is_double(copy->range.max, p->range.max, HKL_EPSILON, __func__); ok(copy->fit == p->fit, __func__); ok(copy->changed == p->changed, __func__); ok(&hkl_unit_angle_rad == copy->unit, __func__); ok(&hkl_unit_angle_deg == copy->punit, __func__); hkl_parameter_free(copy); hkl_parameter_free(p); } static void init(void) { HklParameter *p; ok(NULL == hkl_parameter_new("", "no description", 2, 1, 3, FALSE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg), __func__); ok(NULL == hkl_parameter_new("", "no description", 2, 1, 3, FALSE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg), __func__); ok(NULL == hkl_parameter_new("", "no description", 2, 1, 3, FALSE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg), __func__); ok(NULL == hkl_parameter_new("toto", "no description", 2, 1, 3, FALSE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg), __func__); ok(NULL == hkl_parameter_new("toto", "no description", 1, 2, 3, FALSE, TRUE, &hkl_unit_angle_rad, &hkl_unit_length_nm), __func__); p = hkl_parameter_new("toto", "no description", 1, 2, 3, FALSE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg); ok(NULL != p, __func__); hkl_parameter_free(p); } static void is_valid(void) { HklParameter *p; GError *error; p = hkl_parameter_new("toto", "no description", 1, 2, 3, FALSE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg); ok(TRUE == hkl_parameter_is_valid(p), __func__); error= NULL; ok(TRUE == hkl_parameter_value_set(p, 10, HKL_UNIT_DEFAULT, &error), __func__); ok(error == NULL, __func__); ok(FALSE == hkl_parameter_is_valid(p), __func__); hkl_parameter_free(p); } static void min_max(void) { HklParameter *p; double min, max; GError *error; p = hkl_parameter_new("toto", "no description", 1, 2, 3, FALSE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg); hkl_parameter_min_max_get(p, &min, &max, HKL_UNIT_DEFAULT); is_double(1, min, HKL_EPSILON, __func__); is_double(3, max, HKL_EPSILON, __func__); ok(TRUE == hkl_parameter_min_max_set(p, 1.1, 4, HKL_UNIT_DEFAULT, NULL), __func__); hkl_parameter_min_max_get(p, &min, &max, HKL_UNIT_DEFAULT); is_double(1.1, min, HKL_EPSILON, __func__); is_double(4, max, HKL_EPSILON, __func__); error = NULL; ok(FALSE == hkl_parameter_min_max_set(p, 4, 1, HKL_UNIT_DEFAULT, &error), __func__); ok(error != NULL, __func__); g_clear_error(&error); /* nothing should have changed */ hkl_parameter_min_max_get(p, &min, &max, HKL_UNIT_DEFAULT); is_double(1.1, min, HKL_EPSILON, __func__); is_double(4, max, HKL_EPSILON, __func__); hkl_parameter_free(p); } static void getter(void) { HklParameter *p; p = hkl_parameter_new("toto", "no description", 1, 2, 3, FALSE, TRUE, &hkl_unit_angle_rad, &hkl_unit_angle_deg); ok(NULL == hkl_parameter_axis_v_get(p), __func__); ok(NULL == hkl_parameter_quaternion_get(p), __func__); ok(NULL != hkl_parameter_description_get(p), __func__); hkl_parameter_free(p); } int main(void) { plan(44); new(); new_copy(); init(); is_valid(); min_max(); getter(); return 0; } hkl-5.0.0.2449/tests/hkl-geometry-t.c0000644000175000017500000004153713236600666017313 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl.h" #include #include #include /* BEWARE THESE TESTS ARE DEALING WITH HKL INTERNALS WHICH EXPOSE A * NON PUBLIC API WHICH ALLOW TO SHOOT YOURSELF IN YOUR FOOT */ #include "hkl/ccan/container_of/container_of.h" #include "hkl-axis-private.h" /* temporary */ #include "hkl-geometry-private.h" static void add_holder(void) { HklGeometry *g = NULL; HklHolder *holder = NULL; g = hkl_geometry_new(NULL, &hkl_geometry_operations_defaults); is_int(0, darray_size(g->holders), __func__); holder = hkl_geometry_add_holder(g); hkl_holder_add_rotation(holder, "A", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_rotation(holder, "B", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_translation(holder, "T", 1., 0., 0., &hkl_unit_angle_deg); is_int(1, darray_size(g->holders), __func__); holder = hkl_geometry_add_holder(g); hkl_holder_add_rotation(holder, "A", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_rotation(holder, "C", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_translation(holder, "T", 1., 0., 0., &hkl_unit_angle_deg); is_int(2, darray_size(g->holders), __func__); ok(holder == darray_item(g->holders, 1), __func__); hkl_geometry_free(g); } static void get_axis(void) { int res = TRUE; HklGeometry *g = NULL; HklHolder *holder = NULL; const HklParameter *axis0; GError *error; g = hkl_geometry_new(NULL, &hkl_geometry_operations_defaults); holder = hkl_geometry_add_holder(g); hkl_holder_add_rotation(holder, "A", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_rotation(holder, "B", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_translation(holder, "T", 1., 0., 0., &hkl_unit_length_mm); holder = hkl_geometry_add_holder(g); hkl_holder_add_rotation(holder, "A", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_rotation(holder, "C", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_translation(holder, "T", 1., 0., 0., &hkl_unit_length_mm); /* check the private API */ res &= DIAG(0 == !hkl_geometry_get_axis_by_name(g, "A")); res &= DIAG(0 == !hkl_geometry_get_axis_by_name(g, "B")); res &= DIAG(0 == !hkl_geometry_get_axis_by_name(g, "C")); res &= DIAG(0 == !hkl_geometry_get_axis_by_name(g, "T")); res &= DIAG(1 == !hkl_geometry_get_axis_by_name(g, "DONOTEXIST")); /* check the public API */ /* get */ res &= DIAG(NULL != hkl_geometry_axis_get(g, "A", NULL)); res &= DIAG(NULL == hkl_geometry_axis_get(g, "DONOTEXIST", NULL)); error = NULL; res &= DIAG(NULL != hkl_geometry_axis_get(g, "A", &error)); res &= DIAG(error == NULL); res &= DIAG(NULL != hkl_geometry_axis_get(g, "T", &error)); res &= DIAG(error == NULL); res &= DIAG(NULL == hkl_geometry_axis_get(g, "DONOTEXIST", &error)); res &= DIAG(error != NULL); g_clear_error(&error); /* set */ axis0 = hkl_geometry_axis_get(g, "A", NULL); res &= DIAG(TRUE == hkl_geometry_axis_set(g, "A", axis0, NULL)); res &= DIAG(FALSE == hkl_geometry_axis_set(g, "B", axis0, NULL)); res &= DIAG(FALSE == hkl_geometry_axis_set(g, "T", axis0, NULL)); error = NULL; res &= DIAG(hkl_geometry_axis_set(g, "A", axis0, &error)); res &= DIAG(error == NULL); res &= DIAG(FALSE == hkl_geometry_axis_set(g, "B", axis0, &error)); res &= DIAG(error != NULL); g_clear_error(&error); res &= DIAG(FALSE == hkl_geometry_axis_set(g, "T", axis0, &error)); res &= DIAG(error != NULL); g_clear_error(&error); ok(res, __func__); hkl_geometry_free(g); } static void update(void) { int res = TRUE; HklGeometry *g = NULL; HklHolder *holder = NULL; HklAxis *axis1; HklQuaternion q_ref = {{1./sqrt(2), 1./sqrt(2), 0.0, 0.0 }}; g = hkl_geometry_new(NULL, &hkl_geometry_operations_defaults); holder = hkl_geometry_add_holder(g); hkl_holder_add_rotation(holder, "A", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_rotation(holder, "B", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_translation(holder, "T1", 1., 0., 0., &hkl_unit_length_mm); holder = hkl_geometry_add_holder(g); hkl_holder_add_rotation(holder, "A", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_rotation(holder, "C", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_translation(holder, "T2", 1., 0., 0., &hkl_unit_length_mm); axis1 = container_of(hkl_geometry_get_axis_by_name(g, "B"), HklAxis, parameter); res &= DIAG(hkl_parameter_value_set(&axis1->parameter, M_PI_2, HKL_UNIT_DEFAULT, NULL)); /* now axis1 is dirty */ ok(TRUE == axis1->parameter.changed, __func__); hkl_geometry_update(g); holder = darray_item(g->holders, 0); is_quaternion(&q_ref, &holder->q, __func__); /* now axis1 is clean */ res &= DIAG(FALSE == axis1->parameter.changed); ok(res, __func__); hkl_geometry_free(g); } static void set(void) { HklGeometry *g; HklGeometry *g1; HklGeometry *g2; HklHolder *holder; HklFactory *fake_factory; g = hkl_geometry_new(NULL, &hkl_geometry_operations_defaults); holder = hkl_geometry_add_holder(g); hkl_holder_add_rotation(holder, "A", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_rotation(holder, "B", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_rotation(holder, "C", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_translation(holder, "T", 1., 0., 0., &hkl_unit_length_mm); g1 = hkl_geometry_new_copy(g); /* it is required to use a fake factory, with the public API * geometry contain always a real factory */ fake_factory = (HklFactory *)0x1; g2 = hkl_geometry_new(fake_factory, &hkl_geometry_operations_defaults); holder = hkl_geometry_add_holder(g); hkl_holder_add_rotation(holder, "A", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_rotation(holder, "B", 1., 0., 0., &hkl_unit_angle_deg); ok(hkl_geometry_set(g, g1), __func__); hkl_geometry_free(g2); hkl_geometry_free(g1); hkl_geometry_free(g); } static void axis_values_get_set(void) { unsigned int i; HklGeometry *g; HklHolder *holder; static double set_1[] = {1, 1, 1, 1}; static double set_10[] = {10, 10, 10, 10}; double values[4]; GError *error; g = hkl_geometry_new(NULL, &hkl_geometry_operations_defaults); holder = hkl_geometry_add_holder(g); hkl_holder_add_rotation(holder, "A", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_rotation(holder, "B", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_rotation(holder, "C", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_translation(holder, "T", 1., 0., 0., &hkl_unit_length_mm); /* check set DEFAULT unit */ error = NULL; ok(TRUE == hkl_geometry_axis_values_set(g, set_1, ARRAY_SIZE(set_1), HKL_UNIT_DEFAULT, NULL), __func__); ok(TRUE == hkl_geometry_axis_values_set(g, set_1, ARRAY_SIZE(set_1), HKL_UNIT_DEFAULT, &error), __func__); ok(error == NULL, __func__); for(i=0; iaxes, i), HKL_UNIT_DEFAULT), HKL_EPSILON, __func__); /* check get DEFAULT unit */ hkl_geometry_axis_values_get(g, values, ARRAY_SIZE(values), HKL_UNIT_DEFAULT); for(i=0; iaxes, 0), -100 * HKL_DEGTORAD, 100 * HKL_DEGTORAD, HKL_UNIT_DEFAULT, NULL)); res &= DIAG(FALSE == hkl_geometry_is_valid(geom)); ok(res, __func__); hkl_geometry_free(geom); } static void wavelength(void) { HklGeometry *geom = NULL; GError *error; geom = hkl_geometry_new(NULL, &hkl_geometry_operations_defaults); is_double(1.54, hkl_geometry_wavelength_get(geom, HKL_UNIT_DEFAULT), HKL_EPSILON, __func__); ok(TRUE == hkl_geometry_wavelength_set(geom, 2, HKL_UNIT_DEFAULT, NULL), __func__); is_double(2, hkl_geometry_wavelength_get(geom, HKL_UNIT_DEFAULT), HKL_EPSILON, __func__); error = NULL; ok(TRUE == hkl_geometry_wavelength_set(geom, 2, HKL_UNIT_DEFAULT, &error), __func__); ok(error == NULL, __func__); is_double(2, hkl_geometry_wavelength_get(geom, HKL_UNIT_DEFAULT), HKL_EPSILON, __func__); hkl_geometry_free(geom); } static void xxx_rotation_get(void) { int res = TRUE; size_t i, n; HklFactory **factories; HklDetector *detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); HklSample *sample = hkl_sample_new("test"); factories = hkl_factory_get_all(&n); for(i=0; igeometry->axes, 0), HKL_UNIT_DEFAULT), HKL_EPSILON, __func__); } ok(res, __func__); hkl_geometry_free(g); hkl_geometry_list_free(list); } static void list_multiply_from_range(void) { int res = TRUE; HklGeometry *g; HklGeometryList *list; HklHolder *holder; HklParameter *axisA, *axisB, *axisC, *axisT; g = hkl_geometry_new(NULL, &hkl_geometry_operations_defaults); holder = hkl_geometry_add_holder(g); hkl_holder_add_rotation(holder, "A", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_rotation(holder, "B", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_rotation(holder, "C", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_translation(holder, "T", 1., 0., 0., &hkl_unit_length_mm); axisA = hkl_geometry_get_axis_by_name(g, "A"); axisB = hkl_geometry_get_axis_by_name(g, "B"); axisC = hkl_geometry_get_axis_by_name(g, "C"); axisT = hkl_geometry_get_axis_by_name(g, "T"); res &= DIAG(hkl_parameter_min_max_set(axisA, -190, 190, HKL_UNIT_USER, NULL)); res &= DIAG(hkl_parameter_min_max_set(axisB, -190, 190, HKL_UNIT_USER, NULL)); res &= DIAG(hkl_parameter_min_max_set(axisC, -190, 190, HKL_UNIT_USER, NULL)); res &= DIAG(hkl_parameter_min_max_set(axisT, -190, 190., HKL_UNIT_USER, NULL)); list = hkl_geometry_list_new(); res &= DIAG(hkl_geometry_set_values_v(g, HKL_UNIT_DEFAULT, NULL, 185. * HKL_DEGTORAD, -185. * HKL_DEGTORAD, 190. * HKL_DEGTORAD, 100.)); hkl_geometry_list_add(list, g); hkl_geometry_list_multiply_from_range(list); res &= DIAG(8 == hkl_geometry_list_n_items_get(list)); ok(res, __func__); hkl_geometry_free(g); hkl_geometry_list_free(list); } static void list_remove_invalid(void) { int res = TRUE; HklGeometry *g; HklGeometryList *list; HklHolder *holder; HklParameter *axisA, *axisB, *axisC, *axisT; g = hkl_geometry_new(NULL, &hkl_geometry_operations_defaults); holder = hkl_geometry_add_holder(g); hkl_holder_add_rotation(holder, "A", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_rotation(holder, "B", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_rotation(holder, "C", 1., 0., 0., &hkl_unit_angle_deg); hkl_holder_add_translation(holder, "T", 1., 0., 0., &hkl_unit_length_mm); axisA = hkl_geometry_get_axis_by_name(g, "A"); axisB = hkl_geometry_get_axis_by_name(g, "B"); axisC = hkl_geometry_get_axis_by_name(g, "C"); axisT = hkl_geometry_get_axis_by_name(g, "T"); res &= DIAG(hkl_parameter_min_max_set(axisA, -100, 180., HKL_UNIT_USER, NULL)); res &= DIAG(hkl_parameter_min_max_set(axisB, -100., 180., HKL_UNIT_USER, NULL)); res &= DIAG(hkl_parameter_min_max_set(axisC, -100., 180., HKL_UNIT_USER, NULL)); res &= DIAG(hkl_parameter_min_max_set(axisT, 0.0, 179., HKL_UNIT_USER, NULL)); list = hkl_geometry_list_new(); res &= DIAG(hkl_geometry_set_values_v(g, HKL_UNIT_DEFAULT, NULL, 185. * HKL_DEGTORAD, -185. * HKL_DEGTORAD, 185. * HKL_DEGTORAD, 0.1)); hkl_geometry_list_add(list, g); res &= DIAG(hkl_geometry_set_values_v(g, HKL_UNIT_DEFAULT, NULL, -190. * HKL_DEGTORAD, -190. * HKL_DEGTORAD, -190. * HKL_DEGTORAD, 0.1)); hkl_geometry_list_add(list, g); res &= DIAG(hkl_geometry_set_values_v(g, HKL_UNIT_DEFAULT, NULL, 180. * HKL_DEGTORAD, 180. * HKL_DEGTORAD, 180. * HKL_DEGTORAD, 0.1)); hkl_geometry_list_add(list, g); is_int(3, hkl_geometry_list_n_items_get(list), __func__); hkl_geometry_list_remove_invalid(list); is_int(1, hkl_geometry_list_n_items_get(list), __func__); ok(res, __func__); hkl_geometry_free(g); hkl_geometry_list_free(list); } int main(void) { plan(48); add_holder(); get_axis(); update(); set(); axis_values_get_set(); distance(); is_valid(); wavelength(); xxx_rotation_get(); list(); list_multiply_from_range(); list_remove_invalid(); return 0; } hkl-5.0.0.2449/tests/hkl-quaternion-t.c0000644000175000017500000001046213236600666017636 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl.h" #include #include #include #include "hkl-vector-private.h" #include "hkl-quaternion-private.h" static void assignment(void) { HklQuaternion q = {{1, 0, 0, 0}}; HklQuaternion copy = q; is_double(1., copy.data[0], HKL_EPSILON, __func__); is_double(0., copy.data[1], HKL_EPSILON, __func__); is_double(0., copy.data[2], HKL_EPSILON, __func__); is_double(0., copy.data[3], HKL_EPSILON, __func__); } static void cmp(void) { HklQuaternion q_ref = {{1., 2., 3., 4.}}; HklQuaternion q = {{1., 2., 3., 4.}}; HklQuaternion q1 = {{1., 1., 3., 4.}}; ok(TRUE == hkl_quaternion_cmp(&q_ref, &q), __func__); ok(FALSE == hkl_quaternion_cmp(&q_ref, &q1), __func__); /* test the assignation */ q1 = q_ref; ok(TRUE == hkl_quaternion_cmp(&q_ref, &q1), __func__); } static void init_from_vector(void) { HklQuaternion q_ref = {{0, 1, -1, .5}}; HklVector v = {{1., -1., .5}}; HklQuaternion q; hkl_quaternion_init_from_vector(&q, &v); ok(TRUE == hkl_quaternion_cmp(&q_ref, &q), __func__); } static void init_from_angle_and_axe(void) { HklQuaternion q_ref1 = {{1, 0, 0, 0}}; HklQuaternion q_ref2 = {{sqrt(2.)/2., sqrt(2./9.), -sqrt(2./9.), sqrt(1./18.)}}; HklVector v_ref2 = {{1., -1., .5}}; HklQuaternion q; hkl_quaternion_init_from_angle_and_axe(&q, 0, &v_ref2); ok(TRUE == hkl_quaternion_cmp(&q_ref1, &q), __func__); hkl_quaternion_init_from_angle_and_axe(&q, 90. * HKL_DEGTORAD, &v_ref2); ok(TRUE == hkl_quaternion_cmp(&q_ref2, &q), __func__); } static void times_quaternion(void) { HklQuaternion q_ref = {{-28., 4., 6., 8.}}; HklQuaternion q = {{1., 2., 3., 4.}}; hkl_quaternion_times_quaternion(&q, &q); ok(TRUE == hkl_quaternion_cmp(&q_ref, &q), __func__); } static void norm2(void) { HklQuaternion q = {{1., 2., 3., 4.}}; is_double(sqrt(30.), hkl_quaternion_norm2(&q), HKL_EPSILON, __func__); } static void conjugate(void) { HklQuaternion q_ref = {{1., -2., -3., -4.}}; HklQuaternion q = {{1., 2., 3., 4.}}; hkl_quaternion_conjugate(&q); ok(TRUE == hkl_quaternion_cmp(&q_ref, &q), __func__); } static void to_matrix(void) { HklQuaternion q_ref = {{1./sqrt(2), 0, 0, 1./sqrt(2)}}; HklMatrix *m_ref = hkl_matrix_new_full(0,-1, 0, 1, 0, 0, 0, 0, 1); HklMatrix *m = hkl_matrix_new(); hkl_quaternion_to_matrix(&q_ref, m); is_matrix(m_ref, m, __func__); hkl_matrix_free(m_ref); hkl_matrix_free(m); } static void to_angle_and_axe(void) { HklVector v_ref = {{0 ,0, 1}}; HklVector v_null = {{0 ,0, 0}}; HklQuaternion q_I = {{1, 0, 0, 0}}; int i; double angle_ref; double angle; HklVector v; HklQuaternion q; /* test the q = (1, 0, 0, 0) solution axe == (0, 0, 0) and angle = 0. */ hkl_quaternion_to_angle_and_axe(&q_I, &angle, &v); ok(0 == hkl_vector_cmp(&v_null, &v), __func__); is_double(0., angle, HKL_EPSILON, __func__); /* test other cases */ for(i=-180; i<180; i++) { angle_ref = i * HKL_DEGTORAD; hkl_quaternion_init_from_angle_and_axe(&q, angle_ref, &v_ref); hkl_quaternion_to_angle_and_axe(&q, &angle, &v); if (!hkl_vector_cmp(&v_ref, &v)) is_double(angle_ref, angle, HKL_EPSILON, __func__); else if (hkl_vector_is_opposite(&v, &v_ref)) is_double(angle_ref, -angle, HKL_EPSILON, __func__); } } int main(void) { plan(375); assignment(); cmp(); init_from_vector(); init_from_angle_and_axe(); times_quaternion(); norm2(); conjugate(); to_matrix(); to_angle_and_axe(); return 0; } hkl-5.0.0.2449/tests/hkl-pseudoaxis-e4ch-t.c0000644000175000017500000002636613236600666020470 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel * Jens Krüger */ #include "hkl.h" #include #include #include "hkl/ccan/generator/generator.h" #include "hkl-geometry-private.h" #include "hkl-trajectory-private.h" static void getter(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; HklGeometry *geometry; HklDetector *detector; HklSample *sample; struct Geometry gconf = E4ch(1.54, 0., 0., 0., 0.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "hkl", NULL); /* geometry -> pseudo */ res &= DIAG(hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 0., 0., 60.)); res &= DIAG(check_pseudoaxes_v(engine, 0., 1., 0.)); res &= DIAG(hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 0., 90., 60.)); res &= DIAG(check_pseudoaxes_v(engine, 1., 0., 0.)); res &= DIAG(hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 0., -90., 60.)); res &= DIAG(check_pseudoaxes_v(engine, -1., 0., 0.)); res &= DIAG(hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 0., 180., 60.)); res &= DIAG(check_pseudoaxes_v(engine, 0., -1., 0.)); res &= DIAG(hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 45., 0., 135., 90.)); res &= DIAG(check_pseudoaxes_v(engine, 1., -1., 0.)); ok(res == TRUE, "getter"); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } static void degenerated(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; const char **mode; const darray_string *modes; HklGeometry *geometry; HklDetector *detector; HklSample *sample; struct Geometry gconf = E4ch(1.54, 0., 0., 0., 0.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "hkl", NULL); modes = hkl_engine_modes_names_get(engine); darray_foreach(mode, *modes){ static double values[] = {0, 0, 1}; const darray_string *parameters; HklGeometryList *geometries; size_t n_params; res &= DIAG(hkl_engine_current_mode_set(engine, *mode, NULL)); parameters = hkl_engine_parameters_names_get(engine); n_params = darray_size(*parameters); if (n_params){ double params[n_params]; hkl_engine_parameters_values_get(engine, params, n_params, HKL_UNIT_DEFAULT); values[0] = 0; res &= DIAG(hkl_engine_parameters_values_set(engine, params, n_params, HKL_UNIT_DEFAULT, NULL)); } /* studdy this degenerated case */ geometries = hkl_engine_pseudo_axis_values_set(engine, values, ARRAY_SIZE(values), HKL_UNIT_DEFAULT, NULL); if(geometries){ const HklGeometryListItem *item; HKL_GEOMETRY_LIST_FOREACH(item, geometries){ hkl_geometry_set(geometry, hkl_geometry_list_item_geometry_get(item)); res &= DIAG(check_pseudoaxes(engine, values, 3)); } hkl_geometry_list_free(geometries); } } ok(res == TRUE, "degenerated"); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } static void psi_getter(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; HklGeometry *geometry; HklDetector *detector; HklSample *sample; double hkl[3]; struct Geometry gconf = E4ch(1.54, 30., 0., 0., 60.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "psi", NULL); /* the getter part */ res &= DIAG(hkl_engine_initialized_set(engine, TRUE, NULL)); hkl[0] = 1, hkl[1] = 0, hkl[2] = 0; res &= DIAG(hkl_engine_parameters_values_set(engine, hkl, ARRAY_SIZE(hkl), HKL_UNIT_DEFAULT, NULL)); res &= DIAG(check_pseudoaxes_v(engine, 0.)); /* here Q and _ref are colinear must FAIL */ hkl[0] = 0, hkl[1] = 1, hkl[2] = 0; res &= DIAG(hkl_engine_parameters_values_set(engine, hkl, ARRAY_SIZE(hkl), HKL_UNIT_DEFAULT, NULL)); res &= DIAG(!check_pseudoaxes_v(engine, 0.)); hkl[0] = -1, hkl[1] = 0, hkl[2] = 0; res &= DIAG(hkl_engine_parameters_values_set(engine, hkl, ARRAY_SIZE(hkl), HKL_UNIT_DEFAULT, NULL)); res &= DIAG(check_pseudoaxes_v(engine, 180. * HKL_DEGTORAD)); hkl[0] = 0, hkl[1] = 0, hkl[2] = -1; res &= DIAG(hkl_engine_parameters_values_set(engine, hkl, ARRAY_SIZE(hkl), HKL_UNIT_DEFAULT, NULL)); res &= DIAG(check_pseudoaxes_v(engine, 90. * HKL_DEGTORAD)); /* Q and _ref are colinear so must FAIL */ hkl[0] = 0, hkl[1] = -1, hkl[2] = 0; res &= DIAG(hkl_engine_parameters_values_set(engine, hkl, ARRAY_SIZE(hkl), HKL_UNIT_DEFAULT, NULL)); res &= DIAG(!check_pseudoaxes_v(engine, 0.)); ok(res == TRUE, "psi getter"); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } static void psi_setter(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; const darray_string *modes; const char **mode; HklGeometry *geometry; HklDetector *detector; HklSample *sample; static double hkl[] = {1, 0, 0}; struct Geometry gconf = E4ch(1.54, 30., 0., 0., 60.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "psi", NULL); modes = hkl_engine_modes_names_get(engine); /* the init part */ res &= DIAG(hkl_engine_parameters_values_set(engine, hkl, ARRAY_SIZE(hkl), HKL_UNIT_DEFAULT, NULL)); res &= DIAG(hkl_engine_initialized_set(engine, TRUE, NULL)); darray_foreach(mode, *modes){ double psi; res &= DIAG(hkl_engine_current_mode_set(engine, *mode, NULL)); for(psi=-180 * HKL_DEGTORAD;psi<180 * HKL_DEGTORAD;psi += HKL_DEGTORAD){ HklGeometryList *geometries; geometries = hkl_engine_pseudo_axis_values_set(engine, &psi, 1, HKL_UNIT_DEFAULT, NULL); if(geometries){ const HklGeometryListItem *item; HKL_GEOMETRY_LIST_FOREACH(item, geometries){ hkl_geometry_set(geometry, hkl_geometry_list_item_geometry_get(item)); res &= DIAG(check_pseudoaxes_v(engine, psi)); } hkl_geometry_list_free(geometries); } } } ok(res == TRUE, "psi setter"); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } static void q(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; const darray_string *modes; const char **mode; HklGeometry *geometry; HklDetector *detector; HklSample *sample; struct Geometry gconf = E4ch(1.54, 30., 0., 0., 60.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "q", NULL); modes = hkl_engine_modes_names_get(engine); /* the init part */ res &= DIAG(hkl_engine_initialized_set(engine, TRUE, NULL)); darray_foreach(mode, *modes){ double q; res &= DIAG(hkl_engine_current_mode_set(engine, *mode, NULL)); for(q=-1.; q<1.; q += 0.1){ HklGeometryList *geometries; geometries = hkl_engine_pseudo_axis_values_set(engine, &q, 1, HKL_UNIT_DEFAULT, NULL); if(geometries){ const HklGeometryListItem *item; HKL_GEOMETRY_LIST_FOREACH(item, geometries){ hkl_geometry_set(geometry, hkl_geometry_list_item_geometry_get(item)); res &= DIAG(check_pseudoaxes(engine, &q, 1)); } hkl_geometry_list_free(geometries); } } } ok(res == TRUE, "q"); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } static void hkl_psi_constant_horizontal(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; HklGeometry *geometry; HklGeometryList *geometries; HklDetector *detector; HklSample *sample; static double hkl[] = {1, 0, 1}; static double hkl2[] = {1, 1, 0}; struct Geometry gconf = E4ch(1.54, 30., 0., 0., 60.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "hkl", NULL); res &= DIAG(hkl_engine_current_mode_set(engine, "psi_constant", NULL)); /* the init part */ res &= DIAG(hkl_engine_parameters_values_set(engine, hkl2, ARRAY_SIZE(hkl2), HKL_UNIT_DEFAULT, NULL)); res &= DIAG(hkl_engine_initialized_set(engine, TRUE, NULL)); geometries = hkl_engine_pseudo_axis_values_set(engine, hkl, ARRAY_SIZE(hkl), HKL_UNIT_DEFAULT, NULL); if(geometries){ const HklGeometryListItem *item; HKL_GEOMETRY_LIST_FOREACH(item, geometries){ hkl_geometry_set(geometry, hkl_geometry_list_item_geometry_get(item)); res &= DIAG(check_pseudoaxes(engine, hkl, ARRAY_SIZE(hkl))); } hkl_geometry_list_free(geometries); } ok(res == TRUE, "psi constant horizontal"); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } static void petra3_p01(void) { int res = TRUE; HklGeometryList *solutions; struct Sample sample = { .name = "Sample", .lattice = Tetragonal(5.4, 11.9), .ux = -90 * HKL_DEGTORAD, .uy = 9 * HKL_DEGTORAD, .uz = -45 * HKL_DEGTORAD, }; struct Geometry gconfig = E4ch(4.3687, 0., 0., 6., 0.); struct Mode mode = ModeHklE4CHConstantPhi; /* move between each step */ struct Trajectory tconfig1 = TrajectoryHklFromTo(0, 0, 4, 1, 1, 4, 30, mode); solutions = Trajectory_solve(tconfig1, gconfig, sample, TRUE); res &= DIAG(NULL != solutions); hkl_geometry_list_fprintf(stdout, solutions); hkl_geometry_list_free(solutions); ok(res == TRUE, __func__); } int main(void) { plan(7); getter(); degenerated(); psi_getter(); psi_setter(); q(); hkl_psi_constant_horizontal(); petra3_p01(); return 0; } hkl-5.0.0.2449/tests/hkl-interval-t.c0000644000175000017500000001574113236600666017302 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #define _GNU_SOURCE #include "hkl.h" #include #include #include "hkl-interval-private.h" static void cmp(void) { HklInterval interval_ref = {-1, 1}; HklInterval interval; interval = interval_ref; ok(FALSE == hkl_interval_cmp(&interval_ref, &interval), __func__); } static void plus_interval(void) { HklInterval i_ref = {-2, 8}; HklInterval i1 = {-1, 4}; HklInterval i2 = {-1, 4}; hkl_interval_plus_interval(&i1, &i2); ok(FALSE == hkl_interval_cmp(&i_ref, &i1), __func__); } static void plus_double(void) { HklInterval i_ref = {-1, 9}; HklInterval i1 = {-2, 8}; hkl_interval_plus_double(&i1, 1); ok(FALSE == hkl_interval_cmp(&i_ref, &i1), __func__); } static void times_interval(void) { HklInterval i_ref = {-9, 36}; HklInterval i1 = {-1, 9}; HklInterval i2 = {-1, 4}; hkl_interval_times_interval(&i1, &i2); ok(FALSE == hkl_interval_cmp(&i_ref, &i1), __func__); } static void times_double(void) { HklInterval i_ref = {-108, 27}; HklInterval i1 = {-9, 36}; hkl_interval_times_double(&i1, -3); ok(FALSE == hkl_interval_cmp(&i_ref, &i1), __func__); } static void divides_double(void) { HklInterval i_ref = {-9, 36}; HklInterval i1 = {-108, 27}; hkl_interval_divides_double(&i1, -3); ok(FALSE == hkl_interval_cmp(&i_ref, &i1), __func__); } static void contain_zero(void) { HklInterval i1 = {-9, 36}; HklInterval i2 = {-108, -27}; ok(TRUE == hkl_interval_contain_zero(&i1), __func__); ok(FALSE == hkl_interval_contain_zero(&i2), __func__); } static void cosinus(void) { /* we will test all 16 cases. */ /* we devide the trigonometric circle in 4 from quaters */ /* 0 [0, pi/2[ */ /* 1 [pi/2, pi[ */ /* 2 [pi, 3*pi/2[ */ /* 3 [3*pi/2, 2*pi[ */ HklInterval i_ref; HklInterval i; double min; double max; #define COS(a, b, min_ref, max_ref) do { \ i.min = min = a * HKL_DEGTORAD; \ i.max = max = b * HKL_DEGTORAD; \ i_ref.min = min_ref; \ i_ref.max = max_ref; \ hkl_interval_cos(&i); \ ok(FALSE == hkl_interval_cmp(&i_ref, &i), __func__); \ } while(0) /* 1st max(0) */ /* min(0) */ COS(10, 14, cos(max), cos(min)); /* min(3) */ COS(-15, 14,cos(min), 1); /* min(2) */ COS(-95, 14, cos(min), 1); /* min(1) */ COS(-215, 14, -1, 1); /* 2nd max(1) */ /* min(0) */ COS(10, 100, cos(max), cos(min)); /* min(3) */ COS(-20, 100, cos(max), 1); /* min(2) */ COS(-110, 100, cos(min), 1); COS(-95, 100, cos(max), 1); /* min(1) */ COS(-190, 100,-1, 1); /* 3rd max(2) */ /* min(0) */ COS(10, 190, -1, cos(min)); /* min(3) */ COS(95, 190, -1, cos(min)); COS(175, 190, -1, cos(max)); /* min(2) */ COS(185, 190, cos(min), cos(max)); COS(-95, 190, -1, 1); /* min(1) */ COS(-45, 190, -1, 1); /* 4th max(3) */ /* min(0) */ COS(-350, -30, -1, cos(min)); COS(-310, -30, -1, cos(max)); /* min(3) */ COS(-40, -30, cos(min), cos(max)); COS(-370, -30, -1, 1); /* min(2) */ COS(-100, -30, cos(min), cos(max)); /* min(1) */ COS(-190, -30, -1, cos(max)); } static void acosinus(void) { HklInterval i_ref = {acos(.5), acos(-.5)}; HklInterval i = {-.5, .5}; hkl_interval_acos(&i); ok(FALSE == hkl_interval_cmp(&i_ref, &i), __func__); } static void sinus(void) { /* we will test all 16 cases. */ /* we devide the trigonometric circle in 4 from quaters */ /* 0 [0, pi/2[ */ /* 1 [pi/2, pi[ */ /* 2 [pi, 3*pi/2[ */ /* 3 [3*pi/2, 2*pi[ */ HklInterval i_ref; HklInterval i; double min, max; #define SIN(a,b, min_ref, max_ref) do { \ i.min = min = a * HKL_DEGTORAD; \ i.max = max = b * HKL_DEGTORAD; \ i_ref.min = min_ref; \ i_ref.max = max_ref; \ hkl_interval_sin(&i); \ ok(FALSE == hkl_interval_cmp(&i_ref, &i), __func__); \ } while(0) /* 1st max(0) */ /* min(0) */ SIN(10, 14,sin(min), sin(max)); SIN(-275, 14, -1, 1); /* min(3) */ SIN(-15, 14, sin(min), sin(max)); /* min(2) */ SIN(-95, 14, -1, sin(max)); /* min(1) */ SIN(-185, 14, -1, sin(max)); SIN(-215, 14, -1, sin(min)); /* 2nd max(1) */ /* min(0) */ SIN(10, 100, sin(min), 1); SIN(85, 100, sin(max), 1); /* min(3) */ SIN(-20, 100, sin(min), 1); /* min(2) */ SIN(-110, 100, -1, 1); /* min(1) */ SIN(-190, 100, -1, 1); SIN(95, 100, sin(max), sin(min)); /* 3rd max(2) */ /* min(0) */ SIN(10, 190, sin(max), 1); /* min(3) */ SIN(95, 190, sin(max), sin(min)); /* min(2) */ SIN(-95, 190, -1, 1); SIN(185, 190, sin(max), sin(min)); /* min(1) */ SIN(-5, 190, sin(max), 1); SIN(-45, 190, sin(min), 1); /* 4th max(3) */ /* min(0); */ SIN(-350, -30, -1, 1); /* min(3); */ SIN(-40, -30, sin(min), sin(max)); SIN(-370, -30, -1, 1); /* min(2); */ SIN(-100, -30, -1, sin(max)); SIN(-170, -30, -1, sin(min)); /* min(1); */ SIN(-190, -30, -1, sin(min)); } static void asinus(void) { HklInterval i_ref = {asin(-.5), asin(.5)}; HklInterval i = {-.5, .5}; hkl_interval_asin(&i); ok(FALSE == hkl_interval_cmp(&i_ref, &i), __func__); } static void tangeante(void) { HklInterval i; HklInterval i_ref; double min, max; #define TAN(a,b, min_ref, max_ref) do { \ i.min = min = a * HKL_DEGTORAD; \ i.max = max = b * HKL_DEGTORAD; \ i_ref.min = min_ref; \ i_ref.max = max_ref; \ hkl_interval_tan(&i); \ ok(FALSE == hkl_interval_cmp(&i_ref, &i), __func__); \ } while(0) TAN(-100, -89, -INFINITY, INFINITY); /* // The limit case is not yet ok TAN(-100, 11, 12, -90); r_ref.set(-hklconstantmathinfinity, tan(current), tan(consign), hklconstantmathinfinity); ok(r_ref, r); */ } static void atangeante(void) { HklInterval i_ref = {atan(-10.), atan(10)}; HklInterval i = {-10, 10}; hkl_interval_atan(&i); ok(FALSE == hkl_interval_cmp(&i_ref, &i), __func__); } static void length(void) { HklInterval interval; interval.min = 10; interval.max = 11; is_double(1., hkl_interval_length(&interval), HKL_EPSILON, __func__); interval.min = -11; interval.max = -10; is_double(1., hkl_interval_length(&interval), HKL_EPSILON, __func__); } int main(void) { plan(59); cmp(); plus_interval(); plus_double(); times_interval(); times_double(); divides_double(); contain_zero(); cosinus(); acosinus(); sinus(); asinus(); tangeante(); atangeante(); length(); return 0; } hkl-5.0.0.2449/tests/hkl-pseudoaxis-k6c-t.c0000644000175000017500000001725213236600666020322 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl.h" #include #include static void degenerated(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; const darray_string *modes; const char **mode; HklGeometry *geometry; HklDetector *detector; HklSample *sample; static double hkl[] = {0, 1, 0}; struct Geometry gconf = K6c(1.54, 0., 0., 0., 0., 0., 0.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "hkl", NULL); modes = hkl_engine_modes_names_get(engine); darray_foreach(mode, *modes){ const darray_string *parameters; HklGeometryList *geometries; res &= DIAG(hkl_engine_current_mode_set(engine, *mode, NULL)); parameters = hkl_engine_parameters_names_get(engine); if (!strcasecmp(*mode, "constant_chi_vertical")){ size_t n_params = darray_size(*parameters); double params[n_params]; hkl_engine_parameters_values_get(engine, params, n_params, HKL_UNIT_DEFAULT); params[0] = 1; res &= DIAG(hkl_engine_parameters_values_set(engine, params, n_params, HKL_UNIT_DEFAULT, NULL)); } if (!strcasecmp(*mode, "constant_incidence")){ size_t n_params = darray_size(*parameters); double params[n_params]; hkl_engine_parameters_values_get(engine, params, n_params, HKL_UNIT_DEFAULT); params[3] = 1; res &= DIAG(hkl_engine_parameters_values_set(engine, params, n_params, HKL_UNIT_DEFAULT, NULL)); } /* studdy this degenerated case */ geometries = hkl_engine_pseudo_axis_values_set(engine, hkl, ARRAY_SIZE(hkl), HKL_UNIT_DEFAULT, NULL); if (geometries){ const HklGeometryListItem *item; HKL_GEOMETRY_LIST_FOREACH(item, geometries){ hkl_geometry_set(geometry, hkl_geometry_list_item_geometry_get(item)); res &= DIAG(check_pseudoaxes(engine, hkl, ARRAY_SIZE(hkl))); } hkl_geometry_list_free(geometries); } } ok(res == TRUE, "degenerated"); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } static void eulerians(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; const darray_string *modes; const char **mode; const HklGeometryListItem *item; HklGeometry *geometry; HklDetector *detector; HklSample *sample; struct Geometry gconf = K6c(1.54, 0., 0., 0., 0., 0., 0.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "eulerians", NULL); modes = hkl_engine_modes_names_get(engine); darray_foreach(mode, *modes){ const darray_string *parameters; HklGeometryList *geometries; size_t n_params; res &= DIAG(hkl_engine_current_mode_set(engine, *mode, NULL)); parameters = hkl_engine_parameters_names_get(engine); n_params = darray_size(*parameters); if (n_params){ double params[n_params]; hkl_engine_parameters_values_get(engine, params, n_params, HKL_UNIT_DEFAULT); params[0] = 1; res &= DIAG(hkl_engine_parameters_values_set(engine, params, n_params, HKL_UNIT_DEFAULT, NULL)); } /* studdy this degenerated case */ geometries = hkl_engine_set_values_v(engine, 0., 90. * HKL_DEGTORAD, 0.); if (geometries) { res &= DIAG(hkl_geometry_list_n_items_get(geometries) == 2); /* first solution = -180, -90, 180 */ item = hkl_geometry_list_items_first_get(geometries); hkl_geometry_set(geometry, hkl_geometry_list_item_geometry_get(item)); res &= DIAG(check_pseudoaxes_v(engine, -180. * HKL_DEGTORAD, -90. * HKL_DEGTORAD, 180. * HKL_DEGTORAD)); /* second solution = 0, 90, 0 */ item = hkl_geometry_list_items_next_get(geometries, item); hkl_geometry_set(geometry, hkl_geometry_list_item_geometry_get(item)); res &= DIAG(check_pseudoaxes_v(engine, 0., 90. * HKL_DEGTORAD, 0.)); /* no more solution */ res &= DIAG(hkl_geometry_list_items_next_get(geometries, item) == NULL); hkl_geometry_list_free(geometries); } } ok(res == TRUE, "eulerians"); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } static void q2(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; const darray_string *modes; const char **mode; HklGeometry *geometry; HklDetector *detector; HklSample *sample; struct Geometry gconf = K6c(1.54, 0., 30., 0., 0., 0., 60.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "q2", NULL); modes = hkl_engine_modes_names_get(engine); /* the init part */ res &= DIAG(hkl_engine_initialized_set(engine, TRUE, NULL)); darray_foreach(mode, *modes){ double q, alpha; res &= DIAG(hkl_engine_current_mode_set(engine, *mode, NULL)); for(q=0.1; q<1.; q += 0.1) for(alpha = -M_PI; alpha] [-s ] -l * runtests [-hv] [-b ] [-s ] [ ...] * runtests -o [-h] [-b ] [-s ] * * In the first case, expects a list of executables located in the given file, * one line per executable. For each one, runs it as part of a test suite, * reporting results. In the second case, use the same infrastructure, but * run only the tests listed on the command line. * * Test output should start with a line containing the number of tests * (numbered from 1 to this number), optionally preceded by "1..", although * that line may be given anywhere in the output. Each additional line should * be in the following format: * * ok * not ok * ok # skip * not ok # todo * * where is the number of the test. An optional comment is permitted * after the number if preceded by whitespace. ok indicates success, not ok * indicates failure. "# skip" and "# todo" are a special cases of a comment, * and must start with exactly that formatting. They indicate the test was * skipped for some reason (maybe because it doesn't apply to this platform) * or is testing something known to currently fail. The text following either * "# skip" or "# todo" and whitespace is the reason. * * As a special case, the first line of the output may be in the form: * * 1..0 # skip some reason * * which indicates that this entire test case should be skipped and gives a * reason. * * Any other lines are ignored, although for compliance with the TAP protocol * all lines other than the ones in the above format should be sent to * standard error rather than standard output and start with #. * * This is a subset of TAP as documented in Test::Harness::TAP or * TAP::Parser::Grammar, which comes with Perl. * * If the -o option is given, instead run a single test and display all of its * output. This is intended for use with failing tests so that the person * running the test suite can get more details about what failed. * * If built with the C preprocessor symbols SOURCE and BUILD defined, C TAP * Harness will export those values in the environment so that tests can find * the source and build directory and will look for tests under both * directories. These paths can also be set with the -b and -s command-line * options, which will override anything set at build time. * * If the -v option is given, or the C_TAP_VERBOSE environment variable is set, * display the full output of each test as it runs rather than showing a * summary of the results of each test. * * Any bug reports, bug fixes, and improvements are very much welcome and * should be sent to the e-mail address below. This program is part of C TAP * Harness . * * Copyright 2000, 2001, 2004, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, * 2014, 2015 Russ Allbery * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ /* Required for fdopen(), getopt(), and putenv(). */ #if defined(__STRICT_ANSI__) || defined(PEDANTIC) # ifndef _XOPEN_SOURCE # define _XOPEN_SOURCE 500 # endif #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* sys/time.h must be included before sys/resource.h on some platforms. */ #include /* AIX 6.1 (and possibly later) doesn't have WCOREDUMP. */ #ifndef WCOREDUMP # define WCOREDUMP(status) ((unsigned)(status) & 0x80) #endif /* * POSIX requires that these be defined in , but they're not always * available. If one of them has been defined, all the rest almost certainly * have. */ #ifndef STDIN_FILENO # define STDIN_FILENO 0 # define STDOUT_FILENO 1 # define STDERR_FILENO 2 #endif /* * Used for iterating through arrays. Returns the number of elements in the * array (useful for a < upper bound in a for loop). */ #define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0])) /* * The source and build versions of the tests directory. This is used to set * the SOURCE and BUILD environment variables and find test programs, if set. * Normally, this should be set as part of the build process to the test * subdirectories of $(abs_top_srcdir) and $(abs_top_builddir) respectively. */ #ifndef SOURCE # define SOURCE NULL #endif #ifndef BUILD # define BUILD NULL #endif /* Test status codes. */ enum test_status { TEST_FAIL, TEST_PASS, TEST_SKIP, TEST_INVALID }; /* Really, just a boolean, but this is more self-documenting. */ enum test_verbose { CONCISE = 0, VERBOSE = 1 }; /* Indicates the state of our plan. */ enum plan_status { PLAN_INIT, /* Nothing seen yet. */ PLAN_FIRST, /* Plan seen before any tests. */ PLAN_PENDING, /* Test seen and no plan yet. */ PLAN_FINAL /* Plan seen after some tests. */ }; /* Error exit statuses for test processes. */ #define CHILDERR_DUP 100 /* Couldn't redirect stderr or stdout. */ #define CHILDERR_EXEC 101 /* Couldn't exec child process. */ #define CHILDERR_STDIN 102 /* Couldn't open stdin file. */ #define CHILDERR_STDERR 103 /* Couldn't open stderr file. */ /* Structure to hold data for a set of tests. */ struct testset { char *file; /* The file name of the test. */ char *path; /* The path to the test program. */ enum plan_status plan; /* The status of our plan. */ unsigned long count; /* Expected count of tests. */ unsigned long current; /* The last seen test number. */ unsigned int length; /* The length of the last status message. */ unsigned long passed; /* Count of passing tests. */ unsigned long failed; /* Count of failing lists. */ unsigned long skipped; /* Count of skipped tests (passed). */ unsigned long allocated; /* The size of the results table. */ enum test_status *results; /* Table of results by test number. */ unsigned int aborted; /* Whether the set was aborted. */ int reported; /* Whether the results were reported. */ int status; /* The exit status of the test. */ unsigned int all_skipped; /* Whether all tests were skipped. */ char *reason; /* Why all tests were skipped. */ }; /* Structure to hold a linked list of test sets. */ struct testlist { struct testset *ts; struct testlist *next; }; /* * Usage message. Should be used as a printf format with four arguments: the * path to runtests, given three times, and the usage_description. This is * split into variables to satisfy the pedantic ISO C90 limit on strings. */ static const char usage_message[] = "\ Usage: %s [-hv] [-b ] [-s ] ...\n\ %s [-hv] [-b ] [-s ] -l \n\ %s -o [-h] [-b ] [-s ] \n\ \n\ Options:\n\ -b Set the build directory to \n\ %s"; static const char usage_extra[] = "\ -l Take the list of tests to run from \n\ -o Run a single test rather than a list of tests\n\ -s Set the source directory to \n\ -v Show the full output of each test\n\ \n\ runtests normally runs each test listed on the command line. With the -l\n\ option, it instead runs every test listed in a file. With the -o option,\n\ it instead runs a single test and shows its complete output.\n"; /* * Header used for test output. %s is replaced by the file name of the list * of tests. */ static const char banner[] = "\n\ Running all tests listed in %s. If any tests fail, run the failing\n\ test program with runtests -o to see more details.\n\n"; /* Header for reports of failed tests. */ static const char header[] = "\n\ Failed Set Fail/Total (%) Skip Stat Failing Tests\n\ -------------------------- -------------- ---- ---- ------------------------"; /* Include the file name and line number in malloc failures. */ #define xcalloc(n, size) x_calloc((n), (size), __FILE__, __LINE__) #define xmalloc(size) x_malloc((size), __FILE__, __LINE__) #define xstrdup(p) x_strdup((p), __FILE__, __LINE__) #define xreallocarray(p, n, size) \ x_reallocarray((p), (n), (size), __FILE__, __LINE__) /* * __attribute__ is available in gcc 2.5 and later, but only with gcc 2.7 * could you use the __format__ form of the attributes, which is what we use * (to avoid confusion with other macros). */ #ifndef __attribute__ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) # define __attribute__(spec) /* empty */ # endif #endif /* * We use __alloc_size__, but it was only available in fairly recent versions * of GCC. Suppress warnings about the unknown attribute if GCC is too old. * We know that we're GCC at this point, so we can use the GCC variadic macro * extension, which will still work with versions of GCC too old to have C99 * variadic macro support. */ #if !defined(__attribute__) && !defined(__alloc_size__) # if defined(__GNUC__) && !defined(__clang__) # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) # define __alloc_size__(spec, args...) /* empty */ # endif # endif #endif /* * LLVM and Clang pretend to be GCC but don't support all of the __attribute__ * settings that GCC does. For them, suppress warnings about unknown * attributes on declarations. This unfortunately will affect the entire * compilation context, but there's no push and pop available. */ #if !defined(__attribute__) && (defined(__llvm__) || defined(__clang__)) # pragma GCC diagnostic ignored "-Wattributes" #endif /* Declare internal functions that benefit from compiler attributes. */ static void sysdie(const char *, ...) __attribute__((__nonnull__, __noreturn__, __format__(printf, 1, 2))); static void *x_calloc(size_t, size_t, const char *, int) __attribute__((__alloc_size__(1, 2), __malloc__, __nonnull__)); static void *x_malloc(size_t, const char *, int) __attribute__((__alloc_size__(1), __malloc__, __nonnull__)); static void *x_reallocarray(void *, size_t, size_t, const char *, int) __attribute__((__alloc_size__(2, 3), __malloc__, __nonnull__(4))); static char *x_strdup(const char *, const char *, int) __attribute__((__malloc__, __nonnull__)); /* * Report a fatal error, including the results of strerror, and exit. */ static void sysdie(const char *format, ...) { int oerrno; va_list args; oerrno = errno; fflush(stdout); fprintf(stderr, "runtests: "); va_start(args, format); vfprintf(stderr, format, args); va_end(args); fprintf(stderr, ": %s\n", strerror(oerrno)); exit(1); } /* * Allocate zeroed memory, reporting a fatal error and exiting on failure. */ static void * x_calloc(size_t n, size_t size, const char *file, int line) { void *p; n = (n > 0) ? n : 1; size = (size > 0) ? size : 1; p = calloc(n, size); if (p == NULL) sysdie("failed to calloc %lu bytes at %s line %d", (unsigned long) size, file, line); return p; } /* * Allocate memory, reporting a fatal error and exiting on failure. */ static void * x_malloc(size_t size, const char *file, int line) { void *p; p = malloc(size); if (p == NULL) sysdie("failed to malloc %lu bytes at %s line %d", (unsigned long) size, file, line); return p; } /* * Reallocate memory, reporting a fatal error and exiting on failure. * * We should technically use SIZE_MAX here for the overflow check, but * SIZE_MAX is C99 and we're only assuming C89 + SUSv3, which does not * guarantee that it exists. They do guarantee that UINT_MAX exists, and we * can assume that UINT_MAX <= SIZE_MAX. And we should not be allocating * anything anywhere near that large. * * (In theory, C89 and C99 permit size_t to be smaller than unsigned int, but * I disbelieve in the existence of such systems and they will have to cope * without overflow checks.) */ static void * x_reallocarray(void *p, size_t n, size_t size, const char *file, int line) { if (n > 0 && UINT_MAX / n <= size) sysdie("realloc too large at %s line %d", file, line); p = realloc(p, n * size); if (p == NULL) sysdie("failed to realloc %lu bytes at %s line %d", (unsigned long) (n * size), file, line); return p; } /* * Copy a string, reporting a fatal error and exiting on failure. */ static char * x_strdup(const char *s, const char *file, int line) { char *p; size_t len; len = strlen(s) + 1; p = malloc(len); if (p == NULL) sysdie("failed to strdup %lu bytes at %s line %d", (unsigned long) len, file, line); memcpy(p, s, len); return p; } /* * Form a new string by concatenating multiple strings. The arguments must be * terminated by (const char *) 0. * * This function only exists because we can't assume asprintf. We can't * simulate asprintf with snprintf because we're only assuming SUSv3, which * does not require that snprintf with a NULL buffer return the required * length. When those constraints are relaxed, this should be ripped out and * replaced with asprintf or a more trivial replacement with snprintf. */ static char * concat(const char *first, ...) { va_list args; char *result; const char *string; size_t offset; size_t length = 0; /* * Find the total memory required. Ensure we don't overflow length. We * aren't guaranteed to have SIZE_MAX, so use UINT_MAX as an acceptable * substitute (see the x_nrealloc comments). */ va_start(args, first); for (string = first; string != NULL; string = va_arg(args, const char *)) { if (length >= UINT_MAX - strlen(string)) { errno = EINVAL; sysdie("strings too long in concat"); } length += strlen(string); } va_end(args); length++; /* Create the string. */ result = xmalloc(length); va_start(args, first); offset = 0; for (string = first; string != NULL; string = va_arg(args, const char *)) { memcpy(result + offset, string, strlen(string)); offset += strlen(string); } va_end(args); result[offset] = '\0'; return result; } /* * Given a struct timeval, return the number of seconds it represents as a * double. Use difftime() to convert a time_t to a double. */ static double tv_seconds(const struct timeval *tv) { return difftime(tv->tv_sec, 0) + tv->tv_usec * 1e-6; } /* * Given two struct timevals, return the difference in seconds. */ static double tv_diff(const struct timeval *tv1, const struct timeval *tv0) { return tv_seconds(tv1) - tv_seconds(tv0); } /* * Given two struct timevals, return the sum in seconds as a double. */ static double tv_sum(const struct timeval *tv1, const struct timeval *tv2) { return tv_seconds(tv1) + tv_seconds(tv2); } /* * Given a pointer to a string, skip any leading whitespace and return a * pointer to the first non-whitespace character. */ static const char * skip_whitespace(const char *p) { while (isspace((unsigned char)(*p))) p++; return p; } /* * Start a program, connecting its stdout to a pipe on our end and its stderr * to /dev/null, and storing the file descriptor to read from in the two * argument. Returns the PID of the new process. Errors are fatal. */ static pid_t test_start(const char *path, int *fd) { int fds[2], infd, errfd; pid_t child; /* Create a pipe used to capture the output from the test program. */ if (pipe(fds) == -1) { puts("ABORTED"); fflush(stdout); sysdie("can't create pipe"); } /* Fork a child process, massage the file descriptors, and exec. */ child = fork(); switch (child) { case -1: puts("ABORTED"); fflush(stdout); sysdie("can't fork"); /* In the child. Set up our standard output. */ case 0: close(fds[0]); close(STDOUT_FILENO); if (dup2(fds[1], STDOUT_FILENO) < 0) _exit(CHILDERR_DUP); close(fds[1]); /* Point standard input at /dev/null. */ close(STDIN_FILENO); infd = open("/dev/null", O_RDONLY); if (infd < 0) _exit(CHILDERR_STDIN); if (infd != STDIN_FILENO) { if (dup2(infd, STDIN_FILENO) < 0) _exit(CHILDERR_DUP); close(infd); } /* Point standard error at /dev/null. */ close(STDERR_FILENO); errfd = open("/dev/null", O_WRONLY); if (errfd < 0) _exit(CHILDERR_STDERR); if (errfd != STDERR_FILENO) { if (dup2(errfd, STDERR_FILENO) < 0) _exit(CHILDERR_DUP); close(errfd); } /* Now, exec our process. */ if (execl(path, path, (char *) 0) == -1) _exit(CHILDERR_EXEC); /* In parent. Close the extra file descriptor. */ default: close(fds[1]); break; } *fd = fds[0]; return child; } /* * Back up over the output saying what test we were executing. */ static void test_backspace(struct testset *ts) { unsigned int i; if (!isatty(STDOUT_FILENO)) return; for (i = 0; i < ts->length; i++) putchar('\b'); for (i = 0; i < ts->length; i++) putchar(' '); for (i = 0; i < ts->length; i++) putchar('\b'); ts->length = 0; } /* * Allocate or resize the array of test results to be large enough to contain * the test number in. */ static void resize_results(struct testset *ts, unsigned long n) { unsigned long i; size_t s; /* If there's already enough space, return quickly. */ if (n <= ts->allocated) return; /* * If no space has been allocated, do the initial allocation. Otherwise, * resize. Start with 32 test cases and then add 1024 with each resize to * try to reduce the number of reallocations. */ if (ts->allocated == 0) { s = (n > 32) ? n : 32; ts->results = xcalloc(s, sizeof(enum test_status)); } else { s = (n > ts->allocated + 1024) ? n : ts->allocated + 1024; ts->results = xreallocarray(ts->results, s, sizeof(enum test_status)); } /* Set the results for the newly-allocated test array. */ for (i = ts->allocated; i < s; i++) ts->results[i] = TEST_INVALID; ts->allocated = s; } /* * Report an invalid test number and set the appropriate flags. Pulled into a * separate function since we do this in several places. */ static void invalid_test_number(struct testset *ts, long n, enum test_verbose verbose) { if (!verbose) test_backspace(ts); printf("ABORTED (invalid test number %ld)\n", n); ts->aborted = 1; ts->reported = 1; } /* * Read the plan line of test output, which should contain the range of test * numbers. We may initialize the testset structure here if we haven't yet * seen a test. Return true if initialization succeeded and the test should * continue, false otherwise. */ static int test_plan(const char *line, struct testset *ts, enum test_verbose verbose) { long n; /* * Accept a plan without the leading 1.. for compatibility with older * versions of runtests. This will only be allowed if we've not yet seen * a test result. */ line = skip_whitespace(line); if (strncmp(line, "1..", 3) == 0) line += 3; /* * Get the count and check it for validity. * * If we have something of the form "1..0 # skip foo", the whole file was * skipped; record that. If we do skip the whole file, zero out all of * our statistics, since they're no longer relevant. * * strtol is called with a second argument to advance the line pointer * past the count to make it simpler to detect the # skip case. */ n = strtol(line, (char **) &line, 10); if (n == 0) { line = skip_whitespace(line); if (*line == '#') { line = skip_whitespace(line + 1); if (strncasecmp(line, "skip", 4) == 0) { line = skip_whitespace(line + 4); if (*line != '\0') { ts->reason = xstrdup(line); ts->reason[strlen(ts->reason) - 1] = '\0'; } ts->all_skipped = 1; ts->aborted = 1; ts->count = 0; ts->passed = 0; ts->skipped = 0; ts->failed = 0; return 0; } } } if (n <= 0) { puts("ABORTED (invalid test count)"); ts->aborted = 1; ts->reported = 1; return 0; } /* * If we are doing lazy planning, check the plan against the largest test * number that we saw and fail now if we saw a check outside the plan * range. */ if (ts->plan == PLAN_PENDING && (unsigned long) n < ts->count) { invalid_test_number(ts, (long) ts->count, verbose); return 0; } /* * Otherwise, allocated or resize the results if needed and update count, * and then record that we've seen a plan. */ resize_results(ts, (unsigned long) n); ts->count = (unsigned long) n; if (ts->plan == PLAN_INIT) ts->plan = PLAN_FIRST; else if (ts->plan == PLAN_PENDING) ts->plan = PLAN_FINAL; return 1; } /* * Given a single line of output from a test, parse it and return the success * status of that test. Anything printed to stdout not matching the form * /^(not )?ok \d+/ is ignored. Sets ts->current to the test number that just * reported status. */ static void test_checkline(const char *line, struct testset *ts, enum test_verbose verbose) { enum test_status status = TEST_PASS; const char *bail; char *end; long number; unsigned long current; int outlen; /* Before anything, check for a test abort. */ bail = strstr(line, "Bail out!"); if (bail != NULL) { bail = skip_whitespace(bail + strlen("Bail out!")); if (*bail != '\0') { size_t length; length = strlen(bail); if (bail[length - 1] == '\n') length--; if (!verbose) test_backspace(ts); printf("ABORTED (%.*s)\n", (int) length, bail); ts->reported = 1; } ts->aborted = 1; return; } /* * If the given line isn't newline-terminated, it was too big for an * fgets(), which means ignore it. */ if (line[strlen(line) - 1] != '\n') return; /* If the line begins with a hash mark, ignore it. */ if (line[0] == '#') return; /* If we haven't yet seen a plan, look for one. */ if (ts->plan == PLAN_INIT && isdigit((unsigned char)(*line))) { if (!test_plan(line, ts, verbose)) return; } else if (strncmp(line, "1..", 3) == 0) { if (ts->plan == PLAN_PENDING) { if (!test_plan(line, ts, verbose)) return; } else { if (!verbose) test_backspace(ts); puts("ABORTED (multiple plans)"); ts->aborted = 1; ts->reported = 1; return; } } /* Parse the line, ignoring something we can't parse. */ if (strncmp(line, "not ", 4) == 0) { status = TEST_FAIL; line += 4; } if (strncmp(line, "ok", 2) != 0) return; line = skip_whitespace(line + 2); errno = 0; number = strtol(line, &end, 10); if (errno != 0 || end == line) current = ts->current + 1; else if (number <= 0) { invalid_test_number(ts, number, verbose); return; } else current = (unsigned long) number; if (current > ts->count && ts->plan == PLAN_FIRST) { invalid_test_number(ts, (long) current, verbose); return; } /* We have a valid test result. Tweak the results array if needed. */ if (ts->plan == PLAN_INIT || ts->plan == PLAN_PENDING) { ts->plan = PLAN_PENDING; resize_results(ts, current); if (current > ts->count) ts->count = current; } /* * Handle directives. We should probably do something more interesting * with unexpected passes of todo tests. */ while (isdigit((unsigned char)(*line))) line++; line = skip_whitespace(line); if (*line == '#') { line = skip_whitespace(line + 1); if (strncasecmp(line, "skip", 4) == 0) status = TEST_SKIP; if (strncasecmp(line, "todo", 4) == 0) status = (status == TEST_FAIL) ? TEST_SKIP : TEST_FAIL; } /* Make sure that the test number is in range and not a duplicate. */ if (ts->results[current - 1] != TEST_INVALID) { if (!verbose) test_backspace(ts); printf("ABORTED (duplicate test number %lu)\n", current); ts->aborted = 1; ts->reported = 1; return; } /* Good results. Increment our various counters. */ switch (status) { case TEST_PASS: ts->passed++; break; case TEST_FAIL: ts->failed++; break; case TEST_SKIP: ts->skipped++; break; case TEST_INVALID: break; } ts->current = current; ts->results[current - 1] = status; if (!verbose && isatty(STDOUT_FILENO)) { test_backspace(ts); if (ts->plan == PLAN_PENDING) outlen = printf("%lu/?", current); else outlen = printf("%lu/%lu", current, ts->count); ts->length = (outlen >= 0) ? (unsigned int) outlen : 0; fflush(stdout); } } /* * Print out a range of test numbers, returning the number of characters it * took up. Takes the first number, the last number, the number of characters * already printed on the line, and the limit of number of characters the line * can hold. Add a comma and a space before the range if chars indicates that * something has already been printed on the line, and print ... instead if * chars plus the space needed would go over the limit (use a limit of 0 to * disable this). */ static unsigned int test_print_range(unsigned long first, unsigned long last, unsigned long chars, unsigned int limit) { unsigned int needed = 0; unsigned long n; for (n = first; n > 0; n /= 10) needed++; if (last > first) { for (n = last; n > 0; n /= 10) needed++; needed++; } if (chars > 0) needed += 2; if (limit > 0 && chars + needed > limit) { needed = 0; if (chars <= limit) { if (chars > 0) { printf(", "); needed += 2; } printf("..."); needed += 3; } } else { if (chars > 0) printf(", "); if (last > first) printf("%lu-", first); printf("%lu", last); } return needed; } /* * Summarize a single test set. The second argument is 0 if the set exited * cleanly, a positive integer representing the exit status if it exited * with a non-zero status, and a negative integer representing the signal * that terminated it if it was killed by a signal. */ static void test_summarize(struct testset *ts, int status) { unsigned long i; unsigned long missing = 0; unsigned long failed = 0; unsigned long first = 0; unsigned long last = 0; if (ts->aborted) { fputs("ABORTED", stdout); if (ts->count > 0) printf(" (passed %lu/%lu)", ts->passed, ts->count - ts->skipped); } else { for (i = 0; i < ts->count; i++) { if (ts->results[i] == TEST_INVALID) { if (missing == 0) fputs("MISSED ", stdout); if (first && i == last) last = i + 1; else { if (first) test_print_range(first, last, missing - 1, 0); missing++; first = i + 1; last = i + 1; } } } if (first) test_print_range(first, last, missing - 1, 0); first = 0; last = 0; for (i = 0; i < ts->count; i++) { if (ts->results[i] == TEST_FAIL) { if (missing && !failed) fputs("; ", stdout); if (failed == 0) fputs("FAILED ", stdout); if (first && i == last) last = i + 1; else { if (first) test_print_range(first, last, failed - 1, 0); failed++; first = i + 1; last = i + 1; } } } if (first) test_print_range(first, last, failed - 1, 0); if (!missing && !failed) { fputs(!status ? "ok" : "dubious", stdout); if (ts->skipped > 0) { if (ts->skipped == 1) printf(" (skipped %lu test)", ts->skipped); else printf(" (skipped %lu tests)", ts->skipped); } } } if (status > 0) printf(" (exit status %d)", status); else if (status < 0) printf(" (killed by signal %d%s)", -status, WCOREDUMP(ts->status) ? ", core dumped" : ""); putchar('\n'); } /* * Given a test set, analyze the results, classify the exit status, handle a * few special error messages, and then pass it along to test_summarize() for * the regular output. Returns true if the test set ran successfully and all * tests passed or were skipped, false otherwise. */ static int test_analyze(struct testset *ts) { if (ts->reported) return 0; if (ts->all_skipped) { if (ts->reason == NULL) puts("skipped"); else printf("skipped (%s)\n", ts->reason); return 1; } else if (WIFEXITED(ts->status) && WEXITSTATUS(ts->status) != 0) { switch (WEXITSTATUS(ts->status)) { case CHILDERR_DUP: if (!ts->reported) puts("ABORTED (can't dup file descriptors)"); break; case CHILDERR_EXEC: if (!ts->reported) puts("ABORTED (execution failed -- not found?)"); break; case CHILDERR_STDIN: case CHILDERR_STDERR: if (!ts->reported) puts("ABORTED (can't open /dev/null)"); break; default: test_summarize(ts, WEXITSTATUS(ts->status)); break; } return 0; } else if (WIFSIGNALED(ts->status)) { test_summarize(ts, -WTERMSIG(ts->status)); return 0; } else if (ts->plan != PLAN_FIRST && ts->plan != PLAN_FINAL) { puts("ABORTED (no valid test plan)"); ts->aborted = 1; return 0; } else { test_summarize(ts, 0); return (ts->failed == 0); } } /* * Runs a single test set, accumulating and then reporting the results. * Returns true if the test set was successfully run and all tests passed, * false otherwise. */ static int test_run(struct testset *ts, enum test_verbose verbose) { pid_t testpid, child; int outfd, status; unsigned long i; FILE *output; char buffer[BUFSIZ]; /* Run the test program. */ testpid = test_start(ts->path, &outfd); output = fdopen(outfd, "r"); if (!output) { puts("ABORTED"); fflush(stdout); sysdie("fdopen failed"); } /* * Pass each line of output to test_checkline(), and print the line if * verbosity is requested. */ while (!ts->aborted && fgets(buffer, sizeof(buffer), output)) { if (verbose) printf("%s", buffer); test_checkline(buffer, ts, verbose); } if (ferror(output) || ts->plan == PLAN_INIT) ts->aborted = 1; if (!verbose) test_backspace(ts); /* * Consume the rest of the test output, close the output descriptor, * retrieve the exit status, and pass that information to test_analyze() * for eventual output. */ while (fgets(buffer, sizeof(buffer), output)) if (verbose) printf("%s", buffer); fclose(output); child = waitpid(testpid, &ts->status, 0); if (child == (pid_t) -1) { if (!ts->reported) { puts("ABORTED"); fflush(stdout); } sysdie("waitpid for %u failed", (unsigned int) testpid); } if (ts->all_skipped) ts->aborted = 0; status = test_analyze(ts); /* Convert missing tests to failed tests. */ for (i = 0; i < ts->count; i++) { if (ts->results[i] == TEST_INVALID) { ts->failed++; ts->results[i] = TEST_FAIL; status = 0; } } return status; } /* Summarize a list of test failures. */ static void test_fail_summary(const struct testlist *fails) { struct testset *ts; unsigned int chars; unsigned long i, first, last, total; puts(header); /* Failed Set Fail/Total (%) Skip Stat Failing (25) -------------------------- -------------- ---- ---- -------------- */ for (; fails; fails = fails->next) { ts = fails->ts; total = ts->count - ts->skipped; printf("%-26.26s %4lu/%-4lu %3.0f%% %4lu ", ts->file, ts->failed, total, total ? (ts->failed * 100.0) / total : 0, ts->skipped); if (WIFEXITED(ts->status)) printf("%4d ", WEXITSTATUS(ts->status)); else printf(" -- "); if (ts->aborted) { puts("aborted"); continue; } chars = 0; first = 0; last = 0; for (i = 0; i < ts->count; i++) { if (ts->results[i] == TEST_FAIL) { if (first != 0 && i == last) last = i + 1; else { if (first != 0) chars += test_print_range(first, last, chars, 19); first = i + 1; last = i + 1; } } } if (first != 0) test_print_range(first, last, chars, 19); putchar('\n'); } } /* * Check whether a given file path is a valid test. Currently, this checks * whether it is executable and is a regular file. Returns true or false. */ static int is_valid_test(const char *path) { struct stat st; if (access(path, X_OK) < 0) return 0; if (stat(path, &st) < 0) return 0; if (!S_ISREG(st.st_mode)) return 0; return 1; } /* * Given the name of a test, a pointer to the testset struct, and the source * and build directories, find the test. We try first relative to the current * directory, then in the build directory (if not NULL), then in the source * directory. In each of those directories, we first try a "-t" extension and * then a ".t" extension. When we find an executable program, we return the * path to that program. If none of those paths are executable, just fill in * the name of the test as is. * * The caller is responsible for freeing the path member of the testset * struct. */ static char * find_test(const char *name, const char *source, const char *build) { char *path = NULL; const char *bases[3], *suffix, *base; unsigned int i, j; const char *suffixes[3] = { "-t", ".t", "" }; /* Possible base directories. */ bases[0] = "."; bases[1] = build; bases[2] = source; /* Try each suffix with each base. */ for (i = 0; i < ARRAY_SIZE(suffixes); i++) { suffix = suffixes[i]; for (j = 0; j < ARRAY_SIZE(bases); j++) { base = bases[j]; if (base == NULL) continue; path = concat(base, "/", name, suffix, (const char *) 0); if (is_valid_test(path)) return path; free(path); path = NULL; } } if (path == NULL) path = xstrdup(name); return path; } /* * Read a list of tests from a file, returning the list of tests as a struct * testlist. Reports an error to standard error and exits if the list of * tests cannot be read. */ static struct testlist * read_test_list(const char *filename) { FILE *file; unsigned int line; size_t length; char buffer[BUFSIZ]; const char *testname; struct testlist *listhead, *current; /* Create the initial container list that will hold our results. */ listhead = xcalloc(1, sizeof(struct testlist)); current = NULL; /* * Open our file of tests to run and read it line by line, creating a new * struct testlist and struct testset for each line. */ file = fopen(filename, "r"); if (file == NULL) sysdie("can't open %s", filename); line = 0; while (fgets(buffer, sizeof(buffer), file)) { line++; length = strlen(buffer) - 1; if (buffer[length] != '\n') { fprintf(stderr, "%s:%u: line too long\n", filename, line); exit(1); } buffer[length] = '\0'; /* Skip comments, leading spaces, and blank lines. */ testname = skip_whitespace(buffer); if (strlen(testname) == 0) continue; if (testname[0] == '#') continue; /* Allocate the new testset structure. */ if (current == NULL) current = listhead; else { current->next = xcalloc(1, sizeof(struct testlist)); current = current->next; } current->ts = xcalloc(1, sizeof(struct testset)); current->ts->plan = PLAN_INIT; current->ts->file = xstrdup(testname); } fclose(file); /* Return the results. */ return listhead; } /* * Build a list of tests from command line arguments. Takes the argv and argc * representing the command line arguments and returns a newly allocated test * list. The caller is responsible for freeing. */ static struct testlist * build_test_list(char *argv[], int argc) { int i; struct testlist *listhead, *current; /* Create the initial container list that will hold our results. */ listhead = xcalloc(1, sizeof(struct testlist)); current = NULL; /* Walk the list of arguments and create test sets for them. */ for (i = 0; i < argc; i++) { if (current == NULL) current = listhead; else { current->next = xcalloc(1, sizeof(struct testlist)); current = current->next; } current->ts = xcalloc(1, sizeof(struct testset)); current->ts->plan = PLAN_INIT; current->ts->file = xstrdup(argv[i]); } /* Return the results. */ return listhead; } /* Free a struct testset. */ static void free_testset(struct testset *ts) { free(ts->file); free(ts->path); free(ts->results); free(ts->reason); free(ts); } /* * Run a batch of tests. Takes two additional parameters: the root of the * source directory and the root of the build directory. Test programs will * be first searched for in the current directory, then the build directory, * then the source directory. Returns true iff all tests passed, and always * frees the test list that's passed in. */ static int test_batch(struct testlist *tests, const char *source, const char *build, enum test_verbose verbose) { size_t length, i; size_t longest = 0; unsigned int count = 0; struct testset *ts; struct timeval start, end; struct rusage stats; struct testlist *failhead = NULL; struct testlist *failtail = NULL; struct testlist *current, *next; int succeeded; unsigned long total = 0; unsigned long passed = 0; unsigned long skipped = 0; unsigned long failed = 0; unsigned long aborted = 0; /* Walk the list of tests to find the longest name. */ for (current = tests; current != NULL; current = current->next) { length = strlen(current->ts->file); if (length > longest) longest = length; } /* * Add two to longest and round up to the nearest tab stop. This is how * wide the column for printing the current test name will be. */ longest += 2; if (longest % 8) longest += 8 - (longest % 8); /* Start the wall clock timer. */ gettimeofday(&start, NULL); /* Now, plow through our tests again, running each one. */ for (current = tests; current != NULL; current = current->next) { ts = current->ts; /* Print out the name of the test file. */ fputs(ts->file, stdout); if (verbose) fputs("\n\n", stdout); else for (i = strlen(ts->file); i < longest; i++) putchar('.'); if (isatty(STDOUT_FILENO)) fflush(stdout); /* Run the test. */ ts->path = find_test(ts->file, source, build); succeeded = test_run(ts, verbose); fflush(stdout); if (verbose) putchar('\n'); /* Record cumulative statistics. */ aborted += ts->aborted; total += ts->count + ts->all_skipped; passed += ts->passed; skipped += ts->skipped + ts->all_skipped; failed += ts->failed; count++; /* If the test fails, we shuffle it over to the fail list. */ if (!succeeded) { if (failhead == NULL) { failhead = xmalloc(sizeof(struct testset)); failtail = failhead; } else { failtail->next = xmalloc(sizeof(struct testset)); failtail = failtail->next; } failtail->ts = ts; failtail->next = NULL; } } total -= skipped; /* Stop the timer and get our child resource statistics. */ gettimeofday(&end, NULL); getrusage(RUSAGE_CHILDREN, &stats); /* Summarize the failures and free the failure list. */ if (failhead != NULL) { test_fail_summary(failhead); while (failhead != NULL) { next = failhead->next; free(failhead); failhead = next; } } /* Free the memory used by the test lists. */ while (tests != NULL) { next = tests->next; free_testset(tests->ts); free(tests); tests = next; } /* Print out the final test summary. */ putchar('\n'); if (aborted != 0) { if (aborted == 1) printf("Aborted %lu test set", aborted); else printf("Aborted %lu test sets", aborted); printf(", passed %lu/%lu tests", passed, total); } else if (failed == 0) fputs("All tests successful", stdout); else printf("Failed %lu/%lu tests, %.2f%% okay", failed, total, (total - failed) * 100.0 / total); if (skipped != 0) { if (skipped == 1) printf(", %lu test skipped", skipped); else printf(", %lu tests skipped", skipped); } puts("."); printf("Files=%u, Tests=%lu", count, total); printf(", %.2f seconds", tv_diff(&end, &start)); printf(" (%.2f usr + %.2f sys = %.2f CPU)\n", tv_seconds(&stats.ru_utime), tv_seconds(&stats.ru_stime), tv_sum(&stats.ru_utime, &stats.ru_stime)); return (failed == 0 && aborted == 0); } /* * Run a single test case. This involves just running the test program after * having done the environment setup and finding the test program. */ static void test_single(const char *program, const char *source, const char *build) { char *path; path = find_test(program, source, build); if (execl(path, path, (char *) 0) == -1) sysdie("cannot exec %s", path); } /* * Main routine. Set the SOURCE and BUILD environment variables and then, * given a file listing tests, run each test listed. */ int main(int argc, char *argv[]) { int option; int status = 0; int single = 0; enum test_verbose verbose = CONCISE; char *source_env = NULL; char *build_env = NULL; const char *program; const char *shortlist; const char *list = NULL; const char *source = SOURCE; const char *build = BUILD; struct testlist *tests; program = argv[0]; while ((option = getopt(argc, argv, "b:hl:os:v")) != EOF) { switch (option) { case 'b': build = optarg; break; case 'h': printf(usage_message, program, program, program, usage_extra); exit(0); case 'l': list = optarg; break; case 'o': single = 1; break; case 's': source = optarg; break; case 'v': verbose = VERBOSE; break; default: exit(1); } } argv += optind; argc -= optind; if ((list == NULL && argc < 1) || (list != NULL && argc > 0)) { fprintf(stderr, usage_message, program, program, program, usage_extra); exit(1); } /* * If C_TAP_VERBOSE is set in the environment, that also turns on verbose * mode. */ if (getenv("C_TAP_VERBOSE") != NULL) verbose = VERBOSE; /* Set SOURCE and BUILD environment variables. */ if (source != NULL) { source_env = concat("SOURCE=", source, (const char *) 0); if (putenv(source_env) != 0) sysdie("cannot set SOURCE in the environment"); } if (build != NULL) { build_env = concat("BUILD=", build, (const char *) 0); if (putenv(build_env) != 0) sysdie("cannot set BUILD in the environment"); } /* Run the tests as instructed. */ if (single) test_single(argv[0], source, build); else if (list != NULL) { shortlist = strrchr(list, '/'); if (shortlist == NULL) shortlist = list; else shortlist++; printf(banner, shortlist); tests = read_test_list(list); status = test_batch(tests, source, build, verbose) ? 0 : 1; } else { tests = build_test_list(argv, argc); status = test_batch(tests, source, build, verbose) ? 0 : 1; } /* For valgrind cleanliness, free all our memory. */ if (source_env != NULL) { putenv((char *) "SOURCE="); free(source_env); } if (build_env != NULL) { putenv((char *) "BUILD="); free(build_env); } exit(status); } hkl-5.0.0.2449/tests/hkl-pseudoaxis-zaxis-t.c0000644000175000017500000000467113236600666020776 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl.h" #include #include static void solution(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; HklGeometry *geometry; HklGeometryList *geometries; HklDetector *detector; HklSample *sample; static double hkl[] = {1, 1, 0}; static struct Sample sconf = { .name = "test", .lattice = Cubic(5.432), .ux = -90.0 * HKL_DEGTORAD, .uy = 0.0 * HKL_DEGTORAD, .uz = 0.0 * HKL_DEGTORAD, }; struct Geometry gconf = Zaxis(0.842, 1., 0., 0., 0.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(sconf); /* use a 0D detector */ detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); /* select the hkl pseudo axis */ hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "hkl", NULL); /* compute the 1 1 0 */ geometries = hkl_engine_pseudo_axis_values_set(engine, hkl, ARRAY_SIZE(hkl), HKL_UNIT_DEFAULT, NULL); if (geometries){ const HklGeometryListItem *item; HKL_GEOMETRY_LIST_FOREACH(item, geometries){ hkl_geometry_set(geometry, hkl_geometry_list_item_geometry_get(item)); res &= DIAG(check_pseudoaxes(engine, hkl, 3)); } hkl_geometry_list_free(geometries); }else res = FALSE; if(!res) hkl_engine_fprintf(stdout, engine); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); ok(res == TRUE, "solution"); } int main(void) { plan(1); solution(); return 0; } hkl-5.0.0.2449/tests/hkl-axis-t.c0000644000175000017500000002470513236600666016422 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl.h" #include #include #include #include static void new(void) { HklParameter *axis; static HklVector v = {{1, 0, 0}}; double min, max; axis = hkl_parameter_new_rotation("rotation", &v, &hkl_unit_angle_deg); is_string("rotation", hkl_parameter_name_get(axis), __func__); hkl_parameter_min_max_get(axis, &min, &max, HKL_UNIT_DEFAULT); is_double(-M_PI, min, HKL_EPSILON, __func__); is_double(M_PI, max, HKL_EPSILON, __func__); is_double(0., hkl_parameter_value_get(axis, HKL_UNIT_DEFAULT), HKL_EPSILON, __func__); ok(TRUE == hkl_parameter_fit_get(axis), __func__); hkl_parameter_free(axis); axis = hkl_parameter_new_translation("translation", &v, &hkl_unit_length_mm); is_string("translation", hkl_parameter_name_get(axis), __func__); hkl_parameter_min_max_get(axis, &min, &max, HKL_UNIT_DEFAULT); is_double(-DBL_MAX, min, HKL_EPSILON, __func__); is_double(DBL_MAX, max, HKL_EPSILON, __func__); is_double(0., hkl_parameter_value_get(axis, HKL_UNIT_DEFAULT), HKL_EPSILON, __func__); ok(TRUE == hkl_parameter_fit_get(axis), __func__); hkl_parameter_free(axis); } static void get_quaternions(void) { static HklVector v_ref = {{1, 0, 0}}; static HklQuaternion q1_ref = {{1, 0, 0, 0}}; static HklQuaternion q2_ref = {{M_SQRT1_2, -M_SQRT1_2, 0, 0}}; HklParameter *axis; axis = hkl_parameter_new_rotation("rotation", &v_ref, &hkl_unit_angle_deg); is_quaternion(&q1_ref, hkl_parameter_quaternion_get(axis), __func__); ok(TRUE == hkl_parameter_value_set(axis, -M_PI_2, HKL_UNIT_DEFAULT, NULL), __func__); is_quaternion(&q2_ref, hkl_parameter_quaternion_get(axis), __func__); hkl_parameter_free(axis); axis = hkl_parameter_new_translation("translation", &v_ref, &hkl_unit_length_mm); ok(NULL == hkl_parameter_quaternion_get(axis), __func__); hkl_parameter_free(axis); } static void copy(void) { static HklVector v = {{1, 0, 0}}; static HklQuaternion q_ref = {{M_SQRT1_2, -M_SQRT1_2, 0, 0}}; HklParameter *axis; HklParameter *copy; double min, max; axis = hkl_parameter_new_rotation("rotation", &v, &hkl_unit_angle_deg); ok(TRUE == hkl_parameter_value_set(axis, -M_PI_2, HKL_UNIT_DEFAULT, NULL), __func__); copy = hkl_parameter_new_copy(axis); is_string("rotation", hkl_parameter_name_get(copy), __func__); hkl_parameter_min_max_get(copy, &min, &max, HKL_UNIT_DEFAULT); is_double(-M_PI, min, HKL_EPSILON, __func__); is_double(M_PI, max, HKL_EPSILON, __func__); is_double(-M_PI_2, hkl_parameter_value_get(copy, HKL_UNIT_DEFAULT), HKL_EPSILON, __func__); ok(TRUE == hkl_parameter_fit_get(copy), __func__); is_quaternion(&q_ref, hkl_parameter_quaternion_get(copy), __func__); hkl_parameter_free(axis); hkl_parameter_free(copy); axis = hkl_parameter_new_translation("translation", &v, &hkl_unit_length_mm); ok(TRUE == hkl_parameter_value_set(axis, 100, HKL_UNIT_DEFAULT, NULL), __func__); copy = hkl_parameter_new_copy(axis); is_string("translation", hkl_parameter_name_get(copy), __func__); hkl_parameter_min_max_get(copy, &min, &max, HKL_UNIT_DEFAULT); is_double(-DBL_MAX, min, HKL_EPSILON, __func__); is_double(DBL_MAX, max, HKL_EPSILON, __func__); is_double(100, hkl_parameter_value_get(copy, HKL_UNIT_DEFAULT), HKL_EPSILON, __func__); ok(TRUE == hkl_parameter_fit_get(copy), __func__); ok(NULL == hkl_parameter_quaternion_get(copy), __func__); hkl_parameter_free(axis); hkl_parameter_free(copy); } static void is_valid(void) { static HklVector v = {{1, 0, 0}}; HklParameter *axis; axis = hkl_parameter_new_rotation("rotation", &v, &hkl_unit_angle_deg); ok(TRUE == hkl_parameter_value_set(axis, 45, HKL_UNIT_USER, NULL), __func__); ok(TRUE == hkl_parameter_is_valid(axis), __func__); ok(TRUE == hkl_parameter_min_max_set(axis, -270, 0, HKL_UNIT_USER, NULL), __func__); ok(FALSE == hkl_parameter_is_valid(axis), __func__); ok(TRUE == hkl_parameter_value_set(axis, -45, HKL_UNIT_USER, NULL), __func__); ok(TRUE == hkl_parameter_is_valid(axis), __func__); ok(TRUE == hkl_parameter_min_max_set(axis, 350, 450, HKL_UNIT_USER, NULL), __func__); ok(TRUE == hkl_parameter_value_set(axis, 45, HKL_UNIT_USER, NULL), __func__); ok(TRUE == hkl_parameter_is_valid(axis), __func__); ok(TRUE == hkl_parameter_value_set(axis, -45, HKL_UNIT_USER, NULL), __func__); ok(FALSE == hkl_parameter_is_valid(axis), __func__); ok(TRUE == hkl_parameter_min_max_set(axis, -10, 90, HKL_UNIT_USER, NULL), __func__); ok(TRUE == hkl_parameter_value_set(axis, 405, HKL_UNIT_USER, NULL), __func__); ok(TRUE == hkl_parameter_is_valid(axis), __func__); ok(TRUE == hkl_parameter_value_set(axis, -405, HKL_UNIT_USER, NULL), __func__); ok(FALSE == hkl_parameter_is_valid(axis), __func__); hkl_parameter_free(axis); axis = hkl_parameter_new_translation("translation", &v, &hkl_unit_length_mm); ok(TRUE == hkl_parameter_value_set(axis, 45, HKL_UNIT_USER, NULL), __func__); ok(TRUE == hkl_parameter_is_valid(axis), __func__); ok(TRUE == hkl_parameter_min_max_set(axis, -270, 0, HKL_UNIT_USER, NULL), __func__); ok(FALSE == hkl_parameter_is_valid(axis), __func__); ok(TRUE == hkl_parameter_value_set(axis, -45, HKL_UNIT_USER, NULL), __func__); ok(TRUE == hkl_parameter_is_valid(axis), __func__); hkl_parameter_free(axis); } static void set_value_smallest_in_range(void) { HklParameter *axis; static HklVector v = {{1, 0, 0}}; axis = hkl_parameter_new_rotation("rotation", &v, &hkl_unit_angle_deg); ok(TRUE == hkl_parameter_min_max_set(axis, -190, 190, HKL_UNIT_USER, NULL), __func__); ok(TRUE == hkl_parameter_value_set(axis, 185, HKL_UNIT_USER, NULL), __func__); hkl_parameter_value_set_smallest_in_range(axis); is_double(-175., hkl_parameter_value_get(axis, HKL_UNIT_USER), HKL_EPSILON, __func__); ok(TRUE == hkl_parameter_value_set(axis, 545, HKL_UNIT_USER, NULL), __func__); hkl_parameter_value_set_smallest_in_range(axis); is_double(-175., hkl_parameter_value_get(axis, HKL_UNIT_USER), HKL_EPSILON, __func__); ok(TRUE == hkl_parameter_value_set(axis, -185, HKL_UNIT_USER, NULL), __func__); hkl_parameter_value_set_smallest_in_range(axis); is_double(-185., hkl_parameter_value_get(axis, HKL_UNIT_USER), HKL_EPSILON, __func__); ok(TRUE == hkl_parameter_value_set(axis, 175, HKL_UNIT_USER, NULL), __func__); hkl_parameter_value_set_smallest_in_range(axis); is_double(-185., hkl_parameter_value_get(axis, HKL_UNIT_USER), HKL_EPSILON, __func__); ok(TRUE == hkl_parameter_value_set(axis, 190, HKL_UNIT_USER, NULL), __func__); hkl_parameter_value_set_smallest_in_range(axis); is_double(-170., hkl_parameter_value_get(axis, HKL_UNIT_USER), HKL_EPSILON, __func__); ok(TRUE == hkl_parameter_value_set(axis, -190, HKL_UNIT_USER, NULL), __func__); hkl_parameter_value_set_smallest_in_range(axis); is_double(-190., hkl_parameter_value_get(axis, HKL_UNIT_USER), HKL_EPSILON, __func__); hkl_parameter_free(axis); } static void get_value_closest(void) { HklParameter *axis1, *axis2; static HklVector v = {{1, 0, 0}}; axis1 = hkl_parameter_new_rotation("rotation", &v, &hkl_unit_angle_deg); axis2 = hkl_parameter_new_rotation("rotation", &v, &hkl_unit_angle_deg); ok(TRUE == hkl_parameter_value_set(axis1, 0, HKL_UNIT_USER, NULL), __func__); ok(TRUE == hkl_parameter_value_set(axis2, 0, HKL_UNIT_USER, NULL), __func__); is_double(0., hkl_parameter_value_get_closest(axis1, axis2), HKL_EPSILON, __func__); /* change the range of axis1 */ ok(TRUE == hkl_parameter_min_max_set(axis1, -270, 180, HKL_UNIT_USER, NULL), __func__); ok(TRUE == hkl_parameter_value_set(axis1, 100, HKL_UNIT_USER, NULL), __func__); ok(TRUE == hkl_parameter_value_set(axis2, -75, HKL_UNIT_USER, NULL), __func__); is_double(100 * HKL_DEGTORAD, hkl_parameter_value_get_closest(axis1, axis2), HKL_EPSILON, __func__); ok(TRUE == hkl_parameter_value_set(axis2, -85, HKL_UNIT_USER, NULL), __func__); is_double(-260 * HKL_DEGTORAD, hkl_parameter_value_get_closest(axis1, axis2), HKL_EPSILON, __func__); hkl_parameter_free(axis1); } static void transformation_cmp(void) { int res = TRUE; HklParameter *axis1, *axis2, *translation1, *translation2; static HklVector v1 = {{1, 0, 0}}; static HklVector v2 = {{0, 1, 0}}; axis1 = hkl_parameter_new_rotation("rotation", &v1, &hkl_unit_angle_deg); axis2 = hkl_parameter_new_rotation("rotation", &v2, &hkl_unit_angle_deg); translation1 = hkl_parameter_new_translation("translation", &v1, &hkl_unit_length_mm); translation2 = hkl_parameter_new_translation("translation", &v2, &hkl_unit_length_mm); res &= DIAG(0 == hkl_parameter_transformation_cmp(axis1, axis1)); res &= DIAG(0 != hkl_parameter_transformation_cmp(axis1, axis2)); res &= DIAG(0 != hkl_parameter_transformation_cmp(axis1, translation1)); res &= DIAG(0 != hkl_parameter_transformation_cmp(axis1, translation2)); res &= DIAG(0 != hkl_parameter_transformation_cmp(axis2, translation1)); res &= DIAG(0 != hkl_parameter_transformation_cmp(axis2, translation2)); res &= DIAG(0 == hkl_parameter_transformation_cmp(translation1, translation1)); res &= DIAG(0 != hkl_parameter_transformation_cmp(translation1, translation2)); res &= DIAG(0 != hkl_parameter_transformation_cmp(translation1, axis1)); res &= DIAG(0 != hkl_parameter_transformation_cmp(translation1, axis2)); res &= DIAG(0 != hkl_parameter_transformation_cmp(translation2, axis1)); res &= DIAG(0 != hkl_parameter_transformation_cmp(translation2, axis2)); ok(res == TRUE, __func__); hkl_parameter_free(translation2); hkl_parameter_free(translation1); hkl_parameter_free(axis2); hkl_parameter_free(axis1); } int main(void) { plan(73); new(); get_quaternions(); copy(); is_valid(); set_value_smallest_in_range(); get_value_closest(); transformation_cmp(); return 0; } hkl-5.0.0.2449/tests/hkl-sample-t.c0000644000175000017500000004123313236600666016732 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl.h" #include #include #include #define SET(_sample, _param, _value) do{ \ HklParameter *parameter = hkl_parameter_new_copy(hkl_sample_ ## _param ## _get(_sample)); \ GError *error; \ ok(TRUE == hkl_parameter_value_set(parameter, _value, HKL_UNIT_DEFAULT, NULL), __func__); \ error = NULL; \ ok(TRUE == hkl_parameter_value_set(parameter, _value, HKL_UNIT_DEFAULT, &error), __func__); \ ok(error == NULL, __func__); \ ok(TRUE == hkl_sample_ ## _param ## _set(_sample, parameter, NULL), __func__); \ ok(TRUE == hkl_sample_ ## _param ## _set(_sample, parameter, &error), __func__); \ ok(error == NULL, __func__); \ hkl_parameter_free(parameter); \ }while(0) #define SET_UX_UY_UZ(_sample, _ux, _uy, _uz) do{ \ SET(_sample, ux, _ux); \ SET(_sample, uy, _uy); \ SET(_sample, uz, _uz); \ }while(0) #define CHECK(_sample, _param, _value) do{ \ is_double(_value, \ hkl_parameter_value_get(hkl_sample_## _param ## _get(sample), HKL_UNIT_DEFAULT), \ HKL_EPSILON, __func__); \ }while(0) #define CHECK_UX_UY_UZ(_sample, _ux, _uy, _uz) do{ \ CHECK(_sample, ux, _ux); \ CHECK(_sample, uy, _uy); \ CHECK(_sample, uz, _uz); \ }while(0) static void new(void) { HklSample *sample; sample = hkl_sample_new("test"); hkl_sample_free(sample); } static void add_reflection(void) { HklDetector *detector; const HklFactory *factory; HklGeometry *geometry; HklSample *sample; HklSampleReflection *ref; factory = hkl_factory_get_by_name("E4CV", NULL); geometry = hkl_factory_create_new_geometry(factory); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); sample = hkl_sample_new("test"); ok(hkl_sample_n_reflections_get(sample) == 0, __func__); ref = hkl_sample_reflection_new(geometry, detector, 1, 0, 0, NULL); hkl_sample_add_reflection(sample, ref); ok(hkl_sample_n_reflections_get(sample) == 1, __func__); /* we can not add two times the same reflection */ hkl_sample_add_reflection(sample, ref); ok(hkl_sample_n_reflections_get(sample) == 1, __func__); hkl_sample_free(sample); hkl_detector_free(detector); hkl_geometry_free(geometry); } static void get_reflection(void) { HklDetector *detector; const HklFactory *factory; HklGeometry *geometry; HklSample *sample; HklSampleReflection *ref; HklSampleReflection *ref2; factory = hkl_factory_get_by_name("E4CV", NULL); geometry = hkl_factory_create_new_geometry(factory); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); sample = hkl_sample_new("test"); ref = hkl_sample_reflection_new(geometry, detector, 1, 0, 0, NULL); hkl_sample_add_reflection(sample, ref); ref2 = hkl_sample_reflections_first_get(sample); ok(0 == !ref, __func__); ok(ref == ref2, __func__); ok(NULL == hkl_sample_reflections_next_get(sample, ref2), __func__); ref = hkl_sample_reflection_new(geometry, detector, -1, 0, 0, NULL); hkl_sample_add_reflection(sample, ref); ref = hkl_sample_reflection_new(geometry, detector, 0, 1, 0, NULL); hkl_sample_add_reflection(sample, ref); hkl_sample_free(sample); hkl_detector_free(detector); hkl_geometry_free(geometry); } static void del_reflection(void) { HklDetector *detector; const HklFactory *factory; HklGeometry *geometry; HklSample *sample; HklSampleReflection *ref; factory = hkl_factory_get_by_name("E4CV", NULL); geometry = hkl_factory_create_new_geometry(factory); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); sample = hkl_sample_new("test"); ref = hkl_sample_reflection_new(geometry, detector, 1, 0, 0, NULL); hkl_sample_add_reflection(sample, ref); ok(hkl_sample_n_reflections_get(sample) == 1, __func__); hkl_sample_del_reflection(sample, ref); ok(hkl_sample_n_reflections_get(sample) == 0, __func__); ok (NULL == hkl_sample_reflections_first_get(sample), __func__); hkl_sample_free(sample); hkl_detector_free(detector); hkl_geometry_free(geometry); } static void set_ux_uy_uz(void) { HklSample *sample; sample = hkl_sample_new("test"); SET_UX_UY_UZ(sample, 1 * HKL_DEGTORAD, 2 * HKL_DEGTORAD, 3 * HKL_DEGTORAD); CHECK_UX_UY_UZ(sample, 1 * HKL_DEGTORAD, 2 * HKL_DEGTORAD, 3 * HKL_DEGTORAD); hkl_sample_free(sample); } static void set_UB(void) { GError *error; HklSample *sample; const HklMatrix *_UB; HklMatrix *UB = hkl_matrix_new_full(HKL_TAU/1.54, 0., 0., 0., 0., HKL_TAU/1.54, 0., -HKL_TAU/1.54, 0.); HklMatrix *U = hkl_matrix_new_full(1., 0., 0., 0., 0., 1., 0.,-1., 0.); HklMatrix *UB_wrong = hkl_matrix_new_full(0., 0., 0., 0., 0., 0., 0., 0., 0.); sample = hkl_sample_new("test"); /* check that reading and writing the current UB works */ _UB = hkl_sample_UB_get(sample); ok(TRUE == hkl_sample_UB_set(sample, _UB, NULL), __func__); error = NULL; ok(TRUE == hkl_sample_UB_set(sample, _UB, &error), __func__); ok(error == NULL, __func__); CHECK_UX_UY_UZ(sample, 0., 0., 0.); /* set a new valid UB matrix */ error = NULL; ok(TRUE == hkl_sample_UB_set(sample, UB, NULL), __func__); ok(TRUE == hkl_sample_UB_set(sample, UB, &error), __func__); ok(error == NULL, __func__); is_matrix(U, hkl_sample_U_get(sample), __func__); CHECK_UX_UY_UZ(sample, -90. * HKL_DEGTORAD, 0., 0.); /* set a non-valid UB matrix */ error = NULL; ok(FALSE == hkl_sample_UB_set(sample, UB_wrong, &error), __func__); ok(error != NULL, __func__); g_clear_error(&error); is_matrix(U, hkl_sample_U_get(sample), __func__); hkl_sample_free(sample); hkl_matrix_free(UB_wrong); hkl_matrix_free(U); hkl_matrix_free(UB); } static void compute_UB_busing_levy(void) { GError *error; HklDetector *detector; const HklFactory *factory; HklGeometry *geometry; HklSample *sample; HklSampleReflection *r0, *r1, *r2, *r3; HklMatrix *m_I = hkl_matrix_new_full(1,0,0, 0,1,0, 0, 0, 1); HklMatrix *m_ref = hkl_matrix_new_full(1., 0., 0., 0., 0., 1., 0.,-1., 0.); factory = hkl_factory_get_by_name("E4CV", NULL); geometry = hkl_factory_create_new_geometry(factory); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); sample = hkl_sample_new("test"); /* first test */ ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 0., 0., 60.), __func__); r0 = hkl_sample_reflection_new(geometry, detector, 0, 0, 1, NULL); hkl_sample_add_reflection(sample, r0); ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 0., -90., 60.), __func__); r1 = hkl_sample_reflection_new(geometry, detector, -1, 0, 0, NULL); hkl_sample_add_reflection(sample, r1); ok(TRUE == hkl_sample_compute_UB_busing_levy(sample, r0, r1, NULL), __func__); is_matrix(m_I, hkl_sample_U_get(sample), __func__); error = NULL; ok(TRUE == hkl_sample_compute_UB_busing_levy(sample, r0, r1, &error), __func__); ok(error == NULL, __func__); is_matrix(m_I, hkl_sample_U_get(sample), __func__); CHECK_UX_UY_UZ(sample, 0., 0., 0.); /* second test */ ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 0., 90., 60.), __func__); r2 = hkl_sample_reflection_new(geometry, detector, 1, 0, 0, NULL); hkl_sample_add_reflection(sample, r2); ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 0., 180., 60.), __func__); r3 = hkl_sample_reflection_new(geometry, detector, 0, 1, 0, NULL); hkl_sample_add_reflection(sample, r3); ok(TRUE == hkl_sample_compute_UB_busing_levy(sample, r2, r3, NULL), __func__); is_matrix(m_ref, hkl_sample_U_get(sample), __func__); error = NULL; ok(TRUE == hkl_sample_compute_UB_busing_levy(sample, r2, r3, &error), __func__); ok(error == NULL, __func__); is_matrix(m_ref, hkl_sample_U_get(sample), __func__); CHECK_UX_UY_UZ(sample, -90. * HKL_DEGTORAD, 0., 0.); /* failling test */ ok(FALSE == hkl_sample_compute_UB_busing_levy(sample, r0, r0, NULL), __func__); error = NULL; ok(FALSE == hkl_sample_compute_UB_busing_levy(sample, r0, r0, &error), __func__); ok(error != NULL, __func__); g_clear_error(&error); is_matrix(m_ref, hkl_sample_U_get(sample), __func__); hkl_sample_free(sample); hkl_detector_free(detector); hkl_geometry_free(geometry); hkl_matrix_free(m_ref); hkl_matrix_free(m_I); } static void affine(void) { GError *error; double a, b, c, alpha, beta, gamma; const HklFactory *factory; HklDetector *detector; HklGeometry *geometry; HklSample *sample; HklLattice *lattice; HklSampleReflection *ref; HklMatrix *m_ref = hkl_matrix_new_full(1., 0., 0., 0., 1., 0., 0., 0., 1.); factory = hkl_factory_get_by_name("E4CV", NULL); geometry = hkl_factory_create_new_geometry(factory); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); sample = hkl_sample_new("test"); lattice = hkl_lattice_new(1, 5, 4, 92 * HKL_DEGTORAD, 81 * HKL_DEGTORAD, 90 * HKL_DEGTORAD, NULL); hkl_sample_lattice_set(sample, lattice); hkl_lattice_free(lattice); ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 0., 90., 60.), __func__); ref = hkl_sample_reflection_new(geometry, detector, 1, 0, 0, NULL); hkl_sample_add_reflection(sample, ref); ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 90., 0., 60.), __func__); ref = hkl_sample_reflection_new(geometry, detector, 0, 1, 0, NULL); hkl_sample_add_reflection(sample, ref); ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 0., 0., 60.), __func__); ref = hkl_sample_reflection_new(geometry, detector, 0, 0, 1, NULL); hkl_sample_add_reflection(sample, ref); ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 60., 60., 60., 60.), __func__); ref = hkl_sample_reflection_new(geometry, detector, .625, .75, -.216506350946, NULL); hkl_sample_add_reflection(sample, ref); ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 45., 45., 45., 60.), __func__); ref = hkl_sample_reflection_new(geometry, detector, .665975615037, .683012701892, .299950211252, NULL); hkl_sample_add_reflection(sample, ref); ok(TRUE == hkl_sample_affine(sample, NULL), __func__); error = NULL; ok(TRUE == hkl_sample_affine(sample, &error), __func__); ok(error == NULL, __func__); hkl_lattice_get(hkl_sample_lattice_get(sample), &a, &b, &c, &alpha, &beta, &gamma, HKL_UNIT_DEFAULT); is_matrix(m_ref, hkl_sample_U_get(sample), __func__); is_double(1.54, a, HKL_EPSILON, __func__); is_double(1.54, b, HKL_EPSILON, __func__); is_double(1.54, c, HKL_EPSILON, __func__); is_double(90 * HKL_DEGTORAD, alpha, HKL_EPSILON, __func__); is_double(90 * HKL_DEGTORAD, beta, HKL_EPSILON, __func__); is_double(90 * HKL_DEGTORAD, gamma, HKL_EPSILON, __func__); CHECK_UX_UY_UZ(sample, 0., 0., 0.); hkl_sample_free(sample); hkl_detector_free(detector); hkl_geometry_free(geometry); hkl_matrix_free(m_ref); } static void get_reflections_xxx_angle(void) { HklDetector *detector; const HklFactory *factory; HklGeometry *geometry; HklSample *sample; HklLattice *lattice; HklSampleReflection *r0, *r1, *r2, *r3, *r4; factory = hkl_factory_get_by_name("E4CV", NULL); geometry = hkl_factory_create_new_geometry(factory); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); sample = hkl_sample_new("test"); lattice = hkl_lattice_new(1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD,90*HKL_DEGTORAD, NULL); hkl_sample_lattice_set(sample, lattice); hkl_lattice_free(lattice); ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 0., 90., 60.), __func__); r0 = hkl_sample_reflection_new(geometry, detector, 1, 0, 0, NULL); hkl_sample_add_reflection(sample, r0); ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 90., 0., 60.), __func__); r1 = hkl_sample_reflection_new(geometry, detector, 0, 1, 0, NULL); hkl_sample_add_reflection(sample, r1); ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 0., 0., 60.), __func__); r2 = hkl_sample_reflection_new(geometry, detector, 0, 0, 1, NULL); hkl_sample_add_reflection(sample, r2); ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 60., 60., 60., 60.), __func__); r3 = hkl_sample_reflection_new(geometry, detector, .625, .75, -.216506350946, NULL); hkl_sample_add_reflection(sample, r3); ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 45., 45., 45., 60.), __func__); r4 = hkl_sample_reflection_new(geometry, detector, .665975615037, .683012701892, .299950211252, NULL); hkl_sample_add_reflection(sample, r4); is_double(90 * HKL_DEGTORAD, hkl_sample_get_reflection_theoretical_angle(sample, r0, r1), HKL_EPSILON, __func__); is_double(90 * HKL_DEGTORAD, hkl_sample_get_reflection_measured_angle(sample, r0, r1), HKL_EPSILON, __func__); is_double(90 * HKL_DEGTORAD, hkl_sample_get_reflection_theoretical_angle(sample, r1, r2), HKL_EPSILON, __func__); is_double(90 * HKL_DEGTORAD, hkl_sample_get_reflection_measured_angle(sample, r1, r2), HKL_EPSILON, __func__); hkl_sample_free(sample); hkl_detector_free(detector); hkl_geometry_free(geometry); } static void reflection_set_geometry(void) { double a, b, c, alpha, beta, gamma; HklDetector *detector; const HklFactory *factory; HklGeometry *geometry; HklSample *sample; HklLattice *lattice; HklSampleReflection *ref; HklMatrix *m_ref = hkl_matrix_new_full(1., 0., 0., 0., 1., 0., 0., 0., 1.); factory = hkl_factory_get_by_name("E4CV", NULL); geometry = hkl_factory_create_new_geometry(factory); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); sample = hkl_sample_new("test"); lattice = hkl_lattice_new(1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD,90*HKL_DEGTORAD, NULL); hkl_sample_lattice_set(sample, lattice); hkl_lattice_free(lattice); ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 0., 90., 60.), __func__); ref = hkl_sample_reflection_new(geometry, detector, 1, 0, 0, NULL); hkl_sample_add_reflection(sample, ref); ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 90., 0., 60.), __func__); ref = hkl_sample_reflection_new(geometry, detector, 0, 1, 0, NULL); hkl_sample_add_reflection(sample, ref); ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 0., 0., 60.), __func__); ref = hkl_sample_reflection_new(geometry, detector, 0, 0, 1, NULL); hkl_sample_add_reflection(sample, ref); ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 60., 60., 60., 60.), __func__); ref = hkl_sample_reflection_new(geometry, detector, .625, .75, -.216506350946, NULL); hkl_sample_add_reflection(sample, ref); ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 46., 45., 45., 60.), __func__); ref = hkl_sample_reflection_new(geometry, detector, .665975615037, .683012701892, .299950211252, NULL); hkl_sample_add_reflection(sample, ref); /* correct the last reflection so the sample affinement must be ok. */ ok(TRUE == hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 45., 45., 45., 60.), __func__); hkl_sample_reflection_geometry_set(ref, geometry); ok(TRUE == hkl_sample_affine(sample, NULL), __func__); hkl_lattice_get(hkl_sample_lattice_get(sample), &a, &b, &c, &alpha, &beta, &gamma, HKL_UNIT_DEFAULT); is_matrix(m_ref, hkl_sample_U_get(sample), __func__); is_double(1.54, a, HKL_EPSILON, __func__); is_double(1.54, b, HKL_EPSILON, __func__); is_double(1.54, c, HKL_EPSILON, __func__); is_double(90 * HKL_DEGTORAD, alpha, HKL_EPSILON, __func__); is_double(90 * HKL_DEGTORAD, beta, HKL_EPSILON, __func__); is_double(90 * HKL_DEGTORAD, gamma, HKL_EPSILON, __func__); CHECK_UX_UY_UZ(sample, 0., 0., 0.); hkl_sample_free(sample); hkl_detector_free(detector); hkl_geometry_free(geometry); hkl_matrix_free(m_ref); } int main(void) { plan(114); new(); add_reflection(); get_reflection(); del_reflection(); set_ux_uy_uz(); set_UB(); compute_UB_busing_levy(); affine(); get_reflections_xxx_angle(); reflection_set_geometry(); return 0; } hkl-5.0.0.2449/tests/Makefile.am0000644000175000017500000000276113236600666016327 0ustar00piccapicca00000000000000SUBDIRS = tap . if HAVE_INTROSPECTION SUBDIRS += bindings endif all_tests = \ hkl-unit-t \ hkl-bench-t \ hkl-axis-t \ hkl-quaternion-t \ hkl-interval-t \ hkl-sample-t \ hkl-lattice-t \ hkl-source-t \ hkl-detector-t \ hkl-matrix-t \ hkl-vector-t \ hkl-geometry-t \ hkl-parameter-t \ hkl-pseudoaxis-t \ hkl-pseudoaxis-e4cv-t \ hkl-pseudoaxis-e4ch-t \ hkl-pseudoaxis-e6c-t \ hkl-pseudoaxis-k4cv-t \ hkl-pseudoaxis-k6c-t \ hkl-pseudoaxis-soleil-sirius-kappa-t \ hkl-pseudoaxis-soleil-sixs-med-t \ hkl-pseudoaxis-zaxis-t AM_CPPFLAGS = -Wextra -D_DEFAULT_SOURCE \ -I$(top_srcdir) \ -I$(top_srcdir)/hkl \ -I$(top_srcdir)/tests \ $(GLIB_CFLAGS) \ $(GOBJECT_CFLAGS) \ $(GSL_CFLAGS) AM_LDFLAGS = -Wl,--whole-archive,$(top_builddir)/hkl/.libs/libhkl.a,--no-whole-archive LDADD = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a \ $(GLIB_LIBS) \ $(GOBJECT_LIBS) \ $(GSL_LIBS) if HKL3D all_tests += hkl3d-test-t # force linkage with g++ nodist_EXTRA_hkl3d_test_t_SOURCES = dummy.cxx AM_CPPFLAGS += -I$(top_srcdir)/hkl3d \ $(G3D_CFLAGS) \ $(BULLET_CFLAGS) LDADD += $(top_builddir)/hkl3d/libhkl3d.la \ $(BULLET_LIBS) endif check_PROGRAMS = runtests $(all_tests) ## tap tests check-local: $(check_PROGRAMS) ./runtests -v -s $(abs_top_srcdir) $(all_tests) # Support for GNU Flymake, in Emacs. check-syntax: AM_CFLAGS += -fsyntax-only -pipe check-syntax: test -z "$(CHK_SOURCES)" || $(COMPILE) $(CHK_SOURCES) .PHONY: check-syntax hkl-5.0.0.2449/tests/hkl-pseudoaxis-e6c-t.c0000644000175000017500000003623113236600666020312 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl.h" #include #include #include "hkl-axis-private.h" /* temporary */ #define CHECK_AXIS_VALUE(geometry, axis, value) fabs((value) - hkl_parameter_value_get(hkl_geometry_axis_get(geometry, axis, NULL), HKL_UNIT_DEFAULT)) < HKL_EPSILON static int hkl_geometry_list_check_geometry_unit(const HklGeometryList *self, double mu, double omega, double chi, double phi, double gamma, double delta) { const HklGeometryListItem *item; int res = TRUE; HKL_GEOMETRY_LIST_FOREACH(item, self){ const HklGeometry *geometry; geometry = hkl_geometry_list_item_geometry_get(item); res = TRUE; res &= CHECK_AXIS_VALUE(geometry, "mu", mu * HKL_DEGTORAD); res &= CHECK_AXIS_VALUE(geometry, "omega", omega * HKL_DEGTORAD); res &= CHECK_AXIS_VALUE(geometry, "chi", chi * HKL_DEGTORAD); res &= CHECK_AXIS_VALUE(geometry, "phi", phi * HKL_DEGTORAD); res &= CHECK_AXIS_VALUE(geometry, "gamma", gamma * HKL_DEGTORAD); res &= CHECK_AXIS_VALUE(geometry, "delta", delta * HKL_DEGTORAD); if (res) break; } return res; } static void getter(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; HklGeometry *geometry; HklDetector *detector; HklSample *sample; struct Geometry gconf = E6c(1.54, 0., 30., 0., 0., 0., 60.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "hkl", NULL); /* geometry -> pseudo */ res &= DIAG(hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 0., 30., 0., 0., 0., 60.)); res &= DIAG(check_pseudoaxes_v(engine, 0., 0., 1.)); res &= DIAG(hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 0., 30., 0., 90., 0., 60.)); res &= DIAG(check_pseudoaxes_v(engine, 1., 0., 0.)); res &= DIAG(hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 0., 30., 0., -90., 0., 60.)); res &= DIAG(check_pseudoaxes_v(engine, -1., 0., 0.)); res &= DIAG(hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 0., 30., 0., 180., 0., 60.)); res &= DIAG(check_pseudoaxes_v(engine, 0., 0., -1.)); res &= DIAG(hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 0., 45., 0., 135., 0., 90.)); res &= DIAG(check_pseudoaxes_v(engine, 1., 0., -1.)); ok(res == TRUE, "getter"); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } static void degenerated(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; const darray_string *modes; const char **mode; HklGeometry *geometry; HklDetector *detector; HklSample *sample; static double hkl[] = {0, 0, 1}; struct Geometry gconf = E6c(1.54, 0., 30., 0., 0., 0., 60.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "hkl", NULL); modes = hkl_engine_modes_names_get(engine); darray_foreach(mode, *modes) { const darray_string *parameters; HklGeometryList *geometries; size_t n_params; res &= DIAG(hkl_engine_current_mode_set(engine, *mode, NULL)); parameters = hkl_engine_parameters_names_get(engine); n_params = darray_size(*parameters); if (n_params){ double params[n_params]; hkl_engine_parameters_values_get(engine, params, n_params, HKL_UNIT_DEFAULT); params[0] = 0; res &= DIAG(hkl_engine_parameters_values_set(engine, params, n_params, HKL_UNIT_DEFAULT, NULL)); } /* studdy this degenerated case */ geometries = hkl_engine_pseudo_axis_values_set(engine, hkl, ARRAY_SIZE(hkl), HKL_UNIT_DEFAULT, NULL); if (geometries){ const HklGeometryListItem *item; HKL_GEOMETRY_LIST_FOREACH(item, geometries){ hkl_geometry_set(geometry, hkl_geometry_list_item_geometry_get(item)); res &= DIAG(check_pseudoaxes(engine, hkl, 3)); } hkl_geometry_list_free(geometries); } } ok(res == TRUE, "degenerated"); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } static void q2(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; const char **mode; const darray_string *modes; HklGeometry *geometry; HklDetector *detector; HklSample *sample; struct Geometry gconf = E6c(1.54, 0., 30., 0., 0., 0., 60.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "q2", NULL); modes = hkl_engine_modes_names_get(engine); /* the init part */ res &= DIAG(hkl_engine_initialized_set(engine, TRUE, NULL)); darray_foreach(mode, *modes){ double q, alpha; res &= DIAG(hkl_engine_current_mode_set(engine, *mode, NULL)); for(q=0.1; q<1.; q += 0.1) for(alpha = -M_PI; alpha. * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl.h" #include #include #include "hkl-source-private.h" static void new_copy(void) { HklSource s, c; hkl_source_init(&s, 1.54, 1, 0, 0); c = s; is_double(c.wave_length, s.wave_length, HKL_EPSILON, __func__); ok(FALSE == hkl_vector_cmp(&c.direction, &s.direction), __func__); } static void init(void) { HklSource s; hkl_source_init(&s, 1, 1, 0, 0); is_double(1., s.wave_length, HKL_EPSILON, __func__); is_double(1., s.direction.data[0], HKL_EPSILON, __func__); is_double(0., s.direction.data[1], HKL_EPSILON, __func__); is_double(0., s.direction.data[2], HKL_EPSILON, __func__); } static void cmp(void) { HklSource ref, s1, s2; hkl_source_init(&ref, 1.54, 1, 0, 0); hkl_source_init(&s1, 1.54, 1, 0, 0); hkl_source_init(&s2, 1, 1, 0, 0); ok(TRUE == hkl_source_cmp(&ref, &s1), __func__); ok(FALSE == hkl_source_cmp(&ref, &s2), __func__); } static void compute_ki(void) { HklSource s; HklVector ki_ref = {{HKL_TAU / 1.54, 0, 0}}; HklVector ki; hkl_source_init(&s, 1.54, 1, 0, 0); hkl_source_compute_ki(&s, &ki); ok(0 == hkl_vector_cmp(&ki_ref, &ki), __func__); } static void get_wavelength(void) { HklSource s; hkl_source_init(&s, 1, 1, 0, 0); is_double(1., hkl_source_get_wavelength(&s), HKL_EPSILON, __func__); } int main(void) { plan(10); new_copy(); init(); cmp(); compute_ki(); get_wavelength(); return 0; } hkl-5.0.0.2449/tests/hkl-vector-t.c0000644000175000017500000001457213236600666016761 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl.h" #include #include #include "hkl-vector-private.h" /* use to test also the private API */ static void init(void) { HklVector v; hkl_vector_init(&v, 1, 2, 3); is_double(1., v.data[0], HKL_EPSILON, __func__); is_double(2., v.data[1], HKL_EPSILON, __func__); is_double(3., v.data[2], HKL_EPSILON, __func__); } static void cmp(void) { HklVector v1 = {{0.0, 1.0, 2.0}}; HklVector v2 = {{1.0, 2.0, 3.0}}; ok(0 == hkl_vector_cmp(&v1, &v1), __func__); ok(1 == hkl_vector_cmp(&v1, &v2), __func__); } static void is_opposite(void) { HklVector v_ref = {{0, 1, 2}}; HklVector v1 = {{1, 2, 3}}; HklVector v2 = {{0, -1, -2}}; ok(FALSE == hkl_vector_is_opposite(&v_ref, &v1), __func__); ok(TRUE == hkl_vector_is_opposite(&v_ref, &v2), __func__); } static void norm2(void) { HklVector v1 = {{0.0, 1.0, 2.0}}; HklVector v2 = {{-1.0, 1.0, 2.0}}; is_double(sqrt(5.0), hkl_vector_norm2(&v1), HKL_EPSILON, __func__); is_double(sqrt(6.0), hkl_vector_norm2(&v2), HKL_EPSILON, __func__); } static void normalize(void) { HklVector v_ref = {{1. /sqrt(2.), 1. / sqrt(2.), 0.}}; HklVector v = {{1., 1., 0.}}; hkl_vector_normalize(&v); ok(0 == hkl_vector_cmp(&v_ref, &v), __func__); } static void scalar_product(void) { HklVector v = {{0.0, 1.0, 2.0}}; double scalar = hkl_vector_scalar_product(&v, &v); is_double( 5.0, scalar, HKL_EPSILON, __func__ ); } static void vectorial_product(void) { HklVector v = {{0.0, 1.0, 2.0}}; HklVector v1 = {{1.0, 2.0, 3.0}}; HklVector v_ref = {{-1.0, 2.0, -1.0}}; hkl_vector_vectorial_product(&v, &v1); ok(0 == hkl_vector_cmp(&v_ref, &v), __func__); } static void angle(void) { double angle; HklVector v = {{1., 0., 0.}}; HklVector v1 = {{1., 1., 0.}}; HklVector v2 = {{1., 1., .5}}; HklVector v3 = {{1., .5, -1}}; HklVector v4 = {{0., 1., 0.}}; HklVector v5 = {{0., -1., 0.}}; angle = hkl_vector_angle(&v, &v); is_double(0., angle, HKL_EPSILON, __func__); angle = hkl_vector_angle(&v, &v1); is_double(acos(1./sqrt(2.)), angle, HKL_EPSILON, __func__); angle = hkl_vector_angle(&v2, &v3); is_double(acos(1./2.25), angle, HKL_EPSILON, __func__); angle = hkl_vector_angle(&v, &v4); is_double(90 * HKL_DEGTORAD, angle, HKL_EPSILON, __func__); angle = hkl_vector_angle(&v, &v5); is_double(90 * HKL_DEGTORAD, angle, HKL_EPSILON, __func__); } static void oriented_angle(void) { double angle; HklVector v = {{1., 0., 0.}}; HklVector v1 = {{1., 1., 0.}}; HklVector v2 = {{0., 1., 0.}}; HklVector v3 = {{0., -1., 0.}}; HklVector ref = {{0, 0, 1}}; angle = hkl_vector_oriented_angle(&v, &v, &ref); is_double(0., angle, HKL_EPSILON, __func__); angle = hkl_vector_oriented_angle(&v, &v1, &ref); is_double(acos(1./sqrt(2.)), angle, HKL_EPSILON, __func__); angle = hkl_vector_oriented_angle(&v, &v2, &ref); is_double(90 * HKL_DEGTORAD, angle, HKL_EPSILON, __func__); angle = hkl_vector_oriented_angle(&v, &v3, &ref); is_double(-90 * HKL_DEGTORAD, angle, HKL_EPSILON, __func__); } static void oriented_angle_points(void) { double angle; HklVector v = {{1., 0., 1.}}; HklVector v1 = {{1., 1., 1.}}; HklVector v2 = {{0., 1., 1.}}; HklVector v3 = {{0., -1., 1.}}; HklVector ref = {{0, 0, 1}}; angle = hkl_vector_oriented_angle_points(&v, &ref, &v, &ref); is_double(0., angle, HKL_EPSILON, __func__); angle = hkl_vector_oriented_angle_points(&v, &ref, &v1, &ref); is_double(acos(1./sqrt(2.)), angle, HKL_EPSILON, __func__); angle = hkl_vector_oriented_angle_points(&v, &ref, &v2, &ref); is_double(90 * HKL_DEGTORAD, angle, HKL_EPSILON, __func__); angle = hkl_vector_oriented_angle_points(&v, &ref, &v3, &ref); is_double(-90 * HKL_DEGTORAD, angle, HKL_EPSILON, __func__); } static void rotated_around_vector(void) { HklVector x = {{1, 0, 0}}; HklVector z = {{0, 0, 1}}; HklVector y_ref = {{0, 1, 0}}; hkl_vector_rotated_around_vector(&x, &z, 90*HKL_DEGTORAD); ok(0 == hkl_vector_cmp(&y_ref, &x), __func__); } static void rotated_around_line(void) { HklVector x = {{1, 0, 0}}; HklVector c1 = {{0, 0, 0}}; HklVector c2 = {{0, 0, 1}}; HklVector x_ref = {{1, 0, 0}}; HklVector y_ref = {{0, 1, 0}}; hkl_vector_rotated_around_line(&x, 0*HKL_DEGTORAD, &c1, &c2); ok(0 == hkl_vector_cmp(&x_ref, &x), __func__); hkl_vector_rotated_around_line(&x, 90*HKL_DEGTORAD, &c1, &c2); ok(0 == hkl_vector_cmp(&y_ref, &x), __func__); } static void times_matrix(void) { HklMatrix *m = hkl_matrix_new_full(1.0, 3.0,-2.0, 10.0, 5.0, 5.0, -3.0, 2.0, 0.0); HklVector v = {{1.0, 2.0, 3.0}}; HklVector v_ref = {{12., 19., 8.}}; hkl_vector_times_matrix(&v, m); ok(0 == hkl_vector_cmp(&v_ref, &v), __func__); hkl_matrix_free(m); } static void project_on_plan(void) { HklVector v; HklVector v_ref = {{1, 0, 0}}; HklVector v1_ref = {{1, 0, 1}}; HklVector v2_ref = {{1, 0, -2}}; HklVector v1 = {{1, 0, 2}}; HklVector plan = {{0, 0, 1}}; HklVector point1 = {{0, 0, 1}}; HklVector point2 = {{0, 0, -2}}; v = v1; hkl_vector_project_on_plan(&v, &plan); ok(0 == hkl_vector_cmp(&v_ref, &v), __func__); v = v1; hkl_vector_project_on_plan_with_point(&v, &plan, &point1); ok(0 == hkl_vector_cmp(&v1_ref, &v), __func__); v = v1; hkl_vector_project_on_plan_with_point(&v, &plan, &point2); ok(0 == hkl_vector_cmp(&v2_ref, &v), __func__); } int main(void) { plan(32); init(); cmp(); is_opposite(); norm2(); normalize(); scalar_product(); vectorial_product(); angle(); oriented_angle(); oriented_angle_points(); rotated_around_vector(); rotated_around_line(); times_matrix(); project_on_plan(); return 0; } hkl-5.0.0.2449/tests/hkl-lattice-t.c0000644000175000017500000002451513236600666017102 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl.h" #include #include #include #define CHECK_PARAM(_lattice, _param, _value) \ is_double((_value), \ hkl_parameter_value_get(hkl_lattice_## _param ##_get(_lattice), \ HKL_UNIT_DEFAULT), \ HKL_EPSILON, __func__); #define CHECK_LATTICE(_lattice, _a, _b, _c, _alpha, _beta, _gamma) do { \ CHECK_PARAM(_lattice, a, _a); \ CHECK_PARAM(_lattice, b, _b); \ CHECK_PARAM(_lattice, c, _c); \ CHECK_PARAM(_lattice, alpha, _alpha); \ CHECK_PARAM(_lattice, beta, _beta); \ CHECK_PARAM(_lattice, gamma, _gamma); \ }while(0) #define SET_PARAM(_lattice, _param, _value) do { \ GError *error; \ HklParameter *p = hkl_parameter_new_copy(hkl_lattice_ ## _param ## _get(_lattice)); \ ok(hkl_parameter_value_set(p, _value, HKL_UNIT_DEFAULT, NULL), __func__); \ ok(TRUE == hkl_lattice_ ## _param ## _set(_lattice, p, NULL), __func__); \ error = NULL; \ ok(TRUE == hkl_lattice_ ## _param ## _set(_lattice, p, &error), __func__); \ ok(error == NULL, __func__); \ hkl_parameter_free(p); \ }while(0) \ #define SET_LATTICE(_lattice, _a, _b, _c, _alpha, _beta, _gamma) do{ \ SET_PARAM(_lattice, a, _a); \ SET_PARAM(_lattice, b, _b); \ SET_PARAM(_lattice, c, _c); \ SET_PARAM(_lattice, alpha, _alpha); \ SET_PARAM(_lattice, beta, _beta); \ SET_PARAM(_lattice, gamma, _gamma); \ }while(0) static void new(void) { HklLattice *lattice; GError *error; /* can not set this lattice */ lattice = hkl_lattice_new(1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 10*HKL_DEGTORAD, 120*HKL_DEGTORAD, NULL); ok(NULL == lattice, __func__); /* check GError generation */ error = NULL; lattice = hkl_lattice_new(1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 10*HKL_DEGTORAD, 120*HKL_DEGTORAD, &error); ok(NULL == lattice, __func__); ok(error != NULL, __func__); g_clear_error(&error); /* but can create this one */ lattice = hkl_lattice_new(1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, NULL); ok(0 == !lattice, __func__); CHECK_LATTICE(lattice, 1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD); /* but can create this one and no GError are produce */ lattice = hkl_lattice_new(1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, &error); ok(0 == !lattice, __func__); ok(error == NULL, __func__); CHECK_LATTICE(lattice, 1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD); hkl_lattice_free(lattice); } static void new_copy(void) { HklLattice *lattice; HklLattice *copy; lattice = hkl_lattice_new(1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, NULL); /* copy constructor */ copy = hkl_lattice_new_copy(lattice); CHECK_LATTICE(copy, 1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD); hkl_lattice_free(lattice); hkl_lattice_free(copy); } static void set(void) { HklLattice *lattice; GError *error; lattice = hkl_lattice_new_default(); /* can not set this lattice */ ok(FALSE == hkl_lattice_set(lattice, 1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 10*HKL_DEGTORAD, 120*HKL_DEGTORAD, HKL_UNIT_DEFAULT, NULL), __func__); /* can not set this lattice with GError */ error = NULL; ok(FALSE == hkl_lattice_set(lattice, 1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 10*HKL_DEGTORAD, 120*HKL_DEGTORAD, HKL_UNIT_DEFAULT, &error), __func__); ok(error != NULL, __func__); g_clear_error(&error); /* can set this lattice */ ok(TRUE == hkl_lattice_set(lattice, 1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 91*HKL_DEGTORAD, 92*HKL_DEGTORAD, HKL_UNIT_DEFAULT, NULL), __func__); CHECK_LATTICE(lattice, 1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 91*HKL_DEGTORAD, 92*HKL_DEGTORAD); /* can set this lattice with no GError set */ ok(TRUE == hkl_lattice_set(lattice, 1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 91*HKL_DEGTORAD, 90*HKL_DEGTORAD, HKL_UNIT_DEFAULT, &error), __func__); ok(error == NULL, __func__); CHECK_LATTICE(lattice, 1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 91*HKL_DEGTORAD, 90*HKL_DEGTORAD); /* can set this lattice in HKL_UNIT_USER with no GError set */ ok(TRUE == hkl_lattice_set(lattice, 1.54, 1.54, 1.54, 90, 91, 92, HKL_UNIT_USER, NULL), __func__); CHECK_LATTICE(lattice, 1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 91*HKL_DEGTORAD, 92*HKL_DEGTORAD); /* can set this lattice in HKL_UNIT_USER with no GError set */ ok(TRUE == hkl_lattice_set(lattice, 1.54, 1.54, 1.54, 90, 91, 90, HKL_UNIT_USER, &error), __func__); ok(error == NULL, __func__); CHECK_LATTICE(lattice, 1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 91*HKL_DEGTORAD, 90*HKL_DEGTORAD); /* check individual accessor */ SET_LATTICE(lattice, 1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 91 * HKL_DEGTORAD, 91 * HKL_DEGTORAD); CHECK_LATTICE(lattice, 1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 91 * HKL_DEGTORAD, 91 * HKL_DEGTORAD); hkl_lattice_free(lattice); } static void reciprocal(void) { HklLattice *lattice; HklLattice *reciprocal; lattice = hkl_lattice_new_default(); reciprocal = hkl_lattice_new_default(); /* cubic */ ok(TRUE == hkl_lattice_set(lattice, 1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, HKL_UNIT_DEFAULT, NULL), __func__); ok(TRUE == hkl_lattice_reciprocal(lattice, reciprocal), __func__); CHECK_LATTICE(reciprocal, HKL_TAU / 1.54, HKL_TAU / 1.54, HKL_TAU / 1.54, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD); /* orthorombic */ ok(TRUE == hkl_lattice_set(lattice, 1., 3., 4., 90 * HKL_DEGTORAD, 90 * HKL_DEGTORAD, 90 * HKL_DEGTORAD, HKL_UNIT_DEFAULT, NULL), __func__); ok(TRUE == hkl_lattice_reciprocal(lattice, reciprocal), __func__); CHECK_LATTICE(reciprocal, HKL_TAU / 1., HKL_TAU / 3., HKL_TAU / 4., 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD); /* hexagonal1 */ ok(TRUE == hkl_lattice_set(lattice, 1., 2., 1., 90 * HKL_DEGTORAD, 120 * HKL_DEGTORAD, 90 * HKL_DEGTORAD, HKL_UNIT_DEFAULT, NULL), __func__); ok(TRUE == hkl_lattice_reciprocal(lattice, reciprocal), __func__); CHECK_LATTICE(reciprocal, HKL_TAU * 2. / sqrt(3.), HKL_TAU / 2., HKL_TAU * 2. / sqrt(3.), 90. * HKL_DEGTORAD, 60. * HKL_DEGTORAD, 90. * HKL_DEGTORAD); /* hexagonal2 */ ok(TRUE == hkl_lattice_set(lattice, 2., 1., 1., 120 * HKL_DEGTORAD, 90 * HKL_DEGTORAD, 90 * HKL_DEGTORAD, HKL_UNIT_DEFAULT, NULL), __func__); ok(TRUE == hkl_lattice_reciprocal(lattice, reciprocal), __func__); CHECK_LATTICE(reciprocal, HKL_TAU / 2., HKL_TAU * 2. / sqrt(3.), HKL_TAU * 2. / sqrt(3.), 60. * HKL_DEGTORAD, 90. * HKL_DEGTORAD, 90. * HKL_DEGTORAD); /* triclinic1 */ ok(TRUE == hkl_lattice_set(lattice, 9.32, 8.24, 13.78, 91.23 * HKL_DEGTORAD, 93.64 * HKL_DEGTORAD, 122.21 * HKL_DEGTORAD, HKL_UNIT_DEFAULT, NULL), __func__); ok(TRUE == hkl_lattice_reciprocal(lattice, reciprocal), __func__); CHECK_LATTICE(reciprocal, HKL_TAU * 0.1273130168,HKL_TAU * 0.1437422974,HKL_TAU * 0.0728721120, 1.5052513337, 1.482101482, 1.0055896011); /* triclinic2 */ ok(TRUE == hkl_lattice_set(lattice, 18.423, 18.417, 18.457, 89.99 * HKL_DEGTORAD, 89.963 * HKL_DEGTORAD, 119.99 * HKL_DEGTORAD, HKL_UNIT_DEFAULT, NULL), __func__); ok(TRUE == hkl_lattice_reciprocal(lattice, reciprocal), __func__); CHECK_LATTICE(reciprocal, HKL_TAU * 0.0626708259,HKL_TAU * 0.0626912310,HKL_TAU * 0.0541800061, 1.5713705262, 1.5716426508, 1.0473718249); hkl_lattice_free(lattice); hkl_lattice_free(reciprocal); } static void volume(void) { HklLattice *lattice; HklLattice *reciprocal; lattice = hkl_lattice_new_default(); reciprocal = hkl_lattice_new_default(); /* cubic */ DIAG(hkl_lattice_set(lattice, 1.54, 1.54, 1.54, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, 90*HKL_DEGTORAD, HKL_UNIT_DEFAULT, NULL)); CHECK_PARAM(lattice, volume, 1.54*1.54*1.54); hkl_lattice_reciprocal(lattice, reciprocal); CHECK_PARAM(reciprocal, volume, (HKL_TAU * HKL_TAU * HKL_TAU)/(1.54*1.54*1.54)); hkl_lattice_free(lattice); hkl_lattice_free(reciprocal); } static void get_B(void) { HklMatrix *B_ref = hkl_matrix_new_full(HKL_TAU / 1.54, 0, 0, 0, HKL_TAU / 1.54, 0, 0, 0, HKL_TAU / 1.54); HklLattice *lattice; HklMatrix *B = hkl_matrix_new(); /* cubic */ lattice = hkl_lattice_new(1.54, 1.54, 1.54, 90 * HKL_DEGTORAD, 90 * HKL_DEGTORAD, 90 * HKL_DEGTORAD, NULL); hkl_lattice_get_B(lattice, B); is_matrix(B_ref, B, __func__); hkl_lattice_free(lattice); hkl_matrix_free(B); hkl_matrix_free(B_ref); } static void get_1_B(void) { HklMatrix *I_ref = hkl_matrix_new_full(1, 0, 0, 0, 1, 0, 0, 0, 1); HklLattice *lattice; HklMatrix *I = hkl_matrix_new(); HklMatrix *B_1 = hkl_matrix_new(); /* cubic */ lattice = hkl_lattice_new(1.54, 1.54, 1.54, 90 * HKL_DEGTORAD, 90 * HKL_DEGTORAD, 90 * HKL_DEGTORAD, NULL); hkl_lattice_get_B(lattice, I); hkl_lattice_get_1_B(lattice, B_1); /* B times B^-1 = Identity */ hkl_matrix_times_matrix(I, B_1); is_matrix(I_ref, I, __func__); hkl_lattice_free(lattice); hkl_matrix_free(B_1); hkl_matrix_free(I); hkl_matrix_free(I_ref); } int main(void) { plan(139); new(); new_copy(); set(); reciprocal(); volume(); get_B(); get_1_B(); return 0; } hkl-5.0.0.2449/tests/tap/0000755000175000017500000000000013237020541015036 5ustar00piccapicca00000000000000hkl-5.0.0.2449/tests/tap/float.c0000644000175000017500000000504012774775077016340 0ustar00piccapicca00000000000000/* * Utility routines for writing floating point tests. * * Currently provides only one function, which checks whether a double is * equal to an expected value within a given epsilon. This is broken into a * separate source file from the rest of the basic C TAP library because it * may require linking with -lm on some platforms, and the package may not * otherwise care about floating point. * * This file is part of C TAP Harness. The current version plus supporting * documentation is at . * * Copyright 2008, 2010, 2012, 2013, 2014, 2015 Russ Allbery * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ /* Required for isnan() and isinf(). */ #if defined(__STRICT_ANSI__) || defined(PEDANTIC) # ifndef _XOPEN_SOURCE # define _XOPEN_SOURCE 600 # endif #endif #include #include #include #include #include /* * Takes an expected double and a seen double and assumes the test passes if * those two numbers are within delta of each other. */ int is_double(double wanted, double seen, double epsilon, const char *format, ...) { va_list args; int success; va_start(args, format); fflush(stderr); if ((isnan(wanted) && isnan(seen)) || (isinf(wanted) && isinf(wanted) == isinf(seen)) || fabs(wanted - seen) <= epsilon) { success = 1; okv(1, format, args); } else { success = 0; diag("wanted: %g", wanted); diag(" seen: %g", seen); okv(0, format, args); } return success; } hkl-5.0.0.2449/tests/tap/macros.h0000644000175000017500000000736512710332473016513 0ustar00piccapicca00000000000000/* * Helpful macros for TAP header files. * * This is not, strictly speaking, related to TAP, but any TAP add-on is * probably going to need these macros, so define them in one place so that * everyone can pull them in. * * This file is part of C TAP Harness. The current version plus supporting * documentation is at . * * Copyright 2008, 2012, 2013, 2015 Russ Allbery * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ #ifndef TAP_MACROS_H #define TAP_MACROS_H 1 /* * __attribute__ is available in gcc 2.5 and later, but only with gcc 2.7 * could you use the __format__ form of the attributes, which is what we use * (to avoid confusion with other macros), and only with gcc 2.96 can you use * the attribute __malloc__. 2.96 is very old, so don't bother trying to get * the other attributes to work with GCC versions between 2.7 and 2.96. */ #ifndef __attribute__ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96) # define __attribute__(spec) /* empty */ # endif #endif /* * We use __alloc_size__, but it was only available in fairly recent versions * of GCC. Suppress warnings about the unknown attribute if GCC is too old. * We know that we're GCC at this point, so we can use the GCC variadic macro * extension, which will still work with versions of GCC too old to have C99 * variadic macro support. */ #if !defined(__attribute__) && !defined(__alloc_size__) # if defined(__GNUC__) && !defined(__clang__) # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) # define __alloc_size__(spec, args...) /* empty */ # endif # endif #endif /* Suppress __warn_unused_result__ if gcc is too old. */ #if !defined(__attribute__) && !defined(__warn_unused_result__) # if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4) # define __warn_unused_result__ /* empty */ # endif #endif /* * LLVM and Clang pretend to be GCC but don't support all of the __attribute__ * settings that GCC does. For them, suppress warnings about unknown * attributes on declarations. This unfortunately will affect the entire * compilation context, but there's no push and pop available. */ #if !defined(__attribute__) && (defined(__llvm__) || defined(__clang__)) # pragma GCC diagnostic ignored "-Wattributes" #endif /* Used for unused parameters to silence gcc warnings. */ #define UNUSED __attribute__((__unused__)) /* * BEGIN_DECLS is used at the beginning of declarations so that C++ * compilers don't mangle their names. END_DECLS is used at the end. */ #undef BEGIN_DECLS #undef END_DECLS #ifdef __cplusplus # define BEGIN_DECLS extern "C" { # define END_DECLS } #else # define BEGIN_DECLS /* empty */ # define END_DECLS /* empty */ #endif #endif /* TAP_MACROS_H */ hkl-5.0.0.2449/tests/tap/hkl-tap.h0000644000175000017500000000416413236600666016567 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #ifndef __HKL_TAP_H__ #define __HKL_TAP_H__ #include "hkl.h" #include "hkl/api2/hkl2.h" #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) /* BEWARE here we are using a GCC extension */ #define DIAG(_success) \ ({ typeof(_success) __success = (_success); \ if(!__success) \ diag("status: %d " __FILE__ ":" TOSTRING(__LINE__) ":%s", (__success) , __func__); \ __success; \ }) G_BEGIN_DECLS extern void is_quaternion(const HklQuaternion *wanted, const HklQuaternion *seen, const char *format, ...) __attribute__((__format__(printf, 3, 4))); extern void is_matrix(const HklMatrix *wanted, const HklMatrix *seen, const char *format, ...) __attribute__((__format__(printf, 3, 4))); extern int check_pseudoaxes_v(HklEngine *engine, ...); extern int check_pseudoaxes(HklEngine *engine, double expected[], uint len); extern void hkl_tap_engine_pseudo_axes_randomize(HklEngine *self, double values[], size_t n_values, HklUnitEnum unit_type) HKL_ARG_NONNULL(1, 2); extern void hkl_tap_engine_parameters_randomize(HklEngine *self) HKL_ARG_NONNULL(1); extern HklGeometryList *hkl_engine_set_values_v(HklEngine *self, ...); G_END_DECLS #endif /* __HKL_TAP_H__ */ hkl-5.0.0.2449/tests/tap/Makefile.am0000644000175000017500000000062013217436032017074 0ustar00piccapicca00000000000000AM_CFLAGS = \ -I$(top_srcdir) \ -I$(abs_top_srcdir)/tests \ $(GLIB_CFLAGS) \ $(GSL_CFLAGS) check_LIBRARIES = libtap.a libtap_a_SOURCES = \ basic.c \ basic.h \ float.h \ float.c \ macros.h \ hkl-tap.h \ hkl-tap.c # Support for GNU Flymake, in Emacs. check-syntax: AM_CFLAGS += -fsyntax-only -pipe check-syntax: test -z "$(CHK_SOURCES)" || $(COMPILE) $(CHK_SOURCES) .PHONY: check-syntax hkl-5.0.0.2449/tests/tap/basic.c0000644000175000017500000005500112774775077016316 0ustar00piccapicca00000000000000/* * Some utility routines for writing tests. * * Here are a variety of utility routines for writing tests compatible with * the TAP protocol. All routines of the form ok() or is*() take a test * number and some number of appropriate arguments, check to be sure the * results match the expected output using the arguments, and print out * something appropriate for that test number. Other utility routines help in * constructing more complex tests, skipping tests, reporting errors, setting * up the TAP output format, or finding things in the test environment. * * This file is part of C TAP Harness. The current version plus supporting * documentation is at . * * Copyright 2009, 2010, 2011, 2012, 2013, 2014, 2015 * Russ Allbery * Copyright 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2011, 2012, 2013, 2014 * The Board of Trustees of the Leland Stanford Junior University * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ #include #include #include #include #include #include #ifdef _WIN32 # include #else # include #endif #include #include #include /* Windows provides mkdir and rmdir under different names. */ #ifdef _WIN32 # define mkdir(p, m) _mkdir(p) # define rmdir(p) _rmdir(p) #endif /* * The test count. Always contains the number that will be used for the next * test status. This is exported to callers of the library. */ unsigned long testnum = 1; /* * Status information stored so that we can give a test summary at the end of * the test case. We store the planned final test and the count of failures. * We can get the highest test count from testnum. */ static unsigned long _planned = 0; static unsigned long _failed = 0; /* * Store the PID of the process that called plan() and only summarize * results when that process exits, so as to not misreport results in forked * processes. */ static pid_t _process = 0; /* * If true, we're doing lazy planning and will print out the plan based on the * last test number at the end of testing. */ static int _lazy = 0; /* * If true, the test was aborted by calling bail(). Currently, this is only * used to ensure that we pass a false value to any cleanup functions even if * all tests to that point have passed. */ static int _aborted = 0; /* * Registered cleanup functions. These are stored as a linked list and run in * registered order by finish when the test program exits. Each function is * passed a boolean value indicating whether all tests were successful. */ struct cleanup_func { test_cleanup_func func; struct cleanup_func *next; }; static struct cleanup_func *cleanup_funcs = NULL; /* * Registered diag files. Any output found in these files will be printed out * as if it were passed to diag() before any other output we do. This allows * background processes to log to a file and have that output interleaved with * the test output. */ struct diag_file { char *name; FILE *file; char *buffer; size_t bufsize; struct diag_file *next; }; static struct diag_file *diag_files = NULL; /* * Print a specified prefix and then the test description. Handles turning * the argument list into a va_args structure suitable for passing to * print_desc, which has to be done in a macro. Assumes that format is the * argument immediately before the variadic arguments. */ #define PRINT_DESC(prefix, format) \ do { \ if (format != NULL) { \ va_list args; \ if (prefix != NULL) \ printf("%s", prefix); \ va_start(args, format); \ vprintf(format, args); \ va_end(args); \ } \ } while (0) /* * Form a new string by concatenating multiple strings. The arguments must be * terminated by (const char *) 0. * * This function only exists because we can't assume asprintf. We can't * simulate asprintf with snprintf because we're only assuming SUSv3, which * does not require that snprintf with a NULL buffer return the required * length. When those constraints are relaxed, this should be ripped out and * replaced with asprintf or a more trivial replacement with snprintf. */ static char * concat(const char *first, ...) { va_list args; char *result; const char *string; size_t offset; size_t length = 0; /* * Find the total memory required. Ensure we don't overflow length. See * the comment for breallocarray for why we're using UINT_MAX here. */ va_start(args, first); for (string = first; string != NULL; string = va_arg(args, const char *)) { if (length >= UINT_MAX - strlen(string)) bail("strings too long in concat"); length += strlen(string); } va_end(args); length++; /* Create the string. */ result = bmalloc(length); va_start(args, first); offset = 0; for (string = first; string != NULL; string = va_arg(args, const char *)) { memcpy(result + offset, string, strlen(string)); offset += strlen(string); } va_end(args); result[offset] = '\0'; return result; } /* * Check all registered diag_files for any output. We only print out the * output if we see a complete line; otherwise, we wait for the next newline. */ static void check_diag_files(void) { struct diag_file *file; fpos_t where; size_t length; int size, incomplete; /* * Walk through each file and read each line of output available. The * general scheme here used is as follows: try to read a line of output at * a time. If we get NULL, check for EOF; on EOF, advance to the next * file. * * If we get some data, see if it ends in a newline. If it doesn't end in * a newline, we have one of two cases: our buffer isn't large enough, in * which case we resize it and try again, or we have incomplete data in * the file, in which case we rewind the file and will try again next * time. */ for (file = diag_files; file != NULL; file = file->next) { clearerr(file->file); /* Store the current position in case we have to rewind. */ if (fgetpos(file->file, &where) < 0) sysbail("cannot get position in %s", file->name); /* Continue until we get EOF or an incomplete line of data. */ incomplete = 0; while (!feof(file->file) && !incomplete) { size = file->bufsize > INT_MAX ? INT_MAX : (int) file->bufsize; if (fgets(file->buffer, size, file->file) == NULL) { if (ferror(file->file)) sysbail("cannot read from %s", file->name); continue; } /* * See if the line ends in a newline. If not, see which error * case we have. Use UINT_MAX as a substitute for SIZE_MAX (see * the comment for breallocarray). */ length = strlen(file->buffer); if (file->buffer[length - 1] != '\n') { if (length < file->bufsize - 1) incomplete = 1; else { if (file->bufsize >= UINT_MAX - BUFSIZ) sysbail("line too long in %s", file->name); file->bufsize += BUFSIZ; file->buffer = brealloc(file->buffer, file->bufsize); } /* * On either incomplete lines or too small of a buffer, rewind * and read the file again (on the next pass, if incomplete). * It's simpler than trying to double-buffer the file. */ if (fsetpos(file->file, &where) < 0) sysbail("cannot set position in %s", file->name); continue; } /* We saw a complete line. Print it out. */ printf("# %s", file->buffer); } } } /* * Our exit handler. Called on completion of the test to report a summary of * results provided we're still in the original process. This also handles * printing out the plan if we used plan_lazy(), although that's suppressed if * we never ran a test (due to an early bail, for example), and running any * registered cleanup functions. */ static void finish(void) { int success, primary; struct cleanup_func *current; unsigned long highest = testnum - 1; struct diag_file *file, *tmp; /* Check for pending diag_file output. */ check_diag_files(); /* Free the diag_files. */ file = diag_files; while (file != NULL) { tmp = file; file = file->next; fclose(tmp->file); free(tmp->name); free(tmp->buffer); free(tmp); } diag_files = NULL; /* * Determine whether all tests were successful, which is needed before * calling cleanup functions since we pass that fact to the functions. */ if (_planned == 0 && _lazy) _planned = highest; success = (!_aborted && _planned == highest && _failed == 0); /* * If there are any registered cleanup functions, we run those first. We * always run them, even if we didn't run a test. Don't do anything * except free the diag_files and call cleanup functions if we aren't the * primary process (the process in which plan or plan_lazy was called), * and tell the cleanup functions that fact. */ primary = (_process == 0 || getpid() == _process); while (cleanup_funcs != NULL) { cleanup_funcs->func(success, primary); current = cleanup_funcs; cleanup_funcs = cleanup_funcs->next; free(current); } if (!primary) return; /* Don't do anything further if we never planned a test. */ if (_planned == 0) return; /* If we're aborting due to bail, don't print summaries. */ if (_aborted) return; /* Print out the lazy plan if needed. */ fflush(stderr); if (_lazy && _planned > 0) printf("1..%lu\n", _planned); /* Print out a summary of the results. */ if (_planned > highest) diag("Looks like you planned %lu test%s but only ran %lu", _planned, (_planned > 1 ? "s" : ""), highest); else if (_planned < highest) diag("Looks like you planned %lu test%s but ran %lu extra", _planned, (_planned > 1 ? "s" : ""), highest - _planned); else if (_failed > 0) diag("Looks like you failed %lu test%s of %lu", _failed, (_failed > 1 ? "s" : ""), _planned); else if (_planned != 1) diag("All %lu tests successful or skipped", _planned); else diag("%lu test successful or skipped", _planned); } /* * Initialize things. Turns on line buffering on stdout and then prints out * the number of tests in the test suite. We intentionally don't check for * pending diag_file output here, since it should really come after the plan. */ void plan(unsigned long count) { if (setvbuf(stdout, NULL, _IOLBF, BUFSIZ) != 0) sysdiag("cannot set stdout to line buffered"); fflush(stderr); printf("1..%lu\n", count); testnum = 1; _planned = count; _process = getpid(); if (atexit(finish) != 0) { sysdiag("cannot register exit handler"); diag("cleanups will not be run"); } } /* * Initialize things for lazy planning, where we'll automatically print out a * plan at the end of the program. Turns on line buffering on stdout as well. */ void plan_lazy(void) { if (setvbuf(stdout, NULL, _IOLBF, BUFSIZ) != 0) sysdiag("cannot set stdout to line buffered"); testnum = 1; _process = getpid(); _lazy = 1; if (atexit(finish) != 0) sysbail("cannot register exit handler to display plan"); } /* * Skip the entire test suite and exits. Should be called instead of plan(), * not after it, since it prints out a special plan line. Ignore diag_file * output here, since it's not clear if it's allowed before the plan. */ void skip_all(const char *format, ...) { fflush(stderr); printf("1..0 # skip"); PRINT_DESC(" ", format); putchar('\n'); exit(0); } /* * Takes a boolean success value and assumes the test passes if that value * is true and fails if that value is false. */ int ok(int success, const char *format, ...) { fflush(stderr); check_diag_files(); printf("%sok %lu", success ? "" : "not ", testnum++); if (!success) _failed++; PRINT_DESC(" - ", format); putchar('\n'); return success; } /* * Same as ok(), but takes the format arguments as a va_list. */ int okv(int success, const char *format, va_list args) { fflush(stderr); check_diag_files(); printf("%sok %lu", success ? "" : "not ", testnum++); if (!success) _failed++; if (format != NULL) { printf(" - "); vprintf(format, args); } putchar('\n'); return success; } /* * Skip a test. */ void skip(const char *reason, ...) { fflush(stderr); check_diag_files(); printf("ok %lu # skip", testnum++); PRINT_DESC(" ", reason); putchar('\n'); } /* * Report the same status on the next count tests. */ int ok_block(unsigned long count, int success, const char *format, ...) { unsigned long i; fflush(stderr); check_diag_files(); for (i = 0; i < count; i++) { printf("%sok %lu", success ? "" : "not ", testnum++); if (!success) _failed++; PRINT_DESC(" - ", format); putchar('\n'); } return success; } /* * Skip the next count tests. */ void skip_block(unsigned long count, const char *reason, ...) { unsigned long i; fflush(stderr); check_diag_files(); for (i = 0; i < count; i++) { printf("ok %lu # skip", testnum++); PRINT_DESC(" ", reason); putchar('\n'); } } /* * Takes an expected integer and a seen integer and assumes the test passes * if those two numbers match. */ int is_int(long wanted, long seen, const char *format, ...) { int success; fflush(stderr); check_diag_files(); success = (wanted == seen); if (success) printf("ok %lu", testnum++); else { diag("wanted: %ld", wanted); diag(" seen: %ld", seen); printf("not ok %lu", testnum++); _failed++; } PRINT_DESC(" - ", format); putchar('\n'); return success; } /* * Takes a string and what the string should be, and assumes the test passes * if those strings match (using strcmp). */ int is_string(const char *wanted, const char *seen, const char *format, ...) { int success; if (wanted == NULL) wanted = "(null)"; if (seen == NULL) seen = "(null)"; fflush(stderr); check_diag_files(); success = (strcmp(wanted, seen) == 0); if (success) printf("ok %lu", testnum++); else { diag("wanted: %s", wanted); diag(" seen: %s", seen); printf("not ok %lu", testnum++); _failed++; } PRINT_DESC(" - ", format); putchar('\n'); return success; } /* * Takes an expected unsigned long and a seen unsigned long and assumes the * test passes if the two numbers match. Otherwise, reports them in hex. */ int is_hex(unsigned long wanted, unsigned long seen, const char *format, ...) { int success; fflush(stderr); check_diag_files(); success = (wanted == seen); if (success) printf("ok %lu", testnum++); else { diag("wanted: %lx", (unsigned long) wanted); diag(" seen: %lx", (unsigned long) seen); printf("not ok %lu", testnum++); _failed++; } PRINT_DESC(" - ", format); putchar('\n'); return success; } /* * Bail out with an error. */ void bail(const char *format, ...) { va_list args; _aborted = 1; fflush(stderr); check_diag_files(); fflush(stdout); printf("Bail out! "); va_start(args, format); vprintf(format, args); va_end(args); printf("\n"); exit(255); } /* * Bail out with an error, appending strerror(errno). */ void sysbail(const char *format, ...) { va_list args; int oerrno = errno; _aborted = 1; fflush(stderr); check_diag_files(); fflush(stdout); printf("Bail out! "); va_start(args, format); vprintf(format, args); va_end(args); printf(": %s\n", strerror(oerrno)); exit(255); } /* * Report a diagnostic to stderr. Always returns 1 to allow embedding in * compound statements. */ int diag(const char *format, ...) { va_list args; fflush(stderr); check_diag_files(); fflush(stdout); printf("# "); va_start(args, format); vprintf(format, args); va_end(args); printf("\n"); return 1; } /* * Report a diagnostic to stderr, appending strerror(errno). Always returns 1 * to allow embedding in compound statements. */ int sysdiag(const char *format, ...) { va_list args; int oerrno = errno; fflush(stderr); check_diag_files(); fflush(stdout); printf("# "); va_start(args, format); vprintf(format, args); va_end(args); printf(": %s\n", strerror(oerrno)); return 1; } /* * Register a new file for diag_file processing. */ void diag_file_add(const char *name) { struct diag_file *file, *prev; file = bcalloc(1, sizeof(struct diag_file)); file->name = bstrdup(name); file->file = fopen(file->name, "r"); if (file->file == NULL) sysbail("cannot open %s", name); file->buffer = bmalloc(BUFSIZ); file->bufsize = BUFSIZ; if (diag_files == NULL) diag_files = file; else { for (prev = diag_files; prev->next != NULL; prev = prev->next) ; prev->next = file; } } /* * Remove a file from diag_file processing. If the file is not found, do * nothing, since there are some situations where it can be removed twice * (such as if it's removed from a cleanup function, since cleanup functions * are called after freeing all the diag_files). */ void diag_file_remove(const char *name) { struct diag_file *file; struct diag_file **prev = &diag_files; for (file = diag_files; file != NULL; file = file->next) { if (strcmp(file->name, name) == 0) { *prev = file->next; fclose(file->file); free(file->name); free(file->buffer); free(file); return; } prev = &file->next; } } /* * Allocate cleared memory, reporting a fatal error with bail on failure. */ void * bcalloc(size_t n, size_t size) { void *p; p = calloc(n, size); if (p == NULL) sysbail("failed to calloc %lu", (unsigned long)(n * size)); return p; } /* * Allocate memory, reporting a fatal error with bail on failure. */ void * bmalloc(size_t size) { void *p; p = malloc(size); if (p == NULL) sysbail("failed to malloc %lu", (unsigned long) size); return p; } /* * Reallocate memory, reporting a fatal error with bail on failure. */ void * brealloc(void *p, size_t size) { p = realloc(p, size); if (p == NULL) sysbail("failed to realloc %lu bytes", (unsigned long) size); return p; } /* * The same as brealloc, but determine the size by multiplying an element * count by a size, similar to calloc. The multiplication is checked for * integer overflow. * * We should technically use SIZE_MAX here for the overflow check, but * SIZE_MAX is C99 and we're only assuming C89 + SUSv3, which does not * guarantee that it exists. They do guarantee that UINT_MAX exists, and we * can assume that UINT_MAX <= SIZE_MAX. * * (In theory, C89 and C99 permit size_t to be smaller than unsigned int, but * I disbelieve in the existence of such systems and they will have to cope * without overflow checks.) */ void * breallocarray(void *p, size_t n, size_t size) { if (n > 0 && UINT_MAX / n <= size) bail("reallocarray too large"); p = realloc(p, n * size); if (p == NULL) sysbail("failed to realloc %lu bytes", (unsigned long) (n * size)); return p; } /* * Copy a string, reporting a fatal error with bail on failure. */ char * bstrdup(const char *s) { char *p; size_t len; len = strlen(s) + 1; p = malloc(len); if (p == NULL) sysbail("failed to strdup %lu bytes", (unsigned long) len); memcpy(p, s, len); return p; } /* * Copy up to n characters of a string, reporting a fatal error with bail on * failure. Don't use the system strndup function, since it may not exist and * the TAP library doesn't assume any portability support. */ char * bstrndup(const char *s, size_t n) { const char *p; char *copy; size_t length; /* Don't assume that the source string is nul-terminated. */ for (p = s; (size_t) (p - s) < n && *p != '\0'; p++) ; length = (size_t) (p - s); copy = malloc(length + 1); if (p == NULL) sysbail("failed to strndup %lu bytes", (unsigned long) length); memcpy(copy, s, length); copy[length] = '\0'; return copy; } /* * Locate a test file. Given the partial path to a file, look under BUILD and * then SOURCE for the file and return the full path to the file. Returns * NULL if the file doesn't exist. A non-NULL return should be freed with * test_file_path_free(). */ char * test_file_path(const char *file) { char *base; char *path = NULL; const char *envs[] = { "BUILD", "SOURCE", NULL }; int i; for (i = 0; envs[i] != NULL; i++) { base = getenv(envs[i]); if (base == NULL) continue; path = concat(base, "/", file, (const char *) 0); if (access(path, R_OK) == 0) break; free(path); path = NULL; } return path; } /* * Free a path returned from test_file_path(). This function exists primarily * for Windows, where memory must be freed from the same library domain that * it was allocated from. */ void test_file_path_free(char *path) { free(path); } /* * Create a temporary directory, tmp, under BUILD if set and the current * directory if it does not. Returns the path to the temporary directory in * newly allocated memory, and calls bail on any failure. The return value * should be freed with test_tmpdir_free. * * This function uses sprintf because it attempts to be independent of all * other portability layers. The use immediately after a memory allocation * should be safe without using snprintf or strlcpy/strlcat. */ char * test_tmpdir(void) { const char *build; char *path = NULL; build = getenv("BUILD"); if (build == NULL) build = "."; path = concat(build, "/tmp", (const char *) 0); if (access(path, X_OK) < 0) if (mkdir(path, 0777) < 0) sysbail("error creating temporary directory %s", path); return path; } /* * Free a path returned from test_tmpdir() and attempt to remove the * directory. If we can't delete the directory, don't worry; something else * that hasn't yet cleaned up may still be using it. */ void test_tmpdir_free(char *path) { if (path != NULL) rmdir(path); free(path); } /* * Register a cleanup function that is called when testing ends. All such * registered functions will be run by finish. */ void test_cleanup_register(test_cleanup_func func) { struct cleanup_func *cleanup, **last; cleanup = bmalloc(sizeof(struct cleanup_func)); cleanup->func = func; cleanup->next = NULL; last = &cleanup_funcs; while (*last != NULL) last = &(*last)->next; *last = cleanup; } hkl-5.0.0.2449/tests/tap/basic.h0000644000175000017500000001544213211074266016303 0ustar00piccapicca00000000000000/* * Basic utility routines for the TAP protocol. * * This file is part of C TAP Harness. The current version plus supporting * documentation is at . * * Copyright 2009, 2010, 2011, 2012, 2013, 2014, 2015 * Russ Allbery * Copyright 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2011, 2012, 2014 * The Board of Trustees of the Leland Stanford Junior University * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ #ifndef TAP_BASIC_H #define TAP_BASIC_H 1 #include #include /* va_list */ #include /* size_t */ /* * Used for iterating through arrays. ARRAY_SIZE returns the number of * elements in the array (useful for a < upper bound in a for loop) and * ARRAY_END returns a pointer to the element past the end (ISO C99 makes it * legal to refer to such a pointer as long as it's never dereferenced). */ #define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0])) #define ARRAY_END(array) (&(array)[ARRAY_SIZE(array)]) BEGIN_DECLS /* * The test count. Always contains the number that will be used for the next * test status. */ extern unsigned long testnum; /* Print out the number of tests and set standard output to line buffered. */ void plan(unsigned long count); /* * Prepare for lazy planning, in which the plan will be printed automatically * at the end of the test program. */ void plan_lazy(void); /* Skip the entire test suite. Call instead of plan. */ void skip_all(const char *format, ...) __attribute__((__noreturn__, __format__(printf, 1, 2))); /* * Basic reporting functions. The okv() function is the same as ok() but * takes the test description as a va_list to make it easier to reuse the * reporting infrastructure when writing new tests. ok() and okv() return the * value of the success argument. */ int ok(int success, const char *format, ...) __attribute__((__format__(printf, 2, 3))); int okv(int success, const char *format, va_list args) __attribute__((__format__(printf, 2, 0))); void skip(const char *reason, ...) __attribute__((__format__(printf, 1, 2))); /* * Report the same status on, or skip, the next count tests. ok_block() * returns the value of the success argument. */ int ok_block(unsigned long count, int success, const char *format, ...) __attribute__((__format__(printf, 3, 4))); void skip_block(unsigned long count, const char *reason, ...) __attribute__((__format__(printf, 2, 3))); /* * Check an expected value against a seen value. Returns true if the test * passes and false if it fails. */ int is_int(long wanted, long seen, const char *format, ...) __attribute__((__format__(printf, 3, 4))); int is_string(const char *wanted, const char *seen, const char *format, ...) __attribute__((__format__(printf, 3, 4))); int is_hex(unsigned long wanted, unsigned long seen, const char *format, ...) __attribute__((__format__(printf, 3, 4))); /* Bail out with an error. sysbail appends strerror(errno). */ void bail(const char *format, ...) __attribute__((__noreturn__, __nonnull__, __format__(printf, 1, 2))); void sysbail(const char *format, ...) __attribute__((__noreturn__, __nonnull__, __format__(printf, 1, 2))); /* Report a diagnostic to stderr prefixed with #. */ int diag(const char *format, ...) __attribute__((__nonnull__, __format__(printf, 1, 2))); int sysdiag(const char *format, ...) __attribute__((__nonnull__, __format__(printf, 1, 2))); /* * Register or unregister a file that contains supplementary diagnostics. * Before any other output, all registered files will be read, line by line, * and each line will be reported as a diagnostic as if it were passed to * diag(). Nul characters are not supported in these files and will result in * truncated output. */ void diag_file_add(const char *file) __attribute__((__nonnull__)); void diag_file_remove(const char *file) __attribute__((__nonnull__)); /* Allocate memory, reporting a fatal error with bail on failure. */ void *bcalloc(size_t, size_t) __attribute__((__alloc_size__(1, 2), __malloc__, __warn_unused_result__)); void *bmalloc(size_t) __attribute__((__alloc_size__(1), __malloc__, __warn_unused_result__)); void *breallocarray(void *, size_t, size_t) __attribute__((__alloc_size__(2, 3), __malloc__, __warn_unused_result__)); void *brealloc(void *, size_t) __attribute__((__alloc_size__(2), __malloc__, __warn_unused_result__)); char *bstrdup(const char *) __attribute__((__malloc__, __nonnull__, __warn_unused_result__)); char *bstrndup(const char *, size_t) __attribute__((__malloc__, __nonnull__, __warn_unused_result__)); /* * Find a test file under BUILD or SOURCE, returning the full path. The * returned path should be freed with test_file_path_free(). */ char *test_file_path(const char *file) __attribute__((__malloc__, __nonnull__, __warn_unused_result__)); void test_file_path_free(char *path); /* * Create a temporary directory relative to BUILD and return the path. The * returned path should be freed with test_tmpdir_free. */ char *test_tmpdir(void) __attribute__((__malloc__, __warn_unused_result__)); void test_tmpdir_free(char *path); /* * Register a cleanup function that is called when testing ends. All such * registered functions will be run during atexit handling (and are therefore * subject to all the same constraints and caveats as atexit functions). * * The function must return void and will be passed two arguments: an int that * will be true if the test completed successfully and false otherwise, and an * int that will be true if the cleanup function is run in the primary process * (the one that called plan or plan_lazy) and false otherwise. */ typedef void (*test_cleanup_func)(int, int); void test_cleanup_register(test_cleanup_func) __attribute__((__nonnull__)); END_DECLS #endif /* TAP_BASIC_H */ hkl-5.0.0.2449/tests/tap/Makefile.in0000644000175000017500000004650413237017635017126 0ustar00piccapicca00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = tests/tap ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libtap_a_AR = $(AR) $(ARFLAGS) libtap_a_LIBADD = am_libtap_a_OBJECTS = basic.$(OBJEXT) float.$(OBJEXT) \ hkl-tap.$(OBJEXT) libtap_a_OBJECTS = $(am_libtap_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libtap_a_SOURCES) DIST_SOURCES = $(libtap_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASY = @ASY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BULLET_CFLAGS = @BULLET_CFLAGS@ BULLET_LIBS = @BULLET_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMACS = @EMACS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ G3D_CFLAGS = @G3D_CFLAGS@ G3D_LIBS = @G3D_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GNUPLOT = @GNUPLOT@ GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ GOBJECT_LIBS = @GOBJECT_LIBS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTKGLEXT_CFLAGS = @GTKGLEXT_CFLAGS@ GTKGLEXT_LIBS = @GTKGLEXT_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HDF5_CFLAGS = @HDF5_CFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VMAJ = @VMAJ@ YAML_CFLAGS = @YAML_CFLAGS@ YAML_LIBS = @YAML_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ release_info = @release_info@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ version_info = @version_info@ AM_CFLAGS = \ -I$(top_srcdir) \ -I$(abs_top_srcdir)/tests \ $(GLIB_CFLAGS) \ $(GSL_CFLAGS) check_LIBRARIES = libtap.a libtap_a_SOURCES = \ basic.c \ basic.h \ float.h \ float.c \ macros.h \ hkl-tap.h \ hkl-tap.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/tap/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/tap/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkLIBRARIES: -test -z "$(check_LIBRARIES)" || rm -f $(check_LIBRARIES) libtap.a: $(libtap_a_OBJECTS) $(libtap_a_DEPENDENCIES) $(EXTRA_libtap_a_DEPENDENCIES) $(AM_V_at)-rm -f libtap.a $(AM_V_AR)$(libtap_a_AR) libtap.a $(libtap_a_OBJECTS) $(libtap_a_LIBADD) $(AM_V_at)$(RANLIB) libtap.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/float.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-tap.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_LIBRARIES) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-checkLIBRARIES clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Support for GNU Flymake, in Emacs. check-syntax: AM_CFLAGS += -fsyntax-only -pipe check-syntax: test -z "$(CHK_SOURCES)" || $(COMPILE) $(CHK_SOURCES) .PHONY: check-syntax # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: hkl-5.0.0.2449/tests/tap/float.h0000644000175000017500000000323312774775077016347 0ustar00piccapicca00000000000000/* * Floating point check function for the TAP protocol. * * This file is part of C TAP Harness. The current version plus supporting * documentation is at . * * Copyright 2008, 2010, 2012, 2014 Russ Allbery * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ #ifndef TAP_FLOAT_H #define TAP_FLOAT_H 1 #include BEGIN_DECLS /* Check an expected value against a seen value within epsilon. */ int is_double(double wanted, double seen, double epsilon, const char *format, ...) __attribute__((__format__(printf, 4, 5))); END_DECLS #endif /* TAP_FLOAT_H */ hkl-5.0.0.2449/tests/tap/hkl-tap.c0000644000175000017500000001077513211064432016553 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2012 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include #include "basic.h" #include "hkl-tap.h" #include "hkl/hkl-matrix-private.h" #include "hkl/hkl-macros-private.h" #include "hkl/hkl-pseudoaxis-private.h" void is_quaternion(const HklQuaternion *wanted, const HklQuaternion *seen, const char *format, ...) { va_list args; va_start(args, format); fflush(stderr); if(TRUE == hkl_quaternion_cmp(wanted, seen)) okv(1, format, args); else{ printf("# wanted: %g %g %g %g\n", wanted->data[0], wanted->data[1], wanted->data[2], wanted->data[3]); printf("# seen: %g %g %g %g\n", seen->data[0], seen->data[1], seen->data[2], wanted->data[3]); okv(0, format, args); } } void is_matrix(const HklMatrix *wanted, const HklMatrix *seen, const char *format, ...) { va_list args; va_start(args, format); fflush(stderr); if(TRUE == hkl_matrix_cmp(wanted, seen)) okv(1, format, args); else{ printf("# wanted: %g %g %g\n# : %g %g %g\n# : %g %g %g\n", wanted->data[0][0], wanted->data[0][1], wanted->data[0][2], wanted->data[1][0], wanted->data[1][1], wanted->data[1][2], wanted->data[2][0], wanted->data[2][1], wanted->data[2][2]); printf("# seen: %g %g %g\n# : %g %g %g\n# : %g %g %g\n", seen->data[0][0], seen->data[0][1], seen->data[0][2], seen->data[1][0], seen->data[1][1], seen->data[1][2], seen->data[2][0], seen->data[2][1], seen->data[2][2]); okv(0, format, args); } } int check_pseudoaxes_v(HklEngine *engine, ...) { uint i; va_list ap; unsigned int len = hkl_engine_len(engine); double values[len]; /* extract the variable part of the method */ va_start(ap, engine); for(i=0; ipseudo_axes, i); hkl_parameter_randomize(parameter); values[i] = hkl_parameter_value_get(parameter, unit_type); } } /** * hkl_tap_engine_parameters_randomize: (skip) * @self: the this ptr * * randomize all the parameters of the #HklEngine **/ void hkl_tap_engine_parameters_randomize(HklEngine *self) { HklParameter **parameter; darray_foreach(parameter, self->mode->parameters){ hkl_parameter_randomize(*parameter); } } hkl-5.0.0.2449/tests/hkl-matrix-t.c0000644000175000017500000001014513236600666016753 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl.h" #include #include #include "hkl-vector-private.h" #include "hkl-matrix-private.h" /* we will check also the private API */ static void init(void) { HklMatrix m; hkl_matrix_init(&m, 1, 1, 0, 0, 1, 0, 0, 0, 1); is_double(1., m.data[0][0], HKL_EPSILON, __func__); is_double(1., m.data[0][1], HKL_EPSILON, __func__); is_double(0., m.data[0][2], HKL_EPSILON, __func__); is_double(0., m.data[1][0], HKL_EPSILON, __func__); is_double(1., m.data[1][1], HKL_EPSILON, __func__); is_double(0., m.data[1][2], HKL_EPSILON, __func__); is_double(0., m.data[2][0], HKL_EPSILON, __func__); is_double(0., m.data[2][1], HKL_EPSILON, __func__); is_double(1., m.data[2][2], HKL_EPSILON, __func__); } static void cmp(void) { HklMatrix m1 = {{{0.0, 1.0, 2.0}, {3.0, 4.0, 5.0}, {6.0, 7.0, 8.0}}}; HklMatrix m2 = {{{1.0, 1.0, 2.0}, {3.0, 4.0, 5.0}, {6.0, 7.0, 8.0}}}; ok(TRUE == hkl_matrix_cmp(&m1, &m1), __func__); ok(FALSE == hkl_matrix_cmp(&m1, &m2), __func__); } static void dup(void) { HklMatrix m1 = {{{0.0, 1.0, 2.0}, {3.0, 4.0, 5.0}, {6.0, 7.0, 8.0}}}; HklMatrix *m; m = hkl_matrix_dup(&m1); ok(TRUE == hkl_matrix_cmp(&m1, m), __func__); hkl_matrix_free(m); } static void assignement(void) { HklMatrix m1 = {{{0.0, 1.0, 2.0}, {3.0, 4.0, 5.0}, {6.0, 7.0, 8.0}}}; HklMatrix m; m = m1; ok(TRUE == hkl_matrix_cmp(&m1, &m), __func__); } static void init_from_euler(void) { HklMatrix m_ref = {{{ 1./2., -1./2., sqrt(2)/2.}, { sqrt(2.)/4.+1./2., -sqrt(2.)/4.+1./2., -1./2.}, {-sqrt(2.)/4.+1./2., sqrt(2.)/4.+1./2., 1./2.}}}; HklMatrix m; hkl_matrix_init_from_euler(&m, 45.*HKL_DEGTORAD, 45.*HKL_DEGTORAD, 45.*HKL_DEGTORAD); ok(TRUE == hkl_matrix_cmp(&m_ref, &m), __func__); } static void init_from_two_vector(void) { HklVector v1 = {{0.0, 1.0, 2.0}}; HklVector v2 = {{1.0, 2.0, 3.0}}; HklMatrix m_ref = {{{0.0, 5.0 / sqrt(30.0), -1.0 / sqrt(6.0)}, {1.0 / sqrt(5.0), 2.0 / sqrt(30.0), 2.0 / sqrt(6.0)}, {2.0 / sqrt(5.0),-1.0 / sqrt(30.0), -1.0 / sqrt(6.0)}} }; HklMatrix m; hkl_matrix_init_from_two_vector(&m, &v1, &v2); ok(TRUE == hkl_matrix_cmp(&m_ref, &m), __func__); } static void times_vector(void) { HklMatrix m = {{{ 1.0, 3.0,-2.0}, {10.0, 5.0, 5.0}, {-3.0, 2.0, 0.0}} }; HklVector v = {{1, 2, 3}}; HklVector v_ref = {{1, 35, 1}}; hkl_matrix_times_vector(&m, &v); ok(0 == hkl_vector_cmp(&v_ref, &v), __func__); } static void times_matrix(void) { HklMatrix m_ref = {{{37., 14., 13.}, {45., 65., 5.}, {17., 1., 16.}} }; HklMatrix m = {{{ 1., 3.,-2.}, {10., 5., 5.}, {-3., 2., 0.}} }; hkl_matrix_times_matrix(&m, &m); ok(TRUE == hkl_matrix_cmp(&m_ref, &m), __func__); } static void transpose(void) { HklMatrix m_ref = {{{37., 14., 13.}, {45., 65., 5.}, {17., 1., 16.}} }; HklMatrix m = {{{37., 45., 17.}, {14., 65., 1.}, {13., 5., 16.}} }; hkl_matrix_transpose(&m); ok(TRUE == hkl_matrix_cmp(&m_ref, &m), __func__); } int main(void) { plan(18); init(); cmp(); dup(); assignement(); init_from_euler(); init_from_two_vector(); times_vector(); times_matrix(); transpose(); return 0; } hkl-5.0.0.2449/tests/hkl-pseudoaxis-e4cv-t.c0000644000175000017500000002507613236600666020503 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl.h" #include #include static void getter(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; HklGeometry *geometry; HklDetector *detector; HklSample *sample; struct Geometry gconf = E4cv(1.54, 30., 0., 0., 60.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "hkl", NULL); /* geometry -> pseudo */ res &= DIAG(hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 0., 0., 60.)); res &= DIAG(check_pseudoaxes_v(engine, 0., 0., 1.)); res &= DIAG(hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 0., 90., 60.)); res &= DIAG(check_pseudoaxes_v(engine, 1., 0., 0.)); res &= DIAG(hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 0., -90., 60.)); res &= DIAG(check_pseudoaxes_v(engine, -1., 0., 0.)); res &= DIAG(hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 0., 180., 60.)); res &= DIAG(check_pseudoaxes_v(engine, 0., 0., -1.)); res &= DIAG(hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 45., 0., 135., 90.)); res &= DIAG(check_pseudoaxes_v(engine, 1., 0., -1.)); ok(res == TRUE, "getter"); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } static void degenerated(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; const char **mode; const darray_string *modes; HklGeometry *geometry; HklDetector *detector; HklSample *sample; struct Geometry gconf = E4cv(1.54, 30., 0., 0., 60.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "hkl", NULL); modes = hkl_engine_modes_names_get(engine); darray_foreach(mode, *modes){ static double values[] = {0, 0, 1}; HklGeometryList *geometries; size_t n_params; res &= DIAG(hkl_engine_current_mode_set(engine, *mode, NULL)); const darray_string *parameters = hkl_engine_parameters_names_get(engine); n_params = darray_size(*parameters); if (n_params){ double params[n_params]; hkl_engine_parameters_values_get(engine, params, n_params, HKL_UNIT_DEFAULT); params[0] = 0; res &= DIAG(hkl_engine_parameters_values_set(engine, params, n_params, HKL_UNIT_DEFAULT, NULL)); } /* studdy this degenerated case */ geometries = hkl_engine_pseudo_axis_values_set(engine, values, 3, HKL_UNIT_DEFAULT, NULL); if(geometries){ const HklGeometryListItem *item; HKL_GEOMETRY_LIST_FOREACH(item, geometries){ hkl_geometry_set(geometry, hkl_geometry_list_item_geometry_get(item)); res &= DIAG(check_pseudoaxes(engine, values, ARRAY_SIZE(values))); } hkl_geometry_list_free(geometries); } } ok(res == TRUE, "degenerated"); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } static void psi_getter(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; HklGeometry *geometry; HklDetector *detector; HklSample *sample; double hkl[3]; struct Geometry gconf = E4cv(1.54, 30., 0., 0., 60.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "psi", NULL); /* the getter part */ res &= DIAG(hkl_engine_initialized_set(engine, TRUE, NULL)); /* 1 0 0 */ hkl[0] = 1, hkl[1] = 0, hkl[2] = 0; res &= DIAG(hkl_engine_parameters_values_set(engine, hkl, ARRAY_SIZE(hkl), HKL_UNIT_DEFAULT, NULL)); res &= DIAG(check_pseudoaxes_v(engine, 0.)); /* 0 1 0*/ hkl[0] = 0, hkl[1] = 1, hkl[2] = 0; res &= DIAG(hkl_engine_parameters_values_set(engine, hkl, ARRAY_SIZE(hkl), HKL_UNIT_DEFAULT, NULL)); res &= DIAG(check_pseudoaxes_v(engine, 90. * HKL_DEGTORAD)); /* here Q and _ref are colinear must FAIL */ hkl[0] = 0, hkl[1] = 0, hkl[2] = 1; res &= DIAG(hkl_engine_parameters_values_set(engine, hkl, ARRAY_SIZE(hkl), HKL_UNIT_DEFAULT, NULL)); res &= DIAG(!check_pseudoaxes_v(engine, 0. * HKL_DEGTORAD)); /* -1 0 0 */ hkl[0] = -1, hkl[1] = 0, hkl[2] = 0; res &= DIAG(hkl_engine_parameters_values_set(engine, hkl, ARRAY_SIZE(hkl), HKL_UNIT_DEFAULT, NULL)); res &= DIAG(check_pseudoaxes_v(engine, 180. * HKL_DEGTORAD)); /* 0 -1 0 */ hkl[0] = 0, hkl[1] = -1, hkl[2] = 0; res &= DIAG(hkl_engine_parameters_values_set(engine, hkl, ARRAY_SIZE(hkl), HKL_UNIT_DEFAULT, NULL)); res &= DIAG(check_pseudoaxes_v(engine, -90. * HKL_DEGTORAD)); /* Q and _ref are colinear so must FAIL */ hkl[0] = 0, hkl[1] = 0, hkl[2] = -1; res &= DIAG(hkl_engine_parameters_values_set(engine, hkl, ARRAY_SIZE(hkl), HKL_UNIT_DEFAULT, NULL)); res &= DIAG(!check_pseudoaxes_v(engine, 0. * HKL_DEGTORAD)); ok(res == TRUE, "psi getter"); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } static void psi_setter(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; const darray_string *modes; const char **mode; HklGeometry *geometry; HklDetector *detector; HklSample *sample; static double hkl[] = {1, 0, 0}; struct Geometry gconf = E4cv(1.54, 30., 0., 0., 60.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "psi", NULL); modes = hkl_engine_modes_names_get(engine); /* the init part */ res &= DIAG(hkl_engine_parameters_values_set(engine, hkl, ARRAY_SIZE(hkl), HKL_UNIT_DEFAULT, NULL)); res &= DIAG(hkl_engine_initialized_set(engine, TRUE, NULL)); darray_foreach(mode, *modes){ double psi; res &= DIAG(hkl_engine_current_mode_set(engine, *mode, NULL)); for(psi=-180 * HKL_DEGTORAD;psi<180 * HKL_DEGTORAD;psi += HKL_DEGTORAD){ HklGeometryList *geometries; geometries = hkl_engine_pseudo_axis_values_set(engine, &psi, 1, HKL_UNIT_DEFAULT, NULL); if(geometries){ const HklGeometryListItem *item; HKL_GEOMETRY_LIST_FOREACH(item, geometries){ hkl_geometry_set(geometry, hkl_geometry_list_item_geometry_get(item)); res &= DIAG(check_pseudoaxes_v(engine, psi)); } hkl_geometry_list_free(geometries); } } } ok(res == TRUE, "psi setter"); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } static void q(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; const darray_string *modes; const char **mode; HklGeometry *geometry; HklDetector *detector; HklSample *sample; struct Geometry gconf = E4cv(1.54, 30., 0., 0., 60.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "q", NULL); modes = hkl_engine_modes_names_get(engine); /* the init part */ res &= DIAG(hkl_engine_initialized_set(engine, TRUE, NULL)); darray_foreach(mode, *modes){ double q; res &= DIAG(hkl_engine_current_mode_set(engine, *mode, NULL)); for(q=-1.; q<1.; q += 0.1){ HklGeometryList *geometries; geometries = hkl_engine_pseudo_axis_values_set(engine, &q, 1, HKL_UNIT_DEFAULT, NULL); if(geometries){ const HklGeometryListItem *item; HKL_GEOMETRY_LIST_FOREACH(item, geometries){ hkl_geometry_set(geometry, hkl_geometry_list_item_geometry_get(item)); res &= DIAG(check_pseudoaxes(engine, &q, 1)); } hkl_geometry_list_free(geometries); } } } ok(res == TRUE, "q"); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } static void hkl_psi_constant_vertical(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; HklGeometry *geometry; HklGeometryList *geometries; HklDetector *detector; HklSample *sample; static double hkl[] = {1, 0, 1}; static double hkl2[] = {1, 1, 0}; struct Geometry gconf = E4cv(1.54, 30., 0., 0., 60.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "hkl", NULL); res &= DIAG(hkl_engine_current_mode_set(engine, "psi_constant", NULL)); /* the init part */ res &= DIAG(hkl_engine_parameters_values_set(engine, hkl2, ARRAY_SIZE(hkl2), HKL_UNIT_DEFAULT, NULL)); res &= DIAG(hkl_engine_initialized_set(engine, TRUE, NULL)); geometries = hkl_engine_pseudo_axis_values_set(engine, hkl, ARRAY_SIZE(hkl), HKL_UNIT_DEFAULT, NULL); if(geometries){ const HklGeometryListItem *item; HKL_GEOMETRY_LIST_FOREACH(item, geometries){ hkl_geometry_set(geometry, hkl_geometry_list_item_geometry_get(item)); res &= DIAG(check_pseudoaxes(engine, hkl, ARRAY_SIZE(hkl))); } hkl_geometry_list_free(geometries); } ok(res == TRUE, "psi constant vertical"); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } int main(void) { plan(6); getter(); degenerated(); psi_getter(); psi_setter(); q(); hkl_psi_constant_vertical(); return 0; } hkl-5.0.0.2449/tests/hkl-pseudoaxis-soleil-sirius-kappa-t.c0000644000175000017500000000604013236600666023525 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include #include #include #include "hkl/ccan/generator/generator.h" #include "hkl-geometry-private.h" #include "hkl-trajectory-private.h" /* tests */ static void stability(void) { int res = TRUE; HklGeometryList *solutions; struct Sample gaas = { .name = "GaAs", .lattice = Cubic(5.6533), .ux = -90.003382 * HKL_DEGTORAD, .uy = 0.12907 * HKL_DEGTORAD, .uz = -159.91372 * HKL_DEGTORAD, }; struct Geometry gconfig = \ SoleilSiriusKappa(1.458637, -0.5193202, 64.7853160, 133.5621380, -80.9690000, -0.0223369, 30.0000299); struct Geometry gconfig2 = \ SoleilSiriusKappa(1.458637, -0.5193202, 64.7853160, 133.5621380, 124.9690000, -0.0223369, 30.0000299); struct Mode mode = ModeHklBissectorVertical; /* move between each step */ struct Trajectory tconfig1 = TrajectoryHklFromTo(0, 0, 1, 0, 0, 6, 11, mode); solutions = Trajectory_solve(tconfig1, gconfig, gaas, TRUE); res &= DIAG(NULL != solutions); hkl_geometry_list_free(solutions); solutions = Trajectory_solve(tconfig1, gconfig, gaas, TRUE); res &= DIAG(NULL != solutions); hkl_geometry_list_free(solutions); struct Trajectory tconfig2 = TrajectoryHklFromTo(0, 0, 1, 0, 0, 6, 101, mode); solutions = Trajectory_solve(tconfig2, gconfig, gaas, TRUE); res &= DIAG(NULL != solutions); hkl_geometry_list_free(solutions); solutions = Trajectory_solve(tconfig2, gconfig2, gaas, TRUE); res &= DIAG(NULL != solutions); hkl_geometry_list_free(solutions); /* do not move between each steps */ solutions = Trajectory_solve(tconfig1, gconfig, gaas, FALSE); res &= DIAG(NULL != solutions); hkl_geometry_list_free(solutions); solutions = Trajectory_solve(tconfig1, gconfig, gaas, FALSE); res &= DIAG(NULL != solutions); hkl_geometry_list_free(solutions); solutions = Trajectory_solve(tconfig2, gconfig, gaas, FALSE); res &= DIAG(NULL != solutions); hkl_geometry_list_free(solutions); solutions = Trajectory_solve(tconfig2, gconfig2, gaas, FALSE); res &= DIAG(NULL != solutions); hkl_geometry_list_free(solutions); ok(res == TRUE, __func__); } int main(void) { plan(1); stability(); return 0; } hkl-5.0.0.2449/tests/Makefile.in0000644000175000017500000013142113237017634016332 0ustar00piccapicca00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_INTROSPECTION_TRUE@am__append_1 = bindings @HKL3D_TRUE@am__append_2 = hkl3d-test-t @HKL3D_TRUE@am__append_3 = -I$(top_srcdir)/hkl3d \ @HKL3D_TRUE@ $(G3D_CFLAGS) \ @HKL3D_TRUE@ $(BULLET_CFLAGS) @HKL3D_TRUE@am__append_4 = $(top_builddir)/hkl3d/libhkl3d.la \ @HKL3D_TRUE@ $(BULLET_LIBS) check_PROGRAMS = runtests$(EXEEXT) $(am__EXEEXT_2) subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = @HKL3D_TRUE@am__EXEEXT_1 = hkl3d-test-t$(EXEEXT) am__EXEEXT_2 = hkl-unit-t$(EXEEXT) hkl-bench-t$(EXEEXT) \ hkl-axis-t$(EXEEXT) hkl-quaternion-t$(EXEEXT) \ hkl-interval-t$(EXEEXT) hkl-sample-t$(EXEEXT) \ hkl-lattice-t$(EXEEXT) hkl-source-t$(EXEEXT) \ hkl-detector-t$(EXEEXT) hkl-matrix-t$(EXEEXT) \ hkl-vector-t$(EXEEXT) hkl-geometry-t$(EXEEXT) \ hkl-parameter-t$(EXEEXT) hkl-pseudoaxis-t$(EXEEXT) \ hkl-pseudoaxis-e4cv-t$(EXEEXT) hkl-pseudoaxis-e4ch-t$(EXEEXT) \ hkl-pseudoaxis-e6c-t$(EXEEXT) hkl-pseudoaxis-k4cv-t$(EXEEXT) \ hkl-pseudoaxis-k6c-t$(EXEEXT) \ hkl-pseudoaxis-soleil-sirius-kappa-t$(EXEEXT) \ hkl-pseudoaxis-soleil-sixs-med-t$(EXEEXT) \ hkl-pseudoaxis-zaxis-t$(EXEEXT) $(am__EXEEXT_1) hkl_axis_t_SOURCES = hkl-axis-t.c hkl_axis_t_OBJECTS = hkl-axis-t.$(OBJEXT) hkl_axis_t_LDADD = $(LDADD) am__DEPENDENCIES_1 = @HKL3D_TRUE@am__DEPENDENCIES_2 = $(top_builddir)/hkl3d/libhkl3d.la \ @HKL3D_TRUE@ $(am__DEPENDENCIES_1) hkl_axis_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = hkl_bench_t_SOURCES = hkl-bench-t.c hkl_bench_t_OBJECTS = hkl-bench-t.$(OBJEXT) hkl_bench_t_LDADD = $(LDADD) hkl_bench_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_detector_t_SOURCES = hkl-detector-t.c hkl_detector_t_OBJECTS = hkl-detector-t.$(OBJEXT) hkl_detector_t_LDADD = $(LDADD) hkl_detector_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_geometry_t_SOURCES = hkl-geometry-t.c hkl_geometry_t_OBJECTS = hkl-geometry-t.$(OBJEXT) hkl_geometry_t_LDADD = $(LDADD) hkl_geometry_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_interval_t_SOURCES = hkl-interval-t.c hkl_interval_t_OBJECTS = hkl-interval-t.$(OBJEXT) hkl_interval_t_LDADD = $(LDADD) hkl_interval_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_lattice_t_SOURCES = hkl-lattice-t.c hkl_lattice_t_OBJECTS = hkl-lattice-t.$(OBJEXT) hkl_lattice_t_LDADD = $(LDADD) hkl_lattice_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_matrix_t_SOURCES = hkl-matrix-t.c hkl_matrix_t_OBJECTS = hkl-matrix-t.$(OBJEXT) hkl_matrix_t_LDADD = $(LDADD) hkl_matrix_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_parameter_t_SOURCES = hkl-parameter-t.c hkl_parameter_t_OBJECTS = hkl-parameter-t.$(OBJEXT) hkl_parameter_t_LDADD = $(LDADD) hkl_parameter_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_pseudoaxis_e4ch_t_SOURCES = hkl-pseudoaxis-e4ch-t.c hkl_pseudoaxis_e4ch_t_OBJECTS = hkl-pseudoaxis-e4ch-t.$(OBJEXT) hkl_pseudoaxis_e4ch_t_LDADD = $(LDADD) hkl_pseudoaxis_e4ch_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_pseudoaxis_e4cv_t_SOURCES = hkl-pseudoaxis-e4cv-t.c hkl_pseudoaxis_e4cv_t_OBJECTS = hkl-pseudoaxis-e4cv-t.$(OBJEXT) hkl_pseudoaxis_e4cv_t_LDADD = $(LDADD) hkl_pseudoaxis_e4cv_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_pseudoaxis_e6c_t_SOURCES = hkl-pseudoaxis-e6c-t.c hkl_pseudoaxis_e6c_t_OBJECTS = hkl-pseudoaxis-e6c-t.$(OBJEXT) hkl_pseudoaxis_e6c_t_LDADD = $(LDADD) hkl_pseudoaxis_e6c_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_pseudoaxis_k4cv_t_SOURCES = hkl-pseudoaxis-k4cv-t.c hkl_pseudoaxis_k4cv_t_OBJECTS = hkl-pseudoaxis-k4cv-t.$(OBJEXT) hkl_pseudoaxis_k4cv_t_LDADD = $(LDADD) hkl_pseudoaxis_k4cv_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_pseudoaxis_k6c_t_SOURCES = hkl-pseudoaxis-k6c-t.c hkl_pseudoaxis_k6c_t_OBJECTS = hkl-pseudoaxis-k6c-t.$(OBJEXT) hkl_pseudoaxis_k6c_t_LDADD = $(LDADD) hkl_pseudoaxis_k6c_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_pseudoaxis_soleil_sirius_kappa_t_SOURCES = \ hkl-pseudoaxis-soleil-sirius-kappa-t.c hkl_pseudoaxis_soleil_sirius_kappa_t_OBJECTS = \ hkl-pseudoaxis-soleil-sirius-kappa-t.$(OBJEXT) hkl_pseudoaxis_soleil_sirius_kappa_t_LDADD = $(LDADD) hkl_pseudoaxis_soleil_sirius_kappa_t_DEPENDENCIES = \ $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_pseudoaxis_soleil_sixs_med_t_SOURCES = \ hkl-pseudoaxis-soleil-sixs-med-t.c hkl_pseudoaxis_soleil_sixs_med_t_OBJECTS = \ hkl-pseudoaxis-soleil-sixs-med-t.$(OBJEXT) hkl_pseudoaxis_soleil_sixs_med_t_LDADD = $(LDADD) hkl_pseudoaxis_soleil_sixs_med_t_DEPENDENCIES = \ $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_pseudoaxis_t_SOURCES = hkl-pseudoaxis-t.c hkl_pseudoaxis_t_OBJECTS = hkl-pseudoaxis-t.$(OBJEXT) hkl_pseudoaxis_t_LDADD = $(LDADD) hkl_pseudoaxis_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_pseudoaxis_zaxis_t_SOURCES = hkl-pseudoaxis-zaxis-t.c hkl_pseudoaxis_zaxis_t_OBJECTS = hkl-pseudoaxis-zaxis-t.$(OBJEXT) hkl_pseudoaxis_zaxis_t_LDADD = $(LDADD) hkl_pseudoaxis_zaxis_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_quaternion_t_SOURCES = hkl-quaternion-t.c hkl_quaternion_t_OBJECTS = hkl-quaternion-t.$(OBJEXT) hkl_quaternion_t_LDADD = $(LDADD) hkl_quaternion_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_sample_t_SOURCES = hkl-sample-t.c hkl_sample_t_OBJECTS = hkl-sample-t.$(OBJEXT) hkl_sample_t_LDADD = $(LDADD) hkl_sample_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_source_t_SOURCES = hkl-source-t.c hkl_source_t_OBJECTS = hkl-source-t.$(OBJEXT) hkl_source_t_LDADD = $(LDADD) hkl_source_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_unit_t_SOURCES = hkl-unit-t.c hkl_unit_t_OBJECTS = hkl-unit-t.$(OBJEXT) hkl_unit_t_LDADD = $(LDADD) hkl_unit_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl_vector_t_SOURCES = hkl-vector-t.c hkl_vector_t_OBJECTS = hkl-vector-t.$(OBJEXT) hkl_vector_t_LDADD = $(LDADD) hkl_vector_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) hkl3d_test_t_SOURCES = hkl3d-test-t.c hkl3d_test_t_OBJECTS = hkl3d-test-t.$(OBJEXT) hkl3d_test_t_LDADD = $(LDADD) hkl3d_test_t_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) runtests_SOURCES = runtests.c runtests_OBJECTS = runtests.$(OBJEXT) runtests_LDADD = $(LDADD) runtests_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = hkl-axis-t.c hkl-bench-t.c hkl-detector-t.c hkl-geometry-t.c \ hkl-interval-t.c hkl-lattice-t.c hkl-matrix-t.c \ hkl-parameter-t.c hkl-pseudoaxis-e4ch-t.c \ hkl-pseudoaxis-e4cv-t.c hkl-pseudoaxis-e6c-t.c \ hkl-pseudoaxis-k4cv-t.c hkl-pseudoaxis-k6c-t.c \ hkl-pseudoaxis-soleil-sirius-kappa-t.c \ hkl-pseudoaxis-soleil-sixs-med-t.c hkl-pseudoaxis-t.c \ hkl-pseudoaxis-zaxis-t.c hkl-quaternion-t.c hkl-sample-t.c \ hkl-source-t.c hkl-unit-t.c hkl-vector-t.c \ $(nodist_EXTRA_hkl3d_test_t_SOURCES) hkl3d-test-t.c runtests.c DIST_SOURCES = hkl-axis-t.c hkl-bench-t.c hkl-detector-t.c \ hkl-geometry-t.c hkl-interval-t.c hkl-lattice-t.c \ hkl-matrix-t.c hkl-parameter-t.c hkl-pseudoaxis-e4ch-t.c \ hkl-pseudoaxis-e4cv-t.c hkl-pseudoaxis-e6c-t.c \ hkl-pseudoaxis-k4cv-t.c hkl-pseudoaxis-k6c-t.c \ hkl-pseudoaxis-soleil-sirius-kappa-t.c \ hkl-pseudoaxis-soleil-sixs-med-t.c hkl-pseudoaxis-t.c \ hkl-pseudoaxis-zaxis-t.c hkl-quaternion-t.c hkl-sample-t.c \ hkl-source-t.c hkl-unit-t.c hkl-vector-t.c hkl3d-test-t.c \ runtests.c RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = tap . bindings am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASY = @ASY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BULLET_CFLAGS = @BULLET_CFLAGS@ BULLET_LIBS = @BULLET_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMACS = @EMACS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ G3D_CFLAGS = @G3D_CFLAGS@ G3D_LIBS = @G3D_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GNUPLOT = @GNUPLOT@ GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ GOBJECT_LIBS = @GOBJECT_LIBS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTKGLEXT_CFLAGS = @GTKGLEXT_CFLAGS@ GTKGLEXT_LIBS = @GTKGLEXT_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HDF5_CFLAGS = @HDF5_CFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VMAJ = @VMAJ@ YAML_CFLAGS = @YAML_CFLAGS@ YAML_LIBS = @YAML_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ release_info = @release_info@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ version_info = @version_info@ SUBDIRS = tap . $(am__append_1) all_tests = hkl-unit-t hkl-bench-t hkl-axis-t hkl-quaternion-t \ hkl-interval-t hkl-sample-t hkl-lattice-t hkl-source-t \ hkl-detector-t hkl-matrix-t hkl-vector-t hkl-geometry-t \ hkl-parameter-t hkl-pseudoaxis-t hkl-pseudoaxis-e4cv-t \ hkl-pseudoaxis-e4ch-t hkl-pseudoaxis-e6c-t \ hkl-pseudoaxis-k4cv-t hkl-pseudoaxis-k6c-t \ hkl-pseudoaxis-soleil-sirius-kappa-t \ hkl-pseudoaxis-soleil-sixs-med-t hkl-pseudoaxis-zaxis-t \ $(am__append_2) AM_CPPFLAGS = -Wextra -D_DEFAULT_SOURCE -I$(top_srcdir) \ -I$(top_srcdir)/hkl -I$(top_srcdir)/tests $(GLIB_CFLAGS) \ $(GOBJECT_CFLAGS) $(GSL_CFLAGS) $(am__append_3) AM_LDFLAGS = -Wl,--whole-archive,$(top_builddir)/hkl/.libs/libhkl.a,--no-whole-archive LDADD = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(top_builddir)/tests/tap/libtap.a $(GLIB_LIBS) \ $(GOBJECT_LIBS) $(GSL_LIBS) $(am__append_4) # force linkage with g++ @HKL3D_TRUE@nodist_EXTRA_hkl3d_test_t_SOURCES = dummy.cxx all: all-recursive .SUFFIXES: .SUFFIXES: .c .cxx .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list hkl-axis-t$(EXEEXT): $(hkl_axis_t_OBJECTS) $(hkl_axis_t_DEPENDENCIES) $(EXTRA_hkl_axis_t_DEPENDENCIES) @rm -f hkl-axis-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_axis_t_OBJECTS) $(hkl_axis_t_LDADD) $(LIBS) hkl-bench-t$(EXEEXT): $(hkl_bench_t_OBJECTS) $(hkl_bench_t_DEPENDENCIES) $(EXTRA_hkl_bench_t_DEPENDENCIES) @rm -f hkl-bench-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_bench_t_OBJECTS) $(hkl_bench_t_LDADD) $(LIBS) hkl-detector-t$(EXEEXT): $(hkl_detector_t_OBJECTS) $(hkl_detector_t_DEPENDENCIES) $(EXTRA_hkl_detector_t_DEPENDENCIES) @rm -f hkl-detector-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_detector_t_OBJECTS) $(hkl_detector_t_LDADD) $(LIBS) hkl-geometry-t$(EXEEXT): $(hkl_geometry_t_OBJECTS) $(hkl_geometry_t_DEPENDENCIES) $(EXTRA_hkl_geometry_t_DEPENDENCIES) @rm -f hkl-geometry-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_geometry_t_OBJECTS) $(hkl_geometry_t_LDADD) $(LIBS) hkl-interval-t$(EXEEXT): $(hkl_interval_t_OBJECTS) $(hkl_interval_t_DEPENDENCIES) $(EXTRA_hkl_interval_t_DEPENDENCIES) @rm -f hkl-interval-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_interval_t_OBJECTS) $(hkl_interval_t_LDADD) $(LIBS) hkl-lattice-t$(EXEEXT): $(hkl_lattice_t_OBJECTS) $(hkl_lattice_t_DEPENDENCIES) $(EXTRA_hkl_lattice_t_DEPENDENCIES) @rm -f hkl-lattice-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_lattice_t_OBJECTS) $(hkl_lattice_t_LDADD) $(LIBS) hkl-matrix-t$(EXEEXT): $(hkl_matrix_t_OBJECTS) $(hkl_matrix_t_DEPENDENCIES) $(EXTRA_hkl_matrix_t_DEPENDENCIES) @rm -f hkl-matrix-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_matrix_t_OBJECTS) $(hkl_matrix_t_LDADD) $(LIBS) hkl-parameter-t$(EXEEXT): $(hkl_parameter_t_OBJECTS) $(hkl_parameter_t_DEPENDENCIES) $(EXTRA_hkl_parameter_t_DEPENDENCIES) @rm -f hkl-parameter-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_parameter_t_OBJECTS) $(hkl_parameter_t_LDADD) $(LIBS) hkl-pseudoaxis-e4ch-t$(EXEEXT): $(hkl_pseudoaxis_e4ch_t_OBJECTS) $(hkl_pseudoaxis_e4ch_t_DEPENDENCIES) $(EXTRA_hkl_pseudoaxis_e4ch_t_DEPENDENCIES) @rm -f hkl-pseudoaxis-e4ch-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_pseudoaxis_e4ch_t_OBJECTS) $(hkl_pseudoaxis_e4ch_t_LDADD) $(LIBS) hkl-pseudoaxis-e4cv-t$(EXEEXT): $(hkl_pseudoaxis_e4cv_t_OBJECTS) $(hkl_pseudoaxis_e4cv_t_DEPENDENCIES) $(EXTRA_hkl_pseudoaxis_e4cv_t_DEPENDENCIES) @rm -f hkl-pseudoaxis-e4cv-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_pseudoaxis_e4cv_t_OBJECTS) $(hkl_pseudoaxis_e4cv_t_LDADD) $(LIBS) hkl-pseudoaxis-e6c-t$(EXEEXT): $(hkl_pseudoaxis_e6c_t_OBJECTS) $(hkl_pseudoaxis_e6c_t_DEPENDENCIES) $(EXTRA_hkl_pseudoaxis_e6c_t_DEPENDENCIES) @rm -f hkl-pseudoaxis-e6c-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_pseudoaxis_e6c_t_OBJECTS) $(hkl_pseudoaxis_e6c_t_LDADD) $(LIBS) hkl-pseudoaxis-k4cv-t$(EXEEXT): $(hkl_pseudoaxis_k4cv_t_OBJECTS) $(hkl_pseudoaxis_k4cv_t_DEPENDENCIES) $(EXTRA_hkl_pseudoaxis_k4cv_t_DEPENDENCIES) @rm -f hkl-pseudoaxis-k4cv-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_pseudoaxis_k4cv_t_OBJECTS) $(hkl_pseudoaxis_k4cv_t_LDADD) $(LIBS) hkl-pseudoaxis-k6c-t$(EXEEXT): $(hkl_pseudoaxis_k6c_t_OBJECTS) $(hkl_pseudoaxis_k6c_t_DEPENDENCIES) $(EXTRA_hkl_pseudoaxis_k6c_t_DEPENDENCIES) @rm -f hkl-pseudoaxis-k6c-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_pseudoaxis_k6c_t_OBJECTS) $(hkl_pseudoaxis_k6c_t_LDADD) $(LIBS) hkl-pseudoaxis-soleil-sirius-kappa-t$(EXEEXT): $(hkl_pseudoaxis_soleil_sirius_kappa_t_OBJECTS) $(hkl_pseudoaxis_soleil_sirius_kappa_t_DEPENDENCIES) $(EXTRA_hkl_pseudoaxis_soleil_sirius_kappa_t_DEPENDENCIES) @rm -f hkl-pseudoaxis-soleil-sirius-kappa-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_pseudoaxis_soleil_sirius_kappa_t_OBJECTS) $(hkl_pseudoaxis_soleil_sirius_kappa_t_LDADD) $(LIBS) hkl-pseudoaxis-soleil-sixs-med-t$(EXEEXT): $(hkl_pseudoaxis_soleil_sixs_med_t_OBJECTS) $(hkl_pseudoaxis_soleil_sixs_med_t_DEPENDENCIES) $(EXTRA_hkl_pseudoaxis_soleil_sixs_med_t_DEPENDENCIES) @rm -f hkl-pseudoaxis-soleil-sixs-med-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_pseudoaxis_soleil_sixs_med_t_OBJECTS) $(hkl_pseudoaxis_soleil_sixs_med_t_LDADD) $(LIBS) hkl-pseudoaxis-t$(EXEEXT): $(hkl_pseudoaxis_t_OBJECTS) $(hkl_pseudoaxis_t_DEPENDENCIES) $(EXTRA_hkl_pseudoaxis_t_DEPENDENCIES) @rm -f hkl-pseudoaxis-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_pseudoaxis_t_OBJECTS) $(hkl_pseudoaxis_t_LDADD) $(LIBS) hkl-pseudoaxis-zaxis-t$(EXEEXT): $(hkl_pseudoaxis_zaxis_t_OBJECTS) $(hkl_pseudoaxis_zaxis_t_DEPENDENCIES) $(EXTRA_hkl_pseudoaxis_zaxis_t_DEPENDENCIES) @rm -f hkl-pseudoaxis-zaxis-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_pseudoaxis_zaxis_t_OBJECTS) $(hkl_pseudoaxis_zaxis_t_LDADD) $(LIBS) hkl-quaternion-t$(EXEEXT): $(hkl_quaternion_t_OBJECTS) $(hkl_quaternion_t_DEPENDENCIES) $(EXTRA_hkl_quaternion_t_DEPENDENCIES) @rm -f hkl-quaternion-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_quaternion_t_OBJECTS) $(hkl_quaternion_t_LDADD) $(LIBS) hkl-sample-t$(EXEEXT): $(hkl_sample_t_OBJECTS) $(hkl_sample_t_DEPENDENCIES) $(EXTRA_hkl_sample_t_DEPENDENCIES) @rm -f hkl-sample-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_sample_t_OBJECTS) $(hkl_sample_t_LDADD) $(LIBS) hkl-source-t$(EXEEXT): $(hkl_source_t_OBJECTS) $(hkl_source_t_DEPENDENCIES) $(EXTRA_hkl_source_t_DEPENDENCIES) @rm -f hkl-source-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_source_t_OBJECTS) $(hkl_source_t_LDADD) $(LIBS) hkl-unit-t$(EXEEXT): $(hkl_unit_t_OBJECTS) $(hkl_unit_t_DEPENDENCIES) $(EXTRA_hkl_unit_t_DEPENDENCIES) @rm -f hkl-unit-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_unit_t_OBJECTS) $(hkl_unit_t_LDADD) $(LIBS) hkl-vector-t$(EXEEXT): $(hkl_vector_t_OBJECTS) $(hkl_vector_t_DEPENDENCIES) $(EXTRA_hkl_vector_t_DEPENDENCIES) @rm -f hkl-vector-t$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hkl_vector_t_OBJECTS) $(hkl_vector_t_LDADD) $(LIBS) hkl3d-test-t$(EXEEXT): $(hkl3d_test_t_OBJECTS) $(hkl3d_test_t_DEPENDENCIES) $(EXTRA_hkl3d_test_t_DEPENDENCIES) @rm -f hkl3d-test-t$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(hkl3d_test_t_OBJECTS) $(hkl3d_test_t_LDADD) $(LIBS) runtests$(EXEEXT): $(runtests_OBJECTS) $(runtests_DEPENDENCIES) $(EXTRA_runtests_DEPENDENCIES) @rm -f runtests$(EXEEXT) $(AM_V_CCLD)$(LINK) $(runtests_OBJECTS) $(runtests_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-axis-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-bench-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-detector-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-geometry-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-interval-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-lattice-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-matrix-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-parameter-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-pseudoaxis-e4ch-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-pseudoaxis-e4cv-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-pseudoaxis-e6c-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-pseudoaxis-k4cv-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-pseudoaxis-k6c-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-pseudoaxis-soleil-sirius-kappa-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-pseudoaxis-soleil-sixs-med-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-pseudoaxis-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-pseudoaxis-zaxis-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-quaternion-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-sample-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-source-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-unit-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl-vector-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl3d-test-t.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/runtests.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< .cxx.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cxx.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-local check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) check-am install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am check-local clean clean-checkPROGRAMS clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile check-local: $(check_PROGRAMS) ./runtests -v -s $(abs_top_srcdir) $(all_tests) # Support for GNU Flymake, in Emacs. check-syntax: AM_CFLAGS += -fsyntax-only -pipe check-syntax: test -z "$(CHK_SOURCES)" || $(COMPILE) $(CHK_SOURCES) .PHONY: check-syntax # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: hkl-5.0.0.2449/tests/hkl-unit-t.c0000644000175000017500000000451713236600666016434 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl.h" #include #include #include #include "hkl-unit-private.h" static void compatible(void) { int res = TRUE; res &= DIAG(hkl_unit_compatible(&hkl_unit_angle_deg, &hkl_unit_angle_rad)); res &= DIAG(!hkl_unit_compatible(&hkl_unit_angle_deg, &hkl_unit_length_nm)); res &= DIAG(!hkl_unit_compatible(&hkl_unit_angle_rad, &hkl_unit_length_nm)); /* mrad */ res &= DIAG(hkl_unit_compatible(&hkl_unit_angle_mrad, &hkl_unit_angle_deg)); res &= DIAG(hkl_unit_compatible(&hkl_unit_angle_mrad, &hkl_unit_angle_rad)); res &= DIAG(hkl_unit_compatible(&hkl_unit_angle_deg, &hkl_unit_angle_mrad)); res &= DIAG(hkl_unit_compatible(&hkl_unit_angle_rad, &hkl_unit_angle_mrad)); res &= DIAG(!hkl_unit_compatible(&hkl_unit_angle_mrad, &hkl_unit_length_nm)); res &= DIAG(!hkl_unit_compatible(&hkl_unit_length_nm, &hkl_unit_angle_mrad)); res &= DIAG(hkl_unit_compatible(NULL, NULL)); ok(res == TRUE, __func__); } static void factor(void) { is_double(HKL_DEGTORAD, hkl_unit_factor(&hkl_unit_angle_deg, &hkl_unit_angle_rad), HKL_EPSILON, __func__); is_double(1e3, hkl_unit_factor(&hkl_unit_angle_rad, &hkl_unit_angle_mrad), HKL_EPSILON, __func__); is_double(1.0, hkl_unit_factor(&hkl_unit_angle_rad, &hkl_unit_angle_mrad) * hkl_unit_factor(&hkl_unit_angle_mrad, &hkl_unit_angle_rad), HKL_EPSILON, __func__); } int main(void) { plan(4); compatible(); factor(); return 0; } hkl-5.0.0.2449/tests/hkl-pseudoaxis-k4cv-t.c0000644000175000017500000001465513236600666020512 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl.h" #include #include static void degenerated(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; const darray_string *modes; const char **mode; HklGeometry *geometry; HklDetector *detector; HklSample *sample; static double hkl[] = {0, 1, 0}; struct Geometry gconf = K4cv(1.54, 30., 0., 0., 60.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "hkl", NULL); modes = hkl_engine_modes_names_get(engine); darray_foreach(mode, *modes) { const darray_string *parameters; HklGeometryList *geometries; size_t n_params; res &= DIAG(hkl_engine_current_mode_set(engine, *mode, NULL)); parameters = hkl_engine_parameters_names_get(engine); n_params = darray_size(*parameters); if(n_params){ double params[n_params]; hkl_engine_parameters_values_get(engine, params, n_params, HKL_UNIT_DEFAULT); params[0] = 1; res &= DIAG(hkl_engine_parameters_values_set(engine, params, n_params, HKL_UNIT_DEFAULT, NULL)); } /* studdy this degenerated case */ geometries = hkl_engine_pseudo_axis_values_set(engine, hkl, ARRAY_SIZE(hkl), HKL_UNIT_DEFAULT, NULL); if (geometries){ const HklGeometryListItem *item; HKL_GEOMETRY_LIST_FOREACH(item, geometries){ hkl_geometry_set(geometry, hkl_geometry_list_item_geometry_get(item)); res &= DIAG(check_pseudoaxes(engine, hkl, 3)); } hkl_geometry_list_free(geometries); } } ok(res == TRUE, "degenerated"); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } static void eulerians(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; const darray_string *modes; const char **mode; HklGeometry *geometry; HklDetector *detector; HklSample *sample; static double eulerians[] = {0., 90 * HKL_DEGTORAD, 0.}; struct Geometry gconf = K4cv(1.54, 0., 0., 0., 0.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "eulerians", NULL); modes = hkl_engine_modes_names_get(engine); darray_foreach(mode, *modes){ const darray_string *parameters; HklGeometryList *geometries; size_t n_params; res &= DIAG(hkl_engine_current_mode_set(engine, *mode, NULL)); parameters = hkl_engine_parameters_names_get(engine); n_params = darray_size(*parameters); if(n_params){ double params[n_params]; hkl_engine_parameters_values_get(engine, params, n_params, HKL_UNIT_DEFAULT); params[0] = 1; res &= DIAG(hkl_engine_parameters_values_set(engine, params, n_params, HKL_UNIT_DEFAULT, NULL)); } /* studdy this degenerated case */ geometries = hkl_engine_pseudo_axis_values_set(engine, eulerians, ARRAY_SIZE(eulerians), HKL_UNIT_DEFAULT, NULL); if (geometries) { const HklGeometryListItem *item; /* first solution = -180, -90, 180 */ item = hkl_geometry_list_items_first_get(geometries); hkl_geometry_set(geometry, hkl_geometry_list_item_geometry_get(item)); res &= DIAG(check_pseudoaxes_v(engine, -180. * HKL_DEGTORAD, -90 * HKL_DEGTORAD, 180. * HKL_DEGTORAD)); /* second solution = 0, 90, 0 */ item = hkl_geometry_list_items_next_get(geometries,item); hkl_geometry_set(geometry, hkl_geometry_list_item_geometry_get(item)); res &= DIAG(check_pseudoaxes_v(engine, 0., 90 * HKL_DEGTORAD, 0.)); /* no more solution */ res &= DIAG(hkl_geometry_list_items_next_get(geometries, item) == NULL); hkl_geometry_list_free(geometries); } } ok(res == TRUE, "eulerians"); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } static void q(void) { int res = TRUE; HklEngineList *engines; HklEngine *engine; const darray_string *modes; const char **mode; HklGeometry *geometry; HklDetector *detector; HklSample *sample; struct Geometry gconf = K4cv(1.54, 30., 0., 0., 60.); geometry = newGeometry(gconf); engines = newEngines(gconf); sample = newSample(cu); detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); hkl_engine_list_init(engines, geometry, detector, sample); engine = hkl_engine_list_engine_get_by_name(engines, "q", NULL); modes = hkl_engine_modes_names_get(engine); /* the init part */ res &= DIAG(hkl_geometry_set_values_v(geometry, HKL_UNIT_USER, NULL, 30., 0., 0., 60.)); res &= DIAG(hkl_engine_initialized_set(engine, TRUE, NULL)); darray_foreach(mode, *modes){ double q; res &= DIAG(hkl_engine_current_mode_set(engine, *mode, NULL)); for(q=-1.; q<1.; q += 0.1){ HklGeometryList *geometries; geometries = hkl_engine_set_values_v(engine, q, NULL); if(geometries){ const HklGeometryListItem *item; HKL_GEOMETRY_LIST_FOREACH(item, geometries){ hkl_engine_set_values_v(engine, 0.); hkl_geometry_set(geometry, hkl_geometry_list_item_geometry_get(item)); res &= DIAG(check_pseudoaxes_v(engine, q)); } hkl_geometry_list_free(geometries); } } } ok(res == TRUE, "q"); hkl_engine_list_free(engines); hkl_detector_free(detector); hkl_sample_free(sample); hkl_geometry_free(geometry); } int main(void) { plan(3); degenerated(); eulerians(); q(); return 0; } hkl-5.0.0.2449/tests/hkl-detector-t.c0000644000175000017500000000635313236600666017266 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl.h" #include #include #include "hkl-axis-private.h" /* temporary */ #include "hkl-detector-private.h" static void new(void) { HklDetector *detector1; HklDetector *detector2; detector1 = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); ok(1 == detector1->idx, __func__); ok(NULL == detector1->holder, __func__); detector2 = hkl_detector_new_copy(detector1); ok(detector1->idx == detector2->idx, __func__); ok(detector1->holder == detector2->holder, __func__); hkl_detector_free(detector1); hkl_detector_free(detector2); } static void attach_to_holder(void) { HklDetector *detector = NULL; HklGeometry *geometry = NULL; HklHolder *holder = NULL; detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); geometry = hkl_geometry_new(NULL, &hkl_geometry_operations_defaults); holder = hkl_geometry_add_holder(geometry); hkl_detector_attach_to_holder(detector, holder); ok(1 == detector->idx, __func__); ok(holder == detector->holder, __func__); hkl_geometry_free(geometry); hkl_detector_free(detector); } static void compute_kf(void) { int res = TRUE; HklDetector *detector = NULL; HklGeometry *geometry = NULL; HklHolder *holder = NULL; HklVector kf; HklVector kf_ref = {{0, HKL_TAU / HKL_SOURCE_DEFAULT_WAVE_LENGTH, 0}}; detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D); geometry = hkl_geometry_new(NULL, &hkl_geometry_operations_defaults); /* add a fake first holder */ holder = hkl_geometry_add_holder(geometry); /* for now all detectors MUST be connected to the second * holder. We will decide about a better API to connect * geometry and detector */ holder = hkl_geometry_add_holder(geometry); hkl_holder_add_rotation(holder, "a", 1, 0, 0, &hkl_unit_angle_deg); hkl_holder_add_rotation(holder, "b", 0, 1, 0, &hkl_unit_angle_deg); res &= DIAG(hkl_parameter_value_set(darray_item(geometry->axes, 0), M_PI_2, HKL_UNIT_DEFAULT, NULL)); res &= DIAG(hkl_parameter_value_set(darray_item(geometry->axes, 1), M_PI_2, HKL_UNIT_DEFAULT, NULL)); hkl_detector_attach_to_holder(detector, holder); hkl_detector_compute_kf(detector, geometry, &kf); res &= DIAG(0 == hkl_vector_cmp(&kf_ref, &kf)); ok(res, __func__); hkl_geometry_free(geometry); hkl_detector_free(detector); } int main(void) { plan(7); new(); attach_to_holder(); compute_kf(); return 0; } hkl-5.0.0.2449/tests/hkl3d-test-t.c0000644000175000017500000001113113236600666016651 0ustar00piccapicca00000000000000/* This file is part of the hkl3d library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2010-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel * Oussama Sboui */ #include #include "hkl3d.h" #include "tap/basic.h" #include "tap/hkl-tap.h" #define MODEL_FILENAME "data/diffabs.yaml" static void check_model_validity(Hkl3D *hkl3d) { uint i, j; uint len; int res; Hkl3DObject *obji; Hkl3DObject *objj; res = TRUE; /* imported 1 config files with 7 Hkl3DObjects */ res &= DIAG(hkl3d->config->len == 1); res &= DIAG(hkl3d->config->models[0]->len == 7); /* all Hkl3DObjects must have a different axis_name */ len = hkl3d->config->models[0]->len; for(i=0;iconfig->models[0]->objects[i]; for (j=1; jconfig->models[0]->objects[i+j]; if(!(strcmp(obji->axis_name, objj->axis_name))){ res &= DIAG(FALSE); break; } } obji++; } /* check the _movingObjects validity, all Hkl3DAxis must have a size of 1 */ for(i=0; i<6; ++i) res &= DIAG(hkl3d->geometry->axes[i]->len == 1); ok(res == TRUE, "no identical objects"); } /* check the collision and that the right axes are colliding */ static void check_collision(Hkl3D *hkl3d) { char buffer[1000]; int res = TRUE; double values[] = {23, 0., 0., 0., 0., 0.}; /* check the collision and that the right axes are colliding */ res &= DIAG(hkl_geometry_axis_values_set(hkl3d->geometry->geometry, values, ARRAY_SIZE(values), HKL_UNIT_USER, NULL)); res &= DIAG(hkl3d_is_colliding(hkl3d) == TRUE); strcpy(buffer, ""); /* now check that only delta and mu are colliding */ for(size_t i=0; iconfig->models[0]->len; ++i){ const char *name; int tmp; name = hkl3d->config->models[0]->objects[i]->axis_name; tmp = hkl3d->config->models[0]->objects[i]->is_colliding == TRUE; /* add the colliding axes to the buffer */ if(tmp){ strcat(buffer, " "); strcat(buffer, name); } if(!strcmp(name, "mu") || !strcmp(name, "delta")) res &= DIAG(tmp == TRUE); else res &= DIAG(tmp == FALSE); } ok(res == TRUE, "collision [%s]", buffer); } static void check_no_collision(Hkl3D *hkl3d) { int res = TRUE; double i; /* check that rotating around komega/kappa/kphi do not create collisison */ res &= DIAG(hkl_geometry_set_values_v(hkl3d->geometry->geometry, HKL_UNIT_USER, NULL, 0., 0., 0., 0., 0., 0.)); /* komega */ for(i=0; i<=360; i=i+10){ double values[] = {0., i, 0., 0., 0., 0.}; res &= DIAG(hkl_geometry_axis_values_set(hkl3d->geometry->geometry, values, ARRAY_SIZE(values), HKL_UNIT_USER, NULL)); res &= DIAG(hkl3d_is_colliding(hkl3d) == FALSE); } /* kappa */ for(i=0; i<=360; i=i+10){ double values[] = {0., 0., i, 0., 0., 0.}; res &= DIAG(hkl_geometry_axis_values_set(hkl3d->geometry->geometry, values, ARRAY_SIZE(values), HKL_UNIT_USER, NULL)); res &= DIAG(hkl3d_is_colliding(hkl3d) == FALSE); } /* kphi */ for(i=0; i<=360; i=i+10){ double values[] = {0., 0., 0., i, 0., 0.}; res &= DIAG(hkl_geometry_axis_values_set(hkl3d->geometry->geometry, values, ARRAY_SIZE(values), HKL_UNIT_USER, NULL)); res &= DIAG(hkl3d_is_colliding(hkl3d) == FALSE); } ok(res == TRUE, "no-collision"); } int main(void) { char* filename; const HklFactory *factory; HklGeometry *geometry; Hkl3D *hkl3d; factory = hkl_factory_get_by_name("K6C", NULL); geometry = hkl_factory_create_new_geometry(factory); /* compute the filename of the diffractometer config file */ filename = test_file_path(MODEL_FILENAME); hkl3d = hkl3d_new(filename, geometry); plan(3); check_model_validity(hkl3d); check_collision(hkl3d); check_no_collision(hkl3d); /* TODO add/remove object*/ hkl3d_free(hkl3d); test_file_path_free(filename); hkl_geometry_free(geometry); return 0; } hkl-5.0.0.2449/configure.ac0000644000175000017500000001601113211074263015377 0ustar00piccapicca00000000000000##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## m4_define([v_maj], [5]) m4_define([v_min], [0]) m4_define([v_mic], [0]) m4_define([v_rev], m4_esyscmd([(git rev-list --count HEAD 2>/dev/null || echo 0) | tr -d '\n']))dnl ##-- When released, remove the dnl on the below line #m4_undefine([v_rev]) ##-- When doing snapshots - change soname. remove dnl on below line dnl m4_define([relname], [ver-pre-svn-07]) dnl m4_define([v_rel], [-release relname]) ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## m4_ifdef([v_rev], [m4_define([v_ver], [v_maj.v_min.v_mic.v_rev])], [m4_define([v_ver], [v_maj.v_min.v_mic])]) m4_define([lt_cur], m4_eval(v_maj + v_min)) m4_define([lt_rev], v_mic) m4_define([lt_age], v_min) ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## AC_PREREQ([2.69]) AC_INIT([hkl],[v_ver],[picca@synchrotron-soleil.fr]) AC_CONFIG_SRCDIR([config.h.in]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_AUX_DIR(config) AM_INIT_AUTOMAKE([silent-rules tar-ustar -Wno-portability subdir-objects]) # Checks for programs. AC_PROG_AWK AC_PROG_CC_C99 AC_PROG_CXX AC_PROG_CPP AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET AC_PROG_RANLIB LT_INIT AM_SILENT_RULES ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## m4_ifdef([v_rev], , [m4_define([v_rev], [0])]) m4_ifdef([v_rel], , [m4_define([v_rel], [])]) AC_DEFINE_UNQUOTED(VMAJ, [v_maj], [Major version]) AC_DEFINE_UNQUOTED(VMIN, [v_min], [Minor version]) AC_DEFINE_UNQUOTED(VMIC, [v_mic], [Micro version]) AC_DEFINE_UNQUOTED(VREV, [v_rev], [Revison]) version_info="lt_cur:lt_rev:lt_age" release_info="v_rel" AC_SUBST(version_info) AC_SUBST(release_info) ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## VMAJ=v_maj AC_SUBST(VMAJ) # activate all the warnings AX_CFLAGS_WARN_ALL AX_CXXFLAGS_WARN_ALL # Checks for libraries. AX_PATH_GSL AM_PATH_GLIB_2_0 # Checks for header files. AC_HEADER_STDC AC_HEADER_TIME AC_FUNC_ALLOCA AC_CHECK_HEADERS([fcntl.h float.h limits.h malloc.h memory.h stddef.h stdint.h stdlib.h string.h sys/param.h sys/time.h unistd.h]) # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE AC_TYPE_INT16_T AC_TYPE_INT32_T AC_TYPE_INT64_T AC_TYPE_INT8_T AC_TYPE_PID_T AC_TYPE_SIZE_T AC_TYPE_UINT16_T AC_TYPE_UINT32_T AC_TYPE_UINT64_T AC_TYPE_UINT8_T # Checks for library functions. AC_FUNC_ERROR_AT_LINE AC_FUNC_MALLOC AC_FUNC_REALLOC AC_FUNC_VPRINTF AC_FUNC_FORK AC_CHECK_FUNCS([atexit dup2 fchdir floor getcwd getpagesize gettimeofday isascii memchr memmove memset mkdir pow putenv rmdir select sqrt strchr strcasecmp strdup strerror strncasecmp strrchr strstr strtol strtoul]) dnl OPTION_DEFAULT_OFF(NAME, HELP-STRING) dnl Create a new --enable option that defaults to being disabled. dnl NAME is the base name of the option. The shell variable enable_NAME dnl will be set to either the user's value (if the option is dnl specified; 'yes' for a plain --enable-NAME) or to 'no' (if the dnl option is not specified). Note that the shell variable name is dnl constructed as autoconf does, by replacing non-alphanumeric dnl characters with "_". dnl HELP-STRING is the help text for the option. AC_DEFUN([OPTION_DEFAULT_OFF], [dnl AC_ARG_ENABLE([$1],[AS_HELP_STRING([--enable-$1],[$2])],[],[dnl m4_bpatsubst([enable_$1], [[^0-9a-z]], [_])=no])dnl ])dnl dnl OPTION_DEFAULT_ON(NAME, HELP-STRING) dnl Create a new --enable option that defaults to being enabled. dnl NAME is the base name of the option. The shell variable enable_NAME dnl will be set to either the user's value (if the option is dnl specified; 'no' for a plain --enable-NAME) or to 'yes' (if the dnl option is not specified). Note that the shell variable name is dnl constructed as autoconf does, by replacing non-alphanumeric dnl characters with "_". dnl HELP-STRING is the help text for the option. AC_DEFUN([OPTION_DEFAULT_ON], [dnl AC_ARG_ENABLE([$1],[AS_HELP_STRING([--disable-$1],[$2])],[],[dnl m4_bpatsubst([enable_$1], [[^0-9a-z]], [_])=yes])dnl ])dnl dnl *************** dnl *** logging *** dnl *************** OPTION_DEFAULT_OFF([logging], [enable the glib logging]) AM_CONDITIONAL([LOGGING], [test x$enable_logging != xno]) AM_COND_IF([LOGGING], AC_DEFINE([LOGGING], [1], [activate the logging or not]) ) dnl *********** dnl *** doc *** dnl *********** OPTION_DEFAULT_ON([hkl-doc], [build documentation]) AM_CONDITIONAL([HKL_DOC], [test x$enable_hkl_doc = xyes]) AM_COND_IF([HKL_DOC], [dnl *** asymptote *** AC_PATH_PROG([ASY], [asy], [echo]) dnl *** emacs *** AC_PATH_PROG([EMACS], [emacs], [no]) dnl *** gnuplot *** AC_PATH_PROG([GNUPLOT], [gnuplot], [echo]) ]) dnl *** gtk-doc *** GTK_DOC_CHECK([1.9],[--flavour no-tmpl]) dnl ******************************* dnl *** add an option for hkl3d *** dnl ******************************* OPTION_DEFAULT_OFF([hkl3d], [compile the hkl3d library]) AM_CONDITIONAL([HKL3D], [test x$enable_hkl3d != xno]) AM_COND_IF([HKL3D], [PKG_CHECK_MODULES([G3D], [libg3d >= 0.0.8]) PKG_CHECK_MODULES([BULLET], [bullet >= 2.82]) dnl check for yaml AC_SEARCH_LIBS([yaml_get_version], [yaml], [AC_CHECK_HEADERS([yaml.h], [], [AC_MSG_ERROR([Could not find the yaml headers, please install yaml developement files])] )], [AC_MSG_ERROR([Could not find the libyaml runtime, please install yaml])] ) YAML_CFLAGS="" AC_SUBST(YAML_CFLAGS) YAML_LIBS="-lyaml" AC_SUBST(YAML_LIBS) ]) dnl **************************************** dnl *** add an option for the ghkl build *** dnl **************************************** OPTION_DEFAULT_ON([gui], [do not compile the gui interface]) AM_CONDITIONAL([GUI], [test x$enable_gui = xyes]) AM_COND_IF([GUI], [PKG_CHECK_MODULES([GTK], [gtk+-2.0 >= 2.0]) AM_COND_IF([HKL3D], [PKG_CHECK_MODULES([GLU], [glu >= 7.7.1]) PKG_CHECK_MODULES([GTKGLEXT], [gtkglext-1.0 >= 1.2.0]) ]) ]) dnl ********************* dnl *** introspection *** dnl ********************* GOBJECT_INTROSPECTION_CHECK([0.6.7]) AM_COND_IF([HAVE_INTROSPECTION], [PKG_CHECK_MODULES([GOBJECT], [gobject-2.0])]) dnl *************** dnl *** contrib *** dnl *************** OPTION_DEFAULT_OFF([contrib], [compile the contrib part]) AM_CONDITIONAL([CONTRIB], [test x$enable_contrib != xno]) AM_COND_IF([CONTRIB], [PKG_CHECK_MODULES([HDF5], [hdf5 >= 1.8.13]) ]) AC_CONFIG_FILES([Makefile hkl/Makefile hkl/api2/Makefile hkl/ccan/Makefile hkl.pc hkl3d/Makefile hkl3d.pc tests/Makefile tests/bindings/Makefile tests/tap/Makefile Documentation/Makefile Documentation/hkl.org Documentation/api/Makefile Documentation/figures/Makefile Documentation/sphinx/Makefile Documentation/sphinx/source/conf.py gui/Makefile data/Makefile contrib/Makefile contrib/sixs/Makefile ]) AC_OUTPUT hkl-5.0.0.2449/Documentation/0000755000175000017500000000000013237020545015725 5ustar00piccapicca00000000000000hkl-5.0.0.2449/Documentation/sphinx/0000755000175000017500000000000013237020546017237 5ustar00piccapicca00000000000000hkl-5.0.0.2449/Documentation/sphinx/source/0000755000175000017500000000000013237020546020537 5ustar00piccapicca00000000000000hkl-5.0.0.2449/Documentation/sphinx/source/diffractometers/0000755000175000017500000000000013237020546023720 5ustar00piccapicca00000000000000hkl-5.0.0.2449/Documentation/sphinx/source/diffractometers/mars.rst0000644000175000017500000000471412710332472025421 0ustar00piccapicca00000000000000SOLEIL MARS ########### Geometry ******** + xrays source fix allong the :math:`\vec{x}` direction (1, 0, 0) + 3 axes for the sample + **omega** : rotating around the :math:`\vec{z}` direction (0, -1, 0) + **chi** : rotating around the :math:`\vec{x}` direction (-1, 0, 0) + **phi** : rotating around the :math:`\vec{z}` direction (0, 0, 1) + 1 axis for the detector + **tth** : rotation around the :math:`\vec{z}` direction (0, -1, 0) Pseudo axes *********** hkl === PseudoAxes provided : **h**, **k** and **l** + mode **bissector** + Axes: **omega**, **chi**, **phi**, **tth** + Parameters : No parameter This mode add the bissector constrain ``tth = 2 * omega``. In this mode the **chi** circle containt the vector of diffusion :math:`\vec{Q}`. So it is easy to know the orientation of the hkl plan. + mode **constant_omega** + Axes : **chi**, **phi**, **tth** + Parameters : No parameter This mode do not move the current **omega** axis. + mode **constant_chi** + Axes : **omega**, **phi**, **tth** + Parameters : No parameter This mode do not move the current **chi** axis. + mode **constant_phi** + Axes related : **omega**, **chi**, **tth** + Parameters : No parameter This mode do not move the current **phi** axis. + mode **double_diffraction** + Axes : **omega**, **chi**, **phi**, **tth** + Parameters : **h2**, **k2**, **l2** This mode put a second hkl vector (**h2**, **k2**, **l2**) in Bragg condition. This is usefull sometimes when you want to explore two bragg peaks without moving your sample. + mode **psi_constant** + Axes : **omega**, **chi**, **phi**, **tth** + Parameters : **h2**, **k2**, **l2**, **psi** This mode allow to fix the value of the pseudo axis **psi** at a constant value when you move around an **h**, **k** , **l** position. The (**h2**, **k2**, **l2**) vector is used as a reference for the computation of the **psi** pseudo axis value. You can retrive and ``freeze`` the current value of the **psi** pseudo axis value into the **psi** parameter when you initialize the mode. But you can also write directly the value of the desired **psi** parameter. psi === PseudoAxis provided : **psi** + mode **psi** + Axes : **omega**, **chi**, **phi**, **tth** + Parameters : **h1**, **k1**, **l1** q = PseudoAxis provided : **q** where **q** is :math:`|\vec{Q}| = \frac{2 \tau}{\lambda} \sin{\theta}` + mode : **q** + Axes : **"tth"** + Parameters : no parameter hkl-5.0.0.2449/Documentation/sphinx/source/diffractometers/k6c.rst0000644000175000017500000001301212710332472025131 0ustar00piccapicca00000000000000Kappa 6 circles ############### .. figure:: ../../../figures/k6c.png :align: center :width: 8cm Schematic view of the diffractometer. Geometry ******** For this geometry there is a special parameters called :math:`\alpha` which is the angle between the kappa rotation axis and the :math:`\vec{y}` direction. + xrays source fix allong the :math:`\vec{x}` direction (1, 0, 0) + 4 axes for the sample + **mu** : rotating around the :math:`\vec{z}` direction (0, 0, 1) + **komega** : rotating around the :math:`-\vec{y}` direction (0, -1, 0) + **kappa** : rotating around the :math:`\vec{x}` direction (0, :math:`-\cos\alpha`, :math:`-\sin\alpha`) + **kphi** : rotating around the :math:`-\vec{y}` direction (0, -1, 0) + 2 axes for the detector + **gamma** : rotation around the :math:`\vec{z}` direction (0, 0, 1) + **delta** : rotation around the :math:`-\vec{y}` direction (0, -1, 0) PseudoAxes ********** eulerians ========= PseudoAxes provides : **"omega"**, **"chi"**, **"phi"** + mode **eulerians** + Axes : **komega**, **kappa**, **kphi** + Parameters : **"solution"** When you compute the eulerians values from the kappa axes values, there is two possibilities, so the **"solution"** parameter when set 0 or 1 allow to switch from one solution to the other. hkl === PseudoAxes provided : **h**, **k** and **l** + mode **bissector_vertical** + Axes: **komega**, **kappa**, **kphi**, **delta** + Parameters : No parameter This mode add the bissector constrain ``tth = 2 * omega``. In this mode the equivalent eulerian **chi** circle containt the vector of diffusion :math:`\vec{Q}`. So it is easy to know the orientation of the hkl plan. + mode **constant_omega_vertical** + Axes: **"komega"**, **"kappa"**, **"kphi"**, **"delta"** + Parameters : **omega** This mode do not move the equivalent eulerian **omega** axis. + mode **constant_chi_vertical** + Axes: **"komega"**, **"kappa"**, **"kphi"**, **"delta"** + Parameters : **chi** This mode do not move the equivalent eulerian **chi** axis. + mode **constant_phi_vertical** + Axes : **"komega"**, **"kappa"**, **"kphi"**, **"delta"** + Parameters : **phi** This mode do not move the equivalent eulerian **phi** axis. + mode : **lifting_detector_kphi** + Axes : **"kphi"**, **"gamma"**, **"delta"** + Parameters : No Parameters + mode : **lifting_detector_mu** + Axes : **"mu"**, **"gamma"**, **"delta"** + Parameters : No Parameters + mode : **double_diffraction vertical** + Axes : **"komega"**, **"kappa"**, **"kphi"**, **"delta"** + Parameters : **h2**, **k2**, **l2** This mode put a second hkl vector (**h2**, **k2**, **l2**) in Bragg condition. This is usefull sometimes when you want to explore two bragg peaks without moving your sample. + mode : **bissector_horizontal** + Axes : **"mu"**, **"komega"**, **"kappa"**, **"kphi"**, **"gamma"** + Parameters : No parameters + mode : **constant_phi_horizontal** + Axes : **"mu"**, **"komega"**, **"kappa"**, **"kphi"**, **"gamma"** + Parameters : **phi** + mode : **horizontal kphi constant** + Axes : **"mu"**, **"komega"**, **"kappa"**, **"gamma"** + Parameters : no parameters + mode : **double_diffraction_horizontal** + Axes : **"mu"**, **"komega"**, **"kappa"**, **kphi**, **"gamma"** + Parameters : **h2**, **k2**, **l2** This mode put a second hkl vector (**h2**, **k2**, **l2**) in Bragg condition. This is usefull sometimes when you want to explore two bragg peaks without moving your sample. + mode : **psi_constant_vertical** + Axes : **"komega"**, **"kappa"**, **kphi**, **"delta"** + Parameters : **h2**, **k2**, **l2**, **psi** This mode allow to fix the value of the pseudo axis **psi** at a constant value when you move around an **h**, **k** , **l** position. The (**h2**, **k2**, **l2**) vector is used as a reference for the computation of the **psi** pseudo axis value. You can retrive and ``freeze`` the current value of the **psi** pseudo axis value into the **psi** parameter when you initialize the mode. But you can also write directly the value of the desired **psi** parameter. + mode : **constant_incidence** + Axes : **"komega"**, **"kappa"**, **kphi**, **"gamma"**, **"delta"** + Parameters : **x**, **y**, **z**, **incidence**, **azimuth** This mode allow to work with a constant incidence of the incoming beam onto the sample surface. To use this mode you need to follow a few steps: + align your surface along a direction :math:`\vec{n}` (**x**, **y**, **z**) in the laboratory space, with your diffractometer. + initialize the mode, so it can remember the current diffractometer position for futur computation. + set the desired **incidence** + set the desired **azimuth** of the normal of the surface in the YOZ plane (azimuth = 0 -> :math:`\vec{n}` along :math:`\vec{y}`) Now it is possible to do an HKL computation. psi === PseudoAxis provided : **psi** + mode **psi_vertical** + Axes : **komega**, **kappa**, **kphi**, **delta** + Parameters : **h1**, **k1**, **l1** The (**h1**, **k1**, **l1**) vector is used as a reference for the computation of the **psi** pseudo axis value. q2 == PseudoAxis provided : **q**, **alpha** where **q** is :math:`|\vec{Q}| = \frac{2 \tau}{\lambda} \sin{\theta}` and **alpha** is the azimuth of :math:`\vec{Q}` in the ``yz`` plan. The origin of this angles is the :math:`\vec{y}` vector, and the positive rotation along :math:`\vec{x}` + mode : **q2** + Axes : **"gamma"**, **"delta"** + Parameters : no parameter hkl-5.0.0.2449/Documentation/sphinx/source/diffractometers/med1_2.rst0000644000175000017500000000210112710332472025512 0ustar00piccapicca00000000000000SOLEIL SIXS MED1+2 ################## Geometry ******** + xrays source fix allong the :math:`\vec{x}` direction (1, 0, 0) + 2 axes for the sample + **pitch** : rotation around the :math:`-\vec{y}` direction (0, -1, 0) + **mu** : rotation around the :math:`\vec{z}` direction (0, 0, 1) + 3 axis for the detector + **pitch** : rotation around the :math:`-\vec{y}` direction (0, -1, 0) + **gamma** : rotation around the :math:`\vec{z}` direction (0, 0, 1) + **delta** : rotation around the :math:`-\vec{y}` direction (0, -1, 0) PseudoAxes ********** hkl === PseudoAxes provided : **h**, **k** and **l** + mode **pitch_fixed** + Axes : **mu**, **gamma**, **delta** + Parameters : No parameter q2 == PseudoAxis provided : **q**, **alpha** where **q** is :math:`|\vec{Q}| = \frac{2 \tau}{\lambda} \sin{\theta}` and **alpha** is the azimuth of :math:`\vec{Q}` in the ``yz`` plan. The origin of this angles is the :math:`\vec{y}` vector, and the positive rotation along :math:`\vec{x}` + mode : **q2** + Axes : **"gamma"**, **"delta"** + Parameters : no parameter hkl-5.0.0.2449/Documentation/sphinx/source/diffractometers/e6c.rst0000644000175000017500000001124612710332472025132 0ustar00piccapicca00000000000000Eulerian 6 circles ################## .. figure:: ../../../figures/4S+2D.png :align: center :width: 8cm Schematic view of the diffractometer. Geometry ******** + xrays source fix allong the :math:`\vec{x}` direction (1, 0, 0) + 4 axes for the sample + **mu** : rotating around the :math:`\vec{z}` direction (0, 0, 1) + **omega** : rotating around the :math:`-\vec{y}` direction (0, -1, 0) + **chi** : rotating around the :math:`\vec{x}` direction (1, 0, 0) + **phi** : rotating around the :math:`-\vec{y}` direction (0, -1, 0) + 2 axes for the detector + **gamma** : rotation around the :math:`\vec{z}` direction (0, 0, 1) + **delta** : rotation around the :math:`-\vec{y}` direction (0, -1, 0) PseudoAxes ********** hkl === PseudoAxes provided : **h**, **k** and **l** + mode **bissector_vertical** + Axes: **omega**, **chi**, **phi**, **delta** + Parameters : No parameter This mode add the bissector constrain ``delta = 2 * omega``. In this mode the **chi** circle containt the vector of diffusion :math:`\vec{Q}`. So it is easy to know the orientation of the hkl plan. + mode **constant_omega_vertical** + Axes: **"chi"**, **"phi"**, **"delta"** + Parameters : no parameter This mode do not move the **omega** axis. + mode **constant_chi_vertical** + Axes: **"omega"**, **"phi"**, **"delta"** + Parameters : no parameter This mode do not move the **chi** axis. + mode **constant_phi_vertical** + Axes : **"omega"**, **"chi"**, **"delta"** + Parameters : no parameter This mode do not move the **phi** axis. + mode : **lifting_detector_phi** + Axes : **"phi"**, **"gamma"**, **"delta"** + Parameters : No Parameters + mode : **lifting_detector_omega** + Axes : **"omega"**, **"gamma"**, **"delta"** + Parameters : No Parameters + mode : **lifting_detector_mu** + Axes : **"mu"**, **"gamma"**, **"delta"** + Parameters : No Parameters + mode : **double_diffraction vertical** + Axes : **"omega"**, **"chi"**, **"phi"**, **"delta"** + Parameters : **h2**, **k2**, **l2** This mode put a second hkl vector (**h2**, **k2**, **l2**) in Bragg condition. This is usefull sometimes when you want to explore two bragg peaks without moving your sample. + mode : **bissector_horizontal** + Axes : **"mu"**, **"omega"**, **"chi"**, **"phi"**, **"gamma"** + Parameters : No parameters + mode : **double_diffraction_horizontal** + Axes : **"mu"**, **"omega"**, **"chi"**, **phi**, **"gamma"** + Parameters : **h2**, **k2**, **l2** This mode put a second hkl vector (**h2**, **k2**, **l2**) in Bragg condition. This is usefull sometimes when you want to explore two bragg peaks without moving your sample. + mode : **psi_constant_vertical** + Axes : **"omega"**, **"chi"**, **phi**, **"delta"** + Parameters : **h2**, **k2**, **l2**, **psi** This mode allow to fix the value of the pseudo axis **psi** at a constant value when you move around an **h**, **k** , **l** position. The (**h2**, **k2**, **l2**) vector is used as a reference for the computation of the **psi** pseudo axis value. You can retrive and ``freeze`` the current value of the **psi** pseudo axis value into the **psi** parameter when you initialize the mode. But you can also write directly the value of the desired **psi** parameter. + mode : **psi_constant_horizontal** + Axes : **"omega"**, **"chi"**, **phi**, **"gamma"** + Parameters : **h2**, **k2**, **l2**, **psi** This mode allow to fix the value of the pseudo axis **psi** at a constant value when you move around an **h**, **k** , **l** position. The (**h2**, **k2**, **l2**) vector is used as a reference for the computation of the **psi** pseudo axis value. You can retrive and ``freeze`` the current value of the **psi** pseudo axis value into the **psi** parameter when you initialize the mode. But you can also write directly the value of the desired **psi** parameter. + mode **constant_mu_horizontal** + Axes : **"chi"**, **"phi"**, **"gamma"** + Parameters : no parameter This mode do not move the **mu** axis. psi === PseudoAxis provided : **psi** + mode **psi_vertical** + Axes : **komega**, **kappa**, **kphi**, **delta** + Parameters : **h1**, **k1**, **l1** The (**h1**, **k1**, **l1**) vector is used as a reference for the computation of the **psi** pseudo axis value. q2 == PseudoAxis provided : **q**, **alpha** where **q** is :math:`|\vec{Q}| = \frac{2 \tau}{\lambda} \sin{\theta}` and **alpha** is the azimuth of :math:`\vec{Q}` in the ``yz`` plan. The origin of this angles is the :math:`\vec{y}` vector, and the positive rotation along :math:`\vec{x}` + mode : **q2** + Axes : **"gamma"**, **"delta"** + Parameters : no parameter hkl-5.0.0.2449/Documentation/sphinx/source/diffractometers/k4cv.rst0000644000175000017500000000660512710332472025327 0ustar00piccapicca00000000000000Kappa 4 circles vertical ######################## .. figure:: ../../../figures/k4cv.png :align: center :width: 8cm Schematic view of the diffractometer. Geometry ******** For this geometry there is a special parameters called :math:`\alpha` which is the angle between the kappa rotation axis and the :math:`\vec{y}` direction. + xrays source fix allong the :math:`\vec{x}` direction (1, 0, 0) + 3 axes for the sample + **komega** : rotating around the :math:`-\vec{y}` direction (0, -1, 0) + **kappa** : rotating around the :math:`\vec{x}` direction (0, :math:`-\cos\alpha`, :math:`-\sin\alpha`) + **kphi** : rotating around the :math:`-\vec{y}` direction (0, -1, 0) + 1 axis for the detector + **tth** : rotation around the :math:`-\vec{y}` direction (0, -1, 0) PseudoAxes ********** eulerians ========= PseudoAxes provides : **"omega"**, **"chi"**, **"phi"** + mode **eulerians** + Axes : **komega**, **kappa**, **kphi** + Parameters : **"solution"** When you compute the eulerians values from the kappa axes values, there is two possibilities, so the **"solution"** parameter when set 0 or 1 allow to switch from one solution to the other. hkl === PseudoAxes provided : **h**, **k** and **l** + mode **bissector** + Axes: **komega**, **kappa**, **kphi**, **tth** + Parameters : No parameter This mode add the bissector constrain ``tth = 2 * omega``. In this mode the equivalent eulerian **chi** circle containt the vector of diffusion :math:`\vec{Q}`. So it is easy to know the orientation of the hkl plan. + mode **constant_omega** + Axes : **"komega"**, **"kappa"**, **"kphi"**, **"tth"** + Parameters : **"omega"** This mode do not move the equivalent eulerian **omega** axis, fixed by the parameter of the mode. + mode **constant_chi** + Axes : **"komega"**, **"kappa"**, **"kphi"**, **"tth"** + Parameters : **"chi"** This mode do not move the equivalent eulerian **chi** axis fixed by the parameter of the mode. + mode **constant_phi** + Axes related : **"komega"**, **"kappa"**, **"kphi"**, **"tth"** + Parameters : **"phi"** This mode do not move the equivalent eulerian **phi** axis fixed by the parameter of the mode. + mode **double_diffraction** + Axes : **komega**, **kappa**, **kphi**, **tth** + Parameters : **h2**, **k2**, **l2** This mode put a second hkl vector (**h2**, **k2**, **l2**) in Bragg condition. This is usefull sometimes when you want to explore two bragg peaks without moving your sample. + mode **psi_constant** + Axes : **komega**, **kappa**, **kphi**, **tth** + Parameters : **h2**, **k2**, **l2**, **psi** This mode allow to fix the value of the pseudo axis **psi** at a constant value when you move around an **h**, **k** , **l** position. The (**h2**, **k2**, **l2**) vector is used as a reference for the computation of the **psi** pseudo axis value. You can retrive and ``freeze`` the current value of the **psi** pseudo axis value into the **psi** parameter when you initialize the mode. But you can also write directly the value of the desired **psi** parameter. psi === PseudoAxis provided : **psi** + mode **psi** + Axes : **komega**, **kappa**, **kphi**, **tth** + Parameters : **h1**, **k1**, **l1** q = PseudoAxis provided : **q** where **q** is :math:`|\vec{Q}| = \frac{2 \tau}{\lambda} \sin{\theta}` + mode : **q** + Axes : **"tth"** + Parameters : no parameter hkl-5.0.0.2449/Documentation/sphinx/source/diffractometers/med2_3.rst0000644000175000017500000000324212710332472025523 0ustar00piccapicca00000000000000SOLEIL SIXS MED2+3 ################## Geometry ******** + xrays source fix allong the :math:`\vec{x}` direction (1, 0, 0) + 3 axes for the sample + **beta** : rotation around the :math:`-\vec{y}` direction (0, -1, 0) + **mu** : rotation around the :math:`\vec{z}` direction (0, 0, 1) + **omega** : rotating around the :math:`-\vec{y}` direction (0, -1, 0) + 3 axis for the detector + **beta** : rotation around the :math:`-\vec{y}` direction (0, -1, 0) + **gamma** : rotation around the :math:`\vec{z}` direction (0, 0, 1) + **delta** : rotation around the :math:`-\vec{y}` direction (0, -1, 0) + **eta_a** : rotation around the :math:`-\vec{x}` direction (-1, 0, 0) PseudoAxes ********** hkl === PseudoAxes provided : **h**, **k** and **l** + mode **mu_eta_a_fixed** + Axes : **omega**, **gamma**, **delta** + Parameters : No parameter + mode **mu_fixed** + Axes : **mu**, **omega**, **gamma**, **eta_a** + Parameters : No parameter This mode add the slits constant orientation compare to the surface of the sample, which is along the **omega** axis. q2 == PseudoAxis provided : **q**, **alpha** where **q** is :math:`|\vec{Q}| = \frac{2 \tau}{\lambda} \sin{\theta}` and **alpha** is the azimuth of :math:`\vec{Q}` in the ``yz`` plan. The origin of this angles is the :math:`\vec{y}` vector, and the positive rotation along :math:`\vec{x}` + mode : **q2** + Axes : **"gamma"**, **"delta"** + Parameters : no parameter qper_qpar ========= PseudoAxis provided : **qper**, **qpar** where **qper** and **qpar** are the perpendicular and parallel composants of the :math:`|\vec{Q}|` vector. projected respectively to the surface vector of the sample. hkl-5.0.0.2449/Documentation/sphinx/source/diffractometers/petra3.rst0000644000175000017500000000370712710332472025656 0ustar00piccapicca00000000000000PETRA3 P09 EH2 ############## Geometry ******** + xrays source fix allong the :math:`\vec{x}` direction (1, 0, 0) + 4 axes for the sample + **mu** : rotation around the :math:`-\vec{y}` direction (0, -1, 0) + **omega** : rotation around the :math:`\vec{z}` direction (0, 0, 1) + **chi** : rotating around the :math:`\vec{x}` direction (1, 0, 0) + **phi** : rotating around the :math:`\vec{z}` direction (0, 0, 1) + 3 axis for the detector + **mu** : rotation around the :math:`-\vec{y}` direction (0, -1, 0) + **delta** : rotation around the :math:`\vec{z}` direction (0, 0, 1) + **gamma** : rotation around the :math:`-\vec{y}` direction (0, -1, 0) PseudoAxes ********** hkl === PseudoAxes provided : **h**, **k** and **l** + mode **zaxis + alpha-fixed** + Axes : **"omega"**, **"gamma"**, **"delta"** + Parameters : No parameter + mode **zaxis + beta-fixed** + Axes : **"mu"**, **"omega"**, **"delta"** + Parameters : No parameter + mode **zaxis + alpha=beta** + Axes : **"mu"**, **"omega"**, **"gamma"**, **"delta"** + Parameters : No parameter This mode add the ``mu = gamma`` constrain. + mode **4-circles bissector_horizontal** + Axes: **"omega"**, **"chi"**, **"phi"**, **"delta"** + Parameters : No parameter This mode add the bissector constrain ``delta = 2 * omega``. In this mode the eulerian **"chi"** circle containt the vector of diffusion :math:`\vec{Q}`. So it is easy to know the orientation of the hkl plan. + mode **4-circles constant_omega_horizontal** + Axes: **"chi"**, **"phi"**, **"delta"** + Parameters : No parameter This mode do not move the **"omega"** axis. + mode **4-circles constant_chi_horizontal** + Axes: **"omega"**, **"phi"**, **"delta"** + Parameters : No parameter This mode do not move the **"chi"** axis. + mode **4-circles constant_phi_horizontal** + Axes: **"omega"**, **"chi"**, **"delta"** + Parameters : No parameter This mode do not move the **"phi"** axis. hkl-5.0.0.2449/Documentation/sphinx/source/diffractometers/med2_2.rst0000644000175000017500000000256612710332472025532 0ustar00piccapicca00000000000000SOLEIL SIXS MED2+2 ################## Geometry ******** + xrays source fix allong the :math:`\vec{x}` direction (1, 0, 0) + 3 axes for the sample + **beta** : rotation around the :math:`-\vec{y}` direction (0, -1, 0) + **mu** : rotation around the :math:`\vec{z}` direction (0, 0, 1) + **omega** : rotating around the :math:`-\vec{y}` direction (0, -1, 0) + 3 axis for the detector + **beta** : rotation around the :math:`-\vec{y}` direction (0, -1, 0) + **gamma** : rotation around the :math:`\vec{z}` direction (0, 0, 1) + **delta** : rotation around the :math:`-\vec{y}` direction (0, -1, 0) PseudoAxes ********** hkl === PseudoAxes provided : **h**, **k** and **l** + mode **mu_fixed** + Axes : **omega**, **gamma**, **delta** + Parameters : No parameter + mode **reflectivity** + Axes : **mu**, **omega**, **gamma**, **delta** + Parameters : No parameter This mode add the reflectivity constraint ``2*mu = gamma``. The incomming beam angle and the outgoing beam angle are equals. q2 == PseudoAxis provided : **q**, **alpha** where **q** is :math:`|\vec{Q}| = \frac{2 \tau}{\lambda} \sin{\theta}` and **alpha** is the azimuth of :math:`\vec{Q}` in the ``yz`` plan. The origin of this angles is the :math:`\vec{y}` vector, and the positive rotation along :math:`\vec{x}` + mode : **q2** + Axes : **"gamma"**, **"delta"** + Parameters : no parameter hkl-5.0.0.2449/Documentation/sphinx/source/diffractometers/zaxis.rst0000644000175000017500000000253112710332472025610 0ustar00piccapicca00000000000000Z-Axis ###### Geometry ******** For this geometry the **mu** axis is common to the sample and the detector. + xrays source fix allong the :math:`\vec{x}` direction (1, 0, 0) + 2 axes for the sample + **mu** : rotation around the :math:`\vec{z}` direction (0, 0, 1) + **omega** : rotating around the :math:`-\vec{y}` direction (0, -1, 0) + 3 axis for the detector + **mu** : rotation around the :math:`\vec{z}` direction (0, 0, 1) + **delta** : rotation around the :math:`-\vec{y}` direction (0, -1, 0) + **gamma** : rotation around the :math:`\vec{z}` direction (0, 0, 1) PseudoAxes ********** hkl === PseudoAxes provided : **h**, **k** and **l** + mode **zaxis** + Axes : **omega**, **delta**, **gamma** + Parameters : No parameter + mode **reflectivity** + Axes : **mu**, **omega**, **delta**, **gamma** + Parameters : No parameter This mode add the reflectivity constraint ``mu = gamma``. The incomming beam angle and the outgoing beam angle are equals. q2 == PseudoAxis provided : **q**, **alpha** where **q** is :math:`|\vec{Q}| = \frac{2 \tau}{\lambda} \sin{\theta}` and **alpha** is the azimuth of :math:`\vec{Q}` in the ``yz`` plan. The origin of this angles is the :math:`\vec{y}` vector, and the positive rotation along :math:`\vec{x}` + mode : **q2** + Axes : **"gamma"**, **"delta"** + Parameters : no parameter hkl-5.0.0.2449/Documentation/sphinx/source/diffractometers/e4cv.rst0000644000175000017500000000512112710332472025311 0ustar00piccapicca00000000000000Eulerian 4 circles ################## .. figure:: ../../../figures/3S+1D.png :align: center :width: 8cm Schematic view of the diffractometer. Geometry ******** + xrays source fix allong the :math:`\vec{x}` direction (1, 0, 0) + 3 axes for the sample + **omega** : rotating around the :math:`-\vec{y}` direction (0, -1, 0) + **chi** : rotating around the :math:`\vec{x}` direction (1, 0, 0) + **phi** : rotating around the :math:`-\vec{y}` direction (0, -1, 0) + 1 axis for the detector + **tth** : rotation around the :math:`-\vec{y}` direction (0, -1, 0) Pseudo axes *********** hkl === PseudoAxes provided : **h**, **k** and **l** + mode **bissector** + Axes: **omega**, **chi**, **phi**, **tth** + Parameters : No parameter This mode add the bissector constrain ``tth = 2 * omega``. In this mode the **chi** circle containt the vector of diffusion :math:`\vec{Q}`. So it is easy to know the orientation of the hkl plan. + mode **constant_omega** + Axes : **chi**, **phi**, **tth** + Parameters : No parameter This mode do not move the current **omega** axis. + mode **constant_chi** + Axes : **omega**, **phi**, **tth** + Parameters : No parameter This mode do not move the current **chi** axis. + mode **constant_phi** + Axes related : **omega**, **chi**, **tth** + Parameters : No parameter This mode do not move the current **phi** axis. + mode **double_diffraction** + Axes : **omega**, **chi**, **phi**, **tth** + Parameters : **h2**, **k2**, **l2** This mode put a second hkl vector (**h2**, **k2**, **l2**) in Bragg condition. This is usefull sometimes when you want to explore two bragg peaks without moving your sample. + mode **psi_constant** + Axes : **omega**, **chi**, **phi**, **tth** + Parameters : **h2**, **k2**, **l2**, **psi** This mode allow to fix the value of the pseudo axis **psi** at a constant value when you move around an **h**, **k** , **l** position. The (**h2**, **k2**, **l2**) vector is used as a reference for the computation of the **psi** pseudo axis value. You can retrive and ``freeze`` the current value of the **psi** pseudo axis value into the **psi** parameter when you initialize the mode. But you can also write directly the value of the desired **psi** parameter. psi === PseudoAxis provided : **psi** + mode **psi** + Axes : **omega**, **chi**, **phi**, **tth** + Parameters : **h1**, **k1**, **l1** q = PseudoAxis provided : **q** where **q** is :math:`|\vec{Q}| = \frac{2 \tau}{\lambda} \sin{\theta}` + mode : **q** + Axes : **"tth"** + Parameters : no parameter hkl-5.0.0.2449/Documentation/sphinx/source/diffractometers/soleil_sirius_kappa.rst0000644000175000017500000001264512710332472030522 0ustar00piccapicca00000000000000SOLEIL SIRIUS KAPPA ################### Geometry ******** For this geometry there is a special parameters called :math:`\alpha` which is the angle between the kappa rotation axis and the :math:`\vec{y}` direction. + xrays source fix allong the :math:`\vec{x}` direction (1, 0, 0) + 4 axes for the sample + **mu** : rotating around the :math:`-\vec{z}` direction (0, 0, -1) + **komega** : rotating around the :math:`-\vec{y}` direction (0, -1, 0) + **kappa** : rotating around the :math:`\vec{x}` direction (0, :math:`-\cos\alpha`, :math:`-\sin\alpha`) + **kphi** : rotating around the :math:`-\vec{y}` direction (0, -1, 0) + 2 axes for the detector + **delta** : rotation around the :math:`-\vec{z}` direction (0, 0, -1) + **gamma** : rotation around the :math:`-\vec{y}` direction (0, -1, 0) PseudoAxes ********** eulerians ========= PseudoAxes provides : **"omega"**, **"chi"**, **"phi"** + mode **eulerians** + Axes : **komega**, **kappa**, **kphi** + Parameters : **"solution"** When you compute the eulerians values from the kappa axes values, there is two possibilities, so the **"solution"** parameter when set 0 or 1 allow to switch from one solution to the other. hkl === PseudoAxes provided : **h**, **k** and **l** + mode **bissector_vertical** + Axes: **komega**, **kappa**, **kphi**, **delta** + Parameters : No parameter This mode add the bissector constrain ``tth = 2 * omega``. In this mode the equivalent eulerian **chi** circle containt the vector of diffusion :math:`\vec{Q}`. So it is easy to know the orientation of the hkl plan. + mode **constant_omega_vertical** + Axes: **"komega"**, **"kappa"**, **"kphi"**, **"delta"** + Parameters : **omega** This mode do not move the equivalent eulerian **omega** axis. + mode **constant_chi_vertical** + Axes: **"komega"**, **"kappa"**, **"kphi"**, **"delta"** + Parameters : **chi** This mode do not move the equivalent eulerian **chi** axis. + mode **constant_phi_vertical** + Axes : **"komega"**, **"kappa"**, **"kphi"**, **"delta"** + Parameters : **phi** This mode do not move the equivalent eulerian **phi** axis. + mode : **lifting_detector_kphi** + Axes : **"kphi"**, **"gamma"**, **"delta"** + Parameters : No Parameters + mode : **lifting_detector_mu** + Axes : **"mu"**, **"gamma"**, **"delta"** + Parameters : No Parameters + mode : **double_diffraction vertical** + Axes : **"komega"**, **"kappa"**, **"kphi"**, **"delta"** + Parameters : **h2**, **k2**, **l2** This mode put a second hkl vector (**h2**, **k2**, **l2**) in Bragg condition. This is usefull sometimes when you want to explore two bragg peaks without moving your sample. + mode : **bissector_horizontal** + Axes : **"mu"**, **"komega"**, **"kappa"**, **"kphi"**, **"gamma"** + Parameters : No parameters + mode : **constant_phi_horizontal** + Axes : **"mu"**, **"komega"**, **"kappa"**, **"kphi"**, **"gamma"** + Parameters : **phi** + mode : **horizontal kphi constant** + Axes : **"mu"**, **"komega"**, **"kappa"**, **"gamma"** + Parameters : no parameters + mode : **double_diffraction_horizontal** + Axes : **"mu"**, **"komega"**, **"kappa"**, **kphi**, **"gamma"** + Parameters : **h2**, **k2**, **l2** This mode put a second hkl vector (**h2**, **k2**, **l2**) in Bragg condition. This is usefull sometimes when you want to explore two bragg peaks without moving your sample. + mode : **psi_constant_vertical** + Axes : **"komega"**, **"kappa"**, **kphi**, **"delta"** + Parameters : **h2**, **k2**, **l2**, **psi** This mode allow to fix the value of the pseudo axis **psi** at a constant value when you move around an **h**, **k** , **l** position. The (**h2**, **k2**, **l2**) vector is used as a reference for the computation of the **psi** pseudo axis value. You can retrive and ``freeze`` the current value of the **psi** pseudo axis value into the **psi** parameter when you initialize the mode. But you can also write directly the value of the desired **psi** parameter. + mode : **constant_incidence** + Axes : **"komega"**, **"kappa"**, **kphi**, **"gamma"**, **"delta"** + Parameters : **x**, **y**, **z**, **incidence**, **azimuth** This mode allow to work with a constant incidence of the incoming beam onto the sample surface. To use this mode you need to follow a few steps: + align your surface along a direction :math:`\vec{n}` (**x**, **y**, **z**) in the laboratory space, with your diffractometer. + initialize the mode, so it can remember the current diffractometer position for futur computation. + set the desired **incidence** + set the desired **azimuth** of the normal of the surface in the YOZ plane (azimuth = 0 -> :math:`\vec{n}` along :math:`\vec{y}`) Now it is possible to do an HKL computation. psi === PseudoAxis provided : **psi** + mode **psi_vertical** + Axes : **komega**, **kappa**, **kphi**, **delta** + Parameters : **h1**, **k1**, **l1** The (**h1**, **k1**, **l1**) vector is used as a reference for the computation of the **psi** pseudo axis value. q2 == PseudoAxis provided : **q**, **alpha** where **q** is :math:`|\vec{Q}| = \frac{2 \tau}{\lambda} \sin{\theta}` and **alpha** is the azimuth of :math:`\vec{Q}` in the ``yz`` plan. The origin of this angles is the :math:`\vec{y}` vector, and the positive rotation along :math:`\vec{x}` + mode : **q2** + Axes : **"gamma"**, **"delta"** + Parameters : no parameter hkl-5.0.0.2449/Documentation/sphinx/source/diffractometers/soleil_sirius_turret.rst0000644000175000017500000000310212710332472030737 0ustar00piccapicca00000000000000SOLEIL SIRIUS TURRET #################### Geometry ******** + xrays source fix allong the :math:`\vec{x}` direction (1, 0, 0) + 3 axes for the sample + **thetah** : rotating around the :math:`-\vec{z}` direction (0, 0, -1) + **alphay** : rotating around the :math:`\vec{y}` direction (0, 1, 0) + **alphax** : rotating around the :math:`\vec{x}` direction (1, 0, 0) + 2 axes for the detector + **delta** : rotation around the :math:`-\vec{z}` direction (0, 0, -1) + **gamma** : rotation around the :math:`-\vec{y}` direction (0, -1, 0) PseudoAxes ********** hkl === PseudoAxes provided : **h**, **k** and **l** + mode : **lifting_detector_thetah** + Axes : **"thetah"**, **"delta"**, **"gamma"** + Parameters : No Parameters q2 == PseudoAxis provided : **q**, **alpha** where **q** is :math:`|\vec{Q}| = \frac{2 \tau}{\lambda} \sin{\theta}` and **alpha** is the azimuth of :math:`\vec{Q}` in the ``yz`` plan. The origin of this angles is the :math:`\vec{y}` vector, and the positive rotation along :math:`\vec{x}` + mode : **q2** + Axes : **"gamma"**, **"delta"** + Parameters : no parameter qper_qpar ========= PseudoAxis provided : **qper**, **qpar** where **qper** and **qpar** are the perpendicular and parallel composants of the :math:`|\vec{Q}|` vector projected respectively to the surface vector :math:`\vec{n}` of coordinates :math:`x`, :math:`y`, :math:`z` of the sample expressed in the sample referential. The default value for :math:`n` is (0, 1, 0) + mode : **qper_qpar** + Axes : **"delta"**, **"gamma"** + Parameters : **"x"**, **"y"**, **"z"** hkl-5.0.0.2449/Documentation/sphinx/source/conf.py.in0000644000175000017500000001575112710332472022453 0ustar00piccapicca00000000000000# -*- coding: utf-8 -*- # # hkl documentation build configuration file, created by # sphinx-quickstart on Sat May 28 14:45:51 2011. # # This file is execfile()d with the current directory set to its containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys, os # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. #sys.path.insert(0, os.path.abspath('.')) # -- General configuration ----------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.autodoc', 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.pngmath', 'matplotlib.sphinxext.plot_directive'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = u'hkl' copyright = u'2011-2013, Picca Frédéric-Emmanuel' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = '@VERSION@' # The full version, including alpha/beta/rc tags. release = '@VERSION@' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = [] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # -- Options for HTML output --------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'default' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". #html_static_path = ['_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_domain_indices = True # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. #html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'hkldoc' # -- Options for LaTeX output -------------------------------------------------- # The paper size ('letter' or 'a4'). #latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). #latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'hkl.tex', u'hkl Documentation', u'Picca Frédéric-Emmanuel', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # If true, show page references after internal links. #latex_show_pagerefs = False # If true, show URL addresses after external links. #latex_show_urls = False # Additional stuff for the LaTeX preamble. #latex_preamble = '' # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_domain_indices = True # -- Options for manual page output -------------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('index', 'hkl', u'hkl Documentation', [u'Picca Frédéric-Emmanuel'], 1) ] hkl-5.0.0.2449/Documentation/sphinx/source/introduction.rst0000644000175000017500000006344012710332472024020 0ustar00piccapicca00000000000000.. _introduction: Introduction ############ The purpose of the library is to factorise single crystal diffraction angles computation for different kind of diffractometer geometries. It is used at the SOLEIL, Desy and Alba synchrotron with the Tango control system to pilot diffractometers. Features ******** + mode computation (aka PseudoAxis) + item for different diffractometer geometries. + UB matrix computation. + busing & Levy with 2 reflections + simplex computation with more than 2 reflections using the GSL library. + Eulerians angles to pre-orientate your sample. + Crystal lattice affinement + with more than 2 reflections you can select which parameter must be fitted. + Pseudoaxes + psi, eulerians, q, ... Conventions *********** In all this document the next convention will be used to describe the diffractometers geometries. + right handed convention for all the angles. + direct space orthogonal base. + description of the diffractometer geometries is done with all axes values set to zero. Diffraction ########### the crystal *********** A periodic crystal is the association of a pattern and a lattice. The pattern is located at each points of the lattice node. Positions of those nodes are given by: .. math:: R_{uvw}=u\cdot\vec{a}+v\cdot\vec{b}+w\cdot\vec{c} :math:`\vec{a}`, :math:`\vec{b}`, :math:`\vec{c}` are the former vector of a base of the space. ``u``, ``v``, ``w`` are integrers. The pattern contain atomes associated to each lattice node. the purpose of diffraction is to study the interaction of this crystal (pattern+lattice) with X-rays. .. figure:: ../../figures/crystal.png :align: center :width: 8cm Crystal direct lattice. this lattice is defined by :math:`\vec{a}`, :math:`\vec{b}`, :math:`\vec{c}` vectors, and the angles :math:`\alpha`, :math:`\beta`, :math:`\gamma`. In general cases this lattice is not othonormal. Nevertheless to compute the interaction of this real space lattice and the X-Rays, it is convenient to define another lattice called reciprocal lattice defined like this: .. math:: :nowrap: :label: reciprocal lattice \begin{eqnarray*} \vec{a}^{\star} & = & \tau\frac{\vec{b}\wedge\vec{c}}{\vec{a}\cdot(\vec{b}\wedge\vec{c})}\\ \vec{b}^{\star} & = & \tau\frac{\vec{c}\wedge\vec{a}}{\vec{b}\cdot(\vec{c}\wedge\vec{a})}\\ \vec{c}^{\star} & = & \tau\frac{\vec{a}\wedge\vec{b}}{\vec{c}\cdot(\vec{a}\wedge\vec{b})} \end{eqnarray*} :math:`\tau=2\pi` or :math:`\tau=1` depending on the conventions. It is then possible to define thoses orthogonal properties: .. math:: :nowrap: \begin{eqnarray*} \vec{a}^{\star}\cdot\vec{a}=\tau & \vec{b}^{\star}\cdot\vec{a}=0 & \vec{c}^{\star}\cdot\vec{a}=0\\ \vec{a}^{\star}\cdot\vec{b}=0 & \vec{b}^{\star}\cdot\vec{b}=\tau & \vec{c}^{\star}\cdot\vec{b}=0\\ \vec{a}^{\star}\cdot\vec{c}=0 & \vec{b}^{\star}\cdot\vec{c}=0 & \vec{c}^{\star}\cdot\vec{c}=\tau \end{eqnarray*} This reciprocal space lattice allow to write in a simpler form the interaction between the crystal and the X-Rays. We often only know about :math:`\vec{a}`, :math:`\vec{b}`, :math:`\vec{c}` vectors and the angles :math:`\alpha`, :math:`\beta`, :math:`\gamma`. Using the previous equations :eq:`reciprocal`, we can compute the reciprocal lattice this way: .. math:: :label: reciprocal :nowrap: \begin{eqnarray*} a^{\star} & = & \frac{\sin\alpha}{aD}\\ b^{\star} & = & \frac{\sin\beta}{bD}\\ c^{\star} & = & \frac{\sin\gamma}{cD} \end{eqnarray*} where .. math:: D=\sqrt{1-\cos^{2}\alpha-\cos^{2}\beta-\cos^{2}\gamma+2\cos\alpha\cos\beta\cos\gamma} To compute the angles between the reciprocal space vectors, it is once again possible to use the previous equations :eq:`reciprocal` to obtain the sinus and cosinus of the angles :math:`\alpha^\star`, :math:`\beta^\star` et :math:`\gamma^\star`: .. math:: :nowrap: \begin{eqnarray*} \cos\alpha^{\star}=\frac{\cos\beta\cos\gamma-\cos\alpha}{\sin\beta\sin\gamma} & \, & \sin\alpha^{\star}=\frac{D}{\sin\beta\sin\gamma} \\ \cos\beta^{\star}=\frac{\cos\gamma\cos\alpha-\cos\beta}{\sin\gamma\sin\alpha} & \, & \sin\beta^{\star}=\frac{D}{\sin\gamma\sin\alpha}\\ \cos\gamma^{\star}=\frac{\cos\alpha\cos\beta-\cos\gamma}{\sin\alpha\sin\beta} & \, & \sin\gamma^{\star}=\frac{D}{\sin\alpha\sin\beta} \end{eqnarray*} Diffraction *********** Let the incomming X-rays beam whose wave vector is :math:`\vec{k_{i}}`, :math:`|k_{i}|=\tau/\lambda` where :math:`\lambda` is the wavelength of the signal. The :math:`\vec{k_{d}}` vector wavelength of the diffracted beam. There is diffusion if the diffusion vector :math:`\vec{q}` can be expressed as follows: .. math:: \vec{q}=\vec{k_{d}}-\vec{k_{i}}=h.\vec{a}^{*}+k.\vec{b}^{*}+l.\vec{c}^{*} where :math:`(h,k,l)\in\mathbb{N}^{3}` and :math:`(h,k,l)\neq(0,0,0)`. Thoses indices :math:`(h,k,l)` are named Miller indices. Another way of looking at things has been given by Bragg and that famous relationship: .. math:: n\lambda=2d\sin\theta where :math:`d` is the inter-plan distance and :math:`n \in \mathbb{N}`. The diffusion accure for a unique :math:`\theta` angle. Then we got :math:`\vec{q}` perpendicular to the diffraction plan. The Ewald construction allow to represent this diffraction in the reciprocal space. Quaternions *********** Properties ========== The quaternions will be used to discribe the diffractometers geometries. Thoses quaternions can represent 3D rotations. There is different way to describe then like complex numbers. .. math:: q=a+bi+cj+dk or .. math:: q=[a,\vec{v}] To compute the quaternion's norm, we can proceed like for complex numbers .. math:: \lvert q \rvert = \sqrt{a{{}^2}+b{{}^2}+c{{}^2}+d{{}^2}} Its conjugate is : .. math:: q^{*}=[a,-\vec{u}]=a-bi-cj-dk Operations ========== The difference with the complexnumber algebre is about non-commutativity. .. math:: qp \neq pq .. math:: \bordermatrix{ ~ & 1 & i & j & k \cr 1 & 1 & i & j & k \cr i & i & -1 & k & -j \cr j & j & -k & -1 & i \cr k & k & j & -i & -1 } The product of two quaternions can be express by the Grassman product :eq:`Grassman product`. So for two quaternions :math:`p` and :math:`q`: .. math:: :nowrap: \begin{align*} q &= a+\vec{u} = a+bi+cj+dk\\ p &= t+\vec{v} = t+xi+yj+zk \end{align*} we got .. math:: :label: Grassman product pq=at-\vec{u}\cdot\vec{v}+a\vec{v}+t\vec{u}+\vec{v}\times\vec{u} or equivalent .. math:: pq=(at-bx-cy-dz)+(bt+ax+cz-dy)i+(ct+ay+dx-bz)j+(dt+az+by-cx)k 3D rotations ============ L'ensemble des quaternions unitaires (leur norme est égale à 1) est le groupe qui représente les rotations dans l'espace 3D. Si on a un vecteur unitaire :math:`\vec{u}` et un angle de rotation :math:`\theta` alors le quaternion :math:`[\cos\frac{\theta}{2},\sin\frac{\theta}{2}\vec{u]}` représente la rotation de :math:`\theta` autour de l'axe :math:`\vec{u}` dans le sens trigonométrique. Nous allons donc utiliser ces quaternions unitaires pour représenter les mouvements du diffractomètre. Alors que dans le plan 2D une simple multiplication entre un nombre complex et le nombre :math:`e^{i\theta}` permet de calculer simplement la rotation d'angle :math:`\theta` autour de l'origine, dans l'espace 3D l'expression équivalente est: .. math:: z'=qzq^{-1} où :math:`q` est le quaternion de norme 1 représentant la rotation dans l'espace et :math:`z` le quaternion représentant le vecteur qui subit la rotation (sa partie réelle est nulle). Dans le cas des quaternions de norme 1, il est très facile de calculer :math:`q^{-1}`. En effet l'inverse d'une rotation d'angle :math:`\theta` est la rotation d'angle :math:`-\theta`. On a donc directement: .. math:: q^{-1}=[\cos\frac{-\theta}{2},\sin\frac{-\theta}{2}\vec{u}]=[\cos\frac{\theta}{2},-\sin\frac{\theta}{2}\vec{u}]=q^{*} Le passage aux matrices de rotation se fait par la formule suivante :math:`q\rightarrow M`. .. math:: \begin{bmatrix} a{{}^2}+b{{}^2}-c{{}^2}-d{{}^2} & 2bc-2ad & 2ac+2bd\\ 2ad+2bc & a{{}^2}-b{{}^2}+c{{}^2}-d{{}^2} & 2cd-2ab\\ 2bd-2ac & 2ab+2cd & a{{}^2}-b{{}^2}-c{{}^2}+d{{}^2} \end{bmatrix} La composition de rotation se fait simplement en multipliant les quaternions entre eux. Si l'on à :math:`q` Les Diffractomètres ################### Eulérien 3S+1D ************** Nous allons nous inspirer du modèle de Busin et Levy pour décrire notre diffractomètre. Les sens de rotation sont respectés mais le repère directe est choisi de façon à correspondre au repère de laboratoire de la ligne CRYSTAL du synchrotron Soleil. Les photons-X se propagent suivant le vecteur :math:`\vec{x}` et la direction verticale est suivant le vecteur :math:`\vec{z}`. Ce diffractomètre est de type verticale (le vecteur de diffusion :math:`\vec{Q}` est dans le plan xOz). Les angles permettant de décrire la configuration du diffractomètre sont présentés sur la figure~\ref{cap:3S+1D}. .. figure:: ../../figures/3S+1D.png :align: center :width: 8cm Dénomination des angles du diffractomètre 3S+1D Eulérien.\label{cap:3S+1D} Eulérien 4S+2D ************** Nous allons nous inspirer du modèle de You pour notre diffractomètre (fig.~\ref{cap:4S+2D}) ici présenté tous les angles mis à zéro. Les rayons-X arrivent suivant le vecteur $\vec{x}$ (le repère est différent de celui de You). .. figure:: ../../figures/4S+2D.png :align: center :width: 8cm Dénomination des angles du diffractomètre 4S+2D Eulérien.\label{cap:4S+2D} Le principe des calcules de You est d'exprimer dans le repère du laboratoire le vecteur diffusion :math:`\vec{Q}` de deux façons différentes. Une première en utilisant les angles du goniomètre 4S puis une à partir des angles du détecteur 2D et de la connaissance des coordonnées du vecteur incident. En égalant les deux expressions, il obtient un système d'équation à 6 inconnus mais seulement 3 équations. Pour être à même de résoudre le système il faut fixer des contraintes supplémentaire. C'est ce que l'on appel les modes de fonctionnement du diffractomètre. Il est commode de définir d'autres angles que ceux du diffractomètre relativement à des vecteurs caractéristiques tel que le vecteur de diffusion :math:`\vec{Q}` ou un vecteur pointant dans une direction particulière du cristal :math:`\vec{n}`. Cette direction peut-être soit lié à la cristallographie du cristal soit à sa forme (une normale à une face). La figure~\ref{cap:Pseudo-Angles-li=0000E9s} représente les angles liés au vecteur de diffusion et à ce vecteur de référence. Tout d'abord :math:`\theta` (angle entre :math:`\vec{Q}` et le plan :math:`yz`) et qui correspond à l'angle de Bragg. :math:`\vartheta` qui est l'angle azimutal que fait la projection de :math:`\vec{Q}` sur le plan :math:`yz` et la direction :math:`+y` (fig~\ref{cap:Pseudo-Angles-li=0000E9s}a). Il y a ensuite les angles :math:`\alpha` et :math:`\varphi` définits comme précédemment mais pour le vecteur de référence :math:`\vec{n}` (fig~\ref{cap:Pseudo-Angles-li=0000E9s}b). Et finalement les angles $\tau$ (angle entre :math:`\vec{Q}` et :math:`\vec{n}`) et :math:`\psi` qui correspond à la rotation de :math:`\vec{n}` autour du vecteur de diffusion :math:`\vec{Q}` (fig~\ref{cap:Pseudo-Angles-li=0000E9s}c). L'origine de cet angle $\psi$ est prise à zéro lorsque le vecteur :math:`\vec{n}` est dans le plan de diffraction (plan contenant :math:`\vec{Q}` et :math:`\vec{k_{i}}`) (fig~\ref{cap:Pseudo-Angles-li=0000E9s}d). .. figure:: ../../figures/4S+2D_reciprocal.png :align: center :width: 7 cm Pseudo angles :math:`\theta` et :math:`\vartheta` liés à :math:`\vec{Q}` .. figure:: ../../figures/4S+2D_reciprocal2.png :align: center :width: 7cm Pseudo angles :math:`\alpha` et :math:`\phi` liés à :math:`\vec{n}` .. figure:: ../../figures/4S+2D_reciprocal3.png :align: center :width: 7cm Pseudo angles :math:`\tau` et :math:`\psi` liés à :math:`\vec{n}` relativement à :math:`\vec{Q}` et le plan de diffraction .. figure:: ../../figures/4S+2D_reciprocal4.png :align: center :width: 7cm Pseudo Angles liés au vecteur de diffusion :math:`\vec{Q}` et à :math:`\vec{n}` Il est alors possible d'exprimer ces pseudos angles en fonction des angles physique du diffractomètre. Modes de fonctionnement ####################### Equations fondamentales *********************** Le problème que nous devons résoudre est de calculer pour une famille de plan :math:`(h,k,l)` donné, les angles de rotation du diffractomètre qui permettent de le mettre en condition de diffraction. Il faut donc exprimer les relations mathématiques qui lient les différents angles entre eux lorsque la condition de Bragg est vérifiée. L'équation fondamentale est la suivante: .. math:: :nowrap: \begin{align*} \left(\prod_{i}S_{i}\right)\cdot U\cdot B\cdot\vec{h} & =\left(\prod_{j}D_{j}-I\right)\cdot\vec{k_{i}}\\ R\cdot U\cdot B\cdot\vec{h} & =\vec{Q} \end{align*} ou :math:`\vec{h}` est le vecteur :math:`(h,k,l)`, :math:`\vec{k_{i}}` est le vecteur incident, :math:`S_{i}` les matrices de rotations des mouvements liés à l'échantillon, :math:`D_{j}` les matrices de rotation des mouvements liés au détecteur, :math:`I` la matrice identité, :math:`U` la matrice d'orientation du cristal par rapport au repère de l'axe sur lequel ce dernier est monté et :math:`B` la matrice de passage d'un repère non orthonormé ( celui du crystal réciproque) à un repère orthonormé. Calcule de `B` ============== Si l'on connaît les paramètres cristallins du cristal étudié, il est très simple de calculer :math:`B`: .. math:: B= \begin{bmatrix} a^{\star} & b^{\star}\cos\gamma^{\star} & c^{\star}\cos\beta^{\star}\\ 0 & b^{\star}\sin\gamma^{\star} & -c^{\star}\sin\beta^{\star}\cos\alpha\\ 0 & 0 & 1/c \end{bmatrix} Calcule de `U` ============== Il existe plusieurs façons de calculer :math:`U`. Busing et Levy en a proposé plusieurs. Nous allons présenter celle qui nécessite la mesure de seulement deux réflections ainsi que la connaissance des paramètres cristallins. Cette façon de calculer la matrice d'orientation $U$, peut être généralisée à n'importe quel diffractomètre pour peu que la description des axes de rotation permette d'obtenir la matrice de rotation de la machine :math:`R` et le vecteur de diffusion :math:`\vec{Q}`. Il est également possible de calculer :math:`U` sans la connaîssance des paramètres cristallins. il faut alors faire un affinement des paramètres. Cela revient à minimiser une fonction. Nous allons utiliser la méthode du simplex pour trouver ce minimum et donc ajuster l'ensemble des paramètres cristallins ainsi que la matrice d'orientation. Algorithme de Busing Levy ========================= L'idée est de se placer dans le repère de l'axe sur lequel est monté l'échantillon. On mesure deux réflections :math:`(\vec{h}_{1},\vec{h}_{2})` ainsi que leurs angles associés. Cela nous permet de calculer $R$ et :math:`\vec{Q}` pour chacune de ces reflections. nous avons alors ce système: .. math:: :nowrap: \begin{eqnarray*} U\cdot B\cdot\vec{h}_{1} & = & \tilde{R}_{1}\cdot\vec{Q}_{1}\\ U\cdot B\cdot\vec{h}_{2} & = & \tilde{R}_{2}\cdot\vec{Q}_{2} \end{eqnarray*} De façon à calculer facilement :math:`U`, il est intéressant de définir deux trièdres orthonormé :math:`T_{\vec{h}}` et :math:`T_{\vec{Q}}` à partir des vecteurs :math:`(B\vec{h}_{1},B\vec{h}_{2})` et :math:`(\tilde{R}_{1}\vec{Q}_{1},\tilde{R}_{2}\vec{Q}_{2})`. On a alors très simplement: .. math:: U\cdot T_{\vec{h}}=T_{\vec{Q}} Et donc .. math:: U=T_{\vec{Q}}\cdot\tilde{T}_{\vec{h}} Affinement par la méthode du simplex ==================================== Dans ce cas nous ne connaissons pas la matrice :math:`B`, il faut donc mesurer plus que deux réflections pour ajuster les 9 paramètres. Six paramètres pour le crystal et trois pour la matrice d'orientation :math:`U`. Les trois paramètres qui permennt de representer :math:`U` sont en fait les angles d'euler. il faut donc être en mesure de passer d'une représentation eulérien à cette matrice :math::`U` et réciproquement. .. math:: U=X\cdot Y\cdot Z où :math:`X` est la matrice rotation suivant l'axe Ox et le premier angle d'Euler, :math:`Y` la matrice de rotation suivant l'axe Oy et le deuxième angle d'Euler et :math:`Z` la matrice du troisième angle d'Euler pour l'axe Oz. .. math:: :nowrap: \begin{tabular}{ccc} $X$ & $Y$ & $Z$\tabularnewline $\begin{bmatrix} 1 & 0 & 0\\ 0 & A & -B\\ 0 & B & A \end{bmatrix}$ & $\begin{bmatrix} C & 0 & D\\ 0 & 1 & 0\\ -D & 0 & C \end{bmatrix}$ & $\begin{bmatrix} E & -F & 0\\ F & E & 0\\ 0 & 0 & 1 \end{bmatrix}$ \end{tabular} et donc: .. math:: U= \begin{bmatrix} CE & -CF & D\\ BDE+AF & -BDF+AE & -BC\\ -ADE+BF & ADF+BE & AC \end{bmatrix} Il est donc facile de passer des angles d'Euler à la matrice d'orientation. Il faut maintenant faire la transformation inverse de la matrice :math:`U` vers les angles d'euler. Diffractomètre 4 Cercle (3S+1D) Eulerien **************************************** Pour ce diffractomètres, les matrices de rotations des différents axes sont les suivantes: .. math:: :nowrap: \begin{tabular}{cccc} $\Omega$ & $\chi$ & $\Phi$ & $2\Theta$\tabularnewline $\begin{bmatrix} \cos\omega & 0 & -\sin\omega\\ 0 & 1 & 0\\ \sin\omega & 0 & \cos\omega \end{bmatrix}$ & $\begin{bmatrix} 1 & 0 & 0\\ 0 & \cos\chi & -\sin\chi\\ 0 & \sin\chi & \cos\chi \end{bmatrix}$ & $\begin{bmatrix} \cos\phi & 0 & -\sin\phi\\ 0 & 1 & 0\\ \sin\phi & 0 & \cos\phi \end{bmatrix}$ & $\begin{bmatrix} \cos2\theta & 0 & -\sin2\theta\\ 0 & 1 & 0\\ \sin2\theta & 0 & \cos2\theta \end{bmatrix}$ \end{tabular} On obtient alors la matrice de rotation de la machine .. math:: R=\Omega\chi\Phi soit .. math:: R= \begin{bmatrix} \cos\omega\cos\phi-\cos\chi\sin\omega\sin\phi & -\sin\chi\sin\omega & -\cos\omega\sin\phi-\cos\chi\sin\omega\cos\phi\\ -\sin\chi\sin\phi & \cos\chi & -\sin\chi\cos\phi\\ \sin\omega\cos\phi-\cos\chi\cos\omega\sin\phi & -\sin\chi\cos\omega & -\sin\omega\sin\phi-\cos\chi\cos\omega\cos\phi \end{bmatrix} De la même façon on peut calculer le vecteur diffusion en fonction des angles du détecteur: .. math:: \vec{Q}=\left(2\Theta-I\right)\cdot\vec{k}_{i} où :math:`I` est la matrice identité. Finalement: .. math:: \vec{Q}=k_{i}\left(\begin{array}{c} \cos2\theta-1\\ 0\\ \sin2\theta \end{array}\right) L'équation fondamentale nous permet d'écrire: .. math:: U\cdot B\cdot\vec{h}=\tilde{R}\cdot\vec{Q} Cette équation est de 4 inconnus pour seulement 3 équations. Il faut donc imposer des contraintes pour résoudre ce système et ainsi d'orienter le diffractomètre. Ces différentes contraintes définissent les modes de fonctionnement des diffractomètres. Dans la suite nous allons nous efforcer de trouver l'ensemble des solutions possibles pour les différents modes et non pas une seule solution. Ceci afin de laisser le choix suivant certaines stratégies à l'utilisateur d'utiliser telle ou telle solution plutôt qu'une autre. Mode Bisecteur ============== Dans ce mode on choisit d'avoir: .. math:: \omega=\theta Le système s'écrit alors simplement: .. math:: :nowrap: \begin{eqnarray*} h_{\phi} & = & 2k_{i}\sin\theta\cos\chi\sin\phi\\ k_{\phi} & = & 2k_{i}\sin\theta\sin\chi\\ l_{\phi} & = & 2k_{i}\sin\theta\cos\chi\cos\phi \end{eqnarray*} On a: .. math:: h_{\phi}^{2}+k_{\phi}^{2}+l_{\phi}^{2}=4k_{i}\sin^{2}\theta où :math:`k_{i}=\frac{\tau}{\lambda}`. donc on peut écrire: .. math:: \left|\sin\theta\right|=\frac{\sqrt{h_{\phi}^{2}+k_{\phi}^{2}+l_{\phi}^{2}}}{2k_{i}} il faut donc enviseager les deux possibilité selon que :math:`\theta` est positif ou bien négatif. .. math:: \sin\theta<0 On peut alors écrire: .. math:: \sin\chi=-\frac{k_{\phi}}{\sqrt{h_{\phi}^{2}+k_{\phi}^{2}+l_{\phi}^{2}}} puis en utilisant le relation bien connue :math:`\cos^{2}+\sin^{2}=1` on a: .. math:: \cos^{2}\chi=\frac{h_{\phi}^{2}+l_{\phi}^{2}}{h_{\phi}^{2}+k_{\phi}^{2}+l_{\phi}^{2}} Il faut une fois de plus faire un choix selon que :math:`\cos\chi` est positif ou négatif. .. math:: \cos\chi<0 .. math:: \cos\chi=-\sqrt{\frac{h_{\phi}^{2}+l_{\phi}^{2}}{h_{\phi}^{2}+k_{\phi+}^{2}l_{\phi}^{2}}} .. math:: \cos\chi>0 .. math:: \cos\chi=\sqrt{\frac{h_{\phi}^{2}+l_{\phi}^{2}}{h_{\phi}^{2}+k_{\phi+}^{2}l_{\phi}^{2}}} .. math:: \sin\theta>0 On peut alors écrire: .. math:: \sin\chi=\frac{k_{\phi}}{\sqrt{h_{\phi}^{2}+k_{\phi}^{2}+l_{\phi}^{2}}} puis en utilisant le relation bien connue :math:`\cos^{2}+\sin^{2}=1` on a: .. math:: \cos^{2}\chi=\frac{h_{\phi}^{2}+l_{\phi}^{2}}{h_{\phi}^{2}+k_{\phi}^{2}+l_{\phi}^{2}} Il faut une fois de plus faire un choix selon que :math:`\cos\chi` est positif ou négatif. .. math:: \cos\chi<0 .. math:: \cos\chi=-\sqrt{\frac{h_{\phi}^{2}+l_{\phi}^{2}}{h_{\phi}^{2}+k_{\phi+}^{2}l_{\phi}^{2}}} .. math:: \cos\chi>0 .. math:: \cos\chi=\sqrt{\frac{h_{\phi}^{2}+l_{\phi}^{2}}{h_{\phi}^{2}+k_{\phi+}^{2}l_{\phi}^{2}}} La résolution du système donne alors 4 quadruplets de solutions: .. math:: :nowrap: \begin{tabular}{c|c|c|c} $\omega$ & $\chi$ & $\phi$ & $2\theta$\tabularnewline \hline $-\theta$ & $\arctan2(-k_{\phi},-\sqrt{h_{\phi}^{2}+l_{\phi}^{2}})$ & $\arctan2(h_{\phi},l_{\phi})$ & $2\arcsin-\frac{\sqrt{h_{\phi}^{2}+k_{\phi}^{2}+l_{\phi}^{2}}}{2k_{i}}$\tabularnewline $-\theta$ & $\arctan2(-k_{\phi},\sqrt{h_{\phi}^{2}+l_{\phi}^{2}})$ & $\arctan2(-h_{\phi},-l_{\phi})$ & $2\arcsin-\frac{\sqrt{h_{\phi}^{2}+k_{\phi}^{2}+l_{\phi}^{2}}}{2k_{i}}$\tabularnewline $\theta$ & $\arctan2(k_{\phi},-\sqrt{h_{\phi}^{2}+l_{\phi}^{2}})$ & $\arctan2(-h_{\phi},-l_{\phi})$ & $2\arcsin\frac{\sqrt{h_{\phi}^{2}+k_{\phi}^{2}+l_{\phi}^{2}}}{2k_{i}}$\tabularnewline $\theta$ & $\arctan2(k_{\phi},\sqrt{h_{\phi}^{2}+l_{\phi}^{2}})$ & $\arctan2(h_{\phi},l_{\phi})$ & $2\arcsin\frac{\sqrt{h_{\phi}^{2}+k_{\phi}^{2}+l_{\phi}^{2}}}{2k_{i}}$\tabularnewline \end{tabular} Mode Delta Theta ================ Ce mode consiste à décaler :math:`\omega` par rapport à :math:`\theta` d'une valeur constante :math:`C`: .. math:: \omega=\theta+C Le système s'écrit alors comme suit: .. math:: :nowrap: \begin{eqnarray*} h_{\phi} & = & 2k_{i}\sin\theta\left(\cos C\cos\chi\sin\phi+\sin C\cos\phi\right)\\ k_{\phi} & = & 2k_{i}\sin\theta\cos C\sin\chi\\ l_{\phi} & = & 2k_{i}\sin\theta\left(\cos C\cos\chi\cos\phi-\sin C\sin\phi\right) \end{eqnarray*} On a toujours: .. math:: h_{\phi}^{2}+k_{\phi}^{2}+l_{\phi}^{2}=4k_{i}\sin^{2}\theta La résolution donne 4 quadruplets de solutions: .. math:: :nowrap: \begin{tabular}{ccc} $\omega$ & $\chi$ & $\phi$\tabularnewline \hline $-\theta+C$ & $\arctan2(\frac{-k_{\phi}}{\cos C},-\sqrt{h_{\phi}^{2}-k_{\phi}^{2}\tan^{2}C+l_{\phi}^{2}})$ & $\arctan2(-h_{\phi}\cos C\cos\chi+l_{\phi}\sin C,-l_{\phi}\cos C\cos\chi-h_{\phi}\sin C)$\tabularnewline $-\theta+C$ & $\arctan2(\frac{-k_{\phi}}{\cos C},\sqrt{h_{\phi}^{2}-k_{\phi}^{2}\tan^{2}C+l_{\phi}^{2}})$ & $\arctan2(-h_{\phi}\cos C\cos\chi+l_{\phi}\sin C,-l_{\phi}\cos C\cos\chi-h_{\phi}\sin C)$\tabularnewline $\theta+C$ & $\arctan2(\frac{k_{\phi}}{\cos C},-\sqrt{h_{\phi}^{2}-k_{\phi}^{2}\tan^{2}C+l_{\phi}^{2}})$ & $\arctan2(h_{\phi}\cos C\cos\chi-l_{\phi}\sin C,l_{\phi}\cos C\cos\chi+h_{\phi}\sin C)$\tabularnewline $\theta+C$ & $\arctan2(\frac{k_{\phi}}{\cos C},\sqrt{h_{\phi}^{2}-k_{\phi}^{2}\tan^{2}C+l_{\phi}^{2}})$ & $\arctan2(h_{\phi}\cos C\cos\chi-l_{\phi}\sin C,l_{\phi}\cos C\cos\chi+h_{\phi}\sin C)$\tabularnewline \end{tabular} .. math:: :nowrap: \begin{tabular}{c} $2\theta$\tabularnewline \hline $2\arcsin-\frac{\sqrt{h_{\phi}^{2}+k_{\phi}^{2}+l_{\phi}^{2}}}{2k_{i}}$\tabularnewline $2\arcsin-\frac{\sqrt{h_{\phi}^{2}+k_{\phi}^{2}+l_{\phi}^{2}}}{2k_{i}}$\tabularnewline $2\arcsin\frac{\sqrt{h_{\phi}^{2}+k_{\phi}^{2}+l_{\phi}^{2}}}{2k_{i}}$\tabularnewline $2\arcsin\frac{\sqrt{h_{\phi}^{2}+k_{\phi}^{2}+l_{\phi}^{2}}}{2k_{i}}$\tabularnewline \end{tabular} où Mode omega constant =================== Dans ce mode on choisit de garder :math:`\omega` toujours constant: .. math:: \omega=C Le système s'écrit alors comme suit: .. math:: :nowrap: \begin{eqnarray*} h_{\phi} & = & 2k_{i}\sin\theta\left(\cos(C-\theta)\cos\chi\sin\phi+\sin(C-\theta)\cos\phi\right)\\ k_{\phi} & = & 2k_{i}\sin\theta\cos(C-\theta)\sin\chi\\ l_{\phi} & = & 2k_{i}\sin\theta\left(\cos(C-\theta)\cos\chi\cos\phi-\sin(C-\theta)\sin\phi\right) \end{eqnarray*} La résolution donne 4 quadruplets de solutions: .. math:: :nowrap: \begin{tabular}{ccc} $\omega$ & $\chi$ & $\phi$\tabularnewline \hline $-\theta+C$ & $\arctan2\left(-k_{\phi},-\sqrt{(h_{\phi}^{2}+l_{\phi}^{2})\cos^{2}(C-\theta)-k_{\phi}^{2}\sin^{2}(C-\theta)}\right)$ & $\arctan2(-h_{\phi}\cos C\cos\chi+l_{\phi}\sin C,-l_{\phi}\cos C\cos\chi-h_{\phi}\sin C)$\tabularnewline $-\theta+C$ & $\arctan2\left(-k_{\phi},\sqrt{(h_{\phi}^{2}+l_{\phi}^{2})\cos^{2}(C-\theta)-k_{\phi}^{2}\sin^{2}(C-\theta)}\right)$ & $\arctan2(-h_{\phi}\cos C\cos\chi+l_{\phi}\sin C,-l_{\phi}\cos C\cos\chi-h_{\phi}\sin C)$\tabularnewline $\theta+C$ & $\arctan2\left(k_{\phi},-\sqrt{(h_{\phi}^{2}+l_{\phi}^{2})\cos^{2}(C-\theta)-k_{\phi}^{2}\sin^{2}(C-\theta)}\right)$ & $\arctan2(h_{\phi}\cos C\cos\chi-l_{\phi}\sin C,l_{\phi}\cos C\cos\chi+h_{\phi}\sin C)$\tabularnewline $\theta+C$ & $\arctan2\left(k_{\phi},\sqrt{(h_{\phi}^{2}+l_{\phi}^{2})\cos^{2}(C-\theta)-k_{\phi}^{2}\sin^{2}(C-\theta)}\right)$ & $\arctan2(h_{\phi}\cos C\cos\chi-l_{\phi}\sin C,l_{\phi}\cos C\cos\chi+h_{\phi}\sin C)$\tabularnewline \end{tabular} .. math:: :nowrap: \begin{tabular}{c} $2\theta$\tabularnewline \hline $2\arcsin-\frac{\sqrt{h_{\phi}^{2}+k_{\phi}^{2}+l_{\phi}^{2}}}{2k_{i}}$\tabularnewline $2\arcsin-\frac{\sqrt{h_{\phi}^{2}+k_{\phi}^{2}+l_{\phi}^{2}}}{2k_{i}}$\tabularnewline $2\arcsin\frac{\sqrt{h_{\phi}^{2}+k_{\phi}^{2}+l_{\phi}^{2}}}{2k_{i}}$\tabularnewline $2\arcsin\frac{\sqrt{h_{\phi}^{2}+k_{\phi}^{2}+l_{\phi}^{2}}}{2k_{i}}$\tabularnewline \end{tabular} hkl-5.0.0.2449/Documentation/sphinx/source/bindings/0000755000175000017500000000000013237020546022334 5ustar00piccapicca00000000000000hkl-5.0.0.2449/Documentation/sphinx/source/bindings/python.py0000755000175000017500000000522112710332472024231 0ustar00piccapicca00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ This file is part of the hkl library. The hkl library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. The hkl library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with the hkl library. If not, see . Copyright (C) 2003-2012 Synchrotron SOLEIL L'Orme des Merisiers Saint-Aubin BP 48 91192 GIF-sur-YVETTE CEDEX Authors: Picca Frédéric-Emmanuel """ import math from gi.repository import GLib from gi.repository import Hkl detector = Hkl.Detector.factory_new(Hkl.DetectorType(0)) factory = Hkl.factories()['K6C'] geometry = factory.create_new_geometry() values_w = [0., 30., 0., 0., 0., 60.] geometry.axis_values_set(values_w, Hkl.UnitEnum.USER) axis_names = geometry.axis_names_get() print geometry.name_get(), "diffractometer has", len(axis_names),\ "axes : ", axis_names print values_w sample = Hkl.Sample.new("toto") lattice = Hkl.Lattice.new(1.54, 1.54, 1.54, math.radians(90.0), math.radians(90.0), math.radians(90.)) sample.lattice_set(lattice) # compute all the pseudo axes managed by all engines engines = factory.create_new_engine_list() engines.init(geometry, detector, sample) engines.get() # get the hkl engine and do a computation hkl = engines.engine_get_by_name("hkl") values = hkl.pseudo_axis_values_get(Hkl.UnitEnum.USER) print "read : ", values # set the hkl engine and get the results for _ in range(100): try: print solutions = hkl.pseudo_axis_values_set(values, Hkl.UnitEnum.USER) print hkl.pseudo_axis_values_get(Hkl.UnitEnum.USER) print("idx".center(15)), for name in axis_names: print("{}".format(name.center(15))), print for i, item in enumerate(solutions.items()): read = item.geometry_get().axis_values_get(Hkl.UnitEnum.USER) print("{}".format(repr(i).center(15))), for value in read: print("{}".format(repr(value)[:15].center(15))), print except GLib.GError, err: print values, err values[1] += .01 hkl-5.0.0.2449/Documentation/sphinx/source/bindings/bindings.rst0000644000175000017500000001610212710332472024662 0ustar00piccapicca00000000000000.. _bindings: Bindings ######## The hkl library use the gobject-introspection to provide automatic binding for a few languages. Python ****** hkl computation: .. literalinclude:: python.py has you can see there is 4 available solutions. let's compute an hkl trajectory and select the first solution. .. plot:: pyplots/trajectory_simple.py if we look at the 3 other solutions we can see that there is a problem of continuity at the begining of the trajectory. .. plot:: pyplots/trajectory_full.py hey what's happend with theses solutions ! let's look closely to real numbers. the last column is the distance to the diffractometer current position. This distance is for now express like this: .. math:: \sum_{axes} \left|\text{current position} - \text{target position}\right| :: [0.0, 119.99999999999999, 0.0, -90.0, 0.0, 59.99999999999999] 0.0 [0.0, -119.99999999999999, 0.0, -90.0, 0.0, -59.99999999999999] 6.28318530718 [0.0, -60.00000000000005, 0.0, 90.0, 0.0, 59.99999999999999] 6.28318530718 [0.0, 60.00000000000001, 0.0, 90.0, 0.0, -59.99999999999999] 6.28318530718 [0.0, 117.7665607657826, 7.456826294401656, -92.39856410531434, 0.0, 60.33024982425957] 0.216753826612 [0.0, -57.436310940366894, -7.456826294401656, 92.39856418853617, 0.0, 60.33024982425957] 6.41621345188 [0.0, 62.2334392342174, -7.456826294401656, 92.39856410531434, 0.0, -60.33024982425957] 6.42197739723 [0.0, -122.5636890596331, 7.456826294401656, -92.3985641885362, 0.0, -60.33024982425957] 6.50570308205 [0.0, 115.89125602137928, 14.781064139466098, -94.7660423112577, 0.0, 61.314597086440706] 0.219062698235 [0.0, -125.42334103772737, 14.781064139466098, -94.7660427050904, 0.0, -61.314597086440706] 6.53671995288 [0.0, -54.57665896227262, -14.781064139466098, 94.76604270509038, 0.0, 61.314597086440706] 6.67989976726 [0.0, 64.10874397862072, -14.781064139466098, 94.7660423112577, 0.0, -61.314597086440706] 6.71437170098 [0.0, 114.39338605351007, 21.85448296702796, -97.074145033719, 0.0, 62.93506298693471] 0.218163667981 [0.0, -128.54167683157993, 21.85448296702796, -97.07414574435087, 0.0, -62.93506298693471] 6.59846359365 [0.0, -51.45832316842005, -21.85448296702796, 97.07414574435087, 0.0, 62.93506298693471] 6.93673746356 [0.0, 65.60661394648993, -21.85448296702796, 97.074145033719, 0.0, -62.93506298693471] 7.03385205725 [0.0, 113.28316795475283, 28.583837575232764, -99.29953499008337, 0.0, 65.16540747008955] 0.21459359225 [0.0, -131.88223933078322, 28.583837575232764, -99.29953638594702, 0.0, -65.16540747008955] 6.69038531388 [0.0, -48.11776066921677, -28.583837575232764, 99.29953638594702, 0.0, 65.16540747008955] 7.18296350386 [0.0, 66.71683204524717, -28.583837575232764, 99.29953499008337, 0.0, -65.16540747008955] 7.37556986959 [0.0, 112.56286877075006, 34.90573305321372, -101.42496979586187, 0.0, 67.97568017857415] 0.209053830457 [0.0, -135.4128111996365, 34.90573305321372, -101.42497263302461, 0.0, -67.97568017857415] 6.81174779784 [0.0, -44.58718880036348, -34.90573305321372, 101.4249726330246, 0.0, 67.97568017857415] 7.41581162393 [0.0, 67.43713122924994, -34.90573305321372, 101.42496979586187, 0.0, -67.97568017857415] 7.7353201851 [0.0, 112.2291126083182, 40.78594007247402, -103.43941832567457, 0.0, 71.33706722449408] 0.202280147961 [0.0, -139.10795451001587, 40.78594007247402, -103.43942357602316, 0.0, -71.33706722449408] 6.96173845391 [0.0, -40.89204548998411, -40.78594007247402, 103.43942357602312, 0.0, 71.33706722449408] 7.63358787543 [0.0, 67.7708873916818, -40.78594007247402, 103.43941832567457, 0.0, -71.33706722449408] 8.10986069093 [0.0, 112.27578927291766, 46.214916130901734, -105.33741042812996, 0.0, 75.22640762217479] 0.196576175748 [0.0, -142.95061850160724, 46.214916130901734, -105.3374188005596, 0.0, -75.22640762217479] 7.13962155618 [0.0, -37.04938149839278, -46.214916130901734, 105.33741880055959, 0.0, 75.22640762217479] 7.83557762281 [0.0, 67.72421072708234, -46.214916130901734, 105.33741042812996, 0.0, -75.22640762217479] 8.49706672677 [0.0, 112.697137434232, 51.201667684695856, -107.11797492933192, 0.0, 79.63023536264535] 0.202327153157 [0.0, -146.9330984641471, 51.201667684695856, -107.11798610058318, 0.0, -79.63023536264535] 7.34491897177 [0.0, -33.0669015358529, -51.201667684695856, 107.11798610058317, 0.0, 79.63023536264535] 8.02185610877 [0.0, 67.30286256576798, -51.201667684695856, 107.11797492933192, 0.0, -79.63023536264535] 8.89597005568 [0.0, 113.49085964586432, 55.76762791023837, -108.78347437395287, 0.0, 84.54867879242364] 0.208455586312 [0.0, -151.05782007465257, 55.76762791023837, -108.78348605483542, 0.0, -84.54867879242364] 7.57761473366 [0.0, -28.942179925347414, -55.76762791023837, 108.78348605483538, 0.0, 84.54867879242364] 8.19307323084 [0.0, 66.50914035413568, -55.76762791023837, 108.78347437395287, 0.0, -84.54867879242364] 9.30675279514 [0.0, 114.6614608037443, 59.941489465646214, -110.3385360479293, 0.0, 90.00000081324956] 0.215562935229 [0.0, -155.33854118146962, 59.941489465646214, -110.33854432979601, 0.0, -89.99999918675044] 7.83839602383 [0.0, -24.661458818530395, -59.941489465646214, 110.33854432979601, 0.0, 90.00000081324956] 8.3502621071 [0.0, 65.3385391962557, -59.941489465646214, 110.3385360479293, 0.0, -89.99999918675044] 9.7307712883 as you can see for the first point of the trajectory, the 2nd, 3rd and 4th solutions have identical distances to the current position of the diffractometer so they are un-ordered:: [0.0, 119.99999999999999, 0.0, -90.0, 0.0, 59.99999999999999] 0.0 [0.0, -119.99999999999999, 0.0, -90.0, 0.0, -59.99999999999999] 6.28318530718 [0.0, -60.00000000000005, 0.0, 90.0, 0.0, 59.99999999999999] 6.28318530718 [0.0, 60.00000000000001, 0.0, 90.0, 0.0, -59.99999999999999] 6.28318530718 then the problem arise with the second and third solution. you can see a sort of reorganisation of the solution. 2 -> 3, 3 -> 4 and 4 -> 2 then the order will stick unchanged until the end of the trajectory. this is because the distance is computed relatively to the current position of the diffractometer.:: [0.0, 117.7665607657826, 7.456826294401656, -92.39856410531434, 0.0, 60.33024982425957] 0.216753826612 [0.0, -57.436310940366894, -7.456826294401656, 92.39856418853617, 0.0, 60.33024982425957] 6.41621345188 [0.0, 62.2334392342174, -7.456826294401656, 92.39856410531434, 0.0, -60.33024982425957] 6.42197739723 [0.0, -122.5636890596331, 7.456826294401656, -92.3985641885362, 0.0, -60.33024982425957] 6.50570308205 [0.0, 115.89125602137928, 14.781064139466098, -94.7660423112577, 0.0, 61.314597086440706] 0.219062698235 [0.0, -125.42334103772737, 14.781064139466098, -94.7660427050904, 0.0, -61.314597086440706] 6.53671995288 [0.0, -54.57665896227262, -14.781064139466098, 94.76604270509038, 0.0, 61.314597086440706] 6.67989976726 [0.0, 64.10874397862072, -14.781064139466098, 94.7660423112577, 0.0, -61.314597086440706] 6.71437170098 .. warning:: when you compute a trajectory, start from a valid position (the starting point must be the real first point of your trajectory) then use only the closest solution for the next points of the trajectory. (first solution of the geometries list) hkl-5.0.0.2449/Documentation/sphinx/source/pyplots/0000755000175000017500000000000013237020546022251 5ustar00piccapicca00000000000000hkl-5.0.0.2449/Documentation/sphinx/source/pyplots/trajectory_full.py0000755000175000017500000000376312710332472026046 0ustar00piccapicca00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import math import numpy import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt from gi.repository import GLib from gi.repository import Hkl sample = Hkl.Sample.new("toto") lattice = Hkl.Lattice.new(1.54, 1.54, 1.54, math.radians(90.0), math.radians(90.0), math.radians(90.)) sample.lattice_set(lattice) detector = Hkl.Detector.factory_new(Hkl.DetectorType(0)) factory = Hkl.factories()['K6C'] geometry = factory.create_new_geometry() axis_names = geometry.axis_names_get() geometry.axis_values_set([0., 120, 0., -90., 0., 60.], Hkl.UnitEnum.USER) engines = factory.create_new_engine_list() engines.init(geometry, detector, sample) n = 10 h = numpy.linspace(0, 0, n + 1) k = numpy.linspace(0, 1, n + 1) l = numpy.linspace(1, 1, n + 1) # get the hkl engine hkl = engines.engine_get_by_name("hkl") # set the hkl engine and get the results trajectories = [] for hh, kk, ll in zip(h, k, l): try: solutions = hkl.pseudo_axis_values_set([hh, kk, ll], Hkl.UnitEnum.USER) first_solution = solutions.items()[0] for i, item in enumerate(solutions.items()): try: trajectories[i] except IndexError: trajectories.append([]) values = item.geometry_get().axis_values_get(Hkl.UnitEnum.USER) # print values, item.geometry.distance(geometry) trajectories[i].append(values) engines.select_solution(first_solution) # print except GLib.GError, err: pass for i, (trajectory, title) in enumerate(zip(trajectories[1:], ["2nd", "3rd", "4th"])): ax = plt.subplot(1, 3, i + 1) plt.title(title) plt.plot(trajectory, 'o-') plt.ylim(-180, 180) if i != 0: for tl in ax.get_yticklabels(): tl.set_visible(False) hkl-5.0.0.2449/Documentation/sphinx/source/pyplots/trajectory_simple.py0000755000175000017500000000446212710332472026372 0ustar00piccapicca00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import math import numpy import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt from gi.repository import GLib from gi.repository import Hkl sample = Hkl.Sample.new("toto") lattice = Hkl.Lattice.new(1.54, 1.54, 1.54, math.radians(90), math.radians(90), math.radians(90)) sample.lattice_set(lattice) detector = Hkl.Detector.factory_new(Hkl.DetectorType(0)) factory = Hkl.factories()['K6C'] geometry = factory.create_new_geometry() axis_names = geometry.axis_names_get() # set the initial position geometry.axis_values_set([0, 120, 0, -90, 0, 60], Hkl.UnitEnum.USER) # get all engines for a given configuration engines = factory.create_new_engine_list() # prepare the engines to work with the related geometry, detector and # sample engines.init(geometry, detector, sample) #[0, 0, 1] -> [0, 1, 1] n = 10 h = numpy.linspace(0, 0, n + 1) k = numpy.linspace(0, 1, n + 1) l = numpy.linspace(1, 1, n + 1) # get the hkl engine hkl = engines.engine_get_by_name("hkl") pseudo_axis_names = ["h", "k", "l"] # compute the trajectory motors_positions = [] for idx, hh, kk, ll in zip(range(n), h, k, l): try: solutions = hkl.pseudo_axis_values_set([hh, kk, ll], Hkl.UnitEnum.USER) first_solution = solutions.items()[0] # if no exception raised we have at least one solution # move the diffractometer to the solution engines.select_solution(first_solution) motors_positions.append(geometry.axis_values_get(Hkl.UnitEnum.USER)) except GLib.GError, err: pass plt.subplot(1, 2, 1) plt.title("motors trajectory (1st solution)") # reorder the motors_positions for the plot motors_positions = numpy.array(motors_positions).T for y, name in zip(motors_positions, axis_names): plt.plot(y, 'o-', label=name) plt.legend(loc=2) plt.ylim(-180, 180) plt.xlabel("trajectory point index") plt.ylabel("motor position (Degree)") plt.subplot(1, 2, 2) plt.title("hkl trajectory") hkl_positions = numpy.array([h, k, l]) for y, name in zip(hkl_positions, pseudo_axis_names): plt.plot(y, 'o-', label=name) plt.legend(loc=2) plt.ylim(-0.1, 1.1) plt.xlabel("trajectory point index") plt.ylabel("pseudo motor position") hkl-5.0.0.2449/Documentation/sphinx/source/pseudo.rst0000644000175000017500000000531412710332472022572 0ustar00piccapicca00000000000000.. _pseudo: PseudoAxes ########## This section describe the calculations done by the library for the different kind of pseudo axes. Eulerians to Kappa angles ************************* 1st solution .. math:: :nowrap: \begin{eqnarray*} \kappa_\omega & = & \omega - p + \frac{\pi}{2} \\ \kappa & = & 2 \arcsin\left(\frac{\sin\frac{\chi}{2}}{\sin\alpha}\right) \\ \kappa_\phi & = & \phi - p - \frac{\pi}{2} \end{eqnarray*} or 2nd one .. math:: :nowrap: \begin{eqnarray*} \kappa_\omega & = & \omega - p - \frac{\pi}{2} \\ \kappa & = & -2 \arcsin\left(\frac{\sin\frac{\chi}{2}}{\sin\alpha}\right) \\ \kappa_\phi & = & \phi - p + \frac{\pi}{2} \end{eqnarray*} where .. math:: p = \arcsin\left(\frac{\tan\frac{\chi}{2}}{\tan\alpha}\right); and :math:`\alpha` is the angle of the kappa axis with the :math:`\vec{y}` axis. Kappa to Eulerians angles ************************* 1st solution .. math:: :nowrap: \begin{eqnarray*} \omega & = & \kappa_\omega + p - \frac{\pi}{2} \\ \chi & = & 2 \arcsin\left(\sin\frac{\kappa}{2} \sin\alpha\right) \\ \phi & = & \kappa_\phi + p + \frac{\pi}{2} \end{eqnarray*} or 2nd one .. math:: :nowrap: \begin{eqnarray*} \omega & = & \kappa_\omega + p + \frac{\pi}{2} \\ \chi & = & -2 \arcsin\left(\sin\frac{\kappa}{2} \sin\alpha\right) \\ \phi & = & \kappa_\phi + p - \frac{\pi}{2} \end{eqnarray*} where .. math:: p = \arctan\left(\tan\frac{\kappa}{2} \cos\alpha\right) .. figure:: ../../figures/e2k_1.png :align: center :width: 8cm :math:`\omega = 0`, :math:`\chi = 0`, :math:`\phi = 0`, 1st solution .. figure:: ../../figures/e2k_2.png :align: center :width: 8cm :math:`\omega = 0`, :math:`\chi = 0`, :math:`\phi = 0`, 2nd solution .. figure:: ../../figures/e2k_3.png :align: center :width: 8cm :math:`\omega = 0`, :math:`\chi = 90`, :math:`\phi = 0`, 1st solution .. figure:: ../../figures/e2k_4.png :align: center :width: 8cm :math:`\omega = 0`, :math:`\chi = 90`, :math:`\phi = 0`, 2nd solution Qper and Qpar ************* .. figure:: ../../figures/qper_qpar.png :align: center :width: 12cm this pseudo axis engine compute the perpendicular (:math:`\left|\left|\vec{Q_\text{per}}\right|\right|`) and parallel (:math:`\left|\left|\vec{Q_\text{par}}\right|\right|`) contribution of :math:`\vec{Q}` relatively to the surface of the sample defined by the :math:`\vec{n}` vector. .. math:: :nowrap: \begin{eqnarray*} \vec{q} & = & \vec{k_\text{f}} - \vec{k_\text{i}} \\ \vec{q} & = & \vec{q_\text{per}} + \vec{q_\text{par}} \\ \vec{q_\text{per}} & = & \frac{\vec{q} \cdot \vec{n}}{\left|\left|\vec{n}\right|\right|} \frac{\vec{n}}{\left|\left|\vec{n}\right|\right|} \end{eqnarray*} hkl-5.0.0.2449/Documentation/sphinx/source/development.rst0000644000175000017500000000637712710332472023627 0ustar00piccapicca00000000000000.. _development: Developpement ############# Getting hkl *********** To get hkl, you can download the last stable version from sourceforge or if you want the latest development version use `git `_ or `msysgit `_ on windows system and do:: $ git clone git://repo.or.cz/hkl.git or:: $ git clone http://repo.or.cz/r/hkl.git (slower) then checkout the next branch like this:: $ cd hkl $ git checkout -b next origin/next Building hkl ************ To build hkl you need `Python 2.3+ `_ the `GNU Scientific Library 1.12 `_ and `GLib-2.0 >= 2.3.4 `_:: $ ./configure --disable-gui $ make $ sudo make install you can also build a GUI interfaces which use `gtk `_:: $ ./configure $ make $ sudo make install optionnaly you can build an experimental *libhkl3d* library (no public API for now) which is used by the GUI to display and compute diffractometer collisions (only the *K6C* model). To build it you need also `gtkglext `_ and `bullet 2.82 `_:: $ ./configure --enable-hkl3d $ make $ sudo make install if you want to work on the documentation you need the extra + `gtk-doc `_ for the api + `sphinx `_ for the html and latex doc. + `asymptote `_ for the figures :: $ ./configure --enable-gtk-doc $ make $ make html Hacking hkl *********** Bug reporting ============= You can find the bug tracker here `libhkl `_ * Debian/Ubuntu:: $ reportbug hkl * Other OS You just need to send an email:: To: submit@bugs.debian.org From: xxx@yyy.zzz Subject: My problem with hkl... Package: hkl Version: |version| I found this problem in hkl... Providing patchs ================ you can send your patch to `Picca Frédéric-Emmanuel `_ using ``git`` Here a minimalist exemple of the workflow to prepare and send a patch for hkl. Suppose you wan to add a new feature to hkl create first a new branch from the next one:: $ git checkout -b my-next next hack, hack:: $ git commit -a more hacks:: $ git commit -a now that your new feature is ready for a review, you can send by email your work using git format-patch:: $ git format-patch origin/next and send generated files `0001_xxx`, `0002_xxx`, ... to the author. Howto add a diffractometer ************************** To add a new diffractometer, you just need to copy the :file:`hkl/hkl-engine-template.c` into :file:`hkl/hkl-engine-INSTITUT-BEAMLINE-INSTRUMENT.c` where you replace the upper case with the appropriate values. The template file is compiled during the build process to ensure that it is always valid. Then you just need to follow the instruction found in the template. If you need some precision about the process, do not hesitate to contact the main author. do not forgot also to add this new file into :file:`hkl/Makefile.am` with other diffractometers in the hkl_c_sources variable (please keep the alphabetic order). hkl-5.0.0.2449/Documentation/sphinx/source/index.rst0000644000175000017500000000152312710332472022400 0ustar00piccapicca00000000000000.. hkl documentation master file, created by sphinx-quickstart on Sat May 28 14:45:51 2011. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. Welcome to hkl's |version| documentation! ========================================= Contents: .. toctree:: :maxdepth: 1 :numbered: :titlesonly: introduction diffractometers/e4cv diffractometers/k4cv diffractometers/e6c diffractometers/k6c diffractometers/zaxis diffractometers/med1_2 diffractometers/med2_2 diffractometers/med2_3 diffractometers/mars diffractometers/petra3 diffractometers/soleil_sirius_turret diffractometers/soleil_sirius_kappa pseudo bindings/bindings development Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` hkl-5.0.0.2449/Documentation/sphinx/Makefile.am0000644000175000017500000000172412710332472021276 0ustar00piccapicca00000000000000TESTS_ENVIRONMENT=env GI_TYPELIB_PATH=$(top_builddir)/hkl $(LIBTOOL) --mode=execute -dlopen $(top_builddir)/hkl/libhkl.la TESTS =\ source/bindings/python.py \ source/pyplots/trajectory_full.py \ source/pyplots/trajectory_simple.py EXTRA_DIST = \ source/conf.py.in \ source/bindings/bindings.rst \ source/development.rst \ source/diffractometers/e4cv.rst \ source/diffractometers/e6c.rst \ source/diffractometers/k4cv.rst \ source/diffractometers/k6c.rst \ source/diffractometers/mars.rst \ source/diffractometers/med1_2.rst \ source/diffractometers/med2_2.rst \ source/diffractometers/med2_3.rst \ source/diffractometers/petra3.rst \ source/diffractometers/soleil_sirius_kappa.rst \ source/diffractometers/soleil_sirius_turret.rst \ source/diffractometers/zaxis.rst \ source/index.rst \ source/introduction.rst \ source/pseudo.rst \ $(TESTS) -include $(top_srcdir)/sphinx.make publish: html rsync -avz build/html/ picca@people.debian.org:public_html/hkl hkl-5.0.0.2449/Documentation/sphinx/Makefile.in0000644000175000017500000007110313237017633021311 0ustar00piccapicca00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = Documentation/sphinx ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/config/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASY = @ASY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BULLET_CFLAGS = @BULLET_CFLAGS@ BULLET_LIBS = @BULLET_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMACS = @EMACS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ G3D_CFLAGS = @G3D_CFLAGS@ G3D_LIBS = @G3D_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GNUPLOT = @GNUPLOT@ GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ GOBJECT_LIBS = @GOBJECT_LIBS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTKGLEXT_CFLAGS = @GTKGLEXT_CFLAGS@ GTKGLEXT_LIBS = @GTKGLEXT_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HDF5_CFLAGS = @HDF5_CFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VMAJ = @VMAJ@ YAML_CFLAGS = @YAML_CFLAGS@ YAML_LIBS = @YAML_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ release_info = @release_info@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ version_info = @version_info@ TESTS_ENVIRONMENT = env GI_TYPELIB_PATH=$(top_builddir)/hkl $(LIBTOOL) --mode=execute -dlopen $(top_builddir)/hkl/libhkl.la TESTS = \ source/bindings/python.py \ source/pyplots/trajectory_full.py \ source/pyplots/trajectory_simple.py EXTRA_DIST = \ source/conf.py.in \ source/bindings/bindings.rst \ source/development.rst \ source/diffractometers/e4cv.rst \ source/diffractometers/e6c.rst \ source/diffractometers/k4cv.rst \ source/diffractometers/k6c.rst \ source/diffractometers/mars.rst \ source/diffractometers/med1_2.rst \ source/diffractometers/med2_2.rst \ source/diffractometers/med2_3.rst \ source/diffractometers/petra3.rst \ source/diffractometers/soleil_sirius_kappa.rst \ source/diffractometers/soleil_sirius_turret.rst \ source/diffractometers/zaxis.rst \ source/index.rst \ source/introduction.rst \ source/pseudo.rst \ $(TESTS) all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Documentation/sphinx/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Documentation/sphinx/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? source/bindings/python.py.log: source/bindings/python.py @p='source/bindings/python.py'; \ b='source/bindings/python.py'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) source/pyplots/trajectory_full.py.log: source/pyplots/trajectory_full.py @p='source/pyplots/trajectory_full.py'; \ b='source/pyplots/trajectory_full.py'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) source/pyplots/trajectory_simple.py.log: source/pyplots/trajectory_simple.py @p='source/pyplots/trajectory_simple.py'; \ b='source/pyplots/trajectory_simple.py'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ clean-libtool cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \ uninstall uninstall-am .PRECIOUS: Makefile -include $(top_srcdir)/sphinx.make publish: html rsync -avz build/html/ picca@people.debian.org:public_html/hkl # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: hkl-5.0.0.2449/Documentation/api/0000755000175000017500000000000013237020544016475 5ustar00piccapicca00000000000000hkl-5.0.0.2449/Documentation/api/hkl-overrides.txt0000644000175000017500000000000013237020123021773 0ustar00piccapicca00000000000000hkl-5.0.0.2449/Documentation/api/Makefile.am0000644000175000017500000000665112710332472020542 0ustar00piccapicca00000000000000## Process this file with automake to produce Makefile.in # We require automake 1.6 at least. AUTOMAKE_OPTIONS = 1.6 # This is a blank Makefile.am for using gtk-doc. # Copy this to your project's API docs directory and modify the variables to # suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples # of using the various options. # The name of the module, e.g. 'glib'. DOC_MODULE=hkl # Uncomment for versioned docs and specify the version of the module, e.g. '2'. DOC_MODULE_VERSION=@VMAJ@ # The top-level SGML file. You can change this if you want to. DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml # The directory containing the source code. Relative to $(srcdir). # gtk-doc will search all .c & .h files beneath here for inline comments # documenting the functions and macros. # e.g. DOC_SOURCE_DIR=../../../gtk DOC_SOURCE_DIR=$(top_srcdir)/hkl # Extra options to pass to gtkdoc-scangobj. Not normally needed. SCANGOBJ_OPTIONS= # Extra options to supply to gtkdoc-scan. # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" SCAN_OPTIONS=--rebuild-types --rebuild-sections # Extra options to supply to gtkdoc-mkdb. # e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml MKDB_OPTIONS=--xml-mode --output-format=xml # Extra options to supply to gtkdoc-mktmpl # e.g. MKTMPL_OPTIONS=--only-section-tmpl MKTMPL_OPTIONS= # Extra options to supply to gtkdoc-mkhtml MKHTML_OPTIONS= # Extra options to supply to gtkdoc-fixref. Not normally needed. # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html FIXXREF_OPTIONS= # Used for dependencies. The docs will be rebuilt if any of these change. # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c HFILE_GLOB=$(top_srcdir)/hkl/*.h $(top_srcdir)/hkl.h CFILE_GLOB=$(top_srcdir)/hkl/*.c # Extra header to include when scanning, which are not under DOC_SOURCE_DIR # e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h EXTRA_HFILES=$(top_srcdir)/hkl.h # Header files to ignore when scanning. Use base file name, no paths # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h IGNORE_HFILES= # Images to copy into HTML directory. # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png HTML_IMAGES= # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). # e.g. content_files=running.sgml building.sgml changes-2.0.sgml content_files= # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded # These files must be listed here *and* in content_files # e.g. expand_content_files=running.sgml expand_content_files= # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. # Only needed if you are using gtkdoc-scangobj to dynamically query widget # signals and properties. # e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) GTKDOC_CFLAGS= GTKDOC_LIBS= # This includes the standard gtk-doc make rules, copied by gtkdocize. include $(top_srcdir)/gtk-doc.make # Other files to distribute # e.g. EXTRA_DIST += version.xml.in EXTRA_DIST += # Files not to distribute # for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types # for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt DISTCLEANFILES = $(DOC_MODULE).types $(DOC_MODULE)-sections.txt # Comment this out if you want your docs-status tested during 'make check' if ENABLE_GTK_DOC #TESTS_ENVIRONMENT = cd $(srcsrc) && #TESTS = $(GTKDOC_CHECK) endif -include $(top_srcdir)/git.mk hkl-5.0.0.2449/Documentation/api/Makefile.in0000644000175000017500000006776113237017632020567 0ustar00piccapicca00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -*- mode: makefile -*- # # gtk-doc.make - make rules for gtk-doc # Copyright (C) 2003 James Henstridge # 2004-2007 Damon Chaplin # 2007-2017 Stefan Sauer # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . #################################### # Everything below here is generic # #################################### VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = Documentation/api ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/gtk-doc.make DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASY = @ASY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BULLET_CFLAGS = @BULLET_CFLAGS@ BULLET_LIBS = @BULLET_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMACS = @EMACS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ G3D_CFLAGS = @G3D_CFLAGS@ G3D_LIBS = @G3D_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GNUPLOT = @GNUPLOT@ GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ GOBJECT_LIBS = @GOBJECT_LIBS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTKGLEXT_CFLAGS = @GTKGLEXT_CFLAGS@ GTKGLEXT_LIBS = @GTKGLEXT_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HDF5_CFLAGS = @HDF5_CFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VMAJ = @VMAJ@ YAML_CFLAGS = @YAML_CFLAGS@ YAML_LIBS = @YAML_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ release_info = @release_info@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ version_info = @version_info@ # We require automake 1.6 at least. AUTOMAKE_OPTIONS = 1.6 # This is a blank Makefile.am for using gtk-doc. # Copy this to your project's API docs directory and modify the variables to # suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples # of using the various options. # The name of the module, e.g. 'glib'. DOC_MODULE = hkl # Uncomment for versioned docs and specify the version of the module, e.g. '2'. DOC_MODULE_VERSION = @VMAJ@ # The top-level SGML file. You can change this if you want to. DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.sgml # The directory containing the source code. Relative to $(srcdir). # gtk-doc will search all .c & .h files beneath here for inline comments # documenting the functions and macros. # e.g. DOC_SOURCE_DIR=../../../gtk DOC_SOURCE_DIR = $(top_srcdir)/hkl # Extra options to pass to gtkdoc-scangobj. Not normally needed. SCANGOBJ_OPTIONS = # Extra options to supply to gtkdoc-scan. # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" SCAN_OPTIONS = --rebuild-types --rebuild-sections # Extra options to supply to gtkdoc-mkdb. # e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml MKDB_OPTIONS = --xml-mode --output-format=xml # Extra options to supply to gtkdoc-mktmpl # e.g. MKTMPL_OPTIONS=--only-section-tmpl MKTMPL_OPTIONS = # Extra options to supply to gtkdoc-mkhtml MKHTML_OPTIONS = # Extra options to supply to gtkdoc-fixref. Not normally needed. # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html FIXXREF_OPTIONS = # Used for dependencies. The docs will be rebuilt if any of these change. # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c HFILE_GLOB = $(top_srcdir)/hkl/*.h $(top_srcdir)/hkl.h CFILE_GLOB = $(top_srcdir)/hkl/*.c # Extra header to include when scanning, which are not under DOC_SOURCE_DIR # e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h EXTRA_HFILES = $(top_srcdir)/hkl.h # Header files to ignore when scanning. Use base file name, no paths # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h IGNORE_HFILES = # Images to copy into HTML directory. # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png HTML_IMAGES = # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). # e.g. content_files=running.sgml building.sgml changes-2.0.sgml content_files = # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded # These files must be listed here *and* in content_files # e.g. expand_content_files=running.sgml expand_content_files = # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. # Only needed if you are using gtkdoc-scangobj to dynamically query widget # signals and properties. # e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) GTKDOC_CFLAGS = GTKDOC_LIBS = @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN = @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to # whether a source that is a target of one rule is then # searched for in VPATH/GPATH. # GPATH = $(srcdir) TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE) SETUP_FILES = \ $(content_files) \ $(expand_content_files) \ $(DOC_MAIN_SGML_FILE) \ $(DOC_MODULE)-sections.txt \ $(DOC_MODULE)-overrides.txt # This includes the standard gtk-doc make rules, copied by gtkdocize. # Other files to distribute # e.g. EXTRA_DIST += version.xml.in EXTRA_DIST = $(HTML_IMAGES) $(SETUP_FILES) DOC_STAMPS = setup-build.stamp scan-build.stamp sgml-build.stamp \ html-build.stamp pdf-build.stamp \ sgml.stamp html.stamp pdf.stamp SCANOBJ_FILES = \ $(DOC_MODULE).args \ $(DOC_MODULE).hierarchy \ $(DOC_MODULE).interfaces \ $(DOC_MODULE).prerequisites \ $(DOC_MODULE).signals REPORT_FILES = \ $(DOC_MODULE)-undocumented.txt \ $(DOC_MODULE)-undeclared.txt \ $(DOC_MODULE)-unused.txt CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) gtkdoc-check.test @GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP = @GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp @GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP = @GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp #### setup #### GTK_DOC_V_SETUP = $(GTK_DOC_V_SETUP_@AM_V@) GTK_DOC_V_SETUP_ = $(GTK_DOC_V_SETUP_@AM_DEFAULT_V@) GTK_DOC_V_SETUP_0 = @echo " DOC Preparing build"; #### scan #### GTK_DOC_V_SCAN = $(GTK_DOC_V_SCAN_@AM_V@) GTK_DOC_V_SCAN_ = $(GTK_DOC_V_SCAN_@AM_DEFAULT_V@) GTK_DOC_V_SCAN_0 = @echo " DOC Scanning header files"; GTK_DOC_V_INTROSPECT = $(GTK_DOC_V_INTROSPECT_@AM_V@) GTK_DOC_V_INTROSPECT_ = $(GTK_DOC_V_INTROSPECT_@AM_DEFAULT_V@) GTK_DOC_V_INTROSPECT_0 = @echo " DOC Introspecting gobjects"; #### xml #### GTK_DOC_V_XML = $(GTK_DOC_V_XML_@AM_V@) GTK_DOC_V_XML_ = $(GTK_DOC_V_XML_@AM_DEFAULT_V@) GTK_DOC_V_XML_0 = @echo " DOC Building XML"; #### html #### GTK_DOC_V_HTML = $(GTK_DOC_V_HTML_@AM_V@) GTK_DOC_V_HTML_ = $(GTK_DOC_V_HTML_@AM_DEFAULT_V@) GTK_DOC_V_HTML_0 = @echo " DOC Building HTML"; GTK_DOC_V_XREF = $(GTK_DOC_V_XREF_@AM_V@) GTK_DOC_V_XREF_ = $(GTK_DOC_V_XREF_@AM_DEFAULT_V@) GTK_DOC_V_XREF_0 = @echo " DOC Fixing cross-references"; #### pdf #### GTK_DOC_V_PDF = $(GTK_DOC_V_PDF_@AM_V@) GTK_DOC_V_PDF_ = $(GTK_DOC_V_PDF_@AM_DEFAULT_V@) GTK_DOC_V_PDF_0 = @echo " DOC Building PDF"; # Files not to distribute # for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types # for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt DISTCLEANFILES = $(DOC_MODULE).types $(DOC_MODULE)-sections.txt all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Documentation/api/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Documentation/api/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/gtk-doc.make $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am @ENABLE_GTK_DOC_FALSE@all-local: all-am: Makefile all-local installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am all-local check check-am clean clean-generic \ clean-libtool clean-local cscopelist-am ctags-am dist-hook \ distclean distclean-generic distclean-libtool distclean-local \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-data-local \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ maintainer-clean-local mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-local .PRECIOUS: Makefile gtkdoc-check.test: Makefile $(AM_V_GEN)echo "#!/bin/sh -e" > $@; \ echo "$(GTKDOC_CHECK_PATH) || exit 1" >> $@; \ chmod +x $@ all-gtk-doc: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) .PHONY: all-gtk-doc @ENABLE_GTK_DOC_TRUE@all-local: all-gtk-doc docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) $(REPORT_FILES): sgml-build.stamp setup-build.stamp: -$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ files=`echo $(SETUP_FILES) $(DOC_MODULE).types`; \ if test "x$$files" != "x" ; then \ for file in $$files ; do \ destdir=`dirname $(abs_builddir)/$$file`; \ test -d "$$destdir" || mkdir -p "$$destdir"; \ test -f $(abs_srcdir)/$$file && \ cp -pf $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \ done; \ fi; \ fi $(AM_V_at)touch setup-build.stamp scan-build.stamp: setup-build.stamp $(HFILE_GLOB) $(CFILE_GLOB) $(GTK_DOC_V_SCAN)_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES) $(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ scanobj_options=""; \ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ scanobj_options="--verbose"; \ fi; \ fi; \ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \ else \ for i in $(SCANOBJ_FILES) ; do \ test -f $$i || touch $$i ; \ done \ fi $(AM_V_at)touch scan-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp @true sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(HFILE_GLOB) $(CFILE_GLOB) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files) xml/gtkdocentities.ent $(GTK_DOC_V_XML)_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS) $(AM_V_at)touch sgml-build.stamp sgml.stamp: sgml-build.stamp @true $(DOC_MAIN_SGML_FILE): sgml-build.stamp @true xml/gtkdocentities.ent: Makefile $(GTK_DOC_V_XML)$(MKDIR_P) $(@D) && ( \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ ) > $@ html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files) $(GTK_DOC_V_HTML)rm -rf html && mkdir html && \ mkhtml_options=""; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ mkhtml_options="$$mkhtml_options --verbose"; \ fi; \ fi; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ if test "$$?" = "0"; then \ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \ fi; \ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) -@test "x$(HTML_IMAGES)" = "x" || \ for file in $(HTML_IMAGES) ; do \ test -f $(abs_srcdir)/$$file && cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ test -f $(abs_builddir)/$$file && cp $(abs_builddir)/$$file $(abs_builddir)/html; \ test -f $$file && cp $$file $(abs_builddir)/html; \ done; $(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) $(AM_V_at)touch html-build.stamp pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files) $(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \ mkpdf_options=""; \ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ mkpdf_options="$$mkpdf_options --verbose"; \ fi; \ fi; \ if test "x$(HTML_IMAGES)" != "x"; then \ for img in $(HTML_IMAGES); do \ part=`dirname $$img`; \ echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \ if test $$? != 0; then \ mkpdf_options="$$mkpdf_options --imgdir=$$part"; \ fi; \ done; \ fi; \ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS) $(AM_V_at)touch pdf-build.stamp ############## clean-local: @rm -f *~ *.bak @rm -rf .libs @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-types" ; then \ rm -f $(DOC_MODULE).types; \ fi @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-sections" ; then \ rm -f $(DOC_MODULE)-sections.txt; \ fi distclean-local: @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ rm -f $(SETUP_FILES) $(DOC_MODULE).types; \ fi maintainer-clean-local: @rm -rf xml html install-data-local: @installfiles=`echo $(builddir)/html/*`; \ if test "$$installfiles" = '$(builddir)/html/*'; \ then echo 1>&2 'Nothing to install' ; \ else \ if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ $(mkinstalldirs) $${installdir} ; \ for i in $$installfiles; do \ echo ' $(INSTALL_DATA) '$$i ; \ $(INSTALL_DATA) $$i $${installdir}; \ done; \ if test -n "$(DOC_MODULE_VERSION)"; then \ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \ fi; \ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \ fi uninstall-local: @if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ rm -rf $${installdir} # # Require gtk-doc when making dist # @HAVE_GTK_DOC_TRUE@dist-check-gtkdoc: docs @HAVE_GTK_DOC_FALSE@dist-check-gtkdoc: @HAVE_GTK_DOC_FALSE@ @echo "*** gtk-doc is needed to run 'make dist'. ***" @HAVE_GTK_DOC_FALSE@ @echo "*** gtk-doc was not found when 'configure' ran. ***" @HAVE_GTK_DOC_FALSE@ @echo "*** please install gtk-doc and rerun 'configure'. ***" @HAVE_GTK_DOC_FALSE@ @false dist-hook: dist-check-gtkdoc all-gtk-doc dist-hook-local @mkdir $(distdir)/html @cp ./html/* $(distdir)/html @-cp ./$(DOC_MODULE).pdf $(distdir)/ @-cp ./$(DOC_MODULE).types $(distdir)/ @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/ @cd $(distdir) && rm -f $(DISTCLEANFILES) @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html .PHONY : dist-hook-local docs # Comment this out if you want your docs-status tested during 'make check' #TESTS_ENVIRONMENT = cd $(srcsrc) && #TESTS = $(GTKDOC_CHECK) -include $(top_srcdir)/git.mk # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: hkl-5.0.0.2449/Documentation/api/html/0000755000175000017500000000000013237020545017442 5ustar00piccapicca00000000000000hkl-5.0.0.2449/Documentation/api/html/hkl-ptr-valid.html0000644000175000017500000002122713237020545023012 0ustar00piccapicca00000000000000 ptr_valid: hkl Reference Manual

ptr_valid

ptr_valid

Functions

Types and Values

Description

Functions

ptr_valid_read()

#define             ptr_valid_read(p)

ptr_valid_write()

#define             ptr_valid_write(p)

ptr_valid_string ()

bool
ptr_valid_string (const char *p);

ptr_valid ()

bool
ptr_valid (const void *p,
           size_t align,
           size_t size,
           bool write);

ptr_valid_batch_start ()

bool
ptr_valid_batch_start (struct ptr_valid_batch *batch);

ptr_valid_batch_read()

#define             ptr_valid_batch_read(batch, p)

ptr_valid_batch_write()

#define             ptr_valid_batch_write(batch, p)

ptr_valid_batch_string ()

bool
ptr_valid_batch_string (struct ptr_valid_batch *batch,
                        const char *p);

ptr_valid_batch_end ()

void
ptr_valid_batch_end (struct ptr_valid_batch *batch);

PTR_VALID_ALIGNOF()

#define PTR_VALID_ALIGNOF(var) __alignof__(var)

Types and Values

struct ptr_valid_batch

struct ptr_valid_batch {
	unsigned int num_maps;
	struct ptr_valid_map *maps;
	int child_pid;
	int to_child, from_child;
	void *last;
	bool last_ok;
};

struct ptr_valid_map

struct ptr_valid_map {
	const char *start, *end;
	bool is_write;
};
hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-axis-private.html0000644000175000017500000001746313237020545024307 0ustar00piccapicca00000000000000 hkl-axis-private: hkl Reference Manual

hkl-axis-private

hkl-axis-private

Types and Values

Description

Functions

hkl_parameter_new_rotation ()

HklParameter *
hkl_parameter_new_rotation (const char *name,
                            HklVector const *axis_v,
                            const HklUnit *punit);

hkl_parameter_new_rotation_with_origin ()

HklParameter *
hkl_parameter_new_rotation_with_origin
                               (const char *name,
                                const HklVector *axis_v,
                                const HklVector *origin,
                                const HklUnit *punit);

hkl_parameter_new_translation ()

HklParameter *
hkl_parameter_new_translation (const char *name,
                               const HklVector *axis_v,
                               const HklUnit *punit);

Types and Values

struct HklAxis

struct HklAxis {
	HklParameter parameter;
	HklVector axis_v;
	HklQuaternion q; /* internal */
};

struct HklRotationWithOrigin

struct HklRotationWithOrigin {
	HklAxis axis;
	HklVector origin;
};

struct HklTranslation

struct HklTranslation {
	HklParameter parameter;
	HklVector axis_v;
};
hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-pseudoaxis-auto-private.html0000644000175000017500000003507113237020545026470 0ustar00piccapicca00000000000000 hkl-pseudoaxis-auto-private: hkl Reference Manual

hkl-pseudoaxis-auto-private

hkl-pseudoaxis-auto-private

Description

Functions

CHECK_NAN()

#define             CHECK_NAN(x, len)

HKL_MODE_AUTO_INFO()

#define HKL_MODE_AUTO_INFO(_name, _axes_r, _axes_w, _fn) .info={HKL_MODE_INFO(_name, _axes_r, _axes_w),}, .functions=DARRAY(_fn)

HKL_MODE_AUTO_INFO_WITH_PARAMS()

#define HKL_MODE_AUTO_INFO_WITH_PARAMS(_name, _axes_r, _axes_w, _fn, _parameters) .info={HKL_MODE_INFO_WITH_PARAMS(_name, _axes_r, _axes_w, _parameters)}, .functions=DARRAY(_fn)

hkl_mode_auto_new ()

HklMode *
hkl_mode_auto_new (const HklModeAutoInfo *auto_info,
                   const HklModeOperations *ops,
                   int initialized);

hkl_mode_auto_init ()

void
hkl_mode_auto_init (HklMode *self,
                    const HklModeAutoInfo *auto_info,
                    const HklModeOperations *ops,
                    int initialized);

hkl_mode_auto_set_real ()

int
hkl_mode_auto_set_real (HklMode *self,
                        HklEngine *engine,
                        HklGeometry *geometry,
                        HklDetector *detector,
                        HklSample *sample,
                        GError **error);

g_quark_from_static_string ()

return
g_quark_from_static_string ();

hkl_mode_auto_with_init_new ()

HklMode *
hkl_mode_auto_with_init_new (const HklModeAutoInfo *info,
                             const HklModeOperations *ops,
                             int initialized);

Types and Values

struct HklFunction

struct HklFunction {
	const uint size;
	int (* function) (const gsl_vector *x, void *params, gsl_vector *f);
};

darray_function

typedef darray(const HklFunction*) darray_function;

struct HklModeAutoInfo

struct HklModeAutoInfo {
	const HklModeInfo info;
	darray_function functions;
};

HKL_MODE_OPERATIONS_AUTO_DEFAULTS

#define             HKL_MODE_OPERATIONS_AUTO_DEFAULTS

struct HklModeAutoWithInit

struct HklModeAutoWithInit {
	HklMode mode;
	HklGeometry *geometry;
	HklDetector *detector;
	HklSample *sample;
};

HKL_MODE_AUTO_WITH_INIT_ERROR

#define HKL_MODE_AUTO_WITH_INIT_ERROR hkl_mode_auto_with_init_error_quark ()

enum HklModeError

Members

HKL_MODE_AUTO_WITH_INIT_ERROR_INIT

   

HKL_MODE_OPERATIONS_AUTO_WITH_INIT_DEFAULTS

#define             HKL_MODE_OPERATIONS_AUTO_WITH_INIT_DEFAULTS

self

	HklModeAutoWithInit *self = container_of(mode, HklModeAutoWithInit, mode);
hkl-5.0.0.2449/Documentation/api/html/hkl-container-of.html0000644000175000017500000001114213237020545023467 0ustar00piccapicca00000000000000 container_of: hkl Reference Manual

container_of

container_of

Functions

#define container_of()
#define container_of_or_null()
#define container_off()
#define container_of_var()
#define container_off_var()

Description

Functions

container_of()

#define             container_of(member_ptr, containing_type, member)

container_of_or_null()

#define             container_of_or_null(member_ptr, containing_type, member)

container_off()

#define             container_off(containing_type, member)

container_of_var()

#define             container_of_var(member_ptr, container_var, member)

container_off_var()

#define             container_off_var(var, member)

Types and Values

hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-sample-private.html0000644000175000017500000002363413237020545024621 0ustar00piccapicca00000000000000 hkl-sample-private: hkl Reference Manual

hkl-sample-private

hkl-sample-private

Description

Functions

g_quark_from_static_string ()

return
g_quark_from_static_string ();

hkl_sample_fprintf ()

void
hkl_sample_fprintf (FILE *f,
                    const HklSample *self);

print to a file a sample

[skip]


hkl_sample_reflection_new_copy ()

HklSampleReflection *
hkl_sample_reflection_new_copy (const HklSampleReflection *self);

copy constructor

[skip]


hkl_sample_reflection_free ()

void
hkl_sample_reflection_free (HklSampleReflection *self);

destructor

[skip]

Types and Values

HklSample

typedef struct {
	char *name;
	HklLattice *lattice;
	HklMatrix U;
	HklMatrix UB;
	HklParameter *ux;
	HklParameter *uy;
	HklParameter *uz;
	struct list_head reflections;
	size_t n_reflections;
} HklSample;

HKL_SAMPLE_ERROR

#define HKL_SAMPLE_ERROR hkl_sample_error_quark ()

enum HklSampleError

Members

HKL_SAMPLE_ERROR_MINIMIZED

   

HKL_SAMPLE_ERROR_COMPUTE_UB_BUSING_LEVY

   

HklSampleReflection

typedef struct {
	HklGeometry *geometry;
	HklDetector *detector;
	HklSample *sample;
	HklVector hkl;
	HklVector _hkl;
	int flag;
	struct list_node list;
} HklSampleReflection;

HKL_SAMPLE_REFLECTION_ERROR

#define HKL_SAMPLE_REFLECTION_ERROR hkl_sample_reflection_error_quark ()

enum HklSampleReflectionError

Members

HKL_SAMPLE_REFLECTION_ERROR_HKL_SET

   
hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-interval-private.html0000644000175000017500000005607613237020545025172 0ustar00piccapicca00000000000000 hkl-interval-private: hkl Reference Manual

hkl-interval-private

hkl-interval-private

Types and Values

struct HklInterval

Description

Functions

hkl_interval_dup ()

HklInterval *
hkl_interval_dup (const HklInterval *self);

copy an HklInterval

[skip]


hkl_interval_free ()

void
hkl_interval_free (HklInterval *self);

delete an HklInterval

[skip]


hkl_interval_cmp ()

int
hkl_interval_cmp (const HklInterval *self,
                  const HklInterval *interval);

compare two intervals

[skip]


hkl_interval_plus_interval ()

void
hkl_interval_plus_interval (HklInterval *self,
                            const HklInterval *interval);

add two ontervals

[skip]


hkl_interval_plus_double ()

void
hkl_interval_plus_double (HklInterval *self,
                          double const d);

add to an interval a double

[skip]


hkl_interval_minus_interval ()

void
hkl_interval_minus_interval (HklInterval *self,
                             const HklInterval *interval);

substract two HklInterval

[skip]


hkl_interval_minus_double ()

void
hkl_interval_minus_double (HklInterval *self,
                           double const d);

subst a double to an HklInterval

[skip]


hkl_interval_times_interval ()

void
hkl_interval_times_interval (HklInterval *self,
                             const HklInterval *interval);

multiply two HklInterval

[skip]


hkl_interval_times_double ()

void
hkl_interval_times_double (HklInterval *self,
                           double const d);

multiply an HklInterval by a double

[skip]


hkl_interval_divides_double ()

void
hkl_interval_divides_double (HklInterval *self,
                             double const d);

divide an HklInterval by a double

[skip]


hkl_interval_contain_zero ()

int
hkl_interval_contain_zero (const HklInterval *self);

check if an HklInterval contain zero

[skip]


hkl_interval_cos ()

void
hkl_interval_cos (HklInterval *self);

compute the cosinus of an HklInterval

[skip]


hkl_interval_acos ()

void
hkl_interval_acos (HklInterval *self);

compute the arc cosinus of an HklInterval

[skip]


hkl_interval_sin ()

void
hkl_interval_sin (HklInterval *self);

compute the sin of an HklInterval

[skip]


hkl_interval_asin ()

void
hkl_interval_asin (HklInterval *self);

compute the arc sinus of an HklInterval

[skip]


hkl_interval_tan ()

void
hkl_interval_tan (HklInterval *self);

compute the tangente of an HklInterval

[skip]


hkl_interval_atan ()

void
hkl_interval_atan (HklInterval *self);

compute the arc tangente of an HklInterval

[skip]


hkl_interval_length ()

double
hkl_interval_length (const HklInterval *self);

compute the length of an HklInterval

[skip]


hkl_interval_angle_restrict_symm ()

void
hkl_interval_angle_restrict_symm (HklInterval *self);

restrict an HklInterval into -pi, pi

[skip]

Types and Values

struct HklInterval

struct HklInterval {
	double min;
	double max;
};
hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-macros-private.html0000644000175000017500000001562013237020545024620 0ustar00piccapicca00000000000000 hkl-macros-private: hkl Reference Manual

hkl-macros-private

hkl-macros-private

Functions

#define hkl_assert()
#define hkl_error()
#define G_GNUC_PRINTF()
#define alloc_nr()
#define ALLOC_GROW()
#define DARRAY()
void hkl_printbt ()
#define HKL_MALLOC()

Types and Values

Description

Functions

hkl_assert()

# define hkl_assert(x) do{ if (!(x)) {hkl_printbt(); assert(x); } } while(0)

hkl_error()

#define             hkl_error(expr)

G_GNUC_PRINTF()

#define             G_GNUC_PRINTF( format_idx, arg_idx )

alloc_nr()

#define alloc_nr(x) (((x)+16)*3/2)

ALLOC_GROW()

#define             ALLOC_GROW(x, nr, alloc)

DARRAY()

#define DARRAY(_items) {.item=_items, .size=ARRAY_SIZE(_items), .alloc=ARRAY_SIZE(_items)}

hkl_printbt ()

void
hkl_printbt (void);

HKL_MALLOC()

#define HKL_MALLOC(type) (type *)_hkl_malloc(sizeof(type), "Can not allocate memory for a " #type)

Types and Values

HKL_EULERIAN_KAPPA_SOLUTION

#define HKL_EULERIAN_KAPPA_SOLUTION 1

NORETURN

#define             NORETURN
hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-pseudoaxis-common-hkl-private.html0000644000175000017500000003377213237020545027572 0ustar00piccapicca00000000000000 hkl-pseudoaxis-common-hkl-private: hkl Reference Manual

hkl-pseudoaxis-common-hkl-private

hkl-pseudoaxis-common-hkl-private

Description

Functions

RUBh_minus_Q ()

int
RUBh_minus_Q (double const x[],
              void *params,
              double f[]);

[skip]


hkl_is_reachable ()

int
hkl_is_reachable (HklEngine *engine,
                  double wavelength,
                  GError **error);

hkl_mode_get_hkl_real ()

int
hkl_mode_get_hkl_real (HklMode *self,
                       HklEngine *engine,
                       HklGeometry *geometry,
                       HklDetector *detector,
                       HklSample *sample,
                       GError **error);

hkl_mode_set_hkl_real ()

int
hkl_mode_set_hkl_real (HklMode *self,
                       HklEngine *engine,
                       HklGeometry *geometry,
                       HklDetector *detector,
                       HklSample *sample,
                       GError **error);

hkl_mode_initialized_set_psi_constant_vertical_real ()

int
hkl_mode_initialized_set_psi_constant_vertical_real
                               (HklMode *base,
                                HklEngine *engine,
                                HklGeometry *geometry,
                                HklDetector *detector,
                                HklSample *sample,
                                int initialized,
                                GError **error);

hkl_engine_hkl_new ()

HklEngine *
hkl_engine_hkl_new (HklEngineList *engines);

CONSTANT_PARAMETER()

#define             CONSTANT_PARAMETER(_name)

PSI_CONSTANT_PARAMETERS()

#define             PSI_CONSTANT_PARAMETERS(_h2, _k2, _l2, _psi)

Types and Values

struct HklEngineHkl

struct HklEngineHkl {
	HklEngine engine;
	HklParameter *h;
	HklParameter *k;
	HklParameter *l;
};

HKL_MODE_OPERATIONS_HKL_DEFAULTS

#define             HKL_MODE_OPERATIONS_HKL_DEFAULTS

HKL_MODE_OPERATIONS_HKL_FULL_DEFAULTS

#define             HKL_MODE_OPERATIONS_HKL_FULL_DEFAULTS

HKL_PARAMETER_EMERGENCE_DEFAULTS

#define             HKL_PARAMETER_EMERGENCE_DEFAULTS

HKL_PARAMETER_EMERGENCE_AZIMUTH_DEFAULTS

#define             HKL_PARAMETER_EMERGENCE_AZIMUTH_DEFAULTS
hkl-5.0.0.2449/Documentation/api/html/hkl-autodata.html0000644000175000017500000001606313237020545022714 0ustar00piccapicca00000000000000 autodata: hkl Reference Manual

autodata

autodata

Functions

#define AUTODATA_TYPE()
#define AUTODATA()
#define autodata_get()
void autodata_free ()
#define AUTODATA_VAR__()
#define AUTODATA_VAR_()
void * autodata_get_section ()
void * autodata_make_table ()

Types and Values

#define AUTODATA_MAGIC

Description

Functions

AUTODATA_TYPE()

#define             AUTODATA_TYPE(name, type)

AUTODATA()

#define             AUTODATA(name, ptr)

autodata_get()

#define             autodata_get(name, nump)

autodata_free ()

void
autodata_free (void *p);

AUTODATA_VAR__()

#define AUTODATA_VAR__(name, line) autodata_##name##_##line

AUTODATA_VAR_()

#define AUTODATA_VAR_(name, line) AUTODATA_VAR__(name, line)

autodata_get_section ()

void *
autodata_get_section (void *start,
                      void *stop,
                      size_t *nump);

autodata_make_table ()

void *
autodata_make_table (const void *example,
                     const char *name,
                     size_t *nump);

Types and Values

AUTODATA_MAGIC

#define AUTODATA_MAGIC ((long)0xFEEDA10DA7AF00D5ULL)
hkl-5.0.0.2449/Documentation/api/html/ch01.html0000644000175000017500000001434313237020545021070 0ustar00piccapicca00000000000000 [Insert title here]: hkl Reference Manual hkl-5.0.0.2449/Documentation/api/html/annotation-glossary.html0000644000175000017500000000552413237020545024351 0ustar00piccapicca00000000000000 Annotation Glossary: hkl Reference Manual

Annotation Glossary

I

in

Parameter for input. Default is transfer none.

O

out caller-allocates

Out parameter, where caller must allocate storage.

S

skip

Exposed in C code, not necessarily available in other languages.

T

transfer none

Don't free data after the code is done.

hkl-5.0.0.2449/Documentation/api/html/hkl.devhelp20000644000175000017500000016545013237020544021665 0ustar00piccapicca00000000000000 hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-type-builtins.html0000644000175000017500000001146113237020545024473 0ustar00piccapicca00000000000000 hkl-type-builtins: hkl Reference Manual

hkl-type-builtins

hkl-type-builtins

Description

Functions

Types and Values

HKL_TYPE_UNIT_ENUM

#define HKL_TYPE_UNIT_ENUM (hkl_unit_enum_get_type ())

HKL_TYPE_DETECTOR_TYPE

#define HKL_TYPE_DETECTOR_TYPE (hkl_detector_type_get_type ())

HKL_TYPE_ENGINE_CAPABILITIES

#define HKL_TYPE_ENGINE_CAPABILITIES (hkl_engine_capabilities_get_type ())

HKL_TYPE_ENGINE_AXIS_NAMES_GET

#define HKL_TYPE_ENGINE_AXIS_NAMES_GET (hkl_engine_axis_names_get_get_type ())

HKL_TYPE_ENGINE_DEPENDENCIES

#define HKL_TYPE_ENGINE_DEPENDENCIES (hkl_engine_dependencies_get_type ())
hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-detector-private.html0000644000175000017500000001756713237020545025161 0ustar00piccapicca00000000000000 hkl-detector-private: hkl Reference Manual

hkl-detector-private

hkl-detector-private

Types and Values

Description

Functions

hkl_detector_new ()

HklDetector *
hkl_detector_new (void);

Create a new default HklDetector

[skip]


hkl_detector_attach_to_holder ()

void
hkl_detector_attach_to_holder (HklDetector *self);

attach the HklDetector to an HklHolder

[skip]


hkl_detector_compute_kf ()

int
hkl_detector_compute_kf (HklDetector const *self,
                         HklGeometry *g);

Compute the kf vector of the HklDetector

[skip]

Parameters

g

the diffractometer HklGeometry use to compute kf.

[in]

kf

the HklVector fill with the kf coordinates.

[out caller-allocates]

Returns

HKL_SUCCESS if everythongs goes fine. HKL_FAIL otherwise.

Types and Values

HklDetector

typedef struct {
	size_t idx;
	HklHolder const *holder;
} HklDetector;
hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-unit-private.html0000644000175000017500000002144213237020545024312 0ustar00piccapicca00000000000000 hkl-unit-private: hkl Reference Manual

hkl-unit-private

hkl-unit-private

Functions

Types and Values

struct HklUnitDimension
#define HklDPlaneAngle
#define HklDLength
struct HklUnit
double res

Description

Functions

hkl_unit_dup ()

HklUnit *
hkl_unit_dup (const HklUnit *self);

copy an Hklunit

[skip]

Returns

the copied HklUnit (memory must be release with hkl_unit_free)


hkl_unit_free ()

void
hkl_unit_free (HklUnit *self);

release the memory of an HklUnit

[skip]


hkl_unit_compatible ()

int
hkl_unit_compatible (const HklUnit *unit1,
                     const HklUnit *unit2);

check if two units are compatible.

[skip]

Parameters

self

the first HklUnit

 

unit

the second HklUnit to check

 

Returns

TRUE or FALSE

Types and Values

struct HklUnitDimension

struct HklUnitDimension {
	int l; /* Length */
	int m; /* Mass */
	int t; /* Time */
	int i; /* Electric current */
	int th; /* Thermodynamic temperature */
	int n; /* Amount of substance */
	int j; /* Luminous intensity */
};

HklDPlaneAngle

#define HklDPlaneAngle {0, 0, 0, 0, 0, 0, 0}

HklDLength

#define HklDLength {1, 0, 0, 0, 0, 0, 0}

struct HklUnit

struct HklUnit {
	HklUnitDimension dimension;
	double factor;
	char const *name;
	char const *repr;
};

res

	double res = 1.0;
hkl-5.0.0.2449/Documentation/api/html/style.css0000644000175000017500000002115413237020544021316 0ustar00piccapicca00000000000000body { font-family: cantarell, sans-serif; } .synopsis, .classsynopsis { /* tango:aluminium 1/2 */ background: #eeeeec; background: rgba(238, 238, 236, 0.5); border: solid 1px rgb(238, 238, 236); padding: 0.5em; } .programlisting { /* tango:sky blue 0/1 */ /* fallback for no rgba support */ background: #e6f3ff; border: solid 1px #729fcf; background: rgba(114, 159, 207, 0.1); border: solid 1px rgba(114, 159, 207, 0.2); padding: 0.5em; } .variablelist { padding: 4px; margin-left: 3em; } .variablelist td:first-child { vertical-align: top; } div.gallery-float { float: left; padding: 10px; } div.gallery-float img { border-style: none; } div.gallery-spacer { clear: both; } a, a:visited { text-decoration: none; /* tango:sky blue 2 */ color: #3465a4; } a:hover { text-decoration: underline; /* tango:sky blue 1 */ color: #729fcf; } div.informaltable table { border-collapse: separate; border-spacing: 1em 0.3em; border: none; } div.informaltable table td, div.informaltable table th { vertical-align: top; } .function_type, .variable_type, .property_type, .signal_type, .parameter_name, .struct_member_name, .union_member_name, .define_keyword, .datatype_keyword, .typedef_keyword { text-align: right; } /* dim non-primary columns */ .c_punctuation, .function_type, .variable_type, .property_type, .signal_type, .define_keyword, .datatype_keyword, .typedef_keyword, .property_flags, .signal_flags, .parameter_annotations, .enum_member_annotations, .struct_member_annotations, .union_member_annotations { color: #888a85; } .function_type a, .function_type a:visited, .function_type a:hover, .property_type a, .property_type a:visited, .property_type a:hover, .signal_type a, .signal_type a:visited, .signal_type a:hover, .signal_flags a, .signal_flags a:visited, .signal_flags a:hover { color: #729fcf; } td p { margin: 0.25em; } div.table table { border-collapse: collapse; border-spacing: 0px; /* tango:aluminium 3 */ border: solid 1px #babdb6; } div.table table td, div.table table th { /* tango:aluminium 3 */ border: solid 1px #babdb6; padding: 3px; vertical-align: top; } div.table table th { /* tango:aluminium 2 */ background-color: #d3d7cf; } h4 { color: #555753; margin-top: 1em; margin-bottom: 1em; } hr { /* tango:aluminium 1 */ color: #d3d7cf; background: #d3d7cf; border: none 0px; height: 1px; clear: both; margin: 2.0em 0em 2.0em 0em; } dl.toc dt { padding-bottom: 0.25em; } dl.toc > dt { padding-top: 0.25em; padding-bottom: 0.25em; font-weight: bold; } dl.toc > dl { padding-bottom: 0.5em; } .parameter { font-style: normal; } .footer { padding-top: 3.5em; /* tango:aluminium 3 */ color: #babdb6; text-align: center; font-size: 80%; } .informalfigure, .figure { margin: 1em; } .informalexample, .example { margin-top: 1em; margin-bottom: 1em; } .warning { /* tango:orange 0/1 */ background: #ffeed9; background: rgba(252, 175, 62, 0.1); border-color: #ffb04f; border-color: rgba(252, 175, 62, 0.2); } .note { /* tango:chameleon 0/0.5 */ background: #d8ffb2; background: rgba(138, 226, 52, 0.1); border-color: #abf562; border-color: rgba(138, 226, 52, 0.2); } div.blockquote { border-color: #eeeeec; } .note, .warning, div.blockquote { padding: 0.5em; border-width: 1px; border-style: solid; margin: 2em; } .note p, .warning p { margin: 0; } div.warning h3.title, div.note h3.title { display: none; } p + div.section { margin-top: 1em; } div.refnamediv, div.refsynopsisdiv, div.refsect1, div.refsect2, div.toc, div.section { margin-bottom: 1em; } /* blob links */ h2 .extralinks, h3 .extralinks { float: right; /* tango:aluminium 3 */ color: #babdb6; font-size: 80%; font-weight: normal; } .lineart { color: #d3d7cf; font-weight: normal; } .annotation { /* tango:aluminium 5 */ color: #555753; font-weight: normal; } .structfield { font-style: normal; font-weight: normal; } acronym,abbr { border-bottom: 1px dotted gray; } /* code listings */ .listing_code .programlisting .normal, .listing_code .programlisting .normal a, .listing_code .programlisting .number, .listing_code .programlisting .cbracket, .listing_code .programlisting .symbol { color: #555753; } .listing_code .programlisting .comment, .listing_code .programlisting .linenum { color: #babdb6; } /* tango: aluminium 3 */ .listing_code .programlisting .function, .listing_code .programlisting .function a, .listing_code .programlisting .preproc { color: #204a87; } /* tango: sky blue 3 */ .listing_code .programlisting .string { color: #ad7fa8; } /* tango: plum */ .listing_code .programlisting .keyword, .listing_code .programlisting .usertype, .listing_code .programlisting .type, .listing_code .programlisting .type a { color: #4e9a06; } /* tango: chameleon 3 */ .listing_frame { /* tango:sky blue 1 */ border: solid 1px #729fcf; border: solid 1px rgba(114, 159, 207, 0.2); padding: 0px; } .listing_lines, .listing_code { margin-top: 0px; margin-bottom: 0px; padding: 0.5em; } .listing_lines { /* tango:sky blue 0.5 */ background: #a6c5e3; background: rgba(114, 159, 207, 0.2); /* tango:aluminium 6 */ color: #2e3436; } .listing_code { /* tango:sky blue 0 */ background: #e6f3ff; background: rgba(114, 159, 207, 0.1); } .listing_code .programlisting { /* override from previous */ border: none 0px; padding: 0px; background: none; } .listing_lines pre, .listing_code pre { margin: 0px; } @media screen { /* these have a as a first child, but since there are no parent selectors * we can't use that. */ a.footnote { position: relative; top: 0em ! important; } /* this is needed so that the local anchors are displayed below the naviagtion */ div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name] { display: inline-block; position: relative; top:-5em; } /* this seems to be a bug in the xsl style sheets when generating indexes */ div.index div.index { top: 0em; } /* make space for the fixed navigation bar and add space at the bottom so that * link targets appear somewhat close to top */ body { padding-top: 2.5em; padding-bottom: 500px; max-width: 60em; } p { max-width: 60em; } /* style and size the navigation bar */ table.navigation#top { position: fixed; background: #e2e2e2; border-bottom: solid 1px #babdb6; border-spacing: 5px; margin-top: 0; margin-bottom: 0; top: 0; left: 0; z-index: 10; } table.navigation#top td { padding-left: 6px; padding-right: 6px; } .navigation a, .navigation a:visited { /* tango:sky blue 3 */ color: #204a87; } .navigation a:hover { /* tango:sky blue 2 */ color: #3465a4; } td.shortcuts { /* tango:sky blue 2 */ color: #3465a4; font-size: 80%; white-space: nowrap; } td.shortcuts .dim { color: #babdb6; } .navigation .title { font-size: 80%; max-width: none; margin: 0px; font-weight: normal; } } @media screen and (min-width: 60em) { /* screen larger than 60em */ body { margin: auto; } } @media screen and (max-width: 60em) { /* screen less than 60em */ #nav_hierarchy { display: none; } #nav_interfaces { display: none; } #nav_prerequisites { display: none; } #nav_derived_interfaces { display: none; } #nav_implementations { display: none; } #nav_child_properties { display: none; } #nav_style_properties { display: none; } #nav_index { display: none; } #nav_glossary { display: none; } .gallery_image { display: none; } .property_flags { display: none; } .signal_flags { display: none; } .parameter_annotations { display: none; } .enum_member_annotations { display: none; } .struct_member_annotations { display: none; } .union_member_annotations { display: none; } /* now that a column is hidden, optimize space */ col.parameters_name { width: auto; } col.parameters_description { width: auto; } col.struct_members_name { width: auto; } col.struct_members_description { width: auto; } col.enum_members_name { width: auto; } col.enum_members_description { width: auto; } col.union_members_name { width: auto; } col.union_members_description { width: auto; } .listing_lines { display: none; } } @media print { table.navigation { visibility: collapse; display: none; } div.titlepage table.navigation { visibility: visible; display: table; background: #e2e2e2; border: solid 1px #babdb6; margin-top: 0; margin-bottom: 0; top: 0; left: 0; height: 3em; } } hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-pseudoaxis-common-psi-private.html0000644000175000017500000000512313237020545027574 0ustar00piccapicca00000000000000 hkl-pseudoaxis-common-psi-private: hkl Reference Manual

hkl-pseudoaxis-common-psi-private

hkl-pseudoaxis-common-psi-private

Description

Functions

Types and Values

hkl-5.0.0.2449/Documentation/api/html/hkl-darray.html0000644000175000017500000005263213237020545022376 0ustar00piccapicca00000000000000 darray: hkl Reference Manual

darray

darray

Functions

#define darray()
#define darray_new
#define darray_init()
#define darray_free()
return darray_item ()
#define darray_size()
#define darray_alloc()
#define darray_empty()
#define darray_append()
#define darray_prepend()
#define darray_insert()
#define darray_push()
#define darray_append_items()
#define darray_prepend_items()
#define darray_append_items_nullterminate()
#define darray_prepend_items_nullterminate()
#define darray_appends()
#define darray_prepends()
#define darray_appends_t()
#define darray_prepends_t()
#define darray_pop()
#define darray_pop_check()
#define darray_remove()
#define darray_from_items()
#define darray_from_c()
#define darray_append_string()
#define darray_append_lit()
#define darray_prepend_string()
#define darray_prepend_lit()
#define darray_from_string()
#define darray_from_lit()
#define darray_resize()
#define darray_resize0()
#define darray_realloc()
#define darray_growalloc()
#define darray_make_room()
#define darray_foreach()
#define darray_foreach_reverse()

Types and Values

typedef darray_char
typedef darray_schar
typedef darray_uchar
typedef darray_short
typedef darray_int
typedef darray_long
typedef darray_ushort
typedef darray_uint
typedef darray_ulong

Description

Functions

darray()

#define darray(type) struct {type *item; size_t size; size_t alloc;}

darray_new

#define darray_new() {0,0,0}

darray_init()

#define darray_init(arr) do {(arr).item=0; (arr).size=0; (arr).alloc=0;} while(0)

darray_free()

#define darray_free(arr) do {free((arr).item);} while(0)

darray_item ()

return
darray_item ();

darray_size()

#define darray_size(arr)    ((arr).size)

darray_alloc()

#define darray_alloc(arr)   ((arr).alloc)

darray_empty()

#define darray_empty(arr)   ((arr).size == 0)

darray_append()

#define             darray_append(arr, ...)

darray_prepend()

#define             darray_prepend(arr, ...)

darray_insert()

#define             darray_insert(arr, i, ...)

darray_push()

#define darray_push(arr, ...) darray_append(arr, __VA_ARGS__)

darray_append_items()

#define             darray_append_items(arr, items, count)

darray_prepend_items()

#define             darray_prepend_items(arr, items, count)

darray_append_items_nullterminate()

#define             darray_append_items_nullterminate(arr, items, count)

darray_prepend_items_nullterminate()

#define             darray_prepend_items_nullterminate(arr, items, count)

darray_appends()

#define darray_appends(arr, ...) darray_appends_t(arr, typeof((*(arr).item)), __VA_ARGS__)

darray_prepends()

#define darray_prepends(arr, ...) darray_prepends_t(arr, typeof((*(arr).item)), __VA_ARGS__)

darray_appends_t()

#define             darray_appends_t(arr, type, ...)

darray_prepends_t()

#define             darray_prepends_t(arr, type, ...)

darray_pop()

#define darray_pop(arr) ((arr).item[--(arr).size])

darray_pop_check()

#define darray_pop_check(arr) ((arr).size ? darray_pop(arr) : NULL)

darray_remove()

#define             darray_remove(arr, i)

darray_from_items()

#define darray_from_items(arr, items, count) do {size_t count_ = (count); darray_resize(arr, count_); memcpy((arr).item, items, count_*sizeof(*(arr).item));} while(0)

darray_from_c()

#define darray_from_c(arr, c_array) darray_from_items(arr, c_array, sizeof(c_array)/sizeof(*(c_array)))

darray_append_string()

#define darray_append_string(arr, str) do {const char *str_ = (str); darray_append_items(arr, str_, strlen(str_)+1); (arr).size--;} while(0)

darray_append_lit()

#define darray_append_lit(arr, stringLiteral) do {darray_append_items(arr, stringLiteral, sizeof(stringLiteral)); (arr).size--;} while(0)

darray_prepend_string()

#define             darray_prepend_string(arr, str)

darray_prepend_lit()

#define             darray_prepend_lit(arr, stringLiteral)

darray_from_string()

#define darray_from_string(arr, str) do {const char *str_ = (str); darray_from_items(arr, str_, strlen(str_)+1); (arr).size--;} while(0)

darray_from_lit()

#define darray_from_lit(arr, stringLiteral) do {darray_from_items(arr, stringLiteral, sizeof(stringLiteral)); (arr).size--;} while(0)

darray_resize()

#define darray_resize(arr, newSize) darray_growalloc(arr, (arr).size = (newSize))

darray_resize0()

#define             darray_resize0(arr, newSize)

darray_realloc()

#define             darray_realloc(arr, newAlloc)

darray_growalloc()

#define             darray_growalloc(arr, need)

darray_make_room()

#define darray_make_room(arr, room) ({size_t newAlloc = (arr).size+(room); if ((arr).alloc<newAlloc) darray_realloc(arr, newAlloc); (arr).item+(arr).size; })

darray_foreach()

#define             darray_foreach(i, arr)

darray_foreach_reverse()

#define             darray_foreach_reverse(i, arr)

Types and Values

darray_char

typedef darray(char)           darray_char;

darray_schar

typedef darray(signed char)    darray_schar;

darray_uchar

typedef darray(unsigned char)  darray_uchar;

darray_short

typedef darray(short)          darray_short;

darray_int

typedef darray(int)            darray_int;

darray_long

typedef darray(long)           darray_long;

darray_ushort

typedef darray(unsigned short) darray_ushort;

darray_uint

typedef darray(unsigned int)   darray_uint;

darray_ulong

typedef darray(unsigned long)  darray_ulong;
hkl-5.0.0.2449/Documentation/api/html/hkl-hkl.html0000644000175000017500000004714513237020545021675 0ustar00piccapicca00000000000000 hkl: hkl Reference Manual

hkl

hkl

Description

Functions

HKL_DEPRECATED_FOR()

# define HKL_DEPRECATED_FOR(f) __attribute__((__deprecated__("Use '" #f "' instead")))

HKL_ARG_NONNULL()

# define HKL_ARG_NONNULL(...) __attribute__ ((__nonnull__(__VA_ARGS__)))

HKL_GEOMETRY_LIST_FOREACH()

#define             HKL_GEOMETRY_LIST_FOREACH(item, list)

HKL_SAMPLE_REFLECTIONS_FOREACH()

#define             HKL_SAMPLE_REFLECTIONS_FOREACH(_item, _list)

Types and Values

HKL_DEPRECATED

# define HKL_DEPRECATED __attribute__((__deprecated__))

HKL_TINY

#define HKL_TINY 1e-7

HKL_EPSILON

#define HKL_EPSILON 1e-6

HKL_DEGTORAD

#define HKL_DEGTORAD (M_PI/180.)

HKL_RADTODEG

#define HKL_RADTODEG (180./M_PI)

HKL_TAU

#define HKL_TAU (2. * M_PI)

HKLAPI

#  define HKLAPI __attribute__ ((visibility("default")))

HKL_WARN_UNUSED_RESULT

#  define HKL_WARN_UNUSED_RESULT __attribute__ ((__warn_unused_result__))

struct HklVector

struct HklVector {
	double data[3];
};

HKL_VECTOR_X

#define HKL_VECTOR_X {{1, 0, 0}}

HKL_VECTOR_Y

#define HKL_VECTOR_Y {{0, 1, 0}}

HKL_VECTOR_Z

#define HKL_VECTOR_Z {{0, 0, 1}}

struct HklQuaternion

struct HklQuaternion {
	double data[4];
};

darray_string

typedef darray(const char *) darray_string;

enum HklUnitEnum

Members

HKL_UNIT_DEFAULT

   

HKL_UNIT_USER

   

enum HklDetectorType

Members

HKL_DETECTOR_TYPE_0D

   

darray_engine

typedef darray(HklEngine *) darray_engine;

enum HklEngineCapabilities

Members

HKL_ENGINE_CAPABILITIES_READABLE

   

HKL_ENGINE_CAPABILITIES_WRITABLE

   

HKL_ENGINE_CAPABILITIES_INITIALIZABLE

   

enum HklEngineAxisNamesGet

Members

HKL_ENGINE_AXIS_NAMES_GET_READ

   

HKL_ENGINE_AXIS_NAMES_GET_WRITE

   

enum HklEngineDependencies

Members

HKL_ENGINE_DEPENDENCIES_AXES

   

HKL_ENGINE_DEPENDENCIES_ENERGY

   

HKL_ENGINE_DEPENDENCIES_SAMPLE

   

HklDetector

typedef struct {
	size_t idx;
	HklHolder const *holder;
} HklDetector;

HklEngine

typedef struct {
	const HklEngineInfo *info;
	const HklEngineOperations *ops;
	HklGeometry *geometry;
	HklDetector *detector;
	HklSample *sample;
	HklMode *mode; /* not owned */
	HklEngineList *engines; /* not owned */
	darray_parameter axes;
	darray_parameter pseudo_axes;
	darray_string pseudo_axis_names;
	darray_mode modes;
	darray_string mode_names;
} HklEngine;

HklEngineList

typedef struct {
	_darray(HklEngine *);
	HklGeometryList *geometries;
	HklGeometry *geometry;
	HklDetector *detector;
	HklSample *sample;
	darray_parameter pseudo_axes;
} HklEngineList;

HklFactory

typedef struct {
	const char *name;
	const char *description;
	const darray_string axes;
	HklFactoryGeometryFunction create_new_geometry;
	HklFactoryEngineListFunction create_new_engine_list;
} HklFactory;

HklGeometry

typedef struct {
	const HklFactory *factory;
	HklSource source;
	darray_parameter axes;
	darray_holder holders;
	const HklGeometryOperations *ops;
} HklGeometry;

HklGeometryList

typedef struct {
	HklGeometryListMultiplyFunction multiply;
	struct list_head items;
	size_t n_items;
} HklGeometryList;

HklGeometryListItem

typedef struct {
	struct list_node list;
	HklGeometry *geometry;
} HklGeometryListItem;

HklLattice

typedef struct {
	HklParameter *a;
	HklParameter *b;
	HklParameter *c;
	HklParameter *alpha;
	HklParameter *beta;
	HklParameter *gamma;
	HklParameter *volume;
} HklLattice;

HklMatrix

typedef struct {
	double data[3][3];
} HklMatrix;

HklParameter

typedef struct {
	const char *name;
	const char *description;
	HklInterval range;
	double _value;
	const HklUnit *unit;
	const HklUnit *punit;
	int fit;
	int changed;
	const HklParameterOperations *ops;
} HklParameter;

HklSample

typedef struct {
	char *name;
	HklLattice *lattice;
	HklMatrix U;
	HklMatrix UB;
	HklParameter *ux;
	HklParameter *uy;
	HklParameter *uz;
	struct list_head reflections;
	size_t n_reflections;
} HklSample;

HklSampleReflection

typedef struct {
	HklGeometry *geometry;
	HklDetector *detector;
	HklSample *sample;
	HklVector hkl;
	HklVector _hkl;
	int flag;
	struct list_node list;
} HklSampleReflection;
hkl-5.0.0.2449/Documentation/api/html/home.png0000644000175000017500000000040013237020544021071 0ustar00piccapicca00000000000000PNG  IHDRabKGD pHYs B(xtIME ,&a:IDAT8ҽ Aߞf`n v`6`/`Yܡ`f&k$,} 0b+ԸaQW~b O e{y N[L}.piBzmm o.I]7^[;%:VIENDB`hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-pseudoaxis-common-eulerians-private.html0000644000175000017500000001155713237020545031000 0ustar00piccapicca00000000000000 hkl-pseudoaxis-common-eulerians-private: hkl Reference Manual

hkl-pseudoaxis-common-eulerians-private

hkl-pseudoaxis-common-eulerians-private

Description

Functions

hkl_engine_eulerians_new ()

HklEngine *
hkl_engine_eulerians_new (HklEngineList *engines);

kappa_2_kappap ()

void
kappa_2_kappap (double komega,
                double kappa,
                double kphi,
                double alpha,
                double *komegap,
                double *kappap,
                double *kphip);

Types and Values

hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-pseudoaxis-private.html0000644000175000017500000004022613237020545025520 0ustar00piccapicca00000000000000 hkl-pseudoaxis-private: hkl Reference Manual

hkl-pseudoaxis-private

hkl-pseudoaxis-private

Functions

Types and Values

Description

Functions

HKL_MODE_INFO_RO()

#define HKL_MODE_INFO_RO(_name, _axes) .name=_name, .axes_r=DARRAY(_axes)

HKL_MODE_INFO()

#define HKL_MODE_INFO(_name, _axes_r, _axes_w) HKL_MODE_INFO_RO((_name), (_axes_r)), .axes_w=DARRAY((_axes_w))

HKL_MODE_INFO_RO_WITH_PARAMS()

#define HKL_MODE_INFO_RO_WITH_PARAMS(_name, _axes, _parameters) HKL_MODE_INFO_RO((_name), (_axes)), .parameters=DARRAY(_parameters)

HKL_MODE_INFO_WITH_PARAMS()

#define             HKL_MODE_INFO_WITH_PARAMS(_name, _axes_r, _axes_w, _parameters)

HKL_ENGINE_INFO()

#define             HKL_ENGINE_INFO(_name, _pseudo_axes, _dependencies)

g_quark_from_static_string ()

return
g_quark_from_static_string ();

darray_item ()

return
darray_item ();

Types and Values

darray_mode

typedef darray(HklMode *) darray_mode;

struct HklModeInfo

struct HklModeInfo {
	const char *name;
	const darray_string axes_r;
	const darray_string axes_w;
	const darray(const HklParameter) parameters;
};

struct HklModeOperations

struct HklModeOperations {
	unsigned long capabilities;

	void (* free)(HklMode *self);
	int (* initialized_get)(const HklMode *self);
	int (* initialized_set)(HklMode *self,
				HklEngine *engine,
				HklGeometry *geometry,
				HklDetector *detector,
				HklSample *sample,
				int initialized,
				GError **error);
	int (* get)(HklMode *self,
		    HklEngine *engine,
		    HklGeometry *geometry,
		    HklDetector *detector,
		    HklSample *sample,
		    GError **error);
	int (* set)(HklMode *self,
		    HklEngine *engine,
		    HklGeometry *geometry,
		    HklDetector *detector,
		    HklSample *sample,
		    GError **error);
};

HKL_MODE_OPERATIONS_DEFAULTS

#define             HKL_MODE_OPERATIONS_DEFAULTS

struct HklMode

struct HklMode {
	const HklModeInfo *info;
	const HklModeOperations *ops;
	darray_parameter parameters;
	darray_string parameters_names;
	int initialized;
};

self

	HklModeAutoWithInit *self = container_of(mode, HklModeAutoWithInit, mode);

struct HklEngineInfo

struct HklEngineInfo {
	const char *name;
	const darray(const HklParameter *) pseudo_axes;
	unsigned int dependencies;
};

HklEngine

typedef struct {
	const HklEngineInfo *info;
	const HklEngineOperations *ops;
	HklGeometry *geometry;
	HklDetector *detector;
	HklSample *sample;
	HklMode *mode; /* not owned */
	HklEngineList *engines; /* not owned */
	darray_parameter axes;
	darray_parameter pseudo_axes;
	darray_string pseudo_axis_names;
	darray_mode modes;
	darray_string mode_names;
} HklEngine;

HklEngineList

typedef struct {
	_darray(HklEngine *);
	HklGeometryList *geometries;
	HklGeometry *geometry;
	HklDetector *detector;
	HklSample *sample;
	darray_parameter pseudo_axes;
} HklEngineList;

HKL_ENGINE_ERROR

#define HKL_ENGINE_ERROR hkl_engine_error_quark ()

enum HklEngineError

Members

HKL_ENGINE_ERROR_PSEUDO_AXIS_VALUES_GET

   

HKL_ENGINE_ERROR_PSEUDO_AXIS_VALUES_SET

   

HKL_ENGINE_ERROR_PSEUDO_AXIS_SET

   

HKL_ENGINE_ERROR_INITIALIZE

   

HKL_ENGINE_ERROR_SET

   

HKL_ENGINE_ERROR_GET

   

HKL_ENGINE_ERROR_PARAMETER_GET

   

HKL_ENGINE_ERROR_PARAMETER_SET

   

HKL_ENGINE_ERROR_CURRENT_MODE_SET

   

i

	uint i = 0;

struct HklEngineOperations

struct HklEngineOperations {
	void (*free)(HklEngine *self);
};

HKL_ENGINE_OPERATIONS_DEFAULTS

#define HKL_ENGINE_OPERATIONS_DEFAULTS .free=hkl_engine_free_real

axis

			HklParameter *axis = hkl_geometry_get_axis_by_name(self->geometry,

HKL_ENGINE_LIST_ERROR

#define HKL_ENGINE_LIST_ERROR hkl_engine_list_error_quark ()

enum HklEngineListError

Members

HKL_ENGINE_LIST_ERROR_ENGINE_GET_BY_NAME

   

HKL_ENGINE_LIST_ERROR_PSEUDO_AXIS_GET_BY_NAME

   
hkl-5.0.0.2449/Documentation/api/html/right-insensitive.png0000644000175000017500000000056513237020544023630 0ustar00piccapicca00000000000000PNG  IHDRabKGD pHYs B(xtIME ,&a:IDAT8͒J` /S_$AqrW(>m"]\(49.Nd39{eM#MSIιEiHz|3{̲l3,KkV'@EEQlwyiq]Kh4:mĦ,;ts\aR5/7'Wps׭I,K1=0j0Wg> PU𻤝0 ]?qCҫιg~kA_IENDB`hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-pseudoaxis-common-q-private.html0000644000175000017500000000504613237020545027245 0ustar00piccapicca00000000000000 hkl-pseudoaxis-common-q-private: hkl Reference Manual

hkl-pseudoaxis-common-q-private

hkl-pseudoaxis-common-q-private

Description

Functions

Types and Values

hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-types.html0000644000175000017500000002041013237020545023021 0ustar00piccapicca00000000000000 hkl-types: hkl Reference Manual

hkl-types

hkl-types

Description

Functions

Types and Values

TYPE_HKL_DETECTOR

#define TYPE_HKL_DETECTOR (hkl_detector_get_type ())

TYPE_HKL_ENGINE

#define TYPE_HKL_ENGINE (hkl_engine_get_type ())

TYPE_HKL_ENGINE_LIST

#define TYPE_HKL_ENGINE_LIST (hkl_engine_list_get_type ())

TYPE_HKL_FACTORY

#define TYPE_HKL_FACTORY (hkl_factory_get_type ())

TYPE_HKL_GEOMETRY

#define TYPE_HKL_GEOMETRY (hkl_geometry_get_type ())

TYPE_HKL_GEOMETRY_LIST

#define TYPE_HKL_GEOMETRY_LIST (hkl_geometry_list_get_type ())

TYPE_HKL_GEOMETRY_LIST_ITEM

#define TYPE_HKL_GEOMETRY_LIST_ITEM (hkl_geometry_list_item_get_type ())

TYPE_HKL_LATTICE

#define TYPE_HKL_LATTICE (hkl_lattice_get_type ())

TYPE_HKL_MATRIX

#define TYPE_HKL_MATRIX (hkl_matrix_get_type ())

TYPE_HKL_PARAMETER

#define TYPE_HKL_PARAMETER (hkl_parameter_get_type ())

TYPE_HKL_SAMPLE_REFLECTION

#define TYPE_HKL_SAMPLE_REFLECTION (hkl_sample_reflection_get_type ())

TYPE_HKL_SAMPLE

#define TYPE_HKL_SAMPLE (hkl_sample_get_type ())

TYPE_HKL_UNIT

#define TYPE_HKL_UNIT (hkl_unit_get_type ())

TYPE_HKL_VECTOR

#define TYPE_HKL_VECTOR (hkl_vector_get_type ())

TYPE_HKL_QUATERNION

#define TYPE_HKL_QUATERNION (hkl_quaternion_get_type ())
hkl-5.0.0.2449/Documentation/api/html/hkl-str.html0000644000175000017500000002724613237020545021727 0ustar00piccapicca00000000000000 str: hkl Reference Manual

str

str

Functions

#define streq()
#define strstarts()
#define stringify()
#define stringify_1()
size_t strcount ()
#define STR_MAX_CHARS()
#define STR_MAX_CHARS_TCHECK_()
return isalnum ()
return isalpha ()
return isascii ()
return isblank ()
return iscntrl ()
return isdigit ()
return isgraph ()
return islower ()
return isprint ()
return ispunct ()
return isspace ()
return isupper ()
return isxdigit ()
#define str_check_arg_()
#define strstr()
#define strchr()
#define strrchr()

Description

Functions

streq()

#define streq(a,b) (strcmp((a),(b)) == 0)

strstarts()

#define strstarts(str,prefix) (strncmp((str),(prefix),strlen(prefix)) == 0)

stringify()

#define stringify(expr)		stringify_1(expr)

stringify_1()

#define stringify_1(expr) #expr

strcount ()

size_t
strcount (const char *haystack,
          const char *needle);

STR_MAX_CHARS()

#define             STR_MAX_CHARS(type_or_expr)

STR_MAX_CHARS_TCHECK_()

#define             STR_MAX_CHARS_TCHECK_(type_or_expr)

isalnum ()

return
isalnum ();

isalpha ()

return
isalpha ();

isascii ()

return
isascii ();

isblank ()

return
isblank ();

iscntrl ()

return
iscntrl ();

isdigit ()

return
isdigit ();

isgraph ()

return
isgraph ();

islower ()

return
islower ();

isprint ()

return
isprint ();

ispunct ()

return
ispunct ();

isspace ()

return
isspace ();

isupper ()

return
isupper ();

isxdigit ()

return
isxdigit ();

str_check_arg_()

#define             str_check_arg_(i)

strstr()

#define             strstr(haystack, needle)

strchr()

#define             strchr(haystack, c)

strrchr()

#define             strrchr(haystack, c)

Types and Values

hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-quaternion-private.html0000644000175000017500000006506613237020545025532 0ustar00piccapicca00000000000000 hkl-quaternion-private: hkl Reference Manual

hkl-quaternion-private

hkl-quaternion-private

Description

Functions

hkl_quaternion_dup ()

HklQuaternion *
hkl_quaternion_dup (const HklQuaternion *self);

[skip]


hkl_quaternion_free ()

void
hkl_quaternion_free (HklQuaternion *self);

[skip]


hkl_quaternion_init ()

void
hkl_quaternion_init (HklQuaternion *self,
                     double a,
                     double b,
                     double c,
                     double d);

initialize the four elements of an HklQuaternion

Parameters

self

the HklQuaternion to initialize

 

a

the 1st element value

 

b

the 2nd element value

 

c

the 3rd element value

 

d

the 4th element value

 

hkl_quaternion_init_from_vector ()

void
hkl_quaternion_init_from_vector (HklQuaternion *self,
                                 const HklVector *v);

initialize an HklQuaternion from an HklVector

Parameters

self

the HklQuaternion to set

 

v

the HklVector used to set the self HklQuaternion

 

hkl_quaternion_init_from_angle_and_axe ()

void
hkl_quaternion_init_from_angle_and_axe
                               (HklQuaternion *self,
                                double angle,
                                const HklVector *v);

initialize an HklQuaternion from a vector and a angle.

Parameters

self

the HklQuaternion to set

 

angle

the angles of the rotation

 

v

the axe of rotation

 

hkl_quaternion_fprintf ()

void
hkl_quaternion_fprintf (FILE *file,
                        const HklQuaternion *self);

print an HklQuaternion into a FILE stream

Parameters

file

the file to send the HklQuaternion into

 

self

the HklQuaternion to write into the file stream.

 

hkl_quaternion_cmp ()

int
hkl_quaternion_cmp (const HklQuaternion *self,
                    const HklQuaternion *q);

compare two HklQuaternion.

Parameters

self

the first HklQuaternion

 

q

the second HklQuaternion

 

Returns

TRUE if both are equal, FALSE otherwise.


hkl_quaternion_minus_quaternion ()

void
hkl_quaternion_minus_quaternion (HklQuaternion *self,
                                 const HklQuaternion *q);

substract two HklQuaternions Todo: test

Parameters

self

the HklQuaternion to modify.

 

q

the HklQuaternion to substract

 

hkl_quaternion_times_quaternion ()

void
hkl_quaternion_times_quaternion (HklQuaternion *self,
                                 const HklQuaternion *q);

multiply two quaternions

Parameters

self

the HklQuaternion to modify

 

q

the HklQuaternion to multiply by

 

hkl_quaternion_norm2 ()

double
hkl_quaternion_norm2 (const HklQuaternion *self);

compute the norm2 of an HklQuaternion

Parameters

self

the quaternion use to compute the norm

 

Returns

the self hklquaternion norm


hkl_quaternion_conjugate ()

void
hkl_quaternion_conjugate (HklQuaternion *self);

compute the conjugate of a quaternion

Parameters

self

the HklQuaternion to conjugate

 

hkl_quaternion_to_matrix ()

void
hkl_quaternion_to_matrix (const HklQuaternion *self,
                          HklMatrix *m);

Compute the rotation matrix of a Quaternion.

compute the rotation matrix corresponding to the unitary quaternion. \f$ q = a + b \cdot i + c \cdot j + d \cdot k \f$

\f$ \left( \begin{array}{ccc} a^2+b^2-c^2-d^2 & 2bc-2ad & 2ac+2bd\ 2ad+2bc & a^2-b^2+c^2-d^2 & 2cd-2ab\ 2bd-2ac & 2ab+2cd & a^2-b^2-c^2+d^2 \end{array} \right) \f$ Todo: optimize

Parameters

self

the HklQuaternion use to compute the HklMatrix

 

m

the HklMatrix return.

[out caller-allocates]

hkl_quaternion_to_angle_and_axe ()

void
hkl_quaternion_to_angle_and_axe (const HklQuaternion *self,
                                 double *angle,
                                 HklVector *v);

compute the axe and angle of the unitary quaternion angle [-pi, pi] if q is the (1, 0, 0, 0) quaternion return the (0,0,0) axe and a 0 angle

Parameters

self

The HklQuaternion use to compute the angle and the roation axis.

 

angle

the returned angle of the rotation.

 

v

the returned axis of the rotation.

 

Types and Values

hkl-5.0.0.2449/Documentation/api/html/hkl-str-debug.html0000644000175000017500000002475413237020545023014 0ustar00piccapicca00000000000000 str_debug: hkl Reference Manual

str_debug

str_debug

Functions

int str_isalnum ()
int str_isalpha ()
int str_isascii ()
int str_isblank ()
int str_iscntrl ()
int str_isdigit ()
int str_isgraph ()
int str_islower ()
int str_isprint ()
int str_ispunct ()
int str_isspace ()
int str_isupper ()
int str_isxdigit ()
char * str_strstr ()
char * str_strchr ()
char * str_strrchr ()

Description

Functions

str_isalnum ()

int
str_isalnum (int i);

str_isalpha ()

int
str_isalpha (int i);

str_isascii ()

int
str_isascii (int i);

str_isblank ()

int
str_isblank (int i);

str_iscntrl ()

int
str_iscntrl (int i);

str_isdigit ()

int
str_isdigit (int i);

str_isgraph ()

int
str_isgraph (int i);

str_islower ()

int
str_islower (int i);

str_isprint ()

int
str_isprint (int i);

str_ispunct ()

int
str_ispunct (int i);

str_isspace ()

int
str_isspace (int i);

str_isupper ()

int
str_isupper (int i);

str_isxdigit ()

int
str_isxdigit (int i);

str_strstr ()

char *
str_strstr (const char *haystack,
            const char *needle);

str_strchr ()

char *
str_strchr (const char *s,
            int c);

str_strrchr ()

char *
str_strrchr (const char *s,
             int c);

Types and Values

hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-lattice-private.html0000644000175000017500000002073713237020545024766 0ustar00piccapicca00000000000000 hkl-lattice-private: hkl Reference Manual

hkl-lattice-private

hkl-lattice-private

Types and Values

Description

Functions

g_quark_from_static_string ()

return
g_quark_from_static_string ();

hkl_lattice_lattice_set ()

void
hkl_lattice_lattice_set (HklLattice *self,
                         const HklLattice *lattice);

[skip]

Parameters

self

the this ptr

 

lattice

the lattice to set from.

 

hkl_lattice_randomize ()

void
hkl_lattice_randomize (HklLattice *self);

randomize the lattice

[skip]


hkl_lattice_fprintf ()

void
hkl_lattice_fprintf (FILE *f,
                     const HklLattice *self);

print into a file the lattice.

[skip]

Types and Values

HklLattice

typedef struct {
	HklParameter *a;
	HklParameter *b;
	HklParameter *c;
	HklParameter *alpha;
	HklParameter *beta;
	HklParameter *gamma;
	HklParameter *volume;
} HklLattice;

HKL_LATTICE_ERROR

#define HKL_LATTICE_ERROR hkl_lattice_error_quark ()

enum HklLatticeError

Members

HKL_LATTICE_CHECK_LATTICE

   
hkl-5.0.0.2449/Documentation/api/html/hkl-build-assert.html0000644000175000017500000000654313237020545023512 0ustar00piccapicca00000000000000 build_assert: hkl Reference Manual

build_assert

build_assert

Functions

#define BUILD_ASSERT()
#define BUILD_ASSERT_OR_ZERO()

Description

Functions

BUILD_ASSERT()

#define             BUILD_ASSERT(cond)

BUILD_ASSERT_OR_ZERO()

#define             BUILD_ASSERT_OR_ZERO(cond)

Types and Values

hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-geometry-private.html0000644000175000017500000014411613237020545025172 0ustar00piccapicca00000000000000 hkl-geometry-private: hkl Reference Manual

hkl-geometry-private

hkl-geometry-private

Description

Functions

HklGeometryListMultiplyFunction ()

void
(*HklGeometryListMultiplyFunction) (HklGeometryList *self,
                                    HklGeometryListItem *item);

darray_item ()

return
darray_item ();

g_quark_from_static_string ()

return
g_quark_from_static_string ();

hkl_holder_add_rotation ()

HklParameter *
hkl_holder_add_rotation (HklHolder *self,
                         char const *name,
                         double x,
                         double y,
                         double z,
                         const HklUnit *punit);

hkl_holder_add_rotation_with_origin ()

HklParameter *
hkl_holder_add_rotation_with_origin (HklHolder *self,
                                     const char *name,
                                     double x,
                                     double y,
                                     double z,
                                     double ox,
                                     double oy,
                                     double oz,
                                     const HklUnit *punit);

hkl_holder_add_translation ()

HklParameter *
hkl_holder_add_translation (HklHolder *self,
                            char const *name,
                            double x,
                            double y,
                            double z,
                            const HklUnit *punit);

hkl_holder_transformation_apply ()

HklVector
hkl_holder_transformation_apply (const HklHolder *self,
                                 const HklVector *v);

hkl_geometry_new ()

HklGeometry *
hkl_geometry_new (const HklFactory *factory,
                  const HklGeometryOperations *ops);

constructor

[skip]


hkl_geometry_init_geometry ()

int
hkl_geometry_init_geometry (HklGeometry *self,
                            const HklGeometry *src);

initilize an HklGeometry

[skip]

Parameters

self

the this ptr

 

src

the HklGeometry to set from

 

Returns

TRUE on success, FALSE if an error occurred


hkl_geometry_add_holder ()

HklHolder *
hkl_geometry_add_holder (HklGeometry *self);

add an Holder to the HklGeometry

[skip]


hkl_geometry_update ()

void
hkl_geometry_update (HklGeometry *self);

update the geometry internal once an Axis values changed

[skip]


hkl_geometry_get_axis_idx_by_name ()

int
hkl_geometry_get_axis_idx_by_name (const HklGeometry *self,
                                   const char *name);

get the index of the axes named name in the geometry

[skip]

Returns

-1 if the axis was not found


hkl_geometry_get_axis_by_name ()

HklParameter *
hkl_geometry_get_axis_by_name (HklGeometry *self,
                               const char *name);

get an HklAxis using its name

Returns

.

[transfer none]


hkl_geometry_distance ()

double
hkl_geometry_distance (const HklGeometry *self,
                       const HklGeometry *ref);

compute the distance between two HklGeometries

Parameters

self

the this ptr

 

ref

the HklGeometry to compare with

 

Returns

the distance between the two geometries


hkl_geometry_distance_orthodromic ()

double
hkl_geometry_distance_orthodromic (const HklGeometry *self,
                                   const HklGeometry *ref);

[skip]

Parameters

self

the this ptr

 

ref

the reference HklGeometry to compare with.

 

Returns

the orthodromique distance


hkl_geometry_closest_from_geometry_with_range ()

int
hkl_geometry_closest_from_geometry_with_range
                               (HklGeometry *self,
                                const HklGeometry *ref);

get the closest axes values in the HklInterval compatible with the current axes values

[skip]


hkl_geometry_is_valid ()

int
hkl_geometry_is_valid (const HklGeometry *self);

check if all axes of the HklGeometry are valid.

[skip]


hkl_geometry_is_valid_range ()

int
hkl_geometry_is_valid_range (const HklGeometry *self);

check if all axes of the HklGeometry are valid. (there is a difference for axis)

[skip]


hkl_geometry_sample_holder_get ()

HklHolder *
hkl_geometry_sample_holder_get (const HklGeometry *self,
                                const HklSample *sample);

hkl_geometry_detector_holder_get ()

HklHolder *
hkl_geometry_detector_holder_get (const HklGeometry *self,
                                  const HklDetector *detector);

hkl_geometry_ki_get ()

HklVector
hkl_geometry_ki_get (const HklGeometry *self);

hkl_geometry_kf_get ()

HklVector
hkl_geometry_kf_get (const HklGeometry *self,
                     const HklDetector *detector);

hkl_geometry_list_new ()

HklGeometryList *
hkl_geometry_list_new (void);

constructor

[skip]


hkl_geometry_list_new_copy ()

HklGeometryList *
hkl_geometry_list_new_copy (const HklGeometryList *self);

copy constructor

[skip]


hkl_geometry_list_add ()

void
hkl_geometry_list_add (HklGeometryList *self,
                       const HklGeometry *geometry);

this method Add a geometry to the geometries

This method try to be clever by allocating memory only if the current length of the geometries is not large enought. Then it just set the geometry axes and copy it to the right geometries. We do not gives the x len as it is equal to the self->axes_len.

[skip]

Parameters

self

The current HklGeometryList

 

geometry

the HklGeometry to add

 

hkl_geometry_list_reset ()

void
hkl_geometry_list_reset (HklGeometryList *self);

reset the HklGeometry, in fact it is a sort of clean method remove all the items of the list.

[skip]

Parameters

self

the this ptr

 

hkl_geometry_list_sort ()

void
hkl_geometry_list_sort (HklGeometryList *self,
                        HklGeometry *ref);

sort the HklGeometryList compare to the distance of the given HklGeometry

[skip]


hkl_geometry_list_fprintf ()

void
hkl_geometry_list_fprintf (FILE *f,
                           const HklGeometryList *self);

print to a file the HklGeometryList

[skip]


hkl_geometry_list_multiply ()

void
hkl_geometry_list_multiply (HklGeometryList *self);

apply the multiply lenthod to the HklGeometry

[skip]


hkl_geometry_list_multiply_from_range ()

void
hkl_geometry_list_multiply_from_range (HklGeometryList *self);

hkl_geometry_list_remove_invalid ()

void
hkl_geometry_list_remove_invalid (HklGeometryList *self);

remove all invalid HklGeometry from the HklGeometryList

[skip]


hkl_geometry_list_item_new ()

HklGeometryListItem *
hkl_geometry_list_item_new (const HklGeometry *geometry);

constructor

[skip]


hkl_geometry_list_item_new_copy ()

HklGeometryListItem *
hkl_geometry_list_item_new_copy (const HklGeometryListItem *self);

copy constructor

[skip]


hkl_geometry_list_item_free ()

void
hkl_geometry_list_item_free (HklGeometryListItem *self);

destructor

[skip]

Types and Values

HKL_HOLDER_SAMPLE_IDX

#define HKL_HOLDER_SAMPLE_IDX 0

HKL_HOLDER_DETECTOR_IDX

#define HKL_HOLDER_DETECTOR_IDX 1

darray_holder

typedef darray(HklHolder *) darray_holder;

struct HklHolderConfig

struct HklHolderConfig {
	int gc;
	size_t *idx;
	size_t len;
};

struct HklHolder

struct HklHolder {
	struct HklHolderConfig *config;
	HklGeometry *geometry;
	HklQuaternion q;
};

struct HklGeometryOperations

struct HklGeometryOperations {
	HklHolder* (*sample_holder_get) (const HklGeometry *self, const HklSample *sample);

	HklHolder* (*detector_holder_get) (const HklGeometry *self, const HklDetector *detector);

	HklVector (*ki_get) (const HklGeometry *geometry);

	HklVector (*kf_get) (const HklGeometry *self, const HklDetector *detector);
};

HklGeometry

typedef struct {
	const HklFactory *factory;
	HklSource source;
	darray_parameter axes;
	darray_holder holders;
	const HklGeometryOperations *ops;
} HklGeometry;

kf

	HklVector kf = {{HKL_TAU / self->source.wave_length, 0, 0}};

detector_holder

	HklHolder *detector_holder = darray_item(self->holders, HKL_HOLDER_DETECTOR_IDX);

HKL_GEOMETRY_OPERATIONS_DEFAULTS

#define             HKL_GEOMETRY_OPERATIONS_DEFAULTS

hkl_geometry_operations_defaults

extern const HklGeometryOperations hkl_geometry_operations_defaults;

HKL_GEOMETRY_ERROR

#define HKL_GEOMETRY_ERROR hkl_geometry_error_quark ()

enum HklGeometryError

Members

HKL_GEOMETRY_ERROR_AXIS_GET

   

HKL_GEOMETRY_ERROR_AXIS_SET

   

HklGeometryList

typedef struct {
	HklGeometryListMultiplyFunction multiply;
	struct list_head items;
	size_t n_items;
} HklGeometryList;

HklGeometryListItem

typedef struct {
	struct list_node list;
	HklGeometry *geometry;
} HklGeometryListItem;
hkl-5.0.0.2449/Documentation/api/html/left.png0000644000175000017500000000040613237020544021101 0ustar00piccapicca00000000000000PNG  IHDRabKGD pHYs B(xtIME ,&a:IDAT8үa?DAPY\$[p+IIMlf('}Mpy{_ޥ}^q xZ <=Yj) <04\~+Pl#",Qϑp Iǐlsw>[/]_i03IENDB`hkl-5.0.0.2449/Documentation/api/html/hkl-list.html0000644000175000017500000005126313237020545022066 0ustar00piccapicca00000000000000 list: hkl Reference Manual

list

list

Functions

struct list_head * list_check ()
struct list_node * list_check_node ()
#define list_debug()
#define list_debug_node()
#define LIST_HEAD_INIT()
#define LIST_HEAD()
#define list_add_after()
#define list_add()
#define list_add_before()
#define list_add_tail()
#define list_empty()
#define list_empty_nodebug()
#define list_del()
#define list_del_init()
#define list_swap()
#define list_entry()
#define list_top()
#define list_pop()
#define list_tail()
#define list_for_each()
#define list_for_each_rev()
#define list_for_each_rev_safe()
#define list_for_each_safe()
#define list_next()
#define list_prev()
#define list_append_list()
#define list_prepend_list()
#define list_for_each_off_dir_()
#define list_for_each_safe_off_dir_()
#define list_for_each_off()
#define list_for_each_rev_off()
#define list_for_each_safe_off()
#define list_for_each_rev_safe_off()
#define list_entry_off()
#define list_head_off()
#define list_tail_off()
#define list_add_off()
#define list_del_off()
#define list_del_from_off()
#define list_off_()
#define list_off_var_()
#define list_typeof()

Types and Values

struct list_node
struct list_head
#define LIST_LOC

Description

Functions

list_check ()

struct list_head *
list_check (const struct list_head *h,
            const char *abortstr);

list_check_node ()

struct list_node *
list_check_node (const struct list_node *n,
                 const char *abortstr);

list_debug()

#define list_debug(h, loc) list_check((h), loc)

list_debug_node()

#define list_debug_node(n, loc) list_check_node((n), loc)

LIST_HEAD_INIT()

#define LIST_HEAD_INIT(name) { { &(name).n, &(name).n } }

LIST_HEAD()

#define             LIST_HEAD(name)

list_add_after()

#define list_add_after(h, p, n) list_add_after_(h, p, n, LIST_LOC)

list_add()

#define list_add(h, n) list_add_(h, n, LIST_LOC)

list_add_before()

#define list_add_before(h, p, n) list_add_before_(h, p, n, LIST_LOC)

list_add_tail()

#define list_add_tail(h, n) list_add_tail_(h, n, LIST_LOC)

list_empty()

#define list_empty(h) list_empty_(h, LIST_LOC)

list_empty_nodebug()

#define list_empty_nodebug(h) list_empty(h)

list_del()

#define list_del(n) list_del_(n, LIST_LOC)

list_del_init()

#define list_del_init(n) list_del_init_(n, LIST_LOC)

list_swap()

#define list_swap(o, n) list_swap_(o, n, LIST_LOC)

list_entry()

#define list_entry(n, type, member) container_of(n, type, member)

list_top()

#define             list_top(h, type, member)

list_pop()

#define             list_pop(h, type, member)

list_tail()

#define             list_tail(h, type, member)

list_for_each()

#define             list_for_each(h, i, member)

list_for_each_rev()

#define             list_for_each_rev(h, i, member)

list_for_each_rev_safe()

#define             list_for_each_rev_safe(h, i, nxt, member)

list_for_each_safe()

#define             list_for_each_safe(h, i, nxt, member)

list_next()

#define             list_next(h, i, member)

list_prev()

#define             list_prev(h, i, member)

list_append_list()

#define             list_append_list(t, f)

list_prepend_list()

#define list_prepend_list(t, f) list_prepend_list_(t, f, LIST_LOC)

list_for_each_off_dir_()

#define             list_for_each_off_dir_(h, i, off, dir)

list_for_each_safe_off_dir_()

#define             list_for_each_safe_off_dir_(h, i, nxt, off, dir)

list_for_each_off()

#define             list_for_each_off(h, i, off)

list_for_each_rev_off()

#define             list_for_each_rev_off(h, i, off)

list_for_each_safe_off()

#define             list_for_each_safe_off(h, i, nxt, off)

list_for_each_rev_safe_off()

#define             list_for_each_rev_safe_off(h, i, nxt, off)

list_entry_off()

#define             list_entry_off(n, type, off)

list_head_off()

#define             list_head_off(h, type, off)

list_tail_off()

#define             list_tail_off(h, type, off)

list_add_off()

#define             list_add_off(h, n, off)

list_del_off()

#define             list_del_off(n, off)

list_del_from_off()

#define             list_del_from_off(h, n, off)

list_off_()

#define             list_off_(type, member)

list_off_var_()

#define             list_off_var_(var, member)

list_typeof()

#define list_typeof(var) typeof(var)

Types and Values

struct list_node

struct list_node {
	struct list_node *next, *prev;
};

struct list_head

struct list_head {
	struct list_node n;
};

LIST_LOC

#define LIST_LOC __FILE__  ":" stringify(__LINE__)
hkl-5.0.0.2449/Documentation/api/html/hkl-check-type.html0000644000175000017500000000645513237020545023152 0ustar00piccapicca00000000000000 check_type: hkl Reference Manual

check_type

check_type

Functions

#define check_type()
#define check_types_match()

Description

Functions

check_type()

#define             check_type(expr, type)

check_types_match()

#define             check_types_match(expr1, expr2)

Types and Values

hkl-5.0.0.2449/Documentation/api/html/up-insensitive.png0000644000175000017500000000056613237020544023140 0ustar00piccapicca00000000000000PNG  IHDRabKGD pHYs B(xtIME ,&a:IDAT8?/Qϙ?[u$VHTDۈBM+! compiler: hkl Reference Manual

compiler

compiler

Functions

#define PRINTF_FMT()
#define IS_COMPILE_CONSTANT()

Types and Values

#define COLD
#define NORETURN
#define CONST_FUNCTION
#define PURE_FUNCTION
#define UNNEEDED
#define NEEDED
#define UNUSED
#define WARN_UNUSED_RESULT

Description

Functions

PRINTF_FMT()

#define             PRINTF_FMT(nfmt, narg)

IS_COMPILE_CONSTANT()

#define IS_COMPILE_CONSTANT(expr) __builtin_constant_p(expr)

Types and Values

COLD

#define COLD __attribute__((__cold__))

NORETURN

#define             NORETURN

CONST_FUNCTION

#define CONST_FUNCTION __attribute__((__const__))

PURE_FUNCTION

#define PURE_FUNCTION __attribute__((__pure__))

UNNEEDED

#define UNNEEDED __attribute__((__unused__))

NEEDED

#define NEEDED __attribute__((__used__))

UNUSED

#define UNUSED __attribute__((__unused__))

WARN_UNUSED_RESULT

#define WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))
hkl-5.0.0.2449/Documentation/api/html/hkl-array-size.html0000644000175000017500000000565413237020545023204 0ustar00piccapicca00000000000000 array_size: hkl Reference Manual

array_size

array_size

Functions

#define ARRAY_SIZE()

Description

Functions

ARRAY_SIZE()

#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + _array_size_chk(arr))

Types and Values

hkl-5.0.0.2449/Documentation/api/html/deprecated-api-index.html0000644000175000017500000000314713237020545024311 0ustar00piccapicca00000000000000 Index of deprecated API: hkl Reference Manual

Index of deprecated API

hkl-5.0.0.2449/Documentation/api/html/object-tree.html0000644000175000017500000000310613237020545022533 0ustar00piccapicca00000000000000 Object Hierarchy: hkl Reference Manual

Object Hierarchy


hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-parameter-private.html0000644000175000017500000006173713237020545025326 0ustar00piccapicca00000000000000 hkl-parameter-private: hkl Reference Manual

hkl-parameter-private

hkl-parameter-private

Description

Functions

g_quark_from_static_string ()

return
g_quark_from_static_string ();

fprintf ()

else
fprintf (f Param1);

hkl_parameter_new ()

HklParameter *
hkl_parameter_new (const char *name,
                   const char *description,
                   double min,
                   double value,
                   double max,
                   int fit,
                   int changed,
                   const HklUnit *unit,
                   const HklUnit *punit);

create a new HklParameter

[skip]


hkl_parameter_init_copy ()

int
hkl_parameter_init_copy (HklParameter *self,
                         const HklParameter *src,
                         GError **error);

[skip]

Parameters

self

the this ptr

 

src

the parameter to copy from

 

error

return location for a GError, or NULL

 

Returns

TRUE on success, FALSE if an error occurred


hkl_parameter_value_get_closest ()

double
hkl_parameter_value_get_closest (const HklParameter *self,
                                 const HklParameter *ref);

Parameters

self

the this ptr

 

ref

the reference HklParameter

 

Returns

the closest value of the ref HklParameter from the current self HklParameter


hkl_parameter_value_set_smallest_in_range ()

void
hkl_parameter_value_set_smallest_in_range
                               (HklParameter *self);

[skip]

Parameters

self

the this ptr

 

hkl_parameter_is_valid ()

int
hkl_parameter_is_valid (const HklParameter *self);

check if the value of the HklParameter is in the min,max range

[skip]


hkl_parameter_is_valid_range ()

int
hkl_parameter_is_valid_range (const HklParameter *self);

check if the value of the HklParameter is in the min,max range strictly (min < value < max).

[skip]


hkl_parameter_fprintf ()

void
hkl_parameter_fprintf (FILE *f,
                       const HklParameter *self);

print into the FILE f an HklParameter

[skip]


hkl_parameter_transformation_cmp ()

int
hkl_parameter_transformation_cmp (const HklParameter *self,
                                  const HklParameter *p2);

[skip]

Parameters

self

the this ptr

 

p2

the second parameter to test with

 

Returns

if two parameter transformations are compatibles. (0) compatible, (!= 0) not-compatible


hkl_parameter_transformation_apply ()

HklVector
hkl_parameter_transformation_apply (const HklParameter *self,
                                    const HklVector *v);

[skip]

Parameters

self

the this ptr

 

v

the HklVector to transform

 

Returns

the transformed HklVector

Types and Values

HklParameter

typedef struct {
	const char *name;
	const char *description;
	HklInterval range;
	double _value;
	const HklUnit *unit;
	const HklUnit *punit;
	int fit;
	int changed;
	const HklParameterOperations *ops;
} HklParameter;

HKL_PARAMETER_DEFAULTS

#define HKL_PARAMETER_DEFAULTS .name="dummy", .description="no description", .range={.min=-DBL_MAX, .max=DBL_MAX}, ._value=0, .unit=NULL, .punit=NULL, .fit=TRUE, .changed=TRUE, .ops = &hkl_parameter_operations_defaults

HKL_PARAMETER_DEFAULTS_ANGLE

#define HKL_PARAMETER_DEFAULTS_ANGLE HKL_PARAMETER_DEFAULTS, .range={.min=-M_PI, .max=M_PI}, .unit = &hkl_unit_angle_rad, .punit = &hkl_unit_angle_deg

HKL_PARAMETER_ERROR

#define HKL_PARAMETER_ERROR hkl_parameter_error_quark ()

enum HklParameterError

Members

HKL_PARAMETER_ERROR_MIN_MAX_SET

   

struct HklParameterOperations

struct HklParameterOperations {
	HklParameter *        (*copy)(const HklParameter *self);
	void                  (*free)(HklParameter *self);
	int                   (*init_copy)(HklParameter *self, const HklParameter *src,
					   GError **error);
	double                (*get_value_closest)(const HklParameter *self,
						   const HklParameter *other);
	int                   (*set_value)(HklParameter *self, double value,
					   HklUnitEnum unit_type, GError **error);
	void                  (*set_value_smallest_in_range)(HklParameter *self);
	void                  (*randomize)(HklParameter *self);
	int                   (*is_valid)(const HklParameter *self);
	int                   (*is_valid_range)(const HklParameter *self);
	void                  (*fprintf)(FILE *f, const HklParameter *self);
	const HklVector *     (*axis_v_get)(const HklParameter *self);
	const HklQuaternion * (*quaternion_get)(const HklParameter *self);
	int                   (*transformation_cmp)(const HklParameter *self, const HklParameter *p2);
	HklVector             (*transformation_apply)(const HklParameter *self, const HklVector *v);
};

HKL_PARAMETER_OPERATIONS_DEFAULTS

#define             HKL_PARAMETER_OPERATIONS_DEFAULTS

dup

	HklParameter *dup = HKL_MALLOC(HklParameter);

alea

		double alea = (double)rand() / (RAND_MAX + 1.);

factor

	double factor = hkl_unit_factor(self->unit, self->punit);

darray_parameter

typedef darray(HklParameter *) darray_parameter;
hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-source-private.html0000644000175000017500000003403413237020545024634 0ustar00piccapicca00000000000000 hkl-source-private: hkl Reference Manual

hkl-source-private

hkl-source-private

Types and Values

Description

Functions

hkl_source_dup ()

HklSource *
hkl_source_dup (const HklSource *self);

copy constructor TODO test

Parameters

self

the Hklsource to copy

 

hkl_source_free ()

void
hkl_source_free (HklSource *self);

destructor TODO: test

Parameters

self

the Hklsource to delete

 

hkl_source_init ()

int
hkl_source_init (HklSource *self,
                 double wave_length,
                 double x,
                 double y,
                 double z);

initialize the HklSource

Parameters

self

the Hklsource to initialize

 

wave_length

the wave length to set

 

x

x coordinates of the ki vector

 

y

y coordinates of the ki vector

 

z

z coordinates of the ki vector

 

Returns

HKL_SUCCESS if everythongs goes fine, HKL_FAIL otherwise


hkl_source_cmp ()

int
hkl_source_cmp (HklSource const *self,
                HklSource const *s);

compare two sources

[skip]

Parameters

self

1st Hklsource

 

s

2nd Hklsource

 

hkl_source_compute_ki ()

void
hkl_source_compute_ki (HklSource const *self,
                       HklVector *ki);

compute the ki hkl_vector

[skip]

Parameters

ki

.

[out caller-allocates]

hkl_source_get_wavelength ()

double
hkl_source_get_wavelength (HklSource const *self);

get the wave_length

[skip]

Returns

the wave_length


hkl_source_fprintf ()

void
hkl_source_fprintf (FILE *f,
                    HklSource const *self);

printf the source

[skip]

Types and Values

HKL_SOURCE_DEFAULT_WAVE_LENGTH

#define HKL_SOURCE_DEFAULT_WAVE_LENGTH (1.54)

struct HklSource

struct HklSource {
	double wave_length;
	HklVector direction;
};
hkl-5.0.0.2449/Documentation/api/html/up.png0000644000175000017500000000040413237020544020571 0ustar00piccapicca00000000000000PNG  IHDRabKGD pHYs B(xtIME ,&a:IDAT81 @D{xa;$]r =JR1, Sd-}0̟oL:m-QO[ k TzMޠL,:ךu!tK; Pp Ot@l/̵*l}IENDB`hkl-5.0.0.2449/Documentation/api/html/right.png0000644000175000017500000000040513237020544021263 0ustar00piccapicca00000000000000PNG  IHDRabKGD pHYs B(xtIME ,&a:IDAT8үa?MIdEr,-hAIl ry}sX6 !9#D r$-Br$G"$;WZ&!cq \`軀O=QoufIENDB`hkl-5.0.0.2449/Documentation/api/html/index.html0000644000175000017500000001444413237020545021446 0ustar00piccapicca00000000000000 hkl Reference Manual: hkl Reference Manual hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-matrix-private.html0000644000175000017500000005606213237020545024645 0ustar00piccapicca00000000000000 hkl-matrix-private: hkl Reference Manual

hkl-matrix-private

hkl-matrix-private

Types and Values

Description

Functions

hkl_matrix_dup ()

HklMatrix *
hkl_matrix_dup (const HklMatrix *self);

[skip]


hkl_matrix_init_from_euler ()

void
hkl_matrix_init_from_euler (HklMatrix *self,
                            double euler_x,
                            double euler_y);

Create a rotation HklMatrix from three eulerians angles.

Parameters

self

the HklMatrix to initialize

 

euler_x

the eulerian value along X

 

euler_y

the eulerian value along Y

 

euler_z

the eulerian value along Z

 

hkl_matrix_matrix_set ()

void
hkl_matrix_matrix_set (HklMatrix *self);

todo test

[skip]

Parameters

self

the this ptr

 

m

the matrix to set

 

hkl_matrix_init_from_two_vector ()

void
hkl_matrix_init_from_two_vector (HklMatrix *self,
                                 const HklVector *v1,
                                 const HklVector *v2);

Create an HklMatrix which represent a direct oriented base of the space the first row correspond to the |v1|, the second row |v2| and the last one is |v1 ^ v2|

Parameters

self

The HklMatrix to initialize

 

v1

the first HklVector

 

v2

the second HklVector

 

hkl_matrix_fprintf ()

void
hkl_matrix_fprintf (FILE *file,
                    const HklMatrix *self);

printf an HklMatrix into a FILE stream.

Parameters

file

the FILE stream

 

self

the HklMatrix to print into the file stream

 

hkl_matrix_to_euler ()

void
hkl_matrix_to_euler (const HklMatrix *self,
                     double *euler_x,
                     double *euler_y,
                     double *euler_z);

compute the three eulerians values for a given rotation HklMatrix

Parameters

self

the rotation HklMatrix use to compute the eulerians angles

 

euler_x

the eulerian value along X

 

euler_y

the eulerian value along Y

 

euler_z

the eulerian value along Z

 

hkl_matrix_times_vector ()

void
hkl_matrix_times_vector (const HklMatrix *self,
                         HklVector *v);

multiply an HklVector by an HklMatrix

Parameters

self

the HklMatrix use to multiply the HklVector

 

v

the HklVector multiply by the HklMatrix

 

hkl_matrix_transpose ()

void
hkl_matrix_transpose (HklMatrix *self);

transpose an HklMatrix

Parameters

self

the HklMatrix to transpose

 

hkl_matrix_det ()

double
hkl_matrix_det (const HklMatrix *self);

compute the determinant of an HklMatrix

Parameters

self

the HklMatrix use to compute the determinant

 

Returns

the determinant of the self HklMatrix Todo: test


hkl_matrix_solve ()

int
hkl_matrix_solve (const HklMatrix *self,
                  HklVector *x,
                  const HklVector *b);

solve the system self . X = b

Parameters

self

The HklMatrix of the system

 

x

the HklVector to compute.

 

b

the hklVector of the system to solve.

 

Returns

-1 if the système has no solution, 0 otherwise. Todo: test


hkl_matrix_is_null ()

int
hkl_matrix_is_null (const HklMatrix *self);

is all hklMatrix elementes bellow HKL_EPSILON

Parameters

self

the HklMatrix to test

 

Returns

TRUE if the self HklMatrix is null Todo: test

Types and Values

HklMatrix

typedef struct {
	double data[3][3];
} HklMatrix;
hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-vector-private.html0000644000175000017500000017034413237020545024643 0ustar00piccapicca00000000000000 hkl-vector-private: hkl Reference Manual

hkl-vector-private

hkl-vector-private

Description

Functions

hkl_vector_dup ()

HklVector *
hkl_vector_dup (const HklVector *self);

Copy an HklVector

[skip]

Parameters

self

the HklVector to copy

 

Returns

A copy of self which need to be free using hkl_vector_free


hkl_vector_free ()

void
hkl_vector_free (HklVector *self);

delete an HklVector struct

[skip]


hkl_vector_fprintf ()

void
hkl_vector_fprintf (FILE *file,
                    const HklVector *self);

print an HklVector into a stream

[skip]

Parameters

file

the stream to print into

 

self

the HklVector to print.

 

hkl_vector_cmp ()

int
hkl_vector_cmp (const HklVector *self,
                const HklVector *vector);

compare two HklVector. this comparison use HKL_EPSILON to do the comparison.

[skip]

Parameters

self

the first vector

 

vector

th vector to compare with

 

Returns

FALSE if both are equals, TRUE otherwise.


hkl_vector_is_opposite ()

int
hkl_vector_is_opposite (const HklVector *self,
                        const HklVector *vector);

Check if two vectors are oposite.

[skip]

Returns

TRUE is vector are oposite vectors.


hkl_vector_add_vector ()

void
hkl_vector_add_vector (HklVector *self,
                       const HklVector *vector);

add an HklVector to another one.

[skip]

Parameters

self

the modified HklVector

 

vector

the hklvector to add

 

hkl_vector_minus_vector ()

void
hkl_vector_minus_vector (HklVector *self,
                         const HklVector *vector);

substract an HklVector to another one.

[skip]

Parameters

self

the modified HklVector

 

vector

the hklvector to substract

 

hkl_vector_div_double ()

void
hkl_vector_div_double (HklVector *self,
                       const double d);

divide an HklVector by constant.

[skip]

Parameters

self

the HklVector to divide.

 

d

constant use to divide the HklVector

 

hkl_vector_times_double ()

void
hkl_vector_times_double (HklVector *self,
                         const double d);

multiply an HklVector by a constant value.

[skip]

Parameters

self

the HklVector to modify

 

d

the multiply factor

 

hkl_vector_times_vector ()

void
hkl_vector_times_vector (HklVector *self,
                         const HklVector *vector);

multiply an HklVector by another one. This method multiply coordinate by coordinate.

[skip]

Parameters

self

the HklVector to modify

 

vector

the HklVector use to modify the first one

 

hkl_vector_times_matrix ()

void
hkl_vector_times_matrix (HklVector *self,
                         const HklMatrix *m);

multiply an HklVector by an HklMatrix. compute v'= M . v

[skip]

Parameters

self

the HklVector to multiply

 

m

the HklMatrix use to multiply the HklVector

 

hkl_vector_sum ()

double
hkl_vector_sum (const HklVector *self);

compute the HklVector sum of all its elements.

[skip]

Parameters

self

the HklVector to sum.

 

Returns

the sum of all elements.


hkl_vector_scalar_product ()

double
hkl_vector_scalar_product (const HklVector *self,
                           const HklVector *vector);

compute the scalar product of two HklVector

[skip]

Parameters

self

the first HklVector

 

vector

the second HklVector

 

Returns

the scalar product.


hkl_vector_vectorial_product ()

void
hkl_vector_vectorial_product (HklVector *self,
                              const HklVector *vector);

compute the vectorial product of two vectors

[skip]

Parameters

self

the first HklVector (modify)

 

vector

the second HklVector

 

hkl_vector_angle ()

double
hkl_vector_angle (const HklVector *self,
                  const HklVector *vector);

compute the angles beetween two HklVector

[skip]

Parameters

self

the fist HklVector

 

vector

the second HklVector

 

Returns

the return value is in beetween [0, pi]


hkl_vector_oriented_angle ()

double
hkl_vector_oriented_angle (const HklVector *self,
                           const HklVector *vector,
                           const HklVector *ref);

compute the angles beetween two HklVector and use a reference HklVector to orientate the space. That's way the return value can be in beetween [-pi, pi]. the (self, vector, ref) is a right oriented base.

[skip]

Parameters

self

the first HklVector

 

vector

the second HklVector

 

ref

the reference HklVector

 

Returns

the angles [-pi, pi]


hkl_vector_oriented_angle_points ()

double
hkl_vector_oriented_angle_points (const HklVector *self,
                                  const HklVector *p2,
                                  const HklVector *p3,
                                  const HklVector *ref);

compute the angles beetween three points (p1, p2, p3) and use a reference HklVector to orientate the space. That's way the return value can be in beetween [-pi, pi]. the (self, vector, ref) is a right oriented base.

[skip]

Parameters

self

the first point

 

p2

the second point

 

p3

the third point

 

ref

the reference HklVector

 

Returns

the angles [-pi, pi]


hkl_vector_norm2 ()

double
hkl_vector_norm2 (const HklVector *self);

compute the norm2 of an HklVector

[skip]

Parameters

self

the hklvector use to compute the norm2

 

Returns

the sqrt(|v|)


hkl_vector_normalize ()

int
hkl_vector_normalize (HklVector *self);

normalize a hkl_vector

[skip]

Parameters

self

the HklVector to normalize

 

Returns

TRUE if the HklVector can be normalized, FALSE otherwise


hkl_vector_is_colinear ()

int
hkl_vector_is_colinear (const HklVector *self,
                        const HklVector *vector);

check if two HklVector are colinears

[skip]

Parameters

self

the first HklVector

 

vector

the second HklVector

 

Returns

TRUE if both are colinear.


hkl_vector_randomize ()

void
hkl_vector_randomize (HklVector *self);

initialize a vector with random values. coordinates range [-1, 1]

[skip]

Parameters

self

the HklVector to randomize

 

hkl_vector_randomize_vector ()

void
hkl_vector_randomize_vector (HklVector *self,
                             const HklVector *vector);

randomize an HklVector an be sure that it is not equal to the HklVector vector.

[skip]

Parameters

self

the HklVector to randomize

 

vector

the HklVector result to avoid

 

hkl_vector_randomize_vector_vector ()

void
hkl_vector_randomize_vector_vector (HklVector *self,
                                    const HklVector *vector1,
                                    const HklVector *vector2);

randomize an HklVector an be sure that it is not equal to the HklVector vector1 and vector2.

[skip]

Parameters

self

the HklVector to randomize

 

vector1

the first HklVector solution to avoid

 

vector2

the second HklVector solution to avoid

 

hkl_vector_rotated_around_vector ()

void
hkl_vector_rotated_around_vector (HklVector *self,
                                  const HklVector *axe,
                                  double angle);

rotate a vector around another one with a given angle.

[skip]

Parameters

self

the HklVector to rotate

 

axe

the axe of rotation

 

angle

the angle of the rotation

 

hkl_vector_rotated_quaternion ()

void
hkl_vector_rotated_quaternion (HklVector *self,
                               const HklQuaternion *qr);

rotate an HklVector using an HklQuaternion.

[skip]

Parameters

self

the HklVector to rotate

 

qr

the HklQuaternion use to rotate the vector

 

hkl_vector_rotated_around_line ()

void
hkl_vector_rotated_around_line (HklVector *self,
                                double angle,
                                const HklVector *c1,
                                const HklVector *c2);

This method rotate a point around a line defined by two points of a certain amount of angle. The rotation is right handed. this mean that c2 - c1 gives the direction of the rotation.

[skip]

Parameters

self

the point to rotate around a line

 

angle

the angle of the rotation

 

c1

the fist point of the line

 

c2

the second point of the line

 

hkl_vector_is_null ()

int
hkl_vector_is_null (const HklVector *self);

check if all the coordinates of an HklVector are null.

[skip]

Parameters

self

the hklvector to check

 

Returns

HKl_TRUE if all |elements| are below HKL_EPSILON, HKl_FALSE otherwise

Todo: test


hkl_vector_project_on_plan ()

void
hkl_vector_project_on_plan (HklVector *self,
                            const HklVector *normal);

project an HklVector on a plan of normal which contain the origin [0, 0, 0]

[skip]

Parameters

self

the vector to project

 

normal

the normal of the plane.

 

hkl_vector_project_on_plan_with_point ()

void
hkl_vector_project_on_plan_with_point (HklVector *self,
                                       const HklVector *normal,
                                       const HklVector *point);

project an HklVector on a plan of normal normal which contain point.

[skip]

Parameters

self

the vector to project (modify)

 

normal

the normal of the plane.

 

point

a point of the plan.

 

Types and Values

hkl-5.0.0.2449/Documentation/api/html/hkl-hkl-factory-private.html0000644000175000017500000001356613237020545025012 0ustar00piccapicca00000000000000 hkl-factory-private: hkl Reference Manual

hkl-factory-private

hkl-factory-private

Types and Values

Description

Functions

HklFactoryGeometryFunction ()

HklGeometry *
(*HklFactoryGeometryFunction) (const HklFactory *factory);

HklFactoryEngineListFunction ()

HklEngineList *
(*HklFactoryEngineListFunction) (const HklFactory *factory);

REGISTER_DIFFRACTOMETER()

#define             REGISTER_DIFFRACTOMETER(name_, real_name_, description_)

Types and Values

HklFactory

typedef struct {
	const char *name;
	const char *description;
	const darray_string axes;
	HklFactoryGeometryFunction create_new_geometry;
	HklFactoryEngineListFunction create_new_engine_list;
} HklFactory;
hkl-5.0.0.2449/Documentation/api/html/left-insensitive.png0000644000175000017500000000061313237020544023437 0ustar00piccapicca00000000000000PNG  IHDRabKGD pHYs B(xtIME ,&a:IDAT8͒NQ@pds`*4@W@ A!Ԇ@6^ 5hxIH R`sQp̙339B|sKEQTK@۝΁i^~Wʆ`0TJ6TcYn6A ƀ~߱>}ǭs; lYkwr 5U= /" "uU=ɲlArDzp5I4^E+P3Ɯq_p ̥iUYp=#IENDB`hkl-5.0.0.2449/Documentation/api/html/hkl-noerr.html0000644000175000017500000001061713237020545022236 0ustar00piccapicca00000000000000 noerr: hkl Reference Manual

noerr

noerr

Functions

int close_noerr ()
int fclose_noerr ()
int unlink_noerr ()
void free_noerr ()

Description

Functions

close_noerr ()

int
close_noerr (int fd);

fclose_noerr ()

int
fclose_noerr (FILE *fp);

unlink_noerr ()

int
unlink_noerr (const char *pathname);

free_noerr ()

void
free_noerr (void *p);

Types and Values

hkl-5.0.0.2449/Documentation/api/html/api-index-full.html0000644000175000017500000037463413237020545023167 0ustar00piccapicca00000000000000 API Index: hkl Reference Manual

API Index

A

alea, variable in hkl-parameter-private
ALIGNOF, macro in alignof
ALLOC_GROW, macro in hkl-macros-private
alloc_nr, macro in hkl-macros-private
HKLAPI, macro in hkl
HKL_ARG_NONNULL, macro in hkl
ARRAY_SIZE, macro in array_size
hkl_assert, macro in hkl-macros-private
AUTODATA, macro in autodata
autodata_free, function in autodata
autodata_get, macro in autodata
autodata_get_section, function in autodata
AUTODATA_MAGIC, macro in autodata
autodata_make_table, function in autodata
AUTODATA_TYPE, macro in autodata
AUTODATA_VAR_, macro in autodata
AUTODATA_VAR__, macro in autodata
HklAxis, struct in hkl-axis-private
axis, variable in hkl-pseudoaxis-private

B

BUILD_ASSERT, macro in build_assert
BUILD_ASSERT_OR_ZERO, macro in build_assert

C

CCAN_CFLAGS, macro in ccan_config
CCAN_COMPILER, macro in ccan_config
CCAN_OUTPUT_EXE_CFLAG, macro in ccan_config
CHECK_NAN, macro in hkl-pseudoaxis-auto-private
check_type, macro in check_type
check_types_match, macro in check_type
close_noerr, function in noerr
COLD, macro in compiler
CONSTANT_PARAMETER, macro in hkl-pseudoaxis-common-hkl-private
CONST_FUNCTION, macro in compiler
container_of, macro in container_of
container_off, macro in container_of
container_off_var, macro in container_of
container_of_or_null, macro in container_of
container_of_var, macro in container_of
COROUTINE_AVAILABLE, macro in coroutine
coroutine_init, macro in coroutine
coroutine_init_, function in coroutine
COROUTINE_MIN_STKSZ, macro in coroutine
coroutine_stack, struct in coroutine
coroutine_stack_alloc, function in coroutine
coroutine_stack_check, function in coroutine
coroutine_stack_from_metadata, function in coroutine
coroutine_stack_init, function in coroutine
COROUTINE_STACK_MAGIC_ALLOC, macro in coroutine
COROUTINE_STACK_MAGIC_BUF, macro in coroutine
coroutine_stack_release, function in coroutine
coroutine_stack_size, function in coroutine
coroutine_state, struct in coroutine
COROUTINE_STK_OVERHEAD, macro in coroutine
coroutine_switch, function in coroutine
CPPMAGIC_1ST, macro in cppmagic
CPPMAGIC_2MAP, macro in cppmagic
CPPMAGIC_2ND, macro in cppmagic
CPPMAGIC_DEFER1, macro in cppmagic
CPPMAGIC_DEFER2, macro in cppmagic
CPPMAGIC_EVAL, macro in cppmagic
CPPMAGIC_EVAL1, macro in cppmagic
CPPMAGIC_EVAL1024, macro in cppmagic
CPPMAGIC_EVAL128, macro in cppmagic
CPPMAGIC_EVAL16, macro in cppmagic
CPPMAGIC_EVAL2, macro in cppmagic
CPPMAGIC_EVAL256, macro in cppmagic
CPPMAGIC_EVAL32, macro in cppmagic
CPPMAGIC_EVAL4, macro in cppmagic
CPPMAGIC_EVAL512, macro in cppmagic
CPPMAGIC_EVAL64, macro in cppmagic
CPPMAGIC_EVAL8, macro in cppmagic
CPPMAGIC_GLUE2, macro in cppmagic
CPPMAGIC_IFELSE, macro in cppmagic
CPPMAGIC_ISEMPTY, macro in cppmagic
CPPMAGIC_ISZERO, macro in cppmagic
CPPMAGIC_JOIN, macro in cppmagic
CPPMAGIC_MAP, macro in cppmagic
CPPMAGIC_NONEMPTY, macro in cppmagic
CPPMAGIC_NONZERO, macro in cppmagic
CPPMAGIC_NOTHING, macro in cppmagic
CPPMAGIC_STRINGIFY, macro in cppmagic
Cubic, macro in hkl2

D

DARRAY, macro in hkl-macros-private
darray, macro in darray
darray_alloc, macro in darray
darray_append, macro in darray
darray_appends, macro in darray
darray_appends_t, macro in darray
darray_append_items, macro in darray
darray_append_items_nullterminate, macro in darray
darray_append_lit, macro in darray
darray_append_string, macro in darray
darray_char, typedef in darray
darray_double, typedef in hkl-trajectory-private
darray_empty, macro in darray
darray_engine, typedef in hkl
darray_foreach, macro in darray
darray_foreach_reverse, macro in darray
darray_free, macro in darray
darray_from_c, macro in darray
darray_from_items, macro in darray
darray_from_lit, macro in darray
darray_from_string, macro in darray
darray_function, typedef in hkl-pseudoaxis-auto-private
darray_geometry, typedef in hkl-trajectory-private
darray_growalloc, macro in darray
darray_holder, typedef in hkl-geometry-private
darray_init, macro in darray
darray_insert, macro in darray
darray_int, typedef in darray
darray_item, function in hkl-pseudoaxis-private
darray_long, typedef in darray
darray_make_room, macro in darray
darray_mode, typedef in hkl-pseudoaxis-private
darray_new, macro in darray
darray_parameter, typedef in hkl-parameter-private
darray_pop, macro in darray
darray_pop_check, macro in darray
darray_prepend, macro in darray
darray_prepends, macro in darray
darray_prepends_t, macro in darray
darray_prepend_items, macro in darray
darray_prepend_items_nullterminate, macro in darray
darray_prepend_lit, macro in darray
darray_prepend_string, macro in darray
darray_push, macro in darray
darray_realloc, macro in darray
darray_remove, macro in darray
darray_resize, macro in darray
darray_resize0, macro in darray
darray_schar, typedef in darray
darray_short, typedef in darray
darray_size, macro in darray
darray_sizet, typedef in hkl-trajectory-private
darray_string, typedef in hkl
darray_uchar, typedef in darray
darray_uint, typedef in darray
darray_ulong, typedef in darray
darray_ushort, typedef in darray
HKL_DEGTORAD, macro in hkl
HKL_DEPRECATED, macro in hkl
HKL_DEPRECATED_FOR, macro in hkl
HklDetector, struct in hkl-detector-private
HklDetectorType, enum in hkl
hkl_detector_attach_to_holder, function in hkl-detector-private
hkl_detector_compute_kf, function in hkl-detector-private
detector_holder, variable in hkl-geometry-private
hkl_detector_new, function in hkl-detector-private
HklDLength, macro in hkl-unit-private
HklDPlaneAngle, macro in hkl-unit-private
dup, variable in hkl-parameter-private

E

E4ch, macro in hkl2
E4cv, macro in hkl2
E6c, macro in hkl2
Engine, struct in hkl2
HklEngine, struct in hkl-pseudoaxis-private
HklEngineAxisNamesGet, enum in hkl
HklEngineCapabilities, enum in hkl
HklEngineDependencies, enum in hkl
HklEngineError, enum in hkl-pseudoaxis-private
EngineHkl, macro in hkl2
HklEngineHkl, struct in hkl-pseudoaxis-common-hkl-private
HklEngineInfo, struct in hkl-pseudoaxis-private
HklEngineList, struct in hkl-pseudoaxis-private
HklEngineListError, enum in hkl-pseudoaxis-private
HklEngineOperations, struct in hkl-pseudoaxis-private
HklEngineTth2, struct in hkl-pseudoaxis-common-tth-private
engine_e, enum in hkl2
HKL_ENGINE_ERROR, macro in hkl-pseudoaxis-private
hkl_engine_eulerians_new, function in hkl-pseudoaxis-common-eulerians-private
Engine_fprintf, function in hkl2
Engine_header, function in hkl2
hkl_engine_hkl_new, function in hkl-pseudoaxis-common-hkl-private
HKL_ENGINE_INFO, macro in hkl-pseudoaxis-private
HKL_ENGINE_LIST_ERROR, macro in hkl-pseudoaxis-private
HKL_ENGINE_OPERATIONS_DEFAULTS, macro in hkl-pseudoaxis-private
Engine_save_as_dat, function in hkl2
Engine_solve, function in hkl2
hkl_engine_tth2_new, function in hkl-pseudoaxis-common-tth-private
HKL_EPSILON, macro in hkl
hkl_error, macro in hkl-macros-private
HKL_EULERIAN_KAPPA_SOLUTION, macro in hkl-macros-private

F

factor, variable in hkl-parameter-private
HklFactory, struct in hkl-factory-private
HklFactoryEngineListFunction, user_function in hkl-factory-private
HklFactoryGeometryFunction, user_function in hkl-factory-private
fclose_noerr, function in noerr
fn, user_function in coroutine
fprintf, function in hkl-parameter-private
free_noerr, function in noerr
HklFunction, struct in hkl-pseudoaxis-auto-private

G

generator_, struct in generator
generator_argfield_, macro in generator
generator_argstruct_, macro in generator
generator_args_pack_, macro in generator
generator_args_unpack_, macro in generator
generator_arg_pack_, macro in generator
generator_arg_unpack_, macro in generator
generator_declare, function in hkl2
generator_def, macro in generator
generator_def_, macro in generator
generator_def_static, macro in generator
generator_free, macro in generator
generator_free_, function in generator
generator_next, macro in generator
generator_next_val, macro in generator
generator_parms_, macro in generator
generator_parms_inner_, macro in generator
generator_parms_outer_, macro in generator
generator_parm_, macro in generator
generator_state_, function in generator
generator_t, macro in generator
generator_yield, macro in generator
Geometry, struct in hkl2
HklGeometry, struct in hkl-geometry-private
HklGeometryError, enum in hkl-geometry-private
HklGeometryList, struct in hkl-geometry-private
HklGeometryListItem, struct in hkl-geometry-private
HklGeometryListMultiplyFunction, user_function in hkl-geometry-private
HklGeometryOperations, struct in hkl-geometry-private
hkl_geometry_add_holder, function in hkl-geometry-private
hkl_geometry_closest_from_geometry_with_range, function in hkl-geometry-private
hkl_geometry_detector_holder_get, function in hkl-geometry-private
hkl_geometry_distance, function in hkl-geometry-private
hkl_geometry_distance_orthodromic, function in hkl-geometry-private
geometry_e, enum in hkl2
HKL_GEOMETRY_ERROR, macro in hkl-geometry-private
hkl_geometry_get_axis_by_name, function in hkl-geometry-private
hkl_geometry_get_axis_idx_by_name, function in hkl-geometry-private
hkl_geometry_init_geometry, function in hkl-geometry-private
hkl_geometry_is_valid, function in hkl-geometry-private
hkl_geometry_is_valid_range, function in hkl-geometry-private
hkl_geometry_kf_get, function in hkl-geometry-private
hkl_geometry_ki_get, function in hkl-geometry-private
hkl_geometry_list_add, function in hkl-geometry-private
HKL_GEOMETRY_LIST_FOREACH, macro in hkl
hkl_geometry_list_fprintf, function in hkl-geometry-private
hkl_geometry_list_item_free, function in hkl-geometry-private
hkl_geometry_list_item_new, function in hkl-geometry-private
hkl_geometry_list_item_new_copy, function in hkl-geometry-private
hkl_geometry_list_multiply, function in hkl-geometry-private
hkl_geometry_list_multiply_from_range, function in hkl-geometry-private
hkl_geometry_list_new, function in hkl-geometry-private
hkl_geometry_list_new_copy, function in hkl-geometry-private
hkl_geometry_list_remove_invalid, function in hkl-geometry-private
hkl_geometry_list_reset, function in hkl-geometry-private
hkl_geometry_list_sort, function in hkl-geometry-private
hkl_geometry_new, function in hkl-geometry-private
HKL_GEOMETRY_OPERATIONS_DEFAULTS, macro in hkl-geometry-private
hkl_geometry_operations_defaults, variable in hkl-geometry-private
hkl_geometry_sample_holder_get, function in hkl-geometry-private
hkl_geometry_update, function in hkl-geometry-private
getModeName, function in hkl2
G_GNUC_PRINTF, macro in hkl-macros-private
g_quark_from_static_string, function in hkl-sample-private

H

HAVE_32BIT_OFF_T, macro in ccan_config
HAVE_ALIGNOF, macro in ccan_config
HAVE_ASPRINTF, macro in ccan_config
HAVE_ATTRIBUTE_COLD, macro in ccan_config
HAVE_ATTRIBUTE_CONST, macro in ccan_config
HAVE_ATTRIBUTE_MAY_ALIAS, macro in ccan_config
HAVE_ATTRIBUTE_NORETURN, macro in ccan_config
HAVE_ATTRIBUTE_PRINTF, macro in ccan_config
HAVE_ATTRIBUTE_PURE, macro in ccan_config
HAVE_ATTRIBUTE_UNUSED, macro in ccan_config
HAVE_ATTRIBUTE_USED, macro in ccan_config
HAVE_BACKTRACE, macro in ccan_config
HAVE_BIG_ENDIAN, macro in ccan_config
HAVE_BSWAP_64, macro in ccan_config
HAVE_BUILTIN_CHOOSE_EXPR, macro in ccan_config
HAVE_BUILTIN_CLZ, macro in ccan_config
HAVE_BUILTIN_CLZL, macro in ccan_config
HAVE_BUILTIN_CLZLL, macro in ccan_config
HAVE_BUILTIN_CONSTANT_P, macro in ccan_config
HAVE_BUILTIN_CTZ, macro in ccan_config
HAVE_BUILTIN_CTZL, macro in ccan_config
HAVE_BUILTIN_CTZLL, macro in ccan_config
HAVE_BUILTIN_EXPECT, macro in ccan_config
HAVE_BUILTIN_FFS, macro in ccan_config
HAVE_BUILTIN_FFSL, macro in ccan_config
HAVE_BUILTIN_FFSLL, macro in ccan_config
HAVE_BUILTIN_POPCOUNTL, macro in ccan_config
HAVE_BUILTIN_TYPES_COMPATIBLE_P, macro in ccan_config
HAVE_BYTESWAP_H, macro in ccan_config
HAVE_CCAN, macro in ccan_config
HAVE_CLOCK_GETTIME, macro in ccan_config
HAVE_CLOCK_GETTIME_IN_LIBRT, macro in ccan_config
HAVE_COMPOUND_LITERALS, macro in ccan_config
HAVE_ERR_H, macro in ccan_config
HAVE_FCHDIR, macro in ccan_config
HAVE_FILE_OFFSET_BITS, macro in ccan_config
HAVE_FLEXIBLE_ARRAY_MEMBER, macro in ccan_config
HAVE_FOR_LOOP_DECLARATION, macro in ccan_config
HAVE_GETPAGESIZE, macro in ccan_config
HAVE_ICCARM_INTRINSICS, macro in ccan_config
HAVE_ISBLANK, macro in ccan_config
HAVE_LITTLE_ENDIAN, macro in ccan_config
HAVE_MEMMEM, macro in ccan_config
HAVE_MEMRCHR, macro in ccan_config
HAVE_MMAP, macro in ccan_config
HAVE_OPENMP, macro in ccan_config
HAVE_POINTER_SAFE_MAKECONTEXT, macro in ccan_config
HAVE_PROC_SELF_MAPS, macro in ccan_config
HAVE_QSORT_R_PRIVATE_LAST, macro in ccan_config
HAVE_SECTION_START_STOP, macro in ccan_config
HAVE_STACK_GROWS_UPWARDS, macro in ccan_config
HAVE_STATEMENT_EXPR, macro in ccan_config
HAVE_STRUCT_TIMESPEC, macro in ccan_config
HAVE_SYS_FILIO_H, macro in ccan_config
HAVE_SYS_TERMIOS_H, macro in ccan_config
HAVE_SYS_UNISTD_H, macro in ccan_config
HAVE_TYPEOF, macro in ccan_config
HAVE_UCONTEXT, macro in ccan_config
HAVE_UNALIGNED_ACCESS, macro in ccan_config
HAVE_UTIME, macro in ccan_config
HAVE_VALGRIND_MEMCHECK_H, macro in ccan_config
HAVE_WARN_UNUSED_RESULT, macro in ccan_config
Hexagonal, macro in hkl2
HklHolder, struct in hkl-geometry-private
HklHolderConfig, struct in hkl-geometry-private
hkl_holder_add_rotation, function in hkl-geometry-private
hkl_holder_add_rotation_with_origin, function in hkl-geometry-private
hkl_holder_add_translation, function in hkl-geometry-private
HKL_HOLDER_DETECTOR_IDX, macro in hkl-geometry-private
HKL_HOLDER_SAMPLE_IDX, macro in hkl-geometry-private
hkl_holder_transformation_apply, function in hkl-geometry-private

I

i, variable in hkl-pseudoaxis-private
HklInterval, struct in hkl-interval-private
hkl_interval_acos, function in hkl-interval-private
hkl_interval_angle_restrict_symm, function in hkl-interval-private
hkl_interval_asin, function in hkl-interval-private
hkl_interval_atan, function in hkl-interval-private
hkl_interval_cmp, function in hkl-interval-private
hkl_interval_contain_zero, function in hkl-interval-private
hkl_interval_cos, function in hkl-interval-private
hkl_interval_divides_double, function in hkl-interval-private
hkl_interval_dup, function in hkl-interval-private
hkl_interval_free, function in hkl-interval-private
hkl_interval_length, function in hkl-interval-private
hkl_interval_minus_double, function in hkl-interval-private
hkl_interval_minus_interval, function in hkl-interval-private
hkl_interval_plus_double, function in hkl-interval-private
hkl_interval_plus_interval, function in hkl-interval-private
hkl_interval_sin, function in hkl-interval-private
hkl_interval_tan, function in hkl-interval-private
hkl_interval_times_double, function in hkl-interval-private
hkl_interval_times_interval, function in hkl-interval-private
isalnum, function in str
isalpha, function in str
isascii, function in str
isblank, function in str
iscntrl, function in str
isdigit, function in str
isgraph, function in str
islower, function in str
isprint, function in str
ispunct, function in str
isspace, function in str
isupper, function in str
isxdigit, function in str
IS_COMPILE_CONSTANT, macro in compiler
hkl_is_reachable, function in hkl-pseudoaxis-common-hkl-private

K

K4ch, macro in hkl2
K4cv, macro in hkl2
K6c, macro in hkl2
kappa_2_kappap, function in hkl-pseudoaxis-common-eulerians-private
kf, variable in hkl-geometry-private

L

HklLattice, struct in hkl-lattice-private
Lattice, struct in hkl2
HklLatticeError, enum in hkl-lattice-private
lattice_e, enum in hkl2
HKL_LATTICE_ERROR, macro in hkl-lattice-private
hkl_lattice_fprintf, function in hkl-lattice-private
hkl_lattice_lattice_set, function in hkl-lattice-private
hkl_lattice_randomize, function in hkl-lattice-private
list_add, macro in list
list_add_after, macro in list
list_add_before, macro in list
list_add_off, macro in list
list_add_tail, macro in list
list_append_list, macro in list
list_check, function in list
list_check_node, function in list
list_debug, macro in list
list_debug_node, macro in list
list_del, macro in list
list_del_from_off, macro in list
list_del_init, macro in list
list_del_off, macro in list
list_empty, macro in list
list_empty_nodebug, macro in list
list_entry, macro in list
list_entry_off, macro in list
list_for_each, macro in list
list_for_each_off, macro in list
list_for_each_off_dir_, macro in list
list_for_each_rev, macro in list
list_for_each_rev_off, macro in list
list_for_each_rev_safe, macro in list
list_for_each_rev_safe_off, macro in list
list_for_each_safe, macro in list
list_for_each_safe_off, macro in list
list_for_each_safe_off_dir_, macro in list
LIST_HEAD, macro in list
list_head, struct in list
LIST_HEAD_INIT, macro in list
list_head_off, macro in list
LIST_LOC, macro in list
list_next, macro in list
list_node, struct in list
list_off_, macro in list
list_off_var_, macro in list
list_pop, macro in list
list_prepend_list, macro in list
list_prev, macro in list
list_swap, macro in list
list_tail, macro in list
list_tail_off, macro in list
list_top, macro in list
list_typeof, macro in list

M

HKL_MALLOC, macro in hkl-macros-private
HklMatrix, struct in hkl-matrix-private
hkl_matrix_det, function in hkl-matrix-private
hkl_matrix_dup, function in hkl-matrix-private
hkl_matrix_fprintf, function in hkl-matrix-private
hkl_matrix_init_from_euler, function in hkl-matrix-private
hkl_matrix_init_from_two_vector, function in hkl-matrix-private
hkl_matrix_is_null, function in hkl-matrix-private
hkl_matrix_matrix_set, function in hkl-matrix-private
hkl_matrix_solve, function in hkl-matrix-private
hkl_matrix_times_vector, function in hkl-matrix-private
hkl_matrix_to_euler, function in hkl-matrix-private
hkl_matrix_transpose, function in hkl-matrix-private
HklMode, struct in hkl-pseudoaxis-private
Mode, struct in hkl2
HklModeAutoInfo, struct in hkl-pseudoaxis-auto-private
HklModeAutoWithInit, struct in hkl-pseudoaxis-auto-private
HklModeError, enum in hkl-pseudoaxis-auto-private
ModeHklBissectorVertical, macro in hkl2
ModeHklE4CHConstantPhi, macro in hkl2
HklModeInfo, struct in hkl-pseudoaxis-private
HklModeOperations, struct in hkl-pseudoaxis-private
HKL_MODE_AUTO_INFO, macro in hkl-pseudoaxis-auto-private
HKL_MODE_AUTO_INFO_WITH_PARAMS, macro in hkl-pseudoaxis-auto-private
hkl_mode_auto_init, function in hkl-pseudoaxis-auto-private
hkl_mode_auto_new, function in hkl-pseudoaxis-auto-private
hkl_mode_auto_set_real, function in hkl-pseudoaxis-auto-private
HKL_MODE_AUTO_WITH_INIT_ERROR, macro in hkl-pseudoaxis-auto-private
hkl_mode_auto_with_init_new, function in hkl-pseudoaxis-auto-private
mode_e, enum in hkl2
hkl_mode_get_hkl_real, function in hkl-pseudoaxis-common-hkl-private
HKL_MODE_INFO, macro in hkl-pseudoaxis-private
HKL_MODE_INFO_emergence_DEFAULTS, macro in hkl-pseudoaxis-common-readonly-private
HKL_MODE_INFO_incidence_DEFAULTS, macro in hkl-pseudoaxis-common-readonly-private
HKL_MODE_INFO_RO, macro in hkl-pseudoaxis-private
HKL_MODE_INFO_RO_WITH_PARAMS, macro in hkl-pseudoaxis-private
HKL_MODE_INFO_WITH_PARAMS, macro in hkl-pseudoaxis-private
hkl_mode_initialized_set_psi_constant_vertical_real, function in hkl-pseudoaxis-common-hkl-private
HKL_MODE_OPERATIONS_AUTO_DEFAULTS, macro in hkl-pseudoaxis-auto-private
HKL_MODE_OPERATIONS_AUTO_WITH_INIT_DEFAULTS, macro in hkl-pseudoaxis-auto-private
HKL_MODE_OPERATIONS_DEFAULTS, macro in hkl-pseudoaxis-private
HKL_MODE_OPERATIONS_HKL_DEFAULTS, macro in hkl-pseudoaxis-common-hkl-private
HKL_MODE_OPERATIONS_HKL_FULL_DEFAULTS, macro in hkl-pseudoaxis-common-hkl-private
hkl_mode_set_hkl_real, function in hkl-pseudoaxis-common-hkl-private

N

NEEDED, macro in compiler
newEngines, function in hkl2
newGeometry, function in hkl2
newLattice, function in hkl2
newSample, function in hkl2
NORETURN, macro in hkl-macros-private

P

P99_PROTECT, macro in hkl-pseudoaxis-common-readonly-private
HklParameter, struct in hkl-parameter-private
HklParameterError, enum in hkl-parameter-private
HklParameterOperations, struct in hkl-parameter-private
HKL_PARAMETER_DEFAULTS, macro in hkl-parameter-private
HKL_PARAMETER_DEFAULTS_ANGLE, macro in hkl-parameter-private
HKL_PARAMETER_EMERGENCE_AZIMUTH_DEFAULTS, macro in hkl-pseudoaxis-common-hkl-private
HKL_PARAMETER_EMERGENCE_DEFAULTS, macro in hkl-pseudoaxis-common-hkl-private
HKL_PARAMETER_ERROR, macro in hkl-parameter-private
hkl_parameter_fprintf, function in hkl-parameter-private
hkl_parameter_init_copy, function in hkl-parameter-private
hkl_parameter_is_valid, function in hkl-parameter-private
hkl_parameter_is_valid_range, function in hkl-parameter-private
hkl_parameter_new, function in hkl-parameter-private
hkl_parameter_new_rotation, function in hkl-axis-private
hkl_parameter_new_rotation_with_origin, function in hkl-axis-private
hkl_parameter_new_translation, function in hkl-axis-private
HKL_PARAMETER_OPERATIONS_DEFAULTS, macro in hkl-parameter-private
hkl_parameter_transformation_apply, function in hkl-parameter-private
hkl_parameter_transformation_cmp, function in hkl-parameter-private
hkl_parameter_value_get_closest, function in hkl-parameter-private
hkl_parameter_value_set_smallest_in_range, function in hkl-parameter-private
hkl_printbt, function in hkl-macros-private
PRINTF_FMT, macro in compiler
PSI_CONSTANT_PARAMETERS, macro in hkl-pseudoaxis-common-hkl-private
ptrint_t, typedef in ptrint
ptr_valid, function in ptr_valid
PTR_VALID_ALIGNOF, macro in ptr_valid
ptr_valid_batch, struct in ptr_valid
ptr_valid_batch_end, function in ptr_valid
ptr_valid_batch_read, macro in ptr_valid
ptr_valid_batch_start, function in ptr_valid
ptr_valid_batch_string, function in ptr_valid
ptr_valid_batch_write, macro in ptr_valid
ptr_valid_map, struct in ptr_valid
ptr_valid_read, macro in ptr_valid
ptr_valid_string, function in ptr_valid
ptr_valid_write, macro in ptr_valid
PURE_FUNCTION, macro in compiler

Q

HklQuaternion, struct in hkl
hkl_quaternion_cmp, function in hkl-quaternion-private
hkl_quaternion_conjugate, function in hkl-quaternion-private
hkl_quaternion_dup, function in hkl-quaternion-private
hkl_quaternion_fprintf, function in hkl-quaternion-private
hkl_quaternion_free, function in hkl-quaternion-private
hkl_quaternion_init, function in hkl-quaternion-private
hkl_quaternion_init_from_angle_and_axe, function in hkl-quaternion-private
hkl_quaternion_init_from_vector, function in hkl-quaternion-private
hkl_quaternion_minus_quaternion, function in hkl-quaternion-private
hkl_quaternion_norm2, function in hkl-quaternion-private
hkl_quaternion_times_quaternion, function in hkl-quaternion-private
hkl_quaternion_to_angle_and_axe, function in hkl-quaternion-private
hkl_quaternion_to_matrix, function in hkl-quaternion-private

R

HKL_RADTODEG, macro in hkl
REGISTER_DIFFRACTOMETER, macro in hkl-factory-private
REGISTER_READONLY_EMERGENCE, macro in hkl-pseudoaxis-common-readonly-private
REGISTER_READONLY_INCIDENCE, macro in hkl-pseudoaxis-common-readonly-private
res, variable in hkl-unit-private
HklRotationWithOrigin, struct in hkl-axis-private
RUBh_minus_Q, function in hkl-pseudoaxis-common-hkl-private

S

HklSample, struct in hkl-sample-private
Sample, struct in hkl2
HklSampleError, enum in hkl-sample-private
HklSampleReflection, struct in hkl-sample-private
HklSampleReflectionError, enum in hkl-sample-private
HKL_SAMPLE_ERROR, macro in hkl-sample-private
hkl_sample_fprintf, function in hkl-sample-private
HKL_SAMPLE_REFLECTIONS_FOREACH, macro in hkl
HKL_SAMPLE_REFLECTION_ERROR, macro in hkl-sample-private
hkl_sample_reflection_free, function in hkl-sample-private
hkl_sample_reflection_new_copy, function in hkl-sample-private
self, variable in hkl-pseudoaxis-private
SoleilSiriusKappa, macro in hkl2
SoleilSixsMed2_3, macro in hkl2
HklSource, struct in hkl-source-private
hkl_source_cmp, function in hkl-source-private
hkl_source_compute_ki, function in hkl-source-private
HKL_SOURCE_DEFAULT_WAVE_LENGTH, macro in hkl-source-private
hkl_source_dup, function in hkl-source-private
hkl_source_fprintf, function in hkl-source-private
hkl_source_free, function in hkl-source-private
hkl_source_get_wavelength, function in hkl-source-private
hkl_source_init, function in hkl-source-private
strchr, macro in str
strcount, function in str
streq, macro in str
stringify, macro in str
stringify_1, macro in str
strrchr, macro in str
strstarts, macro in str
strstr, macro in str
str_check_arg_, macro in str
str_isalnum, function in str_debug
str_isalpha, function in str_debug
str_isascii, function in str_debug
str_isblank, function in str_debug
str_iscntrl, function in str_debug
str_isdigit, function in str_debug
str_isgraph, function in str_debug
str_islower, function in str_debug
str_isprint, function in str_debug
str_ispunct, function in str_debug
str_isspace, function in str_debug
str_isupper, function in str_debug
str_isxdigit, function in str_debug
STR_MAX_CHARS, macro in str
STR_MAX_CHARS_TCHECK_, macro in str
str_strchr, function in str_debug
str_strrchr, function in str_debug
str_strstr, function in str_debug
SURFACE_PARAMETERS, macro in hkl-pseudoaxis-common-readonly-private

T

HKL_TAU, macro in hkl
Tetragonal, macro in hkl2
HKL_TINY, macro in hkl
Trajectory, struct in hkl2
TrajectoryHklFromTo, macro in hkl2
HklTrajectoryResult, struct in hkl-trajectory-private
HklTrajectoryStats, struct in hkl-trajectory-private
hkl_trajectory_add_geometry, function in hkl-trajectory-private
trajectory_e, enum in hkl2
Trajectory_len, function in hkl2
hkl_trajectory_result_free, function in hkl-trajectory-private
hkl_trajectory_result_new, function in hkl-trajectory-private
Trajectory_solve, function in hkl2
hkl_trajectory_stats_add, function in hkl-trajectory-private
hkl_trajectory_stats_fprintf, function in hkl-trajectory-private
hkl_trajectory_stats_free, function in hkl-trajectory-private
hkl_trajectory_stats_new, function in hkl-trajectory-private
HklTranslation, struct in hkl-axis-private
typesafe_cb, macro in typesafe_cb
typesafe_cb_cast, macro in typesafe_cb
typesafe_cb_cast3, macro in typesafe_cb
typesafe_cb_postargs, macro in typesafe_cb
typesafe_cb_preargs, macro in typesafe_cb
HKL_TYPE_DETECTOR_TYPE, macro in hkl-type-builtins
HKL_TYPE_ENGINE_AXIS_NAMES_GET, macro in hkl-type-builtins
HKL_TYPE_ENGINE_CAPABILITIES, macro in hkl-type-builtins
HKL_TYPE_ENGINE_DEPENDENCIES, macro in hkl-type-builtins
TYPE_HKL_DETECTOR, macro in hkl-types
TYPE_HKL_ENGINE, macro in hkl-types
TYPE_HKL_ENGINE_LIST, macro in hkl-types
TYPE_HKL_FACTORY, macro in hkl-types
TYPE_HKL_GEOMETRY, macro in hkl-types
TYPE_HKL_GEOMETRY_LIST, macro in hkl-types
TYPE_HKL_GEOMETRY_LIST_ITEM, macro in hkl-types
TYPE_HKL_LATTICE, macro in hkl-types
TYPE_HKL_MATRIX, macro in hkl-types
TYPE_HKL_PARAMETER, macro in hkl-types
TYPE_HKL_QUATERNION, macro in hkl-types
TYPE_HKL_SAMPLE, macro in hkl-types
TYPE_HKL_SAMPLE_REFLECTION, macro in hkl-types
TYPE_HKL_UNIT, macro in hkl-types
TYPE_HKL_VECTOR, macro in hkl-types
HKL_TYPE_UNIT_ENUM, macro in hkl-type-builtins

U

HklUnit, struct in hkl-unit-private
HklUnitDimension, struct in hkl-unit-private
HklUnitEnum, enum in hkl
hkl_unit_compatible, function in hkl-unit-private
hkl_unit_dup, function in hkl-unit-private
hkl_unit_free, function in hkl-unit-private
unlink_noerr, function in noerr
UNNEEDED, macro in compiler
UNUSED, macro in compiler

V

HklVector, struct in hkl
hkl_vector_add_vector, function in hkl-vector-private
hkl_vector_angle, function in hkl-vector-private
hkl_vector_cmp, function in hkl-vector-private
hkl_vector_div_double, function in hkl-vector-private
hkl_vector_dup, function in hkl-vector-private
hkl_vector_fprintf, function in hkl-vector-private
hkl_vector_free, function in hkl-vector-private
hkl_vector_is_colinear, function in hkl-vector-private
hkl_vector_is_null, function in hkl-vector-private
hkl_vector_is_opposite, function in hkl-vector-private
hkl_vector_minus_vector, function in hkl-vector-private
hkl_vector_norm2, function in hkl-vector-private
hkl_vector_normalize, function in hkl-vector-private
hkl_vector_oriented_angle, function in hkl-vector-private
hkl_vector_oriented_angle_points, function in hkl-vector-private
hkl_vector_project_on_plan, function in hkl-vector-private
hkl_vector_project_on_plan_with_point, function in hkl-vector-private
hkl_vector_randomize, function in hkl-vector-private
hkl_vector_randomize_vector, function in hkl-vector-private
hkl_vector_randomize_vector_vector, function in hkl-vector-private
hkl_vector_rotated_around_line, function in hkl-vector-private
hkl_vector_rotated_around_vector, function in hkl-vector-private
hkl_vector_rotated_quaternion, function in hkl-vector-private
hkl_vector_scalar_product, function in hkl-vector-private
hkl_vector_sum, function in hkl-vector-private
hkl_vector_times_double, function in hkl-vector-private
hkl_vector_times_matrix, function in hkl-vector-private
hkl_vector_times_vector, function in hkl-vector-private
hkl_vector_vectorial_product, function in hkl-vector-private
HKL_VECTOR_X, macro in hkl
HKL_VECTOR_Y, macro in hkl
HKL_VECTOR_Z, macro in hkl

W

HKL_WARN_UNUSED_RESULT, macro in hkl
WARN_UNUSED_RESULT, macro in compiler

Z

Zaxis, macro in hkl2
hkl-5.0.0.2449/Documentation/api/hkl-docs.sgml0000644000175000017500000000560712710332472021076 0ustar00piccapicca00000000000000 ]> hkl Reference Manual for hkl [VERSION]. The latest version of this documentation can be found on-line at http://[SERVER]/hkl/. [Insert title here] Object Hierarchy API Index Index of deprecated API hkl-5.0.0.2449/Documentation/hkl.html0000644000175000017500000063716513237020534017411 0ustar00piccapicca00000000000000 Welcome to hkl's 5.0.0.2449 documentation!

Welcome to hkl's 5.0.0.2449 documentation!

Table of Contents

1 Introduction

The purpose of the library is to factorize single crystal diffraction angles computation for different kind of diffractometer geometries. It is used at the SOLEIL, Desy and Alba synchrotron with the Tango control system to pilot diffractometers.

1.1 Features

  • mode computation (aka PseudoAxis)
  • item for different diffractometer geometries.
  • UB matrix computation.
    • busing & Levy with 2 reflections
    • simplex computation with more than 2 reflections using the GSL library.
    • Eulerians angles to pre-orientate your sample.
  • Crystal lattice refinement
    • with more than 2 reflections you can select which parameter must be fitted.
  • Pseudoaxes
    • psi, eulerians, q, …

1.2 Conventions

In all this document the next convention will be used to describe the diffractometers geometries.

  • right handed convention for all the angles.
  • direct space orthogonal base.
  • description of the diffractometer geometries is done with all axes values set to zero.

1.3 Diffraction

1.3.1 the crystal

A periodic crystal is the association of a pattern and a lattice. The pattern is located at each points of the lattice node. Positions of those nodes are given by:

\[ R_{uvw}=u\cdot\vec{a}+v\cdot\vec{b}+w\cdot\vec{c} \]

\(\vec{a}\), \(\vec{b}\), \(\vec{c}\) are the former vector of a base of the space. u, v, w are integers. The pattern contain atoms associated to each lattice node. the purpose of diffraction is to study the interaction of this crystal (pattern+lattice) with X-rays.

crystal.png

Figure 1: Crystal direct lattice.

this lattice is defined by \(\vec{a}\), \(\vec{b}\), \(\vec{c}\) vectors, and the angles \(\alpha\), \(\beta\), \(\gamma\). In general cases this lattice is not orthonormal.

Nevertheless to compute the interaction of this real space lattice and the X-Rays, it is convenient to define another lattice called reciprocal lattice defined like this:

\begin{eqnarray*} \vec{a}^{\star} & = & \tau\frac{\vec{b}\wedge\vec{c}}{\vec{a}\cdot(\vec{b}\wedge\vec{c})}\\ \vec{b}^{\star} & = & \tau\frac{\vec{c}\wedge\vec{a}}{\vec{b}\cdot(\vec{c}\wedge\vec{a})}\\ \vec{c}^{\star} & = & \tau\frac{\vec{a}\wedge\vec{b}}{\vec{c}\cdot(\vec{a}\wedge\vec{b})} \end{eqnarray*}

\(\tau=2\pi\) or \(\tau=1\) depending on the conventions.

It is then possible to define theses orthogonal properties:

\begin{eqnarray*} \vec{a}^{\star}\cdot\vec{a}=\tau & \vec{b}^{\star}\cdot\vec{a}=0 & \vec{c}^{\star}\cdot\vec{a}=0\\ \vec{a}^{\star}\cdot\vec{b}=0 & \vec{b}^{\star}\cdot\vec{b}=\tau & \vec{c}^{\star}\cdot\vec{b}=0\\ \vec{a}^{\star}\cdot\vec{c}=0 & \vec{b}^{\star}\cdot\vec{c}=0 & \vec{c}^{\star}\cdot\vec{c}=\tau \end{eqnarray*}

This reciprocal space lattice allow to write in a simpler form the interaction between the crystal and the X-Rays. We often only know about \(\vec{a}\), \(\vec{b}\), \(\vec{c}\) vectors and the angles \(\alpha\), \(\beta\), \(\gamma\). Using the previous equations reciprocal, we can compute the reciprocal lattice this way:

\begin{eqnarray*} a^{\star} & = & \frac{\sin\alpha}{aD}\\ b^{\star} & = & \frac{\sin\beta}{bD}\\ c^{\star} & = & \frac{\sin\gamma}{cD} \end{eqnarray*}

where

\[ D=\sqrt{1-\cos^{2}\alpha-\cos^{2}\beta-\cos^{2}\gamma+2\cos\alpha\cos\beta\cos\gamma} \]

To compute the angles between the reciprocal space vectors, it is once again possible to use the previous equations reciprocal to obtain the sines and cosines of the angles \(\alpha^\star\), \(\beta^\star\) and \(\gamma^\star\):

\begin{eqnarray*} \cos\alpha^{\star}=\frac{\cos\beta\cos\gamma-\cos\alpha}{\sin\beta\sin\gamma} & \, & \sin\alpha^{\star}=\frac{D}{\sin\beta\sin\gamma} \\ \cos\beta^{\star}=\frac{\cos\gamma\cos\alpha-\cos\beta}{\sin\gamma\sin\alpha} & \, & \sin\beta^{\star}=\frac{D}{\sin\gamma\sin\alpha}\\ \cos\gamma^{\star}=\frac{\cos\alpha\cos\beta-\cos\gamma}{\sin\alpha\sin\beta} & \, & \sin\gamma^{\star}=\frac{D}{\sin\alpha\sin\beta} \end{eqnarray*}

the volume of the lattice can be compute this way:

\[ V = abcD \]

or

\[ V = \vec{a} \dot (\vec{b} \wedge \vec{c}) = \vec{b} \dot (\vec{c} \wedge \vec{a}) = \vec{c} \dot (\vec{a} \wedge \vec{b}) \]

1.3.2 Diffraction

Let the incoming X-rays beam whose wave vector is \(\vec{k_{i}}\), \(|k_{i}|=\tau/\lambda\) where \(\lambda\) is the wavelength of the signal. The \(\vec{k_{d}}\) vector wavelength of the diffracted beam. There is diffusion if the diffusion vector \(\vec{q}\) can be expressed as follows:

\[ \vec{q}=\vec{k_{d}}-\vec{k_{i}}=h.\vec{a}^{*}+k.\vec{b}^{*}+l.\vec{c}^{*} \]

where \((h,k,l)\in\mathbb{N}^{3}\) and \((h,k,l)\neq(0,0,0)\). Theses indices \((h,k,l)\) are named Miller indices.

Another way of looking at things has been given by Bragg and that famous relationship:

\[ n\lambda=2d\sin\theta \]

where \(d\) is the inter-plan distance and \(n \in \mathbb{N}\).

The diffusion occurs for an unique \(\theta\) angle. Then we got \(\vec{q}\) perpendicular to the diffraction plan.

The Ewald construction allow to represent this diffraction in the reciprocal space.

1.3.3 Quaternions

  1. Properties

    The quaternions will be used to describe the diffractometers geometries. Theses quaternions can represent 3D rotations. There is different way to describe then like complex numbers.

    \[ q=a+bi+cj+dk \]

    or

    \[ q=[a,\vec{v}] \]

    To compute the quaternion's norm, we can proceed like for complex numbers

    \[ \|q\|=\sqrt{a²+b²+c²+d²} \]

    Its conjugate is :

    \[ q^{*}=[a,-\vec{u}]=a-bi-cj-dk \]

  2. Operations

    The difference with the complex number algebra is about non-commutativity.

    \[ qp \neq pq \]

    \[

    \begin{bmatrix} ~ & 1 & i & j & k \cr 1 & 1 & i & j & k \cr i & i & -1 & k & -j \cr j & j & -k & -1 & i \cr k & k & j & -i & -1 \end{bmatrix}

    \]

    The product of two quaternions can be express by the Grassman product Grassman product. So for two quaternions \(p\) and \(q\):

    \begin{align*} q &= a+\vec{u} = a+bi+cj+dk\\ p &= t+\vec{v} = t+xi+yj+zk \end{align*}

    we got

    \[ pq = at - \vec{u} \cdot \vec{v} + a \vec{v} + t \vec{u} + \vec{v} \times \vec{u} \]

    or equivalent

    \[ pq = (at - bx - cy - dz) + (bt + ax + cz - dy) i + (ct + ay + dx - bz) j + (dt + az + by - cx) k \]

  3. 3D rotations

    L'ensemble des quaternions unitaires (leur norme est égale à 1) est le groupe qui représente les rotations dans l'espace 3D. Si on a un vecteur unitaire \(\vec{u}\) et un angle de rotation \(\theta\) alors le quaternion \([\cos\frac{\theta}{2},\sin\frac{\theta}{2}\vec{u]}\) représente la rotation de \(\theta\) autour de l'axe \(\vec{u}\) dans le sens trigonométrique. Nous allons donc utiliser ces quaternions unitaires pour représenter les mouvements du diffractomètre.

    Alors que dans le plan 2D une simple multiplication entre un nombre complex et le nombre \(e^{i\theta}\) permet de calculer simplement la rotation d'angle \(\theta\) autour de l'origine, dans l'espace 3D l'expression équivalente est:

    \[ z'=qzq^{-1} \]

    où \(q\) est le quaternion de norme 1 représentant la rotation dans l'espace et \(z\) le quaternion représentant le vecteur qui subit la rotation (sa partie réelle est nulle).

    Dans le cas des quaternions de norme 1, il est très facile de calculer \(q^{-1}\). En effet l'inverse d'une rotation d'angle \(\theta\) est la rotation d'angle \(-\theta\). On a donc directement:

    \[ q^{-1}=[\cos\frac{-\theta}{2},\sin\frac{-\theta}{2}\vec{u}]=[\cos\frac{\theta}{2},-\sin\frac{\theta}{2}\vec{u}]=q^{*} \]

    Le passage aux matrices de rotation se fait par la formule suivante \(q\rightarrow M\).

    \[

    \begin{bmatrix} a{{}^2}+b{{}^2}-c{{}^2}-d{{}^2} & 2bc-2ad & 2ac+2bd\\ 2ad+2bc & a{{}^2}-b{{}^2}+c{{}^2}-d{{}^2} & 2cd-2ab\\ 2bd-2ac & 2ab+2cd & a{{}^2}-b{{}^2}-c{{}^2}+d{{}^2} \end{bmatrix}

    \]

    La composition de rotation se fait simplement en multipliant les quaternions entre eux. Si l'on à \(q\)

1.4 Modes de fonctionnement

1.5 Equations fondamentales

Le problème que nous devons résoudre est de calculer pour une famille de plan \((h,k,l)\) donné, les angles de rotation du diffractomètre qui permettent de le mettre en condition de diffraction. Il faut donc exprimer les relations mathématiques qui lient les différents angles entre eux lorsque la condition de Bragg est vérifiée. L'équation fondamentale est la suivante:

\begin{align*} \left(\prod_{i}S_{i}\right)\cdot U\cdot B\cdot\vec{h} & =\left(\prod_{j}D_{j}-I\right)\cdot\vec{k_{i}}\\ R\cdot U\cdot B\cdot\vec{h} & =\vec{Q} \end{align*}

ou \(\vec{h}\) est le vecteur \((h,k,l)\), \(\vec{k_{i}}\) est le vecteur incident, \(S_{i}\) les matrices de rotations des mouvements liés à l'échantillon, \(D_{j}\) les matrices de rotation des mouvements liés au détecteur, \(I\) la matrice identité, \(U\) la matrice d'orientation du cristal par rapport au repère de l'axe sur lequel ce dernier est monté et \(B\) la matrice de passage d'un repère non orthonormé ( celui du crystal réciproque) à un repère orthonormé.

1.5.1 Calcule de B

Si l'on connaît les paramètres cristallins du cristal étudié, il est très simple de calculer \(B\):

\[ B=

\begin{bmatrix} a^{\star} & b^{\star}\cos\gamma^{\star} & c^{\star}\cos\beta^{\star}\\ 0 & b^{\star}\sin\gamma^{\star} & -c^{\star}\sin\beta^{\star}\cos\alpha\\ 0 & 0 & 1/c \end{bmatrix}

\]

1.5.2 Calcule de U

Il existe plusieurs façons de calculer \(U\). Busing et Levy en a proposé plusieurs. Nous allons présenter celle qui nécessite la mesure de seulement deux réflections ainsi que la connaissance des paramètres cristallins. Cette façon de calculer la matrice d'orientation \(U\), peut être généralisée à n'importe quel diffractomètre pour peu que la description des axes de rotation permette d'obtenir la matrice de rotation de la machine \(R\) et le vecteur de diffusion \(\vec{Q}\).

Il est également possible de calculer \(U\) sans la connaîssance des paramètres cristallins. il faut alors faire un affinement des paramètres. Cela revient à minimiser une fonction. Nous allons utiliser la méthode du simplex pour trouver ce minimum et donc ajuster l'ensemble des paramètres cristallins ainsi que la matrice d'orientation.

1.5.3 Algorithme de Busing Levy

L'idée est de se placer dans le repère de l'axe sur lequel est monté l'échantillon. On mesure deux réflections \((\vec{h}_{1},\vec{h}_{2})\) ainsi que leurs angles associés. Cela nous permet de calculer \(R\) et \(\vec{Q}\) pour chacune de ces reflections. nous avons alors ce système:

\begin{eqnarray*} U\cdot B\cdot\vec{h}_{1} & = & \tilde{R}_{1}\cdot\vec{Q}_{1}\\ U\cdot B\cdot\vec{h}_{2} & = & \tilde{R}_{2}\cdot\vec{Q}_{2} \end{eqnarray*}

De façon à calculer facilement \(U\), il est intéressant de définir deux trièdres orthonormé \(T_{\vec{h}}\) et \(T_{\vec{Q}}\) à partir des vecteurs \((B\vec{h}_{1},B\vec{h}_{2})\) et \((\tilde{R}_{1}\vec{Q}_{1},\tilde{R}_{2}\vec{Q}_{2})\). On a alors très simplement:

\[ U \cdot T_{\vec{h}} = T_{\vec{Q}} \]

Et donc

\[ U = T_{\vec{Q}} \cdot \tilde{T}_{\vec{h}} \]

1.5.4 Affinement par la méthode du simplex

Dans ce cas nous ne connaissons pas la matrice \(B\), il faut donc mesurer plus que deux réflections pour ajuster les 9 paramètres. Six paramètres pour le crystal et trois pour la matrice d'orientation \(U\). Les trois paramètres qui permennt de representer \(U\) sont en fait les angles d'euler. il faut donc être en mesure de passer d'une représentation eulérien à cette matrice :math::U et réciproquement.

\[ U = X \cdot Y \cdot Z \]

où \(X\) est la matrice rotation suivant l'axe Ox et le premier angle d'Euler, \(Y\) la matrice de rotation suivant l'axe Oy et le deuxième angle d'Euler et \(Z\) la matrice du troisième angle d'Euler pour l'axe Oz.

\(X\) \(Y\) \(Z\)
\(\begin{bmatrix} 1 & 0 & 0\\ 0 & A & -B\\ 0 & B & A \end{bmatrix}\) \(\begin{bmatrix}C & 0 & D\\0 & 1 & 0\\-D & 0 & C\end{bmatrix}\) \(\begin{bmatrix}E & -F & 0\\F & E & 0\\0 & 0 & 1\end{bmatrix}\)

et donc:

\[ U=

\begin{bmatrix} CE & -CF & D\\ BDE+AF & -BDF+AE & -BC\\ -ADE+BF & ADF+BE & AC \end{bmatrix}

\]

Il est donc facile de passer des angles d'Euler à la matrice d'orientation.

Il faut maintenant faire la transformation inverse de la matrice \(U\) vers les angles d'euler.

2 PseudoAxes

This section describe the calculations done by the library for the different kind of pseudo axes.

2.1 General process

2.1.1 First Solution

The hkl library use the gsl library in order to find the first valid solution.

2.1.2 Multiplication of the solutions.

Once we have got the first solution different strategies are applyed in order to generate more solutions.

  1. Geometry Multiplication

    For kappa diffractometers, once you have one solution it is possible to générate another one using a property of this geometry. (Left arm and right arm).

2.1.3 Restrains of the Solutions

We apply then some constrains to reduce these solutions to only a bunch of acceptable ones. Usualy we take the axis range into account.

2.2 Eulerians to Kappa angles

1st solution

\begin{eqnarray*} \kappa_\omega & = & \omega - p + \frac{\pi}{2} \\ \kappa & = & 2 \arcsin\left(\frac{\sin\frac{\chi}{2}}{\sin\alpha}\right) \\ \kappa_\phi & = & \phi - p - \frac{\pi}{2} \end{eqnarray*}

or 2nd one

\begin{eqnarray*} \kappa_\omega & = & \omega - p - \frac{\pi}{2} \\ \kappa & = & -2 \arcsin\left(\frac{\sin\frac{\chi}{2}}{\sin\alpha}\right) \\ \kappa_\phi & = & \phi - p + \frac{\pi}{2} \end{eqnarray*}

where

\[ p = \arcsin\left(\frac{\tan\frac{\chi}{2}}{\tan\alpha}\right) \]

and \(\alpha\) is the angle of the kappa axis with the \(\vec{y}\) axis.

2.3 Kappa to Eulerians angles

1st solution

\begin{eqnarray*} \omega & = & \kappa_\omega + p - \frac{\pi}{2} \\ \chi & = & 2 \arcsin\left(\sin\frac{\kappa}{2} \sin\alpha\right) \\ \phi & = & \kappa_\phi + p + \frac{\pi}{2} \end{eqnarray*}

or 2nd one

\begin{eqnarray*} \omega & = & \kappa_\omega + p + \frac{\pi}{2} \\ \chi & = & -2 \arcsin\left(\sin\frac{\kappa}{2} \sin\alpha\right) \\ \phi & = & \kappa_\phi + p - \frac{\pi}{2} \end{eqnarray*}

where

\[ p = \arctan\left(\tan\frac{\kappa}{2} \cos\alpha\right) \]

e2k_1.png

Figure 2: \(\omega = 0\), \(\chi = 0\), \(\phi = 0\), 1st solution

e2k_2.png

Figure 3: \(\omega = 0\), \(\chi = 0\), \(\phi = 0\), 2nd solution

e2k_3.png

Figure 4: \(\omega = 0\), \(\chi = 90\), \(\phi = 0\), 1st solution

e2k_4.png

Figure 5: \(\omega = 0\), \(\chi = 90\), \(\phi = 0\), 2nd solution

2.4 Qper and Qpar

qper_qpar.png

this pseudo axis engine compute the perpendicular (\(\left|\left|\vec{Q_\text{per}}\right|\right|\)) and parallel (\(\left|\left|\vec{Q_\text{par}}\right|\right|\)) contribution of \(\vec{Q}\) relatively to the surface of the sample defined by the \(\vec{n}\) vector.

\begin{eqnarray*} \vec{q} & = & \vec{k_\text{f}} - \vec{k_\text{i}} \\ \vec{q} & = & \vec{q_\text{per}} + \vec{q_\text{par}} \\ \vec{q_\text{per}} & = & \frac{\vec{q} \cdot \vec{n}}{\left|\left|\vec{n}\right|\right|} \frac{\vec{n}}{\left|\left|\vec{n}\right|\right|} \end{eqnarray*}

3 Diffractometers

warning

This section is automatically generating by introspecting the hkl library.

3.1 E4CH

3.1.1 Axes:

  • "omega": rotation around the [0.0, 0.0, 1.0] axis
  • "chi": rotation around the [1.0, 0.0, 0.0] axis
  • "phi": rotation around the [0.0, 0.0, 1.0] axis
  • "tth": rotation around the [0.0, 0.0, 1.0] axis

3.1.2 Engines:

  1. "hkl":
    • pseudo axes:
      • "h" : h coordinate of the diffracting plan
      • "k" : k coordinate of the diffracting plan
      • "l" : l coordinate of the diffracting plan
    • mode: "bissector"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "omega", "chi", "phi", "tth"
      • parameters: No parameter
    • mode: "constant_omega"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "chi", "phi", "tth"
      • parameters: No parameter
    • mode: "constant_chi"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "omega", "phi", "tth"
      • parameters: No parameter
    • mode: "constant_phi"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "omega", "chi", "tth"
      • parameters: No parameter
    • mode: "double_diffraction"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "omega", "chi", "phi", "tth"
      • parameters:
        • h2 [1.0]: h coordinate of the second diffracting plan
        • k2 [1.0]: k coordinate of the second diffracting plan
        • l2 [1.0]: l coordinate of the second diffracting plan
    • mode: "psi_constant"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "omega", "chi", "phi", "tth"
      • parameters:
        • h2 [1.0]: h coordinate of the reference plan
        • k2 [1.0]: k coordinate of the reference plan
        • l2 [1.0]: l coordinate of the reference plan
        • psi [0.0]: expected angle between the reference and the diffraction plans
  2. "psi":
    • pseudo axes:
      • "psi" : angle between the reference vector and the diffraction plan
    • mode: "psi"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "omega", "chi", "phi", "tth"
      • parameters:
        • h2 [1.0]: h coordinate of the reference plan
        • k2 [1.0]: k coordinate of the reference plan
        • l2 [1.0]: l coordinate of the reference plan
  3. "q":
    • pseudo axes:
      • "q" : the norm of \(\vec{q}\)
    • mode: "q"
      • axes (read) : "tth"
      • axes (write): "tth"
      • parameters: No parameter
  4. "incidence":
    • pseudo axes:
      • "incidence" : incidence of the incomming beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "incidence"
      • axes (read) : "omega", "chi", "phi"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
  5. "emergence":
    • pseudo axes:
      • "emergence" : incidence of the outgoing beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "emergence"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)

3.2 E4CV

3.2.1 Axes:

  • "omega": rotation around the [0.0, -1.0, 0.0] axis
  • "chi": rotation around the [1.0, 0.0, 0.0] axis
  • "phi": rotation around the [0.0, -1.0, 0.0] axis
  • "tth": rotation around the [0.0, -1.0, 0.0] axis

3.2.2 Engines:

  1. "hkl":
    • pseudo axes:
      • "h" : h coordinate of the diffracting plan
      • "k" : k coordinate of the diffracting plan
      • "l" : l coordinate of the diffracting plan
    • mode: "bissector"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "omega", "chi", "phi", "tth"
      • parameters: No parameter
    • mode: "constant_omega"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "chi", "phi", "tth"
      • parameters: No parameter
    • mode: "constant_chi"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "omega", "phi", "tth"
      • parameters: No parameter
    • mode: "constant_phi"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "omega", "chi", "tth"
      • parameters: No parameter
    • mode: "double_diffraction"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "omega", "chi", "phi", "tth"
      • parameters:
        • h2 [1.0]: h coordinate of the second diffracting plan
        • k2 [1.0]: k coordinate of the second diffracting plan
        • l2 [1.0]: l coordinate of the second diffracting plan
    • mode: "psi_constant"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "omega", "chi", "phi", "tth"
      • parameters:
        • h2 [1.0]: h coordinate of the reference plan
        • k2 [1.0]: k coordinate of the reference plan
        • l2 [1.0]: l coordinate of the reference plan
        • psi [0.0]: expected angle between the reference and the diffraction plans
  2. "psi":
    • pseudo axes:
      • "psi" : angle between the reference vector and the diffraction plan
    • mode: "psi"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "omega", "chi", "phi", "tth"
      • parameters:
        • h2 [1.0]: h coordinate of the reference plan
        • k2 [1.0]: k coordinate of the reference plan
        • l2 [1.0]: l coordinate of the reference plan
  3. "q":
    • pseudo axes:
      • "q" : the norm of \(\vec{q}\)
    • mode: "q"
      • axes (read) : "tth"
      • axes (write): "tth"
      • parameters: No parameter
  4. "incidence":
    • pseudo axes:
      • "incidence" : incidence of the incomming beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "incidence"
      • axes (read) : "omega", "chi", "phi"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
  5. "emergence":
    • pseudo axes:
      • "emergence" : incidence of the outgoing beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "emergence"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)

3.3 E6C

3.3.1 Axes:

  • "mu": rotation around the [0.0, 0.0, 1.0] axis
  • "omega": rotation around the [0.0, -1.0, 0.0] axis
  • "chi": rotation around the [1.0, 0.0, 0.0] axis
  • "phi": rotation around the [0.0, -1.0, 0.0] axis
  • "gamma": rotation around the [0.0, 0.0, 1.0] axis
  • "delta": rotation around the [0.0, -1.0, 0.0] axis

3.3.2 Engines:

  1. "hkl":
    • pseudo axes:
      • "h" : h coordinate of the diffracting plan
      • "k" : k coordinate of the diffracting plan
      • "l" : l coordinate of the diffracting plan
    • mode: "bissector_vertical"
      • axes (read) : "mu", "omega", "chi", "phi", "gamma", "delta"
      • axes (write): "omega", "chi", "phi", "delta"
      • parameters: No parameter
    • mode: "constant_omega_vertical"
      • axes (read) : "mu", "omega", "chi", "phi", "gamma", "delta"
      • axes (write): "chi", "phi", "delta"
      • parameters: No parameter
    • mode: "constant_chi_vertical"
      • axes (read) : "mu", "omega", "chi", "phi", "gamma", "delta"
      • axes (write): "omega", "phi", "delta"
      • parameters: No parameter
    • mode: "constant_phi_vertical"
      • axes (read) : "mu", "omega", "chi", "phi", "gamma", "delta"
      • axes (write): "omega", "chi", "delta"
      • parameters: No parameter
    • mode: "lifting_detector_phi"
      • axes (read) : "mu", "omega", "chi", "phi", "gamma", "delta"
      • axes (write): "phi", "gamma", "delta"
      • parameters: No parameter
    • mode: "lifting_detector_omega"
      • axes (read) : "mu", "omega", "chi", "phi", "gamma", "delta"
      • axes (write): "omega", "gamma", "delta"
      • parameters: No parameter
    • mode: "lifting_detector_mu"
      • axes (read) : "mu", "omega", "chi", "phi", "gamma", "delta"
      • axes (write): "mu", "gamma", "delta"
      • parameters: No parameter
    • mode: "double_diffraction_vertical"
      • axes (read) : "mu", "omega", "chi", "phi", "gamma", "delta"
      • axes (write): "omega", "chi", "phi", "delta"
      • parameters:
        • h2 [1.0]: h coordinate of the second diffracting plan
        • k2 [1.0]: k coordinate of the second diffracting plan
        • l2 [1.0]: l coordinate of the second diffracting plan
    • mode: "bissector_horizontal"
      • axes (read) : "mu", "omega", "chi", "phi", "gamma", "delta"
      • axes (write): "mu", "omega", "chi", "phi", "gamma"
      • parameters: No parameter
    • mode: "double_diffraction_horizontal"
      • axes (read) : "mu", "omega", "chi", "phi", "gamma", "delta"
      • axes (write): "mu", "chi", "phi", "gamma"
      • parameters:
        • h2 [1.0]: h coordinate of the second diffracting plan
        • k2 [1.0]: k coordinate of the second diffracting plan
        • l2 [1.0]: l coordinate of the second diffracting plan
    • mode: "psi_constant_vertical"
      • axes (read) : "mu", "omega", "chi", "phi", "gamma", "delta"
      • axes (write): "omega", "chi", "phi", "delta"
      • parameters:
        • h2 [1.0]: h coordinate of the reference plan
        • k2 [0.0]: k coordinate of the reference plan
        • l2 [0.0]: l coordinate of the reference plan
        • psi [0.0]: expected angle between the reference and the diffraction plans
    • mode: "psi_constant_horizontal"
      • axes (read) : "mu", "omega", "chi", "phi", "gamma", "delta"
      • axes (write): "omega", "chi", "phi", "gamma"
      • parameters:
        • h2 [1.0]: h coordinate of the reference plan
        • k2 [1.0]: k coordinate of the reference plan
        • l2 [1.0]: l coordinate of the reference plan
        • psi [0.0]: expected angle between the reference and the diffraction plans
    • mode: "constant_mu_horizontal"
      • axes (read) : "mu", "omega", "chi", "phi", "gamma", "delta"
      • axes (write): "chi", "phi", "gamma"
      • parameters: No parameter
  2. "psi":
    • pseudo axes:
      • "psi" : angle between the reference vector and the diffraction plan
    • mode: "psi_vertical"
      • axes (read) : "mu", "omega", "chi", "phi", "gamma", "delta"
      • axes (write): "omega", "chi", "phi", "delta"
      • parameters:
        • h2 [1.0]: h coordinate of the reference plan
        • k2 [1.0]: k coordinate of the reference plan
        • l2 [1.0]: l coordinate of the reference plan
  3. "q2":
    • pseudo axes:
      • "q" : the norm of \(\vec{q}\)
      • "alpha" : angle of the projection of \(\vec{q}\) on the \(yOz\) plan and \(\vec{y}\)
    • mode: "q2"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters: No parameter
  4. "qper_qpar":
    • pseudo axes:
      • "qper" : perpendicular component of \(\vec{q}\) along the normal of the sample surface
      • "qpar" : parallel component of \(\vec{q}\)
    • mode: "qper_qpar"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
  5. "tth2":
    • pseudo axes:
      • "tth" : the \(2 \theta\) angle
      • "alpha" : angle of the projection of \(\vec{q}\) on the \(yOz\) plan and \(\vec{y}\)
    • mode: "tth2"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters: No parameter
  6. "incidence":
    • pseudo axes:
      • "incidence" : incidence of the incomming beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "incidence"
      • axes (read) : "mu", "omega", "chi", "phi"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
  7. "emergence":
    • pseudo axes:
      • "emergence" : incidence of the outgoing beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "emergence"
      • axes (read) : "mu", "omega", "chi", "phi", "gamma", "delta"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)

3.4 K4CV

3.4.1 Axes:

  • "komega": rotation around the [0.0, -1.0, 0.0] axis
  • "kappa": rotation around the [0.0, -0.6427876096865394, -0.766044443118978] axis
  • "kphi": rotation around the [0.0, -1.0, 0.0] axis
  • "tth": rotation around the [0.0, -1.0, 0.0] axis

3.4.2 Engines:

  1. "hkl":
    • pseudo axes:
      • "h" : h coordinate of the diffracting plan
      • "k" : k coordinate of the diffracting plan
      • "l" : l coordinate of the diffracting plan
    • mode: "bissector"
      • axes (read) : "komega", "kappa", "kphi", "tth"
      • axes (write): "komega", "kappa", "kphi", "tth"
      • parameters: No parameter
    • mode: "constant_omega"
      • axes (read) : "komega", "kappa", "kphi", "tth"
      • axes (write): "komega", "kappa", "kphi", "tth"
      • parameters:
        • omega [0.0]: the freezed value
    • mode: "constant_chi"
      • axes (read) : "komega", "kappa", "kphi", "tth"
      • axes (write): "komega", "kappa", "kphi", "tth"
      • parameters:
        • chi [0.0]: the freezed value
    • mode: "constant_phi"
      • axes (read) : "komega", "kappa", "kphi", "tth"
      • axes (write): "komega", "kappa", "kphi", "tth"
      • parameters:
        • phi [0.0]: the freezed value
    • mode: "double_diffraction"
      • axes (read) : "komega", "kappa", "kphi", "tth"
      • axes (write): "komega", "kappa", "kphi", "tth"
      • parameters:
        • h2 [1.0]: h coordinate of the second diffracting plan
        • k2 [1.0]: k coordinate of the second diffracting plan
        • l2 [1.0]: l coordinate of the second diffracting plan
    • mode: "psi_constant"
      • axes (read) : "komega", "kappa", "kphi", "tth"
      • axes (write): "komega", "kappa", "kphi", "tth"
      • parameters:
        • h2 [1.0]: h coordinate of the reference plan
        • k2 [1.0]: k coordinate of the reference plan
        • l2 [1.0]: l coordinate of the reference plan
        • psi [0.0]: expected angle between the reference and the diffraction plans
  2. "eulerians":
    • pseudo axes:
      • "omega" : omega equivalent for a four circle eulerian geometry
      • "chi" : chi equivalent for a four circle eulerian geometry
      • "phi" : phi equivalent for a four circle eulerian geometry
    • mode: "eulerians"
      • axes (read) : "komega", "kappa", "kphi"
      • axes (write): "komega", "kappa", "kphi"
      • parameters:
        • solutions [1.0]: (0/1) to select the first or second solution
  3. "psi":
    • pseudo axes:
      • "psi" : angle between the reference vector and the diffraction plan
    • mode: "psi"
      • axes (read) : "komega", "kappa", "kphi", "tth"
      • axes (write): "komega", "kappa", "kphi", "tth"
      • parameters:
        • h2 [1.0]: h coordinate of the reference plan
        • k2 [1.0]: k coordinate of the reference plan
        • l2 [1.0]: l coordinate of the reference plan
  4. "q":
    • pseudo axes:
      • "q" : the norm of \(\vec{q}\)
    • mode: "q"
      • axes (read) : "tth"
      • axes (write): "tth"
      • parameters: No parameter
  5. "incidence":
    • pseudo axes:
      • "incidence" : incidence of the incomming beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "incidence"
      • axes (read) : "komega", "kappa", "kphi"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
  6. "emergence":
    • pseudo axes:
      • "emergence" : incidence of the outgoing beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "emergence"
      • axes (read) : "komega", "kappa", "kphi", "tth"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)

3.5 K6C

3.5.1 Axes:

  • "mu": rotation around the [0.0, 0.0, 1.0] axis
  • "komega": rotation around the [0.0, -1.0, 0.0] axis
  • "kappa": rotation around the [0.0, -0.6427876096865394, -0.766044443118978] axis
  • "kphi": rotation around the [0.0, -1.0, 0.0] axis
  • "gamma": rotation around the [0.0, 0.0, 1.0] axis
  • "delta": rotation around the [0.0, -1.0, 0.0] axis

3.5.2 Engines:

  1. "hkl":
    • pseudo axes:
      • "h" : h coordinate of the diffracting plan
      • "k" : k coordinate of the diffracting plan
      • "l" : l coordinate of the diffracting plan
    • mode: "bissector_vertical"
      • axes (read) : "mu", "komega", "kappa", "kphi", "gamma", "delta"
      • axes (write): "komega", "kappa", "kphi", "delta"
      • parameters: No parameter
    • mode: "constant_omega_vertical"
      • axes (read) : "mu", "komega", "kappa", "kphi", "gamma", "delta"
      • axes (write): "komega", "kappa", "kphi", "delta"
      • parameters:
        • omega [0.0]: the freezed value
    • mode: "constant_chi_vertical"
      • axes (read) : "mu", "komega", "kappa", "kphi", "gamma", "delta"
      • axes (write): "komega", "kappa", "kphi", "delta"
      • parameters:
        • chi [0.0]: the freezed value
    • mode: "constant_phi_vertical"
      • axes (read) : "mu", "komega", "kappa", "kphi", "gamma", "delta"
      • axes (write): "komega", "kappa", "kphi", "delta"
      • parameters:
        • phi [0.0]: the freezed value
    • mode: "lifting_detector_kphi"
      • axes (read) : "mu", "komega", "kappa", "kphi", "gamma", "delta"
      • axes (write): "kphi", "gamma", "delta"
      • parameters: No parameter
    • mode: "lifting_detector_komega"
      • axes (read) : "mu", "komega", "kappa", "kphi", "gamma", "delta"
      • axes (write): "komega", "gamma", "delta"
      • parameters: No parameter
    • mode: "lifting_detector_mu"
      • axes (read) : "mu", "komega", "kappa", "kphi", "gamma", "delta"
      • axes (write): "mu", "gamma", "delta"
      • parameters: No parameter
    • mode: "double_diffraction_vertical"
      • axes (read) : "mu", "komega", "kappa", "kphi", "gamma", "delta"
      • axes (write): "komega", "kappa", "kphi", "delta"
      • parameters:
        • h2 [1.0]: h coordinate of the second diffracting plan
        • k2 [1.0]: k coordinate of the second diffracting plan
        • l2 [1.0]: l coordinate of the second diffracting plan
    • mode: "bissector_horizontal"
      • axes (read) : "mu", "komega", "kappa", "kphi", "gamma", "delta"
      • axes (write): "mu", "komega", "kappa", "kphi", "gamma"
      • parameters: No parameter
    • mode: "constant_phi_horizontal"
      • axes (read) : "mu", "komega", "kappa", "kphi", "gamma", "delta"
      • axes (write): "mu", "komega", "kappa", "kphi", "gamma"
      • parameters:
        • phi [0.0]: the freezed value
    • mode: "constant_kphi_horizontal"
      • axes (read) : "mu", "komega", "kappa", "kphi", "gamma", "delta"
      • axes (write): "mu", "komega", "kappa", "gamma"
      • parameters: No parameter
    • mode: "double_diffraction_horizontal"
      • axes (read) : "mu", "komega", "kappa", "kphi", "gamma", "delta"
      • axes (write): "mu", "komega", "kappa", "kphi", "gamma"
      • parameters:
        • h2 [1.0]: h coordinate of the second diffracting plan
        • k2 [1.0]: k coordinate of the second diffracting plan
        • l2 [1.0]: l coordinate of the second diffracting plan
    • mode: "psi_constant_vertical"
      • axes (read) : "mu", "komega", "kappa", "kphi", "gamma", "delta"
      • axes (write): "komega", "kappa", "kphi", "delta"
      • parameters:
        • h2 [1.0]: h coordinate of the reference plan
        • k2 [1.0]: k coordinate of the reference plan
        • l2 [1.0]: l coordinate of the reference plan
        • psi [0.0]: expected angle between the reference and the diffraction plans
    • mode: "constant_incidence"
      • axes (read) : "mu", "komega", "kappa", "kphi", "gamma", "delta"
      • axes (write): "komega", "kappa", "kphi", "gamma", "delta"
      • parameters:
        • x [1.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [1.0]: the z coordinate of the surface \(\vec{n}\)
        • incidence [0.0]: expected incidence of the incoming beam \(\vec{k_i}\) on the surface.
        • azimuth [90.0]: expected azimuth
  2. "eulerians":
    • pseudo axes:
      • "omega" : omega equivalent for a four circle eulerian geometry
      • "chi" : chi equivalent for a four circle eulerian geometry
      • "phi" : phi equivalent for a four circle eulerian geometry
    • mode: "eulerians"
      • axes (read) : "komega", "kappa", "kphi"
      • axes (write): "komega", "kappa", "kphi"
      • parameters:
        • solutions [1.0]: (0/1) to select the first or second solution
  3. "psi":
    • pseudo axes:
      • "psi" : angle between the reference vector and the diffraction plan
    • mode: "psi_vertical"
      • axes (read) : "mu", "komega", "kappa", "kphi", "gamma", "delta"
      • axes (write): "komega", "kappa", "kphi", "delta"
      • parameters:
        • h2 [1.0]: h coordinate of the reference plan
        • k2 [1.0]: k coordinate of the reference plan
        • l2 [1.0]: l coordinate of the reference plan
  4. "q2":
    • pseudo axes:
      • "q" : the norm of \(\vec{q}\)
      • "alpha" : angle of the projection of \(\vec{q}\) on the \(yOz\) plan and \(\vec{y}\)
    • mode: "q2"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters: No parameter
  5. "qper_qpar":
    • pseudo axes:
      • "qper" : perpendicular component of \(\vec{q}\) along the normal of the sample surface
      • "qpar" : parallel component of \(\vec{q}\)
    • mode: "qper_qpar"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
  6. "incidence":
    • pseudo axes:
      • "incidence" : incidence of the incomming beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "incidence"
      • axes (read) : "mu", "komega", "kappa", "kphi"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
  7. "tth2":
    • pseudo axes:
      • "tth" : the \(2 \theta\) angle
      • "alpha" : angle of the projection of \(\vec{q}\) on the \(yOz\) plan and \(\vec{y}\)
    • mode: "tth2"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters: No parameter
  8. "emergence":
    • pseudo axes:
      • "emergence" : incidence of the outgoing beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "emergence"
      • axes (read) : "mu", "komega", "kappa", "kphi", "gamma", "delta"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)

3.6 PETRA3 P09 EH2

3.6.1 Axes:

  • "mu": rotation around the [0.0, -1.0, 0.0] axis
  • "omega": rotation around the [0.0, 0.0, 1.0] axis
  • "chi": rotation around the [1.0, 0.0, 0.0] axis
  • "phi": rotation around the [0.0, 0.0, 1.0] axis
  • "delta": rotation around the [0.0, 0.0, 1.0] axis
  • "gamma": rotation around the [0.0, -1.0, 0.0] axis

3.6.2 Engines:

  1. "hkl":
    • pseudo axes:
      • "h" : h coordinate of the diffracting plan
      • "k" : k coordinate of the diffracting plan
      • "l" : l coordinate of the diffracting plan
    • mode: "zaxis + alpha-fixed"
      • axes (read) : "mu", "omega", "chi", "phi", "delta", "gamma"
      • axes (write): "omega", "delta", "gamma"
      • parameters: No parameter
    • mode: "zaxis + beta-fixed"
      • axes (read) : "mu", "omega", "chi", "phi", "delta", "gamma"
      • axes (write): "mu", "delta", "gamma"
      • parameters: No parameter
    • mode: "zaxis + alpha=beta"
      • axes (read) : "mu", "omega", "chi", "phi", "delta", "gamma"
      • axes (write): "mu", "omega", "delta", "gamma"
      • parameters: No parameter
    • mode: "4-circles bissecting horizontal"
      • axes (read) : "mu", "omega", "chi", "phi", "delta", "gamma"
      • axes (write): "omega", "chi", "phi", "delta"
      • parameters: No parameter
    • mode: "4-circles constant omega horizontal"
      • axes (read) : "mu", "omega", "chi", "phi", "delta", "gamma"
      • axes (write): "chi", "phi", "delta"
      • parameters: No parameter
    • mode: "4-circles constant chi horizontal"
      • axes (read) : "mu", "omega", "chi", "phi", "delta", "gamma"
      • axes (write): "omega", "phi", "delta"
      • parameters: No parameter
    • mode: "4-circles constant phi horizontal"
      • axes (read) : "mu", "omega", "chi", "phi", "delta", "gamma"
      • axes (write): "omega", "chi", "delta"
      • parameters: No parameter
    • mode: "lifting detector mu"
      • axes (read) : "mu", "omega", "chi", "phi", "delta", "gamma"
      • axes (write): "mu", "delta", "gamma"
      • parameters: No parameter
    • mode: "lifting detector omega"
      • axes (read) : "mu", "omega", "chi", "phi", "delta", "gamma"
      • axes (write): "omega", "delta", "gamma"
      • parameters: No parameter
    • mode: "lifting detector chi"
      • axes (read) : "mu", "omega", "chi", "phi", "delta", "gamma"
      • axes (write): "chi", "delta", "gamma"
      • parameters: No parameter
    • mode: "lifting detector phi"
      • axes (read) : "mu", "omega", "chi", "phi", "delta", "gamma"
      • axes (write): "phi", "delta", "gamma"
      • parameters: No parameter

3.7 SOLEIL MARS

3.7.1 Axes:

  • "omega": rotation around the [0.0, -1.0, 0.0] axis
  • "chi": rotation around the [-1.0, 0.0, 0.0] axis
  • "phi": rotation around the [0.0, 0.0, 1.0] axis
  • "tth": rotation around the [0.0, -1.0, 0.0] axis

3.7.2 Engines:

  1. "hkl":
    • pseudo axes:
      • "h" : h coordinate of the diffracting plan
      • "k" : k coordinate of the diffracting plan
      • "l" : l coordinate of the diffracting plan
    • mode: "bissector"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "omega", "chi", "phi", "tth"
      • parameters: No parameter
    • mode: "constant_omega"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "chi", "phi", "tth"
      • parameters: No parameter
    • mode: "constant_chi"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "omega", "phi", "tth"
      • parameters: No parameter
    • mode: "constant_phi"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "omega", "chi", "tth"
      • parameters: No parameter
    • mode: "double_diffraction"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "omega", "chi", "phi", "tth"
      • parameters:
        • h2 [1.0]: h coordinate of the second diffracting plan
        • k2 [1.0]: k coordinate of the second diffracting plan
        • l2 [1.0]: l coordinate of the second diffracting plan
    • mode: "psi_constant"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "omega", "chi", "phi", "tth"
      • parameters:
        • h2 [1.0]: h coordinate of the reference plan
        • k2 [1.0]: k coordinate of the reference plan
        • l2 [1.0]: l coordinate of the reference plan
        • psi [0.0]: expected angle between the reference and the diffraction plans
  2. "psi":
    • pseudo axes:
      • "psi" : angle between the reference vector and the diffraction plan
    • mode: "psi"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write): "omega", "chi", "phi", "tth"
      • parameters:
        • h2 [1.0]: h coordinate of the reference plan
        • k2 [1.0]: k coordinate of the reference plan
        • l2 [1.0]: l coordinate of the reference plan
  3. "q":
    • pseudo axes:
      • "q" : the norm of \(\vec{q}\)
    • mode: "q"
      • axes (read) : "tth"
      • axes (write): "tth"
      • parameters: No parameter
  4. "incidence":
    • pseudo axes:
      • "incidence" : incidence of the incomming beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "incidence"
      • axes (read) : "omega", "chi", "phi"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
  5. "emergence":
    • pseudo axes:
      • "emergence" : incidence of the outgoing beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "emergence"
      • axes (read) : "omega", "chi", "phi", "tth"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)

3.8 SOLEIL SIRIUS KAPPA

3.8.1 Axes:

  • "mu": rotation around the [0.0, 0.0, -1.0] axis
  • "komega": rotation around the [0.0, -1.0, 0.0] axis
  • "kappa": rotation around the [0.0, -0.6427876096865394, -0.766044443118978] axis
  • "kphi": rotation around the [0.0, -1.0, 0.0] axis
  • "delta": rotation around the [0.0, 0.0, -1.0] axis
  • "gamma": rotation around the [0.0, -1.0, 0.0] axis

3.8.2 Engines:

  1. "hkl":
    • pseudo axes:
      • "h" : h coordinate of the diffracting plan
      • "k" : k coordinate of the diffracting plan
      • "l" : l coordinate of the diffracting plan
    • mode: "bissector_vertical"
      • axes (read) : "mu", "komega", "kappa", "kphi", "delta", "gamma"
      • axes (write): "komega", "kappa", "kphi", "gamma"
      • parameters: No parameter
    • mode: "constant_omega_vertical"
      • axes (read) : "mu", "komega", "kappa", "kphi", "delta", "gamma"
      • axes (write): "komega", "kappa", "kphi", "gamma"
      • parameters:
        • omega [0.0]: the freezed value
    • mode: "constant_chi_vertical"
      • axes (read) : "mu", "komega", "kappa", "kphi", "delta", "gamma"
      • axes (write): "komega", "kappa", "kphi", "gamma"
      • parameters:
        • chi [0.0]: the freezed value
    • mode: "constant_phi_vertical"
      • axes (read) : "mu", "komega", "kappa", "kphi", "delta", "gamma"
      • axes (write): "komega", "kappa", "kphi", "gamma"
      • parameters:
        • phi [0.0]: the freezed value
    • mode: "lifting_detector_kphi"
      • axes (read) : "mu", "komega", "kappa", "kphi", "delta", "gamma"
      • axes (write): "kphi", "delta", "gamma"
      • parameters: No parameter
    • mode: "lifting_detector_komega"
      • axes (read) : "mu", "komega", "kappa", "kphi", "delta", "gamma"
      • axes (write): "komega", "delta", "gamma"
      • parameters: No parameter
    • mode: "lifting_detector_mu"
      • axes (read) : "mu", "komega", "kappa", "kphi", "delta", "gamma"
      • axes (write): "mu", "delta", "gamma"
      • parameters: No parameter
    • mode: "double_diffraction_vertical"
      • axes (read) : "mu", "komega", "kappa", "kphi", "delta", "gamma"
      • axes (write): "komega", "kappa", "kphi", "gamma"
      • parameters:
        • h2 [1.0]: h coordinate of the second diffracting plan
        • k2 [1.0]: k coordinate of the second diffracting plan
        • l2 [1.0]: l coordinate of the second diffracting plan
    • mode: "bissector_horizontal"
      • axes (read) : "mu", "komega", "kappa", "kphi", "delta", "gamma"
      • axes (write): "mu", "komega", "kappa", "kphi", "delta"
      • parameters: No parameter
    • mode: "constant_phi_horizontal"
      • axes (read) : "mu", "komega", "kappa", "kphi", "delta", "gamma"
      • axes (write): "mu", "komega", "kappa", "kphi", "delta"
      • parameters:
        • phi [0.0]: the freezed value
    • mode: "constant_kphi_horizontal"
      • axes (read) : "mu", "komega", "kappa", "kphi", "delta", "gamma"
      • axes (write): "mu", "komega", "kappa", "delta"
      • parameters: No parameter
    • mode: "double_diffraction_horizontal"
      • axes (read) : "mu", "komega", "kappa", "kphi", "delta", "gamma"
      • axes (write): "mu", "komega", "kappa", "kphi", "delta"
      • parameters:
        • h2 [1.0]: h coordinate of the second diffracting plan
        • k2 [1.0]: k coordinate of the second diffracting plan
        • l2 [1.0]: l coordinate of the second diffracting plan
    • mode: "psi_constant_vertical"
      • axes (read) : "mu", "komega", "kappa", "kphi", "delta", "gamma"
      • axes (write): "komega", "kappa", "kphi", "gamma"
      • parameters:
        • h2 [1.0]: h coordinate of the reference plan
        • k2 [1.0]: k coordinate of the reference plan
        • l2 [1.0]: l coordinate of the reference plan
        • psi [0.0]: expected angle between the reference and the diffraction plans
    • mode: "constant_incidence"
      • axes (read) : "mu", "komega", "kappa", "kphi", "delta", "gamma"
      • axes (write): "komega", "kappa", "kphi", "delta", "gamma"
      • parameters:
        • x [1.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [1.0]: the z coordinate of the surface \(\vec{n}\)
        • incidence [0.0]: expected incidence of the incoming beam \(\vec{k_i}\) on the surface.
        • azimuth [90.0]: expected azimuth
  2. "eulerians":
    • pseudo axes:
      • "omega" : omega equivalent for a four circle eulerian geometry
      • "chi" : chi equivalent for a four circle eulerian geometry
      • "phi" : phi equivalent for a four circle eulerian geometry
    • mode: "eulerians"
      • axes (read) : "komega", "kappa", "kphi"
      • axes (write): "komega", "kappa", "kphi"
      • parameters:
        • solutions [1.0]: (0/1) to select the first or second solution
  3. "psi":
    • pseudo axes:
      • "psi" : angle between the reference vector and the diffraction plan
    • mode: "psi_vertical_soleil_sirius_kappa"
      • axes (read) : "mu", "komega", "kappa", "kphi", "delta", "gamma"
      • axes (write): "komega", "kappa", "kphi", "gamma"
      • parameters:
        • h2 [1.0]: h coordinate of the reference plan
        • k2 [1.0]: k coordinate of the reference plan
        • l2 [1.0]: l coordinate of the reference plan
  4. "q2":
    • pseudo axes:
      • "q" : the norm of \(\vec{q}\)
      • "alpha" : angle of the projection of \(\vec{q}\) on the \(yOz\) plan and \(\vec{y}\)
    • mode: "q2"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters: No parameter
  5. "qper_qpar":
    • pseudo axes:
      • "qper" : perpendicular component of \(\vec{q}\) along the normal of the sample surface
      • "qpar" : parallel component of \(\vec{q}\)
    • mode: "qper_qpar"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
  6. "tth2":
    • pseudo axes:
      • "tth" : the \(2 \theta\) angle
      • "alpha" : angle of the projection of \(\vec{q}\) on the \(yOz\) plan and \(\vec{y}\)
    • mode: "tth2"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters: No parameter
  7. "incidence":
    • pseudo axes:
      • "incidence" : incidence of the incomming beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "incidence"
      • axes (read) : "mu", "komega", "kappa", "kphi"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
  8. "emergence":
    • pseudo axes:
      • "emergence" : incidence of the outgoing beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "emergence"
      • axes (read) : "mu", "komega", "kappa", "kphi", "gamma", "delta"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)

3.9 SOLEIL SIRIUS TURRET

3.9.1 Axes:

  • "basepitch": rotation around the [0.0, 1.0, 0.0] axis
  • "thetah": rotation around the [0.0, 0.0, -1.0] axis
  • "alphay": rotation around the [0.0, 1.0, 0.0] axis
  • "alphax": rotation around the [1.0, 0.0, 0.0] axis
  • "delta": rotation around the [0.0, 0.0, -1.0] axis
  • "gamma": rotation around the [0.0, -1.0, 0.0] axis

3.9.2 Engines:

  1. "hkl":
    • pseudo axes:
      • "h" : h coordinate of the diffracting plan
      • "k" : k coordinate of the diffracting plan
      • "l" : l coordinate of the diffracting plan
    • mode: "lifting_detector_thetah"
      • axes (read) : "basepitch", "thetah", "alphay", "alphax", "delta", "gamma"
      • axes (write): "thetah", "delta", "gamma"
      • parameters: No parameter
  2. "q2":
    • pseudo axes:
      • "q" : the norm of \(\vec{q}\)
      • "alpha" : angle of the projection of \(\vec{q}\) on the \(yOz\) plan and \(\vec{y}\)
    • mode: "q2"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters: No parameter
  3. "qper_qpar":
    • pseudo axes:
      • "qper" : perpendicular component of \(\vec{q}\) along the normal of the sample surface
      • "qpar" : parallel component of \(\vec{q}\)
    • mode: "qper_qpar"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
  4. "tth2":
    • pseudo axes:
      • "tth" : the \(2 \theta\) angle
      • "alpha" : angle of the projection of \(\vec{q}\) on the \(yOz\) plan and \(\vec{y}\)
    • mode: "tth2"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters: No parameter
  5. "incidence":
    • pseudo axes:
      • "incidence" : incidence of the incomming beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "incidence"
      • axes (read) : "basepitch", "thetah", "alphay", "alphax"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [0.0]: the y coordinate of the surface \(\vec{n}\)
        • z [1.0]: the z coordinate of the surface \(\vec{n}\)
  6. "emergence":
    • pseudo axes:
      • "emergence" : incidence of the outgoing beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "emergence"
      • axes (read) : "basepitch", "thetah", "alphay", "alphax", "delta", "gamma"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [0.0]: the y coordinate of the surface \(\vec{n}\)
        • z [1.0]: the z coordinate of the surface \(\vec{n}\)

3.10 SOLEIL SIXS MED1+2

3.10.1 Axes:

  • "pitch": rotation around the [0.0, -1.0, 0.0] axis
  • "mu": rotation around the [0.0, 0.0, 1.0] axis
  • "gamma": rotation around the [0.0, 0.0, 1.0] axis
  • "delta": rotation around the [0.0, -1.0, 0.0] axis

3.10.2 Engines:

  1. "hkl":
    • pseudo axes:
      • "h" : h coordinate of the diffracting plan
      • "k" : k coordinate of the diffracting plan
      • "l" : l coordinate of the diffracting plan
    • mode: "pitch_fixed"
      • axes (read) : "pitch", "mu", "gamma", "delta"
      • axes (write): "mu", "gamma", "delta"
      • parameters: No parameter
    • mode: "delta_fixed"
      • axes (read) : "pitch", "mu", "gamma", "delta"
      • axes (write): "pitch", "mu", "gamma"
      • parameters: No parameter
  2. "q2":
    • pseudo axes:
      • "q" : the norm of \(\vec{q}\)
      • "alpha" : angle of the projection of \(\vec{q}\) on the \(yOz\) plan and \(\vec{y}\)
    • mode: "q2"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters: No parameter
  3. "qper_qpar":
    • pseudo axes:
      • "qper" : perpendicular component of \(\vec{q}\) along the normal of the sample surface
      • "qpar" : parallel component of \(\vec{q}\)
    • mode: "qper_qpar"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
  4. "tth2":
    • pseudo axes:
      • "tth" : the \(2 \theta\) angle
      • "alpha" : angle of the projection of \(\vec{q}\) on the \(yOz\) plan and \(\vec{y}\)
    • mode: "tth2"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters: No parameter
  5. "incidence":
    • pseudo axes:
      • "incidence" : incidence of the incomming beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "incidence"
      • axes (read) : "pitch", "mu"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [0.0]: the y coordinate of the surface \(\vec{n}\)
        • z [1.0]: the z coordinate of the surface \(\vec{n}\)
  6. "emergence":
    • pseudo axes:
      • "emergence" : incidence of the outgoing beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "emergence"
      • axes (read) : "pitch", "mu", "gamma", "delta"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [0.0]: the y coordinate of the surface \(\vec{n}\)
        • z [1.0]: the z coordinate of the surface \(\vec{n}\)

3.11 SOLEIL SIXS MED2+2

3.11.1 Axes:

  • "beta": rotation around the [0.0, -1.0, 0.0] axis
  • "mu": rotation around the [0.0, 0.0, 1.0] axis
  • "omega": rotation around the [0.0, -1.0, 0.0] axis
  • "gamma": rotation around the [0.0, 0.0, 1.0] axis
  • "delta": rotation around the [0.0, -1.0, 0.0] axis

3.11.2 Engines:

  1. "hkl":
    • pseudo axes:
      • "h" : h coordinate of the diffracting plan
      • "k" : k coordinate of the diffracting plan
      • "l" : l coordinate of the diffracting plan
    • mode: "mu_fixed"
      • axes (read) : "beta", "mu", "omega", "gamma", "delta"
      • axes (write): "omega", "gamma", "delta"
      • parameters: No parameter
    • mode: "reflectivity"
      • axes (read) : "beta", "mu", "omega", "gamma", "delta"
      • axes (write): "mu", "omega", "gamma", "delta"
      • parameters: No parameter
    • mode: "emergence_fixed"
      • axes (read) : "beta", "mu", "omega", "gamma", "delta"
      • axes (write): "mu", "omega", "gamma", "delta"
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
        • emergence [0.0]: expected emergence of the outgoing beam \(\vec{k_f}\) from the surface \(\vec{n}\).
  2. "q2":
    • pseudo axes:
      • "q" : the norm of \(\vec{q}\)
      • "alpha" : angle of the projection of \(\vec{q}\) on the \(yOz\) plan and \(\vec{y}\)
    • mode: "q2"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters: No parameter
  3. "qper_qpar":
    • pseudo axes:
      • "qper" : perpendicular component of \(\vec{q}\) along the normal of the sample surface
      • "qpar" : parallel component of \(\vec{q}\)
    • mode: "qper_qpar"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
  4. "tth2":
    • pseudo axes:
      • "tth" : the \(2 \theta\) angle
      • "alpha" : angle of the projection of \(\vec{q}\) on the \(yOz\) plan and \(\vec{y}\)
    • mode: "tth2"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters: No parameter
  5. "incidence":
    • pseudo axes:
      • "incidence" : incidence of the incomming beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "incidence"
      • axes (read) : "beta", "mu", "omega"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
  6. "emergence":
    • pseudo axes:
      • "emergence" : incidence of the outgoing beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "emergence"
      • axes (read) : "beta", "mu", "omega", "gamma", "delta"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)

3.12 SOLEIL SIXS MED2+3

3.12.1 Axes:

  • "beta": rotation around the [0.0, -1.0, 0.0] axis
  • "mu": rotation around the [0.0, 0.0, 1.0] axis
  • "omega": rotation around the [0.0, -1.0, 0.0] axis
  • "gamma": rotation around the [0.0, 0.0, 1.0] axis
  • "delta": rotation around the [0.0, -1.0, 0.0] axis
  • "eta_a": rotation around the [-1.0, 0.0, 0.0] axis

3.12.2 Engines:

  1. "hkl":
    • pseudo axes:
      • "h" : h coordinate of the diffracting plan
      • "k" : k coordinate of the diffracting plan
      • "l" : l coordinate of the diffracting plan
    • mode: "mu_fixed"
      • axes (read) : "beta", "mu", "omega", "gamma", "delta", "eta_a"
      • axes (write): "omega", "gamma", "delta"
      • parameters: No parameter
    • mode: "gamma_fixed"
      • axes (read) : "beta", "mu", "omega", "gamma", "delta", "eta_a"
      • axes (write): "mu", "omega", "delta"
      • parameters: No parameter
    • mode: "emergence_fixed"
      • axes (read) : "beta", "mu", "omega", "gamma", "delta", "eta_a"
      • axes (write): "mu", "omega", "gamma", "delta"
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
        • emergence [0.0]: expected emergence of the outgoing beam \(\vec{k_f}\) from the surface \(\vec{n}\).
  2. "q2":
    • pseudo axes:
      • "q" : the norm of \(\vec{q}\)
      • "alpha" : angle of the projection of \(\vec{q}\) on the \(yOz\) plan and \(\vec{y}\)
    • mode: "q2"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters: No parameter
  3. "qper_qpar":
    • pseudo axes:
      • "qper" : perpendicular component of \(\vec{q}\) along the normal of the sample surface
      • "qpar" : parallel component of \(\vec{q}\)
    • mode: "qper_qpar"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
  4. "tth2":
    • pseudo axes:
      • "tth" : the \(2 \theta\) angle
      • "alpha" : angle of the projection of \(\vec{q}\) on the \(yOz\) plan and \(\vec{y}\)
    • mode: "tth2"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters: No parameter
  5. "incidence":
    • pseudo axes:
      • "incidence" : incidence of the incomming beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "incidence"
      • axes (read) : "beta", "mu", "omega"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
  6. "emergence":
    • pseudo axes:
      • "emergence" : incidence of the outgoing beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "emergence"
      • axes (read) : "beta", "mu", "omega", "gamma", "delta"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)

3.13 TwoC

3.13.1 Axes:

  • "omega": rotation around the [0.0, -1.0, 0.0] axis
  • "tth": rotation around the [0.0, -1.0, 0.0] axis

3.13.2 Engines:

3.14 ZAXIS

3.14.1 Axes:

  • "mu": rotation around the [0.0, 0.0, 1.0] axis
  • "omega": rotation around the [0.0, -1.0, 0.0] axis
  • "delta": rotation around the [0.0, -1.0, 0.0] axis
  • "gamma": rotation around the [0.0, 0.0, 1.0] axis

3.14.2 Engines:

  1. "hkl":
    • pseudo axes:
      • "h" : h coordinate of the diffracting plan
      • "k" : k coordinate of the diffracting plan
      • "l" : l coordinate of the diffracting plan
    • mode: "zaxis"
      • axes (read) : "mu", "omega", "delta", "gamma"
      • axes (write): "omega", "delta", "gamma"
      • parameters: No parameter
    • mode: "reflectivity"
      • axes (read) : "mu", "omega", "delta", "gamma"
      • axes (write): "mu", "omega", "delta", "gamma"
      • parameters: No parameter
  2. "q2":
    • pseudo axes:
      • "q" : the norm of \(\vec{q}\)
      • "alpha" : angle of the projection of \(\vec{q}\) on the \(yOz\) plan and \(\vec{y}\)
    • mode: "q2"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters: No parameter
  3. "qper_qpar":
    • pseudo axes:
      • "qper" : perpendicular component of \(\vec{q}\) along the normal of the sample surface
      • "qpar" : parallel component of \(\vec{q}\)
    • mode: "qper_qpar"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
  4. "tth2":
    • pseudo axes:
      • "tth" : the \(2 \theta\) angle
      • "alpha" : angle of the projection of \(\vec{q}\) on the \(yOz\) plan and \(\vec{y}\)
    • mode: "tth2"
      • axes (read) : "gamma", "delta"
      • axes (write): "gamma", "delta"
      • parameters: No parameter
  5. "incidence":
    • pseudo axes:
      • "incidence" : incidence of the incomming beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "incidence"
      • axes (read) : "mu", "omega"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)
  6. "emergence":
    • pseudo axes:
      • "emergence" : incidence of the outgoing beam.
      • "azimuth" : azimuth of the sample surface (projection of \(\vec{n}\) on the \(yOz\) plan
    • mode: "emergence"
      • axes (read) : "mu", "omega", "delta", "gamma"
      • axes (write):
      • parameters:
        • x [0.0]: the x coordinate of the surface \(\vec{n}\)
        • y [1.0]: the y coordinate of the surface \(\vec{n}\)
        • z [0.0]: the z coordinate of the surface \(\vec{n}\)

4 Developpement

4.1 Getting hkl

To get hkl, you can download the last stable version from sourceforge or if you want the latest development version use git or msysgit on windows system and do:

git clone git://repo.or.cz/hkl.git

or:

git clone http://repo.or.cz/r/hkl.git (slower)

then checkout the next branch like this:

cd hkl
git checkout -b next origin/next

4.2 Building hkl

To build hkl you need Python 2.3+ the GNU Scientific Library 1.12 and GLib-2.0 >= 2.3.4:

./configure --disable-gui
make
sudo make install

you can also build a GUI interfaces which use gtk:

./configure
make
sudo make install

optionnaly you can build an experimental libhkl3d library (no public API for now) which is used by the GUI to display and compute diffractometer collisions (only the K6C model). To build it you need also gtkglext and bullet 2.82:

./configure --enable-hkl3d
make
sudo make install

if you want to work on the documentation you need the extra

On Debian/Ubuntu you just need to install

sudo apt-get install emacs dvipng emacs-goodies-el org-mode
./configure --enable-gtk-doc
make
make html

nevertheless if you do not want to build the documentation you can do:

./configure --disable-hkl-doc

4.3 Hacking hkl

4.3.1 Bug reporting

You can find the bug tracker here libhkl

  • Debian/Ubuntu:
    reportbug hkl
    
  • Other OS

    You just need to send an email

4.3.2 Providing patches

you can send your patch to Picca Frédéric-Emmanuel using git

Here a minimalist example of the workflow to prepare and send patches for integration into the hkl library. Suppose you wan to add a new feature, you need first to create a new branch from the next one:

git checkout -b my-next next

hack, hack:

git commit -a

more hacks:

git commit -a

now that your new feature is ready, you can send by email your work using git format-patch for review:

git format-patch origin/next

which will generate a bunch of 0001\_xxx, 0002\_xxx, … patches

Then you can configure git send-email in order to send the patches for review.

git config sendemail.to "picca@synchrotron-soleil.fr"

and send then with this command:

git send-email 0001-xxx.patch, 0002-xxx.patch, ...

If it does not work you can use your usually email software and send these generated patches to the author.

4.4 Howto's

4.4.1 Add a diffractometer

To add a new diffractometer, you just need to copy the hkl/hkl-engine-template.c into hkl/hkl-engine-INSTITUT-BEAMLINE-INSTRUMENT.c where you replace the upper case with the appropriate values.

The template file is compiled during the build process to ensure that it is always valid.

Then you just need to follow the instruction found in the template. If you need some precision about the process, do not hesitate to contact the main author.

do not forgot also to add this new file into hkl/Makefile.am with other diffractometers in the hkl_c_sources variable (please keep the alphabetic order).

4.4.2 Work on the documentation

The documentation system is written with org-mode, and the babel extension which allow to introspect the library and generate part of the doc using the hkl library. Python code is executed during the build process to generate the Diffractometer section of the documentation. To work on the doc and test the embedded python code it is necessary to setup a few environment variables and start emacs with the right LD_LIBRARY_PATH. In order to simplify the process a make target was written. You just need to type:

cd Documentation
make doc-edit

and start to contribute.

If you do not have emacs, you can nevertheless contribute by editing the Documentation/hkl.org.in file which is text only.

The most expected contributions are for now:

  • english correctness
  • a nicer css

5 Bindings

The hkl library use the gobject-introspection to provide automatic binding for a few languages.

5.1 Python

You can test the binding directly from the source directory with these commandes if ipython is installed.

cd tests/bindings
make ipython

then you have the Hkl module preloaded into the ipython environment.

hkl computation:

has you can see there is 4 available solutions.

let's compute an hkl trajectory and select the first solution.

if we look at the 3 other solutions we can see that there is a problem of continuity at the begining of the trajectory.

hey what's happend with theses solutions ! let's look closely to real numbers. the last column is the distance to the diffractometer current position. This distance is for now express like this:

\(\sum_{axes} \left|\text{current position} - \text{target position}\right|\)

[0.0, 119.99999999999999, 0.0, -90.0, 0.0, 59.99999999999999] 0.0
[0.0, -119.99999999999999, 0.0, -90.0, 0.0, -59.99999999999999] 6.28318530718
[0.0, -60.00000000000005, 0.0, 90.0, 0.0, 59.99999999999999] 6.28318530718
[0.0, 60.00000000000001, 0.0, 90.0, 0.0, -59.99999999999999] 6.28318530718

[0.0, 117.7665607657826, 7.456826294401656, -92.39856410531434, 0.0, 60.33024982425957] 0.216753826612
[0.0, -57.436310940366894, -7.456826294401656, 92.39856418853617, 0.0, 60.33024982425957] 6.41621345188
[0.0, 62.2334392342174, -7.456826294401656, 92.39856410531434, 0.0, -60.33024982425957] 6.42197739723
[0.0, -122.5636890596331, 7.456826294401656, -92.3985641885362, 0.0, -60.33024982425957] 6.50570308205

[0.0, 115.89125602137928, 14.781064139466098, -94.7660423112577, 0.0, 61.314597086440706] 0.219062698235
[0.0, -125.42334103772737, 14.781064139466098, -94.7660427050904, 0.0, -61.314597086440706] 6.53671995288
[0.0, -54.57665896227262, -14.781064139466098, 94.76604270509038, 0.0, 61.314597086440706] 6.67989976726
[0.0, 64.10874397862072, -14.781064139466098, 94.7660423112577, 0.0, -61.314597086440706] 6.71437170098

[0.0, 114.39338605351007, 21.85448296702796, -97.074145033719, 0.0, 62.93506298693471] 0.218163667981
[0.0, -128.54167683157993, 21.85448296702796, -97.07414574435087, 0.0, -62.93506298693471] 6.59846359365
[0.0, -51.45832316842005, -21.85448296702796, 97.07414574435087, 0.0, 62.93506298693471] 6.93673746356
[0.0, 65.60661394648993, -21.85448296702796, 97.074145033719, 0.0, -62.93506298693471] 7.03385205725

[0.0, 113.28316795475283, 28.583837575232764, -99.29953499008337, 0.0, 65.16540747008955] 0.21459359225
[0.0, -131.88223933078322, 28.583837575232764, -99.29953638594702, 0.0, -65.16540747008955] 6.69038531388
[0.0, -48.11776066921677, -28.583837575232764, 99.29953638594702, 0.0, 65.16540747008955] 7.18296350386
[0.0, 66.71683204524717, -28.583837575232764, 99.29953499008337, 0.0, -65.16540747008955] 7.37556986959

[0.0, 112.56286877075006, 34.90573305321372, -101.42496979586187, 0.0, 67.97568017857415] 0.209053830457
[0.0, -135.4128111996365, 34.90573305321372, -101.42497263302461, 0.0, -67.97568017857415] 6.81174779784
[0.0, -44.58718880036348, -34.90573305321372, 101.4249726330246, 0.0, 67.97568017857415] 7.41581162393
[0.0, 67.43713122924994, -34.90573305321372, 101.42496979586187, 0.0, -67.97568017857415] 7.7353201851

[0.0, 112.2291126083182, 40.78594007247402, -103.43941832567457, 0.0, 71.33706722449408] 0.202280147961
[0.0, -139.10795451001587, 40.78594007247402, -103.43942357602316, 0.0, -71.33706722449408] 6.96173845391
[0.0, -40.89204548998411, -40.78594007247402, 103.43942357602312, 0.0, 71.33706722449408] 7.63358787543
[0.0, 67.7708873916818, -40.78594007247402, 103.43941832567457, 0.0, -71.33706722449408] 8.10986069093

[0.0, 112.27578927291766, 46.214916130901734, -105.33741042812996, 0.0, 75.22640762217479] 0.196576175748
[0.0, -142.95061850160724, 46.214916130901734, -105.3374188005596, 0.0, -75.22640762217479] 7.13962155618
[0.0, -37.04938149839278, -46.214916130901734, 105.33741880055959, 0.0, 75.22640762217479] 7.83557762281
[0.0, 67.72421072708234, -46.214916130901734, 105.33741042812996, 0.0, -75.22640762217479] 8.49706672677

[0.0, 112.697137434232, 51.201667684695856, -107.11797492933192, 0.0, 79.63023536264535] 0.202327153157
[0.0, -146.9330984641471, 51.201667684695856, -107.11798610058318, 0.0, -79.63023536264535] 7.34491897177
[0.0, -33.0669015358529, -51.201667684695856, 107.11798610058317, 0.0, 79.63023536264535] 8.02185610877
[0.0, 67.30286256576798, -51.201667684695856, 107.11797492933192, 0.0, -79.63023536264535] 8.89597005568

[0.0, 113.49085964586432, 55.76762791023837, -108.78347437395287, 0.0, 84.54867879242364] 0.208455586312
[0.0, -151.05782007465257, 55.76762791023837, -108.78348605483542, 0.0, -84.54867879242364] 7.57761473366
[0.0, -28.942179925347414, -55.76762791023837, 108.78348605483538, 0.0, 84.54867879242364] 8.19307323084
[0.0, 66.50914035413568, -55.76762791023837, 108.78347437395287, 0.0, -84.54867879242364] 9.30675279514

[0.0, 114.6614608037443, 59.941489465646214, -110.3385360479293, 0.0, 90.00000081324956] 0.215562935229
[0.0, -155.33854118146962, 59.941489465646214, -110.33854432979601, 0.0, -89.99999918675044] 7.83839602383
[0.0, -24.661458818530395, -59.941489465646214, 110.33854432979601, 0.0, 90.00000081324956] 8.3502621071
[0.0, 65.3385391962557, -59.941489465646214, 110.3385360479293, 0.0, -89.99999918675044] 9.7307712883

as you can see for the first point of the trajectory, the 2nd, 3rd and 4th solutions have identical distances to the current position of the diffractometer so they are un-ordered:

[0.0, 119.99999999999999, 0.0, -90.0, 0.0, 59.99999999999999] 0.0
[0.0, -119.99999999999999, 0.0, -90.0, 0.0, -59.99999999999999] 6.28318530718
[0.0, -60.00000000000005, 0.0, 90.0, 0.0, 59.99999999999999] 6.28318530718
[0.0, 60.00000000000001, 0.0, 90.0, 0.0, -59.99999999999999] 6.28318530718

then the problem arise with the second and third solution. you can see a sort of reorganisation of the solution. 2 -> 3, 3 -> 4 and 4 -> 2 then the order will stick unchanged until the end of the trajectory. this is because the distance is computed relatively to the current position of the diffractometer.:

[0.0, 117.7665607657826, 7.456826294401656, -92.39856410531434, 0.0, 60.33024982425957] 0.216753826612
[0.0, -57.436310940366894, -7.456826294401656, 92.39856418853617, 0.0, 60.33024982425957] 6.41621345188
[0.0, 62.2334392342174, -7.456826294401656, 92.39856410531434, 0.0, -60.33024982425957] 6.42197739723
[0.0, -122.5636890596331, 7.456826294401656, -92.3985641885362, 0.0, -60.33024982425957] 6.50570308205

[0.0, 115.89125602137928, 14.781064139466098, -94.7660423112577, 0.0, 61.314597086440706] 0.219062698235
[0.0, -125.42334103772737, 14.781064139466098, -94.7660427050904, 0.0, -61.314597086440706] 6.53671995288
[0.0, -54.57665896227262, -14.781064139466098, 94.76604270509038, 0.0, 61.314597086440706] 6.67989976726
[0.0, 64.10874397862072, -14.781064139466098, 94.7660423112577, 0.0, -61.314597086440706] 6.71437170098

warning

when you compute a trajectory, start from a valid position (the starting point must be the real first point of your trajectory) then use only the closest solution for the next points of the trajectory. (first solution of the geometries list)

6 Releases

6.1 5.0.0.2449

6.1.1 DONE add emergence on all e4c diffractometers <2017-03-16 Thu>

The emergence pseudo axis is was added to SOLEIL MARS and E4CV

6.1.2 DONE Fix for multiarch (headers) <2016-05-04 mer.>

The ccan_config.h generated file is arch specific. It is then necessary to install this file under /usr/include/<triplet> on Debian like systems. This way it will be possible to co-installa 32/64 bit version of hkl, or to do cross-compilation (arm on x86_64, etc…)

6.1.3 DONE Fix the FTBFS with the new bullet 2.86.1 version <2017-08-13 dim.>

In order to update the internal structures of Hkl3DObject (the is-colliding member), we were using a callback which became un-effectiv with this new version of bullet. The logic was rewritten in order to be much more efficent using the manifold informations. Now we iterate on Hkl3DObject object only once (n) complexity instead of (n²) with the previous one.

6.2 5.0.0.2080 <2016-04-27 mer.>

6.2.1 DONE HklEngine <2016-01-20 mer.>

emergence_fixed for the SOLEIL SIX MED 2+2 geometry.

6.2.2 DONE HklVector <2016-02-09 mar.>

The hkl_vector_init method is now public.

6.2.3 DONE HklParameter <2016-02-25 Thu>

at the end of the computation all solutions are filtered in order to check that they are valid (min < value < range). BUT for a rotation axis this check was instead (min < value % 2pi < max).

6.2.4 DONE HklGeometry <2016-04-20 mer.>

Add hkl_geometry_[sample/detector]_rotation_get method. It is now possible to get the sample or the detector rotation expressed as a HklQuaternion.

qr = geometry.sample_rotation_get(sample)
qd = geometry.detector_rotation_get(detector)

6.2.5 DONE HklQuaternion <2016-04-20 mer.>

Add hkl_quaternion_to_matrix in order to convert a HklQuaternion into a HklMatrix. Then you just need to convert this HklMatrix into a numpy array when used from the python binding

def hkl_matrix_to_numpy(m):
    M = empty((3, 3))
    for i in range(3):
        for j in range(3):
            M[i, j] = m.get(i, j)
    return M


M = hkl_matrix_to_numpy(q.to_matrix())

6.2.6 DONE Soleil Sirius Turret <2016-04-26 mar.>

Add the basepitch axis which rotate around \(\vec{y}\) in mrad.

6.3 4.99.99.1955 <2015-07-15 mer.>

Add the ccan_config.h public header. This header is generated with the ccan configurator program.

6.4 4.99.99.1950 <2015-07-07 mar.>

Fix an FTBFS observed on the sparc arch

6.5 4.99.99.1949 <2015-07-03 ven.>

6.5.1 DONE HklInterval <2015-07-03 ven.>

hkl_interval_cmp was wrong. Now the comparison is done between HKL_EPSILON and the distance between minimum and maximum. This problem was triggered first on ppc64el architecture.

6.5.2 DONE PATH_MAX <2015-07-03 ven.>

Replace getcwd called by get_current_dir_path instead in order to avoid PATH_MAX which is not available on hurd.

6.6 4.99.99.1946 <2015-06-30 mar.>

6.6.1 DONE HklEngine

  1. "emergence" <2015-06-22 lun.>

    Add a new emergence engine which contain only one pseudo axis.

    • emergence the outgoing beam emergence from the sample's surface.
    • azimuth the sample's surface azimuth.

6.7 4.99.99.1940 <2015-05-04 lun.>

6.7.1 DONE HklLattice add an hkl_lattice_volume_get

volume = hkl_lattice_volume_get(lattice);

6.7.2 DONE HklEngine

  1. "nrj, sample, … dependencies" <2015-03-24 mar.>

    Add the hkl_engine_dependencies_get method which return if the HklEngine depends of the axes, the energy, or the sample. the possible values are stored in the HklEngineDependencies enum.

    dependencies = hkl_engine_dependencies_get(engine);
    if (dependencies & HKL_ENGINE_DEPENDENCIES_ENERGY) {
            ...
    }
    if (dependencies & HKL_ENGINE_DEPENDENCIES_SAMPLE) {
            ...
    }
    ...
    
  2. "tth2" <2015-04-03 ven>

    Add a new hkl engine which contain two pseudo axes.

    • tth two times the diffraction angle \(\theta\)
    • alpha the azimuth of q in the zOy plan.
  3. "incidence" <2015-04-21 mar.>

    Add a new incidence engine which contain only one pseudo axis.

    • incidence the incoming beam incidence on the sample surface.
    • azimuth the sample surface azimuth.
  4. hkl_engine_parameter_set <2015-05-04 lun.>

    Fix a bug and expose the method in the binding.

  5. general
    • use #define AXIS "axis_name" in all the code to set the axes names at only one place. <2015-04-23 jeu.>

6.7.3 DONE HklLattice expose in the binding the _x_get/set methods <2015-03-24 mar.>

Now you can use hkl_lattice_x_get where x=a, b, c, alpha, beta, gamma in the bindings.

a = lattice.a_get()
lattice.a_set(a)

6.7.4 DONE HklSampleReflection expose the flag_get/set and geometry_get/set method <2015-03-24 mar.>

It is now possible to change the geometry stored in a reflection via the bindings.

flag = reflection.flag_get()
reflection.flag_set(flag)

geometry = reflection.geometry_get()
geometry.axes_values_set([omega, chi, phi, ...])
reflection.geometry_set(geometry)

7 Todo

7.1 hkl

7.1.1 TODO HklEngine q/q2

Fix all these engines… This engine takes into account only the gamma and delta axes. so diffractometers with 3 axes for the detector are wrong. It would be nice to take into account all the detector holder AND the position of the detecteor on the diffractometer arms (for now the detector is always on the last axis).

7.1.2 TODO HklSource

Create a parameter for the wavelength. This is just internally for the futur trajectory system, so no need to change the signature of hkl_geometry_vawelength get/set

7.1.3 TODO SOLEIL SIRIUS KAPPA

Investigation of a problem saw on Sirius Kappa geometry. The idea is to compute a trajectory from \([0, 0, 1]\) to \([0, 0, 6]\) on a \(GaAs\) sample.

Geometry SOLEIL SIRIUS KAPPA (Source 1.4586370000000007e-9 m) (fromList [-0.5193202,40.795148838481424,134.08834052117254,-55.57809067120416,-2.23369e-2,14.824478553649875]) (Just [Parameter "mu" (-0.5193202) (Range (-180.0) 180.0),Parameter "komega" 40.795148838481424 (Range (-180.0) 180.0),Parameter "kappa" 134.08834052117254 (Range (-180.0) 180.0),Parameter "kphi" (-55.57809067120416) (Range (-180.0) 180.0),Parameter "delta" (-2.23369e-2) (Range (-180.0) 180.0),Parameter "gamma" 14.824478553649875 (Range (-180.0) 180.0)])
[Engine "hkl" [Parameter "h" 2.1481674408578524e-8 (Range (-1.0) 1.0),Parameter "k" 6.392014061803081e-8 (Range (-1.0) 1.0),Parameter "l" 1.0000000132413767 (Range (-1.0) 1.0)] (Mode "bissector_vertical" []),Engine "eulerians" [Parameter "omega" 7.412239314132745 (Range (-180.0) 180.0),Parameter "chi" 89.72020738176312 (Range (-180.0) 180.0),Parameter "phi" 91.03899980444716 (Range (-180.0) 180.0)] (Mode "eulerians" [Parameter "solutions" 1.0 (Range 0.0 1.0)]),Engine "psi" [Parameter "psi" 154.5513657893786 (Range (-180.0) 180.0)] (Mode "psi_vertical_soleil_sirius_kappa" [Parameter "h2" 1.0 (Range (-1.0) 1.0),Parameter "k2" 1.0 (Range (-1.0) 1.0),Parameter "l2" 1.0 (Range (-1.0) 1.0)]),Engine "q2" [Parameter "q" 1.1114190632688228 (Range 0.0 1.0),Parameter "alpha" 89.91560430137815 (Range (-180.0) 180.0)] (Mode "q2" []),Engine "qper_qpar" [Parameter "qper" 1.1114162413072137 (Range (-1.0) 1.0),Parameter "qpar" 2.5045470426602284e-3 (Range (-1.0) 1.0)] (Mode "qper_qpar" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "tth2" [Parameter "tth" 14.824495004588014 (Range (-180.0) 180.0),Parameter "alpha" 89.91560430137815 (Range (-180.0) 180.0)] (Mode "tth2" []),Engine "incidence" [Parameter "incidence" 7.414401593159588 (Range (-180.0) 180.0),Parameter "azimuth" 89.78541978058817 (Range (-180.0) 180.0)] (Mode "incidence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "emergence" [Parameter "emergence" 7.410055570443473 (Range (-180.0) 180.0),Parameter "azimuth" 89.78541978058817 (Range (-180.0) 180.0)] (Mode "emergence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)])]
Geometry SOLEIL SIRIUS KAPPA (Source 1.4586370000000007e-9 m) (fromList [-0.5193202,47.97247473743512,134.654265266118,124.92415016158583,-2.23369e-2,29.904632884360968]) (Just [Parameter "mu" (-0.5193202) (Range (-180.0) 180.0),Parameter "komega" 47.97247473743512 (Range (-180.0) 180.0),Parameter "kappa" 134.654265266118 (Range (-180.0) 180.0),Parameter "kphi" 124.92415016158583 (Range (-180.0) 180.0),Parameter "delta" (-2.23369e-2) (Range (-180.0) 180.0),Parameter "gamma" 29.904632884360968 (Range (-180.0) 180.0)])
[Engine "hkl" [Parameter "h" (-1.3839931497468412e-9) (Range (-1.0) 1.0),Parameter "k" (-4.913404854447784e-10) (Range (-1.0) 1.0),Parameter "l" 2.000000003360829 (Range (-1.0) 1.0)] (Mode "bissector_vertical" []),Engine "eulerians" [Parameter "omega" 14.95231642186499 (Range (-180.0) 180.0),Parameter "chi" 89.9575990161042 (Range (-180.0) 180.0),Parameter "phi" 271.9039918460157 (Range (-180.0) 180.0)] (Mode "eulerians" [Parameter "solutions" 1.0 (Range 0.0 1.0)]),Engine "psi" [Parameter "psi" (-26.325999847139332) (Range (-180.0) 180.0)] (Mode "psi_vertical_soleil_sirius_kappa" [Parameter "h2" 1.0 (Range (-1.0) 1.0),Parameter "k2" 1.0 (Range (-1.0) 1.0),Parameter "l2" 1.0 (Range (-1.0) 1.0)]),Engine "q2" [Parameter "q" 2.2228381008394895 (Range 0.0 1.0),Parameter "alpha" 89.96116221471468 (Range (-180.0) 180.0)] (Mode "q2" []),Engine "qper_qpar" [Parameter "qper" 2.222832456913507 (Range (-1.0) 1.0),Parameter "qpar" (-5.009095284686147e-3) (Range (-1.0) 1.0)] (Mode "qper_qpar" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "tth2" [Parameter "tth" 29.90464045486422 (Range (-180.0) 180.0),Parameter "alpha" 89.96116221471468 (Range (-180.0) 180.0)] (Mode "tth2" []),Engine "incidence" [Parameter "incidence" 14.952081490954424 (Range (-180.0) 180.0),Parameter "azimuth" 90.09480115642252 (Range (-180.0) 180.0)] (Mode "incidence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "emergence" [Parameter "emergence" 14.952481262345229 (Range (-180.0) 180.0),Parameter "azimuth" 90.09480115642252 (Range (-180.0) 180.0)] (Mode "emergence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)])]
Geometry SOLEIL SIRIUS KAPPA (Source 1.4586370000000007e-9 m) (fromList [-0.5193202,56.25907471532187,133.92128004831832,-55.45556970293517,-2.23369e-2,45.53873596992208]) (Just [Parameter "mu" (-0.5193202) (Range (-180.0) 180.0),Parameter "komega" 56.25907471532187 (Range (-180.0) 180.0),Parameter "kappa" 133.92128004831832 (Range (-180.0) 180.0),Parameter "kphi" (-55.45556970293517) (Range (-180.0) 180.0),Parameter "delta" (-2.23369e-2) (Range (-180.0) 180.0),Parameter "gamma" 45.53873596992208 (Range (-180.0) 180.0)])
[Engine "hkl" [Parameter "h" 8.37724528421826e-9 (Range (-1.0) 1.0),Parameter "k" 2.018612859089285e-8 (Range (-1.0) 1.0),Parameter "l" 2.999999983141756 (Range (-1.0) 1.0)] (Mode "bissector_vertical" []),Engine "eulerians" [Parameter "omega" 22.76936798418434 (Range (-180.0) 180.0),Parameter "chi" 89.64969149765572 (Range (-180.0) 180.0),Parameter "phi" 91.0547235659273 (Range (-180.0) 180.0)] (Mode "eulerians" [Parameter "solutions" 1.0 (Range 0.0 1.0)]),Engine "psi" [Parameter "psi" 154.50191592522592 (Range (-180.0) 180.0)] (Mode "psi_vertical_soleil_sirius_kappa" [Parameter "h2" 1.0 (Range (-1.0) 1.0),Parameter "k2" 1.0 (Range (-1.0) 1.0),Parameter "l2" 1.0 (Range (-1.0) 1.0)]),Engine "q2" [Parameter "q" 3.334257126919726 (Range 0.0 1.0),Parameter "alpha" 89.97807925598289 (Range (-180.0) 180.0)] (Mode "q2" []),Engine "qper_qpar" [Parameter "qper" 3.334248661038927 (Range (-1.0) 1.0),Parameter "qpar" 7.513639271725189e-3 (Range (-1.0) 1.0)] (Mode "qper_qpar" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "tth2" [Parameter "tth" 45.53874024285007 (Range (-180.0) 180.0),Parameter "alpha" 89.97807925598289 (Range (-180.0) 180.0)] (Mode "tth2" []),Engine "incidence" [Parameter "incidence" 22.771374111123095 (Range (-180.0) 180.0),Parameter "azimuth" 89.8380685773065 (Range (-180.0) 180.0)] (Mode "incidence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "emergence" [Parameter "emergence" 22.767244039797937 (Range (-180.0) 180.0),Parameter "azimuth" 89.8380685773065 (Range (-180.0) 180.0)] (Mode "emergence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)])]
Geometry SOLEIL SIRIUS KAPPA (Source 1.4586370000000007e-9 m) (fromList [-0.5193202,64.64191214924969,133.78682078017752,-55.41938838621407,-2.23369e-2,62.132688461209455]) (Just [Parameter "mu" (-0.5193202) (Range (-180.0) 180.0),Parameter "komega" 64.64191214924969 (Range (-180.0) 180.0),Parameter "kappa" 133.78682078017752 (Range (-180.0) 180.0),Parameter "kphi" (-55.41938838621407) (Range (-180.0) 180.0),Parameter "delta" (-2.23369e-2) (Range (-180.0) 180.0),Parameter "gamma" 62.132688461209455 (Range (-180.0) 180.0)])
[Engine "hkl" [Parameter "h" 9.177457430250849e-9 (Range (-1.0) 1.0),Parameter "k" 2.5693823994163015e-8 (Range (-1.0) 1.0),Parameter "l" 3.9999999929703476 (Range (-1.0) 1.0)] (Mode "bissector_vertical" []),Engine "eulerians" [Parameter "omega" 31.06634423136446 (Range (-180.0) 180.0),Parameter "chi" 89.5927920859556 (Range (-180.0) 180.0),Parameter "phi" 91.00504369590071 (Range (-180.0) 180.0)] (Mode "eulerians" [Parameter "solutions" 1.0 (Range 0.0 1.0)]),Engine "psi" [Parameter "psi" 154.51996903181714 (Range (-180.0) 180.0)] (Mode "psi_vertical_soleil_sirius_kappa" [Parameter "h2" 1.0 (Range (-1.0) 1.0),Parameter "k2" 1.0 (Range (-1.0) 1.0),Parameter "l2" 1.0 (Range (-1.0) 1.0)]),Engine "q2" [Parameter "q" 4.44567618639551 (Range 0.0 1.0),Parameter "alpha" 89.9881895320358 (Range (-180.0) 180.0)] (Mode "q2" []),Engine "qper_qpar" [Parameter "qper" 4.445664898550648 (Range (-1.0) 1.0),Parameter "qpar" 1.0018187400499787e-2 (Range (-1.0) 1.0)] (Mode "qper_qpar" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "tth2" [Parameter "tth" 62.13269076337942 (Range (-180.0) 180.0),Parameter "alpha" 89.9881895320358 (Range (-180.0) 180.0)] (Mode "tth2" []),Engine "incidence" [Parameter "incidence" 31.068363501362125 (Range (-180.0) 180.0),Parameter "azimuth" 89.83747231179481 (Range (-180.0) 180.0)] (Mode "incidence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "emergence" [Parameter "emergence" 31.064152026450454 (Range (-180.0) 180.0),Parameter "azimuth" 89.83747231179481 (Range (-180.0) 180.0)] (Mode "emergence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)])]
Geometry SOLEIL SIRIUS KAPPA (Source 1.4586370000000007e-9 m) (fromList [-0.5193202,73.83399863752925,133.64586701159254,-55.35712475482595,-2.23369e-2,80.33702663350934]) (Just [Parameter "mu" (-0.5193202) (Range (-180.0) 180.0),Parameter "komega" 73.83399863752925 (Range (-180.0) 180.0),Parameter "kappa" 133.64586701159254 (Range (-180.0) 180.0),Parameter "kphi" (-55.35712475482595) (Range (-180.0) 180.0),Parameter "delta" (-2.23369e-2) (Range (-180.0) 180.0),Parameter "gamma" 80.33702663350934 (Range (-180.0) 180.0)])
[Engine "hkl" [Parameter "h" 2.7577312257761425e-9 (Range (-1.0) 1.0),Parameter "k" 7.650403950118726e-9 (Range (-1.0) 1.0),Parameter "l" 4.999999999622215 (Range (-1.0) 1.0)] (Mode "bissector_vertical" []),Engine "eulerians" [Parameter "omega" 40.168513316578995 (Range (-180.0) 180.0),Parameter "chi" 89.53300638651663 (Range (-180.0) 180.0),Parameter "phi" 90.9773899242238 (Range (-180.0) 180.0)] (Mode "eulerians" [Parameter "solutions" 1.0 (Range 0.0 1.0)]),Engine "psi" [Parameter "psi" 154.50326819560394 (Range (-180.0) 180.0)] (Mode "psi_vertical_soleil_sirius_kappa" [Parameter "h2" 1.0 (Range (-1.0) 1.0),Parameter "k2" 1.0 (Range (-1.0) 1.0),Parameter "l2" 1.0 (Range (-1.0) 1.0)]),Engine "q2" [Parameter "q" 5.557095242340622 (Range 0.0 1.0),Parameter "alpha" 89.99619673890915 (Range (-180.0) 180.0)] (Mode "q2" []),Engine "qper_qpar" [Parameter "qper" 5.557081132533362 (Range (-1.0) 1.0),Parameter "qpar" 1.2522734784728349e-2 (Range (-1.0) 1.0)] (Mode "qper_qpar" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "tth2" [Parameter "tth" 80.33702737486469 (Range (-180.0) 180.0),Parameter "alpha" 89.99619673890915 (Range (-180.0) 180.0)] (Mode "tth2" []),Engine "incidence" [Parameter "incidence" 40.17045932119529 (Range (-180.0) 180.0),Parameter "azimuth" 89.82724901343079 (Range (-180.0) 180.0)] (Mode "incidence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "emergence" [Parameter "emergence" 40.16632251480728 (Range (-180.0) 180.0),Parameter "azimuth" 89.82724901343079 (Range (-180.0) 180.0)] (Mode "emergence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)])]
Geometry SOLEIL SIRIUS KAPPA (Source 1.4586370000000007e-9 m) (fromList [-0.5193202,84.086619565407,134.11156620489382,125.37371040144704,-2.23369e-2,101.43713587367031]) (Just [Parameter "mu" (-0.5193202) (Range (-180.0) 180.0),Parameter "komega" 84.086619565407 (Range (-180.0) 180.0),Parameter "kappa" 134.11156620489382 (Range (-180.0) 180.0),Parameter "kphi" 125.37371040144704 (Range (-180.0) 180.0),Parameter "delta" (-2.23369e-2) (Range (-180.0) 180.0),Parameter "gamma" 101.43713587367031 (Range (-180.0) 180.0)])
[Engine "hkl" [Parameter "h" 8.392762843275724e-10 (Range (-1.0) 1.0),Parameter "k" 2.459154264227675e-9 (Range (-1.0) 1.0),Parameter "l" 6.0000000015375905 (Range (-1.0) 1.0)] (Mode "bissector_vertical" []),Engine "eulerians" [Parameter "omega" 50.718567936651276 (Range (-180.0) 180.0),Parameter "chi" 89.72999512595882 (Range (-180.0) 180.0),Parameter "phi" 272.0056587726913 (Range (-180.0) 180.0)] (Mode "eulerians" [Parameter "solutions" 1.0 (Range 0.0 1.0)]),Engine "psi" [Parameter "psi" (-26.58708882570157) (Range (-180.0) 180.0)] (Mode "psi_vertical_soleil_sirius_kappa" [Parameter "h2" 1.0 (Range (-1.0) 1.0),Parameter "k2" 1.0 (Range (-1.0) 1.0),Parameter "l2" 1.0 (Range (-1.0) 1.0)]),Engine "q2" [Parameter "q" 6.668514293021504 (Range 0.0 1.0),Parameter "alpha" 90.00451897705055 (Range (-180.0) 180.0)] (Mode "q2" []),Engine "qper_qpar" [Parameter "qper" 6.6684973612522915 (Range (-1.0) 1.0),Parameter "qpar" (-1.5027281967821613e-2) (Range (-1.0) 1.0)] (Mode "qper_qpar" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "tth2" [Parameter "tth" 101.43713499280318 (Range (-180.0) 180.0),Parameter "alpha" 90.00451897705055 (Range (-180.0) 180.0)] (Mode "tth2" []),Engine "incidence" [Parameter "incidence" 50.71877816056822 (Range (-180.0) 180.0),Parameter "azimuth" 90.20844936572345 (Range (-180.0) 180.0)] (Mode "incidence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "emergence" [Parameter "emergence" 50.71800112341318 (Range (-180.0) 180.0),Parameter "azimuth" 90.20844936572345 (Range (-180.0) 180.0)] (Mode "emergence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)])

As we can see the phi and kphi motor switch from time to time to another solution which is at around 180° of the other solutions.

sirius-s.svg

Figure 7: plot the [0,0,1] -> [0,0,6] trajectory from two different starting point and different step size.

sirius-m.svg

Figure 8: plot the [0,0,1] -> [0,0,6] idem previous figure but move the diffractometer.

sirius-m-zoom.svg

Figure 9: zoom on the 2 solutions.

traj_n.svg

Figure 10: plot the [0,0,1] -> [0,0,6] for different number of steps

7.1.4 TODO [0/2] PetraIII

  1. TODO computation problem

    Dear Teresa,

    Using the prruptest.txt ubmatrix I see that the value of psi is offset by 45 degrees. I expect it to be 0 degrees when azimuth reference vector is 0 0 1 that is along the beam. See below thereturned numbers. This might have to do with the definition of the beam axis in the controller. Otherwise now when I change reference vector by 90 degrees the computed value is changed by 90 degrees. That is a progress. Can you contact Frederic and ask him about this ?

    Best regards,

    Sonia

    See below p09/door/haspp09.01 1: setaz 1 0 0

    p09/door/haspp09.01 2: wh

    Engine: hkl

    Mode: psi_constant_vertical

    H K L = 0.00000 3.00605 -0.00000 Ref = 1.00000 0.00000 0.00000 Azimuth (Psi - calculated) = -45.00005 Azimuth (Psi - set) = 0.00000 Wavelength = 2.07957

    Delta Theta Chi Phi Mu Gamma 45.77575 22.88783 90.00000 182.85400 0.00000 -0.00000

    p09/door/haspp09.01 3: setaz 0 0 1

    p09/door/haspp09.01 4: wh

    Engine: hkl

    Mode: psi_constant_vertical

    H K L = 0.00000 3.00605 -0.00000 Ref = 0.00000 0.00000 1.00000 Azimuth (Psi - calculated) = -135.00005 Azimuth (Psi - set) = 0.00000 Wavelength = 2.07957

    Delta Theta Chi Phi Mu Gamma 45.77575 22.88783 90.00000 182.85400 0.00000 -0.00000

    where:

    Azimuth (Psi - calculated) is the value of the pseudomotor psi. Azimuth (Psi - set) is the value set in the parameter psi of the current mode.

    Hi Frederic,

    This is the UB matrix:

    Best regards,

    Sonia

    Created at 2015-01-21 12:35

    Crystal prruptest

    Wavelength 2.07957463938

    A 8.03656 B 8.03656 C 8.03656 Alpha 90.0 Beta 90.0 Gamma 90.0

    R0 0 0.0 1.0 0.0 0 1 0.0 14.8979 90.0 182.854 0.0 29.7959 R1 1 1.0 0.0 1.0 0 1 0.0 14.8979 0.0 182.854 0.0 29.7959

    Mode psi_constant_vertical

    PsiRef 0.0 0.0 1.0

    U00 -0.580 U01 0.000 U02 0.525 U10 0.000 U11 0.782 U12 -0.000 U20 -0.525 U21 -0.000 U22 -0.580

    Ux 179.999952315 Uy 42.14605 Uz -179.999932647

    SaveDirectory home/p09user/crystals

  2. TODO another question

    J'ai un probleme avec la position que le controlleur calcule avec la matrice UB que nous t'avons envoye. See sequence of emails echanges avec Teresa.

    >>>> I am at 0 3.00605 0 with phi -182 and psi calculated is -135 >>>> When I freeze psi at -135 and type ca 0 3.00605 0 the controller >> should return to me the positions at which I am. But no he tells me that I >> have to go to 178 degrees in phi that is turning by 360 degrees.

    Est-ce un probleme avec la trajectoire selectionnee ? Est-ce qu'il est possible de definir des cut-points comme dans spec avec ta librairie ?

7.1.5 TODO [2/4] HklParameter

  • [X] method to use min/max to check for the validity
  • [X] add a method to get the axis_v and quaternion of the HklAxis this method will return NULL if this is not relevant. hkl_parameter_axis_v_get and hkl_parameter_quaternion_get
  • [ ] degenerated an axis is degenerated if its position have no effect on the HklPseudoAxis calculus. Add a degenerated member to the axis. that way it would be possible to check a posteriori for this degenerescencence.
  • [ ] Add a description for each parameters.

7.1.6 TODO This will help for the documentation and the gui.

7.1.7 TODO HklGeometryList different method to help select a solution.

this select solution can depend on the geometry for example the kappa axis must be in one side of the plane.

7.1.8 TODO add a fit on the Hklaxis offsets.

7.1.9 TODO API to put a detector and a sample on the Geometry.

7.1.10 TODO HklSample

  1. TODO unit test: hkl_sample_affine.

    Check this: lattice=1.540000;1.540000;1.540000;90.000000;90.000000;90.000000;0;0;0;0;0;0 uxuyuz=0.000000;0.000000;0.000000 reflection=1.540000;0.159010;1.256718;0.796660;1;0.000000;0.000000;0.000000;0.000000;0.000000 reflection=1.540000;0.206208;0.342357;-0.080346;1;0.000000;0.000000;0.000000;0.000000;0.000000 reflection=1.540000;0.206208;0.342357;-0.080346;1;0.000000;0.000000;0.000000;0.000000;0.000000

    A, B, C, Alpha, Beta, Gamma, Ux, Uy, Uy: 17764892.133, 5793679.092, 15733785.198, 179.997, 179.999,452408725.23, -575727594.04, -1913661011.01 (affine) 1rst finetness

    all the reflections are non collinear the affine method should warn the user about this.

7.1.11 TODO HklEngine "zone"

7.1.12 TODO HklEngine "custom"

for now this pseudoaxis let you select the axis you want to use for the computation.

7.1.13 TODO HklEngine "q/q2" add a "reflectivity" mode

This mode should have the surface as parameters and the incident angle is equal to the emergence angle.

7.1.14 TODO create a macro to help compare two real the right way

fabs(a-b) < epsilon * max(1, abs(a), abs(b))

7.1.15 TODO add an hkl_sample_set_lattice_unit()

7.1.16 TODO SOLEIL SIXS

  1. DONE find the right solutions.   zaxis

    The cosinus and sinus properties are not enough to find the solution expected by the users. The idea is to use the Ewalds construction to generate a valid solution from the first one obtain numerically. The basic idea is to rotate the hkl vector around the last axis of the sample holder until it intersect again the Ewalds sphere. Then we just need to fit the detector position. This way the solution can be entirely generic (not geometry specific). Nevertheless it is necessary to propose this only for the hkl pseudo axes. I will add this special feature in the Mode. So it will be possible to add thoses special cases easily.

  2. TODO Add the DEP diffractometer geometry

    This diffractometer is a Newport one based on the kappa 6 circles ones. But instead of a kappa head, they use an Hexapod head. This head can be put horizontally or vertically.

7.1.17 TODO generalisation of the z-axis hkl solver

first we need the degenerated member of the Axis. thaht way it could be possible to find the last non degenerated axis for the detector fit.

7.1.18 TODO investigate the prigo geometry.

7.1.19 TODO augeas/elektra for the plugin configure part.

7.1.20 TODO logging

  1. TODO [1/2] add in a few methods.
    • [X] hkl_pseudo_axes_values_set
    • [ ] hkl_sample_affine
  2. TODO gir logging

    It would be nice to generate the library logging using the .gir information. So instead of writing the logging code for each method, it would be better to have a generic method for this purpose.

  3. TODO parsable logging information.

    A parsable logging format would help to setup some re-play unit test. This way it could help during the developpement process (modification of the hkl internals) to be confident that computation are ok.

7.1.21 TODO performances

  • Investigate liboil to speed calculation (in HklVector, HklMatrix and HklQuaternion)
  • Avoid to call hkl_engine_prepare_internal at each computation.

7.2 documentation

7.2.1 TODO [1/6] rewrite documentation in org-mode

  • [-] embedding code into the org file
    • [-] [1/4] python
      • [X] auto generation of the diffractometer descriptions
      • [ ] trajectories explanations
      • [ ] trajectories tests.
      • [ ] unit tests output ?
    • [ ] asymptote
  • [X] need to check if templates could be generated using the hkl python binding for all diffractometer geometries.
  • [ ] need to add a description for the diffractometer, the mode, the parameters.
  • [ ] need a nice css for the generated doc.
  • [ ] check if org-info.js could be usefull
  • [ ] add documentation explaining the sector-cuts a la hkl

7.3 [0/3] gui

  • [ ] change the color of fitparameter cells if they differ from the current sample values
  • [ ] check if a REPL could be integrated to provide an autocad like interface.
  • [ ] add tooltips using hkl_parameter_description_get for the pseudo axes and the mode parameters.

7.4 hkl3d

7.4.1 TODO add a method to find the 3D models in the right directories.

7.5 packaging

7.5.1 TODO add a .spec file for rpm generation.

Footnotes:

1

DEFINITION NOT FOUND.

2

DEFINITION NOT FOUND.

3

DEFINITION NOT FOUND.

4

DEFINITION NOT FOUND.

Author: Picca Frédéric-Emmanuel

Created: 2018-02-08 jeu. 11:07

Emacs 25.2.2 (Org mode 8.2.10)

Validate

hkl-5.0.0.2449/Documentation/figures/0000755000175000017500000000000013237020546017372 5ustar00piccapicca00000000000000hkl-5.0.0.2449/Documentation/figures/B_a.asy0000644000175000017500000000144413211074263020571 0ustar00piccapicca00000000000000import three; size(6cm); currentprojection=orthographic(1,0,0); currentlight=White; triple b1 = (1, 0, 0); triple b2 = (.31, .95, 0); triple b3 = (.4, .5, 0.76); triple a1 = cross(b2, b3); triple a2 = cross(b3, b1); triple a3 = cross(b1, b2); // orthonormal coordinates draw(Label("$\vec{x}$", 1), O--(2*X), gray, Arrow3()); draw(Label("$\vec{y}$", 1), O--(2*Y), gray, Arrow3()); draw(Label("$\vec{z}$", 1), O--(2*Z), gray, Arrow3()); // reciprocal space draw(Label("$\vec{b_1}$", 1), O--b1, blue, Arrow3()); draw(Label("$\vec{b_2}$", 1), O--b2, red, Arrow3()); draw(Label("$\vec{b_3}$", 1), O--b3, green, Arrow3()); // real space draw(Label("$\vec{a_1}$", 1), O--a1, cyan, Arrow3()); draw(Label("$\vec{a_2}$", 1), O--a2, magenta, Arrow3()); draw(Label("$\vec{a_3}$", 1), O--a3, yellow, Arrow3()); hkl-5.0.0.2449/Documentation/figures/4S+2D_reciprocal4.asy0000644000175000017500000000324612710332472023132 0ustar00piccapicca00000000000000import three; triple a = (1,0,0); triple b = (.31,.95,0); triple c = (.4,.5,0.76); currentprojection=orthographic(2 * (-0.5*X+Y+.5*Z)+ 3*Z + Y, target=3*Z+Y); currentlight=White; size(12cm); // orthonormal coordinates draw(Label("$\vec{x}$", 1), (-3*X)--(X), gray, Arrow3()); draw(Label("$\vec{y}$", 1), (-Y)--(Y), gray, Arrow3()); draw(Label("$\vec{z}$", 1), (-2*Z)--(2*Z), gray, Arrow3()); // La construction d'Ewald void ewald(triple ki, real gamma, real delta, real alpha, real phi) { real k = length(ki); triple kf = rotate(gamma, Z) * rotate(-delta, Y) * ki; triple Q = kf-ki; triple n = rotate(phi, Y) * rotate(alpha, X) * scale3(length(Q)) * Y; triple np = planeproject(Q, O) * n; triple xp = unit(Q); triple zp = cross(xp, -X); triple yp = length(np) * unit(cross(xp, zp)); // incomming and outgoing beam draw(Label("$\vec{k_i}$", .5, S), shift(-ki)*(O--ki), blue, Arrow3()); draw(Label("$\vec{k_f}$"), shift(-ki)*(O--kf), green, Arrow3()); draw(surface(plane(Q, ki)), blue+opacity(.3)); // diffraction vector draw(Label("$\vec{Q}$", 1), O--Q, red, Arrow3()); draw(circle(O, length(np), Q), red+dashed); // ref vector and its projection draw(Label("$\vec{n}$", 1), O--n, orange, Arrow3()); draw(O--np, gray, Arrow3()); draw(n--np, gray+dashed); // psi angle and its origin draw(O--yp, gray, Arrow3()); draw(Label("$\psi$"), arc(O, yp, np), red, ArcArrow3()); draw(surface(O--arc(O, yp, np)--cycle), red); // Ewalds sphere surface Ewalds = shift(-ki) * rotate(90, Y) * scale3(k) * unithemisphere; draw(Ewalds, green+opacity(0.3), render(compression=Zero,merge=true)); dot(Label("C"), -ki); } ewald(2*X, -30, 40, 60, -60); hkl-5.0.0.2449/Documentation/figures/diffractometer.asy0000644000175000017500000001214612710332472023111 0ustar00piccapicca00000000000000import three; import solids; restricted surface unitsolidcylinder = surface(unitcylinder, unitdisk, shift(Z)*unitdisk); surface torus(real R, real a, real theta1, real theta2) { //return surface(revolution(reverse(Circle(R*X,a,Y,32)),Z,90,345)); triple f(pair t) { return ((R+a*cos(t.y))*cos(t.x),(R+a*cos(t.y))*sin(t.x),a*sin(t.y)); } surface s = surface(f, (radians(theta1),0), (radians(theta2),2pi), 8, 8, Spline); return s; } surface carrow(real radius, real a, real theta1, real theta2, int direction) { surface s; s.append(torus(radius, a, theta1, theta2)); if (direction < 0) s.append( rotate(theta1, Z) * shift(radius, 0, 0) * rotate(90., X) * scale(2*a, 2*a, 6*a) * unitsolidcone ); else s.append( rotate(theta2, Z) * shift(radius, 0, 0) * rotate(-90., X) * scale(2*a, 2*a, 6*a) * unitsolidcone ); return s; } surface tpp(real height, real radius) { // put the centre of the top surface of the cube at the origin surface s=shift(-0.5, -0.5, -1) * unitcube; s = shift(0, 0, -height) * scale(3*radius, 3*radius, radius/5) * s; return s; } surface _support(real hight, real radius, int arrow1, int arrow2, bool draw_cylinder=false) { surface s; real alpha = 0.1; real dx = alpha * radius; real dz = radius * sqrt(alpha * (2-alpha)); // becarefulle reference of the unitsolidcylinder and the unitcube are not // at the same place, so me must take this into account. if(draw_cylinder) s.append( shift(0, 0, -hight) * scale(radius, radius, radius/5) * unitsolidcylinder ); s.append( shift(-dz, -radius+dx, -hight) * scale(2*dz, dx, hight) * unitcube ); s.append( shift(0, -radius+2*dx, 0) * rotate(90, X) * scale(dz, dz, dx) * unitsolidcylinder ); if (arrow1 != 0) s.append( shift(0, -radius+1.5*dx, 0) * rotate(90, X) * carrow(1.3 * dz, 0.5, 0., 90., arrow1) ); if(arrow2 != 0) s.append( shift(0, 0, -hight+radius/5+.5) * carrow(.8*radius, .5, 0, 90, arrow2) ); return s; } surface detector_arm(real length, real radius, int arrow1) { surface s; real alpha = 0.1; real dx = alpha * radius; real dz = radius*sqrt(alpha*(2-alpha)); s.append( shift(-dz, -radius+dx+.1, -dz) * scale(length+dz, dx, 2*dz) * unitcube ); s.append( shift(length, -radius+dx+.2, -dz) * scale(-dx, radius-dx-.2, 2*dz) * unitcube ); s.append( shift(length-dx, 0, 0) * rotate(90, Y) * scale(dz, dz, dx) * unitsolidcylinder ); if(arrow1 != 0) s.append( shift(0, -radius+1.5dx,0) * rotate(90, X) * carrow(1.3 * dz, 0.5, 0., 90., arrow1) ); return s; } surface sample_holder(real radius, int arrow1) { surface s; real alpha = 0.1; real dx = alpha * radius; real dz = radius*sqrt(alpha*(2-alpha)); s.append( shift(0, -.8*(radius-dx), 0) * rotate(90, X) * scale(dz/2, dz/2, 0.15*(radius-dx)) *unitsolidcylinder ); s.append( shift(0, -.8*(radius-dx), 0) * rotate(90, X) * scale(dz, dz, dx) *shift(-.5, -.5, -1) * unitcube ); if(arrow1 != 0) s.append( shift(0, -.8*(radius-dx)+dx, 0) * rotate(90, X) * carrow(0.15*(radius-dx), .3, 0, 270, arrow1) ); return s; } /*************/ /* Eulerians */ /*************/ surface support_e4cv(real hight, real detector, real sample) { surface s; s.append( _support(hight, detector, 0, 0, true) ); s.append( _support(hight, sample, 1, 0, false) ); return s; } surface chi_circle(real radius, int arrow1) { surface s; real alpha = 0.1; real dx = alpha * radius; real dz = radius*sqrt(alpha*(2-alpha)); // create a revolution surface triple p1 = (radius-dx-.1)*Y-(dz/2)*X; triple p2 = p1 + dz*X; triple p3 = p2 - (.1*(radius-dx-.1) * Y); triple p4 = p3 - dz*X; path3 p= p1--p2--p3--p4--cycle; s.append( surface(O, p, X) ); if(arrow1 != 0) s.append( rotate(90, Y) * rotate(-90, Z) * carrow(.7 * (radius-dx-.1), .5, -90, 90, arrow1) ); return s; } /*********/ /* Kappa */ /*********/ surface support_k4cv(real hight, real detector, real sample) { surface s; s.append( _support(hight, detector, 0, 0, true) ); s.append( _support(hight, sample, 0, 0, false) ); return s; } surface komega_circle(real radius, int arrow1, real kalpha=50) { surface s; real alpha = 0.1; real dx = alpha * radius; real dz = radius*sqrt(alpha*(2-alpha)); real hight = radius * sin(radians(kalpha) / 2); s.append(shift(-dz, -radius+dx, -hight) * scale(2*dz, dx, 2 * hight) * unitcube); s.append(rotate(kalpha, X) * shift(-dz, -radius+dx, -hight) * scale(2*dz, dx, 2 * hight) * unitcube); if(arrow1 != 0) s.append( shift(0, -radius+1.5dx,0) * rotate(90, X) * carrow(1.3 * dz, 0.5, 0., 90., arrow1) ); return s; } surface kappa_circle(real radius, int arrow1, real kalpha=50) { surface s; real alpha = 0.1; real dx = alpha * radius; real dz = radius*sqrt(alpha*(2-alpha)); real hight = (radius-dx) * sin(radians(kalpha) / 2); s.append(shift(-dz, -radius+dx+dx, -hight) * scale(2*dz, dx, 2 * hight) * unitcube); s.append(rotate(kalpha, X) * shift(-dz, -radius+dx+dx, -hight) * scale(2*dz, dx, 2 * hight) * unitcube); if(arrow1 != 0) s.append( rotate(kalpha, X) * shift(0, -radius+dx+dx+dx, 0) * rotate(90, X) * carrow(.6*dz, .3, 0, 270, arrow1) ); return s; } hkl-5.0.0.2449/Documentation/figures/e2k_4.asy0000644000175000017500000000052412710332472021014 0ustar00piccapicca00000000000000import eulerians; currentprojection=orthographic(-1,1,1); currentlight=White; size(12cm); // orthonormal coordinates draw(Label("$\vec{x}$", 1), (-40*X)--(40*X), gray, Arrow3()); draw(Label("$\vec{y}$", 1), (-30*Y)--(30*Y), gray, Arrow3()); draw(Label("$\vec{z}$", 1), (-30*Z)--(30*Z), gray, Arrow3()); eulerians(0, 90, 0, solution=0); hkl-5.0.0.2449/Documentation/figures/e2k_1.png0000644000175000017500000054344513237020407021014 0ustar00piccapicca00000000000000PNG  IHDR(He4 2iCCPdefault_rgb.iccHgPY<@BPC*%Z(ҫ@PEl+4EE\"kE t,ʺqQAYp?{ossp e{bRɎ(tջ{i常r)teJOYLgWX\2XyKο,]~ )sT8بlOrTzV $G&D~SGfDnr&AltL:5204_gK!FgE_zs zt@WOm|:3z @(U t08|A $`(E`8@-hM<.L@ށA2@F 7 Bh( ʀrPT UAuP t݄84 }aXև0v}p4 ^O6< "@]p$BV)GVC!Bd h(&JerFTVT1 uՁECDh2Z@Ёht]nDѓw aa0Θ Lf3sӆL`X VkaӱJI%vG)p`\.Wk] p xq:o—;IA"X| q B+aH$͉^XvbqD%iRi/82! L ے&US{1O,BlXXؐ+ NP6Pr(3;Yq8WJ)Hq"HJ IKIJGJJIKa8y"Ֆ͒="{MvV.g)Ǘ+;-Hז,L_~NAQI!ER¬"CV1NLMZ)VL $L`V0{"eyeg :JJU*[5JLGU殖֢HVQ?ާ>حѩ1͒fX9֘&YF3U^FuX6m]}G1Չ93 |UҪU$]nnCM/OS~~>&   .y݆i񍪍&v\mu:ƑGLMv|253Θ՘lOv19|y-Եl^Zä́UUКij}ZhlfSoV6¶vʼn伲3صs-[{'BCSGhGfhgWΣ<lqu%V>svu.֪MZ26,b&*4r**4j:*@LMLyl,7*us\m|GD\bh$jR|Robrv`NJA0"`H*hL֧uӗ? ͌]֙ՙdKd'eo޴gTcOQ{rswol m ڳMu[NO [A^i۝;OrR V (m? Yrˆ[EEE[?Xި%%Ga%oDDiNe̲²7Yn\^{p(㐰­Rr_bULp]u[|͞iU-x4:zccǞ77Q'z̚KZ!'lsWnk]8q/v=s}ٚvZ{aԱC) _}ABEKr.]N<{%DƞWzuW8}nX8[[Mowf[@;]wv8d3tyoy02*|`a׏2-<>+|"ߵ~o /ۏ?yx??'󟓟O)M5MMqb݋ɗ)/f 櫳/ M^̛oy=}na>|ZZ.V|R?B, bKGD pHYs,K,K=tEXtSoftwareGPL Ghostscript 9.22_ IDATxkdY̪ˌԣ !4`##vzZ\/rwF _V/@& d HAH h2FH#ͭ2~KeݳSTUɓofg<[eYΉvVU2Z Yt:UD@ 1zvPp$I+^ PA iY[[Kכs֭ӧ J΍&9IB%BN\@Jμn;G8 p4^lfyy9V+f0GfP TF@ T JN]N2lj{lM'.(%jmm-^osKsg7o<pxpjvc^/kkk___I .vN3yyyyWX9F}ӧS1o޼"r&TF8 J'HT@8 S%`Ssprmm@ ${PpNvzZ_jT.q8$v;fsrKNn'rL1$ DtI%dD'Iz޶Prl|.,˲Ep񬮮fyy9nutHӬs*]N3R8I@ TVK@ TF@ TF@ TF@ TF@ TF@ TF@ TF@ TF@ TF@ TF@ TF@ TF@ JKJ΄^Pp&|Cz2%g¿?~^L@ @~ޕ)PPw%I^opT`~A>O=U/ S$Rg?tnxe|#U/ S"R??$I^z4 G~UpZT`AʲLQظzV4NIpy`z`͍zݪ)QA @e~(`Sˍ̿?U8J*|0eYNO&IYyW:pu%?96 Znu(Ļ/F[eYK/Vڵ?Ppꦫ'e677q?ׯ?|nS$E1mss3wヤG? mm3' w.o޽r\rU7'/`WeK/(jzz>ߪp4%j8pr=޽RE^UVNS5nN2 *'llF^ť'TMϟJ(˲FݻWgiJ>amSw ]-¢9S3L;v*(Q@y/MQvzc?"Ppj>&oOqe氂,\r-KKWfK (85['rϟ~ ظ{eijMoz/'Լ_$S3('VWnl+W oS_/'O@ ?ʲ`F66(j (.(%OO-oyՓÀr~3c˿|p R~~9{e_)iT.o-ygee%V%pxPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP9рC؉Y__R{:рree%InOasDf$zBJ`~7tݬ:N$7P}+(fn߾}yI`NٷA%Is֭x8 V%u"eN7P%P7vvt:YYYI2/SNM;8i{n7I;qLnϗvizIq{PɝpZemm-nݚ+++q%eKVI k[@_89< r4$VM pm}$ 2Iz^]v=`I@9n>JKc?V (LZՓ pyl۷Hb%ǫT w^r~z>L0\\;׮=~6I}ko%TzG7}u~i^/3ofss#lnnfss3~?A?B^Wڵ'~ʇ?=#]@$ozC?#C=rxz#7nzs (ˀ2IƯλOs+C/K^`UTGUU'wndXIw7C/K`0IE~k=r2o~󲗽<=,--,ʕzzp$79=\pj$|+pyͫ*X%Ӆ(7rùzzjz2ׯo߱ᇯ勿UۂʷNy (q%|7vs/W~_滿` (,zؿcD>O$I~W%kkkB`I}<+sCs/֭YYYIj,Us{pqo{۷ oʴZܾ};+++t:Y]]M=%v!$y*O}뮍qZVn޼嬯gmmMP 'I7|ewln0|Ǿv7ܺu+7oLIP _QeY"NÇ?IQt:$JZּ@U.F 8-G &ZVZ$t:yf|Х (TJLz'sgP|^疀fn߾t: *jY^^NZnsC@9$Y__Tsb>%ŗ5^Ejl6ntv'C*(Otw5PqP^FxVV5it:yo.-eSgyy|J.%-13L@yFZܾ};t:Y]]MۭzYp̠% 3hz>eo.$l6sLھ\$s`|ʵ5)ȸ;I{s|J.9e>%A`ZVfv:N:8TP^m߉ dTO jZiZN7ojP^`)׳l>%g nz>{mme@l6s|U)iZ}vtjo*c%u֭t]) K|J&|J*śqwNI RA6mI&m6$(8}k`xsVV5it:YYYIժzi\Jfb>%'A73O9n6!Țfn߾m>%L@ɱZܾ};t:Y]]UM AuVnv׳l>%p._:/'Ikg>>c "+ʲ,^Gzdyy9nݪvAZ9?{O~~DvO;?˟|;!JNx$' G@O^~r$ʽL.@@ɉZ[[KKܼyS7|05{3T&IFԿ}={evOw]z]+wz5狀7O̧uX@9nOZ6 *A) RmoP>v|b{t:n )C (95mS; (ǁ?fGNco )c_x*wڷNmMGķ?ZU/8:)ey4 $gZ/jijqq;+tP5e6sP3(a'/>+ˤHA)O휧`;o#vPR m@U%L_.ʥi>n@ ͧ}xjx9caJs%hW PR)A%\>?l+FG(v|j=:nǕ]ݳ}AL!AedPo⩤=U|J`L@ə.w9Pr2cBk<˧K42Ɂɸ;尪rP|,iSJΔz$JZvO=nߝץV~s>XHgg9ھw9AP&ey/g&4.7%go8YSt[GQ~sj7q;߱Nɬ#wy; )9Êg/4.%gVz*Ρǜt8 YIjs+O:GՃv.~\MlO9^&fa>%\.J<)8Kf ڞ/u)->V.,ϒܑP8k嘓*ՙgrMpFe3o<)o޼<Ev)Fs%ERprh ?nk+i|jco繢rG58mJ).2G^?͌1ܿr)Yȃ*wt"ɽo<nHR3 *kM\➴}%\n^^^έ[]%wQ(a `g<7 Iޱ۾ \My`0zA:CsS,dꥮ>Oy2s\TY,tDP7%{P*&ھ('w:y|sa>e9<mIķ?Ρo07V+orz^VWWn^!O-oO=|dEYѱG8y"e902#<,>> orʭwbrFjoN^G[xGKݭjW\Xn͛7NtݪP{U/ԋ-wvNAcw|.k8)Ok#oNV;˲r3 _~?:l,ͧy:OPnNWݎ⻞HZU-f&RZ[[K7qRP \R/¶kz6An|]G{2',fH" $oUMSm~&v^i[۠󻝼:UKʢ *!eFՔ>ܹsEi{Gl6'L͍7rƍpbmWB IDATR+ޜ$Z#WMM,3[E^3|bWZzem zdWg*2 G(jII]SԶoR8Brc:")Wvڌ+6k_ 4)Mj;l/6sBo⛓$EQph1]%;~$I\2L%eqd=k^ '[RsfۧctE{agy<8sPx}o- Ļ,o'K?yj+'|2Ih;jy{jŷ(zLWTYA9*]T^qPR>RAK➗F?'[Фm#W?rP6 sgSEVd&Hd㛒}wjH3G ~VzORTyUMY av/zeC糂M@ #fs[x3A%pQL$Yv-GoIxt;}/;Ţڽʅʥloyq) )a6(lș)?{ޯWTI퓧v[3{FR+ڼkjqX9s,A _LUSLj'o8v22%y-|u*bRا|lZ椕t38JPϱ:r@ڶ -!,{׫,Lw<'ӟg}{n`jqHP**FՔZZF)S_n?OSNZGo׮'<3g.pLV+Vk2cuuU_/>{.à~?闓be/Q9}` Gő1|2Em1Z?p&;}NZ?ʝo t!d'Jx@nݚ UIp}:'.gUIۿjrNPYe;YB5jq UcێgƐr:ns"<ȬSvؾI97G);ngT|ʥkW_Źv|gg?_|1Z677 /S"A-􇷗Eꩧ(HY$ZZ`3p6e[!uO<'i5[s|3yWsΝݍ7裏l'̓O>n7nƍU/ Ih; ?插tl=Uۧ;) F_m ߔ Ɠ]zp|<)}?kKrmzSo(QdKv|QV=8.RKQV/RSԦR|x8Ǯ<||b%%э7&R5*8%y'z7%y-R+2 '~:YN7Y%g+,c:u>f9akqӃeceyy|QO"E#Yܞdcex|mߝn'OV4r$>ūi4  M0dpr8mhU+dQ (ܱiT-|v˛iޘsgLv:ܸq#?I5%ffg}6O>^P Tin|Ctu^˺jɎ wUG 2]-ytSk;`9PN~!8A *~hﳽ/")jUF;(lZ7}Hk_[Ov48_ϯ~CILjE.]եYh,(Ȕí7˭Y{eՓ=R+j]G!e>0oI^}=/m )"v;y{}.7oLҹǹ'2=*}UkU〦"8q+G8yjh4-<8)~{MsC3mE}Tkb^;Y^#p#}'[մ *cW$X>t.FA巽[~"WڕZ~?lh'QqKuY)"EkFs)hNeUM9kI󽴻BJ8iy} G@ lnO8ms (_ekYƸjrz}!ld APL/'L9`rey8AΗa/eQqHY=L|?? )?xK;ڮ9&pOl6!yrfej)͚̽- *0<}[Iڑ}'7vޣn臭'׏0;l9~?ИH1O)Hgu:ݾHq+y楧D'KW'Y\\+giJdrgH9}'Ք6)c3j ۾zjzm2LR~0/v;><ȅV;kSvnV81w~NV3l5$1O'^kYZ}r{:m>; ϧ_H{g4wey`o uܬky7z#EQKjюݵjsne탲ܱ lvV\e 2aF1Z7it*LۏΝ9/w?ӸH^={)yOf)kedqXTKmR=FWxu)zʢLY+9ws~6a-4HkOzW.n ە;ssi O VP&P`'hUm|sv$i[6-Gy<ݾ{`{_b?w_VSI#=**kKԯ +).fR.eBZ ۸2(d\MY&+YIEn'{ܼySW J8C}m)nnܸa0s\r"U=cv,˭*;RC*[tt6QEWRnU2{U)Dy[O;k5U;'ԃ1AujߩN6ϧܧY);O 1_ϛ^3{zMեkx-Z=~N1@gӿEƿOR P{XIY ,,,XHd0^rk.h[o5.^ܺupƌ۾f:x_x˺k>=O#L:+ZlAG{>Q2jl"2fۦ{3:G t|PxL/PN~e98n;BS~}j/''|`T&Go^~d9ߖt+)aҨ/$)dG=BڸVXHmyNQO0f )aq;O>||I.=%Q7nܘxS&pls (ZG8Nɣg쌣bqpT)5S}f+V@Ϧ- )琎9q渎Þ\[';De98=xBAegOH9z̃)12H6ix9Ogߘ7nLR_PRlnn eˤ,;{(:)'ՔF#z=EQKhF`0 6 )?NL޸q#?^0b%Sj3(;yh-GܯyINc+wl٘N.qq9hn<]̷GÐ4Sub0uϧ:(,WT&6/3̵im~{)ys)],."+ԯ4Ҹkе\yZ eQfȋ/ミ{w/63([䉿jo./s&`J8Gnvz^jL@9?쨎|@q^f v[Yx:P'm 39kwbv}۹I~A:a\O-{-u2hmW:nd3/pzERx蜙#{wo#WeB/5~|ӟ?l66gss3 BʩX*FxJ>|-WƕE(/7Kld#U:)5Wζ`R O7#V۷>29|#ɧ?uߛ|#>?J x[qtK 5C ӡ{8A-ҳ\w> =)w}G>߽v|S8'uWڑS=:O98)7$oǟxLRKF/=+)" RNLɮE FAoFb9ɰ;$d=׶|yA_8vΙ|'vSA b/{tP~#;N-mM *@gg*(R+h>|)Or8a8UvqEh2xUT\,SfsTU=vmߗB;Yx|O|GnK?{An [w??y?_.+4.qu}rrJZ2(_|>/{>lf3e1z_o;Μ_78%s&;@q__mR *wV}͢,c9;mߧPpQ۾մ3im9<,>)w{or`wr8 :rs>{w۷b}6OSh.F6BvRzWpe! sr填)E ҽ wFy?R|J}/ TB .RfyK;^H '=hP92`)PS=`n??)  .q=8,<7S)}Lv?l>+np>Sv?'YR>|?|fcs#!bZ-fBWses}TMY[MB>_|./}.!%Sz$pA7Ҝ`l3({.yy,L*^4[S\>X l+,ښw|ٔKhAM98iWEZ1yN\{O}@[ۺѤ9=0=^S&IY$y$|CʣΧl>̷~_{w :;YU}4HPSK4aawuR`ig=O^l,.7buh-YD[$s<ɬʪkwuwCvɬwm FkIޑ9^.%cIbEkMbSQBw' awoS7p$tr&%gR8( E ADӣ}Xs+qr vssP2vgO9;[F;{} ʽ|8v7gr4Դ#)EQ}\֎s msOo2A<>|Lw(roP$K;]nta勫,_XŤǩ|wIrC| ;&0o~m9"JAxB`ccsmؐn߂#0?wg=2k|uTr2;ݔ QݹuP>xn}P9s5BxGAQjjcsYP@?r'í߿X`c}cpϹsp,HdYFՑ;`RʆG2 @uR*MXc !Nlq7}8almmq- Dt_Dٓ--$TnplQ 'X=}喙xSNnH9{ ie 1sD˾J3wu艆5ұ[ S=PÏ>Ar=GqEJ_);]r勫\nsq߻EJroRX8 R-OlnnnW`@J.]t sS&YrY8b9V" Un12%G;Cw]kb3!)GQJf}Gy$5f6i%)$%1{2S7@wMMi% ZI}nC,oDG}olOU_~rXmRe6Q,  xz]l5iIlcSIȋlV6RҰx-nrsBff{{o)܂pB@)O!j_>kkk <@y0_3.Nwys0Y;Sbb>?|TQn=nIQah^c3i`a>=9 Ju߉)zSmiXK3IƢU-UϢ wʧ2?+Ο~ c,XVXcqۻ0H ޣPiJe$ "+y%RH) 3)𔲶*E(1?{KLxuX**o8wUBS& c3 3/7>b|_i؟ѮK5&hJ]!Ui߃Ǣ<wL ki%)VQ 53Cp>}*ݾ_<_~+bf9]%1 {K2A,P )*/I]{'ewbJpEXe}H)0oF;  Q}K> *EJ)fO=ҹ"S)%R8!-~7L-!S <<]ե1' |}Q\ήL\ڐۤ9fx>coݛݪuiMY=n}c>#:y 6{7njҕJ _˗H B8UGw|atij5eܸqCpƈRCT+|JA8<ʙɾM$?jkrc>7%M9(LtCP9m)e iڔMYNݮmaF}}S]y-rܑeC8a"t)'{ލ?f SW6os7VmҴ-dNJU]֊F ISroB;kCí?sl\8#!< L> a" <<J_D7蚄YCS!T>蚃}D)aݜc9(JcQ!0 >|:*U騬sh!ݔU㨣-vv@H.=$T??ڿGWI܍N;w>)܀4h4hh4YYˬ]LJq8rq.?{wwrRT b#JA&"d4:(y3CX9fG^9OL^x4δLOY;~ze &F\=[}IqgbEtS¤F:̧,h&VϾW?O>1O_[6FEöbN'8<9瀘CC[k&I&Mx_98)##9@)TTeuRʾ| gJ_3r B Cw]yӳ{+Tpy+|{`-EfH9K>Fwhi(L8'nG)]ooB(AQ"$P0J08C?K##o'!rw>;[2D7m>ԛ퍵J˅Eb,fS$^[N> %T$7t C#||=#/\|zV"e2H 0l0FWe /2w~P|vS< yʙLJL ,6"P p$666dgg])s"P'bsSγ{2ALZf"u(`.sڲIPSMncn5kİAi:q#T.k])TBFa&}(EG5%| }ʧoz"NJ_KRkfk , ]lCM[l~j[~.o6^66jhC#mdEE/xX,<oQ-nݺ͙y|'s z>e[)axJu *je&p uHd}êS @)˾S~VkRmXM4FpG(\jqtf+Gچ/P9k>7(DC} mG*_oaiqΠHY54/OQ=(HF c,iZ y\`'8x-n~̐IAx2Rv|JAXc'-|— Z<ç!GBEz 8V*:)B;cb ͕&Xi]w8<סj;dWܸqC!JAN*`wwW) yɾ9j")XnsE/VL4LԖU(sL8:7eߤsXR ]oQ^|nʨIߋs/ծ=@(Sһw$I@A$hޓYI VtR^8N7xCb C lnnvu)‘$N-vʬgY7ew"LMY{lvS„e*2%YN)ݔTmf߽r+}vL_.R)RMY8rP@0ƀR3~n|_bXuig8wc"+KU WYҵF)1m W>u ۰am.8\(!>$N' &RUcUTc  *Շzٷ L,d(S.Jsy TV DPf]9*%ZJ2fW Go1/xû̧Tj{*'}vur['8W/|pegs8.DAk]{kcUlEKWpyG|"QMa7[[grnAxRSgccP>Ύ"*Xԥ+؟%M#>Bs.T|ʣ.|I(X1{qSN3r0iFml#_,7%).Tj@tBeˬ_?s{/^ Aq!{ÇyD1Rik0ư~ Z0 .]B /Xm`m6&[g]&D2(A83oߖ|JA8asPqB9fn3ȧ/hFgPNBbԖUNё{Q.ƓȠ<:1|08O CVbb"^9{s\yraٮPdEQ'P 4[Kh`yGg22@]6ݔ瀝yn߾-9" gFJna~WrsBP98y5Xí?EJiT6<7dssS !%ނ , O) Ӕuf[]IUᷯ]&eGfu qfkRqvViVM:؇En?3~ĢLO zʾWկq-m~W=#d?K_ B];Ve= Z.,\h16ݦ9zwl^<#܂ T@)BQϧuS S̴1}o3P$ Oe>e`h5g4=crS}s$! G"SE)u)󥄠k+Wȋe}g@57ٺu&,S&_͛7vA 9R-Bv{ggGrh49T8U3i)gSTmJ&E9Ȭe'U%vɣ2Y\hXzv=F-#w}w|J>s?bEsTDeߓ)Z2V;|RLC7iy:v(\op%B+O —.Qm4f mtY'ڱ7!U/s&5)@)‚SS찻Uܔ0;EGne$Qy*|t@<l)WLz A9ݜf»"/sҬMXeWF`ջs>-:| w,_p1xVc58Vrp/8§fY@rF]ڙR>hhMӤ#T"eYz(066A+Xལ ޗh}o O;oL 0)\P})|M* C_~{Ǚk0M3z>ѕPZ̎)lΧ<>gOԖ>ˏgOYx!Bt[.:\tx޼_p{>*-*ۧcSI B]<'pf˧\UΣ[wK>{t% ǽC"JF澹˼e t!w9wx<׉n?x7|qiDr&A(A87 S޺uׯK> ޣ?!Y}׸pe <;>O=KlA2c Z.kإY܁)|m;lͭ'iwwWIAF2(A8lll%R`Q3(X=ckS2q㬄J,CZĚYOrcdƱ7e$3Ycmv3(nvk*B|lpy*Śٴ){(4rt:{yO^Fu]&FS71ҙ5u2,' P *-nhchb#(I'tyw%rs&oܸo!9 L8(A8˾%R]qwJQ :uϴ1DBCϤ92NY$)jᨛg)_>-=oB&OH}ueO W*:S@tSQY9X:bNi$m")Pv˾}zp6NN[~]!:? YEY9)ZC뤼pehr<(\Ny!Q[l󛧾O3)qR'J,AX\:ӈm3 r}1?~ˌ+[\\]+1vZ]w\>hYlf;~+&]r)O&6O(9z>ъN'Ju`]9uiXDSQeЗOpg*R^B Wy>$@QQˣLwz"M,W1вK\\DVtp\GY^.EDr&A"P DfP) /c/4'r89/T'+؍tNI QJE.CK(yh+1Sʏ5@D)ZV\6gܝ{>Q\#rNn>:OC@WfݞG#t&t e*I*(Ek<: ^f2מyý{w eDtz"{c-ZJslE(Rl6[əaH O$|۷oK> 8uq2,xyt h<1IM,1hZv Kdy;<.Q$;Q{=%[b(b{̨,22tRSօu%*ɧ3_j;(Yݏȋ^eiNi -,7VȖm|Q*:}\T$o)¤ 'dP ꫯJ>Tr浟Gn{ ٓCY晆c ï<ϱ6 ]t3*gDyr  [eVX*E,y{EFoi/_+''T)iM3pK+v+;069ɥF545e^y:y2aYe$;.\8Сې+׵Ѥژ1j5!x_ϣ| 9ly* L޼ySr&A8QA)SI=֭[O)'yї!Sd4MV6)nj'1qS,POrSt,UjPB! #;yCYB)GkO=.>x Y._K_G:s_U xME z 'B%G^Z#YV=*rU N)GvHWfEfsG"2WtAt6rMj..N|-e勛L pV@)S7$RNtE+S{a9i ]P9tZN]u@ǀeJ)փ՞Nrxo>Yq:nһ hg8gk9 }iݏp) *SҟOY )mلtyine߉ҴO)o=e)KKho,#/ A4GnwP蜬,~la$,]\FhKɊAA=Ϻޯu?y:(%gRFJA$RNϣ֯L sYկr+pP .L>r4R3z<0ޫ@CfII>q^.~i#7w<@;0'J<^Kpxg>C Oݮިg2%$`f9Y%kuȊ>xp%7['Og`Τ|RFU]9*%\@%N֙N_\wSƲn?t\FVc}kX?q1/G9.3&+V)X 2/Vi:&'_:g뎬 cc\JmB+v&SPٽ&*:~Pd9:i,+ŗ|D;b򸫲\:t} ~؄t"nOCOY/-|Q);brRB~d㳍/|qkȳO>]Y-Fd&C褴&vj14Vm">1 lf[Ode[IA(A)[Z|H3ѯ' +sN-'\=yU=$~jfc016TJZ|"3J(4uBTq)R$fTBx%Dw!M0sq0:f`Y]-;}_"3Q0ZwBQh+X(h2 ~Lk"Y8naKJ0U>ɕ}?㓕;fi}Y)߿]z׮ܷ&4ay}Ẹ\i^z{)BHe?~rJ v@> 0HoAllltI}6ofggW_}l&G4x˘~2Ỳؚjs{4f!Tk[<:j]7hpTj}/ moT(c$ܳ ?PyZc[hRXS(PBUT^_/6i$rSֻțrPIJo8 7.ʹEC7YIVPAqs_ʽJǣhIkmn4@r/Vm=l>98MvvvxwlnnJwnA(A&gww[ #4 獓(}n-NOV)iQ'6sHLà@,#kH888*E +\='H%' Cɾq.MyLXJhcP֢Ei*Ie4JR Bem:5J-Ś(䔂(Mo7{>rET)t"S()d:ޓwikQC,2p<͏ku4e ?V는uc i@*KP9am6d\xܸq7xCIA )A[)a8CILxa!T_n*ݱM'RL5Ǥz)ՠu92F$Q%P5ЬgDӈYkPwU"g[g5qi|.mwwwC(KCBݒE3[,Be;`s.BW*OU(({j|ʀ`>+k(ЁrTvIU=|e++׮EeQޮջVm5fĆ9f4X^*K`&[oeE=gܼyl$0qP Z{ww[&B I9(%Ot˾C='KodۛAl[o]e؏(eߦB PDR!ZMDpAF4PtOZ[hm0NZcAc FqF޹cV(t;FQkY)ѵy?IyO[]Nkѧe5@AR9(.tG,ﰦ5I Rs_V^HsHaY/2h98(EʢzCP>/tt6IHR't$ _zSMRx[3sYIooW-0 0UZ8O|oַߊWx9~ ՟C_*]cBpq;jٷZY Ƴ](IyՔf] JA:_({ёbٵgVjK$ZJsQFc cznˮrP|ǒw9ॼ0㣋r<j=BiFAV՟m1 +G92/f&GϙPRs\˟?1G.tXi4i]X5.^]C4T'y0]8jA A8O)'NAi~K]qľ ]Ɖ} ,`9)b1Ayh ڲl2k\y#7qGm{E<uܧ'ؤt3V.GQe46XkƒKbSRڔ4IH4mҰ)4i&)MHlJbbmBb5RESSX+Rfoke^Rgeoe3s{ ʾfڤ[,U|iGߤJVXkt.xx5Pݴ{ލ?VoߖIA="P ̙ 6776ҩnd^z0+ʴ]MY'8NMY 2uubsU<#eS[lR+EJ!<ێ HVF56XcHmBbIZ ifI3d3IHbdRPޣAQ]EA(r|^ pG FE3 6hؐrjVyvk$(69|fex}`wG]Deߏ\Fۻ9sOgB9JCK$*(N]ĮV] &IR8]ƞ/RB)kllxw%LVo& )A8Aoܸ!l gW $! ) "0Ҽ˟W ph7xNDi99!Tv>,P*UMʌQa>b| .?)ˮ-jSKeԥJѹe]/ \Q\s#]Kw5SDʘe%IR>By z+(p>ҭZ:P'hyC^s9O#yϝ*Zz>ϧ̃B:`gϧϱ̝}ȏCջ R&XbHPsTƈ+G.;d˾2K;hw{w?sQ´,JJ`2˗/8[1dSEQcڲo(ӆ g7|S~N j:櫿ڻ+PVʣtv* ?y}H9y9r@9y͊CMzE>_-Km7W2m}@!(Jvp.rK'xN%L}|]UӪ/RDR(XڴI贁$(S <|,'PwxU6fQEUേ ʨEJmff#(ͽCBya:J *c~ǏȲ!zyRBܠyҥ. g :^9[dP)9
V֯ om 으}@9 ?؏S? yeQ,rBsQh kv=߆8QƂ봣k2I1i[J'VZGk.] I 8eQAˬ?l" \Uư={!vUz'_}Z+:[/{<~-ly_q!m+ͯv,{Og`螂 29(5A3sh4^IJt>R2Ax9 ĒkƲ46piMVcC,oS'N|k)ͽQ޻?&FqGXV_o C {{ڞӲ_^fT?TW/|KWs{B@!耳N:дKBKeElo M*fﶷ~[r&A@2(A%]8 fɠ4 j8bKc0 oş>yE˧T=<ə3y5 JM7K_ " XilL3N Qnn5y}k/wn}:{{d&])L,.2K#<Y+Qx4m8+ok+h/?l/OvFJ Jr[eGocQscQZ1Ql40i3U IZeX9 ˓#o_<OJ#ӗMf؝}ϵXIEqpp@z2VB\_uibg q{c&L|-xM*gARaKp\(Wu(G_r%QC!TEi=㙗PPpѸ@$-&guK;fS/ᮏj^dI>~<{DGbuE/r(6 (TVF~IxXt$=hxұ Z@(2Pi*Mv60%ItYfW6iNEp(C)R_6Љ4W㒓`/)9P)G b|>gP+{昖%i%$+)%ZpL΁gQ;䠬so_|A@JA**|JĹb霌Epaeݱԏʜ6+r*>Qɩ3RNP9R,jM$f8j Y(aQXr7{;?{oU .*H5'F 1y~ z@~λU@}N}6qg!I=t0qҤP]uJ'`xzN&)?5eԂ?KhI::#@de㩄$q"5 AiM*$T*4ƤTT**pCra@HCj amΧ^R4(O*XN4>q6&Ei1Jw{HQ *ُhI(#d~omZ(&sּx<2 /}#a$'/8?ڤ34S#&*O9k]tVd0);?e)/0VHE=tEb ;&VkݤuIn!uq/'3d:l-ܧXZO\D-t;ݺGZc=,mNT~)l]IB=5)h\oJhI&z%NL&1: * &1iLU +UWN.)"&g%)%?l_5Arh_GET۟ПdV7Tx|4Ldأ"XiGuR9x.]tx<٬ϳƵk׸y&W^emm:=+?՟s'#FfcrLAk͈H*)-˾eH8;LgC)' If)Q!WB I#,)9zȤy(>.hF+twݸ=NAwlhlrD Й(jADHIyu^ڻ|sy_ߥd hk6qҚ@ln2Zc}/J)?YA&]b0Q i57'==vG84q) VXrޫ錑jXs~n~8n_LuhM5kzLWv=hj2'f&|eWys6x2VVVɛ7or5nܸʊL󿍨f%2c yӥ|';\@,DTbi!bXR BAmA tL_\L-LnFNjv7ҹރ ۘPJYb2k \ga5&Lׅ1`,1㒗6Fc (P()AY-"Mo9G<_g؏Y+YwjI}E#(sjX30)Cq/VhٓxxAx<)kkksƍ̟xʘ$(ųGwxzf!=&;d>d JSŧJB,tfX!2\j3!iK3WT$R4&J {}@uI.׃$v  ۛB22ѽ.ׅ^]Q* )Al.S5^mzs8z<"]l$% rI р+^jC!~pJr hvM5Ƶ} e"JJfDdBJ_%cmARj*KCElk_ oS3ɳ˾{S+*WTPYOܧF Ĺ@Lн&Ёa1W"+)xȤeRlCͅ}t; U #aJLciNG?cM}̓0MP>ɻ,˔`kuޥ Z#t|ZyV  ұ1z)e& HStHzX$1QHJ_SiOsTyi9o/$0**}&I$%},j޾C6Z<*6xۈ3;LJEVLPoFʺgoƮ54{8ٟ}T,Uk"e.%b2Bzަoѻ+&nҶIظ3,> !ֹIvb74'*)BR7YjV{jSeӪŚGᓈ q%)U3Ӕf6&F׋vDRDfN2@X cTKe-q E<pR)}&SE& ʜ [Vpn&A$X H0V$(`ޓxxAx案,J[I :NL~p'&DqG>z; D(j9{>3μ`Y$|rwD-BD̺KusևZ;HSR ;L&4X! VyG<"6^|qlȐVP*&sf Jpe2PAe߁4ja^0*(p_@4{LN}IwLz&nwS7ݰ#翀z[0*Rj 6}Ixdm9 Uȶ @wS <. '6lNQl ߣIJW9jVq1}gm?&O GS ɅFޗJ]C[nK:1ݍ+V*'$% ,FX,f䇡 4 2 J)<"LOKOB.3 [Q,^[(R;υf--ov(QyʾqSIkAe: =,l_Crmp?}y6T<_IcIJ 0XeR;mzR<]Ix̿C1M(MR cpOj1)y& ˶\,#*er:ծZ@ d *璒s-^Pz<O/(=c?/~t-ncNr`ƞWT`"{}۟rE-j\N $%AYTP ꍦ%;:!~GoHqwoS}\xC7l^')!BJ5}:F; _A%Lxw<{ {Ƙ UsX({Ri=G>d?e#l^Σxw,l-$IKNtx擟ރ l4aA@Rԗi-mcnϖᰂ2DM%+6 L( 0iiLXwrB%P*@Nok`5u_}?ALNЂLAAOd)ʼ;m31ivy,EǓx)oܸ1"*}ʳ_nX=*(!.i97Zs/?;;͹CٟEe9a`^``"rƗkɒnr˲ڷH>~|o}26 R>0GX) 5VVa6I,|X΢%gީ<Y8h-k IJaO\&Kbp3 O?cޛbٷ?!GҔ39xO,9@N" JyҺ ߅RDǓxe߾?7ycZOSd0!ݰ KRH'k̑|iNJT{9 NSKNd#)0`' ey[x>񕯒оuRBl$4lcۦnֲHA YywٶX, 90"KPL;ʽ$[.kXF"os3˾O+Ųo"ZAeFPnvI9{\R! '/ރޔYz}ѷx<%^Pz<gߟ[7W@KJW'Tv2s!rI9 *Qmr2ZzP9a]I;<}n{߼J0K4abCZ?ZZ-(>+^[։Db oa$e&r,IY* {JMuߟS"8ֿpFP&wcx ')JE$e ɓ_\ү^Zy<Ê)|˛Ϳ>!Ĉ fXLS3d1{OLN8 *^何p(9,%$֕N6>Nǧ~$ۛl%qϨ Q[aUh,N{n_u{8IioÉş#1i~ XJ7&琐 ()O/*#;aen:"'=(ޓB2o)ΓvPޝ6c>iCm{]L!P(lvg)?qu_TwX?_9 D)#qmbqt &AXy+WO<7kkk׮jQ IDAT])O_|wI ܊kFJL'v[\rpȞ1S5}+Q)@Jd&9hfV OTlQArl-ݻ z!i-O|ۘ4qۢ*DDR%ibdMyw%u23.V?Ď8iK4Bd)ˬg͞wIaR9h!RVl^d9 st;myg=(%JdA9 ?dK>Exq|x<f}}<ܼyo|\r夗tt$݌|->1grOR,o¹'ক)3WΝ\TrMNe9c#ONn}=^9r22'}u1w; J >t񤗾ob9O-~\j!julUTCX & &I͒]LZ"u" Uɑ܇OHĥ([KarO2OR-$m׸tH#6#)JhY(y7npAvfwܺYx<6$UgҴS 1ܒ''u묥 =68{q)%Q98d~[8k4]!x3Sњ~N{A  `V Qš} ʜh*5:{Sud,˒BH%~ +&o %[<x)"?sTKi^:{^B DDV}<x^xa?˗}#捒4>Ki}\|W[xfJ;HT+d X)g6-:9-9 _=!ݼ[G>F'*5'={%.R>B4XJVJ?&dm& %I{t{$&ZІ@ 7Gz/y?9xN[j^e9[.E)RLpwl\m:CzQ x<8^Pz<˾˾{Au^W(2guzݶtۤc>_\Bi50Ǝ/+%òoF˟qI뚵ӂE>ʾӾSNԨ TvS0ɑ^pOXktAOH܇Ib^~{҄jTǟǘ8E9}"Bp<ǎ~o/*O[4VVShTNf2+eٰi݇ KUVw/ z< x5^|Ao|?pr2g?)XkDPwYv}cRULT$S)*ONy[|XLBپ"K$e`w0qP*1%Y}?&XjKPC`HJp(NI.)cLR^7Q@'k¯}]T)o}G# rnСun٥()h()cdorI9GR x<^Pz<X___}ҳ~>uc9R30Zgjr6XM8W1De~ i_Q/yerr<;}(g`w OTk )J8!o \SwO-eT yRJ&+֐NT&NF~I~g)4ue"E%>E}{Qy.m)ϭPV ` ޅ%PR #H(_tr7x<'9v|yS>SZ'eOFN;fGr=2P}%*'ܢr?2syNU"x 4}|󑔓4Z}y ˙&YOC15,DE7Zq)FXv]aiefk0(E9;uNQ>Ex5x<ωSS{?Mi;OR1r)e1`VA:ӽZATe; dڜiWG.'_=uwuέDUdLlcׇ ://0"l-uD"P}HֽtzR&}^/E`i )º>T|7oO>}3ܡzVi,5 i{LORb-˼^~pDox/(=s*X__))?wV LnLR&*Ͳ' 6nB0r ).4i iO9FaIWx{9Ys8XBU*}YON]l'Nz ?DVD˨J-KQ.E -*v2Im JaT!O 'P=N?Г}MiETMQҔ%eV-Ս'xwsxAx6M "pҷۋʇ4KQ&QBkezA(KJKI@\AV"r).} ޡ^Pz<S֟Q*S E1.<}YoP]> !*/ <]Lc1}RAi-[a c>I~cVO~)^Դ.ii[ި!Šiy2KRQ&6=C9zx<CڠvJWڝ:EjIB:k ].AʾN;}J#d1ObΑ?< CDsCffZN- /'Z$OPq߻:=|Q٤Ԣ&KZk1ƘtB-:LmiWhz|iJkK^ԢGTϽZdzf.SBYmirt} 6GO6k**PX=߿iBuT.m3YҞ%بB}Tz+z F)Ll`LR*ى>)/W|ʇdVazQzt&z+a9޽zx<5FZkDfs}X3̦{4dJR0ˁX{)=FBGmM[ac)JpXN>0' evR BHw.y<x{ʾ_~^\ooOb乱 IЉ)f $*˞wl(*YGMLdr| O9OrFrrr,᧍}=/'J6&Mb.Cmql8Ssf~QPi,Еy#Q&zeTB @XV\)=i V֫a8*'ǒ)ʬe6,Gd\哼=92x<ϙX˗/6/}3OORGkNQ'5 &*e㥧ӄ\mfm{1ӏWv))=]XJwB,ٯh͸>vDRaƐ1ƘW&&39im֪A$/9 Pm.:" AYk:KO%NL`Ri%OyҔ?$jh\Y"Br2OQ{NNDcJ W/ z<x4˾OsʗYe˿QPJ 6-EքELfqO;<(F!*K#{{S.?圢2ʺkoK?;k<"j 2o~1c93_7u k5jKD* +1VSY,Eivrihmk:e_ ǧ)OZj:*KDQD{XM,&KQؕ{ +PBTJ%\}nxx<q:/ge}}^6~ԩF5bIrIJm@PdtB*r&[~L.BK%d{N:)[GK K`>HHp5,}}R}J5k 辶FH'v'w\Z#$q !\h7}GMAw)ag э_ԤSүVI;X\/ND&(SXR}(2laR\\(Ǖ}_ ;{g|w?d~hIl-Qku{8qpƧzNNT`c 2DcuT C\xrr_cH=7ELPᇐ)1ֺNv݇![[^}tÏNHZcJIX#lS=6@!MA;9iS0aA 9A)=)tiS[jXj!R K(a$D@H%z*Wn\9xReǎ#)iW'S^鷳=9M9v̔U+tΟ}g ZNIXc J'(&6k񳟽N]yX]۸΃Cz0PXd 00Xme6MXz t2oׇR Dp[ &V}KM:a"ӼSucdj0Ȁ@*T".y<"x<)^zd)¿Hii¦4MfRrDIכ&#'āS/eXzlZVZ^'NmBNuPQYv.h6N잹EΟݹJL8Ai4`G rI)0ͷNz7_ӹ7"& A)$l\ Pa TAacRM 6q)J({nMqg9䠜YSY^;<tӨXjD!*P3S$`b'&Mߒ)TV来(߽rbx< JxJ8/2a>CdmDTlJrʒfJђK1q?K!/iy㖓k.sdTc֢ӄ4]6# ʇm@[oNzf7TDֈ:Q j0U˼WVj DXňJjLbD;Yi ;|L_,>MR%*Nz 1jRV p8,84'6#194@CwoxGp x<4W\}?쳃«?{0\@lq:vt,j@]o搔4"BEG3k S[?ZY4sgWhOYXRbtc~{mELyA4YN>$ 3e:3AMA)%I|nr99A!AP! #*:j)UmއZk6Fr!iE w0(Il2E$jLAXm@k$X!Q":6I ?C7ʣHRK'vG$;bfNn]Iel1+6$ ImJ$AWO<gaxAx< 7nʯ~|#IRm>O1ő2m| qI9i=mST!$BlyBƂg'l#r.7 yr\T{M:ZX)B=z$|)WT !RV횞!F:iFmFk[a'y(u 2IM`CB\%.K'yshx<gNrQy^:׿>w՟  2;Ƥ%'J'Z^YV&&Y__g}}} *S{_msc1H)<9ϡʾKe}'ʲk*s΢N Dkm{fnZO,8dr{S q%i\ywPB)TCP^:+l>L"B( Ilm}@!$IHiQJ $ed%>MzV`x{hٴc qr2M4"IIp)jOu˾8Q˹OC'mD呔}M`)sOf/O9 kl![6 ^N h#\ %(sٔnERgeC>R1|=>v&&$I! JYUpT*N}aC(T1]R>Q5 \jw`(d29IF$4NT56m 8~ZNr;w~^?R(M˹O7BIv4a90,:1%BBT { JP3{</"_Wz*/_ƍC9Y( OO(>e+O)g.Z%݅Fogm|{*N= '7^ ϻA2Ӓ #7q㧟LZ0Bj9Jr(J5Lh 'QG)xғ0hfr2"MSܹ͛׹s.=n)-O= >ܹOdcMAT =C Qk.J:ZPHaڢN ioqΟq.m#^g<ďOW,Ȓ-3V]33g0$`@DXлC/I=-EypC3BC~) )Qad3 q{tW]2,~8'fͼKUuW7M{Of%R}}]!'qt1xO`( #靓]&s'q\Br@\|- ␐  "?巿2=(B`eH8-λagǭEWܔ]q@{ƮyWBv n;e*쵍!Y5YJwѨGX:3.a #'=ixCH9ik׮GB)I)'s5qnqG 9it*`fL"c :_bO8¹]!TG9~Ir B.}])~qg"2L1flz>f4)"[,|>J3>/]ċx| $8$ ;ʯFk"$5]xy.2,;kGbQ{bĢVb8Uw'cZ*f ubuݺXt\1ε;?QaD- _JI80oW+w $'O>8"Ms\v}t ;;1Oa ʷN駗pVL0a'=$T@[&b%f.cs0gq;Wr&._`,ӏ…8}ݹh+p ØjEP</v15Bzf܅"9:a>[3|<A ( O9y0Xf.:B K8[*-$ڮ*B\lͩ "״ְ}NN'&`t'sX׶ ;ys1`6ǷqUN1f(̢8)%a8\]>Ҕcvw nݚ|Uܼy RC9bc\Mˏ\P*!d#{AtpCi2 &Bbp.|mmAJ s#s9<ֺ,bJUƩs˅Ż˅[Nj. }E~J_лYȧ(81l}Alg )#(Vs\dkˋZ]wK ~xܳ_ɵkoZ(`4چc\|na/%N 1Rz!1}$à'ϝDesro֭\_#x'ܾDJy3yTm˰&2a3}$RIw]e .JqHAR)0pcYAa!  [Ap֖a :|Whc:*k㴴U޵}ӕaՓlMDu+uP[wae60ڪ\"n\B~*OEq*5`4s8i JXlB\1{k1q%c /]$`fAfPNnSj$+D*߽cYAa!%AA^7>k8 s)%84?eǫݔZNrT..Nۚ5ͯt69ܝ DŽ<)6]9״0gu%nPc`8ts<̋8L8fz78Ezx<{}{TNFSWiGs;)ww vv{;ag6d?xJlqy;H1VCYrQELY)KXEqH$ #7 ɂ5o+¾9p)BgK6疄B\˩ aߍ a˄ʶ+/cC*7Rkݹu! 7(HI{:/+w^J**+x3!ܼ8xܓ̇vqȻ'ϝ=Y92!c0KVNTJ?//?^oPvw5nŻ~wyn??g\0üBJzR\DJ{j yRq+z3\ⱬ 0@IAGwOjC/TJ!ZS tw5/BWwP ,ceu֧9M"?z]-k qn`<'u}PŀJfpkd S]?wO1,H yq"$"䡬pA);Xo, /yy$ɠﰻxc<1= 0kEsCqռM}DIdPN,EJl6wP@r)(߽DaA@IAG?{{V*9ge.JM0:_>h @02WbmMaq 7ePwCCyCZX@YNp=XQ2xRZͦBek N^1UTW!qݷ['(PG<WݓѢ{RE+7 D8`:M1rhm Vø'!9<HAH 0QgN#qO> lqMއxKHS'ӟ'#}o˸66ډCW:(+" lna4XN ) ұ ⠐@IAGov.R䧴OnmQ\QpSVA}흶5/Xs.(;EZ3eXx\@涬}xbS݌z'T"Isv\>➜tRQla'E=f 10[f|:C\tZG: nU#sbS7E *̫w78 d:氹A$c(!RM " #Vi `aȜRtSJw'-F \)T?t~.v!^Uyy+*rZ64?sHC(׻>cd4{qyg\,ZX(?gN}ScB94d2>d=fc:AB*)}.Y?Nʹ``+!d/|8Qc2A(cp }t ׯC+G d7>q0@J5%rLfHa1D*R1a߿x,"8$PAjBɲxWO e]AJ 8$V#{PY 8S] J)H`yp`#TVͧ&T3Sk?w|E)R*W]W>\nRg2q ^ߋ:;'k'0N!PQG IDATs_'ށE[/d)$@=u@ȵUy2g^Nrg†,{ 'O!IHSh΍q ܸ %C|Wp`d>ĻHP(;ń1:Ggp!qt@7ܫfjE}t TZܾ=]l0̙&'_>Mz1>dyW 4Jhm)}3.T! /ұ bH$ Cw]aͼ}(ŦEdcxþ)O6B+ݦ6V.eOMmkހ3ƻ(L5 :"; rqrKX<&l8gM]Scb0jAtsq|]Ɖoܫ8G8-DUdz yCu!ʠAeސzq2C],¼;( >…O?a:nݚ %z1vu._c-z"̻Z g!۷LdP "#V<oaA {Aqo7^Q|el>cwIYVf]J[%G"mspC6ιZw)6يPY4:=BLd9vۻ#D Ǚ\ ҋNrX}]c``pH<>`+&דJ(C* wv 54  5'?kB@iW\ϟǍ7ӟ0ͼ,,q>;({=S͛Ou?d2EjH AQ/P0zoIiû3'afطo!컙}>mu{E:*Zږi-:U~*m88*:|vJ'N*6!+x U=)X;Uܗ8J! _|W~d(OP<-x'}ILlL&{{nޜ`ww VԩM 0CRDI@( ^4`Όjpp(!zBI^<A Aqܓh~)žV66P yw*?mw"?2(=Z Ee!zwUY0&B2ek]FZGUw BEq|Ic*8YqTrQ]!p!>BJ0)YSb>]\>c)<Po`2Kq F38]X9TN @FJV&aYj %cQ(ŏ. քJ 8/. !wK]wkܖ9{iRC1VYCl;PnP٬)TuokSsAeUڹP ^:9PGG)T -NZ_EqBa8oIA-,PB{؅PoWw7n³Ϟ!e HS{{)2LZ3 9(5Yi(AI9~c#  6 nqhlJ䆡ж O߯ڄ3pւCpQ3Dl[$X%T6O-}C 0pxRE+NLǀRՋqJY`ܾy,y 98fkGTJ:C<ڂfa22ĉws{ϳwDʎ]on^谅\sN{/LN'ǽǂҘyq+ΑޮEj=<">x</a`<֘L f3>F!WHq.?tyZRP&2RR.桬yy(3  &! qq;. @%AAlM)îx R7p/obps E̗ 3QADrEt@g>[ J9}'➇> bM~O{+_:ݖ,+wvo(TZ3ϩt,6[kPia=5uKAZC4ݔ R+VztuTF1z؈PɻIBcAkڹ0Y'89\Iϋ?esPz7=ӬtPN踿HiLm<9lmsi d=[L&(鹾oh)ϼ-<ڷ?aZ羌!uER y( P態2wPqC%AA?lqҕbF)+ ,["c` )E*\=sbuX.t5a3ԻǕa߾o)KWV8*RyXAw8y7u`0<t~V9)$p\U8"f硔D܋!" ! (5tY)TD 硏) Xwqu+wjS6u%V ٖk>jy~6G^%T.;Kl*TZ.t r΅u5dxAy'"g3sd+P z}`t~WGm,\JTMf[pa8@ ˼Ntfc g?5<ڷpIWI/>硌*R5C3 0oiD2E8Ktk$8JH$ 5xްNnn{JZ;wD"Grq>s29)W)T~˄b "%s 2 d:4DJPq8!#q09C UM&8 AY7Z~y:g4a.R6s̖ѸNI?%V|D\AcnMBxj eXw8'(RV TFϮ ȯ]LH!@\x܋ūڹkRd[s+I!|hIU`:>rzAƘy^K:Eʃ|sp8!P9ijg^=9wˏp_3}]wO!sW13B8I "^yWEJJ.JPۇy38䡔櫔 {y  {kˆUqO./܂s޺X>ek$c s{!c0 LnV̻vNB. .LV:$9`|N΢ Y4Z8gȣ^/Z;װlq ?bW4E8w'&¿v d'sr:9E|c/cC ˢ?<=3gzx3ukYBH>{2p$ ϼRúm0 ŧ^ČOj !`s]( `sû[ H+Mq  PsOVM 9{mgW$9cKYa =E38%O¬םwu9*"e!p4q90JSF TbUK^J&°0{$F<0 dY~s27VNvH0$CJm+;Xƒ>8{a }h`Ei1hdŅ Cr#fxP\Shea'ScZ~ y(0H7URwWa`L& w*dCClo yxL^,\VC&RnP׾g^y&)JkP/Es^!si(#%5CI4  ߿xEq!  :x &Bes:Evuƞ EP頍shʵ&pS㨬66\d Db $)H b9c^kԵL;߹O\bsCg} !LjjSߖ$~I]J;on<`Y0~_¹Yw' <7)z z|f1I'TY_Qɻ3]C[E8%#s4At!d(SϫT@sO\;Ε=p|_Eߍ{!=݆~:z88 F7Zy(}xa:SCI1]/R% ~k癜?nǩ O\&/#Iia<ږ.JU |A H$ ^WPh61 im"ZKͳArAj qw/Zo+ sp }aKʅNb U^BtC)9dp!7%eM7%|1u OClιG0idepjir&w||ql$70pv,t/@GBڊ1 qGsRZLqc'wjrxW19, GJ[SxvYE&9ϐGA)0+aIi}wQ$d9BAB0qAB yq`1h%4yIطRǵwt"Z~JlessuȵsPyþ XnT+;xdp$PQҍ㶌#w|;.J)$bC \<+Hqd@IA ^X *m-%nzUﻞ/ mPy)U\q^7.c[)C2+Bμ2_u \!<fywaڱ>b#F'_EmkwV डro霴?GRI8ɌD CDs(>?VBrܲ#1VJ4NB9r:5LRL&Μ!=V=eK^B\'lV鮶7z"HAHwt! :`I(!ppËwjA & p1BZgY0X= /(#7O_u¾;/ Zطe2?%lΫdx~]j6P]wTV|e=Fl{±u5\7rmL8|>X\'QIO'NdA gs Om)RdQIB8qϋ} HyJ/%h}?pC0u~xX"Z!Fz'Nl!#aBzӹ`;7 X.  IDAT?x7/AZ_H 7ꏃ{MmE[MZݓ bغmfBk4WE]V Dc,29c`0˪[\!T$XSt>5,ex!KVed'N{i&)O?Ukb΁Y`B]"8A,I=^uMr}¹4ùkdA)\ZL3 W`(;,Bl#F^ 86 )&?O/inr(+|ogpB*)p)7r:͑g9x$ z J Z-X V]Ɍ!e=QVl9JrQ(~ZPB#Zo:QS:U)_PJW{P"?erb{]yQ)RPGpRB9cp\)^﷬ߞx0 L!Ǥ\Qܲyc9@AY'J|H-/fw0ikv΋,!6yc2諸,ü9y~qHXMNSL)}x뭣;0vz%-dPYJUk~?zu. 1.J2 I҇QxOg/᥯t7/%ARH$ .p^PYqS}Vgs1 kxp9ѮvV);͡M$mik8cPCsþs Ȩvya.ѢˎTJ4c TpB{ ǟWB問ygS&yw8l~aܡr-]! c@*V7 |`IPckeQ('I#8BF%p֞+1_(PWNQ(MwP=vA0DJMĽ A˿6A]欛gq?f.fQweQm,ʮaV}7ZJD68S:#pjÙTþ+7o`#7zS No*Sx21RհZ~Z1F]r p_/_ÝO|Ol?v!^CrBܒ8a Mal&u*wيcRk L1c,"Qzy&;@"뼃r^-npA 8AJ8V\Z cP N3O8qנ;AEQCtA4Wr B x)ݓmt )mŪ fr;Di\*HxwqSC~JkuA䌁1vta]kjLNԢzL=f 010 plJE^DQ*b8( %e: Ѓ9րp.{en_+a<X0y! cRB ~ H9t$l,ISldN nI]Ǥ1~ZE?'Gy& MH,`r:ǯtLbeN#MBJdkZZ;fS*t?RcOsMVFk]8-`ʯ>U7;(wP2\).Ju(ar De7PqoA%A@lcI~Jc4\pO6Ķj>ʩM&Mܔ]y7Ж38]+?媰b@}nvͅ8@80F'`DJD \ \,⤉8"8bHG+<ֹ3XaN}pF4}@ٺbp2??BC)g̒^C`y-d1t:i(S/ Y# Յ0yW9p.0PxX[8ЊHYuUkWᅦ8T#MFrQ.s2. ^7m0hPY Bx͉sX6 ^|-NNnW>2pj/2#U\q '%E`Q "(Bq"(BX'=DQ%Q _ 5w}(cg-\h}^\9oEqzg y#M'M2t¦3/JPFV%˶p_*1g:wfIceoc" n6*'K2]wC<:žJ 4f۷q&yOkP\0|BCf36PC:3A N{$ A܃@IA<VW*Kd a-aewט+7 n:9TmƊ"Tڔa߂;r*80pQʇ^ܻ勴$=7Be\.2"B&%fJA" U(N>^qC˭q/^!uAyNɚ`B[Rk\csxEʛ֘2 l,!1Mfȳt ә-e0:Ӿ*7J7ޫW2y{#_tC{k=?pTy&Ck9<7@E*1(߯,k5$>b6!Yq,\~ 8an.H!?K̋0LX ƽ@ _(.R.JXxgNyg-xpPr:$Aı@%A@ʏ^ǫ?~ҲBX"YVsGUDϲYW!"?⸫sQ. ;!֔? ܑo;z"crr8kzk>$^g![ʊ_*#/PJ p+% $`B"`RK .BJH!EK3A2>6 Rȳyzel: B+G[dZ'ْ_h?/(dtW6ؽGpyNIƸx܇us]֕"҅˶1>o5{Gk Yj7Kd1ȟɹ#`8bl9#<]Jmҥ@^iz9$/ǵrJ~(+C 9(ݓyqb<{nRʏbu+y/ ov^rBEYiy- X ?J&ށJ ;NG>I-T$P- 4S9)9*7qS"T.456\,SSjc6jwH6'vڽ۷'/M^2_zfͷX)ey넀<8ʪb1H9*+B%B~òtF6WE,ؽ=)Ce4YvoxXsgڵ WD I$yRz9 !D{1Tw֕I HP׺ogp>s7q$[ʏ1(7򽊯?u@P$Gnp~UV6EiC+Pe#8 H$ 8^?Pg܋8 2\uNE[ #_]/lW )T6m;\¾9 7e0TBWe<\|QQ,c\uW  ^H* 4ڂxi #K,&A0m:Nׯ !fɶpe9yfijEo74B"΂Y kMCOT߲ 3K9>XUׯA [ؽKGwE#(}}㹯Goi$"2 d-ɺJy&!^4ATD逬 ̇֨!vgօ/5ֺ.qSڶsE_m;]HDK~Jkdl[et6a֏to㹳2} MVCEG!Bc "U/c7MAUdU)7UR5?rއϦ~};:y&}sÿ­[cHnj훥/gm$[}bwBV$ u8?آ$u+b e%c(YĖ,Ra#K P"V\,@`3;U|Vݪ/3=3=NcoݺճS3C%jgu'ެxc! ohBCJmKq`f#0J|[A2&rnu.^4RBLA/w珵uPBipP1J@IAUE,ߺYҸ"L_0)I?2zbJ%-m>y(dV~;(ۚO9IJro&rkUװVMpJ2q[-Lpi `}Usq+V p&.W}+r#(/n2"hye6Wsc=ou܈`~i6FNϦ1"$VNHo6vV^khwXt7E=9nܸp(_Bei*IuVKFLkEH9Y_ӐZBj mqp(':q2)͢Y%M%pps[z  A]_tٓ@&(̳']iqX)C̝YŽ˄9hoC˸zS5͔}׮M_BR~0{Qkc3(.Np[8}:@FL]k[WTM'0fy}!XͿϵƹh x py>n-kC LK$W3p]S8J٘c 6VH$VIH" 6 !c{ҹYu5ӹ4e:i=Ej}x(Xrow͊=Ec:La]T ں(``~0A@%AqW?GEiav@S*+TxVד;UzZ{)LJ,NgY*>mnjCQ>3KM/Xj,l}ӕ a֘i`ímlܸ;WW6c98Dwl9w/94] kkBncb3ަeU@+ht%;CǦ9T!҉2:5ufq&!КI$FN$+Ә\3(%oӋGf!B'oCE^ˡRi3ʡ$bt kx5Pik)as^)sG>eE,)ͶOU4ϡ$TV."aWGenJP9osSoeݨ 4'=rV>?yՒZ?a[-&]Ws,-,dbwsw:xizG&H2i_ܿ#hƠJ+e BmFtdl՛"Dj$Ij˸'l'׿@s&{ !2- Ʊ[uPj,Ci3jMA%Aq`JBe@\SN N =˾|gdX,8*E7g RY.$2>ҟ,TnKwi[@AF ɧ4MnMa\. })w)\A+ $:% 0֌]`sJOe̺k׾1$IjKMRs#[x.CT*rm0d&MϡFRA& L2_>s mAJ /v̽ܔ26s A~) g9L{҃}}~f)Xݚ9 +F؎\0e ]lKcf$>+P0[vbc睛R %6:eJ!.8:h97I µk5G1fso3RkiNMrew䰅Ib v"J wg]8yX`&bt O7AqW+Pyܓn+_,֬0,1+砋tu-ukݔ],_xD?6s$&LShC$s8I%'ƒL|'R4?GgsP)'ѩ4ɠ+h4b3ODIi3]XJ IDATGVbMo@J]{y?WMͨ)T[2qPEP:ykʼ6J !AIA]ܔ@oiWU6ڔ]|ƕns5R3l,vMxͥsFwe aGekHegSFB3w5!9h8 ̿%z cގmlpЫP Fl)"4uJFC3k\Ơ ۊԒb}&&Ziچ(UڛD>11܆\1>ޮ8(0"j!UTI'ڶ̛ $ww&J RTY.9A$PA[]5B%v۫|ϹB)Yi컞Y)DXlow. I*9܀B5!gy '$I9z2q l=߅R kkL\383݈C'"@sI1ZYܹs.F{ٜD5kkkh;RAu<(!ZNsڠ*T)3X+`s}Ƙ%'v.ʬ>dz J blybWI+wyu;2Ob>%/U)9Mi XXصq+ S))`ZW)|cb3#}<I8ME_`oqLΎZ?Âu#R Av!F,Rc,ҶB#)5`dK C@spMlS!p@u¤*mE Jn(`:sPr!J.JuVʸ(91AH@%AyՍ]%)YxLL,lnaղoU+3u9+.6pҶl\M˾O*ۧaⱉЂj(WP١8sA>uMso^;rBN}38HH $^4RhĦ|0v[ ahC ۽Hʿڏfv%2эἁ>$XYYz;ͭ0_{?;w0/CEY'o{,5s(MVo쿘C8sr~A A>_.YoK)D`Jڷ&!a˜}W<}}bcy.еݚx>e?'MHIY\~so^[xx⤏˧|onѣ5Yӓ@jH8s3vGC*E+0p͡`n}  +F_@f{J v( }ˋްdj N=u5BeYt}g[)ODK)toFE+  |'q\ 7nman~9/L.psM\PЈkHXP`7Z30*5>'8 ֬|`4E&Td9LFcG09yN;XZZBYIwiəC8zC}w9ܾq=sP`5}* )&9Jl'm< A $PA\ޝ?Ny#w~Y|B>eޥr wH\ȕ.7qSlABN|r3en3=7CnO?Ău9Aыrܛ0wm=O(u LM-Տ,+h!fi)VL1L+XA.:4˻q99{qqkk˸uHS(2fin$/>ak6}2naV0ACiw}獃0pN  $PA6 5\^#݀N>ܔ.;ϧ$}?ϣ @~.ٙLC䅆7Z|>e2tVl::ЦY ܾq B9*/|kC=Aʙna <-J={ l '`AI 1G54hXLs|J I9)s )&h [>#G#ǰ7obyyNq@y!LNR~Νz1oXYS]'ͿLd=\Ygotޚ|_dzY|2Al;$PA_<5ZW(Rq2sՋ݄JpqƊMq|P3#.v;|k 6_l*|J7eߥCw]_FTd=-X9N9s]n9vST_Ph6Hb@/v;cw\ h&p܇Vkv׮]ŵkWecw >C{ ezZn1EԞ8 N;qR2o@F"%A; Aľ_MTˡQųԅ[Ksxղ¾HYtg`U)eߡr/nTseߥT,"5Ʃgkŷ0wLt7ʧ$M{ ;;k-܃e|^u.P*$8Z9RALDKe/:dS&y!"DQ_Ų~ޜeHtnLOTp`Sc48PZUłrSZ nzl*B{Efٷ?7aw+UpO߬}ﶻ<|gN(tOb xj":1l jN`lr D ȨxP1li$IF4Fd=BDh60>>8X[[իpX]]AAq |≧αK}pSô2Cr|%ޞZC)(i0=̹?<9x A w0˾|'phM'/5n˧ܙ +j{Щ(zmt5`1ucc@5!,..a}}IҶ8FE&&166fiin\[7Z' #PZG?4H$c=in ʀt_)ЅĔ~_wEIĶ@%Ax7kD6  LbjWrntq墡;^x;K¢sT:wLVʾ cmS )K^s ,> F,Ec&gܼYq ~KOIl3<5R9 c}'I H{Mw4uԀ+HF (3B`c8nIB`垴hHAw. JNJ2o]AwH$b Wly%BBeeij(+d`o~ܔn[o_O鵪Zz}Jjn?nJ.S:wAU O&'VU~F=gr3e 30*u@S99xA:I ^LMM@ (5)֐R"M$Iv{7n,bqY*7nB7i6z$s@MqAR "u_Zm~A2$PAoZˉw w qrٓ.(gI7ѱ}gsʾk ĢD&xM!i@ j݄JۘOM , "`3):RfqBe?e//MugjWˈ! ` 8*[>ce}a+2uQ"'3߅+8+8]LMS2U-L@:)Gш q0& SO-|d X{kk7!%i Rj((eDɱ1 ÇE(IlW>'x4IU=YέKTRkfN> sٳ&( }ËQ2 2MT\!Ru}jʐY;[^waH'5M0جl޶*5ɪ{2DB[o=YOn$T}엜ROZih%ؙ=u4ʄɎh0܍q(q+zkX++BJY}^$Angq1=hiz݈{u7;J]goy@@IA^z:*B%S*Bc^a0Xlllݾyey5ҪLX,O \.em8'Cȧ{2S޽s&fq:O5mckyfF 1D3X80 \S'U9F)I$q=._(G\d]ቔ I{6ˁR*bC r.H$ @w^2llvV5*Gޥw򐋈e)\T @ߣ;VrTvݷP ﹀hG>eV,M>Oyp7Ln?@gJ(eZ1lhhkZ)s=Vp[ۭS$W>qoDv?bedݹ'`]3p)( 6MA ov.j]|RG6 !̍c'u1QS9VqMJ Fss 4ț/޺צXz,X֝guw=Y4v'˸|ʹ7M'T>ȎN>3< o$Nc3{MR`1hm>TI3d^-ly73F2%}b}7OCܾٶWE`;b :Ǹ~j gnR$X竸#oVjCvBJ b_{fqCڇRi`c%pqF:ݕy.F4,ϟ= {_B8D?m&ݓ!e8smW]Χ02)(~979cGCCyL%\R``& aK@+ilqx`NN,r= H(Jp/"}/*&b{! ^Ҕwf[^]IK>eaMc|[ϧLGR{(S ] Bea\ork"ɭgP.7{C9;7[1tk@ZI^5ɝRh ~ kE@ݴ=G:ՁGp>x.x8ߟ H$ <G!̽ V#ܔȧ4CYMY9|ߠ;*V\~ZOYlBe92,ܓnP>兯|mGk@nZv-' 1z͐h f,+EJ0%T%מ-U{gacXp@vy1AwH$ 5)~7Ǩ'ιG;Lnkk2JtevI3?vV@'mGl_{˸x*UPU' q&[XQb#'){ J bOҫot_wSmH(DVM= nqBNl,uXb>ee/1d"D6|̧[G+1{=Yf-/Q>r晧(gr8$Lm~`Z10DdK:Z`#0h 0!e:1 bD3~`1V4#jDq 4 :k7TGA'~;yn(+ݬ8II v( =s'($b 2]߰ۺ(չ)yH *9aץ=W)_ YSh]own Ơ. *REޥܔ񩀐97^sO.gN$lxP9r{m"nA'+`JJf_g; :a,ҦtT(|]=?Ƨ$n F#ję@D,f'W˂dII v( =ˋ?X2@Dq_B%g0k+:2nBe%2{.7W3`>%ɦTenYʧ4J¹zp3eٜ}){2SWF ar{^6ҀV{w d`˺B`1$ݭ"O~@'xsVq36EA>+%ɬ'  C] =K j0$^@w6 gC3.z"u9ŚqZuE\\GLX .ޯPRVU~ ϵfBEq_AkoƧ+k@~pOq_L}]^8S8p&.̿L6ݛ7Lޤ+ (e:r3fk4ƱB%ه ,<1Aԇ~Kh65fqEɲt({0A; 9( = PIw> * IDAT2neE|>}aiJ=w@Vʾ >׻g>3=$e8\u-Us?'C]| ofeߔOY^͙<2ܿW/fڇwrI͏:ckAP`ZkܸEdZCi 8&qJbd3dc Si-+Ro EW@$@IAI^reA- D@N@?޽2{M#,Sܔ-8,C U4Qnlt=' +No2)td7Agqo_7w: J͏PI&"]1c1sٓ+.֐JL-Ч0٘BDma 'CEovADWH$ .jˡ QW#R–?WDHHTܣ컐Oף G各J\!a.Be@P͞ QvVVDS}׸'89PWlr+aD>޸nڸ'H5k;ZuN @qXf9RPR188$F'WSi(##E 0[AM,wTM@%A dHq }BvHY[ٷ5Rw8OK'* ޼~ Ps*z"0n(ܓ!.oU)/̿/ܔssrӧOɓۼ;RPJm;%YCV3t91H[*>#ݎJeK;L fQ3B (2H2ʿԹ(=Oݦ! AĞW_/m᦬یQ3}þy.k}*OY#(U7{*Fk7)΃6}q8sY}oƝs\sssSNavvvKsYP9IJW߾Gaz?Oj0h@+ǹu-8<[I J4 @^=;xw-~G~/bqb7qE)s?qn'A$PA{_B,qSUA>iZ٭ҽ0}ٷ㪎:Ge.y})N .R)DF>%g5r>e5; Nr・=YϧA/פEOmyAJ bOwE;]F/+4NZ݀7Xٷ}. TB" nʾ|b֥'T!\g@RBn?s {5g㝷6^AQt#p?!arvv)-S.{ ˫+%ʧ$vg~Ka5(ɣl;w)P&ˏJqMH$ s_M+=0w5)(4zBe$DMٽ컰1gw>ehܔ]ϓWJ/(NioCo;1v8gggq\|󘟟ߓ۱aB>k >0?]^c~4ʺ'MyZ_@ gPf r>)}Wck"3%LƘiEL% ݄J b=$A *[*YHg7*¡˧ );@ʾ+%>s,roh:oַ9{r_uzp̙^3ò0]€ W?{j5S {Iş{͘)N4NJa1(hHpuoʧ;ukN2 +_gX\Gkl V"QNʲҊg?{vσ $PA{ݓU NPU1~K)SʪpWlrvS7HҝKݾݼ~4 pS7f06. MPN< /BAF*\>#˻-WW3|뫶[J1%kdL4eܦgeə8o(r3j>o&hn"/ Z'N Ps F( =] EɐH *wrS.n,Zme\Fl 0)5ot>g#˾q$P="sҹ=SxRzN nи-S !,Sۍ-F<9z*?>8b0\>_ /lPH9#`U"$H2"ww[Rk[ktJeO(nJ݁N<|`ܓ!88 Ķɇ>qt~M1@j e͇Wڍ8s;~ n@IAY6#NC[.ʀp|Jt=}j܄).8*3AG9ܦ)ݺ}⯛$ܓEʧOܘİpeNt*)gr,"˦u|*SL &1̝ n."(4Ը1w ʧ$?ߺqh-ĭq4Z r($0 7AĈAYF&I檬0};d i^DnJ6IrT&)]v˧<}t\m,{܊8Y +V`老kb̈6{1h ΌfOjơ'0R&&v7n}Wؑcϧ>zXYDsǼZ T'{1j@IA4/mB;}ܓ!rsV#JW]h By ' (~1ͧQSSը=vCѢ[ٷr&k%sU*$  Ml7]o|gynaJ cYsh |Gʹ/O@j@D K\L˻cjCA%A1Ҽwr%vSz]a*RzUWDXq,By6?sCO7eP9kJ 7 *,~Q }#v ?^ȄJ')gry]5wɢRP0&0Msa,^ Q(9`\@Jkh& 88bu`SCϧ\_|f'|1cME;#wQ psgw|A ?~=>2-e7ni67~is1+2W~)PX +͝o+g@SΡǕc炙עp|m-=K>sR(sI={'N˙$q*VGcir(2I4s?qnJ( \Yor9JQ+8#!~=J74sS ,TːX^k~<;(~^*{r/J˼ XXX}WMs!NFr_Õ3HjWۭuODJ+IO"1`(4JS4o;+s[xJ'LRdonZ% >v3Sh7D@is'=I(C%AiM ]^*m- I(PG@2}SVtɧ4wkRO9X#|gJݾ1ޤN)e?99>v}$eO2qԩBiw9|xJc;Taʺ2_Uv!ԅqf'˻{ҖwChi $Diŷ/ajbӓS lSRV6#bSټِA\w~lv7KQ 9( ߅\ u8IRxʟ!7 ʾ; =Gd]wQ̳/ʾ4):*8v_-'xT=,,,… 8y >}̙38}4dB vaD7.׳!7$h? s7m?ta `<(EwNS4Edv\|\>?lY㥵&q.>36&D܌bbimsNQs FrPA#K^]GОt=EEXiS,4@Apx 4QR M'd;*hj})lnQC4~.\srF|J8)fOv#zZN?<\İ'gr38ԩS|ʹ-˱uO8.Sjh36x.N|º'iøNJYJaY.mSD|{gL7P̠lڹ[AD 9^|-_̟R֎NDzp9|e8RAd)ײ>#s۠b+ٝ)?Q=Of791 ܧOqvvٱ܍)Ltxׁn041}5tbݓں&8\n!" i@$ᚒOIcgh7mrO J bx7K]q  D]7нk;u?nR"T7|,m.8W|Ʊ^ٓ`Ss]b+9)wEVLPi~ޥ``Ju+Lg1D;((8PАҸ'߅ee[)b7A}x{q&=ͥA AHےH-ixsjs&ȧoS2(ꌅCB)yy?fs!S}̙;O /P>6װJeOqodnmyn!".bS9RH*Mܼh4>$TvuSE,ۗ051IB%?3\t%˟<)jCĞJ b [qS˻uHx,LU즄ߑ7ʾ5ҁ.ܗ[).&8Vܪc!ar7'Oٳ T=<\:Wb=7ɓ(5|psl-ZkH) -@'I DHi\]tTM%>qX^$C, &9AĞ1!dT-Ok X üa+of7NY -މ:($Nsss[09gΜ ,Ξ='L<Ο?]gQaIdw`Z9i2+f٘!ϟLD1 7uҤr7X_߀TF!Dm#kc+7_>xW v~y1gpsv{IA}AJ bxW`A& xT5Vlcj%~286WF=oX)*)đ͟Tb>eM[;+wBm{ IDAT{DԽC߉ș,۹<{k,4nYului &`"2wsqmI#R2a"EI$IVS[*^w=٭W |^c~ʾo<~ٟO|Sv/n2]rdq$G{1 b}׻ )^z- kP8Be/rdű-Tf)B7'< ( }@B˧eee0TtwwTnWwyKe7eeL^Ig9PixpV aʡA,Cиey?Ϟ0wSR̖,kNfOFQ RH:SR nJQC ֬Pֻۍ%ަ?E3潫Wpgeʾ^A@Po bdxy>VEgoF{vvɮOcܝ݂Uosb0CƎzBZDq.\'Nӧ8pNL݅[J[X=`ʭ6NF-%<'38E8"T޷Neiٺ _ýޝ$qFtc0Y:(XV淿% "9( B,,(PrS;xk7Rѡ{e߻pʾۀ&7%ȧ)ާVZ6Q9ŕ}vwۏAYhZqt}tԌio{Q)Ujhwpd%.5 ?i'sOr(-t4ko_9Rr+44c  6 A~\=vy&r [+6}۝{S*%s_kyY* 1gr8Q֕}caakdٓW] Mi=܉J{2kʅicʻZ -S,[2+!*Bed[cZ7|JM}w A'$PA#/N*A) s(诉`{]kܔ@wMyB˂nJ 4Ǝ?kS睯Ȁ -Loʧܓ.ŇFfLeݓ`ЌC;â_ {G͟mc24M ly)?rn_QCl&2?0SAD@IA_Er{] >y5ȩTyݾ{c=ܔfJf[?v6˨*kʾ7u:NP*93J*}+dߍɻQx'T:*&!rk*B&T2JASLNlf7 ׽8\@QdDB5N:MVP), zͥ }y:IN`wT|ʩI* ( '}5v2˧QY#TZe߽͊uBe%g|ʊ|J8Z{rPs(s>}ܭ ;(•vq^ HЦ 84cЅpziݓ\d7."[GҐ2EtwM.k.teUqSC=ۗ  @IA/Fq%J*>2 5t~|p`ʓ 9-W6gG>e혁J# 6 's?Ck?C9[n˧GMIA( +_{@'=!xd7^7uB)˒j2̙#ro ˧l'M̙3=O /)➬׋WS)S `Lk ӽIo; LD`6H:`c,T͐ Rө;xN7{*OʾO)S7AA@IA:{z(l>Y6D7o`Xݾm@(l-ѭsM OQZwϾ,SF3C{ȅ (gr8y$Ξ=[ȧ<q^[)Vgb-֪t!D*ND0 mf&"$$'ɃÙΓL (¡8lEFV"1D3r8$֗sξTZyXU>8ӽkWZ{NmA#{Vbk8E2?6wʺ'$ڶAtTj)ɀn>e SsΧlvo ,Sr70 %0 so-lNk˱mFLnJ/yw}@7̦,-SjA> ˾{Yv_+? 3yv|J/|{3>aQә|[XO~!\vfʊRI!{R)w_6W fqS^ ٓsTIw)2$SF2}P0 <@0 Ü+6*GCݮuT@&@urV랫( nԺe;!8Oø{z=`ce߾ޗ}ߋ7vn6Y @k7 5•w8$$HJGHEhtx` ݟ&DS =7eC)1|JC >O0 <@0 u^֟dnJ WV ;uʾXaR_zQQpغ鎕C;Ĺteћtʧ)r?FO|l Ι<wn ߿ָ'zH {2'=‹!{R JUF &.8 ݝpMCn O3&)|J 0 0]g(S.,5ao;HTrSe'qTsr}w鸐=<.TbȽOܓCQdȺ' =i`2wK &RfDZo)_ B)p:JcSx}_Na?`augyeP)H1FܔC;BY )޿,LnO.=Rs\ϙįR>ϭ|[ l,Tmvwjd:H2PpOFp"E\kQ  s~|ʤۄc ˧ٙ:;ODB7?oa澆Ja_K*ۦP__Dن1)T~] mܔ۰~`Xș*;nʝ2Rݔ}fͼ_8g^ɧ|c&5Be[/c.p]8RA JU0ƠmkV `\ ^4F \ؚR2=/nZ(˧D%ܹaaad5BTUܷWvL]Ǎ?BH>e\`\n7%wT)7sOXFQʙyɁ'*= r£1('''E=TPjb V% 8rU≠8 08@r!L&v+F&T͓Sۇ\0 ܗ@0 U; *ecJ"r/TݧO)\̄}3+ eb.Pn8ރXޝs0yoͧ?wS%xcVv]-{()D AuIUUZmԋZp"}PC(Cdۺ5ɉkʾi6ȧeC%G/臞Su2 0̽ 0]m:x5cyQ rlD7e5}7e~,];d:*P=oBX}s=Pݻ9gŋ{7)jBPz*2I͘'ÅJII* FZY@U>2Q ܔȄн{|JʆL?Hg|ueCAɧom9aaaT(ۼ.IݔA< e;C6qS& 7/>n)d;Bz$yrn&OҲﻕOyZf̶ 1P~\ﶫ% 4AKI+,sҹ']i-ﮠ hur h5w81}(TvK* L"2-sͧeܝ{?D;&S2 0:,P2 0w?Q;q\BuK.C{e~Be'MDl8ɈA,[Bɓp7/TzYS^߽5"QM xe̺'ug$Q8esOn*!= `dNx&TRH ) 8BHw,/F۶NKp7p)a{(aI ZlL) @Ӷ,'Җ|d%7iQ\'.)Oe9ਔ;?ujg˻= >,}^>!sOtܔ1{R8$E-˻@" BI(UA Zhb4-*wwow5 e7=@ٷ?u2n@|ʴ{(rM.Ѿ|Ja^JaA>*)\W˙嘛W~W)ΦlљJ>eۈW!.>| cFnL7N};7|{Z&v&!`½ٕatI=)-Rmj4u:uOPx>/ɧ״e+35xҗ}ʾ۸up˾a{(a}A{nJݢTB4I9ղd'/hz28,OOٽ +pT= tTI1熱|-hC6.)q÷Ttq8*(U0ЭsO5H(Nwll/9!*nwWL rUXu*GڶMtF}x 0= 0]HG$ÎP;S"4˯Ml;FwNRb>PEM|"ͧ19o{m>eeom*as 0]%,^컓O)++Nk1Sh Dzp Sީo+C|ʒQ;*O⠜<؉Νrws$sZ }o ɡ#nv9ܓv֮s'>XP&!%I߹[*6hr,@mAqSlޙKAZN{sSv>,Lۘ O=52 0%0 sw t|-ʧ"WB'_m?ֺ#D&|J?3vKGdJKt˻Oey4s0ɜ5c_6x=Cmbnݓ$@RRnL"e'yqRʺSdSX-j m6t` k )ﵔ}O89uNލ);A*ʧ0 0yJa.aIMN N65}S4=2uAE3Үϧ @SA0e4;88]7e>5DKf]>#W0 0w(a3ogm*TʾG)[4Fez"oh,I!ݱJY^]U>eZZ7=II/$ :oB6y-4s3g}M|*)75|8ĹGxY)׍eOfڙ?ֹؽ8)mi7 BUP*j@\UwnT Ce>zBoȖ)qb2/;BcӞ$wuʾe컺<a%0 s~'y ƤPi1IӃ*EXO}dCr| :w89&`8yΛs&{;#~j{&8 ?z ok[72 nй[rEjq IDATN .{RUɦ^a5ì=)T}5_f o(?& !tͅJC\Kٍ?2FpT8Ɨ}{rsca 0̙CPIn{O}6oL&׀qj.@K3uLd3*;em"n;kݔ!1<9(}d˹{k*^?Pw>..T?kT.=UJ$'E.i89 a R's4]Y-8b>4O}SvߏnJ#~fs=IZ븇uI{=d侕hGl?ȼa%0 s~et/ lD7veٲ` I2@ZCH֒ySj.Q#]|J AZJM)A |:PLt9ɛ~cim^v> W,ϒ4g{9&{~kq9>>nGo݌e!bn ͞ >CH8$'U&6{iKsYF܁ޛ=)}ù %{!q`B%Iec2Wf2Φ Y7.)a%0 s|_b w*Sud-͏sEŴ9ݲڕFr@1MzDܨ㷠ݔioO\\S&b(Cnl\{sg֟oCG?L22/w_okS{wm=iw1'R6msI9`ZJ;Oe2q3L('qO gЅd yvvs___ޝS2 0yJa1Gs9v IٷvbT;"$+Iw#)Hgou:ȸiٷ"[{r eHv.\|c;xϜ8͙|229.=#o.oX}p!sO*ݱ8a2wI*TUںFdt>N=1_Ō ,d )Mx(䮼OY*s6*;k;«`z %T8Ɵ@IxR<;aaN 03?tk+sJ*_Ej( hR)sy1Z-6|J͋nʲ^:(J#ζ]/n,Tw]ԩw Ιd>_r+J_}_4ʻ=6-|JA)&Q[c5?B[/=;L/ ۋ桲ոA>eyۿ5BeHJ׳ t]SpmCJLhln 0 s`a9{懮;7hwFڵ%ɋ||M;*ZKbٷ+Y.wSSGuNk3=m㨴]qzOvOr$spWWx T~}}07zpyQ\UI!tV @*fD\^:.Ja-8)8026II)SE'ʾm_̧ݻ@xEKgd;0/as@0 Ü)8NB@W֖-ϧ$΁/Kƕb nᨍyjcKͧltuSZ1L8ЧjOhyM>Hptv?;Xct˹9g qlPۺ^_3yf׏V{>_5߂i˻$ݻms FkMjjqإ{1ʡl`29!}3?̢l#N"̮=#_& Ie 0%0 s,]t!ƅû"7ɧ4g[2qa bԏN> tE7tS*!1D Ra%:*0R]:Ϟx]8gy7^'B԰0›Gqeww7;wE !@R@(9YUH)ѬVW ԋ9]d:G`+n6m7u4O ȧb'~OSS]Ѵ4u6!6o-}3 0g 0̙Bɨݾ|)Cٷߓ5W*3P)gͧ}Ϯ[ Η}o"TnO90Hlr]7e<1"T!a]#?s9i97L2/ƭuSW0:(R /j|?3껷n'q|d)s2'k,kOsʰ9n ^sށ|JJ{W_aR `;Ϙ)=B,yK ) O bFWɄJ#;$kO3_I^ 9 eDt `pCGS!<&wOM)Pi>eq #H'oBKKrX]Gi;(9g߱q^/FL~ۣf!(%4DΩN\)[Np}w5qCt]Cfp&f܀P0OP>e==Kݔ))iF:}&N?9 ^aaSJaL7M\tWo×},_-قί!+LBeݺ%?AJ ]$fGΧ*累ԅ|ʒ0fHc?wSZNA}-˙rn~Ėv ym Wm]`^ \ޝ\•/7ͧ,."{6vʾ8 0i-\B|xOtc+ݶ܆)/wz 0̙%0 sb$ T,UIJ'P \8ݲo+jE1Tvfd(,e߾NV e7ep> ɧ3p$o^~%iId޶ UIh(s I\_6oij |vWXa?M!FvDJt̳(<ʮP7hW];/cҗџ7Jnꦴ$Fd6d~}:> }SBޜo4a,P2 0gJZޝ ~>sQmRʝa'xH00qYeɩ %$B>[8-v)mpGPyȧܹdT0.Rׯ_ onjTzH*){R{R[݇!ARڡ =ǤxH\kZrads zɽpp>B> )}CMP_*g~j`-q_Ox { 웅Ia 0̙"H$HrB _3OID IeEږ>ՎBun&~9^(&W"g&5c_,}){z&r['!3f'9gyyZmpCwuOJ'_=)\n RMT' ?%%9GE"p]!4u1}ޙڿf K(g>a#G,O52?H'Go.>o;*}Lw&7;T_+2)AP{"{:TO 0,P2 0gW/d!:)=^Lk^>'loJD7eXЅo|J mc2sr02n3j$%|Ş{ؽX}-Kȸ.n )z]Myܟkʧ?])b3 = &e_3G۶A&(|6qI[;w M 9)%HHHUA)JUPBhV+|#o?gg?/8ZZ1.躂ɷ舣&n.Mz rgOt?t3 AʻeУ#tM#cS$s3: }Kɂ޴ TI eiܓ$JA RUT2@SX, 껷qhg+{Sx.c;7i7vEqGevQr0y2 BeHgvt{q)Ia(a3v U"[o|Jr$Hxq-_s+&cQ 0 w"%){}^R;pB:2 ~MK؝_5M20hZ !6)}!9'NPWXs=-IA可/o/juű=uScEHYعg ۘd4|ɷKPDHH I5ڕuO˅vn9^| Yٷ*o&n=/@*)){%rݶ0-Q4󐣲sTv>K^˽<Ӡ[eOn/>|JΙd`a9Sԭ"/ͧ/@۴A RخaG\;P N&wShsu)ѹA 8!m=3*JJ5-򂛒ϲppf98@ΙdW}\&fY-sIWM `{t$\uP ݓ JUR^.<:t\}6{_c73O\彩+^_Ge1s2'*;5Bexo_jRao'R>%L2 @0 Ü)䄼󘖳u ܔ%yJ_6x*9)&ω^͇4B!cI@u)k?p.8 J٢6:48udcSr970 0̙!WмhCkE/Tv*Ap i IXvx3W>8ʆ,L2 @0 ÜcB@;فXmc'aYSft\2@s>Y2۟u ;ы۞/R?BD' ;?td&!wM$h`t;yXÇ}s&f_~ eʕI79Vos'ST*nk  !\iJU Mֹvo~OIJʎJ5BGyߤc~ ŅsWʾ|J mCLE131ƛfw@>~\1S{؄Dxyi>Ydy`a93zi2z~A¾6"\#ABd ŅvnDh$ѮBiχdaIN+UVs_l u\*1|J>JȎ@'tЈ2c` @\|Иi5K$Ôo]zerh]t'ܓ$@)Im*fI qln[] J)0M9ʧwq> {(isN*v^$u BeZw{73f2k?Ia (a3ek,[rMd\5@Bٯ/b9QLtS>Z/ oNLk8Zk0©_%ݾ<)mpC29?Dt4/^Er8EOVV|ž07e8zBtS6MznL q&SIӱnWo@ 趼;ƥk0M]sϰ80z(=/}h" Pҹ']n !!$|/A{+&ivj&B "6l 8x/Oy[g/)\ޝcGl26l{r/jCW:g?`qaa93R7P$F/BpUGD\.PpZ3%_h c |J-Utsw IDAT9ʾ [}eOjGacm۝8Xٷ2.CN#QIߧZkm,B@J 1~ub:EuNJ!{eX D)$@R)Ǻ(n,X]- u+uTvs۸~ ey>S:{a z#G君'M@/ >vtf?At.6k)Ey70 %0 sf15T™5SVI+BnҲoݺ˧z_6̧ݾ xӯc*To/TV!$T^F'_RoP2u+\ϙ إΝe4ˣc0̃5ؘP9@ -vH뜔:Íi=vvQB@(&PU*H!ϱZa5?1٣$Ta5 o3iw1Fʾ0* kSO`/S) 'ǐpvO2 0w.fa _m˭ vJ+iw,#M, \ZR$\v8GVJrdoTn^s_RGZp?/mп:F~x~t{lyKD]d8uQ۶-ڶʹ W9%oA|J fe߈bg'j5qOjmE ʾA1)!D&TvEĒP)/>4Z*\O'o}P﨔rx78kIU9gͧI)=mIMݽ*U%V#GX܆iw|cAϧͧLH'݉ᦺ5er3Oyw͞:`{=0 ÜXda A^f9.r+iI Ϙ4Ĺm#Jٖs)J) N%g %k;k+TI ]OԔͧ DNG{݆ u*emֶ'WPm8ݬI@qa rW]iweb\AKD+G+|@Uʺ' `H D%Z@$tJi˃[hG !s{.ǂ|Mua}Tʧ[έ8,{qQqwB\D8`3=0 Üa9ߌ"qD̆ѓ1 y!!ϧdҒ HgSOݔ!ER E#QO[+L)-Er ^&)n|d9:O3?}:{D|>HVL\)Ua2^}/}dK{J?A)V1ہ`TRT)Upg"'P {_[MTbq1H#nEn7>F>eJ7'.|Kϕ:?#ɡh;ҟFard da da΄7[vGnhHHހSK.ZMt %ˆ:dݎe WR흑ԘSNwO}#SƊw }{^[\˧s'hC~ʶmmC?R3o~vy/}m!`wk;j 퀪 dd*(m qVI)VGLPUg^ibk wo|/~1\ٛޙ|c) z&e;}m*eO{{a9O@0 Ü ށ((4!'v˫$25 ; M'"/)ӊiR[N>O?[RMv˗}G}ՎcsRv˾v>vPE;u72}4Zkhšr&,9a?`BwЮV &PUHiB@VTUA64i A tɶQ/XܾiKLfwMo.T"^iO︱M3ϑ< iZ*}CrcI`$0 soaL 3HRl)|y-iw(veJRCw< ve^I7%e%nLgu4p5.]'x.w]/o ~>p7JJ)uIhmYٷ.Aqވ7{c97kA$:}x78z]>lj]J[-¤@U&U9BBf]+ԋ#,on+bZGzAr(O=>F"e7ϥpCPM]E4kWJn(7rP2g=|pݓ 0Ja̸P/%k?⼥kk, U[Mqamdy8.ͧ-g?v0}ĵW˿ŠHW"㚣,z1Mf{R\[U}c$Y!JI)–v߾ S/{2S ^7 Qp T~o)/kꎙпR=fy=?Cida\0 Üqf|GPPKl]OI>c1)Te;qrﶁka}7SO骪]՝+v&})[deiY:|[x|Jcs1)[5[6~]ȧ]|Jc4 CXarg/ !_=Fayw 1ٮRه*wv2L I.A{NLPI[+GXܺf1Ieݓvqym5/g_Y]a79W}|]Ӛ|J۹'Kĉ{a9@0 ÜBئ7onojŋpce*QU*6N$8@|<:;.rvF~.&9x1RxYt85P{$ ()c>e"SM Zkv'L\To3mFco=<߰/g EH'NRANNPJAX-Z+Np$ .˪yRm@դ3`vS{d J")ݽ|w''ȧD>pM&{w)G?7Qb$0 s.oaL,]iko̧JKI@,Rq`3!m$;oZKC^f2VV Jʾ}I_OI1ܔuG|VQ8Se,ݼҲrwc4َ ݲ)Sco\7%|>ƸJSJ)-)|tƖsk mmi꩟ JF;q^V> sEe.>u`obwbfK*UttRZ4Z߀&STUJڌ˃X)GM/W*k~'ȧ4Y÷k˾m}').]6{a9ϰ@0 Ü 9, u58beӂ K/9g!)]<@:muXQO ljcs0~^? a{ٍk)w$2 ͉d;k @ !mf$M?Dž|Jg{fs'S7BCLg'N* !+L&3f;ؙ@ mux +VX`ytŭlidsq |p 슄IH~f0s]6ȧJWr:,àS`uN`$0 saa9ȕEt4 MsuREf 5mw(IhEAUYmnpe;I>)x*ɮuXڃBn~];q}];kQ ڶE4D]J[NO};HҟaXv/}絵U۶yvkG;ZA!f;& )!B5b6lI55֊hh'`RٟJVh'or7*25"T7ewMI)}>3]3_3O؟uBei;~El'T\׹Yu`$0 saa99cJHHO˼;:(vEg}À$iiZk D"\&ʐ㓜hkB ;c ;6nHSy4N}w^J"m{Ԏ:4sŇ|qzN$*k]~W&t-ڦ_qdUYQI+NNw0l)mӢnP-mIHHPMlVt2+ &ŞH,KD oQs|fFJܲ|w*T^ޛƲaLJŐs3SF׸)=0 ÜwXdalFG-Cvpnk/b@h_=" C)FE  }@' _clNhF:Vtbb! ]{̧D,v[pR~j,)1ۊRNO)Eh́?{ ]Y)_d ?ylIT@Uݚt".lTM@P9](њA8!뚮&L\.<<0 bwM H{eiq|Jfʢ P9$]}6-;OvPο  vO2 0,P2 0g HkRx7Nvyh[:WPbck`td\y9ZjJQƻ6KR;1!"3j-Sz5˧i&)a~>%%]{nCm\nDq@Ay[Z1vc7ŏ<y/; `#Ǟ]lncEtTMAU*+4vݝ=L 0pdiQ-Zc+Id2l:[8]4G8~Nd:\؅BoB~6al]dth _}')fOn!|߰{a`a9۵J'FC4H' W QiihF8Ҋҗ}SvPO3+tC2P ~H$(+tI/TJ) 3}S n0uў _Trkֺ(]>%p\4ɲR*ٴ<`|_^^ILY/T  1qRM&v}L&V uݢu RVNfPRBj,noݴ'_\r2dG옽PIɎ$wzm@-O즌B"2Oqۤf{v'<'a{~a99(6g]IW.D+(t޶"v- ;&H=+E2㶑m#B&#?+i' e__ ys>cȉ.:-]7M mR*UDn[<Ώ#U'ҿiU|aKv_߳/6?)믢@{{6wrb*ʊݻlJ*hQ7 ˦AӶ$89dˣݺōCpHt)Dv^^aI.6x3{bVf c1CorO;LDtm߲$g/^ywgnJs/|y>aNJax<* ߜ&=Cvn^eۆdO)Hxˡ4Y31.<2Ǜ(eM>eסXΧL˾o`)c @kVkhSJRA~~()vNѶmQϧtJը?0̽8w; ր.^ك@; f;;>vgBmm9r²Q75Za |S)V#oэs^97 A>;\'; HΧskgOΡǡ|ʯ_ǝ2Ngn Ɠosi70 sJa.Op=v^G7s;J8't?w3u< XsKw%9u靚LtdFe*skkt!G)%;~ڦnm9REw;ƳgIfeWrq (ʯb^7?~7espՠ  vmd 0`gw{`jWK,VMG&BH(U9Goܾ)П/59w_9*ލD $&}f,VfQ,}Y8w]xpeo/)wRH(0L3ߺ70%ĥz6d]Rw,#/3 zu;cCwʾqap!3p-껷ŏ?+{S<ʾ8Z{4vv{r2mIa枃JaM];$ҙg$(6ɧ4ݹ|J6Q;bK9iBOi˧qHut"I;ᒬhp|JIi7Mt<|Jhݶ)Y& Kv+T'B@AȌBpws1$wܘk)a?J^m+9qo.ACv!}Ċ{ؿp /`w Ay-^-Qk7H@II5lfP8:1!h)ɤO?rXs]i{B%9q4 ,_h>ei"{:d0'aJa tc kQAЉiNL tъFP (%mɱfI+TjhW= 4pMmy(I;gm#z$3[~ WGPe&ve;s[JRtB:C%9\pqSv>k4v7?{#Is⚕U=;;;)D]``G˫IY4 E!À-A>!єLjII4,7`׻&W^fwg{fVUȈ8'"#23+#O8ݕ=A ٧ݔk6,'E_u[MN1>w3GiJR8Av0=g4) ˪l@т)$bWr1mLP,uL \{<+4=pdzݻ)!oO(oϧyӳ!s*N͗bXOPX,롉 V)p"4 흕譑iiq*mʼEpSXrNsr>yow$otR52oW' !MZըmgn!ms7z8m * Z<_W@OJw]'Mb}2W;Ae}]2 , {w DUX,Q4I r>X6Ksn]*QJTIh\gsS ׭T|/=/=/=gN#ldX,֓*,zh"h eI 3cABlvcMw9iσJՔT 8ǦnD`8R10[PբG8D%O Z2Gihz )6t' 6PK{nfK!{)ACho4}2tS^;,~ ߺ|uYܔ`ld>Lr4LI|4>vw1A$%ʪbl1|>7qDG8jdDu&o8 ,!?؁@g [*Xwpl 錠^7N֤3xQxQa- T{bXOPX,IGY (۔s:&!3Ѿ $Jk QYf`Rv 0ҙ2W)A2˧pxYul'RkS:NЈA P 5`A4ViaHv y6rʻʧ̈0*(5Oy?lnJИBcL{>vwu]( -X ,ښ(FgcPcLn!|Eڥ ACZP֫W٬]K9g ? ʞOS=tey8oܽ2x *JߩX̬gx bXPX,IVb6SтHєn磆e|I14MqH)inb W4MgV[ght=!^ɧ4OJM8#?)Hoҵb)u;\עm 7Y k=K>-Y$ ]śoٛb=?}@^kjT޳prgr4L3'$C6>GQ%s' ,]n(B IU)NotqݧT9*8. i2ϱf|=G}"2¯D~5ZWcuP]Y,KlbX,ѿ? "i`I QvȌ!2~0XBH!Ls|4#8lƆ'IB@ٵsn>{G4%/Q#V%"L(F=IV{Aqs:#uR=! M7~Ov.woWI;[ڇ ^)U N:!ՁTw=4H3 'SSֽw=$I( b*UI!KsqR )&G0}x ?ߦs؆v~{o{Ak2>9~A<0nK $Z!ZS̗;7uYo:)2ӂQecuTW UCA;|JMi򥅰NM==|Jc 2cNAٷ5 9&8TK5~u,֓|kG@hj{;Az8 19#hl>lndY H"dq4IAJMpzt[(O!"x<ڸ+w XW6Y i׺kժ8sS;C - SgpT67kCdSHV|J,$%bKҴ!]1mc7R11aiRZB H&.ّ4PH5dl4ɧ$26vuj ԦO:;QO ۍ\C%4~δz1ȧA>-1U40R wlrNWZ =4Og }mGnL/Zx"߁r,LRal,Q[WtKQ,ɐ XΧ9&G=YNt3;p}=ޞg'}x`sS GKQw0֐ *~HZ:+ JW}p+7; l\ܕ}oʧ*,D%bli6iiJus<E6Y!d_cd j[4! 4I.9$8ZARUUYgZi@dNFԮöCڕ5ZҌJF #ͺ4KOmBݵP`pnKDOE°ϓHDv3ݸJ d`q Y%7zd2pJpd:4azN6p2up2prs$t.g/XKԪlD9ibӣm)W^mzW݁F7O|reiCX]ҽәyɧO {rNʧETpbX1dX,CsP$&觃 MED[ jX&4BNfK6ݿ}7@Z)S)n$P{[MҖMw ѬS- 8HI_8BA0)ѶRɜ}x4J*]oטǕ Mf6UW65ihrZGдi@e0zW:p2z799p2 Q"wZeYr|l|bDU@9dFX`rth!bEaCkYz_Ü˾턝ޓvnb:.99`tt˾GegxrP|f}J*MMNb>b@bXäǾ :!m`Aʺ_m ' tT6ߒlm#T `˧TZCUe'$|*P]CKq-ƥhK͕ztfMi72 j>em)SV(7sTkVs3XOy ?0j{5 Ю+붙i(INCbdQgNΧ(88%)$U1΁j6A3)nɐo[_{/1c7ʖsr۹)>Gw|w{]ɧwYO皢tUi&S+\:b=X,/]o]w[ݨ?Kv͆ uۍݬInn>i琭NݾӶM۷-!{75]xE:<]?s\BV AcPk4nl2A8Zv j:ޮ{͠m!wt:"pT9Ve``#[ Q Nn ⧗ '9p22 EQju!$8FdȒ bm-ԓSR5~x5/TӼ,b=JGm,z"Ȼ}$I{%OͰT[hJ =c¹ʫiOiSʰ[StY9eD9 MqLI[kt4O|JkQiIΧlʾ)w*ɯhS*t6CQoA\kᅨZFI$G&9y{X8YK3f(PU48Ii"K2DNn`vx 3OAf\1v4x eQxof%W6νM{qT6ރu0F6S::JA=kpO}\8[/T嗕zmX,Jb=T&.1O`MBle@~_m;aeLQk]97iMhvЈ|J) XL͹A'#hjSJ X<giG}`Su AZA+@!\ͧ4@22mVe[ ד{:x$>.~nsի_B}7ިq|p`PbX'F (Y,PeJ4r.~» MiKH:&} H5B)5ZhiYfdJj\Ue kBIl$|JVA3n0kc8qD:SF7Սn>%A?df*6)8Ͼ]YOݒNO0w4C#9Mx{;3pRHebe6Jq!IdqXHr&;Ds܄hҫeƖqS8u#Бs;'4.|GlI"{abW4pSz4>U/]g\T^qbX,$,z2f`LefM{9E$ ZˤC'uUPBMMٷ-VHV+8݇nawdxf8@nmrSx4ʾ[2E(gy"D%=7hJ\ *Y,X%bگ<.f웨qְE݆um\(HiKEj)i(g[V>s3s,uʠ4S Ц N$ P*aS>8=5] +STx=8]<\M 0d=)OVd!7{ FN+MY>;rblɺ`qIDQ,͐F)"P&s:Ƿ!d'UѰ;gx(W29*}G'qr܃c#_)&"\2 k`eQk )$ 0]k Km.2ٌ6ǁ ^4ʸ[ul`s]7%Pb=+0XwnJ PM']5pRf9I$ˑ,hgq@ppr:|>â0p !E͜L86s:eݛ^۹CsAJ2P݅t]F=Y=}z)tl3'<,ObX'E (Y,pED4{9 s4iCpЈ sJ;nhdNY Nfv{agg(N 99t:|1G औuN "s 'u,V :PC{݄w7%pc2 A/ ˨9gߏ{.Ƿȧ ]'dN{8bXPX,*c w5.Fڍq|J$w\<uZA2 &<5;S;Lqc&ͧTl&T+4B4ZcM>% TS6c "[IM8"fm6ˤRL n)k`$<SX^tZ㦜CqB䣠;EfH hx=;cDq`Q,1|\+(!E:'8E$|m㜼ye!٘zeCH)Zfl)eX,z\ĀbXU^-d/teua>e+òohʺ\3i]Χ8)vy1;Q9̢Χ5R$5 :cķq; a}ilFRqSvrcB |r W׆ͼnӲd98;`p|SwwvxhQ e4Ù/f(6 q(FHm|͏QY8yɐjEA=M{DР0o}Jq6?IN&[ Mם3?{)^ս'reߜObXI (Y,6u@;&e2#M 4fR-0 ZX.OD IDAT&?li<;O !Kv :k*!Ħ|J}i6|JEہ"4ě2컕OvN粩\\g{b= 9'7Tu:=FqtN@faYw4ϑ;6or<߁bTJ( Lg3S, U'18A'3 'G[H.X 3B4ƶTHF_BޓO9'!A9zk䀳nJ,z"S6Zh,0 5M]ϰaxOS"S/{hAA>")BC)Mm81ׂ|JSinWImn&2+Z!@Ks|>ey| ˾)ȧrGnOW%8_z{bw u|f8Q"Nr'G;3A e]XΧg TUj DR"I,N 48yNn|D$_,#sVa>Rk@e蛯}cוZ;;:':nJ| zQy)^BmwI߬`;̧K.fX,CJb=tϿ?V\42(^S`uȆhڒAHw>u@x9,Q LHK\ZA0Q7Ҩ*[69 h-6qQj! T5RI6ںB9SfdK=S,KRG^%u,# @UUS>;Y0龒I!Gv0E>#2(FYUX, Ss, Tue(Bbd'Zc9bzdN^D$_سP{|S A{2h 7{|q{ƴj?xGedA{){ʧ|me,z(b@bXG n  f6qذXɧ)Zd}O}_Ewa>-䜔 odJ]>eL|JE9O頦ᔦһɧ$؝[!" < |J]sO h ym`dg3OҺCTUh3ug̮}잳d꜓9vvv1N8YNg48AHBk,SLn:&7>Fyrɋiٷ-@˧l 7Wrk0xr5k>eE{n㠾u6rTOkN )Y,ŀbX]Wҵ 2϶+*n@ `˒y&@Pd~U$Sg09wѺ J}3W&-\;R2o[-l@>*HS5dOijܙ|J{>Lci\D{pee0d=6jPj}%b_b=t_9wv 6t{C$}gX*˛tR ]d~X{=%ZZR2*.:t#j2=Z+@+H O[Q$sv)m9ʵqaA+5fOnPtA,۹,ԛ5|7jO.:| |YwfI#G11p2IXK \ %jU<@HNQLOqrxczp 1D!L_T:@}⏐Çc\*ѻIe 33A5;įw-gwSSvu,^9g6w?.{+ΧdX,Jb=R,EWn l4/0,WcW uP{>2Ѯ~%-F4PA;ea>Ɂ ) ,jOimʧ@OIV va㚒ҞKA=<¾ڦێ@,כ[I\=:=ϛ4s2 qr!FqZkb(PW •ugȒr N5n>=H,{-Ao s? #rSll ;M?l;:8*{s(<0U. _Ze *Y,u?ĀbXD뿄^)fOHmvY@&ΕΎwp-? Ͼb,D/cdR6|J8$ t]A LOA@0*,V?$OBUS[; wY"?THʶ$Q '{eݔz6GmL4GY.gAi:m)ӏ1YuR*~Wh.fX,=%b^1XAft[fsS ޻u{{ϿjgmCd8Aa]30R0{;|JT nO e˾Zϧe٧B.2|ٷV*{aYv"fr4|8rԂ>/5r|2s%4EsSҝg#i ",Ueʺs, 5 2B'Hi jY`v|Ƿ5,oB&ZnJ ٴq~̻<^pf@0:݀Twݵ>mhy9|7hJ9bXw+,ztnzAe;2ڹ=R>ޭh'ϼj|YZծL\y<–x`3ꈦ㷂2S)[PSulGےlٷ>V Ѹ&K3pN m\[.K]Ih(hH[Qy/Mqw(zAV,ӛ=iOP t%2[w&k2sDI-ʪb|1â(\Ъ6pRDNfi$JP#ܹy '85 \{Ԑ ' !NCva;tւ ֭cpnϭՌ˻\Ѷꇺsi:SX,ŀbXD??|i!6 K|nw:#< N{fZ5rgS i!lhi EfV(Hף0`P(z礹PsMJ5e߰c.oS9u{bϥ4Y=ֱܡЭ?Xw6[SXAp2cL?x7p2mwvy!LQ@C`Y(担]Ъ[m(@az6Nn]ɭ(Sd?+k0 Jk:[#Q+n Zgb}Qwܘg(nm*TKש=_ڽNObX{Jb=)ր/nS /NG_σ^s6NCT k-l ×,º5w 9 FQP1S BSޔ})c <-8+$@$,k\OiϷS:%Y<"Hv߿9zj5𮚜bчyPfqN&i,7eY>BfeY`QXI @,ɐDH),gSLq|cLn`y#d> DO3mO>jØ6p5^!k>FZx$;)3_KݧoK uEm%yrJ7)Y,ub@bXG=0Vh:7QP=/s\x 9O| myx9jԃV>w`Sza>% HLv) a7iר@IW$֔}|J@ ӭS9wҁ.<[>%`mY2țAiN|l4Bβ*bDY-("!dIj:u+SLpǘ޾(H.9م6tO{)t߻.-Gew)'8iw<㦡|ʷߖdX,֠PX,u (mgYLNow`9>_r|!f3G@׮ƚ2fE >K}~6ak )OivRXe*!<|m>6-:Laܦ9%j۲O~:N<e;YeLRY]inJIDXĢ(X. Ԫp2idH%͏1;,"h'\`!.}vTjw}06Pɧ_K{L8Zp^I(^n>%}X,kPX,V$%&~dr\)L.T:0 TFZCz`:W@toL-OZRlRp9b Vjd ʾA ,l)I5e cx|nwɧ :)ʾOL|w|f9iLh,!2DqMeD]8)D,#I,ɐ)"APENoǘ>@==_hI'j66rc>e߽twHT[>妥¿_S|ʾ2q7~e%(N| msV]*q|LcKx+bXFb~P1O_z0R3APoҸ&,ϑr$i%PSҽ\ppy !l3Sҝ bm^k(IZg)pS9VիnJ?Culv&Q׀LCk{6kw +?};P/rEp>%b0dX,c&_ vPcrQ>eyzdDR)BIf+l)}Y6{l'm0Rim;_; .*|ɳʕ%wnK$; W$AʜKR;Rh~[ 靓RZ *yȚ'5PoOmux;eߥ"g @eN{bͯS|냏"J:s 5I`ɛ`Rf9,5|4k&kheX( uUpd7iHQ.8=:ɭ8u ŝг/ q}ٷRO`Ɩ/>yJͧ;xpݻŬx!)r|YImOzi:9Pʾ9bXN (Y,H W6㟿_r)_J l.7l4g7v*/̧e|J" lʧe4\f%ɧ֍RuYڒE[Ôl;̭ $!v7ДCkEɧwG=+m1ݓ7O[I) t(F;4i8I'bߩ;GLޤPEUbQK)6Nc 'd)eR5ɛpzp2N 4ntS )]T?2닿ܔQ`Soݾ҃`;opYf/R9ףk#AZ5&eSȔvntnH|J{c0\B"A+0MxC#e33J}RNzٟ ,eQ!JDqڔtg9,@ؼrEQ`,P%2]iddNbrj&o]c`@‹A~F7mȧ율=)hf %:nJ`-ۥ՝C :N}trRsq 'CS^b>b@bXGgg0rkLX\DK͠UP>tgKd6̮P>Oi-J/)W)Cֵ'˔vn²ojSJ%ʔuR;t+u)=q*m,} NO0>p7A:8HNI ("UED,,d H q<5#;89[1}鉁/P66Sιs=ڲ3Ji)b>>> V&XKŏ&O8b>]b@bXG7,q|᧰ |j<~3w˻ KJkDA qpo_;OiW>ͩRrE? !yM>%@{)M)'˿D Rv>%D95B{Bԁ퐦QzCݯZ89y{AMdCf-N3sq #J*,ESҭ RDHY8)chT9LJ8uװ8:D=9L$Ͻ .԰~{|F ٝu>e^9tz svr';e{˧\bX1dX,Cᅬy(Wu!|)yl !{R[E͞X6@P /-mK=԰к|J-&OP@W)Riѕs J -@40H:^azsM ut:֖}3dݭx  (ũuOY(km;u/\.,K`8Ffȓ qA ӣCߺuwS4Afm=PUäg2Fj6xI[ϽvT;x0pΕ (N4]{vPtSr_B˾9b>b@bX.җ/{wq .K>JSlVJ<&Lj U~B$I$ ܅E,)IF~1E1ܖ~kAɧ%Ec(ȧ 6̾ܲcẎ{PS6t&YwN?1;#S0ln県̔t')4CfHIA E]ÒnIQ{8E' IDATɪF1=[8p<>^MW^G1U֓)5Vekܔ@cue㔻44`.u8vfw!hW\}wt)eߜObX|1dX,C+W^y_ꫯ~gOV&dʾ7JHтmj>9Zϗʧ4M*o Rv06ȧԨA"̞LշlH_ _>2 twݼm>%$v=:2&?_83_ig_?jk|'h>PyեIө;EeHS㚌"Qer|܃I# &c!K,&8=0;,et5 _p$ )kϧm4nK-3-m>%i%| t WPͧڿ/[?Ʒ}H3 N(ķ/_??¯UsmQ #Pjr&eA͛̐$),3,cPRt^. _ҭl$i'֨fG8=װ} X_~M:u_m&]NotTqS`W[Jk6Tmܦɇs`3j%{j*m w9 ,?pttGD<Ȩz]>CJC+5T 67?4WyIOI .kK?A36p2(4_RB?Ŀ;4럫`U`ǔt.9D"J3ĉq"M3i$K!ZHUP,s*7 H!G1(Ad@J1;>u޼lb\ІB\mAeWYyeC^sNZP|H)W(NkUgn㓚s'ﳆ)/]m-b=wrbw}_L:}s.M-W&OyP7n߅$[tCnXɮу v>%Zre9hSj?O\*LٷvawO=P*W),J֧U[HR(AD1 #&=(5PGt#1;C-wMDA&i8Nx8iʼ)Q*,re4pR)qMF$EdȒ89- GgYW ]2lELӮY)ܔTnX#:֬S3Dwݔ;y.@嚥l4~ԬIKNueuͧK.fX'\ (Y,uߴ.gr>9㾱{ƶ1ue)C`n\׮!l=-xfZV>%y9);SyݕԶ TjO鯰e\*ϧd}W˿e9)ĸ'lNʸ{ZHdQ4+Q' DZ8"N2$I$ˑ1LPk%2(V$i Sdi,J.ON0p7Q˅kkUõNEAe)]C/m>?S?A1&rmOӬ4߻.z~u@e;W2\4;86wr[~=vN>h SozŀbXmr&ni?Ii|pk봩P ہZecQ$Ha}͹.dAdkea>MdK6iVo˾n>0u#Vk`ILɧd}jg?|G!ddldŐQ(J&H~/wdY@f)DI dM&i8  ePV@YV2]쥐2B+ΐ1(S̎,˛, z8e{snJ7@F̸7AۃA, )WƷY* '-!Oʾ9b,1dX,]9g7,#CvAځJ ܆tNRrݾS ,d!o-%PUmZb[i㐅 ]Xi)v[@RA;xi3(u*;T֧C_K?c$͜LPJXJ@FPB@*'Dq('AQ,ˑ~ ?csDi(608'3$I$QEv%%ʲDUJ22]]Iwl&QWX&&Nn]Gqt58ꫭI!\t 9Y)ݚ6WdoXϧ\ٶ,vm<T>|(JԚߝ'5.~ٻBWJ/|JzDZ/ bzu798M-4d3QP]9wOMٲ}2C'u}+Fwٴ:y1 ^o>\I{,tP JsH5c[_Mg?WAvWzxPC(ǵ`}:?hg @Iɝ!Ph !#&Ϥ1(P4CeHI?yqpR8IZU]r*Q.ݒRJq$N.݉PLL GЋ9d!yiݵ + 3}pb6:׎|o 9u֭co@Q+̧p)Cݸ?Y,qbX3^r&iEqew !Z[]mT;8i<Ey f4u02^kL?v)cRpmܗaٷ<,ժlMSQI 1N~O7! 2M$$țqllq sH (4GehU^Y|+(I!JR[]*p2p20yI KSI,J 5PsLart czpX.!k?u^8 lT Dnʾm tny:P@G~Om7nM\v>o]Wo[O}ۤkJ`-AP[nSz2I8&P5 6n`mٷ=tm6ӣi;d\(@ؖu ")),G:ɑƐD4szr*eU()Iӥ;%i"1HXΦ޹7qj&tT%W_i:; a?VY@eϏ qEg^#NSmk]ڞvy{_ԝە}gqr Ԝ;UW%SX, ,Z3I|wM *- ?SjkkҔ$ΧBJa7ʂ𖣒š|J{OIƙh)Ltep6|Js&rW(GMTnJ'[ץfdqNn[ֽP"2p,.2N#$G52I|(PitF8JX"B$%8A i ,1`r71ye6 kd r쾨qxۢMM>{ZEh]JkU)2by϶NYlzt˧rEߗob1dX,֠ܿ+/]0?@$FAywc-rRn cP1 =6)8 $FIJp;@|uX 2`Hx; t7lT;/Fjs/,4sHkf=p^Ry1OG@qOFqO n8NQ4͐e#y,1eN4A- Y)Y׈1F8xiK81] I#A NNczp1`g7_0ɻwT1dP4?L̠ob95.Ҏc@ĺA>_6}1 bEi6ps?d W)ʧdX,ֽ%bVs&7?AZf9CG$?mdl,{)C*'pe:, w/rDwOi@ 1e¿FlȮS* mV˧uC({nK]-Dm '_O޷6{"$P( 2 $jy6B7g@DQF17;e3 n BQސLI+ɖ "][uh!W<ؕעi KErX R@1 =f}ԑ{;eVfVfVU2_fUEa>o0DGyJ|A8v- .$aW/cX:@>ZF릊CSߦoJ)͟YCXmr> `1vј^HV$K|Χ]$ؙ$ ,[gro^K 9wNmIZ&*MJܼNN R Nr Qma^s0;qT(1I]Io9Gw#+Q4)u!xd4ҊqQIJW &Q $ӔOzϽ,.A46DFRFVK ftCnwNF!hyQ Uc1p, %Mt]-47S/B6[ܾp iDriY cՓ+ C4IE^H^ d][pĮ|C[}SOKd AGnYI|7Lej8ҎQha-IelJ⤎c6INS"2#Acle/MQId(OJm-= Hd^q%t]WWσ[pTr,5@ llkAF>.baav{zXBJ48p4|4R>Vhw%VVF >kX.K#zhz7iHiL+* )џrrDe4etnO TNJiʾt%e\+ !v6ǿy W~ |qI iwM `A86ZNK.`aA vm$VRF:5# 8=#A@[H`qV VVFLHkWvu_| Ko \_x[̸wMiJ{yQ;$(%uŷ[*MYt 83OYnڷ~$K)zv,D۞PiOwĥGeA[ J }*;`{LNzs .@ 79֟$!2lp&)Kظlۄ.KPHx˾ RDeVtٷE,a*zqٷ)od qSnn݆|']hw5<d5=t8G''۝.JL.tKԤDFFb8baB"jbw-zEm4Fؼv ZN\\; 7aM?cr2?PMTҔ|DDUoqY[ZTF͈oL^`b/~1şŋ$'*kk<4eԟ b$gLnw9wozc9Q}Cek/Ɲ>{Y ¦7I A: gBKPLZ8 x\QiJG3ꔤ^G&}d.2g-g%-7ݲos4S҉SJ3:!!"3$GϾ,-x6C8$hVNg݅%&^æ&"!0 GF[A9SbR) #x+`FC װ~/Kovrtк6x^A0MokN4kL[ 5x rrҐ~k`% 7q䘬7gS9SNy8@-h&d ba =A?>:N\ɓO' $LrL}CN[s0@2D )Tq;*WuA p按зՙ'˾ciK->ROfS/֥ t:12K^/xπ}.'&Fޓ FSlju6{X\aaFi$`R|?h4;bI\{/oz Q|4uۛզP/&&~Ϭ?e:MɴڋԤ?7,ܠc$$+̽]1cr9iY\̠xbOOy&A??tx BA bLy~m6 Ș*IfoReߎ@LVR_s0ջIoxٷ|Qڪr+-YLߏ8vMjr;ٟrgO,-LVEW%v _ 6Fl&XFS i;hwXtCyVNAc8*A9R2!U9wdʺ#DA()~<ؼttzK;3y[ן2WTNJ!Z''lS6&Yr dl)|Χ5q?x5qdD%A AIM}&'NC_m+=4k\`T".lG?M)_jS?6tYtRTj ̎pMh8#lIW%&$+7t;]mʾӟjJ7.vFoRzkÑ'Ͼ2_'K/K+ZMljbqbˍ:.8rRh?h4!FABJMCm!)0Z  (_DcrONSҙ'8_ƺi IDATaM3Ԋ̲4{eLZ&<'Op\ Gl[z*&$( n9n.yM8}*ڍ锤Iٟ2vJ`?G JV2APpuFrh^ґJB;k_7MēU?%IXT2u8ӢuBJ\K8eI_6Tھvo~ _}%`iF -0 hՊdJ{- P`-(0p4h80a4b|BDE0 "@@)kHap)!C`4DhtsA8L15wnB3OlSBRr1̻<1lAF{y#X 6YD[[|e??E`f76+eV82 Qz&)u"ٲo@}~&fS^OJzAD)Ą:%jҠ?TQ甇j+Ob9S^DemVKɆ*VI%(zk`EhG#HQzMGC C GFCAd d螕C>D."ՏUp)TK=xJŬb4`8p8PGqI]FPnYt)7 l8<-&c~9lS}Ý]#M pP&0TB2 $D9bDy%IOJ < ԶB e@lSK OG ?'7MipϽƠ'QͲ%v/ZHNfV%zk$QOIQAt9=ܳ' '!9|(FS-tx*O eNd{Nq8XtJtb'SJw[8۰glRƯMȼRq[ipZU˾0Tb?"xyu`.j;rrnm]ҽ%QI!%|``86|Q*1ddj`J Y&%< @"Bib}dRiLW:Q:jfMsȜd2ͻ Ǧ%JSdYRTjY-؝q?7ӑOR7ADL϶ -b?,ˑY6dn$ܹ@b[Ȗdq=(,239ۻef?i۫^Jb$/9=lZeSmnlTL@8}*^z zo1o}q{ ?0p: ]k- ,[D)鶩&6}GA(  rRZfJx\a[j~v׃X*!yX7ebaiJhOhc3cL0MY eU8)N`"'F %0`8@&M( Ga $НQD{诅`HI8Ie4%kv"PFPN ;:iw(%SV.6.p3i6 %MZ7INs-ԟ %Ae?,?_Md`` $1D`+cOiqٷI52iJ9 mRR) iK۟9Re"xz&t}yQr!ٟRIN-*pVR:Kf} euX=?ze^B2VVCXY9ʹp4İNM!8" !uqh 0}gʷL&$P%R2Rk;-,/cʃmUҐm:]^FRɲ*$*Ӿn"QfҢ,-* z]W).;y S??xSA8$a>ewѿE#cBӼTޔL%#?q\90z;<$) S/u7L RqSB NdQi+cMK OQ7T&7 [x9@x "}'{`vr_wvaFQ LI@ Iɠ~//)/2CD8FXZyJQnL*VLf(j}3fߐgZFN J6$bJTIS:9Cqo8r| [7\]]|A[HPA}&;z_o>p˶ ɴ~<)0\Mf`LECXi9%trҖCM fSJQj`L˽t7Ӓ%*p2O9.*ZUe}]oJ9z!x Uٷ3I.3 ט(x/*u{hx^$'Nǎ -4$ b@}&_o?u=*pt)UbҦ'9Ca;A8ܘn)NU"ǹ:0Kf%bzXOxHMYQ(0"5& UcFr[on{{>=jjr,9YP=r!9^.QNNX?;i(QiL[|/,A -$( tI*[&JrƕKMܕpnGܛR]VLFHrOc|}<)r&z;LdVε RϿXe?fn;xg\@r'p'Ʈ=cu`Zz+2$Vw#ES?}8rۍsb~ A,Ma C0!#8fH:))RCJh><]-BFDܣs%SҰR)zLNZ ?efejtS @kTOz؜$M&vFHǎAi(AIE'wʲMIfQdf?J'1O}g'3ݔebA|;efwԢҔS2uH8Z#Q={V1OŋxEY2V)S~n+ʹH {)D=,:oo݅E }l71>AJL,ώ-Ŏd*jAE@0RED!B4-!fjE<ϳ-+wҔKkN֌\ᰞ-Oqn*99W+ M~%AĜ?g9%pJu?)Sr .̈tJn24RJ5 ˔`&O]6Ϸ?%&qy_~9&*ʾ,9z6c8Rr!,]nM8|&g'sonn" 1 D[O̶I2 ( M9w)toI *U|v*nډJr{z[j0{;~LѴ<>ľfS!AI1'Y|[gҒqH$S{W͙̚P 2oҦ")d'tJ{ A$DgjB gNm/*91›V;5˹ ׮ap o nacs}" !" 04Q-ߖa`?%\)Nޖ#~ RmUÄS̘ڞs5{ywӊڤ.pdkVwb;rPkб@,B\Q^Sv}jV)z'>vJqʹ]`7݂X>pv Da$dc,)#r4T}#C2(P|XF w?2'γ bs49=x+8"xn;NRMܮ{삒 Aiw4m;>Ĝ$ ʾ=^UӔ$'YS%@eA=HPAzG{{y?g j: pJmٷ&Ca&eގe6?NR2}IGSJsʾ?FRV)~l .Vz#AY_Wx>W!m߆o{_B+v*MD(b2 _I0LJ" TR2D&e$dlUQqD&4oQs8BHx/w'վ-4e,8S^ٝ덫 QAc' JCZT~# v%$( f*;zm'8FG",eߦ̛sIJ\⾖$iKG)lTq3 .k8ǓV$,WDS'K~g |4/@8q[Bx"6F"߇}%&}_ `4r/NJ21ic<{*5q{%x=-[}<a}S~MA:%Z  JTbs]ʩdS8,ى@) A޵Y|;mx3`B@y L3 $LX(VR zZ]TkEPX02՗RHC )!$$8$tE%Dp33TI B)")DS3 toƘml]0H+*Ut%e͎M'%Ĥq*1d X졵rPqh]y̖iebِ,?+*gcrKU !%(ft2SNΘ;OPbAip[TCΆJ JM}v6w}xt`` m8-Ow -'YP;S*]GKH#1Jt1]-*gc1>[&m)"}H!mp9e[BBk5W%*UI yeߨPmJO}m]NE ^=߆c_=pa%(RmD4htRf 7Vs~Τ̕u%EN S\[_WSB"k6O}S0|zBٷ=~ܲneq_U)AD(AI13;yyC%2ʦ8H$&eysT 5,f!oDBS2+9)s˹KPx-}VH"**{󬱫i߀Ϻirٷ?w;d'399K9yKXZ%w܁{|衇Ju v(AI@}&&GW_udAіg# ]n'/U>U]t2iIcgpRf Mmƃq4tƄ{|+Η|e2a};+۵]~wo"KL +Z,m:6*+'|d\[&>;Q9vxZ^fw搜sISL:zk!4M&^HP7 )P Tſ=[p|Lgd,^gs&ĔRCprllԟ iBnd\oEB넧TyLpp'u*!vdvҷIj1x j{K@4ҔmDr` (!-=D^fC)1"I]&LʠiyKNm̹!)wc#5D%7gS̟8 iiNrUypJBr I<رc< mA{gwV<‘Y)I$t:fx?JǷ1<>#S.ZT83)9S2R%? o\o YSmoM ^%Vbӿ}w~e6ssK')eJ!$xq.?eVRH+H:LTN)C+E!Zx D b҅CP }PI~}oy3 !Dh*0Ltc`2B&ԒRS.$HJ0HJ O N>RRCt=/G#%EBD|#}fLA8Q六['tzMO 'OTNSJ'^y yM!NŽ_y9tHpH:Y?(+?]HN''Dtžhձ)>=lӔEߓ[lz̴n6ŃCr wcǎsd JP> 8sZR&R`iC' ҊyIP6?9(iii)?IT$&_`?~_;@eRr&On.C Nއ/p@$tIR/Qo_?=kug6&/QE|9ATe? J$bސ$bOC}&<ůAf^K)LÝd;%9ʜm(@Ri'2Ft"^xQz7=t2;o ww%'QEKe,u"K]A^>}wVyT~otmLDr2yӌ"9I4A AI]^ ?|3ɲn )*܃XbMZXZiן2_LfoDEh0<N&7IiJ%NiJ$JS^/^~)ߎ5U QY?oyoIrq9$e$t)U _UA74 0^]wIdޯO2g*Ҳ8zN3yTKw^HPƸm: Y@ =.!&ݏGNKHIƢ-J*Y)M-۶PR<) cenJ?$8ZsJ%D5Km|X(fʤ/)NTb2]s{~}Z|$A Ym0MQi Hs8:Ro:LSJ=mws.w('S$' $ԟ YB =$b$%KJ6D?%CIA8Df2ݗ;On΁^^   ;i=~&=}\QHSK}GsKϯfoPJP!%9_(DqR% o2_sg~)}~< ڧXZ2c߬Dei9^$' lA%A[zRD$%ces^ L IL'fj[G\JGr0 6-nI9d̥K8sR1cLʒe߉v?6> 8*d^#n'ʉi|+(b?? f Mq^7%9I4HPC) AZ$1k>t?gM&Dp(vF2&&ʯs)<%v{~iAiHLZNu'oBr؉,۟ʾ ( J v%g?vg<N2"ϕnӸ)9t˯OsQuBJ MAH;CVڄeN*_B~ITƚs?񃕇g&JG$xHTJeħ,e4;%(;ZPV=V&d!:g,(rr "$v*$(C) J vT:BlFRFZRV)V:1|FV iNuQt%d,ٟ1L',Ifr<%@_|\lZpEez+WJ/'ob?=el}ԘxC$' g,X&s󜎝'w[Dc\TV%^4kkfyXHN;աA%A3Il5iI A2tٴ<5b2'e|II2pMFJ{bIic8uU%G`Xl(R&)*N.~Yi9wW_pK XBQ&-.oCEqDb$S:(YfZ+Ϥj3kcn.}K4%0)Q9\J?eߐCfʌɪ)0?3$9I HPtID$( qPbqw}@wt҃d'KK4"KWQOʔ<*]<٢%EIxe tK3"grqҲd ,,eӗ}OOY8$G-6h$<'9IHP-O J v gɜ8}?a`p Y>'˺M 0PJKte%$>-ON Ȣަwe! dYkg^N>8Ҕze{dQ ;HTR x\t6̼v9$%04/jEA T?>^NW=iwkӦ}HNS$b@}&< MuEqnz1ɤbv29ܬtʾpRH4CzIĂda42H!WL(6ی}O,SP6GQ^n*ؿ$b['n3[+)ro9PzJ,OLOMDv3m AHM .Ǣ_ʬaEU{\J)3RzۙORFPycM1¶[:}a JQ [$ J G%=sWi,DHJ|+ӟҖoIYD:]ݛrl^ItHJa!%qձǣdץҔ0~JʾOe-Y-&,}KYj{J4qfy }Ӗ}!N}wxo"<$' ʭb@ -`{{8{MMOiDe:9hӔ;ٟ22?- Nz;e )_73iEe^w #E)Jm$iB2-.ܚLft.*w6Dhz^sKM$' S%As&_=u!K8%io3ezf?QɍLteVDja?j:tĨOy?ij_&D-Q9T0ew4sT I>Mۖdޔe օoڇV eHV@r+^VWWq1TM{A 3IGҔ3>+}ϩ~JZ&HpSSrg._MDL%b\T H2,d04%P( d5Rj%W暨eۚTy> ;keMrKPJ؛$bPIbsK}FʴtF2Ľ&eys}kq'9~pNr\R2#(*#)ieO)W^# r ,J_=]|/^M<ϖxf,cIN{ ;GR7A!HP1S$A_>O~+B)QVDҒA %²SJ xȸ_۟ҊHeS^l̮o}e{_B!0J!|TVQTJ`AR6bUeZM,ȴv#_2=eKe5Z[$'= ʝ#b@ C}& BėKS1ytDe?%sdXyv*=MK)KI?9}! D%I흲HFKeӭUIw%S)-VeV`YWPkv>KT΂)ck%M /+Cmb@rB) bC >QO?p~R%Se&MYԟ&"Odܟ2o(N|ʵeXܱpdžLxʸ'H#N)*k~4,KC*ɽ*G Gn7 %(Ӕ#9IHP|h8'A^HPQB4>L2&9Df?eV)OU `|F0s)$ޙT(RBʌFHS&oeߕH'(R:ӧSd)8Ok9vg/_ꓜ$<$(w: v$( $8~ _ß<,,Qbc8(՟l՟HD&ĥ)rۯG.tQkd6)uDt9KY)~TI+l95MJֺS2i߹gzh0odIhN9;5 g^S%A.1[>+ϝvRɲN pwPTz┥ۯrbJGn{U+9cxym}SHT2#8e!K>O6mf?S:/daPR$ A;I}kؙ$b"g ˧8O?pB@}4)JI)Mix^7cpzJv2S&{RrpeJRδ)D|_Ϭͺa| Jou!){KT~vMɐPAlHPQ #*n*NOf}"21DwnR J_\(?B!!"1 (c yO(ZY:MYvRm)M7xXj;}W3kʦ&]f)(<%] O^΁%A$3q3Jfʥ΂NTd)aRoǠ!.><< O+fU=AǶdY&mrNiIU =(kLsjT/oNspSU$9IWHPB v$( H@&W^x q@j-6 ʾdJ;NITYG销%/C $E,*IIޕdr\O U= &˸\l;Ieݞ7[[O9yN1 ZIN{OI;A)wS?=.HBhzݦu菆)\ WF0mJWR g.Ouj4I"y}'z\:"MOIU?eٔ_4*iʭ+ޟux݂AeFPBTaXW!Aw1~HPAC&]>3/`V1Ă٨7EyenJcnwdVJUa-(C@,/*cfRЪ**+)1YrB IDATJΰ?eG jIyTZz.*'1mjҥ$9I {OI JǤK=! IB̙3):a)\yQ 0x|?e~۴z3zvʾ}E/ڒ2SIDq.iԶEgo驚̾mI*2x>ny&u@rcǎoJHP>L3>ėm FC ϳJJJ)qOiӗEeߦGeܟRIKnYh6HJ5{DI9I)7H'y'*S)AX[tiJw$V|ǁrh_P 8z($=O)lK DoAJi{Xav#GTZYe웧d&æ`J #!YDB "RH`hܘcSNPr]nIq+v壔e$$(''*&A g .~UO骊tUSdP%ΠtҔ}{3f0gJN4x QosɒHe5nQ9eZiʂl7K)ާzMQFP6gFs;͐ܿ@Q?$( bB 71)k菔\`02&ST9H\NdzO AJ'?hNQ!"aIiJ_~ۑ?eq:UY/$AYIl&}ƏL{M1IP$bHPԟ  JأPI؟oV1H,6Q9?ӛ%+0dK(ʻM?[{Ƞ$e(EBל`Snuw*g |D܃獧o|IS_\24Òך1 ïq9CE$ ԟ f J؃PI >q|Kc|e*-i,)23ʾ&|aěs,Y5Og S%UsNىЙ?Bvm/Cpy@9n} )4=(%n0^i<$+({k!vjs^%QD^D5HP.$AUė¯JWRƂ^?ӣ3E2;-)IӾ%*(R;?嘠t̳ŤCrya%tD=HPe6 Jإˇ>3/`)HJ7MYԟpp-}L,I94]+kOtJ|rlwDer4c|}خ@B攨U9~o %Q7H5( Je$b?}~8NxFT% &6G><+A4>tiDMBIҒsO9oAw eƱgT9w[yf6A'HPU7( J%_<~u!?炲o9.vKeg|*4 @)C!Qty*S9F\r  Y) KmN.{LT>ur7#G\ϋ :$(PJ J=z$AsSǧ8M}էND|eJ szeL+.R apBZBQvjv)„T`4l6Y%e2[+Įʭ)D{["& %AL JbZ !AI;A[ xFTn q%$FV̛/,( ubQ zD4Ok֖OTJd&Q]쿮.CilUb,L+߀?&n'AIAG(B AIsݟ7-t:]4M9oLouuǎJ9)ADg=/iJ&MHCiqRBM``^K+[Q&"a/NNO d'*q `SgП2se;Y3{~dz1$(Y~Gr~%Ả?"&O~㮻2$b'q,O)Ct2SRo0Vʻ3!$(ԟ}H-e̴?euVͲS<{);.KP i˥皨dO枧R>øͷdN %1))BWHP0r]@BFᆛpMov^@> Y|͇E3˾(BRҒAXX HՓ^g knݱ ј~ Q컲@HO$*Nr\1(%Dq twHk,~mHPt$z{1c{ | zٻ 7>.{坲d|Q_Ek 'N&9'霴mՉ7w9I99s3m9LBLz2VIԘRPvdiӴ6KQ#K"]`K} }|>3j5>돁صkOwG8pOg9@G8?q9>s#"Ri1ĪoUTSַ}gs}ڝď)Jܜ\,oFPV(-m *Wjʈ5S J⽝mJf#\Ɉ'~{֬'PjSD>Gnر+bǎqo]pw qqn@XT4.k]^m>|P۵-)Ǎٛ'Ae%C_siO1*(7f3b`HȱǏn*Pv (i)EJh|{ܹ;Z@;J(K?7w'tS/\Y#\uxOޛw)nތlVhU+ ]MkUU*يM 30r* )k*WxoJ-]GGzG@I鶣(IN_?ػw_Į]{~Zܸq-\T*T*-tؒ{|6VYe>_kԷ}G&b`hOd)#ʙl̕KѬVT֩\'\ &)om,s TI.{0l)f6F9rG@ISj (a>뮃q]wٙxoߌ7G\^LVVtߚ-'.~&|aK)s9!eD͹)D'bݠrR7d5zla%bՀ6F>U lqco>7{5J%iP-(a~NşɟƎ7Ʈ]{ڵ߼(VFRr|C?'O~()Nv1~w~7""bzvvE5eVKouqrpu@r7fc4K-}o'V۾7gjŹ<^TlnMrVir0|&}to|C_lʱ=J|JM:{Zo#v8td+/ū^U1??r)R}Q*lL?@ӌ~W!F'DPW *01w+*j |bߊX *+\nypW]{ϷZY{rᗶ Ոj5ʕBsfWm;±w[3n|&| 4ArMZ'~{]5 @wUNւqA%M@ [AʯZqǝƽ7+|=_riY(YRi!,6)fcnn.Jt#'O\>u>l2v BtzKcJ%nfs]+*W*dm5ZTݺ~xLfsa&d3۳,7ZBV *Xjl&Z Sn&\%\@;닡V:xLNNj#i}_~owW_W^&8r9bY* 'K1?_ZYR'.__[|\ %͹٘]HgM}.~FJewP&_V#"ͺo9r?`?kןƯ}K;too-ޤNJvA%4_J|cÇo};Z^_[\hݾݾ] 'rϗ۾#ZGߓO?1s17ggS޹/Uݖ0r;6\66&vuw%ǩT1|6Pmڍxxі>G@I0N$Mz/?[qo_Z\(*%gggbvv&ffn.VM.Mql<{GL&>'c$Kc7Dc!e̖K1W.E2pCTn mU5e60,(VWJcǏmYd=%lNRk|rDDlԓOGmJ[!W}w#!eó,͗\_h|ʶiaZC\߶~/i-W+\;t0~뇿kP(dSvJ֙3grvݏǕ+/E__ոvqt|c/ٌ0I~__Jmbp`(A.ߜ\&^T6XM$RYe$\x}o?p?|O[F@ #9sf|JD@IW/cq>G9>|9}W=HVtkO>_zrDdVCC{`c6mjUn-j`)qV\[fMr!jrwǧGIk=JE|JmߤU;3ճBG_w_:?q9>{|bTOsȷqaD+7iSɾ\~×JZ^AN;|݉UMP(6S&JV ;t>lo=p_,R6,-^nyxyw_7#2@~ײ者vνYJ%ݪo"$b4s̹KSڱg+)cvjeSgsї];,R:w_([[ۺ*O*P(vS$%T_j v)|'.~q<4q9|/vܛ:Gj*LXʀrlQǏǏmqE@ #OIRtu$@w9?q9֯FLE62ŮB46.vil6UJ#\]Eڃ%l^3VPuNt{|#EZ;D6Zy5vl[?ܹE6AZJ9>uߙJ%|JE@I9}tDx~-=їKzI@4qMru!]>RV{OxO*vnG@Io!LNNFDx!'.g:_C140TQV#ߤ`rON )[Ri3˵{?p5J%|JZI@ tү-lc.ejlZT*E6{+d؎jcǏM܍P(a=h%u~ \]ÍhN}[JeUP64`F@ #̧@_/L>4d!c#ltfoֳ϶^CՔ?` L(a{4Tl|KE}p.mԫAd ʚ&}/ŧGyv$%l6훭~'R-\5>>:nMNN:S x#̅їVxp2b4J?j4Rg<ԉo`ڥP(DP3gx *%k/f$;?.ѬjʈmsfTfFz掛~{O>8~ƞشSN-ΧIm߬K@Ijr35񈅖p{8q/F3vnF`pr3m6,dAǏƱv7V^ *Ϟ=8IPrJUi;^hıC`YPyjU}.ͳlz\n}ءwl`>Քx%)zvR *.>ls ""ɵ4{K+,n~ۏڍ Z<ͧUx$>Ux$>wb|Kc;AVV߿ '~۽tц $6СCqԩFBFfR8@=~x÷KQ|.BFB*3G!@}ׂӧOO٣J#O.B|ϯ\y)}L}q,""~+/Ņ翶' =̊5sdD|){7Z۷I@Ij4m$ITᑈpŸpܗ.yvl^٬V󥸫t-W?<~Sl F9@R:x8^ɿOƱDDlxvW!<?Ǐ/Ɤ1WX(Z|r>}zEaC%Qm$ءć??̅[_\_ ׎بr幈esgIج)'''}w!%d$;?s!r}1l@WR.l, IDAT ըT1[.l :g7gk>~l, pXcگ~>ٳgͧBJ:tZPYcn.O=1_@nʲu5J7db0KSl',Ul ЊY*GDo_O4ke&rlfbַ!f˥(W*1_DB&esQ~W{[כms½Kn+V4P(DP3gx *;YRZ9w=%`lli#x=_&Z7yC5G.kR/}Q-E1(]ުDBd)"J1c_v 2`jmSv>%qŀrW 'k[@6ڊ\~k`v-Qu[l;a}Րi sy)֚OyԩF2jucϡCC-СC+v@WX45@16v-(^JGlWg۹,:_>CUSF"$bD, &keڧ nBP6_}xL«&r̙'OL9-ޤR-t\>ւf,hNQBߙbSھͧL/%~6Hr +"Wm>e|P]ONN.?#fBBa18}q)#$QdZc}{w:\mNHjj-޵r|||ʔPWT @Ze0ھͧL%Vyd={6"N6Ͱ|JmP  'zVmZi|qAe$P(,y9sf`lJ/HϧFjZMzP,WL>| @HRolZQ,$9}[z^hKlnNAe (Iv $Y=J=jśNt$6̙3)O<)h%4IͩSbrr2b={Vw (-+D]j^ *Ϟ=T:u*u%UÇ|ӧOOJ`]$`))K@ P %UI̧l% ۪$1SnzP|ʭP@JBo:wn0)^ tZw-%$11l9R+I/V}۷TjҋO(IbI/'WTB-=K/}Um߫PA ]D( lT6.] mP(P(,:Jp db"yA%P@*DB>}!]|JhS:u*% J cct-3(c߾J<\ˀT1h)zJ+nPv̙|rDDoh#Ւ@0ڧS ( +16vA$u̧Xm>e}k ŻiiҦS9oA%^ŻTNNNvl۷|Ijo٤X}{B8 pT6.]ꏋU;jAH\|9Ξ=b1em J"%6V *}@ ( mqWS (AK4|Jh-MLlkͧ'h@k-OyͧP55s4v@ Cx>}:&''^VDhrWm>ѣsھVkNz> JE$@jmWTk>yd\|9Ξ=hwZV{vHccעXbq 饐U^,W/і`=b1#"bdd$ B[ߩIzVx% 'R|Jh)Ϝ99/$6`>%OR)BItRW#GʂJh|8{l={mZ pkj*.k68|pHӧ[wv pOȑr<@9@Wx6ҙlz۷ J pD>.^쏫W}V}VM]TQ5 @&&11GbJvԩÇGO_HzKc߾J9RT@ -@mn$i05K}@x Q&HZ#xr% fM)&&15 -"TMijmS@ (hB&XR74(D0.$]ib"/ի>ZVtS>\4-Q,^LsIzT6ΝSPtZe8wnP7lS{4nXPk>rW^K7d>%lL&O kP-MML~)wlyиo)@%[P,^N6ՂJm:4ļIh|LLȑr<@9@ (4$D>ھ9J6EK7"3(ؐp|Jzu ' 98wn0^ tkN@:h9  pR}bKRA vtƹsqH9xr`TPH8 |J J"B8 |J:Sm'ÙO @'P8$t|,@ÄН&&15 @GP($tZ۷o$Q *}VޡzpzD>&&qH9xr`')H-=B8 ھ/^Oz) I`5SS8wn|J%rI`#8wn0^s ˍ]Hz @t?O @[9= I/ SnJ.%|J; @ bb"SSYmWis'橵}O @+h"vZTjt $.Ǒ#xr (ؘņ]@Ŗ`̠pv|J;@c76S(%@)VSYZ:TZŋI/Pt s'N25sͧ`UJc$Щ&&q`\(9}A+Nҥطb>%(:@72%@0wvS.:nWO {H9@ͧ nMLcb"GI/Pnrj*K (RJk7mo))`uSt%@ iXD>ΝW}tN9LxEk7&uC|KHSM)=:JҐW_A4%@`릦q`Ģq:Bէ@/P?L/)o(׿>7nV|P|+H^^zI檵}!sL֌6  +'Z )ks&kqEJ(@k%1ν`F%Ћ + I/'LL[=77p5J۾TL춎3>"HIԂf}72gr3'z AΌ$ob"[3YVz !'ҥ۝3(^!H3S?r5͚3Yvz 'mj*ƍRSLn@/P$6kA% P= f9 t;%@F@a Vt3%@`M `;MEm9l@7P3l@7PyA4@7PVo(`|\+7m- 77m-fN$8MayD@ Bl ڼn"h!gh'Án!h!gh'Án!hgh%'Án!J9}Z%U,:P J@P`stN@ dZlh';@P@SE t2%@v+UQK@ dZl`Mz$>m:йM##.06LJ&2###.`ЩMb(94N@ $F@ $F@ ]X&.Q,&#hӧ PPPPPP'ەH J 1J 1J 1J 1J 1JIzqM#F ((kT^@@b@bM3(+? t&%%%@SLzQM5(+T^(J74B@ TJz\J 1Jc((J,%@ (h'M@ $F@ 6PP7^t%@L'H=%@6"hF@b-eXlPr`=J{%@j (ZN7E@ rڼ`-J @d^@S (I/RI@ 6fQrJP]ڻ#hs(`9%@[ )n$:n; (j:py(Փ@PY&jPE f  U 1/'RO$ d Hz A(uJ}=:'!HB卤@j'"HU("HLf:TQ z %2U(#h7m7B%@/NI@ $}lϛ:MJ Ћ@P5',mqI@ BZzI> 5X"HLƆ9Ak7I T.e2J%@4;RtLGF̟: 2ڽ.ͯ4TJSE }v&hyG)I[:WE&jʈlV7@wh]d`%Й"})%MlPJ@ !kTl.%FKވ\-}s'GFiZI@ aG A2lw t2%@j'zZ:EIN'hBmy!%@k_iCeӑϛG V; -Z4Y7ʩrdQM;N tJ788Xs'mt:%@ 2"b``Z2m; -]  r6:ƾϙMGm^$Q9i$ ]lnls'k̟E=fxyn^T816v,h&%@ oNwRC&I,JI2|%vL&MqjFGUOA@ B,&;OYdDD`;(X>3v2Nd r!h*(ki!%@!NC@ b##΢w2:^.l6ڻn*@Kzg_$ p2"bl9@H++@ޤfLz'OO89:hKhtt$w^n߾ '#w'=],-m5BJ-{7}* Х $`}} 'w(]]lt4=(k^:i '#ltt4mSSFy_&Ȉٓ@wJ+.@KcwDĝw$TccڻW].6Lz46Wz_yPZ+(k}-^@ۥ=9 ХTEYmpp6R!@rxls ~ %lhpp.|%eT6!Փ@P$ -U3(FFNF i\Ż\s,Mں;#'% !i )7244{5^ rNFDi_Zݨ~Vf4"j/ŖտV#ݶpym}D6>/ꗟ~oLOw#EcpZo.>Y>+j['ſ JuJe͡Cߌ;Nz D$+ yKϿf -N½I/- *##%⽞;qk] @r|>ڹ%* ey$-ٱxTQJz)+ ŎI/cK' %@ $5ۤc$Ã10З2I(R`tI/a[qL;#yFGU= %@J~Ϲ9p`6; @\ٳՓ@oP۾w3Z5?|-vo18;w%mNI@ "Lgz<͸;bp?e4IW (RPxUl^w=-7[@swΎoyHz PLTQFD]Gwkgp?vB=M@ 2ƒm )=򶥥q・V=Cvh1{uJg> sZ{K& CؿguGKw裪''HvTQrjcĞ=V=1ЅciG$@(RkdnmHٺu58tēf׮kN,PXn^iwcN5%|>wܱZkv&HTˎƻURM ,{P32ZFk7RJy0N s;|x0`bIDAT>Rݫz|Ki)$RJS%m J3W҅jr><ߚ%gOwWM֌ܣ`%@8w5!ek|W~w^ח׽&ky^@(:D+Z[7r{Cn+U5O?I/ ܹԐ2M-ޫJGvA@ a~>}q|9:]__VPKimLںZ?-2mڙLֿXk&٥}}7wvn[{=//׺^ߊ~R._N3<;vGDcI>.Zuk]oKccOxĉ~I/#GR6/w޹c15NlL@ С~'?ǏooegPe߾jsqHyZgϞػڹ=; JۿBm~|=:gHᾸߟKz)[8 IJ?f&faR=:RecϞر/$jd1ĉ'rk;{wjj?g@;U5!}`(ۧeGطo,ǝw &oy %@xcZݲMٷGѣ3JhZ0~bdD8 (%@j"np/|x{ߔ2nIwxwo)Wo5Kz9RCC㎬`I.#|<_YR&3eeMw\S_ݻt;pg/p5=?"ltWI6bϞxۿo{7b٤24T;Nz%_NC͠>wJ/3I/24T14J:Ӊw 'ZH@ Ѓݿ[)i={fo}9֗b.A%68X+14I:q8wo% &Q6{/ew[R<K Vb߾y6 '#S~_ij>L&Ld2M_^޶"nw}i+zո6rDܺ~rZY__/Wo{}%@D>_>Z{/v}ܾmIn[ʓ}:]e奏O;E$@;qO<8vm|=/v8zOWb餗@*sg)v,G>߽$h/%!zm⽞oz7^;o$@9왉;K&:~pʹx_/yB[׺ڵ~}8^zJ`R eޢŻfZq+@K`oƏţ>2Ν=wI/L=夗ӕQA _6*(W\YIoVqƎӻC"|n% ʥm'?(HUߋ!esk^-\}ᶗ_>C rrr100Ar}P 'U,>⣝j^b-_{z-CC?rzp TP/8y_5q-+([{miRr˫UP'?Ǐ '@@ _ƀ15u_m@Mj.ʀQ@=v0|+(ؔ|e"N&TP ( (35u(ff~yB6[L6Kok^@)H'% G~9.^P0\ysO^;f"-E[6> (֜op 4#ҥuZoʍ+(:bff_\Ɔ~V>=nܺ2\*\Uo+@*h|c߾G0 \ݻ,|2vFKYF ~-sO5"$H?lŋ?ŻM3(W\}]{SШ\fg#--\qy Xv۶VAc'~a${w#IA&p?|YEyi<<1;p/2 AXPCYvwfOML8~0 dmӡbMd2LŒX(N޶FsK7@4ձc'㓟)P&;( FL/_ν:&'W-$L6JVgV\nUt[B;۶'N eT1T:ΜjOUN\)> je{ʮUnHO'seJ̙brrULNhL#"ܰXP('Pn4(XQǏO+e eܹB\SS!NG&3}q(PVō7 JV'cǎ[#ʅc{sP99"9a`XX (Vc]7@j7@YXؾ}o $8ڞ#8B rjV= ~7fOG(֎ݻ&Ne>ўXfu1ϵ_D#b fb` 션"=ATgj\nUINoaǎswJzg1*bj]۴w%o=UG 1N8CCc11qJ@Y鳜|Wq~aD\@EqBd2/Du+rY1>~ʮ.WMt*g:s˷@)PsU@_LɅ,S]d%tĩXk@9-}/+slyq[uq9((]5 @@ @­]x?@Y!ʹ⁲rX]ܶdXn^(敮 ]׹j(hbxx*(+H@qk#ʝ,.KB1J(~յ*vz41<<;wl(ʹ[N|XyqtlHM,#Jmwu&v$mߧ3[?XDOzb/uQFQ2X(>nr{J{: D-n[ @𾕏@W]$Y%l]l]\:`V@Y(hk{} ebʿR^s#tlT\j.P lsPTX+\M)P gee?3%(([oF\j.P Ko,@ @jLL,}=ey(Ki WۄϹ@Je[`%]y%e?[V .G8 @SJ:ch臉ʅ@_zGr;oy:W#ΗxL|}|l.wD.wa@ ;v[HB"JrOJ(5((.oa%P@;~۷?Ase'% 7/PNM5"2ֳog\¸w @ lض{!P %Pv^29ʥ^@9=*Pr @ ض{mwJA+P&g.P6&P.0?ǯ4+\1. h5#ߍm۾#P u(k;@@2(nI YJXGNl(WL\l@Y+IGlغ_(#@Y(?)qNL\l@Yb2'Lh%ᇿ?&^AJrtv ݫaru@ G>_7g(]A9w)PVR@@@yMݽZ@G>=x9S2(g WL\Lj\'֭hG%4#?#G~=@Qlme-OJ(5(( a' d>;x`@Ylme-OJ(5((/uz4(`<8|8t(+>&Pr92]saT(`>t>t7*_(k9~R@@ي@~}__V%#q:(.OJ(5(W*P\磧( q<җoAOJ(5((ׯ66l60_J'% == == D%$OŁO5RIsee# 6; kqǁO e'%  ==P P@ޯĽ~E(?)qNL\%P\o~O Ц2-[v etjeo{i|8R`߾طDV>@Y޹@@T?@uJH}qr -7z{_/J@JHwݵM(;(5(eowYr{@ b|@ౣ+P&gفpeq_8%t;blh@Yy;qyrƿG_e4@ ;{ΉeWLμ3e!J^&J (ܗc#16vDl ə7Pnb|C+K*g;x0F(k;@yzeoo@ ,idطػp{X@Yy;Pnx]Dd[ 9J`n_"eqWLμeˋ7L%Pb||ws(9b+P&g@y,.?@{(ڼ>( WL}}ok-Dȁ j @*DurzeWF~xf28@ tM>_.P 7󾾷F>ֈgI:XՖM:@Yyʕ |dG` XYzem+P6r>0w3냃&P`pΙå@YyϿ-?(˹ W>0s }#`08'P:(58x}@ 0oߴ*Lb(D>e篜 SmjVIs(|~M̕)(:171:z`ζ( 篊|Jj28x_qM,?IQ1MIENDB`hkl-5.0.0.2449/Documentation/figures/B_b.asy0000644000175000017500000000115413211074263020570 0ustar00piccapicca00000000000000import three; currentprojection=orthographic(1,0,0); currentlight=White; size(6cm); triple b1 = (1, 0, 0); triple b2 = (.31, .95, 0); triple b3 = (.4, .5, 0.76); // orthonormal coordinates draw(Label("$\vec{x}$", 1), O--(2*X), gray, Arrow3()); draw(Label("$\vec{y}$", 1), O--(2*Y), gray, Arrow3()); draw(Label("$\vec{z}$", 1), O--(2*Z), gray, Arrow3()); // plan draw(plane(2*X, 2*Y)); draw(plane(2*X, 2*Z)); draw(plane(2*Y, 2*Z)); // reciprocal space draw(Label("$\vec{b_1}$", 1), O--b1, blue, Arrow3()); draw(Label("$\vec{b_2}$", 1), O--b2, red, Arrow3()); draw(Label("$\vec{b_3}$", 1), O--b3, green, Arrow3()); hkl-5.0.0.2449/Documentation/figures/sirius-m-zoom.svg0000644000175000017500000011520213237020477022651 0ustar00piccapicca00000000000000 Gnuplot Produced by GNUPLOT 5.2 patchlevel 2 -55.6 -55.55 -55.5 -55.45 -55.4 -55.35 -55.3 -55.25 -55.2 1 2 3 4 5 6 124.85 124.9 124.95 125 125.05 125.1 125.15 125.2 125.25 125.3 125.35 125.4 kphi m1 kphi m2 l [0,0,1] -> [0,0,6] s1/s2 (starting point) 10/100 (steps) m1-100 m1-100 m2-100 m2-100 hkl-5.0.0.2449/Documentation/figures/s2-11.dat0000644000175000017500000000352713237020467020640 0ustar00piccapicca00000000000000#h k l mu komega kappa kphi delta gamma 0.000000 0.000000 1.000000 -0.519320200000000 40.400329236644197 134.704182457760055 124.948883370711130 -0.022336900000000 14.824478351069212 0.000000 0.000000 1.454545 -0.519320200000000 43.806822259635425 134.699173900458135 124.898672413928125 -0.022336900000000 21.631028056870033 0.000000 0.000000 1.909091 -0.519320200000000 47.666702644755155 134.047872361703469 -55.491588294618381 -0.022336900000000 28.515821860138853 0.000000 0.000000 2.363636 -0.519320200000000 50.799541387867684 134.614380549324750 124.961746059168973 -0.022336900000000 35.507536665234397 0.000000 0.000000 2.818182 -0.519320200000000 54.794302282671516 133.944457972434719 -55.460725265976656 -0.022336900000000 42.638809512821538 0.000000 0.000000 3.272727 -0.519320200000000 58.093602860961269 134.499317735381396 125.081329926466793 -0.022336900000000 49.947951719613890 0.000000 0.000000 3.727273 -0.519320200000000 62.292294949359636 133.824368147138216 -55.430755343635212 -0.022336900000000 57.481389999561081 0.000000 0.000000 4.181818 -0.519320200000000 65.848702052342148 134.373935705441085 125.204188941124343 -0.022336900000000 65.297336829530153 0.000000 0.000000 4.636364 -0.519320200000000 69.977235130767554 134.309331490772053 125.259769927030717 -0.022336900000000 73.471599833259461 0.000000 0.000000 5.090909 -0.519320200000000 74.727450273359395 133.632870840586037 -55.349394177548099 -0.022336900000000 82.107358214859715 0.000000 0.000000 5.545455 -0.519320200000000 79.391840719389251 133.567574367273352 -55.304697131003159 -0.022336900000000 91.352902175861374 0.000000 0.000000 6.000000 -0.519320200000000 84.475827487142254 133.501851693551544 -55.246488273144521 -0.022336900000000 101.437135833363357hkl-5.0.0.2449/Documentation/figures/4S+2D.asy0000644000175000017500000000231312710332472020635 0ustar00piccapicca00000000000000import diffractometer; currentprojection=orthographic(-1,1,1); currentlight=White; size(12cm); // orthonormal coordinates draw(Label("$\vec{x}$", 1), (-40*X)--(40*X), gray, Arrow3()); draw(Label("$\vec{y}$", 1), (-30*Y)--(30*Y), gray, Arrow3()); draw(Label("$\vec{z}$", 1), (-30*Z)--(30*Z), gray, Arrow3()); void diffractometer(real gamma, real delta, real mu, real omega, real chi, real phi) { real hight = 3*10; real detector_arm_support_radius= 2*10; real detector_arm_length = 3*10; real diffractometer_support_radius = 1.5*10; // tpp draw(tpp(hight, diffractometer_support_radius), gray); // detector part draw(rotate(gamma, Z) * _support(hight, detector_arm_support_radius, 1, 1, true), blue); draw(rotate(gamma, Z) * rotate(-delta, Y) * detector_arm(detector_arm_length, detector_arm_support_radius, 1), red); // sample part draw(rotate(mu, Z) * _support(hight-5, diffractometer_support_radius, 1, 1, true), green); draw(rotate(mu, Z) * rotate(-omega, Y) * chi_circle(diffractometer_support_radius, 1), cyan); draw(rotate(mu, Z) * rotate(-omega, Y) * rotate(chi, X) * rotate(-phi, Y) * sample_holder(diffractometer_support_radius, 1), yellow); } diffractometer(0, 0, 0, 0, 0, 0); hkl-5.0.0.2449/Documentation/figures/e2k_3.png0000644000175000017500000056745513237020434021025 0ustar00piccapicca00000000000000PNG  IHDR(He4 2iCCPdefault_rgb.iccHgPY<@BPC*%Z(ҫ@PEl+4EE\"kE t,ʺqQAYp?{ossp e{bRɎ(tջ{i常r)teJOYLgWX\2XyKο,]~ )sT8بlOrTzV $G&D~SGfDnr&AltL:5204_gK!FgE_zs zt@WOm|:3z @(U t08|A $`(E`8@-hM<.L@ށA2@F 7 Bh( ʀrPT UAuP t݄84 }aXև0v}p4 ^O6< "@]p$BV)GVC!Bd h(&JerFTVT1 uՁECDh2Z@Ёht]nDѓw aa0Θ Lf3sӆL`X VkaӱJI%vG)p`\.Wk] p xq:o—;IA"X| q B+aH$͉^XvbqD%iRi/82! L ے&US{1O,BlXXؐ+ NP6Pr(3;Yq8WJ)Hq"HJ IKIJGJJIKa8y"Ֆ͒="{MvV.g)Ǘ+;-Hז,L_~NAQI!ER¬"CV1NLMZ)VL $L`V0{"eyeg :JJU*[5JLGU殖֢HVQ?ާ>حѩ1͒fX9֘&YF3U^FuX6m]}G1Չ93 |UҪU$]nnCM/OS~~>&   .y݆i񍪍&v\mu:ƑGLMv|253Θ՘lOv19|y-Եl^Zä́UUКij}ZhlfSoV6¶vʼn伲3صs-[{'BCSGhGfhgWΣ<lqu%V>svu.֪MZ26,b&*4r**4j:*@LMLyl,7*us\m|GD\bh$jR|Robrv`NJA0"`H*hL֧uӗ? ͌]֙ՙdKd'eo޴gTcOQ{rswol m ڳMu[NO [A^i۝;OrR V (m? Yrˆ[EEE[?Xި%%Ga%oDDiNe̲²7Yn\^{p(㐰­Rr_bULp]u[|͞iU-x4:zccǞ77Q'z̚KZ!'lsWnk]8q/v=s}ٚvZ{aԱC) _}ABEKr.]N<{%DƞWzuW8}nX8[[Mowf[@;]wv8d3tyoy02*|`a׏2-<>+|"ߵ~o /ۏ?yx??'󟓟O)M5MMqb݋ɗ)/f 櫳/ M^̛oy=}na>|ZZ.V|R?B, bKGD pHYs,K,K=tEXtSoftwareGPL Ghostscript 9.22_ IDATxklYgWU_9s93I=#Ff A'6k+v΁`ZN+,㌃q!"c.ZiCi f@3~{îݻ/讪]= j<ϛyF#z`T^LhJ,--#[9fԵ7) \J X]]ݳ|<@iTPpdt7ɉP= p\Hh6IcH@ l6{'Z \/{9!3(hJ#Jc%hDD|6͈')%jii)VWW{WWWlܙ{sp$-pkuu56=sss'1xp Fm +FoD7p_){0%¿wO^L@ @~׮]TR8`JJc?8uLWAPPgy64,K^H@ @˗gϾ,{PP<""[QMNɫ((3<YE$IZQStK^'W7̲,jdYv+VWe/ DdYֹDgq8{e?/K]C@ @)y72""yz/ ^U@977kN'0Q@J4 (;ŋ]pLPϟ\XXFa`"qii)ƦF=6Nٌը{<85X^^Jq''ՓfTlU!٭~lFzؑsssc"rqqp@l6hJ;wN$0Z^xfNv'sbyy9VWWcii){apر$lFٌvquo[/^#N$El7~j9毋zگZܸq=cjj:~'*?S?E_""w-w}w}dYTLMMGVJJ%It#NhCh pi8T@w+kQԢV+njPnI߫ }'ӑh}O<_cmm-<4MZnAegDXNO?o{wx;'P[u?/e9s&,4mG݊X__vV+vH4,Zm*eqⓟ>\G.x[-xࡸ{#"vR"VkqǞS@ Ho~{jYv**NeR>Ы<ޑ (#J?s_jȲTfW۞f9pt@Q>hwq=ty (ggOũSg^&0‘(#"~Gq8wO6""~7=h@ױ (#"?z_<{<[qXXXոxb4Y$p<7k…Ԗǽ9yMQcqq1bee%.^f` 'ر (#"yk~}˛6ƩqܹXZZT>:eD#)}eY?vܹs{Iyً8oGDZDшXXXzK ".^ T+{edW^z *WVVܹs1?? w^|4X^^c{>j,//G({Ypd (wa~~>caa!VVVŋJ]뱸sssKKKl6^=mX^^T{|J93&W+{U^h4fPPA۾#6S :xzzΝ %,A|嘛3IwI̧ȩ$Pz=cnn.VVVŋl6^+3(G4A!?ruu5}p, (X\\^۷D@y ϧ\ZZ2cA@yt۾#"y#|Je>%ApwzGшh6SAy }GO !"|3~?QlD`P9Jxr Q~yąG?TOp}W}q9mX ("5{CTFDD{g;?w`T#($nʧWE-F>gW>w/Ed=o]o{~/{q"duSO ]@m>>sWTeQTYL,ey>=&68FDq_],:nL;~F,M&,92 (90mSÆn g^ٳ_cP5(}ǟ-Z~g.*SXkU@sҐsXq[xBD=". 6j̣ J(/^WLHN-TVZqÕ#mUMY8ܓacKeQMx;~ᨬ E PVAN+$wr~u[F;~vvG % DlTIS1VR<&xD'qP2bwj\%*1:x"ͳ'۫jʞnwo {O4^Ol^aۅ[ULz~\Xʘ*k1Qojr[qm+xd{jQw~Qp (9Tbuu5"p=٩hŘ$U|wru ~ھGۮs̩Z[uPxL~be=]pUduCǎK9.:rp{ZΟVk`6/oj̣$Prh3#kg7|*wTYInm^-ʢX㩩j'|t6ką\V'z?wظՑÁPP9S1۴<{i|eϖ@X9n%'ClrDxS-_?{1w_Uٺ{.8TT~蠲[ӝ`rTUV?ip:Gq'gT~#|VyQaewH{7*TJ=)p*6y1_TK}Ԣg[ϒJFC!OyTPUSh ]4~*&ۘE$' &O:}/7gEviފ;=rψ?k}M1k7WGl`r8LIT"Iߒ5KHcB<ϋyy#"||+xG(""^|^WݥV̉ۿ6Չ,b/ƅ?a۵q Hoϗ 8zdN>Nx+l&IZCߡc=2=8GjZ:&5#vgITrgJvGgJ$I(H͓ε\2 L IDATJRj'h$"ND%*jT+TjQVZ=Vjj5NgItbɑAcӬ4ݎvڎ4mGfidiYn +lGFo _oߎFYpE62Xsq;/l.8ymSx|x|MW$ZYp)ʈɇI`{8rϧL4F?:ٵ?W#"JT;?;J5jjLզbzz6jZԪSQբ # &;d &޸eYG (V~݊v{nSgM_[Σ[':e7+GAw *8~S $Zߜµ,yi`>毠syG;q%ͲV;X[ '|<"2-y j_|*j_,J5jթbjj:k1=5331 (ZT*բ;I:%<"_w^IIweh!ϳ8_zk6ͣ_Hbs@U`VN/~C@ɱc>%Ln\E_ow twC;~Y;x13=S31 'gbfzHfyi.~f1x?O6|":*nI/ μ@xYjoSl5/_p9.|(LXI>TCnPJ>%R|J0|ɻݶ}Lp-nΨy/GnhEHv<l*V&d0Ll+yQl0N' /D{v `?(9SjxB< pLiZNvS7AEeڙe_AG[m9qA嶭Cm+v!2r8U!9{gzyydisL[Qⓑ]LdIVl}# QzD%zHޥ'0>yͣ|^"yfܾ}3"Mb3s۠r*6"*+Iv*Jtxw,ƅog|J`rO}K]wy ({kڇwgnngkwՔ;&{D0N<+ڞo~>1慨]=.|υ9'ͣ|g&N]9on^[oE.6 Fբ݀rĭRֺ)$*󡐲;}p(|Jv(;w[~,+ۤ/@,F"%%}ߺsks&,"Qdro䀼hwNGo׸~r(r㾛GX__7oWqqߓj2:{WbpwoF;·^ط;%>mJI7K]6⍻-rg)Uc[ķ9]/吽~'N쿮}{3o|LbdTu*"^ۈo~7~۵N?d{vqFͣx{o;qƵvj\v5n*4stݓ{~CqՎj$QK*γHd bygI (;/ۇxox#vڭ'Ɉp& &vXk#v#^?PIY<0pLm'k.+72"z_;gT>vu(ӛOysg;*9#$U2U)^S.YE *j˅/D|c.pp(agu/O_sQJNtCJ28d}YE$1ٹwTn >$mv+Zi{닓tBw|LDRM!eߚ6[ ox}?_#O;vOby]/Uٙb*.B`EeT^kt4{j^PY"Lae^{AeYYZTSt)+E1gH@ w;#B<wG`Jp; (ﵟ) +5r*[֦n@8ߧQKZYgۄkW[CNvm5_z=Kx0(y 颚]JZd-qKqʥyFw;uoSML%LoTQVQT:$YL;Ae}/D~\2`KQ"=`>%wk|Vk$-irox^c2Tiʢr=Nyu?[PyN =SJ#Oy?xrcְWG9,Ty jV5Zqʕr奸zrܹs;v;6ՔdҩL2]t53LUBʴR{)#3;-_yf`d".ݹIm;.(t5|L8,\Zo.*>"PNJl,qh#q3yPdW@=XprCvʳxCCTdH"½ӯt&ըj%q͸rR\Rܼy=ڭVrͻ~eR6[TfjԒȓ,ivVvdy7-ƅ wSq#_8y&gbSR4"ZG)N'֣/;B)*'GlT*}Uɋ"ߘtD$q%G9Jr%Uƭ;7c6JD%T%NϞ3T12-v:<s'ny$,LJDZJIRjg| (R̥g> liٳg^9PO}Ьɽp7!~yGM07zov ~8N?]/X[_yRʨwju˶,vnCyGdi׋Mq6wWMYṿ~)~Y<41ݞjZ툫/ǥ/1._kw:){z-NݽgEt%NMlqKjIKxG+]hȒ'i.%<ܜJ(R} > . :S%|έϳWʘݓ1ά5xl}Dg'EP9R[ID *+'viE:~zt:ႇ7`i8`8aPy-PRʻG9$y1WU_UFUZ-*wqڭ/ƥnވvi]#BnPYFuZRvTyNiƝ۱Z4kEdQlW\}O?+$LrR (0x7P5n&`(wxʲTR;v:z?jT1rQneq 5>f٨MEm|R\Ÿzj[:1brՙj/>=S:UURfZNYZds)6Yxh! ǝN:%"KKKo 9ɭl'78-G mE][`jE:ٜZ.i=GDZ,V*qzzz0솓]y֎62:2򫪟nx埋?zKy9ϳkcOMOGm?wRcԿ#CMw:0|kvۯ2""{)׵8;E5ez3/]K_R\z9ZݖO{fgekTcl̞)ʤV̥̓,}V^l=H;z^ؗ GpQ_ CU8{geE7:)U^ͦʝlU[}X{tmM5ey0ZIbV;r\8źld<yS<~٭4P2}uo.evׯ\K_R\}vQM[JgӜnP9sf&fϜ{N6;;|ߺs+݌l=ho̥(vl`<%S.?Ada^ft={`. @heY&AZ][v@(rHd9#3?áp,ٻH (YA%bIstQUyVVVU̼o^|USoSoEՁ$m6#q9z7c JI 3OY#M9b>u*)!{]rL0<& w 9~e5zג>a+lu{6w)abS*)E]4܆p4"I4;]v;;CHFeRk?d%֙XcrafX,=mLWWMRNܥ{yRA)r%3ZO@S*%L>:F +R`קr- );9i|4N'|ڷ֧TEvp,&78 IDATrpє%*5QE(nc֧$4NJ:|`V2p)Ǒ: 0&7e4&LN6e}nQNG8agsܹ}+%tqlh.\ުݽ5(vQ]JL \b}kbo^ޤ7)cvr$ lՄ&dn{C`qpA$)?e%ĊIe2XsgbX,{'^ҝ~ЅMRR[$'95((L<)FSjXTNMٟQsi0za;O?|tw6vpi*);pl8'Ӹ]#sndg{ 9e&M6=VB+ sWQ(lޢ!2I\-}X,c`RgX,7߻OT79fҠK9arÚiKchqG6#%e{ZgOԸG#08 zjR#}ޅS&i߳OyqżUR i)vڹG# bQ;g!l(Y}﷤pbW~nNv9߱ EQըY`H(v:l&4 Bgy.ՋvˬA"찂by@29_g^Ts̪>eǐR3X fu7QS {P5_+uu#x2Ñ떖/Fؿ{'*Ni߅;4ŨK%ͩrrr_S:Q˸mgޝ nݺ;HRj{%e-I)UÛjY`aiu0Vg34qC8 +)-/-e+(-[bXgXqɧ}[krܨɽIat>^͖=L;dX˘JL_w'mL3f[w56[w"I:lIebyKi agf8FSBܯ&8 ӧA9\ɰqhcJ1Z}aVtCg W^mJn4TW<]9[7X[֚p (c=YIZޮ6ܹu[k7vGPRٔxDRi-αxtţKhv۬oas.&0&Ii%`LZ,CKb~79vDz"Y5|hʁiY~ ֧v)!R3"ihzt#pz S5C5 ΄eI4$i*)Gg!Xk;;wYyA;K,]kxhTIm6wm|ݍ#]")⁜֙X+(-[b<|_Mΰc$;H $LΎQzek^4*t-oǝ7V|((ڕW8"K$2}WTFwLf$PAjETVT7hNo=Q}]uٺɍqrI{7t\\#9^2*ݭ;lܥu'JJR %, JؿZ,9"*GYJ8tf4)پ=VЪ|Z:єc3!{Dؕgʤ^e  OY4xEe-DNe;'Oy1Nk;.[y=ܹ+)I$eCR(ksu8r(G.5jqbmw v%Im[lvr8.\pЋX,Ϲs8w\t)f U~[ک;eEGSsq$Hf1VBL+_o6RpUt=@3|iacu~ B 5cޤ𜨉+etiޅ hS-@JcW`pH8zs!Uf/,q9R9M8H*ņYM1\8ɵW&=թi7t]ZA֣LpHi6v|j`Ì4/#9>%@PD烣KcBf";~NYW4y|,voΝn^;k~mSIKʹ:&GX:~G&$4wu͝uu2l0r8bubӋϼM23VX(>et~5(Bo-T]CH'zȑF:H&}q3IEs5Q9A iF68QʷFЈWSNrW#YRLH݁)%x|,N o;q$e-uAmFcIcNcQj@ݺ{7AWuz#)C+)-aŤrbT":XQiX>xsuǔ5mAGSIά!KQ0_z#))+nf5Q/.}O$ljjX*hThche#*s20A! TH'!~4Պgwxc՞ScnIy{mGl.X+` J2/~GN rTJ4p:,d^ԧŻrv%NTj=~،M9d|-ҷֲ,>4=VMM:_GS,(ʄ\4%O=N.iP49 Dev] oyGTznY:vpunߺ9RR뱤c2'Op2&&nqfIđqe@T^8Y,XAiX&XcoXE9YʴdqL\rP4 A1QtfZkr?>]Wxlt.%-S*'{P"tw]\Q 6ƯOiϽeD5LT~HA0ԣp|=|wNvIv% ޚ ⚔|B'r ; .i${k\ν:]!~~ƒA^!UX,VPZ,x饗lڷb9T2=1N Qj[k3%{P]G0F:dJk=z ǥ.ݙ?VPB-DLIs3awTiDeQy9< "1yQH_ƒrN7o\MA^R6H%lH q$c;u#ǖ1hB|sk7ׯEުCTR?u⁞p矷bbObLM> `XJeL)n1c1Ka5>,5\,2ʽI.J=+$ wnL'UoÜ蟠O]LMY&(JDeR[w!#sp}:gwX0%?S?ɿ~s,tPۭpunݼA'/)DRʦCcAs>9~$G0(BaXRnutoeVRZblI J235^l*b/Xʧ~UA8DcKwtBN+ ni0K?RPtF 8Btf=9)t&،#dmMz3ZqńZ5BwVrIY7ᑆF=rF\E=J~gY_v:k7o#IԤ#)E*)ޭ9<αӧX<EHamkޣ:h'sSX[gby0p.\paX ҿT^tK.SO=u X,4o^/(cDԛ,;fd֦ Yބbj ${R* uޚɞ*px4oO"&hc"9RR!1D~LK}K-ÛE-1ZAW\`%ToS2Iէ8HTU#($&'"+Dt1ɒ}KD  9my_y?/-w>߻ʭt]G_$HsK?uO:2G(k7ydѫ ^kK?Ƒ2&;\*o *=ݽECh,4i._^X,) MBݻڸ{ktU;sa,)m$3ihʧO=͗WwgsNM]]Џq'i>_$bţˑee̎GǻB^L*$T!j?fWEYNFgE00[h)JʾYzP"k\tєʻ_G,m{l\{W }QYw=JMAmAHbcG9~Ni8"rkk׹ޠ 珟~@2=6byb/e|J$'g8b5QZG,*gͰ*(3&Ypԑ=y7ݫ笴dU,eAwn:~}NZ7 IDeEԼ'Qw:FF35_TYAJ/Wyڕ_G'hm{ܽ~]ekk? ТDR6$HṞt'No~[nQPpy.9wdX1i<8.\pЋX,'KKK+\tgsϥ+X,+(-ˁsܹ/L[,K3Qq=2Q9InUVkrC%Rs)1 LuH"$>TJ#`2$_عa딈I&n0 zJ/9D5=w՞A$^&*y"€"QM$"A,*1"ۖ%'\bCQM}\Wxtx/HRb頕(CO_| ڨ􅠍BJը!$TAc0Yׯʙ9mF"&_u677yYYY CMX, [b)'L'vC6#".K7mx4 R8kG?鵛GHWzg}B8;Q(0 dQǧ=yS>ea[~nDT-^@2 =te2pͽ8$(>[4v)X{7_ٍkz;{N˥ؤydcQgOXhFMsϝ{kܸ{;tU'-k5Vήy[cӹ-KP/ `SZ,)UdetI} =Del\VIIgFsH urw!,b~39 3I21/-+tv=M2%__WWiC_͛tmG*(ilHŸiΉc8scN@ Bѻ\΍Wܣ:(5?z8t1~B*' lM2- X,/MX1U"*z? 69qMTTNM9har)׻db՘>G=T{f)*ҥ)19O賖IHw+}l.\cQoh !AkeDhLNP&u*.A7Z1Qʾ1N2a]wGDωL})]/- C=z(2jpD)4oa"sV%*6+I>o/TR7_~nv$)oǂMIcIʥ//:! lrUnmޠUݸ([O?OcDiԛ ȅg.=: boXZZ⩧ܹsiUl?GNQibq1fe"[uN[gh]uϘ)Kv8~%YѶ kc6XQBrĭ&ǘgCNM7N}y1ufx?9'rVǂH"/sY7%DRir#rBy FHk :-ho!]B8xw= dLOTi4H-0^HT6ޢ)K),[̰qy_(߇X?4}}y晓=;< Dē5nZGӆHD =hj j:ȸtc9V'~3h佟|KQ ̮у*??s?spqj󄺉lfcf^R*hA9,v|4,qէL"'bӜtjR&ܙb6җwӿ89Jc;w [[qtO=Jxs G8~OmN4-nܽ]:a) h-p(B4RaӼ֙X,`b)}۴wm ɦ&}2urchieF:UWPNN2GGtw4עON8f7 8H,<Qh&N@:#09IDdf0$prȨ9aΟԞB:TN3R iã$&mQ )$ed].&߿3'ꕯKո w޲!j4"Ix|OEMsʀ\Vg` \pĤc@F39 Kt_kϾfy֍X,bby )-TN"Y&1Iߑ6imxO9hJߡmXSe{)'akPߌ59x:Pzp3Qt<:*·ҝ~9i ZEu(Jc4N~R{R럣>% L@cd<xէ v$#2>XTק4&nMh²0nIB$?XL~Kgߦ=Wkt5rk<2;}G9Nŕv*PWDTVLR&є=rx^G/umlI2-VPZ,bڷM)X/r2 Ee$'LM#*t=i)JP2+w箈6$S_Q3;O)YOPǴyhS(HRf2RGb79IK%(vy7btb8rZҾDR2FLVm$eo:wme3/=3}g7?Ok{N+Wu&!LđIӜbB֑9O]D9!˻7ގĤK,2(uo]`uu_~-tXAiXH_q-͛\ C qڷ= qeÎ5JPV]g2n_C:sWeoS&rr72YbsfirQitmm0*ci.ԝYY>6Yb:&sCyȹͮ>e>rqEe") Z#$y?D܃K%/|k[w w.ZNӥu[=usw6/LҽEQ@GжΤb5by 9wΝcccK.~pXTNzE&caǪZthJk1O{͟tο&kqǗsQGy"6>b.?!f%?6hxn~NIj!Z$م#}\'#.I_qJҎVW vwHjf[Eߵig[њw#ӵO 5ʉkdRY&$A)u!XHҾ)}ElҨf]iB")Ӎ9e_< j ɲǢO?}/~{o~ǘۙ q=n޸5 LPցdu&=5t@x26,ջ()`Iy?Lie?)ܹs˗tRb=?˹"JO$Ĩq㒤R]qDS !T졏*ʱGKZh>qaީM]kr2aZ|>vGxdq>˿ouL=-c MF L_{QEAXMwKҾ)i6~IƋV8B0^:]O7='FIf}K]RR/H=obޫKojv zdWw>+W:};bߺe$ F([ϦͿD.Ⱦg3ټ`1U^y^u677yYYYeO$`t,9|؀cHR99<%E앥&1}M91,#i ~TLh5'U^͛;3|oKo.3hV9eb2LTn-vey,dPwN8FjUoQeM,?w26 H&*XLވHwzf{09{(2mZ_إ~*9(je"'%)G}[#x7 ]DT}TFw^ QI1Ia_}e_>e^LDe( RSBT -A O֙X,Œ㥗^iˌĿ荜25"Ry50/={ňґ)L*3ҝd TQX fz ʿ_h u,=d[ Vty~{3Ƞ?(W(Qt _x4Mi<4EWR#4Q1hH2ʞo!o.r, jk^I=+*+1TQܽ/^}# /Ž;=]{C*(SDQ֢/j$eFQZj4 b)4ii[bX,j? 2&E9;=hTZw:{M Sקz29f2 *TPX,#*g5FGLL3d%ƠLdF y铏4?Fe/€%2<\~U zS~5ӑPט&uh,}"&˺קӾɁ)@ iwES: sEYڷV9Ct.:Jb2}<1l{e~?_Yx=y)Yܖ,2Ye1-^( =+OcLZ,Ä2mLo˳D5YB#y7=FTY3J,kPI B2g+ -nky  UDe&dedxi0R| Dݱ cvd 3R(63S0,gOA.΢)**eiZZ{u+'Ǩ3]v?uvQF Kz5Hʸe5@R7'(rx Wbk[,È2[,bo˳sѝ bkhIҺ'*O9ٚQMFR?셨wjcGM&Q )/P5vɴ]1ղBDrl֛a0'߉d$49ݞEVwXVwY[#; %}ǎѪ{kPcHӍ$`>eY#{]OO WYR2/CsQS>xHwv?z\RZ+__D39h6;dLP4̉ĤH5)2tM;,'v+3iX3VPZ,Kl}e4=r2**I&O( phJH~Q׆S8ŻLT+D]!Yp N%%ժVG-,"zt'_)ROf1@֝K-,MOX;? Ӽ}N..DbO$ݴ5RwqM7$}3%B}bxoeW(MZ2X)[5[ pT$(ARB *%`$z$ZYԙ,_v*%eYwNPMsz\W\ʤweo+nX;VPZ,K9r2 De&'|S̢)u$ s]bjd8n(I1M244"+-n⚔DVL,:6I{NVmHvr_FsTo~v)l-}밓R },"AN1]A%J:ǣ9er=NZ(X5'")5}|єsKY]2Qc޸+ySsQB~X3KbwI%z>RF^EFQjG,'E.|v@~ Jb[bxwyҧˆGN(]{ib>Qw~)5vo~DP'J#$Lj7B=Vnh$D_ċ|Tdy.5~EkITEтɤ{f:&=5|5fo"Fh qeoԢViD΋EJQ',M.ӾDeJɦ (<~ G} KqҹIַ3` () J\ XPEͻ.uEId sf9qǿ{3iX7X,)Xc2ZrXZweCrTb :uhqe Q<RK$JWHG=~ќ!N(I`]Ri$d$4F(Y6*4:grDXGT,uxk|#ԿQTԃ\%Y䢉%V{LB}>eio 1crbڷ6qe8ՌLGNq]EPVN{bnƊ,BW+8vƉ y1&cHG:4 )qĉ孔2r&ױ[&$Nqd5WaR!* J_ZQrT %@ PbO^nwVI#4@_zuK>2߉;,DN&鉢L+ScvqD #Hay}nx@")tqͰg]GQɈAb2?ғ7i& j7$ w4;)S^xNo$e,zREg$2X,VPZ,ˌ)-o.~˨1_QNfDA6ҙ4[k\~O]y7J.ovSQJV~&\>{T*YH$đW$&'HGVFiHnj B?Κ噎d6 * UNP! CTPZFł3I"=Gi ͓ U}b=tqL7.e`(1~S i߆~IiAi:b}J1/MO/Oi<v7IHn-Izȅ0^a}d"#.3'h9Iʐ`'hw.aVz ӼeC 2S|`\-Jf9>}4t,3b߱)2cΝ; \|K.-TN!՛AДL?K ;$ܫwIL(K=xϧxk=bҥ.8;$n%QIJg_v1s-3xKG#:\ϫQ<:ZFAޠ^kPj4kQv/t (C6!Z0!&0*F#Ai R#d.%t4Q/xV0[P½UP[x,~Ó ʞB-.$Z AB9`45/| xnU Ľ`b:9c%q>)vD__E)-P]7JicCY)?G ~ c ҕxR #qy:+vk0?l١ׂ_KL^?$5$)";йs3z9Ay|ღ8TZ3z=XʱwQ O9#&(f55}pܒ;8'N8 Is<\7n\ORJD b)ehE82RF"M\7ىKw&(}(%QJ8n&,f-UZ*6 ucQ*V׈@೼vd )g8? qGɺh)u!>e[z=imkp=ק AXz2(<훤LNb[@R\ |dq_OͼX%qCB-OEeI|wQRzGr2iw]ݾY- ݽK%,˃ŲO|rrrф>99dbmbֻSDcGi;ODq1M'yZ*| ٿJk)JʬdhQR#0+"[qQj KHǡyהt IEaM>]n0D* a@t&BBJ ]q3Q8.!]uq5/KAP1j4y8,՝:`{qu-HSĜ%~iWXR2Ӯ2P 0n-Jb&3Z\Nu/Mڀ'3OvJbZMiH j8W#ז_?ZyaQ4g?ŢYdN.0-&&vn7jN)eeRN=GPD4IEeL/~\ȅi.cΤbyXbXm镓 ˾"Ӻǎ,''XϠqU;S=A=&(0$PD;5ܲ{{-KW1,>>~/ZYYd&)ϻEjK꺓 Z{|:,wN`=,,Go(bԧ-fƍF6ҽQPQiߊИ~$ķ#* 5u:z]s_ȰP׃z%8 A[ߍsi܁<]܏%ĹvTr<0` r9 ƹA(PhH A(!) 7 P0=\h]ĥ۶AwM$.V.K e4d ,H }GקLbߐ49LfP 0AQ^{̨HɸL|m & w71-aM =`9@k@y!e ⸷CJJ}kޭ.%&i:FzWmLZYYe&ƾ>7| N5|9"Rՙސ@4ldkZ02s#}ZS;hb@)v&J2!&sRAn#rJ)r#F'pev18cp!dcAE]EdA>߃ |݁; PP6CԚOnT֊'48HzN;z$2JPБ0 H;'!''Ve]1wpθp݆K0W=8h/EМ?yMQq[}ю<,heRHyձ4D F.Z9)ϸώ1%\.Sk=.:ݔjjUu){ItK"HI l[ri/mk[YYeQTs= W>sN= ]eQ:*~#0\;n*3pj! qN)~ PV&L p畼ɜ3^< % dg~waׁ B_GE4*>Y8O5AQ&kqRrp89 wp]&͸ &ABi +QPu@a(\^ڮcvƗb@G(5/Kt|(7jS^RǀIHH5щer](Ayw_J4<#n,dYQm"t8l_[Ý[I.G#߽.zg{WW9" )?2Q32jܼRB ++++ (l!d-Wv<b8Ybf6:7L,=N5] 'ֳ o}hUH Je(V)ln=?tt|\E02tbd@t|~2Rh(d0dg~BRQl%1=Sd*P<0hW%w: .{ 8^k C(0jnGGnԯitZЀrױz.Jg¥ۧ$ 'Lެ0ڮ?%ba!Q⚑}pi@bऺ{+HPf0rM4]wu"[K!i=zd68wW>񓿉s`hĪDAJAH@Js2 +[H eKס6SuQJK2}N>w,ڒIlU7Y9Yrnʲz6\{sL5ϐRJ^E҅nŸHǃSf8)g."pkU ^˱cS]::+WWwVbH)] |ݖAV" )ø 믾_<~ |CEHe @Fd ӘtT\R"ҡ6b.q@\ǻݍVrs%RJR[ yO2=\7u(k('ۋ8dc>qTSJ}` B>eFFptԦ,OusR\ wyA)oўwoi=lp0پ`?qL4hc}[k@CWI4h#IA*(' {su&gj ֧ £@g4 sS7||ʡ$*"CaSV}G24t>(ٗo^(M! ;6 _Z4SR_= `uagI@((Rm]3o4q]|nxks:}|>vxq ` A~O[1"ql r\U  8niP:ݔۀt)J )U\sMvM墜LJ(8*b0Y*5+PnO;+#d LI )3RK]3wR'8ABY\@Q}GsP1-pFs )#@4odz8?)4dbtzg{.uI]JU(Ӑ ]]f`)H&wEݿV[gʪXPZYYYJ_٭6RíP !%0TcA1x}727e3,uuľ0?0J#&wn>Rݒھ{/x+ܒAgawӁ2MnvJJ] @{׿*pk\/k>hz.5 xډJ8@81Ԑ[7R'e2fR;cBkk MP4,@ &]}J6LMT[SCu 2)tS1OI!TcDSy9`* PՆMwᵧFpES(Aʲom@/y0Ahc trrU=?nuOmmҀrD[E0.Jk\K+++A| є\(hޯJQStd@0ǘT?oU82Г!'}Npk0 eAgaW(@ c #?}Pwp/?Q<>=8#g'P Kôs9ގ8&%pMD(8)&o @)\(eÞ_}@Ga?TžUT)W2) (5,:MAQɂ8Ꙉ6dq}J)p3 vH)<|}Jp^@4'KK0G'k]"inׅ?7Ew*n/{(|%ZvRFݾvQ P7阷3ieee5XPZYYYgJGxiG>N@Enȵƾk}quubvT>eʎ^D˜ݖUi ݒe&]>f /څY+gᯮvdDm+}}_ƫpG~5Vk#dZr4uwǗ6dC7%܋MnÛ-F 8Io9d]vU=.Ac̸EI}BD10u-&5"rCJ@^2&R_[)\6Q&1!Av٨y76x/pmmJYH9jפ׷Mȟ?$M.Agin[kR6uR@9tMAiQJ& V(網$ (SV-yr׭Cy+8ּhΒ>VvR2;~sԩw\7K4тlNJŽeR-PBbP=򣱃2mrd 7et[TRae j֝JAuq;hCBvFPϞ{R*H <hl wT3΁JޜkGŐ/+|Hû+"&ĒD0C̪vS.32iJظz\f9}pYYYY G?^𚝝qСCv+at7xvcbjCRjQCcuՠRV%en_.bqrSV+>º$s&a^ qJDshpvԙuZM'%+eKj Bz g=siKgz!$ B=4+qÕot_u3Z, lbARB1K5}R1vRRw '0 BLȉH p2 = h]Mw45 &XzQu:.>Mc.d4':N% 5ntvy4 0}r@z-t]q%Gw2%u!``J.'f{ hͺ 8yr{)ߖ=v@>}:h68w@ 0F8"/(}11q;KuPZYYY])֪-f l9)H)khnܔ*75D컨SZb߾ p0! )i[>% IDAT= $R Yf7*iJ%Qn"3w7_np)zݕ=XX@ׇ{ IR6@t}JbP8 k44ZୖvSz 8ׄi4G6%#V,0=u;]Ɖk`꺽:o 풬}gS3ri8&5d(zJA9-dȠUdž, 'UR)]2㢔YGeIt^th|즤ę#71Ȑ\@8s4q$9(t}/q @IOCTh^%;%e‰r m$07MjONN.cii8`2.T|  #ϣnj#%dn"_@#ͭcܓ Á31;3[<,žСC8tVG,i/yI(9Tm/_Ɓ"0^7eY̼ƌ׈#ޥ+"0i$Uՙ}J7@qbQf=S' 餢u>K>YFϏOtI*mԖKhK''Io 4꽞:%F>cx꫿xX 8837]&J]H:ҭvKa JF.PطUn?ƣe7¨dG_삃2U$R\ R/<\Cz=#l3wz烕TLj1bhp/{\JH8JA%DXnTKsPˀAfpG~ᧇzf4Im: 0տ DKq1s( njMsZ`^+PJ&Dƽ]ƧFI[*wiȷz[.^6ۢXu~ %Xa "h6Sxad[jw`:Br]y e\wNx(xh@{{/d7~ǎ±cQaL{o÷NM&ObBL!<sSX]\P!$InBG[$I6h ] Ԃ1o+++Vy|nϗ*BJp BD_Rf_kE5 T/M )b";18s" HJ cY_ZYo_}>޻?jS=cr໯Ył\VAcA CD6vϸA9 hi5l18ͶP%*LO#?46 'qF{r`T}OB(o5*>Nvz;'@4ԙtw~ePL@N)\&p)H5))/& ww!px7`iibC܃7߉onS&/[`輲': !IZmh@0O:)!lk@)meeeU%񶲲eSZ5NFQ4\:(h硧~\UV$UAz_{\,޼:Jz_8Q&< FZ]8Y C|wޅ.+>fuUy=;'Í{ t\D{]Ŀ{4:z %PDЭ1t.zhu5l4мxԠ<WQߢzP}Jgt7D|ŚS&uĜH7TnTT\dv|p;jO&53)}) ݂Wl.\ m,$HGhpD68pu_ طm~'~7p ڭ18˷ }9 a%p4ys8S&e󶲲VVVVէիC? FSG GWB,H[HO9iM+ Jj=PYz jPx#de)5Yۼ[2*A/Wo>ľKF즮DSBX?HAו{ 8t;5K8Y)971>) L$;N}+P5w1}V4ɹx4/Ly@}J25*]R1KS\AC2b I4 9905]2:+Ѿx<TJLE'>>NQ6>e4I9`in@φ_|/"gzy``=ݷ"uG$JW_J*s=緲x[YYYec߯N>Nf}TqÂU 4O4ؔW@Tܔh98fJ\JHՠLǷ?֝"yߴwb|IGNƻoK|w2"G) AvLj2FM\p<ׄjmMm뺔-V }K 8=Kg/ջt;ns-) @1ԧD*my*ϕ9ijF6VuMLJ$l߅I;wK}||o d r=r_ 䮵2,-Mį(L|IO< be,# c&6q4&jBAWWo+++2YիPQ{vvyy qD)N-aMPY)YWv!`x9kh2c^q`$2h3!d9 R~dN|'ߍ7-]O~`qiy!nʂxw^څ&]t= jnɛ MZ;D3(V2:sEAy:-a|z,R #(7^'ex_M)7%G)CcO#Es7L"qd h$tLE۷k}XfKxأC. fMݒq;+P٘U,zkzz:vNűo[g5ab}pqb_t-UDd7&}e7o9 4b'VZrFEC̔`?v,65]OOWaʙA;JϹ Q8eۚzHjM\ :l42C*}GJ:9euk  "fw2]ˈdo@TUZR1 sOc YN@g>bhG&>W,le2㵱 MD,B @A(Ke&'fQdss(-pwf%7e饧p|e8p"B2Y0>m|\իUPZYYYYavVק'_3 Aa Rfj4hsQRx)S&|++ \\SROcQ95rX\GEMr i(pK|;ߺ3j??.v4voZV_~9&ש݋5uԚIƐf`~tBˈMJ H4tC2 25)Ko /HiT2L"p:@lX\G8w<rjg}ot+xЀK+ T]JKkjQz ғؿ}?fg& (bE8 hiu~}Pם4hiLG޾a evݾBS\a%sQsTTXn<`:!eΌM0b d(R.:Ѐ,nIq98c/ܷ9ЯJ7=p3>}0'X 7Rp4)Yv/0ooBʸ상A1HI}5鸷qЭ\$Yo(%ӟ-|/y7 PR n#qG&0Ҭ q31 ,9F:vp2#ղ<1tRe(JZ%qGlۈ8w^߾t om[K /Cq^ޮnGa>߽z^-Mr u|s}Tg:(!%81VєRb@Z]R*0VsՁk}kWb|LS TJs>fƼ.5 $'OT)e &#s.|nVSқ&ފiwr9=Tj1,-qNaECѮMkM!K@Hsq njLd騳˓m(w_,wS5^)LӜЌ3궒&;i%srT P,+c@1N,GA%S x2sUH vdRae *mSC_8zTo| =7EL`;8nNSBP_J++++B緾;w 7%r_QٮN6\cy0Y*u::|}2/r(6 >[, UsMC,Jd<90ݟv)c\ݪp_>8|kԣXJ*եҮcs߃] 3 t<ҍsre H 躢R;IPRuFcg ㉓Ҁ*aX%%B` V:;Lu{)35 `Q]0.,(K+~ro$Fb 1f$]d)'9*koV% F&t㍃^ٻ7i7+ 'ƒ PZe XJxɍ].$Y@ieeeeULСCv_}K8:п#e;ٮ~} !R1 ʼ+`-rwnFos,df!廤`18\ns}7e d%`LF2] yX @о45*@J0"Hi|Fc\ `q(J #p`o>?Rb2 3/9(x(HBАHr ?Q5IHb"z rޖ 0RǼ(qĶM_w?믾{o>ދ8-X:& {nRz h{ژUN6meeeeU[G?97ޘpi5tՀi ov}%ϟG߄RMwJes}(u-N8.E$09Qy7~YuJ $\Oǿzu4͓[Ϡcr-߱8B_Gab`PA1p h;65j2BOJ0 \uqRqonwB= ]28s@6meeeuPZYYYYt{nnsss6t/|9&d_#)edTUe2;_U#4L^$*]r}HEGž[S}ep4?N b DG»f_3xPQɣnwAݽ,ޞs`B9JǽC x+ez#(8Wx GwVB*&t DJmcӎ̌2Z @njPNp}Ѝn]EJ=-037̉1?Sx$ktC,t=AWӄE%p\տ r 僴^%LO`nn@8*dW> vx +/W^ ٻ}/~_ǷO}gzn@-]7ؘUJPZYYYY 9y![r maYR7`)eUSܔsTlO*]TfUtS>(bU*]_XSzLsn=1=i;w]g3n'uϳeQ6zJ#ލW\].C][2H %m*N$" )@]7Ҫɿy +h{@T)b>2)05ET: 3ǘ:0[v\Ĥ7@x=K=)+k$DX3SQ;Bפ$spp9nmPYʶ}rM6}c_XyZQ_ۯ{;ꎡwȳ)}3{5׽~+++ EPZYYYYY)nSgTa0qr2"2wLŸmwzh\9H==@Rj@_|wa: Z7=p"eR(4zړi:i^8%P1@JC))cCdE\ tDEs P6yQo˸&' {w~bai\pTxso)XYYY]P5(F"[rsuq@طB;S`PYMY;P CH /cfQG/z^4/8<h\FWR)^>%LrԧkTfSTBAuP!KjLr D]* %MJ3&AXP4prEReZ<摀Ih~SqɺZK=ʴ>(~ z=,O-!`YYYY]hJ++++֧\gkiU) 4t6׫X9en~7e҉G *+ʟMkP$7 IDAT}蘢FI6fw_Ocv_>ܰD=:ݼL,([>&* I{R))\q1ݹ@Ac%q4^V-{j=+N}Jh>&s?i7{:=N;*SO4TNKiܖ2o@H܏fY .$"N:Ǿ7aPAHaaa|]3DA"eZ.ڋܿ_+ tW;K 7qMYYYY]hj)9Ǿ9KOYHm aطtkTQ Wrp跉Ŕrؘu*3[f{+7NFFI ;obC5nzf<6<[edSY6ڙZX4PBBԗ Lih3v64ti-S;h4P+-D#=YQ8.!0-%pc/L?:E2kҟ<AI<w:njR TM,sP:icaa ݮ7x|N_wݱv$zi_o_8(~_Zך.Y@ieeee!k0;ԧ|Ghi5:o 0@H/BjmO-! ,C/ܔz` fuC@A@scmn\sgx5w^6ߨC9T(=HR<(B EPoQL&"KTjy;F /:_}(I8z_YkHkG֥;}+q%hv$k:eՆ)}СC13C_y5/UG*:z 5Y]SOd[rXGewq1ù)'N }nC-(ozf|ܴoj=ʧx:,Gٓ^N]2@HRP ck800lR10bJ `">;ۮNl! eq%ò7 LbD|Cq#┉z@P@ҁEu44iqrbv=@GVVVVZPZYYYY3-Y<쑒]y|8Aeu(Mzu)SwTBÉk|9ܷ;vXo&<|7m 6=> @i=ʦ,lk"ls' (R @Jh+D %Rqh$98y+F51yjEW*V-Phlof5Lf*0'a\cTc1|L@nM$rqj7kDY8=݈G3u˞v\cO(>xjdq*UVVVVVV{w}7ۇ9|c?:ot3ϗǰtPKax瑹޺n|}c <(:i1d~Rީ-[V6b.UcL\sRAJXs'xۥ;{;mbŔHVv-OvG3nbII4> gj=4P`vVJB2v;C>pL fNKOALNqel6KevZs'wL3ӊ1;G1d8v  料mkn(ƈ)`c>cxdN\sF?pqßg2@}<95^MjS4;;JxG} G܅olUûH;Y)50M\,cO +,CH9)*&EEςTUʷsब!$[/_zxkvt_Ħԛp/}wO< %S fzNηmh=iױ2F?udĄ|R0ԣ )A.EHi@: ǹtv:|fcߑ=^d֬@30RNDT~>IJ$è39&Jh3ߔc0s$)s8|b߮CkiyRCN\{vbyfHR/xwm:gY@ieeeee4==k&*y8玪=FAQx*JEE XW[Eҍta\vkSJYK:_yQ1J@[\S%MO.v46^=]g9bޙrڐB@ P䜌]q}PI@;.8@Ơ8G(B,f:p 8 Ż+V2jSP'(!x 3RcnJm>́J(l$TsL4^;;D? ĺcNh˥b&Hs&# xNѴi+٦9VVVV됭Aieeee4;Sx4x_)ԍqTRP7)OQSKA}ZSd>[dHuL7E|(!Wx)u]d cSN#vCt{,?N'ϥnzNXr{ryF18kBy.Y,' P꺔~]CtڅSJ7!~a=SO>է$OYH'}?HLǢwhAN>MĘO@ӵm98S2잞*$)gs_k$oSuH _」i٫qW(.렴ڲS:tU[3񡇾XjKvlaT˰|k|_qmⱱCVHCVĝTPD́*kMRqF:7xk"RQ㝵{wKsญvPx>Ta5zue.N0wP"AEIq" lvQ1qu=J1 $Pe>~wOauyKgh] )8돈էD#=9. ]G2wtqOGsHT#39|ۃ_Q"}E4]p=-Oj 3'6= zVVVVkVVVVV[^HקT8L )ch)+DG*q`㛾eC|ucإ*y- =[g)ݞC{wዿ|{ (HPorFZ wChA>T@!PCBCJ?969c\7a8Pf\JL̻LI,yNrnyH9YH>HY*9>i}3 $E6%"? +3#܅mtpΪqAԗ3fH2/!NWľ UZo-p{z_ZQBľs }WX:\ )eRRa5;}Ch8:_#UUsNkgiS36kcR>e踷B*!{]^LJ蚘wNpe;~*_J)(}Kev)ռNcu*Sǵ$C2ưLD%Q䇰gf똇kqLͿ<'.<?%y>#='Oq2)r F:ԥ Sy* (K߿wۇ9|s@(%l+ӐF]}`e@ЪMYBQza֔nӷ3=esRb,)ץ>\:e%5oɪd<>ؾ`$uJփt~S;(OB5Zhkэr )uD5Աp!B *} (MN5DM)dJ]RBS9Ac'eNT\4Zm% r} )(&tfCʼ[ O?&VF\M )J++++ZQ; */_ѧ4C0_ rSXPn1t,;žb_~ꭩQY5wn!l<{2cIH)u\™X,pTwUK[hHPY 7ֳGedly}\u\\UG;h6[wpͮM7=p3>Olε]rbR:~;vAy fИo8ױc0R~,TB>ӵ)$\t8{PrH dda}Զ}틶ԧd`@ O?C|G@D)*%՛X)^O% (.So '#]}kpS$ ڵ!aT4*k-w !*~>ܔ%)k]Vk&55cw0ޞ<uS)}s5ewbX '\v_$_ǭk&ޣ+Rfx`cP b zAdttFC%&Һ/:a ꀅ!x3ۥJ"86OOh1;ký똌n?x>s8_o,Hrb 0ֹJIPɃ:wp{d\CXX/3hpv&. 8}I Zo x< +$ il>->/<9U t2-Ne,NT>*^ڗ}7f*zܔ)N)f>uǂN6Բ≸F:eVݾ4d˪6kgNAgq/cܒ 6'۲Oiݔ̈,^K)<3T)?˧tMvUg,*eiZٷRnvg&65_Aeقݸ>Fx"M)ZyѠ֕4K>/ñP}U=EiT koe ;̑{Iw Q$>DgmA < p!0nr(i@1dC%[Jp!g\P)-=]-2 eߙ)2Lt;qD;O>eY``Q<[w6f`V6~~],4) C%AXa}|߳AԈHӅʀsì#Vm.)b`EhtEzaGE>7Tks7ey|ʼolߴ*m6kud!gc9nݿ#9R(qqև[謭Gr@ IDATE`LR@#ty1d<"HW 8pI.(RwuBoG˧nJ ˦T2{7qEU||J#81FMm0 GIq J ͧw#ͧiB&.uY5YRէvyMcXf,ɥSJ~''?iS2R>e>vT.zNg;sg>r O~ÿ+9ƣGzp'p!0C2Ac Ii$ØΡY<!X":.0:P#xJ3)@kTJ% `ol>^`r_/|za?~^a;o%!N&?2ˬ=.\p) B%Aز_~pu\~o@p;ŅFq(8Y`J]!+m9NuĊFS.wlP_M7_elHF@-=4#*SQ9eU;'o]>Mܸsce~َo|gz !E`x!B!Df2sG)N""xAA$ׁy{.I<ܿ{3chJVrU*n&[fZLEJ=_,c+E)pg/$N%;mO^Md9NŝY|o㥧>sz*A*& {|JAS^|Յ5} !DjusG(V׭Sf}A,h<ϻH'˶{&Yg<{|JkJgȧX[/21kGۏ$l$1{e?:5o@v40BHuw*!R'c8J(+ȉybsػW7;˶|8*6q3k)oe3)TeEM->=dڔRAyA( ˧?O7yPgB$ϙ4P9PΧtW'5P9ERVE;XVs3|ʼlyLNiLߘMls/g=[/B%`+8\]'T`fQʣ$8~P7AA8)_|u lUܰtzᴩkOY?*%ʥRy"f|rvqeަ83w8,6N l _Mҽ$4ro˟ͳ:>l G'v֣&!B&1&s7c`Ahʽ~QA(;](ΑKʡt>S-#>{ J&8dY|}+cSW}!t7;Q*Om@jwWr@yA ( ê)/xjiEJe)#vs#ķ{մ)a|J+(5qƟ!nmʍMagx0$ˀ M.Gy~\_6VyFBrM8}$C*MT8rxX3(nA uΑH4Mqοii3ϰ[< SxK.WE PL Xf!1͟@ ku@yA*& ^~J_2 eǞ]8n˾}JpΦSV}7~Visɧ?/ͮsccԕן紲0sDp I'(|o/ͳZd\=3C ;(@1LJ]-tɷ22M X#p{[~q)<x| ?y'o%|J[iM>[mH"u8ʶ˧?ǩ_]{|S%AJ ?|ʋqI&Tڧ]2{pSkigBs_9sAW_\iÓ H@om tX1}:RI@,RI)RD@  !Kq7?\voa<~J)HWSIsI5m[ΧtK9.#o%x6AyA( %V'>@~3MyMcfzJ Jϱf;?c,TO)o)r-HR$DAl)Tz`oʹPܩTtGNVRFG?楏4,u[M> n~ɽDd)FaQF`Ad,*FZ7D 1詇W'_W1}'NJNQ,JRpXjJN/o)޷|Aq$P%AA?_ȧw:Ϋ9&KH>n>T5Y`:-f|BNc>59Kʧyn.sR"R*'B BjC'twt[F:9yB7c~W[7_e_xm+Kϣyvyc0r$':85؄'ؿ]1Ti3tw<#0Le qb'pbEV"`y۰`-S(| c@˲&2ѥMLDX ` :ͥJJS죊Z7e1#Qae߅inFg,ĺi5uB⼔*+!0ISqᑤB;0޶Cz"qLq:,SN yʺO}eP&[߭r˽qˣ|E A$PAvT~3S^ChN5b۔oivJn+Tb|JCH9E$`63` 4"JQvL#TfD?457#i1Aߺ-| PISG9gY8 $M .ӂ5(M[@ Z ?iB>s[q=+˧JAi N70oa[}O?[Hi75u(?]*&J X?<>OSfK[#)VS!YpSf}Rb[AinHS?*ϵ,TƮPE8=cJsȄ̖6boN3E"R-\cC#z 7s{P+$NVGB!N-t=(``XaR:9Һ(BtĊr6em>vTz)mPns.FL$8Ny4 ( bԧ>~w[o\ߩ d6ƩKL\7e&FDPrMOskuSfשtVg ZRB$Ƹ,~' ^_^qJϼ~'߲c低 .r`Neh25ÏǙü22vs\*>,%; W&Tn![[GAAA\PJhklWo%uYHS$ѯalZC-/-&V(zܔuTA% l7ҌG9kkC>CyAMA?`lZ^] wG ^8uNpne)d0- DPQauE./6ͳSE&~>bZ_=iA( b\s9R"M(hZq+kWs)Yh?u 2KτJH(JB%+ mjLFTf\q^,?Pɀ0'@k+1҃o7ڳ R'Mw奋$!6za87Rݪ(R*!D7Α\xwsaf'>޵;ػv0pS^S ^t,!Zn{fK%8荀soKP;Nq]Ss[j a(_$A<@IA+~A )RBP&1E)M+59*GR98"(p;W(mQ}J-rV{aзfwuLtf&q0~Y ')uHODۍmE֕o4>|ro8@kf;.HE݃}9ͳ+6Q[?]tӜs>ͣ|T V A.]!^CK0 E%%!a}7_XA[ wvfEG)@6Oٷ{PJi<ʂڦnW09SX+b)e߽ ZfhN18ن Qsc#lEK(vN/?-.kA8GHt}7u`J 0ƍR@)( )BQĜ{ 'ۿV"\>nu /eߖ dw~`'?Uvc(?+?9&\~{_% G( b\gdʬURB|d2;Պmm˾ ,p{iȧZZwW:'O) n#TWQ]3.;Y|tr04Kͣt~_]'-30$I8NFw2oH@*&R)#Pqb_s:N.Y1m>Zf\KdmL≏J7|vEwb"%-ʼʣ$x@IAKҕk=i) Po!tWe_>LuB$DiB4Sco)UJY|Sʾ&zrz^RqR&u]-Ah!Tf])˒cbe.sSf)g(.ϧlOY{PyF!d9df*M°>Mo:7Nm=jݘu3GI:H$ %7ݓeo΋!|J_3Q/^ҔO9=Zw94 nJ|)۱\N(ml?,,10-gc4'mxM$2g.ɿIkNX9w;I+RX %e ul9tYɝn~N坾QڶT6:@MS&؜2n=%:Vݾ"BeAtͧTfam7h>ea"NmQfݔ-;vψLjZϚ&VG   Da}2_XRPFTRJ!} ?Yqvf0ܸ[so_]kw9X o( u,X_No4,QA( bI\/ꄻB_^ƔBEHRJN6e;2/Ӯl0U9st_g,p Y>,{Y >@u%$N eVG9's&c(F0BF`n}'sU &=`538387{\uÖ[Z`Ü2@( MK]eg7v w_9QA,( bI䝻*(@˾S#ȅLce|nJ)M:ewEu}dP61S>%Cu_[s @=Osys X8!Q @ųn)@)+P*()uzp/eCs3 F.No^دaи:kؽzWogB{wU~vk;?n6u-܏"w߇7g( A.~cgKRI;ϧB@ p+n9wYUKy䂠@#Tzݔ"HXS`7-~|P)tVN֒r'K<<% gy3r^8YG*SA0 M}?ݻm'ӷҝۚx1ד'v\s΅L{~|`WsKt9VX@iٽz;8Zjm2EZۼfYI QA,Ať7ʻU.B...TRJW+s(Y$I \~uy`@3MYp0y&SX^9Wr5uVٛ+Tjn TȚ1v"8ylh_GyP$i 9&@ ?3a2wQ*PJ){])H%3֭5L& <<f0&Wˇ__Xa5ɝCտRumM9/s+68~@$ ).35|4o9 @HT +Sz3! ջ78 L-."2sofwVL 纤|0ɩ٠ɇiȏ΁y|($F&`A$=! % ]aJ$Rz.iܽ TvO$xqfCvߟʹp2pť4Ć9Mߧ1p3){bs2=E9/GIH$ 5Ƶ|ԒbwY$qO:bX?YV IDAT ||l3i=e^T:4Srl)ՓO)y)7?^"|4*t̼NOT睍?ʝ|9ZXQ2$M'1T"# @un߯Ny.J[.7sڍiWa4fcs3|Lʅwl{Yyw$.s7I) bqH$ ?(.hI]g~2xܓfEԡkR J>6 TzʾF:ɧ9xD.U+>fs.,Tx7Ӝ}lʝ$ 79<ʻ`ǐ5A3(n9R\B)%Td2RVT0}<)97w+?e (-⻣vkyE P%AĢ@IAsrkx+uv !21c0%Y,uz*R":_.R( inc*i\˻xM+7QPݔFA:u#Ru:["t7cdIw"y0<26}MrJ^e[ 5`̛O)2GY5OT{)MMqG.`` Szy$iC;`-*eIe7\r$*ي'7Sݾݾm{``܌1K=ߥ&9 S,XnÜ QA A1ʲ Z&}U4;!P*){|ʺF3o# ِ|JPϧvwl[9ҁ6Mqff%%a'u4 p?UgԶR()8gPP2fEI-:2GR)iJ7Q.b'/>˹;8wo0+vvܜo2-#e/i9ZHIyAC%AAȥ7ݓ4#`fiοlFW B?̇S˾Q#:ΙOY yo|'װ2C&fV\blaԝ;glʝ$6&pcT1ϕKWn11np˺Ro{nJtl~|L?၎Ѱ_)vv:L ՎGheD.+r%QA A1#+s'Nꭔ2bfa]SgjC^Nm{S*r|JtJyS)ʾsSS !v|:ƂɄr'G`Yx(@҂ipt^)ί4 {spf~ne@Lu`Pc'H7\NvbZ w9-ڕ( b6j>A_]kufmiR8sI]p9 :2 LDB"MS-5QDu^4Q}\ֲP:w\+;]WϦRcTqcfiOߧI1ׇ s)X P ([m! >oYqs?wVq{/-7 %Ne4gQ9/>oZGIq!  foR+LBIRR j)Bee. TrDQ0`Ў$IʎI+6;x)4 YɦgPYu[V'T6kock9I<֠}Rhk$ -F2^PNmpd0΀g6pfs 7w_ -K_iBe0) =Y(7"M B~Q~xO\sI9Õܔs-BM\NM 0wr'Ǜ J%F200qr1\:Hm=W<7L'ݔP:)nјƍպ)M.3,.TWvlqWkG= ZH$ /sJ@]I4ҡ0*=)z a" C`B,N/ C\RU7z7ePY:띤^}ɧ<;/'$ND j}Sbq6iV"  :6B}!?(~P~1mt }u;;nXvK+okrQP1Y-go=?& AтIlڕ9sXr!8oٷWS˵m>%3I1axyuSN*3SV]^>' I;I4"kG0YKD!Nqbs)#@B~e!j)ݲosc~{na2 kre-TZW&^^{qe"qʣw> @%AA?y`lʳ'.v)KʛܐSJ5Ss"}^PNuSzs6ͧ T(@g4_v]ߤbrIpBH V,~0X0B M'ܒm?pE40uy2(*NJ_>+)5Χ,Pؽ¦B%|GIıJ B&Nī:AM)سR pR gf(+U]fO;һ3oo||?{)JS=8gGRi7A"$)̗9fE{ xG#?!}ʜ/D(io97N>eIOv-֭^9b: @yA@IAS'˴tݹIPȹ9g]v}S$ CAPɧ*Tv-P]5]s"T} $+i"T8t"`BQA) idP!N 7pzy{y.c@*3V7+۸JHYΧb93lo+>jcqVU~%@yAu@IA ܓ.)3Ξ,ZY>+qS?\DxE,FO9ׅRwmʧ{sZ^'TӪNZ }|.@nvsg8 s6| Ge'1(OjqNэBL`м  1Mno72dU|JnEMKR 6YG,RR%AD( {(Y#)!Q8qO&*WTezYVS.R;U9yS_>^Ge|RQowrpʲ”e Wf`J ‡RPJB,J NgHD>!N/\Nm)Bo瞠5!:[L,SfnKT=L.Ke )2:#GIQJ ?b,BL״W_5|ʂP A|JӬbRJ߅( ](y.zˆ2 V|kh^O=Iu0>!' 8Yb؉ w)]2V,_dȂPnRP)L`dܮDz2ۮA銕κ7n ǭ{ϝ8ͅYXչ v7HIyAH$ ٓ!M=Bejt Kʧe߁O9یaZpjr-lg ޹;9e$ ;=  +bʝ$ZҰcr%B%q"NuB1LĻ{؛#5gWGĂC2{׽7eBeA 0˾sARHYvUcPkʽ{˾g)~D(-RR%AJ p-weGj馔I\#=7 MdzO ]MIJo<x2٧i{.kY3PYFͱaш ޛdK;wGɹG0Kg#K3_7 B)T T|-O#*wv:xn7X]6%6H]X[?,DJʣ$!  +ʲTy_պG=) Jf8,K8 TxL1{ g:Dv, s܆ PL".ƹJBeŸS43aSoI)},n\.H[)rcwu9E l?wS@yA-QO  ._Yr硸Ȼ~u>$Dg+Zqꏧ5?犀ui{ +/IRJJ)!9י|z dq2V=}|z]QL D0jE|vOTcbE_(p@@om 1G U`ݕia3JaGx{-<9~]1&ǁ.007jArz\Dͣ3?87~ ~"C%AAʻOH?RɊeEJ+։JVz GCEl0͹Q/^_B4RjANszA~囏s0V8c'!Uv(jhF]] ea ~{xv0@*v֬#BbfOzf6UX Tjq2.Cp`܇fvP銔42q)=|HEJ˙w3+vB6ro[kx_=iA%ApWW 0"nҔ˴Ԥefe>|+m ax5皃Tz=Q!m}vwùzcWq)Rn~sݶCI3Hx O ]K~5놸1I{şS R (`,w'[!_60t;/֨}+euٍBp@qO[I_>@G CNtGg/^'( x!%AA8\ r^@nJ/I4wZ)Kʜ&\ᎃWݜJZ/ AdBBٷg8-uS( w]_ίnI|D{K8:d rcHu}Z|i^;k{FWֱRJ-1ߙ{8/X N\'5JfJi7e:cS(bo14 X9S:!Y1Up[ޏbx6ć/>4Ο~Xz~/=qǏz*A<&@IAK=Y;X..)K=Y)n|ww]&|' [ͷ.ke3,su+*W %}I<XBqc  v{H#{NG=cK LZli%ĸm"I^{Rf¥P V%Q˧0]mt@ |Ά˾-y10(]AU7(lk?FO0OJ%W) m?FQtΗ{Óz=T7J5z,RhPCIB5.,Lޘxm7ƍXT7' Ƌe2Smݓ-o]BR⊹nJ{\C*S6ұ$XMuBe|J&"ȳ,k3b#{c00Г<4LS˅,δ1CkIz1:8'14A$PZTRBFHɨ1\'?s0"m#6ʿd( 4QFرLzd枥W BXO-9TQ FLSf2&۹)`LAK]κ*?wV6QQ d?8A%AAe:%e^ B'ckKʧڡߝɭdzm7gnvyrk9|DJ p!8?V9E;2;[tMO$@ #y}f忞r:4B'O#II81'L&*S$i$!0BeEeaUdYGm]⭄uPnD's~2KgX84q߀Piʾ5sS;`\@ʄʀeΗ:>RsPveO׻6|Cj!vQEe`C)>A@IA<\'[iPLtʷse7t<}C{NB~,gPi>[癑9)y7P)˧+/75S:xٚ㴚L*^=xt{Zt0H+F9q13t|p^ԁTkR"IL'cı($FL&)dA"n!ܽ ~.gLHePq6)(Eq`\PY6rzc@ kcv}p*2'JHp۽\̄JD0 r;v (dӋ B%Aؓ'} 52J#f쓻 5i%RWNu㈓oߧ|}AS ׶;/3Q- B*^>x$T{$n#xσ @1pƳSkʺ첣L%R)H%G`\ ̌Տ:w{HOb'cL&&#L&ci4M00t6v퀋rps&n$LZd<U(奀BI3sW,dQ:IeJk_ IDATi.Y)%)7cT/n?ʤNٷRXOS+JݔY*]'6rqcxr|fݾP;GE >rC?^?E$A( {GC>)0{$9wײ S;%=.Ǣ;$rM} Mu|ĊP(+)mٷU>ewù:$Hl koyⱩ{y 2"J 8hlÌ@8,ki0N@q:5'ZqZ#`<!c0zʹs&kQF&RR!m_JcwM)@Wq|JS*@`>is0*}K c`҇AQtO V|v&6-tEyB.Hy2tt_ȣ9.'K=ADH$ k.]~-pn c0q;w nJ+TVErZeSTrð(#va`(PqD6W)ڎno^M_6>ٔ|J{!x V;b*SZTnJ1a'{xb@3k/~})ͣ,LA5$PA%~^|Y2EX~(W#W>kc)ǝE[QI'݈;?fYB9`hT I׉ Cp랚!2?E"ru S(;w1"ہtcJs#4?KTBHD2!*IdZ$* VABdRZQ,Ҕ3 3 we( tA2!0BljNln'{Hw߿p2~࿳r99H!d›i5ű_:ާd&CWI5k,>ZttvdoqSڲowJAH BeF!ؤuɺxZS[xrnʣFyVow̙%җ3Y:vq x,y񮅰hm(!t!P?ϝmPi7`\Iٷw>v\fnS=N#m>2\[]9|af ;ٹax`0e܁-e!"Q)H @ TCeS M J9#P*Nsqi5ӶL98OKe2$DZQOixk|ъgziGY3Y:vq\ x,'5yGPiIŲݺd(Sf>z)[ETV]B{5RqS*%NDBMiCvGV[hF9GȌ[RH4HHj2MK25N4)Gbi.LFB@iE$gouAkueÒsXQaA<utz}t['O#L;C=8F?&%t_g?$R~bb`\16*{#0.ve ;R Vԯ^rnu&}sc%RAa'I0Ɠ9JRj())g҅:vq xIEY0I~ `}NBY˾j>exBf*Y͹gںfVO٦[HG*'rmlAm \I)!i2L I&N$IOEiZ+E=;7w+rq#q2:uରm`}0EXivH@u SHO>sEe9,qsZ -z+j8")CG(5FlʧD܁RS*`;~۪"\xTf?pώS(arܖc>c391ǻySgr崜IMqJ w%2Gd20]X:ݝYEO.5֜R)nJhH;lFE,}wOHsT|\yGr"@7% ¼&G2֍&2u>^g/wYY.17;e#唆JBc# T "B*K<7r4\"yS(C*9e}B%`fBeMYsdwtP\O'W?grTeSJO.NpT$<m10.{їq{2c%md%L.,9 靏eY yYւsa4rbbdȕ Ef!eS Kĕ[DΥJ+c5n̋a;W^ ƟN1{U\KdsN?8)KZKN".\<JN\ ةMi$J!hh(s< vZMS*Q,,HiH ˾7)઼!"e8uBp$z~I޼3F+96%rX!1MZrd;)0 Rjk$TVf>e_d>vRVnJ/Tʧl|%s=S\u=a]q:vq! 5| Ii*5%,r#ҮD-ᦴn>,2 *)O-9\㜁vb4`lCqk =`&9㶸U2^g5ad,@QV|M8>d'NAu:xΎڂd OϬ͎.R܏kqb V`ϟFU=EI`ټS598oMRhd@0UBeo>)r`T$)ύUnJ(БO9;2pFBO9H{> j]Cܓ{kmO @IA@YCL8 uQP 'ʖ32-T6"%n[]kjeky>;4l6 ܔ|ӯk(crSRcxd&8rҖq/P9Qd%Lv]Qj`2S y|>MO @-Fߨ2/Efs1{q_=ތV`JeZ+trʆynʟ2Bh-ܯ-@,]ust}Ki DPMPY.f<f9mlPYYPZ7i*]}/ ":v@IA >_ nR @KX ]̓>КMѠOjgkWL_,0uagq C!hųH5ƽqb 9ˀ ` ܠrMbYM ϖh} Kf2N"{}dߺsn`L7Ef>L)+#CœIx Tߵ1UiKk$TNI~7LJWc[ MB8k'D[JtE_1Bi;d+`<[N:_KjlʧrmpY˯܈8 Pn ( [O'-nJ,M]nH:Bh@]sK}C'*-+ W7OmZP|JL=ʊ1Lkp-@ vC`;פ&9 9ri/6ס[[aRڿ9axwLs63'Dr+Fzwh F)xj;k_rcs&9Vh؆WMwnW0ܓ71Vd_>ofPifҊanJ YΧtBe(*U}9DJ?3+__7;ܔUuY;*Xx~z"ɋbv>Ա }J Vh)UBqhZۢMsBܴVnlipL֞,ʾBe2ܠ['gݓ0CAX%T)V6)>%d y&\I7,3v.Əg%7"{[=d㿄|uўO&@12LvsnX 5ѨyAZCʾGCH#WS:7eePmS0yai{.aܻjA#*+a`Ne↸SyvǧA:$PAk]B%r1ymw ЕO.5VeߩCnc7eknhޯ^7eO82`waZ3az p1~xc/@/G:˝kvfXפ0Q6Ѻdz\`xL)߹ѝ{y~Sdr&в +>4AU}`n잃.޾s1Ɗ5⦔@2yQQ|6w]mZX&sHv>% X`n^P)MLr''m' +H$ ʻ.\ƖJn\KXOV3M, jwaxf WLNC'8N(\Vek}z:jN5R`vfG/P~i])ՍpcZ[a, b HjqRJ[]N}dok+q^s/09iʺFYa$l9J08hJ%rPyI̤@f_ wb𭈩*` Fql%N )|J,>WvJvMg|ʍ,Ǽ"6MA$PA'?N_RIi]_UVzF/v66Ц2,~wf=t]'JYe *ep%0ȦGȧGJ;)3RKȋ_8{sEtr#uya'K`Y4s&7gG=3 s0J,pQ9)8^B%cѪjYr !Y?~MY1ܬ) /ٔ]nʎ|l 0W]rTo"r+o_aÜSqf:@ -@IA4?qح*Yiռk cQ,Wnӎ;!9%J[,ʍʾ[vJ7r1wO9vywO ODpPȗ_@˛$8ɜ8s+N@4PNb )Ir&;. {T^>ukEJs O@i#Ek⦑GP\pX]9\a>%L9"e^TrSJN=nV8WeV?B$yރ9?8qm ؤc>˙ A%C%Aq|?ǓOrB7 K Neݫ) bW>%hmnJ)͕U# 㟷ݔX'{KUh ]3)~s񳋽PУ1prd8 i] W ƸIi,;A˹A ڨ$Vв1:ƚ9,̊u IDATcnPͤ k҉rT}9,v4ͧCP?Jqg_19hϗ͔;(AXvI ( vw el94'3Yt7Vw4n/T(T֯&溣2X%V.OKaAgOV ppZ̡˲'fd%Lg: r&; _ mkmYUAY˘ss10Źu:e5y0-E4f4v JXul^L]]:k+T *HS6}.1 ~gEV!{:vq! 8X>}'uOtcZ] )Yxّar' uIscdgr_}ceI2 J^R>''wT11By OR| |Lg@Xqp]kX I(K5)<?\y 3ٍu2ʟNtzÄs@gX;˪8gѭlzJ \}nJl9m ]ӊܔ`4H|eߐʧlvQ W\9I 8H$ O~Ly薥8I%msW *`_unrZ.˾ ͧ ʰv )!x06V(U#uc/Tzۇ ⳟn˺ r ]sV%1`Jxq|2]uhb3م. 30 r/W휓uG960 1qWʧD;^*p%Ng˦B%[NjrͲoK;S&ۡ@y~O8AVH$ %Z'ϲ QuVv}cˤ_]Χϳcn=[.Nn SrTǙ8qҖtoOyq\*ϾSt6 lqp@I+LK>%/L:qrsѻ˹=6AF_n'T2E&l1D<;JZw ܔyPYh8)LKtriP+ w"HnJ 3;:Gv|8z{eu$Nq! 8H,NS vB%4% "\Hǻ1y=PCȧ="nM)B&D…:BevgL5'e=YK}_>e99eM2n4,]\?W0eK 0z+=;KwR Vvn'uKxd?\6Răw>.[Szefbas R9'd#=/"24Au<*un.0BKvP-$X΢|JbcV59;ߜsMĭJ Q$*24JvZ #7e|U]l+83*Ǵ2 jn]ht(ʾBeShDJ5 ש{Äa7a>壇ʧ,~:]d2'8Ɍ) Tuk/NZ,J c{uޓ*]!6;ah+uq 5qI0fN^qwHO \CH']A7 )9am7 uwJd Z9o0'= rOC8A$PA'?OrS垥t.^!TwTJ/%5)ekSZ0ٍ<\)Pyڮ7%\ϭP&Sh͸͝[+V̕BJ+NJ ~;wu8pA2I  AAWQy)r +]N`SzʾCraȧt夅J5rwk~]|>X)nT)4cMqneNŠC`ʲYw1zhm90nݹZ_;p{ͷ>=Joc;{9A;˼lOxGYrl8PXLHd,I78:˾c;OBC V>%c鞦BD'Ա B%AqP]p>yTIcm=+ΒsD0(W*#gc%4:vg68fRDp=2x^*rQ.F6=F>[(nL˾|F Vɝ8ɹR9'm73VAd'wڜd%+:T"%w3怜;x5N -N\aZiNҐvk*e \h[*>MPg^ʤȧF%eKT :;7 VBMq jH$ Fd0ŷ2x7W2i{W+T62!N A㜔X&:,kȧLm{ANl|Jv-U c'vMufIr(Pɸ9CkSwP?lS2fQymK֭P97Nv+ʗϡe 'V!w,sp&2pAphm([$NÇ#G8t)7K< ;ps*k$*AFY$Nz(ZbUYvWk-lUi9F ]aEp;eTkqLm|n\/wI !%AqYsAwHء\+ .8BWbu\ )tq#Fc¥ٛ蝍~Ʊ$}MsΩ߁ۏs(n<%Zw’bnOl=:F,.1κ<9+t|Ml *;eNj.\w 0c9rѽ{$Nr&7C^?WmlyRQOrcuAC7Jy0 $3;#Y}iTd*җzeD' VC%A|gIJ. nz}SM}McܔӬM3cgc|6\mG7P(мݓhKi6=vO fO—})?5VAuOfY%pf-% ,0_@߀$N }u;x;ր@5]_8s{_@6^{̡"j  \aZ:_oS`gVkX#)7|J7+=[ u&ePA{'?UM{^.eor|P>eCQu>ew$ $aǮk6IB0G >):1=:妸'cRdp>^̡/.lc,em>l,#(/;y{O38r&I\]`F7FJ@)4#&()! JOq[ޝ60Î U_O]ͣ,G18 5B0tS6.:)/GMq CJ b˻W'C7_]7qn82QS`z\Vm3O/!O)ݹiݓ]uKn;h>>\Qwvt&'S|Gp Χ,~S`4Y^r\fRf|<ˠ7`ct| ˹wzѥ@v*wd5i뮼Y-sCkd;i dwEkL}L(ĥX|[X(ʽ{E8I$PA{ǿD[PEʾ1S.nKcCPOYe]e< rEw{/Rtqdl}d:a%o{2E;R~@W9PVI'hh Hr&w. @0c``b[,3f$81! 2(J-1{..ڟ=F++@jB⪚n4/f8~}[87/Pʧ}?mcݎwH$A( \4--3 $*)JSwf\iPZ;S.ıSv:ZP9w%>{+ukdMwOƄ8Χԋ9/ԉ6 Qvk[ڝϰtLn'3y9貨%rq/}"'Y Zkh lfG0nC?{ xrfCܔBonC59_KA͇J byOB 7[dR"t˦k7e%0i u uYB4&- n+Tkn,*Y,hsRnn?7{75{rO or|'׿Šq0cdg#SF+)xFKlYhvW*FEU 2ILdRϠ1ڎ)Vx1F%sBtmN:rϐǶ;⨌ʾnC7p􋿃ׯ`VA7?M bom$D%TUlG.7%k(*wsӮKlדO61u(ȧ ?HgUٷۦ'.o560S͜{2>ǕTgc{2E*+_ǥ=dt47g0Z2T}1 FZYd(łeXE' 'C)N]q2 wmyQN?Z߮ĥS;$PM$AD( Z?Ii{'q7 Mat Pʧ}#Lܔs@>e٭_R.xZBo0L~0>'S)|t)~|?- g0JC0B؎)&#Y7/<O=$L^,jc!V0`"1!u}%bKFLX!Q(0]td:=]Sr4šrn nH$ '}"'~nEspZ\B]\MYŴP;*[b*RN06/{Pd<^kl #]領;{2GϞ᯾x~} h6'xz c 0Y1a2;tzW/O9 s&oucWM{R'NܗweZ+(y9/N#TM_ WR%FmVTnO'Ts?pV$LAJ b/~~lyxSg72RBe.QrSe߀sT ߍ;<`r|JI 7eU#[3P<ۢ\.t 'Z ܓ Bwgo޾߾ߺ3oݙ;?(1fG'6%) 3y ie;x #K{ڹ$Yv8Y((ɅϜ1()%Ѹ;n(]TFBJ!>&[Ɏvȧ] b8$PA{'A lĝQ%%a 4Fe~jB%K>SVm)vn8,Be5`{R89PtavVn&ү_-{Rz>C]WsL8k >[9—ǧ&8s_3y=70vjƱ9Y;(9Epfĵ*BeSI#[ yʼī*xb>TS& ևJ b/y';;Xoge ֱSuD)WSQ>eJlOwoa a1[iWYOzq[ʞ˜Pr\pSZdz=B/=80;\O _[w&hQ^Wݼ/_"qnyxʾݺP H;()YQt\'gMrxM|Q.]M0~jOp;6[oE>"_ GssO L | N`r ·~~V9 ?g'{0ɛ. ]1w$ ¾gϟtl5gB6ڀPӍrvBuHེv7rK7+>xΟs_D ( |nȚ{fJeh P tS}7&S=猯Χlu27ܔɚ[F~h,%1kOPp'7I'a{Rxƺ'@ QeO.^|%<9+c|t3yo:{2,P`ue Gdc0V0J!P aF91uQBd^pOvpKV'uπ `! V'Qei@wb m0-r괛ñ;u/VF7&] #.@w(ﮰc=iݓڝ [']-2<ɝW_<E˾p))gr?euu2e ?;%wI!2p!1@ig;Un/R'ZKQZK~l#ev+oxo+hAB%A7 wO$\#Tg>7q;e#!ӍlrvSv71[0!Tsۏ*ܕtxh_:wCl0ى8Y#W*ыu'VIwOf1N޼~/>GE}S>%suyBx+nx8)ƛZh nɄԍrkɵ"NF+%/I J bo[7D!٪ɔH *R֥ӷ}n*-M$ؘ8Kȧ\.oC uOn/2}qD 6e1øuOfcqz-,×_|=?G>St}v֮[9ᵹRԗ L,wJY*0n N4o (0>fmݔtPA A^ wklwoQw}6i)qVSeu;ld1`ڕO贳{}A'/{:˫<>36{F8:;#3r)?k{?Il9 KYս[ǰsOZSH>R=xHWv]J4rkB%AAl A^dɛ9cc7aThuJ=n3SG|'%Tʧ ༾!*URsZ1\)q4km/襋,1s2fߗFd`Yw=x<ï~cȳ!v>evE_v!arEa/Sڠhqg gx'51%j3*yJ ˒1 ":=AqmʻUY&\MUm!cˀu[#|wǨ3%M4Ny4uh[)yOKun\d|۵^"?>Mm}>a'2dwOOq[X W`rCO^|#ol\ÑJ|x=–w0[YMʼmyw0/,n͎_U߬ D^T:[j?c ؎AAIA1aӛu0EJL ɧ4 60c2uv+ _i,nz W˂9n䝯M 'w}*vY|vv^ 2d f'w0㳟Wϱks/23yr ]y0\ "cIƭXE4 rvi#vwQ}>:.ޛ)H'soq  ( Ϫ8I`٤)tU5tSrKSVޝe,;:/wh,e=}Vk ۦu͎Oiy3.s(P}iKb(Hird)N܇1f9=9+t]SR᠕.=5f7Py¾9ͭ{ Wޭ;uO"}(NSnY!ە}K-!h ݷ6  R@IA=z(ӾJ)f]6aNpBcн;mDPʧL)SV]+Xs͂:˼8Nmdݓ?6*rWuO! ӣSCQxf Ce߻ʧs&.%?zo.CZ9h_K$ss/RYV94vizݼ"r]73RzV;Ǯݔͧ| J ƳATRqZ`6r& tS5(%T:PܨHE_w#2]KUFdt 4xmS7Ѳz_E'v\|(NʳW+ dfO |<1~<usx;P9 srsˌ1V E>c\PJǕw@h[(BѼdo*TϱܔuTN@IA( 'tsTrrTgh:nrP;rJ8l$+ʍʾ }>VS$|ޘ{^ݻ\p#2,SY i}*Wr&].+aJ5Ā ƅ+έ Ϙu}+æ3(U)ivSNJYۛ9*sʟ$ vUAZ|G?jMiԶ%l=%Zݪ;v-W f8*ajxf?^gO EӉkL?zαٓmVѱ\|8{.= T2wO W0=:gg8{uG]zPӥķ~~F"rݻM%NnYѝ=vIwM W()/vUY,,wsØrF0zKAe@%Aqw^cv2 ]X?%ΥDxFO%N@\CEnPpPB$tOÖ﬷s^q]#2 ːO8:>g`o_<-3<]i#):\Cv'anf&tO7tI: 9ƳcŲX+py܈8G ѐe٥vGs}_ٷi瘫yPIsI_s!AW Aču:fRey*M2U!Tmh>eK*n q#7e#BZ=8}?.NطB.'}ccLd1fǧ_|yݳƇ#GUӥgT>k/[38s0U3-I~̄s nUݻ9F+8xθHSBe?*4zB7?πۺ-kX' n&7%  Z]ĭSk8`Zu;M+e6r˴:3/Bҁ(^İwx<9VF'4@@vrJl굨yv:s&}2,c:;R |yLrn߹iv|Jqo~pBy~EDԗ 3 wvn )}y?{!0J8xΦݾ&]xHv.LBF~܍r ' n&$PA7𯾋/v*' UOSdPr$9{Ph4XAoܮ/TN .}0rJBex.n~}}D3}C1P2vlʾE>B>( \*"gYKoڬJ+V^q-fF͜bW}yVDS=[Y w3Nyey9 S@)!ȍEG$ n&$PA7^5"cMMzk`XM*Y"8c)S.7Xd;(ע99a"_o׽)ProX,WHTzdB9>J|0[$n[WIIMq%ǹ!nsVms& *eyݻckeP<ܑ.yP0#>HTdwVoDABAčo'*y[eI>}~Z6ƂsQsgxC);;2,] tѺ.g `ۗwsY>|~3? ə/T:>'W;Hl.4ܕw{7iq}WxOfLf{)"7n>XHSQɧ{{cAD$ n|[̟40]: crN˄hcdKTM% sSu+)9oub/hF`z%!и~nXJ0uol$J~tl4ÛjC܏]:|ʛeGSeh?XK'R[UyGhP)_$| 7],kDI9 (ksyl3)O?׀R``NcMuI'Pi   @) l2Y\ C˾}'o!<θ;QmJOYr( KJ FJ4Rr]eNY 睚ɜݍt:ܔ@9E2-h >壇3ʧ ՜qQ=}4ݰmBe=Ef˻-KFWw[g3d[ʧJ{> Q_uʺ{|.;w6AA q|xY#]#1ʙBeDؑ;/hP(M)ͣ"e!TfwqXЛ_1ݓ<8To^ݺSu O orrzʾǹ~a`ET3[ v6R ,]i}w0džXNcVٷ>(vu}cUٷ/Q $M˾vMʻ5u;  րJ boX%T'-˄P[^.G\'!0n.f7,8D'Q-»nج',RJ$;q- PKigīșO*Fs00cn/BI]cGF@ȵG}ʍtt}g)ojVɚ̧n8r׫ǚ<Z?' >H$ n޷7ZMcPe 5?bqщjm(t1ƪH5/vJyJslTB/onB$yfx,41L Cʾqv]I$ J fBb"%{w#ȧL}(wK$˾/IL9*U09%rXڴZɟ$(Z׿=ʻx`B`-˄M˧܇sN0!8 L^ Xs Yq ,3:d (ܔ)Fk7 #xp벆G KKh\ ە}OkmOA@%AqxO'I7Ho]D"W2#,^ٹA% *w'f7cWo[@%c7e8F[J(p2yfO3*f.n..|n8 䰠B@9X,0jATMIS~=5H &^IZdU%3c+.1 ܣqng*>ZBӏeh*!S}5ˣ/B/^G$ 4e4 IDAT օJ Fn)T7vv [\%@n*NvP[B%7)Fٷ͹dL8UIxPhY~A9o/1&c`DYOC|ʫ6DZ_.l&ERnp30!e9\n Y"elm3}pb&I6Be,*حnd>ePe}TMA\NAbWY,"+G+CJtH;}olnp &#Y4~%(vv795B7N#3) Tj/rV;(ٓr,6JI(Y4c&W]= W8 s_uR9Y-<2G o8yl'x4<PY:wAW9( : QAFI0 R:toY}=p xD)ue ;7;hM< ,"azwPr3)ۗCt^%uuf\@7*uvMqn GdvVe q7b y!Ecu^ 4p\Eyo+ʰiW3(mL%'rʧʻ J ?o΍ᄷ*+}&5)XGn⻚㬏Axbvti=5pE[{1grSxTUٷm#nX+tܓN~R5'y%NhP&7 O6kSn ͕o].<[}~2~  b[H$ n 8J[$}Kdfݫሢv%eJ&gٵ6`wG~d7hz"!")-WE*RtO߻s%NDF䥪#]q""*b3Mjs&rlsv>|7%0]lsSƯ;*ܔqtDBתC sKTۋ=`PZ7-Lj>|\Ŗwú'Ɲ&}˥m#dQ( \~$ےOi'JVd GSa\e{PْOo`FX+N   Aĉ7B~ ܽy9 r&,Q 7~98Og6- T}om"&TrƑiBnʻ!N}| Iӯ BƝmFq"0)L֌* $Fg)t:.ĀU I6CWwRs [1COιJ>%}mwO"r%vpJ[B <7\K 9i)낢rd;#@Ƚ8Ӝ0c:1+L +h=uJʧ$ r' ^fb$otYdae QMy4ݾ1mڊykcM ;*(LϾSM?b\_n)-8{ B+x3fs.5TxqϽg˞O'N⣩_(bdȞtk#\y7`GܓbZer#DZ>Pi>a*Kq|s#z͕bBeQ7A' A2ro,Z *73'Fļ~V ]Žʣ,C)+39o^m'={!:}j ^h` _/Kz7VA`F+W-_|>孽B>͍[Iw 1w1?`,tʲ[6E6Fbkﲈ8Ưo Ems,HUxm|Gkõ[+o~ɐ7 XzNA,h}g1MٶR|4ޭ8s3:r7cL3ɧF5GeS ~mei6h  ][\ ߻g{B3kZROé8iʧ/dw!vO֯lѵ.,{R$޴F tO6B@ywcv/j.ף/Ŏܕ+0-&|ʰ~ԛ# J b Me.T"/`\"uՖIc7"^4ٔ3&TVNT̚ѩy5_> lmw dsFi0m?h;*ZϜ|JS=\[gOsk ]6z¹' L`* d|h*ɦnX?M`,IeQV,'4ҩ[w7z ַ b( SqH*Lu0-)c y"5P9%2vSt0tSb Gn7%0lqSNsOLϣ|.~s~X]Z+ئN@ RVL"ϖ|[{)nbeOzG80&9^J="d@$ d ."G 䄺'<4dXR3_g>+Һ(|vx̍k{QV1kPI$A(_AR$|?]l.dH)TNNNTVjrS !f:*+!ʾ❿M0wٷܬ HD^Eʻ\nntps ywҕ澴RM\(c(\ReSzʢ:w6%hjp˻j=)$dҁ6Jii759)r:7ƀ2v&T֮@snDͽ6l$zԚ*TV҃|% N$PAKwO,tf,G%ʱQ)Eﻑ,c8*]l 3Y `Pr,Ŭ<źw_Y`ݓG,LX'qh F0i~R\k>e=0n{i_Bc[xԹ;sUȳ69NuA© qS蛙Be&a"* ZD޵WcSy}$ݷ ( \JʾjyB_-0z6e / fMaeDkw^vwьGAT@IA,a} .TSjYt ݜ iSͧmޔ|QvKfP;.^D;VO\w%{s0ơµks,JyϞBB\̑g)ةhoIge-Bek>%\ӜMf}3e(~oD+@i໲#' AJA,['VpnJm MJv"MGZM/T)qruTnJ}PGqDw2h*~Q{~j#Is(`aJf:yMџqL˧\PwOn݄_B%6 e$NJ0e(UvleuBX-'OTQ2.[ա!N 򜄻A/"?KY1 za;­`oo 4'}0+bu816xk;Xy 6crÖwV%=|8Isv[ŵ&:Y¼Ҁ.P9LQk pWFʠ J,/Tڳ.k]\͍>O'}kpJD[@ *Q)ɟ{D&XToi~I%&cXQ}/h0ٓ5.?} x9  O*B ~2΄P10H.Jz>[h+N[Ip^K'8BrR]y#,Cwo?XpAys\I/LlW2m (Pd)TmV0JՍ#9w -77w#XBnn˞lmL4&-h~~nAĉJ b)ǿ4M"7b/I&S&u*fᎁ]tSP0e)n(n:6*4X0Ω޿o_G>1ka]o έԊM4.p( "2i 9 97gNH}4MsPιUsv؄Jn.&Q ʗ{Rp dNzV EQ O8}le<]~){:MQAE`D4>0!T֯J40_sdt=0~oAqpH$ CMPNe@l+Åufn7aJ兾 ~".ưlH98MX'/~/|}V\P ؜?ӟ ݔ,oI_XDX^o>zW_6amccp,d H$ ̤8]l+6:\ݔ`*5*n%|bo/B y-Cs _~!R^>}ə`V֧ȑc,W ! ]7o LYSg%T=ɄtV.DmL͝ B;B$JA9lKWr2䊓ݔe%Cɑ*ez&_^VTM6[sTtJ p@IA,oES7B%}79*cӊ{)Vj^P9|=M+f1syܫL,G3rd_3s&grlu&. >ՄZteø63JGqWAG Aı(y'fR&fZe~,׫ ;AdC|!8*wfdO0}y77wrPz+2./gr&Ib]A|B/֕ <%uI wvHV΄o'e.fP2xE뿈nw{;1~~GF}"~{ {1=.լ:81 ϣt\GAA%AqhOBw nJ_-$e2[PYUجO9Mi)]$ASNa ݔsw)TΧZWzڳ,G.h'ontlv_fe.#grLoʼsW条HC+Rb-I +ҵe:qgsS]@pet&u=iH[-hUl'Ws{Q5%5!:z݃0N]lrSN&rS!zrckbU!rQ6$ ( c .R XԅYTZ1[w"20'fjmZ))vT.T eԜs'M#9tG%\ ss osyM9pkI y(#P ENfQ|}zϙx1OY_{W/+`9^L'Pi7pw {w|G`lt3m[7;Dx\ޕ=YC= rOAG Aıc;$TܔVocDpIVkN /#~n*@Eʾ{7e8oٷDcCwDl͹h Q=N/mwRziq2r&g^R('PGC'u:`4 )e-mج=Kd I랄%\&HLT6dG ys 1q6L9pt9tEgu \J π,NHF` (C'L=ɯ y< $ k#k5`º'/Nh[dalnnC~< 0n"S5,b lr즲ڢJyw|FLH{>ePI1vS2xGJ B%Z,9q|Yny)JJƑ ;*uۧ|'?Y\|^r&gwHz+`FiDasQvXt a+IP\'N~Gvv~W/ZNkBn/N2s0^-8E>X?s+Uwc#p1xD3E}S v\+2gE? *& r@A\OwNt}y  5^Bܙ J81`,oĂˏ@kJ816V/L ЪeEJc `Sф}}A4Vۗ5λagijwdcMZGf'ғ_=S@{tak}nla~03Wn@h٧@,Q~WOmKgp}a8jy7¹'4@xgXp[0`}1A|q@SLU nTz~s02.AoZCF2M>6+S  AċxP-+9Sz]mʞ2qyv\W:2)a3'/8.O);e"bkau^Gev4GO)7֜G:^8gҗs?9s1)$@)C`߅a׃0NLtQ'L`>ِ7V;+urx#VŠeO U1m  :_.24:!}TYb6SmMR#׆Gye6{, 8$PA Ok^p+ү[nR,BϧirY+O˾*˒u P?ذP)L_!bV^=xÖfss\L΂e8gsQ= ݞˢgЧVh&/t:Rpp@J00 Wc|: 9 W-Dh HGCƈJ~$ut;up"OO_!bV#Ͻl:Jf7~˹1ty F{HGC MaE9}Yas`9 A٧@,gu)I #mto<^ƍ<+]3qp&li7wݜKy6F1All`lo! x.l"/oHu PiPݎkڥǠyO)[r ̔mʞ$ %$PA="dX ~¤\h ``,ʄ4.{.Tr|JuY gq>*ͧBcGv6e|ʹDJ{adL-ci]=8(xr&!sX}x(G0j쭢Pŕ{>)v18`R ØuG+\J|̺-^8?{4.wR&IF+SW$I] C`rW^) ~v1!p*^Gu>΢tǻҚ?Y5W(Rn YB%AqZ= 0 BVoYƹ9g!wf>^ LJ}ئ&x Rz7%(0q<{;H#L(FC;3\Y^:B:GauQo-4cq&% % b {4(>.ty7z 9-mnmd:B 7uxEƛFzPY*UZQO82WyCl9޷һ]Sݘs.rϱ1 xvP%AqCQΤ+n{eNeeQ`vaKu%=|֕cxq| "Oij9qn"Sݔ 'FvgMf۟4ˠWlLL g>Ս-pc,zsQ+r7}W)}W("sS2â9&ǵ.e12fs!A|JcKf})}pl+> +7ވk<TWxvkwέ/C9wZ) *N6Iȇ>)7qfu,C1@ {}3FuO $ r`N., o4 k Oq|Pq:X:z}8*M׉e /2ֳLܔmɫNk {  J X-qgW/SZw#ehgHc6!-esUҖG`+ |e%(kRl.|JuL6H>Be]Je <x82 1{Nݿ k˼>&zZ]Ùu 2[^@Cj"Sw{B8L86W\LGH/UIϚ}\9&p[dX]3߁|Nj~SϞl*׆ T>?kɯ}^a?uaGyz=LA@IA,zbtQؒ8̧d(M$x2LUm%,Bec7 ʲAˌJcMi*Ě:)R–}2rCi][l4Mٻx!r.7euO!}/W<8};O1Fv'> 6}Nº'F&`"I$cwO)nqXvݾÏqpݻ='gS:'H DnJ8Qmt`v w 6ftUJA<{H$ ?_7+e` B&V3̎ w!+l} H/ʸN4ղo1P+1 *"3WWsDeߥX}+.{/2N ݔ^>^[7IwdS s.V{_zxKx{?Yh' W>{wC IÝ'yxMt7pfm,E@w}3 { 4a2$gNc!?14ٛnƥ-${3Yo7eOx2|S_ 9ܓ)u4dqT])VQ'9IA$PAwnߩfPքʘ1$PEQɧ J$͸q9V4gBmwP,}w0nFu}o+'w/ t)+&Z!#4*"#c U7PuT&g Po0*5o⭷k <ǎLp3r"尋GMl_c! P:x|S!boltٓ[%\_1ޝJ. sO"ϑ(1m{^NIϯ>7n粼-_f'cOYp'#7pNVD"ۏ\DY:p, Ŵ  86Lo 6˼;SZQ\H@cצ[i :uGÜ!VI*%sfiKY80_P9ٌ&mR L4JNr ^ UNs1MN]~:/->KOpUh,Zv%uŹː.T# {tw]]cn%˺& f`{R plF`.>J}4͍nnvI*xFw8WwoMkVԖ=Sm \APmM/;( 8 $PANJۉJ''3)ksΡ P)bWK(CNT,˾Җ~kgOu܌ؠQM7+;{*ό!{M)f >ˆmH 4Pϙ a͟@90zp~fOc B' NO&z8s,Yqa/_F/ AcIǺ'(Ka˺9GB1҅ TG8d"!eD&03})Z5.ί!&hw펗7 Sܔ/ W4$@II ! 86D6kŨʺB%]CX7v4eGg2.P %sf*Ḣo;b8^_mJ{ 4j['v ƕFiO# 7Ն9665Y]"&(gْӸ_ޓx>h*`<&.o66nA, 86} x6MdJe=LǕ/300$RB9]0 "rnH%F/L6c"e(Ѯ4a)* =>DG&;ò[JsRBJxJR^@ :QsN=V;]+P ܓe`^k4`LQ1Nٹ;AHH)14E:zq:C)}4:]0h*&YRd6DYV_._o^qn#}hTDA|@IA\3f\5@\[UyތڸݦtS2fe!uBz͉iJێánM/Y^'0@\h޾۟xAmq%-nJ1M}!urΩ-[P)z ߹9w9w1d[ | FQ0=!_2/\ O>wA٧CJ-N:`R@3=8 = 5X]+_y" PmQx!IOS>Wl<|"/Z5[êeҲYݢ޹˓Q]CI bi̲QAđcǗLd`5sc+ډS)8_r஼K q#SD1,'hYf_-IDPtȻl Z5OBV"σU'?! ?ſ/bueaf|o;G?ǣ;c787&Ohvs^H[ͭ+sL(] `BB$ @Ky:F6RJds)o]|u+. d b\}LV_cz]G{n7` A2!%Aqlf3BsF`rQ t5S2L}Zb"!ts&+,^ly|J5xieιŘ- F+ilm"Y]1΢g UQSdSVc_'.;n}r-^43ݔv޹K'$-Iʻ B%Aql1vf.RkmȧEÕiFcB[no0Hu)M،这3w"͓J+ җ|{ҸV!I4zX!媹O+3>)Ё]HHnKGa4pijÿ).O#pß#[cc _zv(!)t~C)Oك{@J0!m?ƅ-:mok wqd8@6 H.=D>3q}u>QQsd>%/WMGq HGﶬJ'+ְ 0CLg}ܓAro жNl,2i}%q稱jyw,uʾeI8ݻ12Iz(s};‹O?C8/roqYu__r]q%$}`C;C>W_ʊI {ST}B޳%ܫk`Is.VB{9)82A";H.rd~:G` WWP˾}>͍gI- ˛hr_7PA7^7dO>;*\ 7Lu$ Aıa3(mY)(z̧&{e$^A dN䌇1P=/F6SJ!C>qmqr7"?=6 H V\U1EVP6S DCRzde/2#TV7eJ)y.nv ʟ<4,~+7gnG8u*Hه!} ÏGG)\=}_5+>;'eqܲOF]iw w:!cs610ܺf 0 ';Ht|8@>Bpb0Rt67rD>;gWʧٓ:m"e! -5uھV|ywO4ݓ?OA*& ۗE`eBysh p\ppơCA5 v?Y}W):h,IPE%20231O W]ɧ F?̧anrȌ1PZ9ʾX s؆o@eh\SS&׀`O`P\[A}Z/%ك`U:#8)p2q!'{R l4D6b߇)r@4ERhʧsSv [E\\!Q}>Ұ ɘ9ŦI' Aı|{oh;'9` gL[⬔M xO@K>%H cSK*=&|Sz1SJ!\d)tj VL yۅu56mϧ['JنC5r>59Y ?{?g?t8coڹ 1TsڙH.&>s|eKEt4-f G¥ 4c +LsO"GPyUO\yK-^[qj Be;n.Dt`U0VrOI d@%Aq,[Rs.Eh<-=,1@팁`[5iENTJuuFB%B6ޝEQČRV㜕&lܨ۷ߟ? ;Nukjs\1p!S3Ȭ^u7qu<f3FP9)R2X v*Kù E;k>$_;,ܻӕU|o"?wN|(>>gy'FB͍nnvWPYd)d*9Mlʛ/0}lh*zg/6O# |tܓAIJ X@q {kXQάhJ`WEl)KG)t+UGP]IwFzSc,TZٷr7{Ad21YRo{®cu;Q,'/˾PأxR6:W3xjrb 9~ yg m̀hkP<ǹp9$$C#md:5p;@ [t4RH+< i•vI0(v'I!$hLĊ1n3IٕŵeZMqO )6?5v_Pr⑉$ N$PACh.c9Ͽ7̭̘ۆRl:|97L%2;eᬌrbeȧ4;1@;ӏeJ]vc\z7*"# )+J' ].;h>eY ~e5\Ӫ5grb'O6_`ӟŧOg)~a8[E+Za;:}ūwp":|<\O|cˉd<Rvl~VPƺ'rlݺJx-p`e/"e߆z_Q&T׽3 3ڝ $Aq 8:nǮBHfsBNSoW͘Z)0.h4 c6fScKX}ôSj7.C#+Vϧ;%6'J_m˾j5`,TzQ0Χ\|z7glh2,ʾøkPi2l7:?1u~|Ͽ _ǯ3c8ط3B*"Kqeܸpwӷsw}j/{l} k;wCH DtZC8ЅݓA>"#,CԩJ[ŵ??pPYsSW㋷4lXmN\9sɼ.'  AıV<,Mek/*Υ@PAhNa^|Ja9+eߥxXϧ`0rF{5·ʾaJh(_9ٔO?{$Yvι|V?g1O!Ҥ$lrHٲB{aG+Z9m!Exܒ BZ#Ҁ6 &0GU#y{ofe֣]=Uu7S 4J)=G *f@ZVl@6陌GWUĹkn?VYx'E}(~7;̖K=j6ʺf(6}kDAG=ivl8&|xpvޥZ.(@oL8(iܓ2(6o$֦!hL;ݓQ3x&\cF{E^vP Nüt*`LR;9 I!(m᤭tNFaE')R 4y.[(;v/C *n/r~#Z;دm}K:9 Tt_r Y {E^^^^^qC'܍yozҁ8KC3}.DZك bVuo@54*J]5 h GXSvצط{BtB+SVu8# pv,*+6@ r|BٜOnڗr>ʋ~=g[/ŖԊV,eAYdd9W_y+7^Wn1!=dSWF;ĻE楐ʖwCq` c4%(Buez'km( ¸ |>%_&G C~j*6LpY4ko^~OrKmr7*h枴`Tot,zQׅ nB콹=.-G-4UU~J żESƝO֥:7ž543\}[(0S+k.Vݔ݉bu]j&혔Mx<T[mݔOwP^~|Gr6aRْb!b8Dz8SCDDq)qH*VTJQkA1oBDaLܓAH]*v6?[L. ~ƾ7lknMn n3'8OӭcY /!̂XEEǩd+Y\}DT)WgsXB͵E )a&7nKhnS5Ch uҸ$OiSgJ2"%LϬbȍLr; iquy_)?9~usΏY̧(;[EYPK }G,&ع ^h{8j8J%1u` ijz' I4$) НaFv" NY˹qPgHaDb>ysx~G?d2BiQr>!ϐU| T #{#djݓadh;'>i.IEYWRTJ~Y3;"람e@>/dCa?5F;S'@M'Ǿ.5y@eg{z핕c jdswm'˻'^dy@u!2oiz-ƾaE'ք Hb٭PBYgc' keb)U`ppخ s[?\ Rp~J7W퍄rl󜯂ݺ) )2l}S?esҝ7:DzJ5wc g<ڽO>J*sj리%l耫ܼM^ ;1W/EAB'TEN!f_6@ I092׷S#;qLH{RJI]VԵ+ʺVq. $8Ug !3[5eow*TwTӏڛAH (P{\5wKl"ݧ7wOzyyyybd;nun1wY[;bxJ\z!P¡EDh@aQo4 ݮaT U Hk0qC?"ط}Z4v)$abߴ$m@@J v kw6 ?^]Cd>㳯шdBUPPm;(sCCCFW4?GLgS"*`0D.pӰK@l ƈ~ !c'IJ7 M{AVk aQ$ I"ł|1cyx. y?OMz=YAo1;gt:Ýƽ>W3q`Ae\P*P>U#YUȲx&㟥D "HR  #ACDw2"cG7GBCQUEܓaDl2ʍuG{)yj*ܾ A&iud7}ܟ⸛r`zsùz^E>2M} Btc7J #n,@+1co\G٦ЦFkTP2poѡtMۢ;ىi7m*0guDXtnKtR@8~J:kmAjjUv2l홸t#umDkj">*iR9<8గƍWyu8ؽc uAQ?9uabblt8k0>c׮U& G ܀*Au Efe]`(Vea+T`A9a~gCdHnQL C8FeYREUݭ< O$MSNz\Nnknʶlcwm;jĊurvS{I$ g=u9r+dc۠6C :g~6v:9u*FH3IqJ6Sj4Ժu]H7ЦH!g;@\tifsS\EUU 4 iuu>An(2qC]g,&dZ]N^l+Y= dӭɿ\xyyyyyx´%ץpL 4B`qCE;R n1r3FɆ V)8eX=rݡIOi}R?%JynYk ilquMyA庛ڗu%b̘!;o3~Ga1RL!̟$A)" q?iVn_s^N4IeO)hgOַuYCȀ 0pV)i[]k7guMmg;A)\.(wy~UU\\W#O2{@\R9 hURS=UW]!J{QLE!WC*-eweUGVwq4ڀIףf{CD h؟ؾawߑ 0-iyI!7PҞOW䀺7@&=DCDIj`0?e]Z0p2III/YLB')UX(Co ͷt;-kÙn޻yn^o"3oP!nJwzƖsO=urrHȣ NHqVѺ X*hJC(etUU!i;.ط*i@aZ8'u8LЊ(46.[ьn(lcbtPj)nUU6 , tV =֚cr-Hɧž{Y[AD 0' ElwGeCR uRϦI, IIo@}$2$ Cd }tRUDd~BeTk3 ". bN5Lv0pp8&duIVeN^J7]'8$Qd{'Yꕋ?c)(ˢ ,x<W8'r( 62y R-nϗ{ćư_sO|r8U=uׅIyUĤ;P,ez O1ӹBWfglZ)ch{KGVc e0PQ>9tOiYtX?%JˁIi3ƾ%x*cF 3,g2]mo?v,Sw_zI8#^x8&=: ::ht`ʤ= +2AE1U!A"0N^hp8JIYVUɲ+'km|A1i#bd~`r:!L"m}]zӻ$^6qSv:0@Ey;훼3H~ p·{Rtp͞3ץ&J--~J@7H{9K)P΢Mi $B%FOn:0y;gM?ej4+ts 2ۉᵪdnZYYcƀOFUNh{ T:|vK] O ԵB)| if[cRjaz+؂JqF)Mq+kI]7%NK~~v^~_i`>ENP*_B #1̶0uXfIsJ6\ Kywįm:#BIeSě+0rpOqBDqNG;F; # kf,)q1QDqJ(%u2%?G%՝=~*|:V^V@嚛^87tZbJWUSޔ?o`GuDһ'.<0I! l2M9q$:}kRF FPaZf SN3elįo6S֠l%Եqv!*)`:C)<ºV&^mzcQhѤWgx۵)Xr ܲn/y@uAo@u&zvGrl^.EOϞ6uX'%AIh)BJ-$Haowu~;T U 2`N80Wab0DmdđC;WvDŽQD]U<[ȖdyI!$Q ib'v]G,zbý[@~JڷOl0!ܩfdp9e/E*m<̵_縏׋%(.NR"ݶ"*ᜊD6mmc B őH5.ui6 v]jM(F}wu0Awok:%8*[oN I w_e8!Re<[̗dyNQW a1i##J Ӄ]{Գ)pRNpr:k2M$7/켞c^ E/9_ ?~jeWץ۸#|C[wT6q#bZe܎BZ@nm>^žO ]̻OiRkD *Y P<<2`r0"PԨ"GMPC| Y\BY@yXd7:+eW^zN[dFg>7_C G !$5qW[8GZ)h,JuQHŤqJňb92;eG5)2wbu9 oʍnJJܼECSr 9"Ea;!+( [xx;|.:}to~l79Cx'O!c 'uNw2D1Zkd-Yd ْ$AIs{(H!^8E]u wSmn;TvA{6"quOnҷU>I////APzyyyy]p}\n#E ~JMmccbZ fE :@KSM?RvIT^((jS6?-4N#i1m: V5KVz2MVN?%vF6ӃfIRw)ӲVAgv*-< H| hzumuno6 V拯//y}.<2w7\0la>l Zth\|P6@Čbs887[8301;W2 ȊEd\ȖeIIiD G=8<@jM<^*5&o^AwS7%4o2 jWn}{abߧSJ////BPzyyyy]@HNvۻ@Rb\FZ&nX#@vO: J(*v:'mܝ˵IT$m-B"Qf @!aan>Sj;xGNvk綴I~0 {Eލ}oJ*!q@?'WgY括7|~G|sxc+tq_[f*[7ʂj6 N. :-Ձ9\ew8A^pC>*N,4^p4fcd"E"Ϙ[礃 P'SB4E`z}bJ+~_4vF8xP:ЦK*:l`妴Dv@'OI////FPzyyyy]l IDAT 1Bf'pRE;ܹih&ycX ovR@h-IF.)hSaz&&:4@Ch m61v2iM_ Pҙ?޸*tÿ]?K-̾SpiMڑ=- >,rdYvPD&OMLZjWd~JMw)Eue8E4S(-B6χOť~J['{R@"vbNG|4Z0RsT n'?88y8A<ܤg&uE}h :]89f䜓iĺKf9łP"^I-3{bz>%.5TZSMR WN|~ʍ{O}y5;;|ݻzJn/!`s D`9n&N*nM5llbzXxR)~)n[e.ss 4uR"UG7l"ݩ&Oi = ;f};+s'\b\4׿*(tkoG ~Ηr=mUO+}u)rΓT=D%Xc¤G _x؁erN^dTU'Ð$NH0%,RO_8 ( $T;r5ME]KX;is}{݀ G$y͚R͟|'`2o////%(.T8idJnI@Ԩ8ibnA(:ĔsD*;7HGY4g'qK4QR~ʺln%:E;x?e`- 3' 97S6|d6nBmTGhecLjҺ0;߯6hǵ~U=[ivO(zYEc?|;w?ӒZ. TC I;ɴI7GJ`̘-f,s2)aD)i,&Lv3jr ĥulp s8W?طvwluhڻrs?`w *vv4[stsGzPuiׅJhANc0m@ڹ !dF]$AWRʕ~J@Z:xZVfaˠj(3*Yf'tײңȡu{v)Ei*;k v7 +mO)7?Ւ΢,;ݙ[c߿S3ei^I>U?IRْpWug03ޱ$A8'˅9iuQBDŽ2D9=0pR BPAwI |nNi _y}-7~\é:Bctc^^^^^BPzyyyy]h ,N컻X{5s$:(ZIwU)~&-i)(pūj'Ya`i0i5hm6U[y8s!rK?e01fORc`.J?謡)`n';ÄN}?.r8ey'?+"u]T?2\CM8II{}1uKI^,p2ϩ y#' "$!B!Enbݏ0ۻOytI[!ŵ]=3P P6wΗa#J{'ۢ)ݓL$| F}?׋.(.TK? p֍}1RkjkQ:6c.Bjlrj)i(:][~W s4H2046[mε ӓy~Jqzj.s;.N駤Tv)E'VF'Wc4)IA_Eҳ;}V~gVyF1qNN]87ӺG1qm"[0X,dyɠ* ܽt>ud _NlϯH6o Hwm|t'k;N:}&yrgGط +(.TB6nižpxjt7֚@ [0nR ݗ@+ƾ1_f( |ٍYZ6>qH5~JլUU;B^ͦ}6TXȩ־7`ݔ12O(zիƒu*)38i&up2Iz}0ll>gt}}DaD'$qBDN'?G '+rc}mBuεs'7uE).5a{,&xZ4~J////]Pzyyyy]znʬˮunMM)fp1PpPUA+3uh#-X { #l?h)M"\u:45RZsB?%:C|Hm@Y, /ݗl)'3S>|_緞e<5SQ! Lߤ 2I(89qҐ9bb, Z#eHEQjI\2?gwN;K7[kmǍ:ylo>~6ʽfE8ƾ}?׋"(.TFPb~~.ƾњJ)dgpgFhVh~^>֡q-Ôajkl& jFdl)1nG)/ԙ;-`tPT2nJko\ؔlhd ,#\oFO<~_{@6?:o})DOY taI G NF1fZrb`-)˂Z&mIZdprʣ'ǣK 'K>q*qx t|(yhq={r].)^$y@urM *)ݱLg!H!\~lTKV7FO Mؙf:;)Q@fDp)NtfSj-RkSY("NocJ?^4O@t9mQSE Χs'~:K?Z.L$)A% Iڧgu#z>ASiEV, 3;[RV% $ #(!b! &cʣ$pn}F}u4w+_)}ׅ{gѫ 4҉}wskM`Xpq.(И''Ư0uDKS+! xJiư]qN8W%$4PRY(0su aS.KR&fq"Èsr2_gfJ8aLQD4blɣl礄K'+!7a֡y O:n2_;$'WQ9֌fj)]Szyyyy=ky@u{p[!Ealiް0se)hd A5)bv]@Ea:.&-{|@٘}KOFUe hS5Rcn(;a>`KR NHTu)ݧyUPy<]9Ѥ8UsW+?K0tG$$!rp߷prH? YU̗yN])$NH( "O2ٻ=ɡ;N*qM6~P/ܔ݋V:7ox;!QWp/,om`~vv,`f!ٍUw*l,/0r@sO5 T4fxE W:*AƤFw݈ZXxOZVdOW)0I;ͻOic3\+To8B6j>B]wBsS.cl||`d~g7D0F(%J$>~o@? c4,dgekc~84NQ Gg{jr'N[=.Ouu)h*KisLJۍ&!Czw({c7ޢ,llt:aBA`>_Iw)Mdt]v)vf)ratnQ4A Zl)ZR!UB=}/6Pn<|ǹOU@olb)a#c$!%ăA /K|b$32GզzAJi&u i!Tt}&Y=^8D5yzU}onMrBEtVܓNS@{=M;;Ǿ,>7%47 0ӭ7,bք#zo͏u#Z *ZȈ6j!\LLr5TڀB݉sw9NKMm:%]| j iXcSs:x)E>':ul3?pz}dg)a I# { aBSiMQ,%Dk1uNFAJܻ={/<\Ngr^yi冧6]wf7gs,$=4%'{=ސA@'NRd$UF^jYɺPZ#@ʀ$H$J]dC&-T)$ ?AfK9(E,TZtAv&۷ DM3VE~^qΫ>Wb[so////'^^^^^Eo cUPݒ]\v)&ag܃+d~j`IJ)i D T SjjvOҹ,>Sl[OES6 [i˲OZ]S ľ6n;, k6@zہʍFwO>Mu~y_ ]~Ft: L{ͤ(NMduM^dҝUY $b8%""!G~B!j>0Oʵ8AIgh $w쁞&|FM] 6-N='|y|6)WPzyyyy=?/6~έ~xCoQ Wfz&mF;dҥ3$56{kHFaQ ՖaPfmqJYiaQ0;(y5)ƾ*M ]ߦ2݋\J\O)Mՠ{CѱRZ bgP~=ݷFȧL:DnnB">.9uʀ =- C\,-AUmgyv$=uMY7')ie9iAJFeRG("3(B*cFkٸr+o0[`psҍLpi+ul}aՁv]߈hDaSoZ7k6{7~J////7+(DO2k M:)nVPzyyyyvrWm0Vbv!^>Ë0c' 5ɖfn !{zSpR4PO)FczD oa%][u(Bv)1(tO{w|sžoro}D+!$>yҸ$@00 È8N4͈ A)QJ yuM]W*\*47LS-߾,oE, !͚a85&)uNYNq #Jsr6e:Q3BjETiNY %:<Ցb|k/y2̦`0 )Nq҂J ;*{R#@Dbb7غܔݽ_,^Nfݔ^^^^^;J////P:w:+Ek*!8vlڵ&XivwǾMTM9?A{{?qJNߖ`։)m*M+D)fj!ݼAmi~wfb;_9ާ\_7p2M ;:o X^feP $"8#Kш(L "Q:2j:eVPu  2$'"$%j6c~kY͊G [-ȯ̑z܋}{J6u`j[+ oӻ32.|a}nvnہg-9{V~J/////J////C&w7|U08[>Et®ƾ{RR)"tNΦF)8i' w)ֶ?Q@2Rg%%LK${2չ_E`\F倫B.휓yl&m]w\T:keTfB3=Kw*νfd뗌"IdYJg1MH,6(K!b:-N ɚ*EURך2, 1I)E3\J> A p>|q CD!Qydِ8 xMNLLSʲ̀ H<d8!LZՋl^lmG0ڀ䓷rQ?NrS^OnΟm^$orx>";LH7tܓ΁ۣݻɁJ^^^^^NPzyyyyw߀/ro^ysb`e!tiRH=6@BO)lS6o@:+Os[{ezޚb">*{kP@~ڸ9Z#]\?esd,pw$胈\ V]E'wҝ왼pSر_2 4b0ɲ$0 B3m0+Yd2PJSRU4Piu[fdAp+Z+S0q0!RFAH%$YF ـ(qpjfEx:a20MRDaDـݔa4prPzD Wt\sjׁJkXO8UMX~Ux)6| ءv ;_N )͐T$4ɮQ:*5Sj?mLzlS(n" ThդǾ:Jk3siSIIqwZJ 0=yewO;xU`i)"I"ieYE!I"B1u,tL RQb6TL\`هium{i- O1D6@Q)CD Ia>i> $bZ̘4prFUW},C8&K2'$6ٸne ʢo=e2#|~_>r~ʛ}kboξ\N^s%]N?xddW)Ϟ>uJ////'|L醋FB4kvPٽ i7"lk1[ߩV[@)t qNƹ]]:be%@k͔(%"" `:vNL0+&t) Xצc~aE)x K4CA! Z98|H D,J)b¬p! yMq2W/2]N=2:=2r]OT?} nr=`vmZO}^^^^^w\gΜ_"?=>fqQmIIvdSJiܓڂ0lωew-駤9nbVOiM3En?]3OROٸ/FH ]vPj4ZȶRon`WվhѸ&nv. NC'~Otxi#aE (366*F!LD|yY3ޞ}ٍ|=($(E"1"i6 IsdEȬTUɬ0-Ŕ(˳A: cmV~[W/1[_EMƜWn]O)eY=zQL6X0ۭu/ sr|gľ}?/(G?Q>?y˗6lOzv iEvjF Mtq&lкu)t.J"(e磛nZk4^?_]:OٝFkt⦎Ǿҙ\? QM YYY!Ϗ!eFUI&d2 Wn 48vl}|OpqOqB%ĉ&*%Qe9i"E(l¬R3뚄0Ø,M94'"R[מ瑍sz.f<\=ݹkb,DlFA6w-Xn_|ii l:h꥗&)~y@uG=xx bҁbTv eq {w>nt6Gk {S*طhbm?jΝ~JMI (L;&MGއ0 LwӼm?%J~1āJ;5CwQZ}̽?ލ}k}]ӏS!)Fxck׮Pc}m>Ok?fDŽG<^Gx8?~s)X ML;I8 ˆ:PT )TUҊ@Z8%di0Ӕ$U}gZCϯǓU>xwnK.}3rLݻ=eVOIIc/*Hv|e, ɄJ&4if]ـ(IaHJS˒YQ4pR"EHdi ɓHb/ǦB㠮xOF)*d;NЙn2c;׳Eo6hl{ݟFo{y{ǫ׍kcCկ~J///YPzyyyyIoNF@NF*ۡ/6MFxsO)Z*S6ONMc35ݣX68-tgNMDQ D7ga?#F+5RmbsӼ*) {Nn\?{q8ALY={3qC;u9$a20 Sy+;}|` N L$IF$YNQ A@YUT )/$( I Is(Fj(V^-kߢ_5UeL-#|*]Oi{ok?eo%0YZ9aQ[)_zɟzyyyuOr////[ON3vis5jmߢ|Sow-mf뢷~K@EǂٻúۓQuCDܶ9eOvqpe(M%6SjeQJŠr{?%ͱž ^< =ѫ~n<{}0s.adUЅKkÈw?̹m<0p2I Ҕ N䘬F'4IӜ8MQbƴQ̦eA]D1$qN sP&)It q|Lw B2u0BJoMobSmY/M>ywvS@{|(ڥwY3K}ک |J////7LG8·H6NJ&+m?B Ժ=Ol9ynA]4RXG/v}w){ocߝ|?n^ThewSv@JZu@5 Àj)GgV+4dIs2ldI!%"Ð F@ gdTLiJA*IdM$IjdFq 2EU2ME1+R2@K K34'%Rk&l^LuKgp{q˪\ҴuRU~_=zo8~0w7>}5Ob߾hJ////֍Lw:Ʒ.Zv'nܩN=haҹ@>4δosE}zV{w4ov}7Q!4RbJf8yXi)-@e:=k;nw-q7lkAs2 # D!B98Fa1:„4MIw#7(F ( ̌{2J2(BIIŮY13pQ['q~HF1B f[k_erKhm%]*ݱy7eUxwg8S&|4cuͲO1K+'vߧݶ5ܨyBz^^&)Mfz&z|f$(ƁJީc64,Ѐ.ta]km\]<.i\0*xaim[4F~&m_ط&v7.-r5M7 *∭jV[w{0gdyQ q .dEaBň8%$#M_}&QBfN)MIVM)i$$ BtU2m2ZƵK^\qBstjahRm`pžb?.\~+ڈDׁ7oONط:ZzzyyyyݐL~t2 :1L%;Lp?F \* l˴GYvP"3oƟwnžֶ;qYُ} 眜林Ibڸ/o70GϲH%J=P),Eeɧ/ҙǹ3 D$QwOJ'#a S,'SȀ$MIZռ?WG$iNfm[)ʪbjdQUm#ݒ0HN D3Z IDATkl^a%F׮P6o7M]CQEp,Tܟe0;rSNF7;JmQvpig8YjTUTZ´>yw&,0ȁJvǾ/6ǹ~閂I׸y&f#lRXhB>dq.nǽ@!-l_Uӆ[\9p霔zW9*tvvnF7` -WiM,8qӋot•!5@L.W?W/Cĉ%xݩ&- J0A24AN8%ˇ6C~\NVٸm$!c0n7idYԵ4 4uɌ4JN]gs W.1Y?WLB^yE2(e> %IZP天9&/Лd?%@])alYfCl* RP*e~ӑ暴5O< r`}]4|=jޤ.]u^^^^YW|^^^^^VLg}u7V[?Djݖ9!a]H1FhEwG9*EkimN bs L4vOsk.l`hO$GAط$-8bz%L6ϕeo{;ߑT0Ѯڨfyx|ߍu7S:Py30íEgj:DkGǹ?O}uE66mGbBQ)Ş@I Dr~ʎ݉&ۭ(@HSvbVt4LƂMeOiz(5,]\Bƕ UJ#R+:1/V_96HRFHƾo2MͺLmd๚,m.|!:˫ѝK<}}@bMk)ou41m )mD{x aԉuBJpDQtq,YddIR5TL)uC(*-YeQP3r6 aH'fJwq!TM1fto]_ V.> ;Be?r# *A/ Nsq8 M8s";\$]GPۈRs8H3?8ɹiddDp2h;'("XE88<#Ks,'I fp)Hf4Bɂ뒪Rq;;ӌ,NdJM6_aE n.-z^]~%5=/baE1VlL;8-P^{"RľWV4>[طJ///{\3{2? Bvu6o/3qw95F6o5ddTt{;)O8)Ecm-Uv)}wܩ)w\8(C*3 r4 7j5RlbsONg+M]TVZqa+ɘu6]o 4=pEQ֑ (f,ߟkx7IYP5Ɔ_m)]Szyyy~y@uigܻ靧Ok(!Jt࣍}cċ;80snNz")@ie!({J A *],ŻK6mnζ:[Zvb R8Ri4yAPY|3/s"3&4 2@7p2N`4<gP i3ERSY=c<1,Q3EmJ)b#DRʂ[Ȯx}f#?-Gg~J޷ki_Z3!'fOg^^^^w  !ImϤi5(՘)ʄtƨQfeAUWȺfRKʭa"^{nkN3=@\ $ 0k]Sި%s4[J䅒.3۫~O~??{?=Iy>VfHbiN7Lb1lbբ49Ɯj3ZGjTq#ط]L) R~Ƽ{gڂn?c΅LlOEы6P_fP~X98ζo'ISV؂I'E8$QJ&di`0d!a5ӕI(bfd1̈́0&ҭkMDk(Qm+X/>ljb]jKw`o2 [Hi^?q?ƫ?:]ZnYo'-S>̈g…w]㒗N:=/|, Q) a"B;`^|k1~}4a!Lwpgoo =)5 U !V:M.ovj}-ҹ&ž\\ryRPxǏsnmwZLrлsddgйɈ8I4a',GA5J3)g)eY"j uBU1YSWLJu0xyx[lfl8&m4N #R&woyy7+zݵؐ|Sx-yf???.k^Ggr/K#+Ctkz7Aon)۸uhMcR5>^[(lgc'mAhF-ԍiS;#QcV˲yu6b߲OŌfq~ӃnMsSj>c[[# BVo|˷MJގTJH,/>w>,+$h:'sM莓$C%!iHRlf̦ QML7*PJ!Z Z!U^xv2M[ #HMTw.N0ykߣhmz'q?9>gxᒇ^o///[ (2uGLvGkk$aht )܎;S6HO)0R*Gi& tS"6BHmjH.lx~?^[Q`c)%Z:>o.O@ړ锍,nvUJO"+Hywg^}5$+66 +K6Vepn|vR%ќs2"4#NR,g8hdƜK (b:2M N]LЪkjUꚙ 1Q꜊XԈ0A(u ct<;YfM"`eQܾݒr X:ݸ3 :#} …=T4gyP&]3g/@MvSlVGOٸ ;4u$&}#ڸ9ƾSvAeC9,7g~JunPO壚uGe]^8~)J]=tr0PWVı&Sm!dҤkXY1˵6`3A͓|Տ,hK5Ce%|@=d]flt:mܓEQBIE]WMҚ~SFbD̈I}TPJ0ٯ?GL.-:( "Mu}41axwjGb*~]HC}{yyy݄<:⚏s/]&>QLm]Һ&^Ȼlݖ籝ݝ;PNZk]طsTOmg~~eRZ\@HnO)4Jigi)M=S:8 P;PC 0trALJMcBΟXlfb7eѥsC_`~k\PqQ2ӌ$ YLc41Ը&2=ued{9%.@Z1'GKp℉wad TE7[)ktQGs ?鵇|?J///#8'>ݡ;"Z 6mC.lc;ľSZ'rw}wy-01q:cy)0E){eX7i>5J݁ͧCOi;SjQ@ݕ8fɥA^6j~C*#c*ҥR 4 f]0 8)c(a8\ .g~H40.pLMפҚ(LL&1ٔ(S &U jw06Cb=MFk]닔:9( mn㻲bܓf Y&cMRkySU0{L:mzzv{7.̙3 9Zf4:T<>ǻnZMAס^^^^\?{?F@E-nbZ(d':$[Ǥ Rž7%J+CmG8`ط3HSbR:7e9OIotX):]ӂL@;P}v;,xygsxhS>^KgaRJBSv!*e`yy0 8YWdh1I }GA3)+\WP}[{9*p:kα:"˛egQj .7sӝ})}<*ZDCaaH)R|+#'tb܊65Jtx5RL6nIIqDƤiDg,u&ҝ91Aڈg/q%@3yW}ƻ~WGwP:_b{yykCr|կJ-tA9hq]ڮ;v]RMIʺ'Hә؍vlK!"BCN v2xF;h>HGAcwA(:\Lz[q>^SԪ;S=wW, Pi)vzOW [[S8{}k{ؘqJĜڸ D$P)& 5Q7zWxN/sZ7ny-Bc@tdJ%$I8G bR,[byKK+Wx]vLպAIss=nR7[_3DQmDHR#D tN Fŕ-&]kԚA3)K܌VM4[# IYJk\h&m- t"- Bidž mQpOGRpx4[0Hjݞob$5J{ގ'o{;*\k IAUtǎŽO RS$V B;dMVH|\c2ٻ8 @&Pdd֎EudYIjx񞤎#97MҳOQvmm&ȶdH6K D2E <3\03 2I||b>Ӫ?\d`22#%My ISq**,,uf5>OԁwibeOz]/o೫׋=CljjJ3335??Ͽ# %*eTtJXU;Y+ kq[u)ͨ]tw01Y=;y0ոSa~JI =Kշֻ 5/4^W1f1662Z\FE׽~?J~]Οs{|ؘ|T.goS?YwxKW'ѰzdXAr: i~U{u5>Y=4 e2NL&1ĄƔjM Gajll\{ЁwiC2qU,W^y^Uj~]= |Żz7㠑^Vߔ0@gw~w? О?hJFgek5HW<7Iw8)1e^>26( 4yʘ`@sN"dp-_ H23II&^8Qi;;٨]=Ggcz5rbӓbAe4}ywɲ>Ą#G]'q59YM c7ґU*ߣo|YR"U*yG[N,_/pZ/rv(mrp0 yF/~21ў={4>>\.l֔9rMmljss]?1νo:p.Wo_~ҏ=Cjv[tTرcP@βg=u~w.<]N8ָ vRSO`eP6 Ei85)m/(y#׍\mD?U&^gYrykll\rr\\Q5J*7TT*mqll4'&jރ? 6|KnxY[VswXIvO")ϟ?Ͽ7 <*A ?u͞H)T$Q;m'uGԖԮ5XԾ totѬ}U3L~Aphq4׾Ɛ۩}?Q\Fښy*NtY}7u}M}yw+qk)\ʊO;okֲnݺղlkM\. (S_3/9'`e6O7{jBaoы?S& ?ܗ ^_K\זڪTJXڪ67WU.;&+r7z|~iϞ}&$崱Q֍ͫW}LޫY$Ի;x7<̙34v $Jb9I'Ws_h2bx۬}hR_ S*ЯsRkY2|SC۵ ODg5$yuѾ箿_WMcv$`T)kEPZұn_:؛OSэZ[-\cUtrIRʊ Q6Ր2'}X>z_r2Ljiք>>LNӓFNr][܈#`JrCҦlےj?ƔϏkll219rظ.׽߇vEC*z2vΕ=-jU&X) :J~j>'_\O@[Q>6:g`qHCk#ɟ< Hɿ*f|0d,%U06 :}ՠ2àq=ڳ IϽ~=6,;6QiPY_?JɟQ7yF:^_t-oozm&W;+/n^ubt@ݾ}[JYl֫ (s9p+w.^0۹\>xde('hǤزm;xmu_;-*\POGZV9UfXTf2yfN-U*Ju-F#_Hs0 e^㜼\!*h"e(f6AB@ ;Ğ:[ UOFtZ4c24%n#Q&&5qӬxu'Kr=76YsRpxzcPN>`?e( ^.{xcTl[# *k3 LެRNJsPىOyQ&Ӿ;~{IW_udle2yEl_6T6l6'+3A];LOVW,q vZ5em%)<@* ;IL40h:l?em~p);9۫rCL8'S~vkߞž[Mg&zaY5[2|Ӕ{Z/WnwTv4e~WEPyRּ֭9)jRLu;z7:l? .ŗF#)[L*T">qخxu>zIY2y[վ )Cgd҆eԾkG-kpJh=)8a (% (j0ݬ0j?vp=vIٛkӲvp*x]?1ZT?Y|zTduP}^ڸݱ^a?%32ԻP8@?PY=?;\6S5SM@ -LO&&ӖMSʈOOqMv!:fuU#>.Tվ_~]߹ FMowF ]+:4f}C/u/`2fqP}J#==_twRJv\IL+6wSVxJ:air" '1eœ!AR~ʕ ]xڠi0t?emUmkpwQ=i&GΝD]0*e(T 5J#evv:}?U\ &)ӋՀ-5yf/~pN3+К?&LOO鮟LV豖HlN 71 Xש){7Q%knoYNގ!G+5͔栒Ks{L6fIl(!SJCŸťZTTbXTPOZ0 -lL6UY}yGYßdaP2{IPqe{no_zIj߱wNQrIs9ddmֻ'W<ʪ$I:Љd=9_|BJjP}7TLN"6ON3֞TeFlg2fX-ܬ}SVG'e3a[kJL6 5dhӲۏ횧2tۮhuHjIi *}7:7{&[hszz7v)t%ITRJՐ26T~J#<4) ‰j8Y &)1k0]5*,ە2d(54Oֻel;l|Yx2E}ͻ6 k+\kd6{W/{&Irw{(cN 0?Eة~!=R}GOoFdE6L<6\&k2L:[,}0WIuq=ٮ^]Km w싚jWj[MJ44oCz7ӓ)O `7( ,L~z#^%h?e,4hb~dҲ~J3 DD־]׫>F]Y1߰sIYҷ_~9( _GAvS]G[6־ *3; &A:vb0(OI@( $L[CE_{Yl҈a9"&ȺIx:.1jf͆pӔisLv@L::u"jZ!ZD 0^?¿BJQ;|];MS&Vn?Y[9~j~'>4 pғ^J ϓӔiRo4l]jLQ栲)\fdp8zwO J=ũ}& KYcϮ(k[(~ʨSuc8iiӕwS# ^S(=2$ӫ^_yf)k߯sԥݍ̝ &3CԻcG z``X}+_}LI)à x;~ʨnTe&Q=v]yujxa0I^kkk[~m:ҐZw-?樻Ͻ8O2t:7{&{q~J`4P:N(xtqIK<+Ir]W6k2VgJ* *-SLMO8+OLe2A[2267o,~t)ʶ0fU{&z7Ţ$Q%a$FQiJ^!fy;zW~J?9vR8-SVM -m纕N짬-jsS]NI}fqI~J`8P8Lb=~1=R۵0~dX5ǧ+-ב2 SYӔ')cfM? ;}t,Y/1)3wO(evv70D(t{&=UVPiToSF!1͆)=Oʘf02rݲ} yu?e~վx$(ڮ}{\Di3I;ڜލN#L#A@ #;a3 H4YPl҈ud~WҦcpRP2 6 3卒7K=M:[pmxSiOgR/dx\b?%0( {&WgݺNSOMDv?aH%ۑ٠iz~ImxANSޢkiO91qߗP:wʴYfz@@~ .J;`iu{R *MF]O٨ml~]yumC%4cGS$KUH~ʴ/jp/ImֻO^.j+'vPO%mc$;]_eh~1S&HuqeX׌UV\* >)o6SwJ)DA@9XO Jmc Y‚dm{J= *pf?eJ0z5OiTG?4|z{tSZm?L#5Fnt `J־H'J[b$] <ꇁ}ip2Sf5)?`'v*IZtf Бwkeynd}|l~mֻDP6Z`@Phȁ JC¨Q0Ƶxֻl?e3 @ Jfe{pwsj߷lyiTvP?^ mֻ'W?6Pdo $_G_X '):xu?eESA<$Ǭl}w2sl:T/k߽(39ڜލn"4Ā!Pt(Xn0dV*MNn6F!ZcTv\/n@$z7rHJ8Hy\m',yc[S6pOi4=TM˕).SZU;Qd}wPk (39ڬw3=n#^ǀ#_/GK2ΐײL76 x{-wSXf?h?i﫴=CJ6_y~Ͻ8Ouy;PRmֻO^.j naJL/@K5)=וiVO6 C*LXƧ)+4Oi5o&&DhzUG;lRJ~Pv NCz7Rr4EI %03 K/IP&ƴY.It(DajӶ庮JSFӗj~J?4eF,6'ڶVsS}w"=D:Ի a(3;;˞I`H)]W2=UƬ~3}oڶ;HUP;L HPP6vX6Bm~JuT?wub?nJ!D)B@9?Q׏!Ov]NǨ-짬LOQ;Rj}Xareh҄6SnRzRRI@I{Hy8䪣S[Ł@PC.Cj0|O$?_K%ǑytZLS~?eX 7 lpNIOQƵY^}[] ~Cz7RRFSXzʎ &wXQ[)]#ĦoO`)T4ۦI ݀:p%B:B[_Oռ2)˲d9҆?Uwڠ2 !OKFm}ae][fNn/¾6SF);[/jp'/ iD)D@$SC@ Lռ }AV,mȰ*2jػvr)w8)Oz{FFV&߻Oa:MYRJ̓p0Oa[վԹG (53(!_Z97HwSA@eʹ;$ۮNN3 t̜3O~ʺRw#fAe&G n%ZI־ J`Lhǹw~?T l,TQ`ܟ16aMS}ׇj]f?eW4}JL6^#D;h;Cg P`۞迼'o$y'd ţHKP!W; *39'%ij7 F~ h%0`&#!>*R$WJNILXz2dx^pXNvLO2pPӓQ.ɬDt./ 0 Cdj CJYF>Q0|S+ ܣqra$ԚLxWX@@ :U#~J~0}H!XAh釓T?eY= ܿ 0s% yŪ/IkoORtc,ܟӦmX mU8_O1gF>FILOaPsss|/4J`Lرhe+?%YVtju86fu/e&+9v{)aHq.ԻK"L짴\GkVa9[5N 7 m8vPbh1A o__>AlO l+mf?eu)ɶʷORLI6%#㇜Ln`ŠRjo;ߣ\.w~wW,577'I:vfff|xx2 ܞ'es2g[J2pWS,;t< *$lN}^[{*71DMPv`SQT.yoǚث\.l6:p>xg@7UnoOڷd[2lZd8v[o3Gfxw8(eZ}rDKTsyi:)x\H7*xk2J prϞ yrcڷ=Aw}Pǎ'3)12tI2v6V#%u:F *3efr;n椉\_SJ5lI檭 W-jwz(MYQD'>_>ryڿ&'ԑ#СUT'g=ۗkA=VZ *cӔ*ön}w6GDg[Lhu_eCZoK~zh"$(iszRލb<_@}]P>W>;Gjcc- '766dۖ~V??K0:P?)ʟlTF{**Ydn/KN02;"~͟$LIz׃\9~*7Jm;JCΜ_3jll\w1ÇѣjڪWJ"u庮ӟ~_>!֕2tIw) ,K2JQPXP9lCJIiUXSJ[i7l杉az~JvP?q};5>GwuX{LoxduMmJr' ']O? St_Y0~:>!O+mȰm{dU64=ؿϣ]=*U* sSjRjTƧ+>쿼~~#,G[&DRrru@%SEj:.}cjbbBsTfs%-/[Z__m5վwNzM9-RRY)$/?EP 4~~n*0Fmv8LRͱC7 茞}9ݻ_GISSߧjunZ۷dYIu%yr]Wc#Y9~:TW+ލG2uiSFiS{Pf JVYg~ʤNdA>-OK7҄6LP;{ow]8pر2 S7n\͛X&Ǒ8mKm)ɲ*TʪT*JtswQR j +H{TmSf[oO~L{cՠҋ}NSJOWAv*U7x;'cڞ IdTTbP;o|SG;։߯;UݸVeV"eY~8iY9UVReUT.3`=A:J-/ *>/Ӧ<;xT;ڠ ;b>,;W W__B؊9 k0 lӓO~CħtQmСCwiynx-:ǶmٶU IKc\?-CF>SA"Y=יL^(mHz0jV'~'~!빿Jʝ -Ի1x#cǎiffl% O> /JSSo;yҫє_ݮַpҶm9վ%4M}K]} TOJ,KEqdd!ad4oTz~@ەNI 2Gj?W-`)A@A~J "JMO<>֛]_erIrIf45釓vt(iz{ޥw]2 C`* }=Gjv5:H. `[,Vɪvz* +$eo%IX^ZZ$9s7Rh/?ѵk7ַz%TT JTJT*Q i>"4 #M*Jɯ}J:tH}K~HQH)~2?flZeَ㇕ * +!LWmퟜ\utreB@AT,577'ɯ}iE@ Ǻz'˲T*v[U8<կ'ew~g/$8 I?)[Ui9l+Q+! PdDPbhvCԕ+הuVWoissC˿$4#^P2T1}fr[?mXvUd濮͠jPIX\2 p 0J ٨~JItCXҒt?'?O3~cr['O.Ho_^OSsTSz;l6RYf/7U;|T9Iz㔤&e7ʻמdec|4q;vN"ZNwFLr~~^b7R J 'C;з~ >)< ?^s{>v;U~}{o*RdNn"L@cÆHJ N,2lyHld*۵iWZxIX]`Rƀ#İLB@TBJؽs]=mSDe,ܿ')J?U]iȮzl(gf*=sӗ z"İc?%5N)jyTsTrg6}w+)ȩwcPb)}(1#ꄓ 0~Hfsڿ!ehH+D@9`9=)QFzPb$&DPb$NVy)?[Wn7oÈʆ(XLGjzH3J"SW(1tΟ?/?<`5}z,fgg؜={k \z }K򌌤4;a8.kV}솺]F@IoTNd(t+P矝~wY/\T.NJRnw`vTA^xPS 'yظ2cڷ`bL:!555sss5IH"D_pD$cGT"j4Q9jiÝ01X755gFӔVB ~zr;e<f | e3?սNJl& >S9s!}jV ޓ Ow:QމNSvjRj/ԉWnՅuccL:@SRF>E&dx8(n5 0GܩS﫻2'1P~PWڵOt4 kӏ:&(*vvR@Nw**/ve37 &Nn'muzN=?VD8 jaPyyS(JvJT~k z+k[OȂ29Zg08\i\SٶT- ${lϝ[UW0KٳlmR})I{1sA$S+} `g~PWڵOtaP,577'I2LPb 0h~~* /\e)nEcjFڎ#Iʚo|{hK/?3ϟ_COS҃gr/f LnnLMMٳ5)}J J~ZDڴ3{]=ƲmKi*kb+j^SmKq] +FNkb6{S/}SjzQ 0w:!O9;;yT8Jӧk&#s(ܹڠӝFo2=WðQod96 ˶CkIYq\G֒LCIK%gY/fOO=ez^;V/0dfffT,O9(SSSQ@DFd~]2n~ɓR Vw:lӆZfn44d42L?}^n7 0 nʹ9رca8$\xapyرӾC ՠi$:sH( 0CJٗsypH.n!9`K{pP" `2itZ|(;/^~D/^j5P_IS?G@ h̙3/S7R) c\&@'ŧ! +u\`P+@CӡY{RyLI@SoS%J|7ӧw!@ 4S6(\uB kL/J]|?DbXz#FRv>N 1_IuKJUXv1^@R'H%Vàr~~)A@Wz\8=86 .$V7)ӅlX,jnnN$:jF)}%R!iE$6~y> D_MOOG5nJpLG)"2<}@P;[ɩ)@!E sVU(U(R>P%u]DW@mN#D:0$ ewPC@ pRmT:0<$0~3gΐ[t%I E QJc /s6TTEAL/m(PmaJjjjJgϞS?@@ ZbJ~"uP)I9Sv%WG@ #:;G@ !Fq['NZXbH{ BIʊm:rZ7)fx"@JbМ;B!Baߗ2&']J`~PWڵOtW8M)wLP0D%keԥKyjr~~2W(\ѹs vdq1,A%=~(@ /~_ !~Jz~ʙ~_Z߰r$;(crթS~_*-$ +QA@>Ծ*J6;;%Iҙ3gFM 'OV}ejߣaZ@]~J,rnnndSRϘ|T)1xQOI@ @0- ",Ĩ!Oþ7=Ĵ$a~JzgSP;$~Jz~a}Sq=}cQ6ô JܹjFNX&ŠwTŁ}P!bV++&o,^f/AW(\2$VVL]ŋy-/mOҒT(}Ymcb$l- *}}Ӛj:sL) (&Kމ7%m"c?%l?L/`¹s 2N@SJ<|SP$tʊ /PۦuY;vL:b/KoP Sվx JjtΜ97%`gb?%O977cǎh?%b$SOĞIV)@wf?%%` Wd'mep@MOOٳ:v5;;b}(!~:7;Sվ Hss:&}T]KKKkX6v]}~HByIӧ5==- J@J15 S;4% RI@?,.fɓ:rj333*D@ HstB/0.]kr6A%]o@ 'tN`eԥKyjI@Zm8arZ`$`P,.fbRK(=$`ЄoSyS&+ *}9(r/`?%);wnp0x1e`tn@W Wd'S?<^` tn([\ǩ}&~(*r}9%#8z`ktF8 @k9Jo-.fub;o׾O (NKaPI0-Z\q['Nz6Igq17`PBc?%`%IzQB@ hpY\ǵ̷nŏMNԾÌ\ $)־/^R(&(58t[Y1:~։v/]c!`p0,H"`P0Qp~J #G8 Se9o-a ŬVVLj@@ #p־O H;*0'aPIV #pѴbVǏ:q!B8 O H*0"'@(}_@@ p4bO +Jr`+Y=𸖗{ ܹs 0 .]kre?% ? 0@O 5JR`7O !wArshf$k$,!4=ڀ9$dBvq =cHgeIC,I60ec;ი``ifi3=џOTwojFyߑo@C{-iJ}"y'Ʃ,v~Joqn*Ҳoo'Vٳ3 YgIz8d@ ##u4@  $)X.8W)X*92q~J%Pdio\CXPe]I(2y',ٻ۷8?%U 㼓@V۷ijS)>Ȑ'wȼݻcq "̠Ȕ3'|p~J*JpI  w;h_>KvGS)gi7n*秴=ibvlϞس36l8gu$$%@Y P{-) ,RY)di7@uO ?%@ Y ={:cxYdRft Kje߇MzQ@ʼ2{׮RÇ޽YA5 E`-=8?}csbl<ǁv&P,_OoX<طolξ%0"5@2{*˾*+˹Ɋ;OpTOibt ' 秬g{!>ڑ@ ! \I0Ya%ЎJ>;v|/a={:g>ڍ@ 0h˾*+|C:ΎoD 2{ 9PوegO A>Hޞ=K>?R3Y+Vڅ@ 'ҥS.<0h%@B|">OYM3Y+Wځ@ 'me5<6J&@6TOٱ{fQ'P$Ijm JLa%w%@#!7g%@ %KA@ -d$Kn Jq Ç@^ -2:jYCo J7Co Jp @ -`)o oJرRÇ@Mnɇ@MJ )Mj@ ֬+yOm7@V4;Nd@ `CC/mתNlj4@ Qt>Jjy'OKkrz:EHVwr(2Ѥ,< Y'P4pfQFDXhKZvI(rc)89@ M02򺖿gG~ @Y3' Ghb睬pI J&iy(+7@;J*NFD*h$I^{\)RBPH,N@ $Iʈg}+ \bxI J&nr*:;ǪU'ytr J<Dȝd !P4Hr3(+:; 8Y*@~MV*%{.ʈz@uttDҖwyOUKb9]]ߒ@f%NFD@ c##OztwI s:;'/Kz 9ռg[Iw9edtwI[pn S MzsEJtu/NZ Q~pzEYq@1NF8Oi SiXNDI'{X!RT5NJ= S~XzGDtDJJeȧtȩ-.EOE @'#\ȯȡΠX<0Z.qqTb1zzƢ̞NH@ZfQN?lcn0-8a$%@2z{)<ۚHyYw6dtJCh: !i=lNz(ё812by7,[#cxؒQ(m+ߟm!řϙz<{?&?펎\kxӷELX}R9sVm_ODtJac ,ʊOQtPJ'v!P$T:7_hy?&(/^8Y*CC&= (44tnJ& ]{!+W ~4XGG1z3{r7NS gd#W썕+ǒ +Vtʕ=IcIʳ']h%@ $u.F\&_U,@ +Vt%=%sI)0<|ECXsy!֭;0bʞ&I)1<ƖRAYͺu/׸ԡ#Wf:NF= ' %_z7btw4^6 UzƲ @{(R벽ԻVꍞfOJHZ:Kg^vYoΎXfUtW|󛿔#PL^fQFD^=]/Vh8/:Ņq&Py->唙S3_Cqcz3ZX]ܓ@(RhsS %= :;;WEWW>tW _f$Jj,fؼ`7ի󳤻T:I(RT:/yK|x+I9-'JsYwG8l6%PUggGpq[]ai7 w5ح^=ۚ5qcfS3^}Ii,IHRsf;㌣qcfٔΦfMv&='f(2xwSۼsP.45gS38ڜ!ߟY)v"Pd͉ͱP\x]gK.1EWWGxbgMV|󛿔RGȈf,n9(g͚ңqfS@ˬɊ;ŤJ%@lF4-3KڵfS@۬Ɉ)K!Pd{{ECXm];7 ̦ꘜ5ٛPZTZ8 (LL4o q]?BajvPyn Q,|k_9Vmg~ySww޽>_뎕+#c:'􇳟_ynfo3ߣ1Gѣ? iA{{yHƍGbƱԨ'Xl7; 8 زeyL9(vDcÆ#><=fM{-;y'j Pd׾0"d.aظ@uI'Ri8 P# c_[h\+LL":cqᤇm+bʮRi}R  ϋkYڕĻk㵯=h7$EYֳ&+!PW_QNsmnp$6n<kme}}qI;K$Pwl-[^ZkĻiS3kvxlx86n<(T@Td/;!J%q^%@|+G<[v<.`\z遤Q>dw\ٙPRTZ/N,@ 3W]uyMvxOgy(@fuu+֬nJNW*;ŤY~̖-Ɨ|e£Hv|}}iKB.,m_sW\Tt~~囙gn|.>ȩ͛ύz݂Ifwz>}q/Ě5G J__1N:+Vte|r J=KK5Y j3'7|ގxўx9W"}xpB%w?8 b%@~10Pޅ&:.K>ZH\tя㢋~cIZ'}}D8 X~og 0&;^Y3]\\xs8@SdI[Mv;cӦ2sP6mfCYs8.po\xᳱzP @FpB!{9-I(ȭ99=K \XPe흈NKz$"P/|;e^}(.8cI;?I$׋M$PrLfwgW:?qqB%3?}'= \(?--6W>8'Mz80COx]{T\&q5 ͛?@ Q(X,DP~+n{e =}1kn|ٷ3K|ϾqOƹ>㤇@BFo ۻ?%= N,5?mEr,=rWy۳Ϟ>{Z-X#bE%HΞhefPqe8 %z7Ӗx0PV^ػ8xpM}4RkR#170 356Pn|rqsį0R'PN޽kС}Hbql2L-ʙ(It([صQr8xpmz(Ǣ{Z@9s[c'W"N@ @bG - 3(;^yCkg=:;_}Crf/ز \t[mo{_=nŊgc'|GZ/äж:;FOiH+g%Kkwo <ωÇOPGx(ű"8{1kmKAyW P,v}7~7n;erk;7N0B`ʖl(P֨@90. T(h!PA@W.}΋Ep(C1_((7o^_8 %% yd#t82V0@{)N.>3@@/.6o kJjGmoE\F!(88rEqȋk>U7 3%;m?ntXW]Q(۽ѸC;gPw9x8rqX b(9{@9{-@90.}!!P4[⡇&͠Lw*ho8@F P80kf~+Po7*P~%y PT>XoFL9(k _1]G$-Hbgm]L:P wےn(h|,nxg2kpbbb2T$.]}fJc&Pf+Pnڴ.EKDe?aeNԶKc||]$Px*" Q,>3^BAMN6KHzx;>+P0PN{h9TsP|67( ]ﲤ JZoylw@9tfr?Y(E%L-˷eM_7wљh?\rz\rqMw-Lz83B̌T,>OFGG9^r8%±bq_TbYm\ 5 w%y[%7߼3y䉤C ߋb` BOm"m5 ., nygrNKsr7ʉxUydDD ߟ|eym+x%S͚h?%Ï-Gy\l@Y{9>DĩdͿM>Q[k\<`~ŏ@iYJ u??[(ggkMɏ'" J? N(5PzYL ~ʿ(9ϟScb2r VQLMn-:\2ҬI"JR+<!ʙ߅ehqӦɯ?y g;[o}YD@ @@Yc!\S!X8F e-۪?޴غuY!P9eߏG{JKg(c[\艐B{'"hzy wr(n[2L*/{2TF~|̺$MubfYc,~$ey9 (ȴm\-P Iʅ>rǨ@ ٨~Re[e9+-&%plJR8 ͞]4;``<~!Ar?foF\l@)P.mWZ @]JrG\lR~@Y&fo2ݯ|g(mڴrnD wm+>#Z(9PjhY92\??Vٖ@9wrK!P[۶۶|$P ovz"Щ_%.y?o㿋ͦo@9sp0 ޕWnGy4_M@̸о's*j}i@)PmuO4BgfG-qN~2+r&ii'P@ؽ(͠y+P92_ʴw{sl|0 @@wsɟ|1v'2*(K{_2=ʴʫW]9 Jh])v?]ySʥ?-qN~2m&d@ M|[|S 5xj@% /P!Pn|z\u`lrz@"ԭoC}<3Ry+P92_V-[Έg(l9# JH?Y-P6ise yϫ_NJH?m 28'Pk@ٌ@e˙qկ-[ hG%mw_8'Pk@@y?W_v'P@|#P 5>-qN~r_[(( c>?YR\ise K [k^\%dԷַ}3@Yise bp暟 `a%>趸އC(kݷe k$Pr#%瞇#Pֺo|(gcplQHoFR\ƾ(_T:'ޟ `yJh7=<@9ﱣʥ@(˳$F'RIDATωk4@ mC!عsw@m(?Q*@s>Ow+f(ezG,GsDIh8~OwΝʦ(ez7P^{MFɗZ%PGD?!P6@(ӳ??rpQ*M}(E>ow[\2ri+Pg׾." qu =Jn_G?)PE\ ٟ@Yy@ ,q=]w=w@ (ez?P^w %P{X|2>? r6ri+Pgeyy14tnJ=%TDV(ez'(+A%Ih&o?e}9~Z@c@@r|?e㎟8'Pke 2Aڄ@ W;v|+vV% @Y*?-H@(T* 5>-qN_q Ps;ק% __~CDTfI<(7v7""#[[~2_Mxrx@J FG9- [~2_+3#؞_(r?@)P.}T .$PmottgqOLLTf[Ӥw(e+G##"PcttgN/F\ ?J)Hq"HJ IKIJGJJIKa8y"Ֆ͒="{MvV.g)Ǘ+;-Hז,L_~NAQI!ER¬"CV1NLMZ)VL $L`V0{"eyeg :JJU*[5JLGU殖֢HVQ?ާ>حѩ1͒fX9֘&YF3U^FuX6m]}G1Չ93 |UҪU$]nnCM/OS~~>&   .y݆i񍪍&v\mu:ƑGLMv|253Θ՘lOv19|y-Եl^Zä́UUКij}ZhlfSoV6¶vʼn伲3صs-[{'BCSGhGfhgWΣ<lqu%V>svu.֪MZ26,b&*4r**4j:*@LMLyl,7*us\m|GD\bh$jR|Robrv`NJA0"`H*hL֧uӗ? ͌]֙ՙdKd'eo޴gTcOQ{rswol m ڳMu[NO [A^i۝;OrR V (m? Yrˆ[EEE[?Xި%%Ga%oDDiNe̲²7Yn\^{p(㐰­Rr_bULp]u[|͞iU-x4:zccǞ77Q'z̚KZ!'lsWnk]8q/v=s}ٚvZ{aԱC) _}ABEKr.]N<{%DƞWzuW8}nX8[[Mowf[@;]wv8d3tyoy02*|`a׏2-<>+|"ߵ~o /ۏ?yx??'󟓟O)M5MMqb݋ɗ)/f 櫳/ M^̛oy=}na>|ZZ.V|R?B, bKGD pHYs,K,K=tEXtSoftwareGPL Ghostscript 9.22_ IDATx},]=OJ*"IF`d#$|7X<qdHđ˘8HYҕPv*rY}ѽG"ạ!,hٝ/tN={fgv{߯[]=3;;=gxhqnܸ@K¹}8^a@pz=IR$=a P,"*7zpu`a8^xfWE }L\^~ e}w,Cp!F#Q |&!H0F'@k("F>\q AݸqCo>~Th7ojgggIG P,h4:~J۷uƍyW (͛GlZׯ_WE9@\9LBq$I$I~_^ORtFcQZpX Q=A): m8OXxzXѠ8`iIX `)? 8wXP+O( 'V((~hcE Ftϛ7o*=0\ipM]~]?_Q1TݸqCׯ_?zHI3{U97qk4ggg)gDZ$TQ$L2LFѱ~_;'5@p&q;}X&*@p&qsh4h4TX6PE <"ZZ@kh-PE @("ZZ@kh-P,UP,~Շ+KquW}b@/~C> \1Xm2Fz≿CB s䓿N+c~֪W(ݭ[d1KE s?cUP0MmO?M<(SO= GOR E sSO`NZ^7{'xW(t z]Pc-pe`~ߤ sz1:^VmOp5` ,+@jO˯mT`SKsf IR:mocPP,\vd=hsg5`?Y{|Y@z UAUzkH)EQ֭/`zX7-e9t1FZyu֭+ڏ $01x@xX} `NQuhuAH8Xk GRQK9F\-{W}h'x{ڃVnG/(z^@ `)8V$Y @kh-PE @("ZZ@kh-PE @("ZZ@kh-PE @("ZZ@kh-PE @("ZZ@kh-PE @("ZZ@kh-PE @("ZZ@kh-PE @("ZZ@kh-PE @("ZZc @ hP@u(Y3"Ep(Z'R$՟BPK@kub_.I}+^  wC pɅ>࢈k$iW Tz;'@{P 4.Th-PE <_@h:42ֶC edxbTbֶ$G:e@P V;91쫯D (@ u"EJH*?(Ze6<)jx:ڇ+>?'?2ڃQ).ЌkG;.-xBǡݨ@+4[%M@pͶ'jfӶ@:F KoS:)V^V=(rEVv8_{W}h8$vvvؑ"%B{RS36 $+s* 'シ7yE# ?>w+IM+8 P\Hq%*ǎ᧕e@Yp(5@,V##y_Wr.srU5G0t0gᲞSp! OHu8<x90(Y)M3iZPQr.f'&J_VR?P\HI>gy՞lz _u繲,?ח;WTkփrC'_Y3 3] t8䜭 CfEs:D5B@U T44s.`XN?ig34gJڞ˚}}dt8TIpBPpIi?C(.uZoy4Vzq4 b#2I*CPe:/=:~~Y C^l)`@pKZS @jf98 gvR;|J\`hǵϫ22n]M[O蚠Nd`hGV?>}sڻk일/tt5DK*dLzrHZSLz$YFFLroLs^U՟\ȘBV}QKihX {N+74kw4lϽ_Q]MCK[VXY[nH֖1:=/\!s9˘n?Bzǿ?h49ڬY( c >s9W(29T2&*A 4'y1F/h4FOW)A__E#q|p3I#]~]^[%]S9^4 A(9˳`Ǻ}(DџP|RaHu44&; 5u:v׵umll*V5 ;$ݑF[yo\ͩ55TQHn߾۷o 4NgC67C:Pʲ&}ߑ{CIgC D (̮y֐aQ+I>!hj嚞qݮ P9UIq;wj<Δe$IcVIRyՂ/:aJ F }eǯ1oVd* =*ϭdw7d+\5TvNZ@ÿ?ps]~vC p9WcwqmosI]5+A$,+$e~,)Pyǩ:NTw5i$BP|-_׽;rgi:(q֐:oq+IGUZ*Bu:ktZ[[S dNJ}Di<('r.sL\RZ]T]}7=E<J/(iw/k{]jN+[ֽOUNy^h"k5} E y*[ݧUR{efC0tM>I)+ PZ˃VNU^m@2@YkdLfU{LXҞvw:emo]\5R;kz˷ER|Nptv1O,CPrMTu?(b!ǻ*ih3Z!'_YU+IխgFKӏ Nv߸\4T;;j03K8waJ{mB(X9BΫa 4|OK_J{ՠwpYoϲsg E1Ô@XduBPI2fTҳ+J?|lTugX}벡]-p O*WI*Pe(`%I#E8ET~ PHosa=Gg?+3//I;^F)]ࢣ85ƚڃIrrd?ؼvv^Zw9y>Ow>a}uxhg~ Wl|`@e9M˝-+?;5mhccK׮=C[[嶶!kCExw_CݹsG{{JӉPai0^^9q,3 CX~&N7LIJ,-"q~慟eg :Pkkz͎][Chvx<ښQ2&4}(p)wg}uD N](Dյ"wR2&1dm em p C'%ﭲj}j<6LL*BEPq꥟Udul7[ ܬ5)[Phq~S_'c$+Cy?swyGYfd̺$ɹLO$2&?Y*I~SQc[!'x) /yÔ@tJS (\rq+~TO{^.7 9TRKi*{Y$e;ti<(M*ʹ}IcV-EeȚ$`z IDAT%D ,H}}Gl9;L)I˴ Kn{Kf뻑jm7r(ύZ/cbdMA+4d2Q*$2i:FE/T}NiNr69EF>ܧ`Q@WKMޫ`TZ \yj20 AZPTE1sE^"jO1YFo;y_Gg'7/\'g 9:G܏U`) ~Nqq%|6*BU Î-&Sz>'i8$i0xNdt7%EYUYnHZS*CfEhR0zS* 5?P9@]uf+~=x_sPc:pyq$I@r8*ڍvpNojsuhD$Uc ]u:kZ[[WNgMaؑdU:DɤZUX~JӠ.$yZ5ͯdlRV+@U4䫯7~BR>sWEϗg?2Nj$f6jmh} mn^5u6PǺ{޽*-To)[pp4 8O =MQVƀyk^GYCN0O$R4z1[$ɑaJ5&~DIۚ\M(k0@[[]]k׮i}}SaQQ8cmlv p2&rm$yvw_(z %Ok6?Wyݏi?p ^82C8fuT^]aJQ4Tfu6j}wV Bazml QvWJR*M̨($ eYQumoCMQU2'"K&o\󳹟~xϣ{piV_sqAjft}\rb=rXQoC% 7/S|;mo>Ԙ@Ƹj@O$MD59T) : r8RQd* ws\]QGz (\2IAIϒԩ59{p`9le.^3\uZ]Y$gi_Uuku.n圑sVYfc#kb,[RJӱWi*c2W-S .MSߛg[|tԼNZCt^;I?(S,JXQXoՇ9i*oI4TNq^* , }/crXi^M7rk2hC`~0pfsTաjj8uҳQ{(dLٱQ8uEыpVpmm]TVڪ#Zڬ 786\E(L5r/QjF?hFhi552SXz@kaJ*?+?f:-9WƔo}gz}yA`Oo^гソ`j8YI:'2 Î T josU;[d/)PM\xe{7Mq2%e/SwM3}z/UqIeqo$hՇfsRyͰsvۥyՠSu9]hL}u gVh0Ӟ> G `j8W>jncʯhGΆ: mlljmmCvmYj2WsW_՛gr~dUVJ2z-zuM3PjS@=:6u㾷9,~&>W(\J^_ejm~:M_Cں-ue;45ߕ]yoU;9gT3QVph)JLrjkH(E_)Kt 䤖w`xy;{j8|=˩p % *PtemWAnwK3u5ml+5krΪ(+MsYek B"WV|*o^fEG4kI5ͨ nnux{9/ m˳moٯͯ"-$`@ ^5]_W#c:2 @pSiczH[[ r|)c* i8c˘L8!gF5\U׾pCAl<ջhՇMIknf[^sfϓCU6CX PvvCᓚVu~&9{p[6PHZQ5Y[Kד^7?uէӼ7[y=ϡDkաx ABaH՚`tÃ/3myy6Xp%5Y Ӡ;g}<7* /':'#yPr9E~8u|STu{FZ7Ug:fyR<ÔKo[!>Tΐ:){tt=u?9"o|O?)pFp moVx+˰(nmO7VrΪ)o<.tΞ&ϕ̫(tP=zݫ| ֭m^o|nIÔhPKL@B5Ӵ1^VVzz_]VTko[2-Ky.M&( dmGYM&Ri<kok(zbL'Vov.ިCv֡C 9O2R?i{8g_VZUn3Lmm]憂˹L`]IYV( AZ-STf'7?H%}۷A -ES?O4|PRCNoVzgzg 8ipq) JoվYZ՟׿Ux(\QHQ~KE߰ùt7ͧD<QOD}}g\x~Eы_W|FӡHef~sRQHY攦4d) 9'yo5Z4sjUuEh~%F/nG' S.70r!\825ii圭Iik<}aWR4tr2Iu]M4gJS,+CP@\;|Voxw/9$,IÔluU,JD=6ZaaQ=yݿִ=$3s$1@Y海* C5L4]5ʲBE*QSUNo|wE}8(9LI:]aJŊed)Z\98;(zvw;moStg{y˘T]eDnWAPE,Li:dd_IVg] >B/K=w)o6o^aJ0I|\Y_k{]\ٮ>dkN& VHʲTE)LE}?@XyÔ X;Ya\Z.rR]wV!hv9/j Sf2,˹\E:4T?n!)W},4/\ v Sj~"BN*/(zDhZY;ES#sk:y}Qe}Zp@fduHe+ޥ$Bu봂rFٜ>os2(_pIk?:vy\57F7$ʴrOj0s*֭ѣ!gs+=Ts4E/Xpfp폳kr7LvyYom8k!̊+?8I BYuIhg%GE 7O3L@K@pձLQa R4|P'tg56IN7XPZ9LI:]aJSqs+!{BE[qT]I\eI@1ILlTX`WbmΆ$Uv\NL5% @<C$, L?홞gi~=9~_əzΥCEW0BN~^x c"`\.8TiY ~VxKSl2+2Q-!'u  T))NJ|SC~i0+)"lZju]M&9I PU:/mFc!&r`U~hpHg+kS]pWZjv=mooiwwWw-yxݿ_ǎNNNlj4`/4rC=`:@3 0\aJ?`Z ?gm-yN'WjgvZl_tx?\(b8v8RgJӉ&<ϓzʲ\i*F#Xi:VʲDyͭb?<KUVU+煛Z3P+)@J2*yqy-C4SJdz?MHV~< Oߐ1_ug>W. ?ッʑ]_@B êX60 /5L[&Q ?̑L+eY$IN9!^*%eg1=Ӳt{kieǮ 't ,"+ )IEXzQ|_:x·󕠳p2g+i>miwyF LE*RI4-&KCOt]UCUn-h굀_˶{NqHiYVi*9ά]K=;'M?|$57伈u/X;UE6(@xv0 5:]s+Bg:ʷ>TOIZzաCr^$򣺗E z.X勿->8]yby ~EBG/G8(lBcDУfA..Yr!h5 A'/tqmc{ <@@TS߫p{1=+ ?;3g}T Zɘ>J9-$a*oIY*1Y9_s{^yhU *zMNBΫ>(pIt6 (hOjг"=N{p^.?}L\nVVE jlk?YJU#9|9癊C8L&)VQ FC @p.nN5\Mf7j>α5=gKەnq%G<̟Rp%i"'}Ee`Q 逳 A8r캮'V'.>TY*Sy2=_?-wޡkTa(Ila\͂ʼnUnxgq?'Q%JXEdŊϬ|-H@pP@N,u ;=Z-y^KVKj*Ͳdz$Di:4QoXy^U~*E"u>fe%Iw;.+=@`CXk%IAԻvZ[:] ZŞۑnV[vokw}vwdzyFmu:{jvjmurvӏs:]<\}74 8b̿Yyu:mmmunhk[N4d2dr,y (=I#yhyţhOUys74 {2_zz !DaY͂ϖCТ?]v{[ΎwmooFyLsgzM~LUU~v6]C yB F jlcުZrvvj!Sݽ[jrL[[[jv$yDqՊTx5\TϷo >M7@FF}^ VC`C CI5Gnw\Vk[vh{{G޾[tvr-9NGsѐu~3\~׽PH )Qъ <瞲]8}}l:Nq:[r+Mg[׼ zwOBE~TDW`::U;U_VgWy(]$8dǮ8d)I8Q9J t'OGnYh6غB=@@c&W( P,tˁF xcy4uy&T''tq4?jj}?oM7<4QU(w!Xyջ99%mo)ZL\uc\$5j{@`a(I2Ի`EXtp*̦Gʲ:gʲqdI|B-׷ Bx4PoP 4QbuYY/#SRq4cP, (p((VJG A CI1ޅb`u~`ʈH&2M^RTJ w!$`7 `Y@Ru/X;/z^ `EP)Z*">`5_ ƪjh#_}^ p8$c]++%򣺗0 %KQB 6BV(UnZ}j2QnTU],l`ed^ -<(V5%kZ+I ޅ@F!(Xm~׽4 (V "5$SB`IBkX"Pȏ^v@2@@8((lLh^*E:AK@J w!D:`%Xc^vH^ޅ@ (Xm~׽`0G#`uEQD kA k@.C kh8J", Au J ./ CI1ޅ@ƨ (X=&4u/ E 6F}VKL ]LzzKEl`ed^  4J#(͏"@CIR_zF"5$SB`I׉ֽ`0C 6A2{ Zx]Q@F (6(ջXkl`u"5B /&b(k$)z ͏#12E k@@p}@` CI!HN (paJ1.5@ \VQ/ҁ^ քVA %ֽ4(($I^ޅ&@@6?^v5k]4A@PPWޅ@`Ma(I2ԻXȏ^6(jaBx !FPiá$^x\ VSL ]@zzKEl`ed^ -!H u/X;ZIR}4APܸPWޅ@` a(I2ԻXM!35ek\(h,M3%e"(@ eUԋt Ъ{Yk%IAԻ~$9LߖGۏ˘es.E Vf#G+z:o>s}Ӈ>+ϥwa^}{^ `F"(YOk0Uq\9VVQVnWz ikޖ8V$Ї>@G{$`0 aPH7)9wi0&ucy^NGv]m驧v3{zTϼS>~zO{{[vZgHyyhPXq8V!cMxq&rDVNN[{{]=̞}i77鵯Rϔ!hWݮV+ ?PT`+n8,@ k]EՀ\Wm+Z-mmI[[vv;ȏ/}JQW{Lq (Usi0Y;;`5*@جUPEHmU-y7靟^u4M55?P?PrXYVWWK~/PXa^WBl~﫨ļ8'X?0$c]dTQ9mU%he$-Dq\q2TihZAJ$cIgg .\ A'K-y2-4Ovm?J**B>z `D4Ȧ8ޗs1_g Gא*b,kk~`u CIp ACPVbtx.q5BЬ]) * A +`z|[Ep5ޞt)]*ynVTAPBl$k?&iKR[PQÑΪ=+ߣ*J+_+ _Uv%uʣ=wTAǯ=/=/(ve'pzJ◢\-Q eKEYϳN-s9Ӽ2jTUrVBϓ@s9Nr j@=qT ?dUX>l:PXQLP-I-I}U8"\ A"TE*CPGE5hZ-OcRQyEѿ[k,׽yl PXQP(E/ƼEKzG8u]3_Tge)eY!/D$E,Iu #cF?t8N+G8 @|E*NMCNk""I%_݅n$=$!HOkttnVU)M%Dɉ8)]%Ik<>x|rݎ$ ?ce[ErTK(:Qm$=-cޫ*k2תԵ(co̹AU!fϾ_3 #y!í:u? 0Jϻwڂ j|5 Dg՟ۑujkkW]u]+ILN4WS2Or?o{?>񋿩cRC) gAbp}Q\a׫w!1PT!gVӐhU?rl_^ﮪP3?zۓ3UQەvvvޮvvvy'hU-i)ˤ,&Diu3e$ B3h ^foޕT=(B(P]~Q8*(:ZpOz] WG `ZZSb,:պn-8}IEb'7S jUG[ӑy]Z;vokgniooG'9Nv{[7RcljSU暅-*@g_[y ߟUZ+C]2#e( ~\fU!gjV!lz7gt*N\%޾?g%m?gSU:!幔)*lMYxqZeQ}^Ee>^zNU޻(߻wM:?fe\5eb=RI:3,ZiU.ecs21^=Z<<$+[cn8:Gj4u|R~W2-7W8+\(G%2= ba("ݻOW!gժ^|*w>I sk0EI]{Vڋq98TsRlj %Zh /(xXChU=:rwe[$̅y^'8RTD뽈/ϟ״]~EA|8*]}b=a *@`ܻwOPwa4ܸ{fg?Ϊl*wF7JzY9*[*@=yDi*LqhRU'79u VLUB2rJ%ޚkEfo{.zȘ77HG`S:·Qӻm>\lJ`C/80i>(rTjPu\3 PIQI`qIj)G<2y\mk:/,*zsUuV!gUyqȹZ^M~NksJ\mmkq)54}\WV?eA 7%k!!\דH>=eY,O ?[jvwokg?ԋ/EW:9W_8Qe n`NK9@S*BNIHws_"aJ՛ ůf>gb}E:<>+_~I/z5O"\=:s2CC_ҬU]**9:}<NT\-Va*_1DAp(?dU(Qj.ĘT ?O{noio)ݺnzF/icz啗K/Wu||d2U::OVM.@'`p?<$Q nUQi5&@` ^ᯨ#*@]%mjkkGstO>)i8NtrrW_Ճtrr$VS7~$"Y[!m~\]Dg.* C%_5OWX]ME O_wήLCnwG]uj;򼖲,Wf:>>ɉNNN4$_'"kgbuT!TLIBVz"]PuhgH]fU'`Srw[]TgVmEVQ5=<%RJDDDXq+IRi<:AU5<7 98VG܌MjC#ߗաK׵X#'`w( ?t]ӝ.!agRUyǕ+ϋ4Mq8.g,V2yprWƼ Xgvm2 嗯T>~cb;璮up)@>}ݷ[*<V~vՠs~:rq<ϔeEZ2,۞u=Sz晧7xG/,(aJOD;wdM`F{ ~ IRK< x^h~YyJDyN&e*^u_mj]XY6;߬w W+{Ty^U'?Dqg.QuoT|3 .~*<}$IyjnIrtp Su0n@l' @"t=}~2\Uۛ4 @sIi~JKp%׿k׽Yi:R#}3|!0.QP^OwiV^CZjokG5+) >=j?;> W^^ A,oTZm(`xp}_SmIc})e9=fqThQY!hu_sQ<%XI2QL] *(k߹#Ik~* [W}zmmh{{G;;{vr?hD'''LbiZn+}|PPcC%mk^YU>Y3LtZ{ە::>g^e6[u!0E:Ԙj3[I^9 +mmoiwSz_}ɉ^ye+zWurr\VfZuYp]@ un@/jTz*nW8:=Y9NGYV/%њG 4-32S״aqNgK4}Ktz//E߾I<+^zI/NNNlj,S_;(k:/(\Y &`#(*Zr-kԱM;:.{Df5v67yc]I%$ZgU+&_!B5-ếwN~-=>C/DDGP"m+ @G =L,vPS9j*A;65ڷ0#üx S㡶+>=^ &7k56ۨϣnKݏOeVT8VCWm)#;)J)A^_C!P HV<<#Nㆣ G7DDfA民Vn'r'S]m}eX NCiGDD4AuhhNڭk5ա{5LѸ@MR@)8EA Jň"۶!(΄=DQqC)fgS}ss޿27OϜ92!Fe8JDt0%"!00\8b!@qs}:ק~Q>>/y)C 6~""k6}+Xmj]ZBD ապ79gZwZ)S_#~,H)0|Gp89uK{0:j@7UpPqQ[A""Juy PϹ.h܁fC*0-4j*mvQ29ՕR{}0:CPxi9CWt8[3TA_'5M"h/9m z6_O,^GVCmaaW-u0RZBBJ3IF, 24#DQ0 !X!u~E7W3g/t@'MDD^&L?rmZ_ \wv\!/zR$!T&J^P*LN#(" =#,,̢ݾ@1|  ˪!-Lغx3w#:0OD;eZKK˖k5=/]x/ zvd;CHLI)5>o\JQ&5Ô6 @x>'!b8JDt0ѱ ?k6>s}v $bTwX7ieG3q0Cu%h^Z hD8G]w- KGP"-CzP:nn5m#兘E/ @8*@J0U66!h4XuHpΞ}"E[eQ"1%cgW۳hkɹ.bxB'|ڶ˲88Π޴6?9 4Ȅ!\$M#ch ~%WogOфbJD{ahWcNCp]4ϣ|/*֯ !pp@ lc zttK9Em,gp=ރObӁi8 p(h/j4 ^`zѭnV&,q (OuBECA>°~Ra}?kj j)j3g?Ż*Ct$1%%N˵fmx /^ #Pj7! @ ԆRut3t GfgLs@? neՇ:mSDXFXDREXDTe=A>|nw~|0! d_P> QUQMuYL.O2oiz/@!j q<5sG6nд ^A1ňS n.:Er{}K5{<2$bJD{n%ʷS8}h6UR6!! *PB|4Q($-q >,+>7y#_5?sh |vy""+?s3a訊Qכv.//o2%vNCIX&&Ude+@с*$l[A)0aY}XV B Ǵ-;ռ3 omz7XĚ#[Z""4ouϞ[;(BЍBUC!Z{cE4փ.`8JD(m/&t6~Obtq5h6?p*DS1844iZQT7ߘܞ~=2O},'٬]ա4 ̋ك#DtL-Ez4sx>]z}TFU捪 Oߝ=LmʯG/qQCaJDCJȹ_WV "0T^nB۶6l["n7Z^/D(JR\oE CO۶+6kWqd0/ @G4:b8L(8 B ͆)e/'>i8?p(1t=] tg)a~߇e`a#$"F:X[Q$#f_ Uh6 P#Q]Zi0^8}h B=UR&ק=2G B:TJlg> WOѮN8P&D4 P#hfa/6ߌz;j}.$}E@D0. ~B˒AG^N2!(*P5/ +_ynwAmsl'"n4!7.2+$9t T8֡gc}g4 3c\ 7>':`[#ǝXY8 {(!5i ]V6ՠ+_AuVݺBnCt=ض !D'@߃w> Dƙ4lG[ny>۷vwngu(MU= v;D& HOkvڶ˲`,{ T( !0@"BIj*ACvN߬nEtT T?&CνaV=K/.uYWy?anX6,N^  )ŠC }DQ8T;! 9с>gμ{gO˷ui&N,{;]Wm:Uiヘ@D)-HCOv88Nz}b0]PF0wf`|w鶟7VX՜Vk*u3g~ssNYX%-m1 Lq&g|Ihpoƙ3?݇o6dNÔN!_R !HJ*@HqJ((((z@!#ww$ ΐ e !4^|LDfw:ӈ&+@x!j4Ҷ|Eg3+\ϨߢO ,;fQfNMeG]+h| yަաh%:&b#4 @eٰ,B rrJ *ʠ#$v8~+;t.9QO@u; [j?S?;l'%#:|IZֶj73>ͷh|94mޯ\8:ןFO{?Hl`Jttt]=_DAM[ߋ(t955VPT`6z.auVWW^o Mg|i1ov⃵*rϞ>D1%L @a7CI0joOsY9Cez8OGl>42,S/^}̛t ٽ=᧏zpgvy2e/oVGPu&;@D҆eP,P*U1=}N]S.ɓ38qBm+~N'…\L°T§$.޽wmhp5(I\?l?^ퟝӋn>= ɄTeP(T`z$ffN&4NX,.<DZ.^|Ez:]h~ϴ=]۳-D[cJDS:./?$U线VQJ(u|:'NĉiT(ضD(t\$VWWpX[[A{ Ac }Ϸ|qQWQDPh\n`si,//c~~?71Bhtx/P]q (+TA:tVgA?ӶheIͦ>5糗EXb$' @q1NDÔf}1B:`JB""J 2Jǁq! }]zzk~bwƏ ߹Q!gFb8JG PfGDP:vc]k{󾌹n7!mjP}8, RJ(#~aNugv#@Btp~Ff6ͶmhRҮ/@": U(e9<17XJaCJL P*R(DqB0Wi..NE'P"LV040uPot1_*DDi& U4.ZO @e@ٶgpMo$'R/=DDov]N1fdSW#_|焈hߑdDh7xl7SCPSjuu׭^zܩV&T"7upԬG}`Ťw:kVfIڣp}CJ o}1.Ɖ&w}OK ! PU\WAh4h6b 4ן}m}mgWnG;N!'i;3r <3Lj8zCG>Ba`~C hwAg~wy=TQ*peOC\F߅׽~߀˷c{Fjc8҆eكw"=90E1XA)^1 =U\Wѱ?va/H[P(Q,aGXX8ZA0gggܦh3tD?3x)\vVg`Y a#4_%DDq)տ%4@eRZ,S@P8m_qU}}A8@>F;9ȇG{* l7W=DD`Jy={ -J(B 7ݸ'c?>}67 @ .H;஻>S.? JqE?8Gk}>q1NDD帴7f/ >Ml)T\BRET_EMX[[Cn!XX\cMvu^_?(DD{⠇R{gq!$lI"J2*)ض>XXHٳ=@3peW˟RJ9U;/}1d1}h0%uZ| ӁQ.WQ.Oaz_~{nA*.]ZKA Ayo=Jq]E˲8ÌDD[ ّB²$\X,Ckn'Agއᇿ+x:lFC: `P}(8u{z'"I2N rӴ[,S@XF\Ez3303s W^zxᗡҥXY'|.]BC/s$~ 4aDGJst'hOVmX#mP*155)!}z𖷼i? 4O\+x/_\q7AJ vizf (y]W^tU5s\$g0Y\j=xdP+055S9="'G~KXY L@!,s$oA=#!'фȆ[m'"5n8#'?y&spQ(H*9rxӛހn-e^ ~?|Je Qbuu% ?W鬡 Ba]dZ>S`.|q"":,&]uߍV~3t^(qT݀7G~ny޺e^kݘ@_\\kez}~?ફjpI<ģX[c]ݙ 9/=DDDa);jKέo}O!`XYMZP*MX,qa`mmkkkv}nm~~_aCDGDs˼l(O"#;?;x/{jNORi0#!P*UP*v"X^^ ֡t73 MݸpBG Sa`>y}>%"":* |YXzg}g1\)1~Z,(8@ @BA˲Hq {B(BVA4FvN2Dǀ!$":A:t|V%a:p PFQ44/jS4Οm-eytsˢ(@ض)-! Q! #nb ih<7Ivk(CNC, q&ѡf|d}gtb@sV$4UZa@J A} 񶷽ueKʯcӭ4[vTl}U+sxx8wu{ı~b]8,="",&i]nGЋ/i)35X)}jީ-!" Ћ/)%`wa'%0\y*h|~L-nNCNIty9E=ёW,]ß4#,, Qa~] /HN9lmc4D1Z~ROdu""""ډ|cxϏLAa!:D>B\9 ,*@.*QwfvvvdHYZBܹxGL?o[vpwhmw0Ztv4M~ٍ#(1'Fz&xo39~8ƺntQ77xn}op2;f.|8P Y ?~zs6KX*WiyjJč7ހno~Nj );Adt_P6RHlJ7}E#aZ1 Ӊ] 񫿺]w}hоs\ZmdlQVv~~~0int <*o=7>ahsnue!eO߇F4Ӊhpõkqo8軲NtNXj PscYI >h*/4!h~ۑЕ9 CײӐ3cIDDDDlEgh`ݎAn1???""""?8}Ծ㆟tܪQߟ Rޠ u{m&r_""""&jm&-8=hRN}hFa(r P_u'CN""""@3_-:.{/!""".&5{ =6 ?@MKB N@rutTF$ >VsP4փ&""""m{NnX3՟ A2 ?%[r*q"C(!CQFuix6z"""""OZmnxO`4V7z}B-C$}aAJ,KJ)ՠ:gI$ՠ~&i4eYц6nciii= @coRDDDǙ@Z @5?`,˂ q e3D>CP~1IDATQJP f[e澙w}{t:;u{7-n<,//c~~~J%[iZ#[\|+44S@!r`Y " Bmq!BAAЅ:\UJ"!2~*8?! ?o  [XX@&Cv4[F|f7O"""׽_ ?u?BrbR DZ!%B B) X!/Ii53zZhEz7":jj _ v~|j&2mT nj0??;ADDDG^|$1 @mQm8JSBRE2q`Yq%᧞*DPJ TR ? g>mО?DDDDDQE̝^lj:;;;t%OKQmn8}4ֵ#HݳU%^)}*)2*JT.)8q9N'N\05u*(Q(TaYeHYEm=:*xb"""""hQVxs'`jAJM4hُ𓈈\44:) Ri LOO\.²8T Da#B,!B"L(˨_O 9}UugtMv{(uu]w].\>|IDDDyCuM~J! ) ҁm;m=) %l;e eR:O}a85\V~y+pWADDDDDZ6lZfϝ_f'x5އt{NO8Dw18B' @n&Aa>Ovp ,Gv3+?}aaaǷ)wDDDD[pkJ@R [Ȅ a!znN>VW*Etzv}z!|?BQ(%tڻ ?൯m$"""":Hm,--x'Xݨ׳ՠJ ı1^kk]v]\ǓOpU\N^χG8WfӶwp>>DDDDDd3?0 >V}f>.<Q򓈈aJDDDJPAAEBX‚eYBBJ )bqBDQc=~pu9KDDDDD(ZǠ[,BW~ [iQrd[ޟς>?2"""""$ODDD~gμ@:>T8E3yL#>oaIDDDDD%""h܋fTSJ)Hq"HJ IKIJGJJIKa8y"Ֆ͒="{MvV.g)Ǘ+;-Hז,L_~NAQI!ER¬"CV1NLMZ)VL $L`V0{"eyeg :JJU*[5JLGU殖֢HVQ?ާ>حѩ1͒fX9֘&YF3U^FuX6m]}G1Չ93 |UҪU$]nnCM/OS~~>&   .y݆i񍪍&v\mu:ƑGLMv|253Θ՘lOv19|y-Եl^Zä́UUКij}ZhlfSoV6¶vʼn伲3صs-[{'BCSGhGfhgWΣ<lqu%V>svu.֪MZ26,b&*4r**4j:*@LMLyl,7*us\m|GD\bh$jR|Robrv`NJA0"`H*hL֧uӗ? ͌]֙ՙdKd'eo޴gTcOQ{rswol m ڳMu[NO [A^i۝;OrR V (m? Yrˆ[EEE[?Xި%%Ga%oDDiNe̲²7Yn\^{p(㐰­Rr_bULp]u[|͞iU-x4:zccǞ77Q'z̚KZ!'lsWnk]8q/v=s}ٚvZ{aԱC) _}ABEKr.]N<{%DƞWzuW8}nX8[[Mowf[@;]wv8d3tyoy02*|`a׏2-<>+|"ߵ~o /ۏ?yx??'󟓟O)M5MMqb݋ɗ)/f 櫳/ M^̛oy=}na>|ZZ.V|R?B, bKGD pHYs,K,K=tEXtSoftwareGPL Ghostscript 9.22_ IDATxۓ$}5 h.)Rak+C[/6$ዽ'x 9b!# E@CX^pg`!KP50Tꐾꬬ||G1}D>f۶-1WT"#DF 0"@`D"#DF 0"@`D"#DF 0"@`D"#DF 0"@`D"#DF 0"@`D"#DF 0"@`D"#DF 0"@`D"#DF 0"@`D"#DF 0"@`D"#DF 0"@`D"#DF 0"@`D"#DF 0"@`D"#DF 0"@`D"#DF XfKP Dٕ+Ws"3vʕ  ˗/KBfDͶmEb4_$[/ @e 0C~]}(QDIs='I˗ P@y'|( ]@da 3#* 0"@`F5M5H]ta`<:88ܷ-mooO\t_6}G"3/<{η!0W\ lg$]|9mvً{%I;;;\"Iz=l]@ r劮^^rEfS$DTۺz*H:븼'|CFla`9L @`9! SEx *A>Cx DfHl&F>쳺rJPm̀$|rkPmsNxz;g$ 3SI(Iz$i:$ʕ+cS}@jme/dϩ$]|YfSW\&[[[z' X%#@z駍A!7@r''|LĝCc@j6lln "#DF 0"@`D"#DF$ov% D I+{ *H^!@{FuG^ !@(?Dk~"Ij>OVɫP%̸k~,۶t$Bv{{j?wge/ @ 0ye۶$9r+P%8۶GbUџ*UA {Ww=u:QT"3l@,@:==% @U 0 T{NO6fYN~v5QXNG++%@ 0~㟌5PqVJQmIVQ’xe-@E 0*n; (i %T z]JX*!@`=2:"JQ;4[$J @`\cINx8Y蜁x^}ZRT"3?$V JRoi~~A e,@E 0cۗ;0v_^O^W^O/HA̱ՇҠ2 VVz㍟NU@ yw}4 ڶS8h4??b 2!_c0+G Tq%d&(T3ۯ,8ڨ:P0YV܇~,p ޛe/2PyY@`¬n]"!@0ƲZl]Θ_t~XT"1ƍ0 Q9"`݉}^JT"F[KDIn]Wj}6 kwڪ/ YD^miX8,~x[_r"IgP`:9!|*A\4b 8W@h~M5:ᄏisnolO@HNBErLào>n{O3  !+/>^]Ӻoiuq5r 8zO"yfٚ DC@{{e/)yCE:? wV0JZ[Y!of j_K@E}ƅNZ]6zBaѽqsȯ3"es'y~q+1M[iC̰FFK@Uڃ 7nx(< 9C0YWF쌜ۜtvomޱ>| EELD`F57غ _ O;(ՅAܒjQC$cMQ" X-ձ#ތsob;#_F}Pr"Ar5t~i\as }›C-ykE6+I m"<6ۮ9A7Fs(,G_G?e @f" gY}$*_ov:A/ݵ*|}ږ4:r`Wzc!i~[[vugmyM>캮q17^W뤥ÓC}+gU?y!@f~K9vVJ{5ߍ\h9 a5^g5>Lm"IXYٱ9̥]بoj[s}5YmKOݿOǶA_/Gjq! GwAHނ>VùPrWNn&INㄉk7n KIdH8úop֗eݷ_pPQ$E.*^m"AaOP{ШR0tƕ=L[SI}&HK>a|˨;ttT)"D`FuUG@U~ʚD ІM &dty*RF'6E{ #omǛ뛣ZǭZG- .b{Jg.RP h4nuS*:%/*ίQ`8%eEYJ&J,2H :CC{{e/Z"ZFUo;c 0(-5@TԀ$HnragUaҚ66Q+j4abQLj:g\A3 .#T)Sҕ+_Sek`jl1n- dږVWEz1_sg,FE8U]㸃Cd~6q֐Śs-AG#rDv H|ꩲWu?cZMi2 $I෕uѧ,LCJC)']#t1By}p(g]9DϮ=VqŴV%p0F}CVJ>Z5OmW?䥗+:Tr劮^]~Ωl?nۘw}i1^r?G}+mԐ**9i퓶*T0K0kMzVqr71qW S3T$@p.x+K  w]MP|cI5($O5&MT}J #oΑ_WeI$"}k7.P8m LF!0C !pgmNh'k=ܞlbWhyN5h |=%U9kj*f~U8;L0NE:XDSV$]ɘt{li2SƲZ{e8gnzWo__?F"hEyɇް$#oNL<3K)U$|vmW@~.Or_a"\Q[ZGL^VCN#_գ~ukN"MZ]QxxG圪 Gmo=:00qʚ7S_@[RH׶6 U[G-&i~躜U#Öj!@>["(@3\]2^vxڿ;܉% ^Š(#4 3S퓶4W\Wa{9VuĊ 4FVUy:B @[)NP@jWH_;; /|Nt\7w 4: {ڊZ KZε;,̥®VbZPg#$Vux$Qk|͇|”$"':4W"0-mP@dO=%=q˗+#T#峰S7ڮyʱ7Й(xX6֪Yui֗S8yH,W  H$D,"0غ oy~nWmwvcz쾹;8Mp)jT]WFpTݖڕ^v9I\x@ҵ`FT-@C - su5^[ғ< J7P myM']V"4Yq$U]ˬòIUi9f ZsA"!b^{{e/*8c), A?.*J:VFۚSQDeaieE{x!b> g2LPπV߽ASûey{(aY: br ℅y*uݩ{6j*K0wmiM=<ܲeH{_@yacx?GhgN\60 X_{jĽn(e`ʝ 1Ӯ\xgg<8tD잼2lijbxج/׍KdE ˨R^kwo=/)aJ~EK_F[-G-¤r<06Y]ضf| (y`Oo=Y98;זP3uݯҫ8v/1mCm6(d۳YEn65-WS>vqF&(fz6bjQxtkHuPJVRnC?{1)D .*,TL8vw_<=lFmշ$w`@\hx0 믾z%}:<Ş]Hx{X̹ܝ0*FF#@ ]' k3 1W+0 @Loa9[*Iq!FD̲Z~*Κݟ*mk+k:<> {ٯzkҠy?kߜXIfpZB?Yq*-3xVF儆Ʀ-!emiM=iYʴ۲_Xf}>bڳq*7%em9q5a[UTH2,'s ]SF4>R8!@re, T~AO .7Wb\}uPaʫjϹ:VmU$%$<)C[5rU $%n!lX'Vf2Grbu0˂BE:?Wh,Fp+IOm=m-qIX85q^Aa [P aнg 3֜CDߠT#j&SnjǤl۞NTK/]+{ ٭[w#_գ~`F8%BŢv5VQTFېÞ(Ls>֠p9ڼ5xxҎKLח* V6\vVm4n)A5l/U樁|*E'sR5&p5NA'YT[sMT 57^3GDž8 [PO m5~moKip:.{sㄇ]e):΅|=4i#K+UYJּPʦJFJ9n޻͇7ӯ#Z:<:fiNk4ݯ3lm lev#@2hCJt*Nv~Pq~ЌVexƯsCk'NrᰒQ;Opna*IxEa&<&G\> t!f^` i-56BdZPg|CoW?|@kUPxָ6?WNV8q`p;*n!Y1 F+â W#&>d=eU%gŸ!bomhV!D {8obV Y(W_3ݛ R+ik{l*ʼba!qċqSV~*sm&ۖޗ<'9/]%XY5jZXqEU?5!2!@R/{ i p]lOV!`aUjUկ:ɞo|cFd%XU  MprQv'U N,>0 E/ǶhR6'ZRT#z܊9U~W մ%UK "e8s*V9Rpx ,AU[25^Uى⻽*<+cRy@7ЯI`1d&X~U#LѢ+iKs!^ox cVD !juY?T:w E:#.CW4g;ضhJJ PaV B|CDG/d=p4|…f$n Cp/1RlM{_8VfaMf[+x,,'x-ԹRͶ2>Շ΍[GGjZsXgagz1G+cXndSu}.Ŗw32c=3<0C_YĔkhi# VJVkRXdYZ]X/t,;+{.=0YvE]f0sY ys-aUag+ߞ̜ͭh({ ;S [hKw>z}ƫ\Xqz̰-p,pHU A۝6WoH8/D82ɚL;fj΍~Jx(eg,;fW1nqu1z#sQזm/Jqwdi{VRxf 6^,Q81+ZډPE'~z}ŭT YVd-}gvDx(IևGXliuuRpUx|C@/3q5z z=0CבqZuJx8"LrKzmsg;n<B%Ըۘ*@D{:D^{\dxWm7*J5IP1fy O<NJreߗwg$u=am6鶜E GUƶ䊆ޗfDs0vE?Ka?}GLD_9ץƃC) vJ혈*n'*D3Y(8lZUeTWć<Α+Ght~|Ï%z}=^hXW$U7=Z~e6W7btfvL5T!@XVk W/mI&x:::ѩ$ɺ WCE|!iuYϘv'FS瞼*ß '6Wص9o3BL;5=c ;G/JxQ94h[tV"L2w'y9mIkE> 1"we/Lveir=|y>| :j= -C7.(j벯[s:zcI 0N>nr{k0< BDS,}.ӪMrY!b1&T>4S{{j}G?K>[@b~ە?ٹA IRl] ,#kTtBŇC*Sr '<33c;Ws6_5^J٘`anWLz۲R)4|θ&B1X_]B sr1k|]"<9ەOzǃxk˿0 qf<Ó#cZ}1tq1<9^ P|:v+Z$-mQ'~lZIЮNL86Jx;s"Ε,{ ` qupy~,sW/4tAu(:>cCN_Ӯfx("4x5vQ+pi4nuƭJAXUQDy  |qB?};ԣ￉>g ̻iJPxJLoR=Vj?놡af"Q:/.=tIK;'w/9iאB"-bRu8n20 Tf^VI̴CIX'*Duø\[zZߔ$_::?0ۖc5FIR-j$UsTZxg!bexz}=B$sqYh`0w"@e/L 𽏯KlIn^^XI/8 \^44/qraнueܺO-.,_{=9]loIBC%;iG *Ղ1z 4_UUu+ZWҟ𢎙(I^_uaPau*oOMUJI{'p)X5ߓnť%ڶVZ"uI#S-t}OϿ|5d90eXTڳdZU}?J9M:g4cg t|+l7YW!髹W B$@L/{ ^yEwqس{V玱`Ϲa9KzO:?F4Mɥ0י&|bMە -|7+p.N#]yB$@̲_wo@w>lW>rDXq$0>m}￯I Kڝksz`Nw;IOǟi?Unw!b-Plo7 Ձa!h_ûֲwqw\^swthq=qv_6qcxDTX(9/,Sܜ.ztKQWǭc5 Z/l^'\VѠ,ʺq{}pP(ʜ7y t\?>0(,tXU J]9ʚYMR>=J30^g`85?Hw^ל⢎mv{մ4#!I'{՜=E{I+^(D9bV4)^ 60iLFkZ&gB$n4an$f=^AbfU O5g^ѭP-J_XT_R︫mk~eu:'zdwY';ԕ9-۫ZWQyJ Ăs& GOSc.P1ixZC@mʣJŴa5z{inaA9{{դ~d޾,InK }*ל]Ӽ=eh^wx֬eV]mط/5V4U!;BX}.=x))Y)v}Ŗ˴srIr;XS-F`VhI;0?C""fe8No^0oY <,ϯKSZ377ϫ۷[kskQK:>>dw{Q͞Ӝ={Qӏ4p), & ܪxfc&2xOuvdY63 !݄,4'Z罥'Q!bĪ?0{0kޔW! ܳ[g+t2k78L}8g'Hg)ݾ-k:u5_iV$[y`=<<Q9sԑK=iΞגdnj+9[+'X!a<(״ya3g-y< ҄e w"-Dٲ{YawhG9tZiB$@Ĺh({ DwZO@{Z}l}/O{w=h6]X]ӢZ!b^{Ҝ^gy+N<\06gߛ*ius6V6"fa9mi:_1pd&=bi]K7 p{מ*DDk .0^yF)Ɇ%G~t 8ߪ@F O:ǣ9ܼlԷj5--.ia~^+~l}ak]ӆ-/uO9k^Z^ZQ}VVU}?)}C$ﻷs",(<{[r<ҰiJFML0tW*'-ԙ5x_Wʮ0^hhh_\Hs˲Zj4n PY~o ^:?*@7Oegbkћ,/hyqE'cvOF < yԵmj/ִ%u=ͳu,;;ΪOttz|~ Z]eH Dksb}Zm+ytvԍVg@NE@9y}izskXPXy6H4<1܅6/lKqk>=J[=4!J(Z0ñMn i":qD90+ˋ+/m볿󟏅axرmuՇ4Wz5--,jq~QGGOmrJ%ɖ쮭iGݓǧ3eWVMڗ^?՟_$YϰոPQ Db}lGv_qHc2u4emqШ!bYAbm1DM-s+aj:o!>= *ӝ*DDK{{e/^TO=zYA0I-=By577-u{A-&ia~A {ڼhImMݓ']wtCYэWֱ;}PRKzJ66EQ~Aۃ#;6)d(&^_x-75X8wغ lyz字 z+Lfg"X9=9 RBkj3s.%I sZZ\’j5X~e{bаhA]sw=m[?1~>},*T%6^}Q{磠9ʹ M҆YU C9>cݴ g"m o:2>꽛nE\M,"Rr3".0[^yEquII[ݏ@xV~غX^ f xH/snWm-tg#iiqgmc#<&yEiLKtcXݛDɼ= wc= Hk7H3O`L` ff ?8؅^x`[ٞu"f8ىDGdj*XEު"ٺPuo{yy۽U3huyιu?>8Lw~I8_']y 9YCC? Oϓwp/ƣ/ߵssX|H5*y114!uC lec|t&$" @uuX,ʒo]ϏH9SK}¡X)j!fyOϜH"qjh6w(u  {]wYiQP8F2X"d@,MG<${mH~翀_>~ >4>I fgew6ϥG._>r1 HI8E&ۅZ@hDʟsݨC3ی %A0<>F*<ע))c\@썻*[m( ;B~V|-D hY8WNMe  S+r!݂7dLF SP- җKCʍ>S]XzmBo߆~s?qX/K;r7p.xq1 ]]sq_YU::FUZp}=#-+SÎʂuI>*&H2*b-=yCG+#cE'S7@$NN[  "0{BʲCSEѰ ,\_|}K+O='?G<˟/6vS8#`sy.^O3}+5WxX`*ɇ agd ݜMr.)(Ry<1Luv!FL f#ɒR4XNc朆0fɅHDbںCAq(WXOb?nL\&rCu-h]ۄDz VHI>^麔 JNNhLӔVt֞ݤ[اs}yL6t,ۋb\䲾W nv$ARd~ z4eRt9Gu@"1t:] s sAla<<k rgͼѤF#cŹec xxs3ik&ai|I&q\*&¹EuS1k6AK%GJQ<_:KK-sU^SdF!Xuvٞ1au&)> Sf,.J8J"]e|ZpkrH"1lmݩ{ AA߄ۯ?Ƭx ?qTu> iRNqȰv.OCr6Me&.DP:+e"vbZůٍZxEYWР&6 | zdk*qo>򚄑_ HZ eVEZC}uB"14;LAWv^~pxEvS]*|50Dʰ`4F`j\Cw.D ӹ e85cE/`ߡ]U"JܥPuBQ}šE\=܁kMz&ko+Ln_"=c)w&#8"L"1st:]h6[uo  ܾ{^})]PGn`0qg܊Bk1АKZm<N%ŵFFbAV Μz<ߍ̯_ %+,q}o^+\a*CWց4p9y,3aop 9"8gU}荅{Qǝ7ܩ{ AAxwXG"@p*r+s)a1Y&vpm>~ AT֪X4}%ywD1C1-9N8Gδ8Y=vq^p&t sE_PdP-OSBiD8iGhUC"1Slmݡe 8exF4KGW!v}#k7Gu[W7!>_PKK%xr-D 3$]hx-=؋p: NfO>dekI )"t/EH 4f`ג}8Lx-9DfӔe!'SqDB%  Nx(@-QQ(7]!r8b'7`$.WN3v!2j~khc:6nѾi+86⺇65 l߇[p j!ڮc3_*Y5/h)k۸?i;2H [[wAA}FY<}pfq,oRMWTT,1mXw_ֵ+62F;w a~H:2 ЎDK1:%M| G-^6|8uGXɔV煌eG1^X Q3ǝ/O"%'kQ3v!Z#Rφ{TP$ [[wAA;z#'`do$tMn"m=^e|)7kv<=Dl lS]{>څS1:9mcymmX תWPg!IZ C)P 0(!2yHL=LABCV<7G)5H1'/3Fdž+%R嗷PAqO?v8v!ZBD>Px.ұ9GЩ<𓵤.a༭.ªqqaj&]h2h"-B.M\D/f(֖E?i$ SMӥe 8%)c ܈y'T CW7Q@U3 T v,{: $w:Щ"HBt\+.OCXNQƾ&{isO]r%^ u=)zu~z0|f>$AY D4EШġ Y0ZHL5N[  y2$"A1{Gpc5<k`{qKrpy{_iᘂCQaW2HD|pbd-EZ}M= R]EYWc[9Ӷ.uنJ5FeT("զaWpqS})ZOO\ArD1V!b FqҘI@$fs-AaAr ?J&DBBMJsoŇݸqEݎP9 uRtXk6;OÚ5&Hxk!>#$xȼ+Y$^=sGࣞ"8vpB~}̈h-My*|x 9O8Ep\(xWm1HL.A wZ(Hnp&I(܁H"^ 0<(L̤{D 3$uǓ{=gxq f8\Õ啰DQ.gnh'r@g-2bƖS}= (\׿xc'`$iCKT)Dv:.4AA!ܘHQ7>R< u]7s @޵? kA$uYq-VZIV]y \BCWcʜ 5E~RE)VMX"e {XlLbecBgcx[ڏNdƬ.<ċXPS߫$ִ4S!{HA;7`6( a>1XҤ-ػ)q:y+#rϕԥBk:JCTfu1_Pf~&B!Cv\BeW7ҙl + NDXHatilKqDH2q%N DVԽ  5B Dx(k sso 0c3O@<8ݼ:եK;ˑK gmi#e,umZ߬?5ɄPeRT@D׭j<۵@PD?u#OGzy4_Òp ( ? "qtT  fx\ nPȲ.(q':fW!qa~Q!Lv&z=' \lq\ʻW.Da#s4ۺs>45X K8g qLn:@25vN7XK-+&{Q9u=4j"jdbHRH"Q LACA<(hi#bܢ W A5[amβnQן}rweD_1f*+V$ lP2AA%ˈy 3(}ް#R$aS 1>{h^WtThh<ܼy+XsaZĂuӅD6t$q&j.Y'mI:HTB%  fx8fx<7DaQ|Ν.qᒸiyGZ{><Ѥ0:¿.0uY~ q!8b,t6VBQPH-q0<,ɫ1 ԖL"fsR b7gz6ܢylͥs *}\xxNt!{(p .D<7캾_51u/&'(5[m{(uyey *$#{ܛɧ suCkcIXӓ0hi7>?3Y}\=B QAP,Nˋ1/ z?ԓL"N fmA!A& 7شc6th)<čqN*̄M+a1.ZLzv!`sO^ 1k=@"bnw6p(8y_+s!ًwg$%H kH7bUT,Z auPN< ߂G2AQtL-C+aXeD"N[  BB. >Rmkx<ȝJon3؈yҕ덿mm~kc)h '?%w!Mj!a(/mu27C!YZch7`g6|m"ZFDd1k]EDOABW j<.f}I4=9JX:ҘI@$uR bJ)5 e;&[Ti߹V"SS/->\\' h]^XӤe|F};#kv^uJe k!^""' 1I~n`-j7`cyR1hO68r=kt#t/cbkGXZ[&}vg%.(Ċ#8&WqH@$u-A!7 zO2^M-A& ܷ*ZR\kuCP맻Rh cZVh^VBJtL+u9TH0YJ}& sltl~XŹGMBP zK)EcsҪu"}1ۥ.-6%ju<xwa\8+Urƿ2X)'V&iBdz=PSU1H6b2cN=OQ.DW|LKGuf*$ P2AAL_{m 0'*條ꓻP8Ǒ!Z8E YMl܋KYR2-v^.DUaI?)8,㹸ph*M=49,D|{1v{,K r ͹S498"hM^"veG|HykUEŮC] D J]& 7ncP%Yx(-< ~_yMh}~3O]֑%%s)l^:"66 sĔs!jC(ViaA^p,<#"9HIhIV.q *GaA,D Rp݈ ʎӵ~Ʌjs*#rS_QJ8,/R8WJĩdkn[  7`q3 )@+=7C hU⻢fGM j"y >qzP]'yr lmݩ{ AA0C'`DrYBu3ZN]ֹ < {c:s4܅&8-؈QlnB |GcQnR޺!OcOtq.*{صl|LUړGWk`LoZ,_+&>TӖD٣H@$tT  !eaMcჁ\G.('9$EAPґ9;2g{>14@r¥IV'de^-DlN5aҭLyec3KeKc{j(ĜN9~L2DnTI#$ t:]J]& )7 5~*nN<ӂP!ӌby겫x1uپFQZl \dS?y <Sӻ*LDzL<K &53ċ8Yx))>[ |(( GqxՏ ~Jt!)ԘwTpD&Fѹc׉6Q2OdTTd 7ylԽ  (.l{ß'~D>w݇?٦kBdNj1'"E>,ܕ.+WG53~20=ML~dU>T5L/<:э(rb\ͭJM |tea^+Dy%!b=2ex]:\,$ F4;LAS/(D*݇^,ӝQiM`]du>s]?"Ewi{յ_oMD>؊\,I?ӂE"$\xzA[VPE 7 ǻ]ڬ/_\nl%)y >Vϊߋ1nV^[a'B+s{?&\P 2TB$@tlս  @,&gT,.C%ڭ|Y4l:'WOѰw.P&,Rus =BA/ O8!XWE2Z݄ރ+}V4ue(yV(* E1pxIƚHzK"1-lmݩ{ AAxCÓqMDJ4M`Pjj2<8gc+byrxbsZ IDATB9h(TGe=?)D^1P<Ch]xV-A"BLd-!EDO cG'f_NL$NR$ΰƻ cuB!!^Z+WpDBKӥA1ݖǃ8$܇,-NtLkU08ItÝ5MueL8,Grs,ik0|#y{j!fRx0Av3Ŝ6bur-RD?k%x|qq\(X NjёFwcaDيQ,YХyV!Pt)u  x8 `_Ɗ=D&Z^%PG*\<:eeC@!ĀLP>V󚲌qIW?BDL [d_Dthh(nR O- m vI5v?Apiaѹ12[A !YFY&6,){+rH 9e"uCW&l dvN$*QL\.9#Hإy$)v$ 5lP2AAWo۝7G?P5u̧fnaO.t!1m¦.uIYVέ!d?yj4ұta!OB |Dzv5( _euAM˯i4j2EXy+"|_#ఔmҜ DBHӅfU6 L9BPrGcB<~ia9='~MXwZT=%(U`)B y N%漽$'cјoyl}ɜ]>܈yʮDzD[ケb!2\Ms_62vS1}ǩ!g'3a1.=Z@"!R ^20LY+}\L>\u[)cnu[Wä́7cʲ)j-]J_b^4yuÉF)!xa}C566QY]W޼:]KߚN ouE KQ؉9cGQ1wH@$Jlmݡe Ygᱦ.l@H s7?:b1JDҗ}nMP4b|udcZGCyeL.{I)N+{Қ!u5q憮O+F5udD=_.DO`җN=}HNC Be*tS4 =c] 5Lڭ^S8N$IBvDy}A =#ۯ/|udƢj$R'I_ٹk9-zc' N1ۏSfW`.%F.D$dQC"Iމ끃D"gkN[  3KIT|u{yڮWh|c$VҬ(rֻ-}8\ %=}o9Yngv;cUx3exMԭS$G5t?#bٶ%B$f3LM  מ+@t]Ƥ*pt隢 ]sna!uY_&ȡ]<)_L 컹SGf:-%'{W|=a'Y& +'9fNKLD\%qnJlX#1$P5C#yZ밾*v 7:>GRK?JƋEf*I@EBV+cǃW=݌$ "IY,r  ]6qa](jOg:U&6NDip b^5|c<<8)Ѯ@n;-׫)LG{ "{v|I@<4;LA5/@K+ ݆hAA$yx$ *23Q}zMpn*Ցlǧz :2LWkO>SEydY4V{ F̯CD58Cau=<^hRyp08 M?{1y 6_H@WYG#~H("Xks^y'ec6Sj+؅hLݯU65w+n,N-T^g9ocXXy'dD,Ի…ٹ- ȵ802q#M=$ !P2AAT~c"2,)@Ndc>8/i}׈2~;uuS:&9J XNŹIxR^ %F֎A%P?.Ȭ98k㹘y}K)^RuO__(2qӭ]6-)S(",7FIG܅+YA9 @R;QI$\G-.%G#!tI<$ p8d~D|vTT>rk0,0<[7Mi2@NaPK/"$ .IU-k\`pX3Hu4ʯc|npMMcy9C 1=G)fO빈>E,♿wt [[wAA)wџ>a݇9>>XWݺjkkw+کu S㌹Jx~\]:&$ʱy ҨɊao\{jw"`1(8M"bPGv?uS.?kB 8d{ï(9{;De#! u-Aębon\8P'*JS=~-FZw]V.].ІV0Q@xA1ՅZ"A,4NY(J݌U)޼t*!T!"Ny;^Ҋ5k\6$1*0/̏CB/ne/S_۰.Czz o*OE+o$\te]nd5+`'CuT;FOu#,{j#Z5ŹnWfH:"bU<,: .ƒisdL4nˏ" fs-Aę╷_4ɲ(s3߹* XS zhf-Jv+O>Ekuud4xMsq`G B |QheI[9>F!̍ t]7]!x9}v#?drBƩ@!SJCAQ!_{v5W Ul <+ZCD=tLq! xߓHh\Fم(IfўcZ,B)B٪{Aqf(77^kzrf%7n7ڔTCƏǰ ˫Vex>. f NXFHgKu#e]܇XȊ^:{t#ѥYwY#AσhLq="MBC6Lz,Y9~ {HAq5xr]lx@k]mX7{_}xf1*Rh]i+x "RaE Z[gV,OP%z y<WUuV"r^h 6pRNY\< N Kp&E*4R!񔱵u-Aęao!r7a) >1 ܇*O&vNTE\۵v?.nB܂:thjJ㝀.HIF \mZ,,&'I0)Q‡x-:{8/<>RC kuRz6R%fxD!JyrfaT|13\X\_~s$GHSDӥAQ{p-&K7"@ӆSR) ?|0mɨa-hpU2cb籘]pD$I /@v`j!.B ZBv]6]G\D:Q7&E<sF BKDtX{؅ֻ IHYo=A;[#nǴp!."f B/xjtLA!y'% qVMHl? }9dCs=^SeuQK]`-! KM.Do6⢭:Ax2|YSC^"-Y^˕x6ـGG_F>\B$uIvͿ|#09Ҙ!G$)~¼WwɁHd4;uo  /pDvh qڴvyu׎=ynm>)_?*P^ѣ$tڜ#vO6n !ʅ܅xqB6:ϋ}XA^[N"k$X\{Ѕ֞Q#8Q/-(їG_iĺUzsF߷{.9'絓 }Y3/kHB)ܡe ۯk1 p44?8R:/׾3{x5L|Za=S/乄NaQ-T-0ŤHRCTp#: m ]XMcJ37{vtvy֬ra66!Ŋ6G /(!EaDlUzՋyGm÷f|8ZbH@q:.4Aᇼ@kw Fe7->k"uMh}~SlScr7w2;s şm07[T">޵G5H@q!AAT+{=xh-E2 V@ *Xt{t^?]axx|^P4834f-mqN! wdR~bbڇ(47&̜pC3HU$L8 +5sj0Vۉ4}<lV-h'z"Q+2j]ח=fkN[  3.T,3u 'ƂXw h s{R ܎9kvܺwM#e#;>Pn9s1v!qq!DC['>KÙHKAnDmڴ%u uT " OU*-C&&E8DFL=`Y1k#gNKu w@]C<LD]$HʚR08] jQw&9uT8tu&ںDCqg$xNQcQ+.S1`܇3.4ŗђA8ȋZ ŐkB`G$Q1e8TvmB t)u  *╝Fh>x('Igm\޶K]N M F8Ck"Qk,"Y`W8Y ݭL\LNk7q( 𸊈f1;B|z󏵈j2A>,VLZg 1./EVP< TvM̼Х-&84;uo  hb@u<#JgtUc[r~ ⭵۹gv[PD)H!+ g:O pr9z؅hz܇*yܒѼ|6>*[pD R+ك)X8v9. lb/4zmrYA1~|X((##bnTH@1J]& x块`Am IDATҐD:t }v667Wwޗu`}5*m$ʅtTJuEbf-*0=eqEsujR+X*oh󌉈>q#ORR B.'IƸ\ *|1B٪{AqɚL|Ӌ=|XbҘx?g,1wIn,>d/y"{M~53}8U 32-s!7ypsU9H,S N_<)R}ƔE]Id DV%Zеih.p:8CP2AA̛xmJ]Gg9B7<L$;x  ?Z=tN]}1%=͚lq-Dm2}8u@)SJnL֕MmS-1#ֲMeM˧`[51ݘ= 1ɿU:!qFںCAQo_PAO&Ց;}wqN4$K]n]- Cf=u*NJPQרŤb>b9PVz4I]@?kŠ\͓|>>Dʺ)Cfy:0BXyHJƌ]˄:F=znXL6>>9Jr1ETB tI<$ (4M|,+jR%wǹ/g˭oI]N>'ĸ>0N Ϻb a]" HB[ю=g"F5ysT-N&ou]XFZ-k-+eV[E;mlUsq|>x~)VTѳ;ӗfu-/O^{Y:;A糟b{A)'Ρ'LhaMMf-"0nr.oo˭W:ٺbHx&6Glf{^VDb!*: Cۇx=D >c~+ˆSXk%eDeFݘ- ΑP]xaI:+QΙ/"Dr {=0E\X|s;Aevwſ Tni 擑T" |}gqj던G.ֵ[7a=I$7h]x-\]B B|+Y\8vGT/Nʣ>Y@$c",a/<&⍔9{e%?O~(}|>rpɷ~"B|` 9N{&_K/ypc" w6fi>q.{px6 &i]`S3K&X=Wk]z:]<C<9d,Qiڅ(=мR0J{p݇ޘfS2 sOϵ>GcSHDĪMQ(vbNB 04P8: CMTfs-TN ⡈L|:7 _E/|_"A1+xp;06xɱ`n*yx(iKّ9nyL`U|š"IixUw Y] !k:`p*aש S֝3uyQCYC_b[\}AWy >_z\]yx<i'OzQk4<yt|t; u^PJOHĈi."ZIݕy%)_4n[(SZ)Bb\,yX6os}:Fڍ 0qLDS$a.,.Cz & ؜-N$ NNL7M>ԑ 7`$&|ዿ8rDHq*߅~/?PRB[wuz횬EREDztד ]h}~S 7 20BLfI.`2x ȂxKC}݇0&Ȥ Nu-\8 gEDdvn+Rlۂ!5^ 5 #QzFP]|8LZ18elmݭ{ g6 ZAL$ NhS c"s)/IƬ]p!:bfZ܇06bnDJt'镦J#?#b?}jZQp8ʅok!,yԥY(1:[ww6h f+b0JB#7O&D˱iÁ(V/ԝj*xLJ04Wyh0T>5RgN fK?6_n<oɿ! b߅WvԕvsOd}F>9c^VdΏTݺ.. -RiH<,ܗP=R_y曌 8WwQ/Qm֘21pŠ˱Bx=_)Z(G,EFHf_3'w9rq.^ KҤ\pĈ*H9< .xQXNj)ܩ{ SAK#/Լ ?!4Ï[v  >5+R-J.* dl\D|V+CvA}憋KC۰v{dhSUd J tݓcMrtHod͕W`B i11,,$@ONU˪f'BSb)J%sKD4ʉЃ kXAQPV-^tyqx6E`jމĚe1PQ>׶O#W"9 ޸K(2݈X(IWGz!0#K/X044py-.W纓NEdז3FE.P6T yQ}C^0iv2bR(MWt:R+:'t}:DD5V1M[$Vya㹨8'E"`*)_{a) au;1X#\&8 .DM o|>>wv[;׿/j$8-.UX| sGsͶ`3ksR ]Z+nR0qDD⠥|T+`~>M"wc7#K?묃.PH1@xiqMZں[,yfÅ!߆v zprr 51l}IH$]xXwwhٓ:Mm*գ`kN[Z:L_7fA>Ë8WxJ$! w&Důy 0ul1J|͹ l[v^G][WGBN Ԧ#?"Hx3ZOغyzb\oRBL˛F329 ކb:C:/E<fH m>u_U~,}|Vq*OH`Wi8?X"zb]?:oeLAB_lQr:OA.rzQYka=x!2 ! ;)B]0g^.>fנ&AE&fB,7T}8ܧF<: Ynw"j+B8\c*S|\~ ^i ^ҊCyu7'Vk(z.N#pqBd\}y& Z'I)(DbVŷkizb:>cKq ;+P0ےǗtѐJNS߉ ںSfg?|P^\wނzprr #0wp8);>L|5} #{Lx ] vowPn˭S>EbeSGKd1:nNݒ5瓧(9^+sKmBܝtdNy9 ^Cc D89B%$VZ$&3Y$UKҙ5slaDP™i օ ;xA X=0% ?ձ3Fo/Gb`:.=td++l6TaDp,">#8>>~?;9s%?C|f$$H!䕝^kmana s.tC)cX4t0^x8o8za4˫/]qsP))꫸i.ݡ~q!C!BkZ:/[W߇c>2F,UꊡH+cWqq DZ1wXIBT8++#ZRGFBLdP%u` $ R'p$"~};?^/wf~O|_ #A (p7` gœYANV+]HWw+13myu٣ Mx$&LWjњisrJMLvEb@͝pj|s8cqMş+<Φ.?ħG"A!eo޾~ӑN8g}J'։|.BܺEkv>=E/4U؈l<+~R`,DnD+b'.)YmHQ-DTA"Xc+6j?^XPv!73%GTj tl"kRFdGD:ѯ~o, ~7`>7 Ag߿!ئ6^u=q4։h5&Yݼ /rwסb=)5_ʎHiI?:by ʅh',^[G@춭teb(aP`F+qp!rJa#Ϙ(C]x*6@]!{\q.D(/$q!b 1T0,V IDAT"[oXD|Gܸ1iBB"AL b1@*v3DtV u0ӈTnuX1/g% ѩ"0qb7'pb'O!^a~n/I?)\7n zmDx c`HO?z)cDs{guaaa!~ *f/X-ta$[8+V7UD&NDIG2L;s^@$Af&/$0p/!q}Pvrd2e1" !bn?$9}z׮?kWg{wZQlMK  N&א)\.TWQbBCؗAdxK ꒾Sm $p 97K8 q 5Nvj鱹?.Co>1Ba{.\[RyHa*د%mԴ̇f#di% vnZ<FҋNf.vcB))yZC>4b cP *Ҫ"3ا NOL (J?D%mg D(wP="qG3b(/k?4ϋai 8wέc}/~Qǜڛ& _2\ XlBdģqND|?:;[4 FcI7'NX8ܼ"L̜I~eT/>*c;,@T!:X+:ZF#<<>oY܍uc,IT $2. Ybìd:>cJCqcᨬ= 1q# DžD,lo zݞDQڹ ]6k qll*ʲ>,dd2YojO?>bAH4>Ke*v3~6C!9IFgpOlUԇB8 rS6 _\pXX5vY}ceg(I me"7i_ß45#6 amsȺJ/V^` 1"F=kPjoͱPZ25њ=&ID0O,U9XɩIR'ӄZ\Q?9$Tf?I2d3a\xqۇ.6.pGDf\{quX[C2cۗI޼oKAE/ZY{{{a2{.<kX,5BK7ϴ%Ԩ V!Fa3+%FܖZ"Oښ! CQ( Bb^bMmHD]B/T)۸[@cKBM@l6EQa{N:S/m@j͓C2q KWdϋҥJTyy+=<<^'כQrrC6 !TYFESv_2O?-oh">a]£6EIht1Ǽ~!u,dI`Q!vm4 45zh<3Yh!5'n<"jq1&D" +D$5K%"ѡ%Wh`QX)(JJ;q<( 2"yBBfYkMO 憍w2q ټ{n;DHk2<4yge򄛰r~A~ؤ2뷫*oݻ=$v_z1>PK\,1m*kgH~TlXc#O$"B"KNJ(Nx qAq&~zCQYHd9s ވ(H\|'U)jjY(!\R-XZL"q '.\pネh6 P]z q؇x&;JDO~ᏇǑB~P*DtrϫNΫ},GXc#Ǐzd?9n8pf޸=?'>.h50>6Db{"Nq5AO^>e#4 q%"o۞?څ&&016czrhbbl<χΞLL;kS=hry;; 4CuN_Py(= S(^z)M$9#a#o\C 2L# ȓM7_ T%v?SN TC$qZ(ds11EDtו>\3/a 4ӯ~x#})®{ED"7(mo^/BO\Gc}&a0$ deM1iYQ@!Vk(w =sߊ+3m mL "!Yxp"ptC=<*_/[5dfd_40t_DL:U>fQLEHPb~mm*ϺPN QP6ѡX%w-)_.d.Ha!%w*" u9~14fJJ[N)#dⷨǵHפC' 'lU; rFH6WVk<qD$q̢t &^}׮mHG Շ<ڏZ\nOt"Ulc ?*˺ Ŏq $1aK_v3z TOCP!;SsDH"N;ų[*ɺ>lНו9sއ Z0- ' R?uǵ#N".~R@'.HDTwEMtAQGݦZf׸+<'@s?Wڦ3Nw:D`m5 '5Π]po# 8^/$zxx?kK[DdPz8C2u4!~w}E~@2!E? ˪l4r|H|@yDGsf#?BZ(+Un3!BlB]yÓ (Cy_]>y>_Yد6vq4XΩmUSLHL^N+eX"څ~ WzQۃvK/`k'8%Ҽ? ڹ_rt7)! EЊCcP0%!(""r":("$@%Ï%T=h93$XE.N17=9"DbL~uץzXwh i/"8wI*Tҷd.Dq(P}R%))cHmƄ^HDb4}$5bt\ib ۥ6D%;@SsHDi iّ6Α$ ɍˌ壇L"ɼيgx"C2pxu__-G@ġrEAj E 9g7Y}{zHţچGPO0)"r/2W#']uulEbseVm9OO Dxk0~j5@Zsièް}e%Va+Ѣ9hN;MPs|tu GY(e5H!(6÷U"Y"MT5|DqI(/b3Ulx1I㈹T7~ܟi`k+̏C(t% ca|CQ@:Y!%)>SCb#W,jWV &]+rcg! AfN)ѡ*8>gӐD]/d!K(7p @y ś7;J'Q`ʽ;? k"DZk_׷U (?CC qQ,do/9DG^^´횯O. A0,=:rk51'j55QfU+$5T}afKtu#;|C\s+"O 2ظ=h<O"$\DKH3ˏ DcݾL7"/:2/q{12"dzkA[b4XD@B8oV]}惈 h(.ذ6INʞ@sZ9yBS$-yBU MJK@"qEt^6*(L`Hu^WZA&% yiQB2H-Dbj=<.5yq#=<<wwlB[ZaQ S ĊSEhED I-|am]iZծņ11Eg]AC8^@K['Z uNjKs>f"쒝?'k]_0%MFeO>;d :qP$MJD`dZxB\)mjWM5T뜒̓!ׁÔ /!(\$8N@DHeظ'\īڵ'`Vv[ٴNd!/Mٖps|zTEF<~2&=c5 44a /|U=U&4fleBVţ=ɣCF%hٶ!(n_t?\2:=h2Qɪu(BNsLA@Ih/OR%7S23"58:vesb;;q2,L|ƪd~cPQٸv@p@L)3X*J”,$*>K%; NT !CL ݛ.RRBHUW`?$Eq#!%*RѮB|X#A=)垂 I3D;u*Y,ieWD<bZC|IVV0+sBϞ=1U=e&XtFF~nM*:BL=~;&(FXD'0 L\jjdZ/sEõD\7@ ,[;F9:RZ:8"1Ay|yʬHYR!JI^7z J*;," 2L*Iyk=P=1+(D";Vl>}G$E?nD4˦=YYLuY$aGA:`]Ԟ~,tyA7($+/kgsm4_1ِ.,HĨ[*%f'J@{7*9GH@Ë ־~uM$"hkT$p$ⴅ =W;~Rrdų!ptg8>jB|nޅ$K3;k寯j ƞ-= $쌃iIDZHȴ#䅙I_{RmV!v4ВP{.n<##ձ#A1$bm\Y[D/-%(c(Aj?jTx 06 F PfmXyAm:ش^9W*:ȉyh]ivxto*ɋ*a]Lv^KRdPg 035C_0"[ɑ1R^'+cKcE ;>t#3:l!C/HvI&ǡ&8WgװyR/;nu3hgPLVPtŰi凌HSFf$ GU735k/şDB|јр]pKKu| A;4(]6&>/T:9h<<<[kj2бi=np9{ؒwkykQ10.,*:=_x-GXj6የmpK"T`& Y~th4x=t%jxǯIgkXLo( qV]ŹwY:AqjZ~NE[o_:7֝ٓI=$DaT`{ԎfNR0;)%;u) 1>q; `Zv:|ZݞT{A3ӽ'HυsJ%369llKuTIDo~=?+T{8uY,,<~h!%Ͳl-GebyCIb{e]a ɮ9FhI PdIhμAs3sjgTJ9T_ǡÍV# {ƳڳZ@zI{ zazAMy׍ք%zϺkR}*>k_YYX#e$ ZAw.?HU$>(i)Aڷ(^iw@݀Ըyn 3 ۇfCZgw+՚'=rƥkJDs++~35} vã0!y͹:1FŠ2XS$" }yzX4e/a^\IzӼ|U"쨼~ũ+'=X "%;Y wztRg6 'UΠ=M,հO4]h k#;|H>u\%=)ޞG@,w|GVg>O"F(locne?ŝ;WN./$HȈ[yp}%MN8ڰEZm(4?,QdaUeDŽY܄_(WR`&$$dT1I<`F0l|4 Tq4X()Pڍs^bH_V?_q=]I=#Q+1¨yFDHD[^w4ppStC LUnj}#6I:ǒIą ./&_unxS_0ys*Ԑx&̌SޘΝ|qLP=J' *Up/c'R.0#@om[u[菏]tھƛ98@'Qy+qظy5lz>K?U/ ['kxH)@ VQh>F<>8M 2}k B'|揟M{],[|s>?l v^Ru K(r.uc3eYpfY/{/U(3w\(/geGKB/ePfQQ(3Pk" e }dgXD#@,w1GDGL vvn^7hwzԈ@O:X<佌ɢ(tN^JDʮbLMöMOk88HK eoA0q e?1h7}Pbql:*NKK:plxÚ=<4{o:<9rGɇMfxCxuHN畠5!7!\N|[Dr  ™,  ik3Doh mqc]W"JPƧ^ÕÚQD$C)UT{S6. NJ\$erV+}Iq^O}Jk+K:ɾ 0ah5a3V*V<|Ydnb&$VǸ*3jEAU^ med'sYe[yY^ U א<⟈<|= d %8:a}lCy0cKC V&)(%i$7UԊP:DPnWJ!5$4Ƒ 1I֝qBH\Hqpk?Ƈ;TP>Tn5{ Ho?l%e}7{R<`~[+ס-%{~8{!B.|YxKw!^O$!>-=>N. \cg0jc5X,)\!X{K8Y}lie8"PFzBEFDez uЂZ+=)j#>圦|pD%'"G@Vk(,W,y_;CqUkڽW |,Hsd_6y:(z뾞qY ۢ1{</¼RQt*/=MeʱLVdy)Ib}Da#["( ] qf?dbfu`APyY |*DEL=sK'SEKrz$l$H'y)P1;M?]~I 5]RBd4>DT8PdHΠ]0K".JW`WscB=<<ԇx%TԵ ,A)f C,M>f=<*t$/Tz_o_7c`TlxGiHCt+N+mwk( a|"$h!˃ˠ8#ZE܇YHD V9[W/HbFjZcSa(y!UzDU O,L/IR]?~XKM >Q7"$lHÄ9pn4V{ϥH9(<]uT^z|*_[C6VVPpE!qD+Md $ŦTzCU;'!VT?# ~Q/S4[ }\hW6iA0ע 'qcr0H2;Tش} zϊ*lHՊ:|Y bDZ9P:a%bܾJDk(n Z.T,%ԌT %BHDfx ēzL|M",Π]pKzA2A4t[YīG#ysX[퉇sڽ1(㓩Bf0;'w~2aEɼZ~{wQ{IT^~1^'VvhQa|5+VWVR6 dL#'g^h~#0QY* S! &J-p*d_+ lypÆG2g=/1€HDAi{mkHD% )T*&IEds0aOJC"SD09_61Ct$76nHDQ6>P._~qi 8{ΜjD#H}y{IJBm#C"l-'>a֑{{x ì7?!!X8̲qBt^+"V5Zm|r IDATV ~P! skDi3_fP;HD1록 Qn@bn Sݣ !B42&H)5)Kdܴިި=뇽c(I2wDdaNB;>RP#G V5H'ِfS.`ׇ;yi 8wx8}:T#z" !*.6KPt- [9t+yzjBctWWF@}Mqd r&ZHMWUy$ޓB5Ʒ&:=BQLgS6ɘ0TK"RE[d M̖f*U\x`CB"ZؐyU~2gP"J RP0K(M{dbN$bD*>UEUX|ǑK"ADI̭;wb\^Xo=< RXRU<@M,:396Ev47z_}ޛh'[kğb+9p䴶N4";EdsoC2>k0a2X}qH}DR!Jg+i(Se8tGЯ_G7ʃDT$iM>g$d|ClaHHDN.0e"I"v"A;"HI\ī`g4jĭ-yF9!̚[P YQO61y.d>o.a~.?|#GK!b@Qxj&(hϗ Uc1B$=H cgc e$sbL jV6[ ] 8с !ݻ!@"꘱RL"}tHD]#&쑍I QRQ@vOHu÷O]86$ 8^:٫=F?{ω*͞(`b"DͱƳGR%r<IS$ȷH/&WuA<{+ϐ0 b8I3OGϚj-dI/J9io0'#CY#I&S[$R4ӹ`Z)28ȑ %]Te,*/.r'*yT5(h%(̭j&i:*DagiY VR4èiKXښDLt%b#A V5˾“ƥP>-D4nt"F8wX_YԈHbڽz֦"SQK"m ,Q4Hhoa|R/]~P{dC_BFj$C^Hn^i-!vQ=Or-YIL5t6d-NJè(\IhrWA35:C'` ,gqUgkϭa?*dSL0{|5bQ;=$a=t@-Jʘ"I] c2QA"4H"H$ l/&G@y=+羅$ Q^ķ^fG$FEV<15YUz,][eb3n>`4H%<)Z+US2?\26Ong:ν{.5gIA#UK֊A;ha~\Dkk`8_s'Atfj&qGDPj킇@Q]z(]O=WGDzaKpILČ著=Cֲh` E$~¢)8@ $o ZTEzD)8;{5jHJAWKgzYr6LZ}BN.*D//!T^zsؚۊlΙz)d?lry){g6e%ugL5DufѣH??b!, ̓A $#mHġ&՚{ၐDsTO3>?hmpo76hwp'= k{ɓ/a}Qn"b(WJ cSh?j+ WH‘'5Yj}u/ B v.BZuQ\0]GpeD1<&|3Q>_y3ţD$泓PNfϕHll.4/@rB4_ G:O[$9u݌U#>!4Z*[IǍE3S3X8hFӦe$"w4bZ*A;3[Y7G#/ǐVZl&ڏZFa"_a$jԊU~l,9ôO&yAFh6tկcuġۊ:&F I1d!C-NwMSE)ɮe#E2L:Z$fH3OW.S"Dm܉aTuf&.50]4bC=<$`Io#y5(lo x}jŭʵ `Yub' u^cM1&;4;zS) /&W ,gHTi֌ . %c]{YH,שh? HĔDqh|Ot*5|τb}k4(JBnu; a ̒GH(QgED:LqČ4 dHpaOye ykU_A$̬3Uq-}X pa͈pS|ms4`U90#vyGQc$" 1EDQ]bf:eoWu OH>ũQO5D4P1$"-Ps "FH`čۃvcq5l\| 'uPrryDIsӧH̘Ã~=0v@De!m’嶂D(& C6=|9 ]W66A2bRsU 9RzmemlI01톐Ly*7kjy5YYAA) Tí-y3Xrb.܎qg=;/wx$uID1|0(9(eBO" X|CKT^$o76hwqp[yy`yp/4ԇk1(PٓF-xb篅yo+_}*0οqwo7qXߏyfJA܁L>3#gdmHDm>t#xCa{s++8hE\ZC5VHȀb#[DSKK2!1]-j#NC&Zi1~еK׮c~.9s #0רoe"*Ĭ>sIR2 plW0YA wGm%5>iB" z튉'Ȓ,tK"C=<܀%IDDy]h4jĭ- ۵m[ aJ&i? QL%Ţ [qavyG3maa`%v7NAjj8YLׁy1]F~.ýM@M"mc~aW0ʟXʘ {qD" UuA@2G+DaYaB0[&ܑ`Gï=;3Oo*B2qєDU!v*~HD?m%BPBd+-HD]pD~AH"Nt x(]++(GP ͪF‡Q|,uͦ)AVWDZRv"?]o?j""o0^ ]HX(JI0a0HZ [5LY27.m;LCEP# X>l4R,#" Sd#e2ځIŚ}RB/ڳ6X2ӐM>gWSJM) (fBy08*]І!,#:,hNZ_B"J5DuH"L͸!;R"F(XP.cP]z!l^[𢰽S.q ԈQXW#z`t @,C/1*-Q.PiQ/S Q ['Ѿ߈C<%h@?!8t Te$#]b],H }7w%47Bqƣ`fb] *5aOQ~Xt!YSrb?l.oܔ*#/Z}cq5y) #BX: LO5j(ˆ.2%3O) 6_$"yQDL#J ;ȃ%}q=̭uܹ3UB"l7y`}%C ^fJZ(#kT2IED4$:3H&,jHr$ +xQ;sb2fF:?QًC6t yL|N%CJf x1U e/'n&BVe8?' 6&4r xj!\x"r}Uni<'ɶT\zBx#Y}yqTȼ8,V*iU(ZP&A"JOzQ}R!HTg&N580qc]"IDΜ &^}򈒈p\|,效Rڹ ;l&)Mf!dd ťPcj ctFw|W992:aЍDX(\,ݐDQ6 nIAG^R l[U!D\xl!sGQBҽ%p5,[2R D[W#0;wfHDb A,Lq$̠yD$b!՚'=]DJ&P0t*_}gJsYFdR6 i0e"N#[ R-CbSd`TVlMY0Giˇ%1a#ڰ_\~"h,M$(MRJQ c"(j?_C+㲭e6I4m VqgzvUzdoTXoսuVc(RϹa$ ,W>rDH9A DeKn|直cyoj4G*)]Lt0#[+4g,]O=W^Eq4pkڠ]"ABLzfO "ysq\əe Æ@7l?z@_Lw6fAa{63L)IdQ|]{N) WBjMLmkx5bgWljBT /^8O)-a8Y=gpK4wã2# Z٨^HDD7Z\>콇Կ&lL"䀌"6nԇ4{ =)e]&ƅWP$&/KGD"_(8n"M/RSĿo`~ogD٧DalCӏI^PhЖq^BBmյqjr :;L!G' H4Ʀv.D?^׍{'Usl/r 0d>,H%]fgl@a-5ID*&,A" obӯ<غ;wb.yxXT1l5 S( ۏZ=R>m 2@6y^4'0!C5]d7j5q%nepyfEclCSqAEtPx>GݟZCv.$ߐ ħx  ƷU12,.&p$F8rQYߣ2k QլcK"{pѪpGG3sbLO"d_č>tCjҺFD"J湕L vvn3cdqr-E?ԅyϳDоBH+ ]_4 tv (Bu S׊(GbSpQQH4)#"U|uʊ>)5u*Nps"Zcݱ$[u~{ uԇ,,l>Xמ ;($ wnIţ⩌(B*۸JB+QHX7%5O')etjat jC涮]}bk(O"aQHs|{:O> !qpr  UYҐ%ﲄ=$G ~&@>U^ IDAT.rP Rn(<>;gOOU0 4ڍ4)ɠZ*W3ҔcٔVܻPK QMun&50>GB9D"|m 38Lx3z|;1RS6IBÏ Q4 T Ǚ{͝@<=]"Xo+I^($J"R~pdH|̕@ظy#a!#"W1 px|pbFaGyCU`V!.۲g~ܐ,ms-;8 KQN|e/VC6dCS;j ̻ES"unZO+SΆ%0 N)+[{R((}L> pB*<|@t^@*aSA+[ DdȤB;QNCvIRoE L et$bIDᡇA?P]z+4[t >P._=$"F|XAD N) 7Hq' _6CK*M"K_kݷ-i#R:r ̃ߐ=/|?b3 ڠlmU> z(׬RZH b-fm]?lڇA8{&7HaHDkbur $k~|g{c(j+gk (2ͺfgfD ."[fB V5ᡉA?WhCq׏FH3S#fO"$nԇMG V% {c]cZ@/t9AV z\)F+zXI~(g ,C?0_*̚/0 t(%;FQX<%#W@P]K~eD,T9"uCBk.z1_/|<"*]İ@H"U<(/΍ jdnDF _Mb͒SJ[l?SqjN^,u!@уPza(|#ڙ"d6v־/-ǵQƩ Pɋ$,9l vuԇ6Ւ]E"(a~Up>QًU5^nER"$e) Q?s~!C8@dk_,ƒ£Hļ0K<&tlgR!0ȁ|Xxi՗=< BPBT|h02]Wh >P._=Z$"T06ؤ9Q@ U~|OGzDN@<M7QOKž- d4'WFII ΌjD)X(:!>.< r% Z}"e4ﹰxĀIXLәY~y z3˻qC^3/$t8)1g?3$Sg\dިJREr jC=-"`ܷsPT?dm#|f{qreo76hw<8nUDXQHMl铊3q)&- ֋8?w9(1 "0>  ]~J;əTYXA i݌U"+7> r#ѹ-CV)FaDdNk{KO3Eh˯> {!W*PdX\XL>}Ob4Sӿg0\/c&{&ܥ.h2{]SϼDL ;YMxx$"|[yeIC T B= ۘ[Y7qU%#V} {0lZ)% ԋڏZ\YpJ[J8`Υk4GBHsQ 7œ<َ "HqU^{ᰒqd529\d*E]rI$pm38;iY!5@(B2*\|jqgqaջ#S#_ O-z/j5:s}My !> XX)TB6iiG7$bG@Tf"qlT/GظZϖE$9VV =aߩ1}RPF4R }gzpM#GԮ{H.H _г/Cσ& SVLa qڃpsr'd @7ЕS./=+!A.UtBL5zL.*טVQ ݎ3?C3X䢴 oqmDTpVWQ cVHdkZ\ݔH-*,ˮSVHE<_\+WpreUO M"_4&)OLQFamsc!$䃒O eWP믄*KT`l {Ij1h& zXHJDޠM%#ŢP(sϝqC?0~]]}liVJ.Sb 0jHH BJ8 b803[)yRIDkИDLCk=8(VJ}:1T?1*D4Cqs3I:U$,P$. U٤ԇl!̟ڛ+8a?}E߱>mP#oPJ.UUf*ϼm HD#j<" P6Hg$ %e "|5@/V!2Xk蓌%%C蓈Pؽ;Ԋ1č6<<(rP'|P?1CB=׏nHR's~=|ajrn~C0b4t0nP]?{oǑ >hDHCPDs!Kȳ3#)F잸3qwGBsvHw:-kw^-i"LzH$=#B!AFw?2ȇ2ͷݙO= Z ź cLo}CiEY-3?11l G Ar\|^]DtQMZ=`=/M$=?At(z-&BPuPMh+cƒGSw $wq(NVG$/Qp\;Trϭ?XID#؂k1˼ +@dqH?ci$灷[4"c! zʵS!HBThr9qROMAK8bݚUmI;UYNέ/L\=XTZh>YKjn 9YAjD;4I Kj"A lΌT%'HHSq1r!rCC?U%܁F8*iǂU"a)DlOh.l6/C%$p ,Uȼ4/-];ׁ^_(Ո{f~5Yn˙pT{/82iM0I¸:NQ9ʜ9 3pdun s 0?WUHnyBDym%:Q0Cȿ(*s-EҬx$-y)S ".! "!PK$e^DHd2꫈͋HS#J{d|d;$[Ë!dߠPġKCg#zڤa۶KY%S+pϵHT\FUbpLtUsh=呃9 c6.YY-{'c,\Э1A,jc079M??Y!Or_P$b[m)>Z7Ԫ~+ }Ya"! <(@^E@"$^jJZ+*z/qƺR!ZdĮa`܊W"6m]HDD,2i3%D e >2s'2!W^K/} !xpy4܈ss27KPCYl &O$ס ) نiyENXcLa%M˛cS+ZóX&ϒHEzl/<儦_OARn}!=Ʉ%{`TelcC3taF|MuDZsZ3a JȚO;!S)SKa@}wlWKX_nܑ@r2tYBa"b,W^C+~MVhD&޺۷whf@ˍ5jDI":bD H[YPk*Ԛji%YA}ϿX3B6X+GrJ "cr0^)Lm )/Dd'ԒJz;*EYB4i'zC|^!^zV!dDB3Ȣ*+mBi&^@MTh2 EHD1Z "aB#2HD.%y(!֊:&^|sDŽ.?wY+KK;Df]( D. X/_C0Eke!+=QLF)wVA"6h+&F"n!;4ӞlF$z)v~H#QL/,;$;p^f D4$6)I&"S>` ѷ 67뺲ǁJ%vW `K'҆\1bEQ|0V;D%\١y$$BY-)|+/N ]f᝷ qau۝Ϟ'=k׸ rOnQz%"0_1')7SC?Uk=OIˁVU–nu"QQMrD*UL$D^z4m?=b17 %\./طUgCt=7cY*_on9SF-QiKJBQB9$lN-$GXEPf ۴1-$"/3$\1IBB_3“ӷT,1}:NQ4e:*2- *"?"J8ӍO̪@EZ)bc/fe-c zbMjDVV奯\-\uae׍^tŽkX@2-D(rټN H|1{s Ԇ[tDL2^$eyPMbX*E . ;Vflު՝+QS(D8h%yjDDdۤKKwd貄d*VU_y6v:*ӗ"^;;Yר@xD2ڏ5T15^keY\J˔YCj CzO-8vϙPEјT) DW9C?ekV3Ѵi@21l#Mƫ i<+a(\ mH1™Er×y6?XqÆ۰hI:JH ѧ0HDa8xvQD&9T-"@i6bl6/C%$|B'ӷ$s'5.%H߼n;} uva| }n#!yMt)6P,>L;(YHZPq5Tbzj]e*ٳѶaaφZs%r܏aGQ8=겄D D]e'Zy7B΢3ϝıcOv'ߵ7P6.6B@tcz>ݵ(U]摇+W:^n*ǶH%ll[}Kj)*D r̳!EIB֤v}ڪ D|!"{ cn$8|1/VGI"C IDAT'|!T+fL7S6ô|A난s7 +HylpE"*:A" _xXB%y(!<' ٯIzfY\;|Uw%qn uEq±!Ecȕl䷸iUj!m*Fõ/>k4e(P'P.S7lz M]_r0I m;+ M&^l:^>S6[iFANKp\-dF8՞ gf<`E \Bgv(筄Į8PޝcK+%"ŔQb6䡄DH8zM#:(Gy?ŝ;"޼ \da-"Z,TXac~QHٝ*3M9T*|[I}Y(*PES nH83}6SwCcSpZSЉ8fcMyG"Zs *Dk!U'q;hx$S&Ʋr!vKT /w$$.?| Q[ ):a@y%$…sKg+ЊH=R.ay,-]GvsyxxEōk($E/J'8ι6Of ͙wSp`}ӫk(ڗRd&6nr,tM$ "JT9+BD^Á!]ǽ^PE@h(@"C2;$0HB'leT&:4$(c` !;Ɗt#v"Gxʏ$$$7H+'q7h$Na$2{Ud|o_;ٳki WOH C1?Tj"Q- Bs>0Ln6`:`jegLS~f%LT8Ws5{SQ "џehQ44UMq3XNT)rcҐw8 ]\{[^&szD$(G=xwA2sFe7)F$҇6A(ya- ,-ݑ$C'ɼU vy}{w4o nijּ^X5%/pX6.H0Mo+ ;!jCsRZ6 osW5,#ŕO"9>In3+WY]D3|90D"!-z8)Wa"}# c35HQu-ʅoXY[1~:р]hUB%"wRsca< $[-&H2e7GP\BBVUX?I\yM" Ȑf/H?ci ׁ .^Ԉ; T&bmjQu *DwLٔIt qvϰW(`g5LBG7i q,e)  ù\7z$"?g~X$I"\{>I׎vxNDf/ZauH ~X MbfߌJJ}453Ə-]'`%#] s O"G`2dYb/)OotzG>Gڇ_\)!![1 yyo^GXPS}h.x&;&Q(l`]pi~^Y_Ԉᆱ=gq%sDjj́Db1D#Q:٨◈zf5H}?6m|ZE;>(C㩕Uz2 g5f jHVXyX AYé2ϧhdէ† i6-<]oJ\lp.P8$X>#? yF]Q8MU\KP?\d{wsMN"޼>Gz 5΂B)z ɡ$,y `ČC:I )؆ZWcvǘdZug4T)#1]pK0keda<+"$,U8DcllO1΅Zo*͝"p 2C"<,bQd޾D+:iRY`, H80^Ľ{0xyޥ̫<ށ Ġt@4D,lm" H"L%)}9K.!I*JHxCk%'?~)H+ VXNԑJM ᱂i_FxԈ{tr @Ra]Z B677qqB^$|p"M;r8 \ I-Y΋z~ald[6KWӠ} |؉Vܧ5q 냄 )q8&B^7;6mw:7*̀'#*P Œ/|^1#(6P,>&L ^A"22+JS몡Q,MҎ,D@RmHDh Uwڡˌ)601V&kFOu<@.E'c||aꀴ:RXJ U"P֐Zgq9# aR\G _* jsU@fg03QĎb#_{#)B"_y]ݖ/{#7bЯkIC! ڦ_s-9iAav3e+cN}QR(!!iyad^D"n *'TgjD{ij'?.a%)ިR0:Bt)jMˁOX E<$U,u<ԕZ]nu%<"^M@\-cMVa(3^>u) IezIŕ~>v)0'/ePZ'MzK`+YS$B:e @#oUb+\K_j@Z!)6"k^]TqCc8D45#별5g`a+VlzXc%DQl}\y0"ԉZ%YB^BB"8o^o x`8 !>wF*5mw:7 =?z=S`*kKm"nc`$ԺjTR66Ǽ[&zWo+3B?2.`jCVeU)\X\&p8=!G褒SK\/o2 Z9btõnfKwf/<16QJĮ ab葊0rw3YA=:ŷ&D" B?A!S!(EL& RLG2YBB+Z$z^ĵTlEEVzzP46;@Ԯ<$۵@l@l+ CW+y QmrrC vw2 k8 gqKgy U&阺رǜس>ZXm&4myP":oFZ;~c52ʢ^R%*%P{{F"蜁zCILH$zQ='">Bc] 9I" k($ c)E!~pe^D"F")8svGwoIHb(DŜQρ81æBk$jAw7vhJ̋H"aaqdU"ղǰidٌ4.^z"* 2"7FtJٻT) 9cѰE?l#h[g/Eu{0:&A]J>} +zr;S_ȾN!YI/֖N&D~-Q?$)䨹SJE ?y#!u*﮼=*n^V`2l"9/a@bDD;ʡHkB6&QՈMB*hlDCRi>޽B:PaX*澛[mtso`|l=vL++UexWpʤt@Qw30@%bIs,CWtC晖[)"[Sxx^QDbd^ +rO_Ⱦ@ )_HDb *ǣB$bA+E!<&^|̋sPѣO=pcU*zr\YxmECJ4 0 1/HZŬPYB=0/=_z֕ℭ#}l:f&MĒ1F?DRTuIZ]k$vJA79,j'/Mj1"*N+" }olB4y(q. D4&Q4" +?KHHhΟ4E`N! g2s`rwE!|C0>o᠒D b8ܪ^ DSk} `ғZR{I"fgh$=7Cp(;+D vag}cͻj}}.0kX b6|/or0zX^( ]xT*JHBkX̋z^i"h4[͛{Zqv NU!ـSHTeTk*VVPtua=XAEgj4*˺QmU*3+1|~--U\˖:+UI*VV%dI|pZCrE>"BW2Pf7H&Qؠ`y luu[շIOuh OTdx OEva>&U*$!ku~U t5⍁ dz F4F/7aۃofn>JE ݅I\y dN^,ww- n=ܼ | N_yhEJ\UDtf{$ajvu_ զ:$#6P;nӞI1+^}S+k(CYPNVP|QUb%3S,gxcccx7>\uY+4+gCy7=9=6)UJ6EZbUk:8ĺ𷢓u;^?.2%* @tdN V;JCzWPuR  m[~}q@j$D5$VKMR 12DbWʰDO!8%شtP76gŮQ B*%$v><)/" xA"-F&NOF\/'7j&LlV˚1>RU|sxt jw9dMDNSF,c+)c"іMS^i>]Pt#Js?9*FtHmXsOEDZ IeJ MϭYJD_0Ω4A) E.XZs^#@Xן(⪪5#{/l*N7Drum뛊̝뱲ҿ$_t3gmvz l[vVXBpr.RC`y㦾]( DXItz(ޒv8D C&xD4CGSCb^*WFr5}j.C)}T4?r>xУFfl4O,x$[ݲYM1?gM 5#mR/CȤD mَEcA@DZnD 4&iy<.>ra>7thrA9 a) ׫"Ǯtߏ+ZL"Jh%(!(OÝGu F^DbhUi~ׁ[d.zE#8kFZCc,t5Fmig_|(j[Hi%aG[E}` k_zOtE6]N>> .F:bVU`AuJ:q"tљ@tb 7>0ޯ$"+O uXM6Ovf|R&Ym0L2C˭=>dQ!J"D"!~#*9?f f vDӹMqO"Y<HDYd:4.%\!#*7--+IHHt_y[oC4{:;sp蓻7W4_l5X>c*.7P,n`ddk\;'BM h՘+Z]5yg g Gfo|T\zt27NMgfH&6g|UYQ6,&RsՔ)&Kjɔ1Hle5Hs#IhJƔ9f7D8Og6l^v5?~}= rw%@6'EyZ* 56m@$"GQ(f䋧@ R(!?8ȐfCDB-|y~^ gwWnװU%4>YlfX(Yua,ZU-yy j˄BWljH1PZW|+ ]f8ϰ!$PĪ1k?7'088.Wb„#yE"O *h0iWC)I;Vd8tI-֨%sP% 4bȽ.(gg0:@hf{яĊTj;Gk^;QُsPB{@ V$'QOJù1Dd= T*JH77^3]ws;cPp+H5K/gϺG>B="Yu]hu* t>tԉ vv-L5Je`3\A Z\\&p8~h,5*'ӡm@)VqNҚ](8X/եQ97Gjn*=]$m IDATh*jwk7̞oNDbPح~>NN/_̷@dl6E#dv돬d/$"_ =R%$:>,̋ VXNԑJM쾼@[HVj,rc Z0}t jRڹ?a;Wa^+Ńn (Y!KȮ2-ՆjʑHl'b(/S-qrzPUOq&JQHubng ȇ(`I{BC5" 醳 0H?ð핪%s` {<)V5aPֱ)Pc܄qS+Llo\+h̘VQB@smuͿçSO=A;)\*F˓YLMVE. P"Rn\W8ɹV%%Y!lSPRˈ9);S1&e֨!n'G&DD/骥խ=Z:Øh]+(  uvyz."N;#[fa91Uy&jAK#o hBD  T2/bp"xVi2@/H%|6jxmMQ!X6Z Pя)P4&j3#|cZG~ݮ/,8qlfæ35YGZn>!4Ԇm%b˅V"jj=ڔ{h\ExB?yȒ9q4’@ 5& WִHq@|`!((@Թz^T ZPiŗ{@ܱJE `a͋(+4{q-۽y Z}j vnsĐQAڏe&5ak7A[V@TS'*'WVq‘C-PL*a"6'JCpreqh{1?-#SFvq\٤])m4}x>^@tyKU =*(}nLJ[uIR)L&C/q}J?Q5[՛ѿ_^P!S<FSH$}45J/ﺕ+s:~ ʺ1_?8wk FYΐCD<"RQV~ o7ȼ~ "W}+6T D է@NamFV  (Ԛ$TXc$NSswJpND#N'Yn|+4^|ʒPRR8"̮Jn9_R9CnܧJęqNesq *DrD (${BΣ(cDyHRX*ՊQY9 dO";̋\K;"RpcОpQTC@LؔBShF) kֻUjDX~0\(`gqk Ab95h2n^8{;. 2u$CEbTI+0IP\YhzhߡP. D%bZB,c,4ASEjv} w ,@C%jE6g}ZE&`ߕ-UZNnѵ\AD"a~X~x*|!R!nTt;Eiq:0Dtt'R-}T JAˣ VUe^D:s'QmU!{8zIDew7HD8pĘѮ+923P!UsqcYaŠeҚ3-"tcaeaϩh8Ӿz?\-t uE];%.+e$C lQ$\G<+mHЛ7^yM^qFesRvNHs S5kN>_0D0E&FtkGT:玤47JtET*& TeGKF^A+Rtи'L., ΁IZebdRF6ڌjʈG3yhPP.;;yhv>43y?C~) mU-n~XwMSC<"jOӝH/ (Tr͊W#JDJ!h~z=ϚL?&z՞]EճݼvFe'I*xO$69o(v@dIC]nHX, E@5JD7JA*PT>cb"oΠv?*]O*ĎCE@M* az;yT׍#FT JRÂfWd!.šQVih.wm^Du?=KS!Cʨ*u_Tm3ՇvOjkUmv0QHGUYXs#~Onp>!y ED@hoxL9EO0Bg9F]6nuoH=-G𴒀h J F FM{#iE(*Oq d]R-UeBP!9:IBg/у D#:ciT JtzgM(ßkص^AupkjD(< <Եӿߋ)`nP4rd0H4 @ (`ddF׼E Ў [ň(\^T?0R}XmY˚XQ-,.8~?w$Z1~bearH/S;"ˤ^iY楪HÂJDG"ukFFU1itjʙ=3xr"vu[*w*Aס+9{$dݦO;(.&D<|08uDI۷X޾}H߼DU]yؤC17_>gƱ^,)rl/W+׉Cz3u?w{*% H/.,1o$AVY|l Eo|T!@":|"oo8>pVQ@!&< _. .#/'g ;Rd'G_H2 Ő~6~IPDND('ے@yRP@mJb̋x# svE^D2+Z vP#R!ZP *De[CpjD$prWȰ:yxge?ʵ2bCs7˵ ԭ|A<(ffԹGRM"j0)&"G"rESahEI>9uL {ZՂL`9;8'!cMQ쮬`fڥBHD? :WAق~$:5g >vPI":u! DQ'Snߦ;MsK#(vAX m!dS(slRk1<#AW! CX~.D Dtݑ2ImQ" c(6%UqNNEb.#|[y3Ng1.,;­ 7zXB.@Gw#'aя*NGHN\$s^8(; }GGܕj}H߼5V`m\L[h(G *ԴFnmAcD'4"h$jWtQV&bt jU33bnDgGPN Dթ-xOpY4&JLJ&'cpL-աEe]dk'Ƥ6T4Y(_&p 겆(v9O rTnP[-Mj:U)0]z;Eck&rULLQ/ UdnTBrKt$<8wO=西^b{Sץ/DAbkHR8 :D?$_x^xN~GѝGD%Nŕsug;mOd2H?`sv^Ng>gV(@5*$~qc'+UbMP,i>JD̛F$"É'ڹ),)MjY˗H eZq\,;;^RK9CղGcL!sWimwu|h-%SGЫ)Xˎ75][7s Е4E"9A+B@/r񑋝| 4!w iNʽUmsIĎHIJDbޱv*?&"Rи'\X@ZrTj>ͷ rmZDڨ-:iV#-D+ժe4jUCHX6 8ae"MuQ4E 0%G`jeO~?Cd>}Ck'53ÍPUO8Y\RB`:$lL(gH̖Q!\Ԟjc6P{nC“u%~T$4Y@vLopaվ q1:4kGI^-tTh$ќѯ# ?;}rM|\({w kN`|Sӻ*2Z<ݙSQ82/"񹓨;!/kN7opowh(/s0ƤSOf1^XӃ @@<ժNUd:HOȾ0lznCŝAKrT JHx^YS,^]xJMPUT ~8hU;}sϝıcjza߽ McW Dz@@jdN բJ4MW*MVFThg-GJl̊TWV 6sZ'NCCG]\! ,ubU\/ߴ= ;$"/t4fLȶb(3`Q$$;D_ B"C; .#/Uv4zڇ0u'zE9ț$ĢW3{tD<5T JH VC?:y822#@%$wd^`hBNd1C\+d0VKfړ~ɱbS#a&7.<d2`m#wUfoݺl8<<'q45bN!R.!w"XvHPbTj&QVJd'궊@VYpCV@Di<4r ιmLZǡF!}Lh!r>tXBgŧEmEb#DG“z;͞UVQvj8\ZIZ-:E "uvc?M/5 8=3MSQ t ł?ӯiXSrW>;.?H% ¹UNN{&`?fyX"n `A_QBt._|+V*.-ԅ:>/p8zMo]y}Bϋ+x{ ˔/tN as>T*QyrL'mQѹM# T뺒d IDAT,ңv19S!r|w"Y-+r$8W*(R)a"Ѧ@RD/qrw0PޠxvI&]?xЍ y&csscc838i0r֭Kzw u` K&B\-PPi\lNJ=3<4MJN:a_3khaIW5q]KR5ei135C[r7N|1N>/r"0:2Y9ЌkP',EeWD0 Hj S ~RNJ$!!(.]xg| ?VE1;W^(2/W$2L?3Ҽ^X.1b)N lƣ RGQ`0f Pbw1ĭ" !# <SwVq3jMqvN @mx srР6b40hJ7M33lP代D 0>$ޥe֓jZ%III-!Hhٶ|Y{3OY`[}Q=:^~zH 6R~&?g?9\G.L1ѷrwśRĎ`GT py#*5!a ;W^{"45{$2ϟGuܾ}ձظPy6*B@mXU >ixݤ|o\l۵mM Ymh'~SwVQV5ؠT R*0YA\"<0= @i@d'RHrV٪;+'ǿ.kCCqq<gŔs hU-y(W+rT6x7Yx#o6-225z:{0-t*͔ҪSKx;L?w=_ AF5瓏:(2"!L^]Z=S 69f6 (_$ŔQ0KHtNa+?0>뤢SmL#d2?mU_md~xt LK5Y}u,L!X"uЉ405տs8^e7@R)hF6F2<,$NVj s3Q,EDIsl0<8 -Ĝ\P|1 b8{lTB2{LǴ' ѽg pl[-.hd2$b'\e*Dx7MĄS?O^CqЅ eq`}|M.Js:Xп}H7¶ld\==GCHRQ^ىT\^)?@\Pvfx|b ~W$W^G/ċ]ϋC$Uv17XF]h3{ni!ssԴX^FjB}@#G?"#98 %2`& []UqHzÃYY:{vyHJ1 6Ohg,\ K%maPid!BSܤR%'`S=ZHDKcX9!`& :kFrN ;] g&S^LJI1g?9Z3gwչ2 r%YN#$ 2 9ӕNyxI JHJDJF (P h Bf*dCiFؿ}yصX:5dOU^ iD&ȞnCr 5GศhwЫ7dSMSLMYw54q~bTЕg/?ͯR㓌5褅Ť+Ua,/g3O?v2G,='n_XsqoCA^T܁)&R8UR[$Khcd/QuwgM,ҩixɏNf;C̔zlDAZH"R+= R !JSH>&*>=^B (%(8w"[tpt8%SYDEBGpeS0կ~׿?cttCCITlmU@XV[[EJ[T(KTʭ TUEZ~j*RfXwv'?@v$C+N)#~KKWQ(l>za| vk?uEP!J54"؉͢բDo=?xLT;\d'K#943y8>n[JV{.kJ"0IړhnK!sϋ8D&^flrKjrdMCpyf.c 4sDZLUAϣY@ŧmF-4?!B' />LAuwC6Jie!?>w7)?^noE^}WCJBBHqvv#9i8q |_A"V&6~7ۖdg>sؘZF}$ϟyyyo^GI%{Ds939)T"^Yzсm/:5:ǣ!(Z.Dژjjx|95SCFu0ֲ!zl"mjCEd ZCED}ʏpǷ抡I\\XfccxS1FbyDA^'SB&*ND"-Y+WˈFbY 騠T)! o6Ejm 0==CI 6C&Ø'8{YPfv~X=K.@ȫyyU'cG044Dbh HVffg8n6159Q3K?<<'q`?4%RCDs9.]Bv(rm+' 8:4Z#DA6*p4)@C^3"~x8t'hv(X#eSBA|6 D1+x/ #pb$ep^V)b5BUUĉT`#)zVmW2C#R{:*b(b[N)qZG+`Aܞ#lX †)W"@{OAd>/%*I)C 兤AicCC Da"_#sAPWċqEs{T5iql=c?yf7۴6s91:g@d2̾.]"OPĩS'1;{E<>aDQD"QDm}޵ CP! $Ayz~ 1}o X"jlzEg^liDyĈ) yڨ8Նjci}Yf@B5=HYE3hܿаF0MUU6ǻP!1ӯc4I҉Uj];EQn\7ov"E'h̦RLGIMغ3dz44h 0X1e3i,AB1M*.H?zm8V=jsQu:OdyܣQKņB% ȗN$\@k\Akg@{-c?Cy%ؙy#1D$><0cT+@.]L&Cݨ~[2=U`ַ~!SSxavaM$TE,kڦa{[' ࡇg38rD Ј I݌;=uǠUi${$2`'s`D`~еova/:Z` D6!-8:ED4rDO?>2< D[1f6yA>>Nrm J{R..,O0?MmcBeY_;͉D,U,$$/= N:q mZ{# H" -n~#ڜPu-YfqO>1P&G'$;N³$v4yL, "ftߏbpO7hPO|ʀoz,- D N& !IY×y`&"Ν;lLMũS'q>T*uDH088H$-Y#۟T'>TafW>$!;i>z^{@B xJz?hV2Z&QcM@Dt9E#گ0omAuKLJ#t=!NNYG!,}AS™v|h <\\f~{cǨi .իFTƴ\$+QDdQ4ԢeX'P@}iצ L&J`&G'/zCtBkwn>^g{J(yUUH@AMA"^JQBðp -T[zrs#oEXHC0+ٶ*RE%Xun!Vd{\Du2%Ll. SZRmdJKPͬ^FpiO/[6+I>ΌKȞǠk)!O/b!0@k9P^e%㱸 |9hC-c_xl-z簰@%Ѭ.KKKtlԇ4:0~ܼbx80ѨE]K8wcr8{,獹{%;-w!N54OkYKskH].>N|Λ(WKm+{؇rCB4Dfc5GLRݖ9"ᐚ0CWPIHjp"g;"J gUO]:VTI5؃Ql*ͨcS؄ɘz${" ҟ-et~nC~dK8Kv9,)co6~"KX{A%[).af2Kg݇C13c.s §\A*BZOqfl3c3-vmyh_(0<OB7@<?`J]zV߃@`,]ܶ1v_ŖhуG1wpi $:IH; C$E.sLoַKއd2EX4~ _/܇V'b|-׿b_Dԣ8v윧k;{YD i:TJ^Ӯ\r$$ Wd:>)y8 ("U Te̸ 0@THĦ{PQQ' "Wp=џ3w/cfU,gqsAy9q褢7? {\Nˇ^Cgϕ8%~?uII%@r"r^!."Gj~W{>vv _WpR/)B'{UxΛ/r&!N ФLd˳P(?N fңH[cۨ*(.T*Ubx_ByNs1T>X[YC>7j@-2CLvrMHTCO1ɚcv]IpHD ĪD,ikf2hA(fB*E]UmqxFH!'ȥ I{󫪪pI xѯӗ!S\‰_2:rg x]z!{8[D k9:Iyg =uc rptg<ا0;o&O0==xl\Pl O2UшS,7QLLO`x\6E}`5. ./z"'ٙ3,7@aOnȈ"'n!m S0؉$aWݑP:Pݩ4L"ሑx:p(o}C"Vz[?L"@ek|m;d)dKr=.ĘDJ`٢kܑؕkSˈ+^$MĦ =9ٖ@Exۮx5Kvx/oe,tWwKef||O; R% qF= kG6ɍÅV^>f/E); dÓ3({AͿG7 8x@b!mea]5NH3s@ ڞGSI :W rppto.~Z[nARq^UɌZRq|-̽uwin;C IDATr.v$s3wYFCfxQ V DYk]7l7L][k~۵5[~TAM4TxLQ8r?6xռBX @~Po-cuUX,EP(`Ͼ=渏02אtE?~  M..m%Xכ87Ti3c3Ny$:ڪ |4Ȣp`R˱ϮG@Թ~6kkSŀ-:vD D۔[j[mQ `3c3P%bP1T^Ԏ*vs#/kTp&pW Iy%#`T,'[A,f*ty820 H(A51fk&g[{+b1U(P2dFvF3!Qc /61 qD?,\U%D&l /#UUsCsF'PbvxGR\88Q/Zu\c2 *j]K&sLmWk{f~^_ #Qֱqk PT7eA?qǑIg0>:ó9ܻ5$F #\#ex3vg^F<?K_}ZoB~Q"vߗBhT^ԎXV/kbsda b`a:}~]uEc$"W rppp^2?Mu"+o7AEY[ #([(`ocLb!v++Lc?/p`س3b:证Ѫ@"G0[{ܥEr4#Ϟ>+綑4^0m:k=6sQ.XH7 NXCgHe חi"{`套Tj$搈&ld E"#Dʗk:, 4UViu ձgt PkȈ2`q7wX{ ;,@loa 2 dg3 Nġ$ XT $#T4&b/Tl6rpc&Lo"oi_D!Fr1n`msuV,;w7Po $C/݆X1slaK,C`UwfhGٔH/S\@ؼ433{Ԓ% D4ԇ$ugvYssڶXN~BsA\8 garAd#w 3'98888|ϺK3]-qm -.TEm\Օe3 3QF VkfcMȆ2 ` +FC'PKHFxo֢SO0X32Xҩ7/5ah~lI"Z5m%bױkF`7ΉDN ĶF* 8$-d}24?/e]1g\]X0G9,ReyH8dUҐ ,u@ID:GWz DxU# `bbF;I7sؖ bUD"VKT \[G60L*2%" "y^5LRHbe[ ENښ0`$ f} +%b}"\U<( cEV $8ވD|1>2n."xI%YKC 6gNGbN rppppt./\ ޭg <㖸^ IL?ّ+e\E&=!7 RTwd0Tao_!\0ipMD#zXP@YN0.Y*FN(śS,a^j6]TWpޞ$fDbIbU{:Ԏ'NCd۱&ݭO]>P'YcB"UQ3ۚԈF"5K6s`sny4r[7(6"Go qE|a@'P!QՈY`1IT ٗФΊMX*yhvgn'_}'_{O=t"@I+bv6̴l!9T#,/.׵Jz86.v5C8}C ԅ(F9{: yXFJSrShX F$n:ئ zD{P,OD#"@玶<- (5rrʝ4H~![".u9v֔ѰɷoPl2 D%n?9uze#`#Ygb||ťBYD!\kIBP'Hb8*2R #L~.qdX!%\]\@uLL̙jv!1j<[|YUI\^_dld?1uC[*Q8A1 .gUP9&LcuRKNM;w"T!Z$Hp'iչՀ7/5BTlD$38q?;4G[nUVWdeC@[KW1Hc~?v6DY&u"G1?o4ݥFxqK1iu uF@Mn%23Nps6ۯRh"# ?uY2nܺ"Ȏ'T2P*|3Z0۵%k}$"Qnտ _KYM;p8f #i%t!*REYccsl3ilz *D2IG/6&R1җ}y7A#츽veߓh^S/-@ s'98888~ x/O.t^5" Vijgڃ1AgE@2 ͅYE,GMQ Gw+y'KF02c5bЀbʤivm^R7'>mS#Z B|(-ՉBw3:EB25\ȅDB(DfhR*Ej@d$;I ډl*J/?̄ +]޴D% VO&ZSߓ:,9886)"Gc]ǀ* fUidxa$$hUv((J$b<W@i_2+ fg1;kCID4a]we҂&D/D4DD Ϩ|VYd'bJ#[8[R*.67rѱ7@d4"&[1p-mVqFK~} D"kD  ?lV m:a6׀QZ]2uJhŀC_p6 -ؓ,̝Kvi>&Qq_QuJ!qȎ@<{cc3[Cpd!7 kVMPP7? a=dTxe*<3'K G+6jHP@3PU0_4{#%-J" q̬a @$Meho`3.ނ Q1HU&oP˔,ζ،X̸#ȌHCࡎcQES*祤79w m}'vMpiJS `{ u}1B 2X ;hjOx־"Gpiњ@%Q58+oX>(1)=AX̘wz5QBLf X:=F?/=X[?BQ͎6ź,$(; L;ha24Lm0'4rIh2LbBe[{'C\T!G EtbbPw?=g˻͐lBl}ZWrӼӫ Fzk~.{GHVul۾:FO})uN rpppp'̥S [K/mN \jT%q,"{06|Y! D]e%QXET⩦1S`qG,㝅wB ّL LBVjqb Mw\ "@SX] m|?[~˲@;Sf+sh9^ś Qq@|_;xK!y8%݌\S]y٨5[élS7>Y44Bk|BÑd k[CꆊB8LvMam~D*J"ZJv|1SŞJi'ݘ+ nO@j8Uu2sFYʭ՛lCY`Rii D!h+:M R$38qDmbμ)m~7bSCW^uT9 gdUf2)}3M_'"}`emXKRH8&B RHiAuu  RiJg@hvFbi JIV8ѿ[Qy"H I<$'(5Um(T*~7s]3+,Ȫ5R4.W,e D$j?k!SA]G ;u_HP˰\As bA8O=z*!$]uoTpetf,dO}O1Y{sf|3&h(`mxnO_."Azd@ &'98888v7^v" zB&dH- F 902Bql!\j +=5=b!5Blb]D2RcDžCHF 7e&0Mo~u뇞l4䆌D -+]\"6-rYxү8¨y!MfK@UJ K4>*bz# mk:cI8qbHmk>I$RIE/;n=,|"ى }イ \t:hTM/m9oԴ.^<G"BWda#;l<Ф28wvDzYST.S+*Ķ D "-]pظ}_u]~p]M OЉD̥@C ح[ $afb33[L*c# eM_1ط1v5a  :wVr#Gb`zĴMzόB 5?8p Ô$+P!:4sK-*)ŸѵnA٢-ʑaS9vxm%6n砏ԇà<<Ƴ!UAťK~xS]rڝ6Ft}Z$ `HPMS!~DDv(eh&vnQ,eW/A`ڙ07+ŲT$1fdSCȨ dlyly-RMrH105>،{]0=/P(W+ 텷Rttg&fPE[33M1<4L%ub+.?{@gۂftba391w\ <;#ypc7b~^]} .]\t\c^!E:"kkH$Oq|d (&'sH @jdU9 Oe,B T*!%:vvh4i@Qv(;hjBH$fLհ6ht v2MG}%sfH*T Z^teUݜcNUb DShvV1h)条d* -[&Na-WŪ(@2`Uiw,D$"ńK1I("W DrLq;~JB$@@J҉5&-P_$7TZ +d eM:a`rbMB2/p:_T Iې-jj2dzvvv0:qC8}Z}Z_28|[wFp)_uy͊ff'=\/Kjm,͞Tv + C E4S=*-U]zC!@"5Xؼ]鯑C^o}cH831:ZNl/ԋ4t*vg`}L]4nai#8yf9W rpppp]t})MQ!CEptY<}i>_ևgp0Zc M:a IDATxZ=ԩu 9Gf@xpAdiއ`4w2A#~&6Fjtd bRu OOİ]DH&3HGɌaslYd(b8cLᑟ uvDq{9{搊~Xx;HExգ8r\T~A.s䚬=fm D]{鼤e&:2"q>7;KK[m'w Jgl 1ہ^_0ŠOH?i ^TJf?2_}uBաv2?2Ow]u.^=Ә]뺡Y%Ugx>Zsyԇr@ ;*9`Cwik[< mcǍGdm RcHeΘ}v E0;>v E1D lnnl~3#k^pĤl4Ow>Bz,i cϑ#'D,.FF*Gڇ MMaruYsVŰ_UrQ'2[AS#.lR]Y{`tD$@ё}v_VHDE ` 1Opj5! ^@" e%|q-Aq1wk5<ZzF kmܮ'D\u_Y[i=>X'}wU@"r9C|,1+E\p`t﨩,$ Oư2EiY[nii_ߓ!H3?l&-WUP6dY SCVWx%~-ٓN475rxLe{f NJE'5IU xF B^d>5KS= }gP&U5FIDxN̞o6<@,d|[X UD Gk6p$g\w<$B*wUS [&!`!1988888H\<4_Vݎ bУ.ij݋T$L? _᳿|lӺRPjHu^IjSSq-%zg5&ק h/eiMcg$Ĭx~V cQ3!l]<X-b"VJ`dT-bq3ڛx+1U<~U R1m}ǘY[`W(G24448 -ƒsU?>f;`o32m}񁊅<Б@yO})g@@Krjr-HЪ_D7$H TR/| ddD# >e[ԇFAluWSn L*2a%wXD'_R TE.XMP**m$F ĊT1'XWp'N੃]*Hq]HN:\^|n]kIE*DΒH~K %3+7;>z:| h@ N rpppppbjV4m2F슒`g!GxPpQJ}YVTl jPU&l4D "F*..‘㢍T28zA"uQ]O2e%<L3|*Mf)I$E `-T ++ kW+V|HIw6M5UJأtmvHa 0_MM8! AR]B 3 XP2,Ap(7Rqmm S_l6ֶYrMFMۊH ݘfW͎{uk?lWK&0q`^ہt [z[.ƙHRQlr]6ڵIľ˳/Eނ Ѫ`|`I5?{:NX.@T$@lw@"GHDS#uWG ;D!h]WۈU{*ez@ v͓bKck5>2w6 Dh# haWP| ďơ@M^D}q#4Z$YR]FVPrҫݓPݎUc]+E6~{ OSMRqU%ӣiOӟh6\ H޲tؓ"2SvP!*e$*2n} p꺬u+/suEqy). $0X\Q bХ]RpjyЮV3uloBl3Aa} sO;89g@Kp7C?YOHsef.L- tѮ6uD *A &tRq}m m)>.ڔTː^k$pV$;ec&HR h& DRBtd.$xkq|pھY{ BPE' # v =$;5]L"8.#b;xs&(!|[oH]_4+q{G,R&̝f@]SL]nZVa4vkVE^vg"W$&qٹ;mPo #0<1m?a Ȱu-ϿWlܴL9J r"G%WIf>~C1 (ŀZqHΫ"\.#(1 P PVCJyGKQĢT }]EiRS*{!=u<0Qu{6hx UxWckoj~x06Q3FBFtfkp3wX> 5#M]:h™w iA4lWV$ŪHW^:h{f,u` EI}cp@<7YroIjg> EA8h κNkWڃHtg}Q;GvP>_%TkUTd%cg~ɥ9BdIDRL=m%SI Ya%\m;&/KZfupD 1=A'%p0<25G( o5|p=䛸^^SF*j"96&PI##۽M8Joe=2tIDbJSdXMuSuff%?W xKk$[q>?XÓkOz8hap_}t8ܱg챳u8?xخlIt2'gKWQՈYy(6#(5L!IJIJTVc'\ D3yhB\r hDb()Z E*DahӣiG3?{oy >CD$ߢDdёLؾ]^ue3g_mT]$*[f8IHu{cSے%K&A Lwf?c~}ș~?~̼~ع?}KgM .| ׮]kU#yᄒOg02TmezXj ?_! n]=-hXb%AH t.To l*UQ垷\1D2U*n$5*D -̑:Qb9pt`w2bh520Efy`q._ijO1s3PԈ4^'1q,\ؖ|zU ܢʦY5nTXZ[//l3vL϶xXN~TqK{X F=}G7Ѩ/S_E&[C.snڌ|E`qH0>5ة`m qIZ^B9hsx&b`}^ p™-VE5]oՈv.AC  PCq{r[zm\7 BT0Eج>$3T{63#09+-xI #{αenŏw?cWPqo\bSo}tꬹ@{zQW@`={6Zrm3I즭TV m!$I[u*D m"w YĢ>[R<l mmwi"~Yy2&^w@n ȱjQ̼}P33 MzPWقM `0)@O1ܑ)YdcKr%-a^|UڪnnamYq?C^ЋiYw  x37RYb)',LٜY٘uQl{Y[SE&m\ 6Ʌ"f[{|6CC}{FT!Kv&nq*#tihK軅Ei8F̆eоo/ p"kܜ;CƊg&JRTPKb`ᡫ)dO!HoVb69%n 0ţ#c(1E~47RSV؎{r|G! D#LR؋_RTs"6=DŽ1% CUY,+ VҪ11bKM1 0LM8b|,t \/2EoL, :7p9TMҤQQEY4m{Ոk |A麿z1 `'w/>,o*:2_lT$:juGmLb=EH)׀&KfJٳh+PvjfkPY`~~ y]8>>[UW'>`l,+4)򤚈L"Nd,uM-%U!hBEIInt;J"ԂZzB}\ֽw^:J Nl|\U!N1Tw}rѳ:nOa.%պ DΣtҭ ]<\ 51?b٘M߸vH̠_u@xQ Ut>L ۅ{՞mP!^4kTA&lT6B8zBI}C $ҋQ{b8=+H[]+}ػ~xLr3r}nPʼnϕTI@Iٌ-CVYmU.0bjE\7ͬצpuAA%[lJ=b|Bl-Cq۩q$W$֦GD=a}>!*9$,YkGVF&U!D# *$U!u$ۚ Fx!tꖷvSU!%+RY;B~:L'+5쾿l J2PYiTadd?{2XC8ҺDC[P:EGCya4' dbZC:M7n46m)B}NQ̤5LLKħ_fyqsVCN>۰<؅hl!l^۪kPTur79`[A'I^uJAO+ מ+".?Ot"ȑ#"~%+5[0(Lz!cŕUۂFWd"PcGw,T7:16upvNB`%T̈́5tB4rruhlЮ!*be;G/aaNP.{o*kRLjN*w ΍ؑ ]Ә EKS;}>(ACdfs%aB"UdmT>Ni]5.ݎv!v~p5\8c9gx@gl&''1??~{H`,(_Ėews6HxU#& P600$u{Gc^K7݃ ҅ȋY|*Muf(% E'1T#G$046eћ ۟=p s_!s g~ HuxOR>g#C[8=)òA'Px* g! v"NYhFn+ݥl#`3ZC_?]>wK ,.0ssj`z痗1;;ѣ5لL$9&p?di"3sY9efwlzF@u4$H Lv*suKf;3(Xԃj]+"RR0oimdQΜ4fyj22񴱰ifnϏ'_0FFSS}d #(_kV̗9Z`G Vi\ /fU7[yw|ck l AΧ.x,Ws svf32{ IDAT GSǬkn~#z-9lPMXlr\@%Z!MtEћ+vH%ͰS}z*1!1?;Vd2jd~%Xla{k}AH3$WxA!NRoa! 6H'A\g nppc7!t~J{UBNؐv.!Q]a/4TD}mr#HKQE$ޟ}0EAfxIӃ;y8zf&ׁSb"vBUfR_U703)4J9, ?"=NQ3^3"UՒ02K$P*G2% } !ne.@"D`vتہ?9+"m}EqoŢRRX8`HE{;z~6+[s*kB;m'hL@D,i` Ӆim; L.v!?ަ80Jb"0k/N rppppptgΟ xf#G(?A\UYC"lIzYn.c@# y?䡆̌yMfE @c BĮ[65+rT+RI!''1_$"Ijd۷M[ՅwgPְu X N%URqh{[wn֝[ ۟EKRۆoPeC+DYD6 r-$\A < CC MT DC[B-pK.vZ-vnYc}>ƈF]M۳,.+ cl>( ʏ7%ΝU}h(C1Ԧ縆~RF_Ni=.db"hG掍hFDke6bP\$JJx;:y~X?t}YK7禈H jjeVm3@5bS`my) ,;"6pcL'Dku Zc)D*+wLcp nD]cێT*W?sqyxx^Q*RaG@jwa0d%YتM.:ĜćDd&Eb22e +" \smW%caA 7ga C2lfJm(PhS 5لVIjŚl"cX |6UqUoW?yK%fiΠ Dd@t{64=.U h-`T1k4"G"Fo޳Zf)K@\`hlCc͋4{.!f6f&jn(ѰW:}h̗cM0?x9 F}E (2+J\{2R%b[9F }p>B$YR]ug7|F&lC^@ /#G@\' @Dv?@ $d^?+J73"b;[a@9Ҳ*wwgnu 4LP DQ)xZ9S*)Ɗ \ Y6@d}-("2錍 :qX bYhy֍bwT'Pk$C#)+x\$4"G\?=4 x02ML.v IDulQIň|a\*J&&&0;;kk_qYNPc~y"M'2Xw߿i߀B&BwJ<}у͓=8[ߥ9 ;Z'HK*E?DA 25IQ)V:C#yvp^"~{^QMg!ʫD DڥETtrQcV*)U:05dn_p0aaR>,;ªo!Q%VJJgsB+"񍨎%vy#x=5c rpppppP*/bee'OLcJ\YŃD&!21ZCF Sq I1) |j;:wC 2-ӐL$QݨD5@yą0۸ cqcq26wfP0vD{hF׼$ؐj-^"CVWb*J>EL_,00:VPƐ`e)߄TOq\ot/VRV% m}mp,д>GG-˖~~Yvx%΢Z֜Nt ;;ZS,1y# B 3aGQEq-;";#1LAfY pÀ |G#$HY]It!$T9=ryBT 6QIs D91ي=H(iu xRFٝDQ io[&ddH8܋M6Y@$gtU!?=[Fqߪ5-"!^Th%HN$ÂA1?gƟwU[[V\}ںsڭ(e53 DZC8~8N8a)D ZPH@k+ʒN$ bVԇB DJT#Ԉ+]:'@}x7T ̾wEm HDX*p$tš+xҵh&n#%FR"o ?me@"z%Ze>Yhc@>ЌW~箟464'3HDXM(&%yJF'vMЯe%)׭ GS#vˮ r>wh怢#Ds-jkzLe=hT Ry;-˳RMD&aoH)EV DKFSl&ݵMPUG;>>eq8:q<3(ITbMUjש?tQ;/iā`lPT@ԮT#65bB@@":ZNõ1vgT,֡vi $4[G?]cFJ$N%c3os#ml~v.-c:tx-( D@ซP*011YfC3us  y s ԠTfliñw`m؈Qq?*=>KR`viպ] zpjb͕2ӕ.,+CȱA6ccNb%}3.Cgj15 W@]X~Ѝ}̩EZ[q~^<2x+3x`ؾsnƓMm*DE0"ײ QCDӵQ;@ Dx+++8y$="._d6A&2#&h% $dT1K(`K5YU,ƭ}J ,:'KH..w1V><[2i$IQ:( h<yذW1:gEugus ~qHfK@?]s`Smyw#NAfrq=MhV)eܽ 6)3 2 :G> `v 7(ο)7pZ VVYa%dhHH[[*.-5DD}ٵֹQ011g`'Ka>ҭRDcTh]Kk ԇbUS HM p͐8<;;;ْ],F5_{ђ52J;F3"T5KET.[/hTQUc ";%@{'d)Gb`n_TH/| sE*tSk35 /(C/iJb+K2Q oON9-!&0eSo bmqbN%1"J"u<A%%" T^ekpLsE=rOmg4֙H_g~@aw~YEhՅYݑU>Tš枨)kd]+aϿs=_asђ4IDՍ*ظ [!*FӎA'庌towHޯT2A l D; ZC˲?ju0Ԏ9~H[K~z"TISM Ju&#@K3Zki^@qih?v.ZR=`Wwl>ɰ"US`dyCFڤliԵ٠+ ͊:bGrNޙ)@n JT"mŗ1X}Y?VjIM,CْÚpnڛQȦo5c9AwuqKRQQJEBQ{}IEXCLcO[F&UgEJmZ{r axf<:('988888$…E mDE PPޛݗmua.-5W..v.O<Gl%t%@z<[ۮ.#KS bR.ęsPYr#+^R ͸m X2]2 DCf`Y]"2,(Wl3J뤤Ci (1\@d鄶~| Dl!?]P4"{: 1,M[Eð&d`8q!e3" Ř,E+z*"d-hiˁ@4?j1^E&!пy װDlkdTlA:X~<r]B:v YV4-\BiB!J DEEB q%k3sio DL0cO6rkLbUD6)]$h1M"ёT4} X"I(G*vDS'2?qZ@ 1<BU+FdSRF_ov6}%y D;a&c1b]B'aĚ'Mw;Z}&77lr,ךqh VVVP/P(V{X˿ נ=G*K3 buq;nQt7Fh]0v'eZ5]Pa8 yHc7TFnfc{8r얫*Za,MC5IK~ >70"~rf/ +W31\RI XRm."]mܠ; b!2*RlW %Gܰ۝@ p"GNe3 DAI+ 50T 駱l< ."kq;nk &#*teY0le"`4sq űMEM7grtLqΞW 4c!~Ķ\uz]U' $fk7HRLٜA gɫ5A16uykbvXٲGV4 Ǐvn eMq,j !%#TudVuפ&LSݗr¢@d >luDODewE MHĉ((ȫnTEs -Hbףg0({D r"GdI굿ڢ1`M D4gs6V3yUehqa6fhT &I=/@T F9^APԈ+WȺP#&\%Um}vٕdZ hI<5\rb˶-y;G+~/B8cHM~[mX`jhx{p W`g7,ʏrS3mtd@RWSiJѢVjxu?+X^.`ܠA7X,a R1bs-UuuMsuŢ.Ǟx:rvB[yowd`#(Jl[]x;"cU&HƯ TܳK5REh*k")BB?K=2Dx-#tRSؑjDClv,*: A(b*FnZ1c\ 嚍VվeNt"[T ]R x%p= 2, Q@de|a8RW' ó?1#qM#Tf7uͰ([($e*Voc**f11q%f!LfmE۩BtMak#7x\åZ_\sUD"$6@=΢`@4@l*jI_@΁@$h ;M(oTqjĞJkv!9v[E}pzf{jJ5Xr{[P((.̥0; ?45XQՐH$ 8"㙲cB0Va]>).0:2jeQ >c)z ɨO*?z )G\]!]tSM-` vh8{h^6V_lT!:2j(#52穕P5cC *W|6QΞ=18q!27cLi  c]&tQ!D Dk^7֓2%@$@T2r]F&lӶjĐv,̭) 5MmʺYX+e DjjӕodVgz["jT[m1߰ 7"0;~ XYRT(Jڭ+J)UBTS/{jc2mlN HWo9ۚTr.bbҥ #BEe JֻQXm$Md`#"x099;,بڅ׮f7۫Hm^ML mw}6#ʡ-DY0 jĎAԴLdOb+'98888"-Y~8sfs=D" L^W8gX#ѓ@"  DQ{I@K XY^jӅص@,Z(bxO: aVG ڋ($3MY(U*jR% &]'P!himIϜj RrwvD,n!Yà.e*(X@Iui>z}}%e <{'DBQ$gϚ]`I%$'wmN*hbTĥ ۑM/'gFTF@ GWHő0?qjP9&ּut]X8 ۆzQ#6!܅cxCγ_P=Q,4fgD*,qJdYb&:|H [HA J뱱"X,#M${u6LN`ſGUw-ͤ*ud}ݐLOAqU\M Z*RtXj5)95Z AT`ڷA;m &WJ=~ u d$ y\ymAԀf ׎]*"5{ ;&PqF;22}.musV'΢TC|GݟIH {:7gƟWcޑuq72,Qsiɽ>Lv TN rpppptyx4x!*CkYV_oô#0D4)2D F er7dci_"d_Řq F yrxy̌ˬ Qy9S A,ۺ DZaeK 6h,UNhz"LӳԡE,9ҺFը ! 389C>)_A^?<9&8}~4mlMmϾ5R_R3N*0HBCȿmYw1(2Kmf10spppp/,%*i8s b]7T "OgN ug!hb33h\E {H$ REq׵n9 |WѯF\ɥ9$h{HR23ĦKB =-\*H$H"6[3@OzN X@XcK$Ǐ;5C Hu[w`CebuB:VXY}3)>=~ B}g{&ظ|jϚ8pܽ0`* ꙟ_~ bym~.woܟG#8=n 7  tchv571 -f'mve`a^%8Vh50Da͚1bPu]' O64M@$h,$3trH-@ +r +SR;>."KGG3rXq 嚌%J+_(Ǐh@OLL?$ Cy+ ȱE]iHO.R1m)JmF߁%iD $G*;l(H;%aT0R?字1^H(\ic{i)9"ڨB<1T%JNKxuLL(^MWX_;÷'_ō7IL=1rlx{8BHV[ m->6c蚵5.*ڮy1mZU@hxyxf,X" @'0':%$"u ƑY "DPciђ~1*Rn) IDATx++/LO| Dt0>.Â\7#kXXVxk-c"ַ aͿXl!1}JQQ!m%ՇʻWz__oPz>:NaHDs-<ڑأ8b?/no 4$Rq<+1?)r24@ c ז^Ycڼb=kNv"GГQWPZ,K0C`$(F+HNd`J*FaZ'#;\&-[pEx}Ո^?}kKX]#emXƌb歫tjڔIַTBsC҈DQ%C~?Ujm&VIVkDB1$4R'ϭGܗ.aJET ÷_~7Hs7\)zo7PTN"I}EFJ,k6-$i"Lzo]}ป_ 'X,<#GSvSnE +Lލ0b-9z"$2z_R]B6nRz$tճ1 RHl.#+/o` >w7f ?اffb3I1kLCSIW/;޺-jo&QfJV6 _hDb6M%L$"C;2/?r wqkdb6-Vlګ#MkHFUhDBQP3,g<>Ddgf@}/`+n\z0JAQRc( opz1"&&N/]jCJEgyM%OM.TdFp"O ?'[{xi{82~7pJ ##غ#8qsDiRyǦ@53B1fE 5N)(g=qf_XPVVIT)IT YM!@H-c1| @kDҔ(D*%Sxh/w6m8$WHhCfFjQ+KX_Nz5ڠ'6!>o Lĉ$($cLO~fWd,#>`qrʔ!5-gxbM#cO㾇(KعgR.l}0OAZ:^ML dgbŶ-̩y;&l"1l;9YNZ p" .r<8zzbH&Sddrv:{ӟ-<5[M #4Շ6ԋnq RFg) gQ]:.o[WjD? j* #K52LN+KcV_uEyR*ؔ^ګ[YLGEyGfb%0 <GRFlz(-GHk}n/CvxOaA?s8)<ŧZ3HC}-.̛ÝbpO=yd2Y ydQG*ԩ7-|qĉ<)^Z@QWe>30{ζ\ugIhv[6&oT>4n'!ڋ_ŧKh}Di `GH޿ޫer]J59 ΁6J]fP#"1Cmt[ٞ12;PpTl?盟۫>7'^[?To+J6Sן3S{_H 4M}SlS@`|<$| |޺F vX01c9a}OőLőH$d^a}jUzz GLPݼ{e\㦜Tgl\_e KY MCEmq@tb- [vh.;_%6Ո4qufw{T܆qb kN!?K(m%ݜ.@T<ĭ:7g9zpq,p?g^D0fs. &wlbvx D[hT*D"l}csjU,K''>i[%"2JX7 0t@ıN ۄ/CXA-b< Fn@34csNP U !iEk%2JcE`|:Ǐb#@h=z*|G@lج26A0b#%=3(elMq)WQ H"σaWlD Ţ@fK@(¥82o+1kLDJW|cDu[QD[Zc4楥Z{AšNba͹Tht yCSܹ{}@}a%j&s9*^;9mA؃̐bVE*j9N\˱iP?eQLz?-j=ϿsS#I6|}]Ƙ-u="R r_9 E2B6C__|?MȲ IYG~Q+[D*_l{v2}xL|uD =~ @^R4 vۓʤlIşًbًS'k'[%pRɔ$"HuS}S8FJI/?W~ܟ>+G?X gD2RтA$  }HH$HRͫ bX4^bfƉhPoV(פrMWLDjnRC6Mw?d˖29SHR7bZČ[I߇xh/>JfzE#fIHHA8y'9K6/>'ρ 'YkOr|Mbg.bW8>6 gB,p,6Ƕ$LW?o[޺޺Z/GLwխKT}AHHFMUG,EB~{IջtRU,mu_)8χm{.*|_8<|kWeL=dENs! pλ&/xޜåLj-}{#ٟ[-Ix:v l¦-iE, ܌F={ax[X<53ũp pY{^.mي?wO>1#{!wo܎7^w?ߢ5Fʊd=~h;Rn%~Xeuhddddw]9 }88::1?u[p]T*JeccXa %ܸIHS|[M'_/<&c;],F|?O&eE!(n=H-ϣu 2F`Nf5{/@E6>we,*X$ iXz.U%|">z*26=LwN<%*qFzV?W*?Bd#M]q?u9 u "(@e߁TgJPHؚfuhddddw4lZmk֬CRE,//Za#pyyq xca/*1:76j 5ptiQe"6eNPந&GP@ *4khD-؊tш3g08􋘟ז+eN6_E| 7o`&k٢dݗ=D(^wUPQVi^`@|{e33 6~`/?/Oλ޻qӞU5uf3+DL t@DVTb?ŬE) Am??SBTTgt2~)M.(/sg#b'}LV3Ji@ EúuPl^  ,\t h6/NhᆷC׻n%x / AuD {wٕF*az2m_#\\?j#Dz%B#kF~l|# kbtvņ5HmXǪ^BĒWq#\<p6k DEɆr k֒B,7:T=c{?.9s8T2O*50Z42222k}Oc7add/ l{V <,..…8s4Μ9g-X000o~^Fj55ИmDW*˲cu΂`%:" >Eݰ.\/bb&&&aQ6B-+b7: EWQ  \5B<0Rv-X ?ʙ3p&\oZYJN6j/ǃݮ"Ǘr;Q5wK˨7j\ߕAJ% aQΘ `n14m Yt9cp6q0Ýw[y;t6.h"t ?u-J\E  V'X5v ckpOcӖMxˮ&&.`lڃw̫6a?O swذ)yȆ xϟxs>G(>{܀ 7GCľܳa;ңR$͔>JmĢ{rbٕ2FFFFF!uobrr=FG077ju<py:C1̼_?VYmȇpzrA$+@,+ฌҽ Rȫ$o2^}׋?8]uL TǨډ,eޤov B"Q/'Q\!wAds^xqh8s|O=6;S$:T0=xItXlbRQPsGMOCUWb%#wgu݋;HŠ_O8_؆ϪÃ{.pˍ*M_7nWVGZay2OGz3?pL.62222z;.FGq Qbeeνg`~6Vahh?qM7⦛ށ]u :K36N.8.0L ϷcMu}>+o}Xu}"c'QmalM <غȚhT$F=W?ZYP팩=W7lQNuI)d7MupRǽI_V]X|ψvPf EvKG|7E![ObfλOoneh4Dar'ׂt4Mm?xJr:lN؅m0w~F4=胻gϣX< hqoC`yl=wdUTLrI~n-r-{%o~~xǕ~O7kNWQaNGY0hdddds+LLAZY8yGxSX\\pP v'rhy@@- D/icvP1?G DLa{e!uG/#=VGG&F\g_ź/~ ҅AS[ocID]r|C uڑښԮavŎu IE,;nla)-w1<fw#ZSm@DLm/TBJK 9)<5Ty>{:l4N왝NP 8 |7"F,<$:c>sT{rCqJ)qTkP1]j G<a-غE^spie0@#w "E& Tpx\G2,wD{Kpwsװ>D<'_IS;w n#~4*,r=^>ׁmDR*~g,4pi$/M9OoH%W7%?(nG Z·d Ѷu IDAT`b뺭hݻU\&G#Gbnz֛q <qWLI&tijv-gS]tԆt!?&OÏMa'6iZeF`g*˱YYD)^n"G}h.i"oШ_bWZ}]u2`uַt)M$"-{?,9D+봝`EEiSje+mp#VhLW$f#[ֵ̽[~mĵҽE>~:yDWV@E& ZP]cOҗUq^}CG΢,wR @ ڱ=8I; MUl+Zm*o&}֠*뮻8N| ^ή{iTs1~pG5[3ꝟTThG鹉aT^i}>9/hddddd+ 4ZlŸH'j:xh/bS4fUY2Ln r"WP]5ZW0V(dz8m}xڈ08v&|'}K,<"]g;w}Pvgчs8~VFFP1J󻥐5@9XX6^x7$2)FFFFFFRMovi~^0O2 T0=FVk#T$Y^iG/8u?c IJWdht[)Zn4$1yE/Nߗ0ξ˙uK<g~|Oͷ1bRYR < gthTҗeť/nLjqEݻi"x8/20y:LomF"EjɡfDYe\ [9ʘC)I! ՝}w7mلM[6a;㚟޳ l-h4z{pGpGsɾJԨH+e?[U{ȸ|\ ]F"7kFWr޳Qaɺ@-у4b`6n8+ 3&Fuu0Z3*4/} *_g\Un 8-n*Ƨ/vሤ@/˃BAZvbWoi`fƇ ݢZ<щl2ITb#Gցy;o);߁80c8t:5~8}4^x=>[lg*[nI@~I 瑾 hdddtiff.\^Rypqݺ`zYr5r15;鎑E]S2ӋѝH:~Ij(|wP{e ixuqцM9(Ŏ) 9?7 pk;~>6La)%;B]ܾ_҃ T3?'%8F}wBTs͝yD*D"H(6RRn-&Ȩ$:tP&9.o8)Βt98㸒E2.9W"ySB7[#iPx 6t=s/\3 .\D&IY j#^;pv[|3V+\k'qzy,ˊ/lacAx5dWZlJs$}yI/}Yz~K ?q=oPp眮{*"?xq9V*lC!/9b!mZoIRFEtɢwSH}܇{7x6cnY{A^@=3?G׌bl]bl\~H!.5%a*FFFF%ў={RE чo8z(^t= ֆuf*׍42lw}kkۗU@ȇl a!#h95:0*2W=6G57|X.BCU ^Um;8yA+Zl=ȚreOk '*zч|x(mWpTb%,qAfJ['\ p\9|*rPS8b%N_/xZLo~Ia61@)_&R1T@E>;GR{9.zyd( ;>a',מ9nyXYV:WV^ZVkELX@e5xW 㯢u5#xZ8ȵE^DVqGOR8ĖCr/R@R!Q*3" 61s|]D[;+X^wm//t4 )H|c9]x -ZbX(b0jX70*Nl} ~~';6\D~p4}~LgHF&5:/b2&QZW "`M6fĝ]SȻ #٦q| x>(?g3 y* T$*5Y&_n hddddd0-<{^wyg#ԬfZ!4@\a=jvJ]="edyD|@⛾pDT2su||GO pŪLZq{nF|z#(#t )%@LmOx(2*Sv)MgG9ZONT,uc"рe;>D#####@7 Dv^DJZ fffPjXuhv -R# UX[ Q + XY\VZvK_ _:lB,wn[qi߲)h/(eQ%eK%ކae絻v6\%ݣ{  (TN 9 ٟ掓8źm7)Xfd[GO{(rT'ϕ~| D!DyԝRU'@ESP]|*? 5z7hdddT:t{F෨H9Į@6ˣҵ)@ DC|YJcqQԕ]<>靗řWqkY3M7I^"g8"#aka(\ & Į]0=[Nܐ6. DI &;vYm|uOAbi!fIs9^%W2t~JSW.Gt]ɗv6l6].;5 :t333ÇkuQ>tPiD x e+βڠ D:&kuY%3"j(t.1{H3j;3^0f%.jQ]%o|24}%vNw=`|k7uh^uCP.C-6z(CYmwsqu$=mݗ"ܹJ*%+m#K&PUҝIT ~")ц.\``^Ąp!phҟՓWOoȍD秳2Xc,@%*nod:]iʟ/ŋ\{<W Yۂ z<a!b~Dñ*..^djH{US7#hvn&V}!rڨ Uk:X5w՚[̿9s<p7mلM[6al!y,xi>qs.bzsG^7[Mk"޲V( D###EҖ GB017t.Ũ6'޵tzB;AFY"~f6ςniF"cϋsTLRn}VD-}_)xٍC(L~iu,_PX\!9F"E*˵Џ'WO>FFFFB@PEtJDr0SKȡ +brHTMFEC-5{CD7;q3yCv&^Y0;Gֵ[lȱ?%Z7|ɷYʆFmH%@[;1Hw4X8=4WJ]1I)Qļ b $gJ <2;8$r[8;NWx}h8 ?ȱ 3qd-7IĘkvѝ7?11klEGG "F<05bT+b7&n3i*'6^2THeYk=%nFCEg-T /IeCH IDATy~v]qFlܼkF H{~ȋ8#8#8)zOl5[LՙS^D (X@lbEY,8uZ4PQ9kcGa\Pc]k]niުN?FÃǩml  EUAA%UX器@V\ǐR~Y7/S;(~N]GӍ~K'' @4222ă l/f[ HC00T`@JbHM$,u۰lzXY-? y=핅0 Evg X@>S%unScx~#ϟ?Fs~5^C0!D!Eu4AsP܉D$݇pGEi`Ú ފt<< `WOOKO}{T#qٿT2!-n^&PqbgJY'Nm@b25z,e6kQH}.Ͷ$ٳ:2c7`](*:"bK%Kr[8r;2gͮVhǔjztZpwy5P]qPB웖LOwoOE+I#6TB2};-*^l#m˨25Rr|Ij&M-PiDuVdz.cY/[m׶"5?#pĩݏWǺuU D Xi:*kz$}TjY1V뿋o G-A&rDžH:sBy1un4jO=ړ.V^n/ HNmx @ ש\n`iҗETkBbV "u#䴏֣e9oSV;ED(Pȼ_YPJHG˜ΉR셟qрs0woD(2?Igش9X$߳_ P˦aJGV u3ɵ<PZgIUm"b:vKc\بұѲ̀Eu&+_Q- 1ZC~#\u[[0REF%L>LgO}rt /BmtHB-,&P̜d_R&(, "Rڐ(2I쳐GL2͟D*!,1 8F"]e]@Eɱ%#-T@0ȨӗMr6Tӎ2䊾i`n\7\71CYG!(051ۡZV&<I"vl$DƨEI;8 h$q|^&Kږz{v@tES72xE֞`%ݼ*rC^2ClK+7 rz EtecёLq*B%}Jxd8LU߳YAEy(J"SʹNYm8C~8<Ս+>8Y}o<q,-uxQ"x13 *ƂkeFhdddd[+DCk+W:7 HoCy[,:9*iIPB* oxHAj_C01Ǎz l*?P!X*䙪Tqa"&74ICF-y:ߘ?ݻ)hv+=F ;|E~N}f'܏ 2q{:}qK*8#i4>e*%ɚ |}i` ("H^sC=jKTkox558߈iu% *. ;z_]jY], i;p[x&&&011L箸䧻*oaJCɲ~PeH"ZGkRڑC" \1YS…n޶FScqT:_|7F_x/+c߿|JS:9+}{d16"o[d2)  "}3Pmb"YD|Ѵ#/nFRtO~f΁\-/SpϹWT,M?q(H(n:lڼ).ӳ8}tI3a[%c;<4C^ߵVSz܊y}Ƭ./рpسg?hD4뮂|cɗē/=鿑YYt.%eE^M{kT}50B6DpnK'-` 5n msgeGZA Nw4*=JOuE2aHȘEhR`ө0 lE?>w@"/~$gN6Y7oȫțoE d=aL&*m`z} MoIvOY.؎VTRϞidT.X#oyHi#||K[-O" ϝ "b߶aU& +RD'?x'Z-VqYLOr9'[*Bma:]cz.᷒(tL-8s2s" uyq\.4l?ib}َ[rW *zH<#y2($ ~"[3FFujõNABd\`iPt*$ јgf0]tI" X Rr;O9갬_$SDžC.P&a6rF\w@+  ŐL( ' <  u06ֆ$p"NԕSeJ 7 LS\=CN%-y?e >JPqB!9S6`QOh4h4@h4g:0Ä=][z^!_!رٚE i?]8趣]`W#3Xȵ#BXPIȕSL  Pl]6Rh@d \5xEQ\(<DzŪǽO(}Yb^&bMv}n433\8a S)mjKbS &M|>D=5@|.v,P,Z]߲@Ţ Q. $ <,^Q%gAmP(^x,<"#AY"_CwX<yH\SFm# lRePCkH!郘v5~p.WxwɅ=ymH\셔 !X>G#ؽ[٦)|jCEGt|M@08p(ZA-<٨c=^[Y;ɵ^R&<)= ;3%Wg:1 t sp2nzcd\=?(chdddTh((ہ٤.FՉAxCOXP_<4"6 \Xr !,WdV}J "F!C61Psm&PfGmW㥏[Ao~:F)nU>FG;>! LTX6b{n3S җ%>0-xh"*D-e; 7rTbA pʘT(@8Gb'ϐ2y'PxHLLHo v|!a|O 9T4 (}QDoјmD.K4;?Q67 T2"< Ezzܕ6)nYss"pWfeXTZQ? eLy]F$f MbWc?]YǺMս8)y`Hl'ЬLtŜfCp"JT&;瑗'T[ H(=P}hVWO\ƹF>a"0-i;׍8ɪUkpWH 7D>$cxr;M C ~$ 8gO%2Cu`8"$֏$۫訚] 8z5dyPdx_TSE):rvJN{|>iqJ?VUk1S?Z]dZ@i)I!;EABc>SVW5N=D\sEv_&2Ȩ`u>|zF#:.OOOcϞ=Di=" D\p^0 oBR,pҗΎ1lZ5,?&Q{d) @ %bS͟ѵ̌aѐo/u;y_q[ݻ`Bdr6=@qxaSb=kcg!&z"yC aU#1cMJ"JZ6ҡL[:F2!b}'pJT%M@H֗,Q%#F[T8I'`w'+^h0@lwPݻwK3'?'O 6Luk 3"*Sfj:])]<=k2P,uW?/y6+U:)%PLE,iQh4h4EH]_zKxԳCDxT  Bc1D%=]vڏb  8҂ (N:E8ƌb !} c1Q TQDa!:v..lrcMGp$. Wȕ (zP1vXLKǶ?K!b?RιmvնгÇc ID ^O^7bҦ%1hpBl"#7i' gՍDBDN Q@83o(Ԅ0+aCQ-i&<p=muoZNx̉jMV nYI =ܹ3:3?Ua"Rr<)(gZQRG#Sp^y*hddddd$+^_=W(D "Ȃ& BY [!u_nC^s%xC 7 +͒y@A 'zi" ΙܵкtK}xo}pw/Kjwq<@TU+ ڍ;B&Nx=s;vߟk_) KoV١a?^D~e԰MlwT!(s,5T?pOe+ߩ`x~81Ŝt$_O"{}N<@ED#####1"7)/Z01Uεamu- ;~ g~|¼&B" bggDM3R3s;Uxgm9<e֔y28]/qģ`^5+ܶ:N.?.V#S*v3#s(ÔQ< C;vT %7]R Q|5\d*2¯T*(fpp~|K_MxÁĘ'WO72 *~4(N {7i7Ս $czG՘ f{&-8G݅$ŋX3<+])r0Nw tfO- Oݏ IDATVCns$NE.&.Q5T4ܶ:^o0p6UDC}C:!Xy3 N2 "@60 bYD'$J⏲u}70;v,.dz q̓z`~Yf|@CDei>ȉ0E3lC4h&p%ݓemYfȒSӼk׻/;KqnsCX5[)"-ɵbQt} l|_ RHOԾClle: RE>58V<9X=zBF"-t@j$f .SCky|(bWlo:HkV>_~;VVwVm A-ԶfeC-yq'0{{UO ΐ烧]WH,gGh4!ߧ\ UE_;%0Y>r>3> u9(1T,Y'btIaN)#= gY1J3 Q4D߭(@j(Ě] @"KyO8拤F[sEm\$=YsF#$"vJ"zk3 8"{ ᴩ|hRl^hsNO{}IL!`Q^o.Pj|^8) GSyD1[ǣVI#Ym J(GG )%& WP<Xzp)>i:+)t 1@F?J"Kt3>*.l'B!NqЏY*f5%6uy^E@bΔhڏǂ,~h*q:qٮ/_BhɅ97J_}J|,;Sn ^c:DM6#8c$%b x7}EX lA(pZR61tȦ#H$:<6n8R):Rel͖):[OM%j"YL=~ӡ^%v/9ڜĜ ֔:5tSFiY\z.щ)r=5ӤF@im4ATgٵ}]OᙶF6; ~e(Ɯ,z-.֕'t4^sr)*Urb>@TftՕ'+$:w'TIǂ"P,0+@|ąO=nuN MVO Zq(7](pcDo"vwSJ %#!$ vP:*qս:I6)z&؋ S]D%^q(%]3%Y=atrED7n{G0xWe+Y5^Qҗ=_8=ְd#yC] :G~AeE"0Xβvc2HU*7(716篈7@hG-_c#kU;:B"F6]5 Irᅹ ucvN1Քi(2 GߺrN{iAbb#\DF@\)"G;HRk=6Q;EdӤ4LsTB*"1/ ;3ps)I>*Ƌcc_%mo}!`_g]Q 35g=^EwمkGT{z^獿ĊeÑmƼ:(B(z^7b-@{@|@\td+TEb^wtj fYkQpOu~nۃ>]3DN"_әS78ƖttRm'r)DT;sZIҋ{S anݗY5Qe'\@kc:?cӃ)G\E' S6:cFoE æ,E݃c$TYPUkQZQ7= rۃv0@;Y/WP@D^ z0S!2"&P#4VAZE! ,Ϟ8e]vS47O !nT} &u+hD{i7Χ0b,HL zDb:эnXf Q˯#xVccc"jͩtʧXm,5\a`n,Hb.<v)mSJUelw2t` @422222R҅{ xs,SUа@6\Cmj2BI>,k#A;EDs؈D2\6E g\E\gmCbHKq4"5jĢ]ѨUiEm{dhZADSꥍFL ~NO QC-'#:^x'qidPZpe3'~JWJl"'f~Řj:l/g(PVP߼)@422222RkY,PЄAU17T!$MFӅ0(ϣ:D^4!D frnڳ.ȃPV)m'đՉH'苤5"hg[YN}՝tV{a~јgFc֟SD"޸?[03jSqY|"s\9N+ZLcHUCQp<3@TNt!b(u *K!`BpdD]ءeEDgK"wt5ˉ^C XM{E^2]#/Ik"UM>%xU咒TKQ}(*%Տ3 i*vَ#guE׏NfX':JD Tȿ|~|g̻9JaMFT$k&sRgE }qLZIk@1,1K]Ps>v1`'=ZyeQCH] Z wmeXEF)\F,{f5Ay!BJ }QY0Qc.0KU5hxߕ 5㎡~HDmu/J Gy TUQ <"':Iᕚd S4p<م>u'LH -PT:0>S`> -u!xmX"e$zj"2Z`g(.zLJZ8M VKii$,Ӫ{;VW?8y'{osNDFDw)h((P`$}zZܕU1R'e.ٮ;޹v@VMmp5 Q4,!LNS;KDyvKޟ?brH0A";s,))u"$&gg>}o%ݒa3v!_lWV\[LH$p^P<\$P9bFFFFFE;hՖs ]H=c6}Xr)fPȔ˶4q$h =]r.77oZ'P(h8/ul@\#9BjmЍ#eMV!j@nj(pf2ccqt:ůmdlgDP-y|8#@6OFي>bFFFFF3+z dIL ݲ)Qlr>Q.u8qtňalTci:JQZ0.F6еGxtuDv*uPw.?>3{uN01{g`.9֘k=^e.%mstfSkm$ DWzm%&u?`~xGϰ Č !BTXf^iq777ev{a"RHD^.Gwp$1$iWS$ ƴF̉ٙP\q'941 ⧌Jl]O`wo$NX j &EGpI[EfOD>NAA[=7٪v ȗ5DxnXdhEz E=-B(&VrnǪDAl`=Y4HS/ @}> (ބ7d'=G;=RN+CGŒXшF$M磩Ft*g*PAϸv5K@tד#V/7ݿHdpf39!:XAqC:\@&t7y\kI$0=XGls_Mel܌PfN@M2l89{FP +$I $LTE5Y%hVҵp&322222_C'N*j)hDDT!FL?K=㒂M8]0K ˚{(VuޔlFRR0n KTuё~{˗s8|bO$>q1zBA$xrGL"jd#ɚɨM/B(\ӷ %bFFFFFFx 2x牁bm2r2@HY;yrq]7x.E^$m "I0-l%3ؗ3xB&322222".*u; >28sJf5H|W"j;D$Q({R"=X[v܈7%ʺK- ޵$_FMO3yVG.kp I)蘭yn:f9 Ng>Jhn q: ч"WBjo\pP]|Dӄ_Fڄ7ք3~L`\dbd1######$`Ǖ`AGu"Dj @< ˉI& 6j?DDKdɬm-& 9CcZB/S % ٘^Pȹuu>|Rg88GHYyuR^w/Óz/_TTs >N^ [!g'ǦshxQsH BqY{) tLGc(8(%t=Yѷhmd0E4h2uBd1######rab _.j+D*weξ6'xBQ8lv Ձ ٤%@_,ٮ~?Q r#yz2& NH Aӑa٣OYGLD5)D\6/$\(,"[dVƮ MMJ Lǽ IDATluIز]ri)>$h$-cg1@5o5Uqh4D' +[4؅1k( q\x.^G<UʊLqB=aQFHxN*8lSF"88g4Le}긆 Q][SC;Y%CLw?n8'-v3 3p<<#1Oߪ^w"YmmAOeqr1P7Ya:?|Ю$sbFFFFFF"YL҂bKa~ 0ܲR .!2VJ )<=gk#EؖXQ:[Q}ѶFF[m,䚋(Cq$::;D1fMfЍ" \E ru eϩ\ۭD'n{3ۺ_] V]jӈțfwVM8gRY$2]\r~?mP^5hFd4$$ #CA Q!̮g_k}f>4*V=2Ui^X^`裡 DH={DERuq׉mhh=T\8 g2q&q;dYioS8Ũ9(@a"QD$Fmg \lbFFFFFF$gcd@,D1h3"cDfof|6DTOؒ%!J!DMd`)PpnQ!z1OhZĺ1Tŀ$G"ĘOhb&("q=E';9y+@eeN#IR* 7y?WC(&e&pJP\NHDY{)#~cC$<$gZ)hDnE!0%#QElJOg_rZ5ݚqC)g^#5)wiĈW4)(:r>6w h౯,Oi ͕1ɋ-QwEsH&}(oX#kYlv:;g6Ҿ)$]x8%LȒVtFaJI/WDFE!rVDd#{ LJAm"0o/>D0 4Mmmz} Q`Rщ}>*uё{k/_-xHOgGri7. 3- b :&SWp> O2-\\y^kHNsP.Ma/dK"UD Yi&f$fYB*"rbFFFFFK^%rHHB d3 n2t.^憧کG r1Pg1i՗WP%,v >Ӏt['uK8ee^ԒfΠ8:q+ >>O]':\oc_{ #rV 9g_k9dWz_I?{mLey6rHCP[h1щ48e]i$X&xpHxOETw$-{1 d /}.$ C""q|b㑈z@doo aLkl>\KK$YkX$i~4F.6k\`Fj4KAԟoyUC(*=|Obu> ؇  b<ԓS&KyE'3 z >s_OVO\Q؞ZmVu(Lqk6+53x0l hbQ,-,g| Fg,Gd1#####c2`QqQ(&QF69(.$B+"ʢDCl]0; lZڶd2GaY}Tv$3Q9£ Z9!!>_ 8|"_[xy./K*&)fC7Ó?Q K  4;NS;{0"Dd8MG(:4?QԩKH4%fEm~8kKt)}RCL fddddd$A/c "2c5ȢTA"۔ڠġUZ@" 5Bn"H!l:h>0zZ˵-ʢġlF$VbDv(]hܧ;.k>xF/{7:?tppɶkLؔ")E ; Rm#IxNLDMc4J34yLd44d"0A y1Fw&e$ :_3>O#322222@<C$1'#bAF+0嫓3-:"N{T"*)D"'5A""yR*֚eצ2xy>IL6 &&,0q8}K"C=NDz,-@/kD__߽!T ˇJV|d#1*o{0@`*Fڱ}&%b1wX7*r3=5{C趍TێYB0aȶF 0T[KٶHijB$*ɶ[Œm#322222@ 1$ ;EORYdU74%*mӝ;YlIDN1hX" oMZ P07oMBό %5it S,v c_Dْgq"o/wJlF0G< gIfP\UW|w> $B1>p,\$Gy9ƺȎM;5i\@qaXv%Dn_( z?QLH&#ăf}֣T[gddddddOo'SWʺsT!Y'ϛk;xܸq~ M2IFU cuKF%  py@hjS9˝#EDφh^pxFJǵܤ1m@ VY*/5:)E*N{F ݾ[&R[Eg9w}צ5 TΪ^()ɪ^ ~}'l3C'e}Ň.*,$hMJauH.o"Χ$Ri8?|.fD@HIprou&`(\̈?083!%o +caƁ\1BS&!ǖ!$Y1ButBE| Eb:'!V{OU1kEqqj m\X8l/'&hY,P׬\.Ǭ v(:q&~!/RS E82$&)קщHN)/= @Hm6xݠF9(Cc1\Lb;Qba;8`Ң('>v6, US|1۷Q^1"(]G(`IPA"nKb?2o҉8EIHx"QVԤLdƒH-"P2S>"]AFp"1g\9~Q%fI"OHL6I@H~}uL#@ ,7 e(G l&(m'E")8'GLKNUDj׃'MK||^k끾 BQP)-yD}M񱯽HσMB vH0vkpk"ϒ&BnR E91x8& VU>7:4GɉHT@$3 ч@H6 ,f  uA* E(d$bpyJ)H<"5 !ITvkXt$y eDID L϶a}19&^8*; iM *kwrXeY1TT` wDd3isٯflq\1N艙ZG%N^k"["8n׷G E4DRHy$\.; E*vx1_W%'[<׵MhJ Bl][?Dwތ8HDNUv=a7W&e ^lZĺ> t=H2NYP8!odi[-FtH `36bFFFFFO< 5H@Q,#MPZΜ:SڣAC bL/j}7T#[o޾i%2ƪ '`YxJ@L*(w?*܇;)8|"J$Nx`vlezd Ńкu J"?W.$Efz~aG:MD!3`cEڅy+jj_׫S<:&GLh‰'3_@!Db@+BP2`rd$Q4h }{n hJ{$ "gv(KFI*\jS'##d%wLCy{⁑)Ze701%dW/~_@O$GLi!n^z3aԚ&Oh;Pu D,gȑɴPf->=N^ҝ E9k)!;0!̶xK̩]8&%Ao=U3qShɢ6CL fdddddBT+G-ők|bԁN,&) FQd☿#nMR1V*SY.yt$"OTac$u-mjuˀYȭV> SDz^(lPo6%&ӃKNN8!~cmї,}c~:6'DFFFFF7n~ݷ-wp+#P#tmGxGG뢼=v߶kH^;jS6u>1m˃ qK/]hvC[J`ٓ:@{Ypks+C۽?~1Bo;ڑ[]%^apO${;{p9#3 ;2RM|W·^P2%SIC V v‚3M^4$1%}Uzݵi6b1LqʸϦ27hSm[0 &x_/ݓ^FauxϗFl͟/s91#####ciXco, FexOHb0l q1ш佅",KnV&</í̀͸]u\jSOl!;Dt'V>G$~JL5))RÍlrh崛+/~n= |I+87ihBEN݅mE3$qɀʅ3 D/%Sƈk2UC ؙA vϖ ߠm"RbRy^ kM$N>32,cQӵ/4ȋlgK,ۥ@)XMl"6P؏dDZ"]D j;V!Lh+] ٜE"O؊B3sO=&#5(1X9xHЧv&Aڬ+[34w"5D ` ´:=eQfF v嗩7+OUi'$]\Qn֝D$F]$11R W?[^.{,sr0uCk^|`j#9/>WĭDw9 /o.vERϵA%<7"%@~MMKefxU_:knfb)4-%QIL fdddddŠ#{Rỏ'd}[ 'YG"&v|SeʪATYfp:uu?wCB7Yj@Au\фBh2U/gK{B:rZeg@6~ HN"'7OW=&YőkiI+8 gPL"omļ*Q~F!?YIPYD-ݳ"/yȏIyNNIʃmMjCR"Wrzo!@&322222Fw< > #e1@%Lc8d#,wY hNL42&/8ġ 7El!ݞE Z#C/yx-P.w.O:Q{PO(vKM ( +49Q7P꾆ffHS/i&aK$4RT-$R ?a!i0 ĝdl%1jO6HuLM+*@^Vm]wQiLv[$#*H4NO&322222ޢ#F*C*9BLчqq8҉ ,hX~$"f (PmX*17`o(yn/Ǝă8[?@b\zI.COjDϠC/s-%|Od(EiqEN5y8ƯHC 0CwmOfݾ GY@R вZ~NLȷܺҾATia-^?{dВ2}-OdCjI=:J[rA[r馝9068)бW,J>f:{+wzŲlL{(EMX;pPau(n@b;k_n ?4ggXƤ;\KRSg{T.ʸA(4Yt^LE#-9k2>#uP%&!rX5LI#`7CU83y@:1 Y}PwniD ՝1)XՇmH4[<$ETW'YL:#F+OMP n"^$"U~*4u74p}gӵ#6C~V@x KjA`DMցD`@̖HBhT&Ra8 Y)[ Iҟk(wqYNP"˳EseRwƊqYLC2uٰ,̇)bn18K_Q?50K "qkN2k$hz,<,"LG,*X.Ⲙӭ&@hUBH*M>9~kDE>%mn|{ؖHd"Ι@xvzEIQ?F-YE'uX?>c,9{4du+^Fjd,mZdr}[exkL)"+6j7~u"OU/u_ _t^7NrѪ%L,ָZ0T2~Kl0d%VGd)9uZP-+\<ڒnFLRtSHpd{B6"-ch"#7[cۺGڙ,3<bFFFFFdĻ?afBٖMr00!#c%|n 0Nlbtwnz (Xh;x&Xm䐐 '!b}PșfQJ7lQ-G%tO }{d+|HLEK+KI.˖Hę׽]cw?pg?ϖ"|Ʒ0fo2.eb9)O4&&Pb'3B6 %qN0tP0Xy{.e bjH$y@#Lu"5}}~+k@E/FUC9ll\ D(ԖQn&h^ؿ@0 O:T&$9IYgL`p譫W3WF 7ɐF]d^{:pu! Iϭ+'d_BKBGم6 ̡.e jI4qFdbOЌi;N9&0wؖDj Iedddddd8TwیvfX&_s4MX?+q\x .] Ŵ@`TQUN˪̮Uֻ)F7hJH5Y]vIqEG'|q3{M ^a G=##U H]WP,oȯ͑9S/)\޼x3? ^K67_L/M:_Ow?SBiaÚ6Yyfl{ݐ_qEQ6cx'#FeM4T2uAi1!';S^i 'G3H#q*b|ڶG'Y,L]< j/k<Œ?̈i4RmFސ%xYN]g! Pa)cBkkeQSWs0^OU?g<Ľ#|k?x?Fo7$]0~ [<#RCuE` &Fk|~P!/WWOOcX}sddddddj2Wwh>`ֿN2&鴼a褤eJHhsMJ!Aw ~D2 /,HFL1Pp4}ء( O1zI>򹮠0{-Θ7+4yY;x+pW|2}|Ty̓[W+_Wʶ3/"8ݙzžu$fjG;X}K$bQbϞyKn?NP]="~i"ьF\U,(h}e'y2@@Șzǻކw3A Up~q|GQBp#eQ&|ks ;f\Pap &`QפkB0 JWEU&2 lr%~EW\.=ֵ+g?\:<p;ҭW+V!ALdv<=P,KE M6=61An K43%,aяTFTfbOW YK)9<߶1}D)&۞ ֲ/×nsJd1#####cB<I:}$XGص@PH7r<8I{q$+Mir/On[a?힃PRP23E9ޣ,m\R~~Rp֜hm֬S)j3_<~w(=aN4"PKr?)nm2q/x@){6(8(@D& 3Ox&Â.qJ>%tA\Bqxlv@ȘO<=I'H:Kc%6hpVqFO5ށKˬ^nٯ&F#i.hnж %@(@fSG@K`+}* ߦn*$ؓFGbX.]]^*2 m W_jG` tnzZR0+eGDHR|%l:ho蟱hK&ЄE,/(FIOy!>V0ىlb[.l219m?0~C1eI"r.ӒCv ~{92**$Ðp7?2[q 4q¿.D}`' h+i$"h$"sѫ:CV<;n?S/~>\j @^.- 2ug~LՏ^H*(U({sTjO _A ED$8ڑOMty4$#Q݉Jz_(D"h /ڱIW|Aw46Ҋ>XA*#%Zd8hGWl$b"'m:TƤA|R\b+R%_'=xk~+C͈/C}V_F{2 X?;AF`>c0c_%$tTLg6(Z`&V+'!#8F|ɴ#yHIQnnl{"219ara +B$3CT2fky*C\a[v@9KmZɊc|O@{ЯX| ; @GeV}`:~v4 |Ģ/%;|Z'דt+H)Ga)p97|OOo}?CĞD^8ڽQ2fe_?`+I*,4zL/"_a :zfY NBj`(iEy?iAOLL"Q bqAN,"B<&A&PF]ci@2댌 "]_]旸:*$佌=2|o7n܀/¥ѕ443䫓"'eVB&2U4iiIĞ(^)Wmj;pYC&(Yoj4ГelH==PJ*Tbׄ}6w?wlVG__@,! u9rʵaٮX-0!82ڬǠ/"lzU`@ (V;W]`ȫ=<'Ƕ \~"######Cx??Iu(wK\u3,Hls'DF!$"*_]y2CLq۠j%yzHlא;5s^ Z֠/Z(BNFba$7Au^X1S4ύdNɣ@N&3222222H܆Cx8߫ .{ R>As(8Ÿ{lD텡7 uӾsˀySFZ߲Ѣ$ӝNBL:YīJ;޷_m2Q0Q awTB@ZW66u=I5|OLBH.\SK=ͺ*qf4q8jCr [z=GVl#ZtwTtKDi[A(6’T'OVXޖesߨs? a 21 >O{ S@uhvO2plU|BL%l/ V'4IF_u$IǑwS?Idm*(v) /x$`&<9*kL EXxBVAtPIGPB8 ED荾FZmf/4Eq u~nvdS/~>k?yʫcfu 󅗒}m(GzI28B>y*L21PKuG'"B*,6%u!i :GFNɚ)()k I"G<(Ȅ'B% w'GuB7ɀE(S %vaoqL;GuQȐbp5G4@ ]rǚɁ Dl)3>tzFNga "YoQMg1gOH&XH⾁tz|h3 ƕ'?"|Kkeo#~q(4P%>cAd!zM' gGʉ_Mv1UDaAeVGHKܕg0/ĽsE֖=(!S|pLAwYvPۺWϚHd mv)9 sFFFFFL߀oab_ev(\xFKNd(w +׆1F_y#9_P,tQl㼧 VGl┾$.ҧ jP4Q5HlH j$IIEKoǏ- G fdddddOhޤh lXQS0@`/1[^ݪ0{Kbˉ=<Ý|: E~gOa)T5fB|IUAʢpR|Ny)Cq_<<ȏ>'_x οBE(V&Fx_g_Dbe:Hxbj:@X/iU&%R^l kHrƀl(7tI,Xjr= a[aij> 2 LM2oMˏ?8ч@Ș ^z>` .Ɛ]ri&2e / -&z% ʽs4χAȉ$Gi5GdìM8*e1Ha ,uKw0YXWpnDetTbHL̄縎 &NcAf,= .+JK=|%||%^W/]"MvVu I&! n %F51bSe/bi@=!fI%I3K%HA>NTD&322222fr3(b#2)DpXGL?IbLϔ88O !Lfynidf NZ<_T/D1MP&^(/D;q?/%}ra$$ɮ /B*yt^>LCc }x_W}“/y#}Dv5{Dm~bTؖ?pO'F*Ѹ~tSC$ĩ[Jc1quAf M5DĆ(AK, ;@Ș3񅌁Kěd5 9([Uj؞"3Qbۖ\DxF&?=E"?(DfDbu&Y )lŷ4s&mD&>mn_ &9ŢuϞr֛ğݘP-RS١¦D 9J)sĭkWໟ)sxOG%m#=ʷ'TȦCɁ4$Xm@ao0|0c"G-_NIhx~)gN\oDG?+qR+yvgTp%n]|+|O>/|%k |wx _1Bndm}ɒ[>MEJ `W,% f 2Sb)@F9Z0hi&x!NHp0n[-)# QARbcP.E?q 0EؖtF™I1"3_}RYe AEM:5(cP\ #PQ++4@EZ *(wKd/Hѝ^.D#'rZX|ᥞPYr˴WZ{W 1ĜE0Y=.q6( L?Õ|@Hc.uC`Y9\MȢ{VH\FPA0o[C@xa ČYdF&*, m@Lb3&L։1|}#YgMrǓnⓠ.8G~~ɲ1o(ђi]j ?L!zlL۠$FpJHC.w:[M)soFJɝV7O__{&e:QOʫjP߽mx _x'z;>!P1$!X=;$_K$.{+$Kp_gOvgӏ[!&5I( td?x<z#U4#7n|7دf4K7޸7n܀EN64ސW )J4;:CJ\Lx[_:8vM ^!tC&iWaFHXmˡ2(%m@k3ʲ;>BSPyqp8kO9K߆w޼^xSm[WO;Wڌ?em߱OhF,}pŤ'RDS"7k/JEz.D3|Hvdd V{.i;7auշ-j; 윶:쥄l4(}$0zIK9=gcI(% mޖ, e 7++K +wK9qɄ~g!G fdddddl>F@i2CuTI~#/^/D!' jP0H6{Nj($/@uPWPC5!' ^"#Fo[(92F&;E~:wdA g1;1&b1M.XIja_}!+PD"R"`[0z9ڬ8B4q0 ^$0w?rXb|o;Hi8c{ fdddddl#".YE sά$-c B=F?C!TzA\rr+ C=.'T}9r^q EN8ـ@k_~8$WqJ/ReyF$425tO麪C%KBn<)Ofyw~Ae;(@ Xa}߷'Τ4W0 :D::/ЏAbkWQU3|]#;ʀ>sh*v0Axhd1#####c 1s*r,Pwoؒ.٩ MY8K*˝Bࣟ0:aЇ=VK9[97_<4t3Cpv*S6u%I&͸=r#jRƖY, 2M3 uKF'MȝX1Gnf֪2 7_}yXtE.lA sS8NP,U;(Tw0 $ Z<0rrL!h}$ Eu{?wq^Sz m[ͯ| cS= {Bl="Q[yGA ]~Ć2%<A@_';ږF!JFv>=WbPPANL#LɉpYH2_s&\gi\e$*fPWD[S%X<8?<JiXBG'QDՑ~4aq ȣyBN  "z~pERWo5  moo w,%r ڈ?rEv7qCweGjV[GL݅L~>!-'5b5/%'Sa=~oqd1#####cK%7Y)sfn.#>Rf| h|ˌFhiZ;s wjYn vk# q=432T Ehղȭ+O 3rrޝ$J:+Kjw\s$0)i#rZ%1qS~P&t/ȓ]ڧSbmE]y3% I2_qh7ͽKPkZX.aY&s8c =7? O>:$( HK7D$ m#fvQ K6ӓ}`b`-EQ!h%3젞 :Ed:6i x})_﷬-Gg -ϾHKKG&!d_tE0' G}+-F)KD^K˖%:x(rqfe14X;b 6Qw6pP{j""#L;6A\9yF&322222g/=+fkf2\TUfВXϦKQQj4J):μw(rH{Uݫ"HD@ڍ( q٦tQ8eΧZâ!ɹU¬'T:[ tdZWШvr{@c29%k"`ezK+ ^ZlT=/5W5}w^Q%Un$Iya8qA/zS+K/Cm)XV} ;5xƤm'܉/\pũ ,]*Ƿ(/0FPƸ a /ǴBlJ&t2y]df7s7ГlO@ȘO<ˇ b 6c(bOHBkPƜDX]f*S'|˞^aEm G!LiRƫ;Fɵ]G{pNi۪> :w4"jJF5 G&aFG$ʌTLG=kUDRh;[bĮ1\ |%N5=NORl^uH۹=…biYFԋ\-LE/~P,mH)2eϜolޞstČqK}>c6=qsXp,;fME:7W7El_K?P5ݖ$>mhH1sa9C+bQX'C{ Zض>d96 fjF {nxNyv })PD'Ky} '׋&G =Ho`X< ]I,7H?>pNa9jٕߴGa[T$um \޹Dړ췏jH\{ѱ"ap-¼dvGԑ W2I{d눮Ku+漕3&E&322222Orej9 &\!&8nd hbx 3mB]щH1IKg 'Iocg`9vNor‡y+0r:rt>n?EWN;~ Hl}ĸ/ΉEۅ)> e_,opw/"oT^s3Г6&WbRb)р~/~ 1A[|i=F8Ȼ2o)@8<{1񓓴"\yO&?dJoTwG`gL7P^@oĆrd@؛tG{Csb K" k^TH-?NQ ^nޙ5Dфސa𛃇7s> GgP;%ŤAKtIslE ~GF$]Kn::4⣙C8dY۠Fz2p}-1{R[%ٴ0nS)Y&hGY^nP߰< ν`AK& ԝ˝"! J[~ |؈/Ԑ&82AW!(d1######cVOtt9; <&,V(5sd?X@/ƷTlD"L,!.Z"Bg:io?y?Fk]DA0 dbh)[y}9 c hu_M"2qÂl .s&5 }k 9WmҖ(H3^ϡb/[Ȟ:ч@85<gwr/"ANȑezuYidڪN*N*# :onILD$-:痏 / 'Q]d QV2q AJS6,Y9L >~Ochɻ>rN"iwvRI-!& Ɯ:jb-nZ-6tBJieEQ{z- TyR!N] 9(dA^oi /9Q"Abvmэ<'h,~%Ub IDATrΘk2'e({GD"1j UWO*({_ky&wG2\|S2"cS&"I* A&3222222l3J0(tˊ2 l~b;Ң5&&N"-w g 5m-pz+64J$,q-{':G@*c^^֛aUw>ڠZB*nnr Kh^ʫ\,ĦG*=0#~*Os/ET"j˗2qx'`PWmNaքߙhh"9yB8 zDS_ﴙQmTGP dI]ڜ”L` X2@_Pyt"BT+x@]?E[ ;1Qp߶?E(q?b>!8䞋5_.(ajc]>i\o*UO9X;y&{$ '$_@޾w ip9Őf轃"? whX^ h]^)Յ,7H/<QZz*>3l_\m/bFFFFF)ًxIvL- & LɶONDUK<5A2pbX\P3̺KRdp̞QSaI6beme!/wߝ_ YumJFpB7z;0z?9F* ĴOp(R (C]>y%1&]!ܽ07M"O9p.-I= 3wVI`!AĜ{-< ˚DT_Ny_߷ tcmbDB_Z>GNG<.XP)] ޲h-/?#3222222K_"TbT7bd\"MY"Sk(8TF2 =%JˍT@<쉦9,8Tז2h)gN#tbƴ5VPo6w ! чYZ[t61頷r1 &,ʟT!BV^WQY-.6c8{eͨ:nA*¤sɓvSXwN$(d˲3V^!M"W曅DtTv*bLX@CC$}pkap㭶F&322222Nf6 \0c8Bu K8k~;ӈdaXi5r-S[Yy` j&!25;Yrz5*vϵh .*HUXq][Y6hr"Vw1Z-wkw2bvQWF.nI~e^پiDf='- ESU&9QKN?g,JG>7D @ߏ"7Eܵϼ6Jj ~ ȡ < V^Хm᭖}Y#K\A瘄*>LT+SHk8NW + 7\y˝%b+) b HRRMnMVUhlA#[0_/$u*kWKsyHtO= XT}B0jxX]њXFAWGk:@Am;p莰ם!iݩetzz%ޑ탂!rnDBOcӧh~e-co r"veV JK`RD^wBO亠bCǥd-bL fddddd:x :IcuLLfcv|[w( PPmBY{{C6rđ8U*l5rǭ8h wy#GvefefjJ$H[I}f{Ҟ#]"'Ylvde CجUPS"m;>ÆےBa ?bhW!WJ$Ơ«ѱqرX w9 !Iۣdq0*\HaNaX8iJ'$[6&jA{38H  T4̴ݝW&Ok6p*HDxJ:9P<OZN;Xbt9ه!8p8W|^13mqef yYr?j,;^qߴeRN_NRY*ʱ,kd]>+_6M#>tށ1nh!e,~}1ӞR'/]m$J[ s P u[7R<")-A$턕k0F&Ckebz061a Ĝ#y Dp8(Í^}'ݚfHo\u]:vCfjnI-?GtA3½tJ(2ِ?B,܆ ZA^[!wi Q R 04*"¨XxrPPʼK˪_` fɢܪj4*6d y(,?6r?2vPC[YXMkYa&V?9v9npp8/zij+Eʛ&hFGLԥs$L0N uM; { X _}sq!qIQ8#B!O m@q{dN%JPU AUt^z~vGH6,V`F"=*+:iY1&`r60>Q3ų|Ĭ *8e]fxIEH&p$b?i-WӰ_(rN\9hvUoUp8_(/|Ox RNRx7U?فi$f) 1>gA aju; b|S[d߯$(7H#蕹?Gco@/C\$QvECeWA~$HTLI׏.S,8B[ IzC-H++iؙ„isV^yOnf@gs3Gp,Uǝ(˄P_j}W DĖ nY}u(k3GT/aBlJMsHMnu?WIF~$8p8Wo Oybza mYMK_-QS^%7`2o187 ;\jL0Q<39pbl5pdd,`]_퓥y7̉ŦlƸ9,RRPX}Lؕ&D۠I?M[šbqy.Y.;&V#S+V. ~ӗ .q}ۇkX f_Ԣ1a#$J>x%!VL[Zh4Vnf*<ܫ×dcߒDj;e-pCUه!8p8Wp30θ?&`*9)3tCڿjifiŖ+Jbh^/noWT{ %mh;s,lᵝ+C ى3*G\ٗTTNeK Ky2X:FYLí":i=FwJ6ƅk\Z VןH[$VQ;YUƆXZhGa{eq3D1 }ؽof|@p8CU|QJ,fEj "JޤtuJ)e"a}UKT>Rny4fb+l<۱JJrd[HQW}̠O;E_=0 71Q ͛4;TQzoDVM|dևG$9:y$J jKhB"!((=\}h  1șgүxvtE6하L(v׮)[׸ס|@t8·_M{D ;D"/bsBD6aW%iHY>?-uˍu$ڱgUJ#S@6@t*DѨ6 ]cXW;a%ֈK ,ƃ8%tU1wz <3tdo)J#m1--7i>5Dhħ\Ʉ"6+Xj"Mc[lI}:[cx+|0hhkOǧ3[bOhH_2/7 Dp8"Ә+_ Hi0DYNf&1k&MGej+tl˚ Xcv#xZ +.!O$ja_4bGj=)X?\ao4T~YˉuYG91;Fsi+n 1<x/KLO]ܤ]ExldYd@V̖GQd% f쑭2lR;]%DSP n);a4T"B/էia&usZh g޼|٢!iS}&Of*uKN :ӿ~ !}3/)"8\sD6m!_ ź W_+Y)U9y'iɥ/"WJ* ׎e\~fOX5 o]Y qX<` |bR !a>Tcl3$a6apmF/Pm+T'BAO,W76YV5f2h҇s1#D(;Xfw>8Q,lX)?Ӝ/ϧg!X/GQf4HO*ֶhq&˸Ba7 5C ~{&8p8W>qGIk KlR>Qy³pɩPru-zLt吿cIA Tv/82{2Y9>14u ؃ә?b Ν҈R#nEOu=q4zJf]%.5O9 L2D_77I<GkCǰI^1Ce,yuL$YoY2 unBY ՕXeŖ#H&"yG<}8OLu&ٯفsll eXqqp|euZ%grZn p ?v{'ZLzf:,7&X6fg:"vzrZ@'qמCOl} *>^OǶj&K:rR< z"6gŪgz <9f=!Af4:(O,ne |م3We<|bnhxlRS?^MoR"1/-odEA4rClO/_S,}3-'eV]gQpk4_!:FfD_#7}h2˗@t8+DZ̾hi/_4)-o~mc.1;|<\%ۉ!Q9|ݔDhFBx> dphV0>IJg u0݈!3Hu@n1u3*4K'c _UɁ;Ί Ql<^6ѨH<Ms H#{Gcr$Vd`CA >skl\|aH(òbX(=soF8<[و ͨ!6_M'Gr/>邢” D cmO2bg8p8W֧/[CL23xH%Oޠ4#kj)40 ҶkZre!Nzube}]k =6/Hg%6#ǔBwY^Zf|`LL3_yS8*CV)-sDzU#d8xOX&Ý^:A읦 ''ƒ ; |HnxHvU2vWhNf@>~2CJal u1E* & 6aG;\D$ !˒'Fpp|cx\>R&*A{ijPIf "$B rTIo6BqR.kNqi%&{cL$*ҩD{t8-;,\.}Njs0 xQ(&м3P1ٺ hKDΠ wLJ|`j]lln?%L"-CLy4jx1R*l4}p_32Aea(`R qKhL.BAEq!@t8+OڏĤ /ZyF=FJ`  h/1KQ9#HbUuwKv4-hRe'vw./U+mCub@$J*2dBPp(f}D"> IDATRn$Cq)kmIѸ;J-|iNN :㻏<. PIUI$ՁxR#YdӰ4P>t*'(dž|>)ڕDl;bdbaYCTD6px9pG.=?^$AaMWӢ"$wϜȁ`20xX:[x2ʃM=%`5`='R1ɤYY@˧Ó8\3q@ZMs:&N|Nhqpp8)q`?B{BРv pp8)08ޙҒ).  Jb]ڲOEԗJysm.G!kEh2װ Yz66?^&ؿ$hSJNE~rpg !p|)K~Ffs AA;r[i|1#@w|#f#1Sвtq#cԦ;V+\r"D-)[r=I2lYK{87 "8[:aagƦ~Ո棬\ 22cz,[x ە_-OŢ#'*_b8ƍ;gĖ[k4vVGǏQC?}EN(̷#C.p/b?ZnY:' Kg=N?]K.8Hp8_9>_w,śg7zQl<`e"+h+̚sJMͱf$CD/.Ȍe}z1+ڥ.bspqfh혷/Iy(tJ_' /7kCT|ScCƢ*sY[dqTG 6jO'{i]/bgrA%mH7/ɼ*m@\n Ԑ;Ind! NKOTSSf Bmk1,Kl#PKm !݇sPycTPOQVrv / ?-SF& MCwQT\ٖ24)%=QxH?-7׳ _+:bJo"+;es5)ݠ|$|!'û×wCcLQ["+gcx(OTP}&S*nXfA%e:ghmsA'(תzzoq\@t9X-(ՖA !(@V7Rd`TP:QY2,6/]贬 v`tS\.{ Zɑ(J0T<3 R,ej'4[úsVfxyhKny1nf6:РS?SٜiJԈ"sktE/_p8H5"?UbҥŰKnZLC_ Mhije mDd:8yYk-X=c8!ϗHTBZrbM|"x=\L} `6 Z`X~i1&N6U9>_(r ݕw-k@p8"k/rŃ.NG$fS%c@yYGsl S RcMՈH\,#s4VyxI 6+(. " IP6"Ԗ1ZoֺPh Nj1%jJj ;r>砙q mJL%QLg{mfəLCq}J98,t!md%?MЀ4MC^\@UZۨL'˗u8p8ǯO޴쇓o nJzn)3#5Tfݳd>-e n2kd[3n2 a8x%~Al?\?V?B7rkI?l=guc، %/ypB.T_Vu[>2#i\P@B[Lo狒"un`uvA4GRXhS72mq+Imxw2n.끐u6ПvrM5 ږBO%*h6GmbKޤuiZmJyRpO\G 5g2BIbc(t׳ͤea~2xL|$Xmb0Xȸ0\M䘛+$P3Tϸ#}ɖF\߯azh2LpbS2y@L]F-0NJ0Ek-AEЁ¯ 94IyZ2K?mƸ!c\E)vB1r@ۜ\YS@fH,z2$Al*M@<OD% }wBK:@t8WOētinzVe@GcBkb O6#Ғo_އH$j˞ 'BDȔzۡ08rB aj왨/i@I~}%h m E0Dt`}!"xdfi8uc{7ͳ)[K{Rטm4f@[reڀ='_TVh=UasWiA-Yx6laޑ y7DzOhH"m\=s|0i͵+ӿ4H(BF(V}`o56@t8W>f n~Ŧ,$l=%}"o4*aX,So~8ZV.CpT]n9>e~%﹆1\cSwjNmH^PG俨(R76g ףoB[O?G,㊔*MUjWl Dp8~ecX}7h-+{p̈́-S E=k4 {n•Kc÷J/ ˶`Ԓمueops!/'p_tTr+d: 7 < 9ٻl!: >(#u.lҒVC!xZN7G4%GbIL|n~r? rVWdelF" mx7` ;;w] w}ǥN^"̔o3v]x>}%MCF u31*Cb} N3G]ehg1=HmX/z<%0Di9™#{xu#U S0]A; f2g%G0|uU3Bg".!S$.FI>9'"faGtշ tEdÕ2#3 $Y ~ReXH%tp!^メLfք:,op 2ٟҫ69+Q[]~U#? QkR-1Ɛg'YN\DXCHmǠY*""lHky0Kȴl/_ Dp8~cp^6 P@g, 8cyk(/\S5٬Offގ% :_3s|YJpX\8ܩiG̩CC A54Rיtf(2ư ؒ+f7hk&B$b=W$8g8PriXzUO߶3LYl?J_#wH#b Fi8v \U6K{,8#ԕ! VL`lc%ҳ>]&V?xضͦ c*(/ҬXČjيaEOL*5 Q5%]&`v7;-N :+wŴ(QSʣZ{ f~T:ӎj {ؐ4Rr ǗS2AtZ1sa%trD@+#Q@bӇ@ˁ\\V#A$M?8{B,U6:2N~I؁6HI+yXfFʨռYPRygcGZ+y72!n#oz8S.e2qبT@B`EHǘhD~SDzna71gӞq=TWd$p8)C*6 6Ϫuvoо5Q(Gt88Ӟ_H4{ Dp8~O YMYlȡd٘ΤQvv Ȅ@]{lR7DpXJ87]"b#Iفؓ@Bn[+v)X4-'%%\UT>H8U H8# mkj՞-&328 h*9!5-#J@8<]C y(8p8ǯ ok`Fw][.V0n0|aٙR>DOGڂF*_pPSxZz? A,/辶Z;/[f$ӳU%GS_+Աe8? 3F`8Iנ폪H,JhB_4Mw7/_pooB|̄- M_%ȇ%'5#녕&_ER(5"$>6(I|!+T?DB",X2LBUB_\\-NF/ʬT bdaObi|T$Sx\= &A8|يa$: gbzì=*-9`}$f y҇ IDAT6a9%ҬFN yʅ$CތK`/0~7@&U(b0z ,cE,ccoChcL({$2۠@VKɠ&EB'"!ه b80jjлMS, OG8=K^SlLvKb7~8p8o~,/Fg Vbo]#>E+SŽ$OiegfH*S&Hhtn,A{xP1#6!?++>i^}>;Ê)3Z`.=ݖmeAx/'e'z2%0T|~|N :?~R&n\1SڿMB]=:^Yj ѣJR#U}0 t󞙝0Z@"RUsue!Os 8' Cbu`*Q*fXA3uGߔ僢FYk)3,ߢ4=V4É?A[L}O.ZJ:o'>ԖapSad,+gM %!˨cTj?DdFL0.c).qAz`+>u$X6M P!$"y1Mipp8>˧.C~oB#^6m@:0|P%jn &xR||9@s/'Kn"?ED2Q(F˧˂I[C#b Լ!&kY^B6%7H3AuZ,˸v„U9↋ dJn|2ب+Hǐv9ّۛA)T0uFGP$19+"܌9F;fjxa tqE1eTDrOALDchkޟ4 die-W]h$C@$̗/OpF鏟 )H[DO}ؼbg+)ރe@#%kGr1gMpGB΄fmuzV˒'HG˙ x~_\gFP-D>FƱ td%GXKh L^.G]:v@43yFTLYXY=+܄_&."rwfd S`:tUeh`?!ކD"7m%f#ɳ]nYR nbiE1Z%5lHYFsƺ\T˗ Dp8~CO?-%|_*n'ژagMf 7/@C7acm%;"cr0OaN*>_N|@bS>˥Nj {a7 c:2U} E #AHku}ѧ> ?p3+O'|2r>J(%O嫨QnD:Hj7&úCLVf@0ǰ9kƾݚxJ)DdJqcOcF\CxYobE !v Cñl 1w >*s*ea7# Ɓl 05;k;HqPu묂Qv7h"r:k.%j}K #Z73t{3ѷavPCN3aݡi{_܇\5/2\LIn3$C) y=-E>U-;ˎ~u}:;qo ̲_p8!||q |xA3PN}H)BZ(f78eS e9BP 97Ha@9!*EJ,APQ8mDb#pE,0dKgeKP#'msǾ⃡KY-Tw1ygb!8qߦilĩ{re+&rze.9CTvlsN6#'b 1/G{jN`3dٞ^f,:2M!5U|6#jv^bZlDhuQ%B"pȲ)kRøe_K޶]jwR dbG4s/HIi#6 =/je1>ědl'f%[-YgCUHk̎O5]-}vC3łWOx+]߆! ^<'/2|/.K;O0,ct$"uLb3+!y !aҋs#6p[Q}`cy/^tKcWڳOVs-}X gBo5CKIʒ^l;Who9~WϺIMe7$Yrh}"oDn~5cb6g^w r˨~nLcFH4$VQIMI}oذ[_C%7,+mbQ$\Q+[/[ MKoxLt{RE[_>\iS>&~//_ ' ~R>R_n⏻+zӠ{${HJ[~6N(L{6E:eg &`X61pfUߣ0A*em_m|Z'V kVЈ`!2E%JX{)ku˿&XS?3{zIfQm(t_hYylTO 0:i(xuXH)-ASA //o,x2^.H;Y}R} Yx|25|_N٩io_ ?ep8p8o8 zJ <]_/k=~ YY!R! keUKVy9Ȝ pII6Q .C~+YP$<᳏Dd?Rz|)b5"ϡ`kR9ON<,3zD>)P3v%Kۺ`K8`-Y&}?/qЖx# ŐfdeQ y'ӽyq]ndC6|s& 3*H}ocGe\;E@t87#Am[-51b(fKkCN ˽Nx♠CupL*rpei! 3cŊaʪDڵcQ[a7i(8 ~95Xm!;@%E1dL3HwÉ̱"Г[ ++2|<}=J[z'kaS^>IAo6|Qi>3P k|I%*J}41mǔX10v>!b>tsRkWbdgp3=Nt܍?)/_'㻏bm]qe[:? $j[/j@nӣD!bVU3$us7Z|@8oH xp9s KtsIyWc.?+!:x!@2iv}!ܯz/(JŚalWFQqH)0Y5=WKM yB!DDK{)㘸d2 ¦1qNn2[HFxkoam5\E@RIJF* ߬_jZf1!+T~3{C!z` &g7ƒ~JNtsv7fNa5|6pp80>'zs|z0A|ŭi ,{*Ρٙ`RF֣= ] כa|.Ѡ_ DC bi~>ņJ@1N׭,1-I.gX'orAi6"540t>B8c#7vy\/V]g(dq;BӳicW}( X+p m46TH$Mi`)ߤV:ҍe!<%dP=SYFMGI$!t_Gm6KI ѠWey3Ƅ3T=?j >BڃM}/)Q2/l4TOE~hv / 2 f4&]/MOېKUyQZ޶e4AZ՟>4u e1TB|/_@t87vb p /o)E8^YB2S媄L,) sE M$VBnU6@[iF5q,";L$d+)F U@`f*ETAJL >#.G6JDbC33OXlwW &[ZA6δ;eN QlϺl2 q'n-5і40OJ$ 5ƓF H/V> NW5]5+YjRІ9\0g< ]L>5K#˚/<͑jW)MR&I)2 ڣ\}cQ4 0#eHRdxl$t Ӛ5{L%5t\0)c Yy3m&,}.y?7' |{ /Dv}LhY)D$VҎ59S'rC=`,Zv8E 6.'$s|f osyd=|>>\>_rƲOH-H@ lHI!6GU=3mAؚ$&#e guF tt{ztYʎHd*@7Z"r&'!l-XdM(yӇH(eK7G %}Ѩ1?n`_}+!SQq,N~4bGi|#j9u3JN :;@"7w\ͷwY/R1:`Wu]n`D8uTd|~⋇q<|+=KV_5/1ef` U_wa/-Nn3S}}Ay)D×D:[Fz^BN 87LJ'd:{WOK=U=ˣp-tz%'0tnCY37bl|-p8d4ADFuN}Gi5l"CQnXb%\RlA*OLvw|KKK(;5rDtopr I%xq L7X8 {XdIB ,d"THO=s.Ќb6M_mPq5Mi2}mu1X k$_GPK(γ*ɘdtU$_K[CPC_zuw)5rW>q`hbpv:TW9]yfSn '셈_Ȕ[~sOd*aƩ/B>Pi),GĢ@$xO|Gry&2sv~hc+< ֠ߜdv1 e1}l" FRHg"Z;H͆Mئ$E2adhERG6ϸ9Na@UOE'35<ѿ4?1"l!$g'XQ?Mp8#L: ӀxMyK(Aq |9 '_RK`R-Q'VLC˞?J) OS+V {4VF:|ܣrU#_+u.7oQ&!a![b//LOZa_A8ˀ9du~چdIe(1?=yq@2#<{`xgWn ԏ#-C"}AI{Xhb ft'ӗo'×k/c1K<%Icp8w8 T} H#/GgTwc"B?D-ȏ{l41l6LP[ cn6 oB!潸*_1_ V$U8%^H/ 2QG/%-}fBf1#gXfS$,t4PgI`Avg6D+bͦ@MG/qމ&J> o֩+YFk+Z~7fԬg뿣V[r41_ޑdpxhO7^| N @t8w>".Bʲq,U%F`ob`Z^m"*)Rkr1J\-g TqVHCn5^b8]wX$ABD7Q3FR? cmWu6^.P:5WH$y.xKBzH7/tZ=q9Xm5#$l.RRV(:dqE>D9gF KI${9|سF.ĸdZi@OW" u/_~8p8 ^a jjF$јb\SِN9xgo3 IDATry= oZtŰ2aoF Ĺ-}J/FIǡe_IF=?r.Փ"qH 9GV}Ayv3^oXtZlIM?}%oOiJN`שg&IuR,#emN;C3rco#o E&Q~]<06dxx9N˵(<gkhy'cE_`ٰŗڴ|LL?:~:ӗ_N :;Ckf3fdĠf.՟FlM- @<a1b 9#xΟόʬ9C8IԘYl4rr1|~Nu|>RKD"(Hb񃝍X=O@$V$okԀX~J.T;iZjx>?],^ Q:3qs1םnS#UDp>3MIDh1:yl"OyDl)3U)?Xh̰;?LX)=bmhxfu9 Su]ߣN$~Dg-8p8S&ip?~ZVy6; 2E4 s2yHP҈W]XݒI{痚9w_.ђ16M[1kf#e3(ט\ :/pI<:f%*hmu36c9Գ.A`*zfd-O &[fN-ir9G@5U2 O)(b>$kS>lylC#/ .e7{=ccB-aU0|zryrNo9YT@Ѭ1uʈfCM*& Dp8~ gefa~c^OP[ˏA:ʟg$4`Gn;!|K/|@ LT{ӇTة}ZCo)c$ 227!,z`$:P:C8HH=4Pw73e?qJX79]jt/ˇ7l?CwQvY1T5(46#wk@(ZE8 nWr|WM,[W)dG{"L^M&xf)~5yVy|T˯'ӿ|jB"e^X"P;v.!?Iħ/'Xϰ9 b,H5 6'm2~g/vx`)B8d=D ?%7"Hk"2̹V4A[adĬ8u|fNZc؆..g$_+C{ 3F*c>)F/8E{9$b X疒Y+^<c,.RT-e_ -mOyU8p8} / 1T;yV UOr˔TN^屜W ) p,ǃ6hζ[Vi9$"nz%59l kx& XUNi6Ϥ އL{ ӑ͒A" DV/*@짦ԭkZWuOȐ%Sm"=CCX-ld0p,BN5F@\%cp@›zSm4'tI)S}/[i6 /ehʔٌR^z^ݤC'ljT9lju_Y'Lm6 AI6pOyV4Qiɵ-2%Irl1o5Z!7ʔƉL)^E@wc:f>|~x Dp8~߮ |twd XN*%>DblA2t{$«ܙ͋bn`\ U֊cdAIԤ=EcXOKh:r]þqXbf#,*͑ fN58 Ft艔U\.g9JAR@"P7 4l[Oh7e(4{*t71@x}H~~<#HBP17$"qh?q;1Pш8f%$bULk GU1/'nQYX<-[D$-COa )$Bۓd}7LVC݋ ]y.Lz˔d)ƥ#-&/e\;:n?uӰvW [3S @t8BˇbOKj8_"S-Drl9b^s_f#fIU23U-vG_)ڴf›T7i5_- s!Gt:ղX'!"":!^eLL[f˧ nX6+.T3̈rlrxQkT-()_+2>!geqh{eă4Vy_75YOfƣu!<ׂT0`OS@t8Boy 1WeIhrXe3!0<^}1ܠw7-`6EL2"~&iŒX IKy;6sp/`UD~6~E/ECtg4Zi\.:/bexPkȃ1{9vHi2/2 ,f/m}y<ۑU ύ0+f݃#42s xAtZpz7`fϵSXaK;ewU1צqpه_N :\*?~`zb~q~4|h큘uHA[H{`!ҋkC1aa wbx@:my6mfҼ%sAuĸV %P I u !zAj !Y98O@'׎rsdڑ~s77IuX IO'N1o {2joLGf^AeؐchW؜%wfĚzvv4}hL}se&&wN ~A8p8#M%5tcm6Ӑp>4g)YaP@y6-Da8PA@-°!x6a)?sDʉѡ`,o .Rwy!B\%aJq$$juHBTUlDsgLRNi7gZ!sq^o;j+cX]ݴvU_C 'n˴MMaTvIOVlu}RBƛN6ڼ Иiʫ,_n/ 'p|O&AorfrF%sUuxPF_TҐ4 W`l AE>\@GUGF3QGD7CmTLB:aydI3*ab*<ÍD$?!]j]'fWSoedGzld>\S4} !<wJkmHe.&+w4%1 6| ,e6ӗ,@t8p% .C&;,66[mqKHԯ~R#:hC ѧl.s$+Dq"= D$ҠJt?R`هD,<\/ٖza>FM"&=Vp>s ]g%֣.m4ui/{~p .&K"gP7:0Wh1-PGust4=T#ʵ~%doؖ*Fkp8O \DZ"&Bdrn#-6| MeJ$n/1?mϡ"Z,6 ]d@`mUqm$yzR+tW`騈DFD(&u <(B/j`z nic ~R\_ak}bs1s6ȍt#f.$BB6@ r(D"-9XY1QB #p9%3Z>D$uNf"__భFԨV7/ M" 6C/IW"S[9g!^m1ZDB~Dۿ`܎ͮՆy>=D߽>Y2} _ N ~y8p8ŧWE^ʬ-̃#$l O85a$-3B_PF cE*A4mA*Q? E)WEdp4|O`/y!ވPo@# D,`&c1,s2<L(l"ELjd2q7( Rlk[nmD$v|!ifbcHlʍp7b;̂>tm睂eϓ|p8X|w߇+z?`Y!hHGK{efE0#\'SErD@OyjyFtq2{9${*$gI`{zYa /`F&y R@>br<9>n7L"|6e^^ BM@I(M>|G@6N"J8wøęJl^c[eO #" 1S&_SMb7* Dp8">'~o?cx[rSWxT[tCRVtA)`rPcZ!0,;MLLKxE A*˻Wųm<1 ` C Hgnq٘1:| 4rDŽn4C7Ў` Q ëZЦ h"oJ"H3ӡ'ܞ=>]ǴLNcKD?j˗g۸3}8 c=|7Sc*@t8!㻏ۏ|DL 8a M-%_b@W;6A|v8[jtS#!r2{@V8TKO7IXJ#!A.Έt$b ,`9s#C0,iC#x "q2n%6ի* 1`H&t~"A::8<^"W"}xB{!MN/-@/K?/:ƴnFg !o r;Uݨ)lk/Īl@Z^G捐uZEsM":q22وx&b'mR랉xwcC-B|s؂X}6l a}8|{(l \H"WL-'G=`YU#4L}8K&O~x/'pc<^лؐnkp#CoT?8]A=8ä&?_+<#mX>prn2O`oץ̬E#S kU{^QƊ q? ~I3Mjy2EDԘL(_'29A*!YW|j{Jx:#!$]/z%NOG5^*~i%P}ͰxIrg'}0;Զ|~gW7.-j0c3%Rp%NuNOas} xz7S>5@t8Q _@'ہƩu)Vl<|<>?X_$sMY)t+c@mGӂb+KgM"1qtbVTr IDATb,?<F<1od3*QY<7Uk^&֪kH=>l/PXOs07i=aU;/qQ"[͵jO'pTï>蕅/iϥ qi?[D24\\RzwG*-i)Cd|Ԇ}\ꅉ,5jÈ%kL\㙯480)rP1 I LOD" :R۪i ">=t;7afWih w$++sWG4Ug;/Fɘ}B-/4|O'pTc$їqAK#F膺šD-jDJ%@ʞ 3 1Mhkv@6v]TwL%Y?;3Gn0f%*Db>NyX, JN"Fw7%$;HD]YC"QU?s^rA7I`yƓRP/ȿൌLFs詇]k$.\/p+YYNw6ϲ97l |'p4g!5=Rs98mĜJJy7VЉM(e,vg!f&[E\Zސ`U|"\FOJ@1ll.mLקc?{= Iم;u8>%YB1CO_j? ^kˁ,Ѻ 8#8mlwRFb%ji|SOzN0o/g*#N|n|ۀp8Wwߞ R&TA".흣zfD̓,@ GF֌s~ V1udͻT l&t˞HX,Ďe([v3YDcns_vP{ :CN:%،ϩL\ae&vg"%['qE+NйH,e(4W7}7'pL‡_}rͦ%@AӦ(d!}^ W8Y6gR%@?UD4 ?֜L˳t>~ B8J'qC9d%3@w1#P . ClJA"L#D~4"3ʛaZ"qJeo:${)iU>Q`3A(89ZԬV5"(S%-e K83f'  u⊂9X/RXn'N@sHk\KPdby1V$";"!>f%Ukh7Niȩ'O0}6:[Y_ S-Cc%,LhMݘ9T Ax%eBݶ#*"7ަEp8ɸ}w ~?|Mqs0;9g#jfodGW8ZPI(20,}k )I1H}FMIA |cSxS DjqPFN5wOwՖkPO3e13ޞj/ ͱuZ҉ {AM@+o6>} Dp80M_(y++x{$|*y{SLKh̲rt&U=KF  AvWLBXC"(?N{(Ni0xQ$C%I%+!="RDQ6 9:5oMVZ⑼6k}fzuBg̖!8>ea}7?B|noa4x)&d[*>_)oN :ᘍ?|Yΐ)Omk< ;H\R^g ./>""$rmC, KN$fTPvrRc'Wf"j qpxoV$iD䙈ѯH*jy.I'.YD/Y<*Q!Mo_)5.'5ΡdN[i M>|MFtM'幚3y|}|ԗ)MPzS\|<4>|pp8lܾK/ҥ@,mNԷZ|zH$9hiua7d"bK7uE"[A&:T$QD]/rpTHū ƍYpQ!^jMQ"WIU Lij_jiZy[0Ɨv$xOg7]XzG_M Dp8'7%t("F©ꩲiT7@0 L?}/c@r jUzǣG(i]%(h0d$PB$!`e [IaYOo*в%c@.`DS:Hߒ)ͬ ;db@"⋁HN ߭i!œ T)+Zs}q]DZ ګJ7L5#2ؤB& \f^') H0I#(C٘ݚeR1aDD.Tvڧ :iیP=ڋ55sMW:dmJo4LuKf2`zToH4ugyR yr z:#?7 'p~!MeTm!^U"dLsV韞H s~E6Y㡜YbDO#F)Hͳ0_q|H,4̛Hrdya:^/W&ٌbA_F0Q;='O.6SŊs“P A=PVI| fNܖXZz)(S͵p8_| \$$BKu9*-kC-#gYz<>"[BmwSsg9ciZTϦ=ך蛧}8p8EhRhᥲ5NAL|9eJ.c;82lvv'תנNuNv]~@ϩTIf}X/o!!}N :x-|Շi)TY /þ*ԵXacJ_+mX"/1 QfRϊ0g=Du,,mkid"£.];Q`?R6G/Μ,e_VI"F[CX˘d^~lS'`=)kkN҄jKµS>8p8W*N3vǝ%cN4˰0 &ՐjǣXNuj&IJ;g>>Bt4?%q\?vPEfDǾkO:&@m}a%/m bվJBTL=+9+eSg,M bryNuM&{RGaDfgMQf|߼S>8p8E`BжKz, M p] Rq 3CB|7嶠5 lohcyv8zAE&#QK$s(+1Uu3."82cQIĜЌZD?wm˖X*#P)e[3˂r&+:p5녽Iդ\4zg%srE3 g*W?'J>m\/RTx5"ScRy @t8}w ߾V+ v֐y@-&) qu&"GzbSnJXhwkl U dؠD ). L1ٟSnV+E2\ÔRWP%h`'??8p89 /ach@/zD <'xz~%t|S5;nBrGE=~h֫(*=U(J6 I̯% tlqw܉$"M[~1iaKs >XZܚ?/$`mMcB6)beSA_E_m#[IiX"Oa}lgm}KvZq}#XG*7DY;nbȴa׾߼;@t8joo/gM^P)q 8'QRkgqFwS&n D`X3gDžw6ȅq\H܅$5ٚD^/WT IHq%AY#B~"q?aV2fgK0MOKVu}*q}}հiͩMwf۲O D2:}!u7}p8^?|;VAJ0K~mh+n(v# VdR :D"1TE!y)wgu{YS [IDޗd\&;vpx> }yH)@t%]1<nOڻ^nB# O&>#vm:Se5%kZʟ$LɆ%u3 _C[M)v־j\}? pqCS\y 'p:w-|8_`[Z,B׳ˡq,7Ԥ"X{nc k,c8^qlT$Apqv.CDe $@.%'%Lm%%ӧ$3P'?cdEPESZ|n7Ji!8'JnŠL/Bzé >B,L |=%NAlbii"!֋5,HN&>yzo9y<;A8oyFه/@t8TN,S]Ɛgm$ƀ/ײC5 lSk0{(]6a9bGVv|Wj m^~SI@{mƜDSS"6먶9rV9Zf;hI/~wMynLr+_N~pp8'_}6+ui33)`16K!]ϧB`3%Pܥ`Mag(۲HDiJsNiәyYG vm:ځN+]?f}#R&3J_^BY**Y$&ЉSd-XDb-?vM@jϟ(Sy b\-V1v]gn|G˞ՙ~8T ?a Dp8n/?S'Ij*-S%z:9PiRoI^Z9O SfN2 \u1Hr6 'L]J"̤ Iu.άy:u&]AKv ĉ}M7&VTdLVR\=5Z)CFy5YozQCZ-#qV;Yz!neJ a/K5Nj쟇HF(_N~pp8'CB2,tF9Á~{t̳!LSݘ)e<Ӡˡw*8_u4l6քUd#>9fJ1"3s&6IǫI$.'wt:xb)Ne(*ɐܥ*PLE249('d녾bJ%k# yYS`}{CbUW- 'Z644PF7* ْk+Uz>kfxa2QGi+|UB$k Œ)Jӳqp8>)$W _>KnҖX"*[IA,Hնw, `AmHk(:.8;Ǐ12Q0 d}&9 2~fdqZuL<& YU<HV8x*RkfTiZdMV"jKEm#Ȼ3-Ntp>B?UgЙ0b/*P$-jOndjfp`YV^ԛy;A(QM(*7͕N :w˟ ŔzÐIZ!Ọ=&B۴Z*6ųT[Osbas)<1X$`S*HDcǧ 1;䨣*R7PE!^4îx:AJLA x}#o N&;`Muc2%֔z h IQtDVgW(hU^X/S YpUcr_hY"[I(Zz'ӔFVcfD(SOO˾߼?M Dp87'"-~؟ $E43pY\Ve\/M`L1IR#o[:^SqJfX/Z=,''$W@1;<⎾Ap^Lef6q!ỄﳱJQ( Sx ͖i"9l[ 㢺]rޑgZ]A+)d|PsPNԞF$Va=SfK۠<.kjj:%ڭՑO[CBq""z""XiB7}/N :x_ԵԜgr0_:k*|Cŕ:n\ƍ1+ UPH%")8 @usc6b~ k ZTH>n*3 18Yk1 (LuV!6x$uY!h/V{ٖsrJ1RN![^R0CS>I\ZJ:)oY7&w=T݆w }YSZnZO_2p87\ԶSr D83q$+q@^ y BB429pyvYNoq,L7؊DbR,<(DrԍWcӎ$tIzg.*Jۭ9WT6_)@]W` čV 563$H;DcP] E8j%gw5ng-,4rcڲQ9MOن+#ه_@t8fhCc+e24;pi5.lj3ZMjoKb~c9k*:y Dp8o 7I?D } M9 `e[(tX .B ..Η/y+(|M\Ƅq'e9֌#Q"!֦2")" XMQf\wO:5Ks$9mb'd;^eg3@HXqi!Q[թ2hnV*/:(+iZ]o-FQ,| 1iZcXdVHk*f,/N :xS}wʬ:#Gv(x )QODN-@8$`Xڊ3ͱwJf®$bqD^d#Гڈ-. 5AZw):QlzXq$KdNy/;4Nd!m3:X<QxH h4YeENN}bF]O+ZN[iZOŭ\sL9U&7OO,VXR ! f,<p87?O?Wm3 ׋5w\T~$S]@,ĴmLYK(f!D  =x/UAȬ)'ZQA$ӝIDzn";x%#´eZ3l H Z4z"qeXN7b+Z]j$bQi:( ,"J4~8ƶN7 PƭBu!?kԺ"+tGL VmAG<NCв/GFJىN ~Ypp8ǛGqS1{l4u}*Xtw#Ql\Z *Zm^-XYn?%{S|ΨP] lvD0y]ǏYXI"v4HBN5Þ2"b9s-P94ODYv$ySQڳJPI~9Qp#:]W"NMflMW!+-7: q=<7PvHEMiz&-<2/iF~ '48p8MmZL" k .(yh?쁆GÑeV~`HGcjXY9JP͜%uN[\/ք\tuSNNǹC&h\'O]b5O˕c!f_.ojZ2cMP2Y?F"Z<ѦVZ l$XD4*s-a!cXh7uT( Zm9#YfkXg^VcV#uy3p<˃p8,?Ψ#F"pVN&zhS ROLS"qD~s>sF hI 2D5uDM,oq;:C\Қ̎pu$ Tfi=Fl[D@)?UV%Zd]R+IDE/\I$}m"Q%($UWXX/ˇ`u~%UU=At1SV^QA͖%+yC\ N :xӈ2YT x riUrCr8I꡿\BSoxA-}f9I=]-T)</5qKm+_7K?'Le!|Adv;櫕b7|*%EkNnՑxŶ}lYs2+ ¯:qwܱ?XIsD"yH&8N>R' }h hyX5dtPkgJa(u[fVbi4!)\^7MZK {wP>=}e Dp8onwڇ]OddbP7^$32v(A<991d4叐p6aT6&Cq HtӐ|_( $DO*x\*N]VպlmD4q%' BdЬ?r}P$z$#2!BD {/e1Nwykz}2ҭLU m5Lm[>@GMZC\k-X(aMh1h;ELV)Z{f+xM8p8~seP](Y$ _w>5. 8fwL Bޅ 3)}a$E<=?j2ԞpIWv<[E0L ;;wAM[W2Ng֪Eӑî8Y{_&S!Q6z6)@թL??lgJh~7t(x](Kd=Fz(-$NH,mSAێNbBv~mb1?[;5mO1lZ*me\F5>/N :,,8r\d WZFb1!Sr&,10 =!y|~LVq7i8`H]p8|*NZBuqg%G*Tfyqv!Hu_][BTXt @4rfK2^niyu#TfF`wXLD!{C7Mlg!f|oCy^ԑH%T]'V oF&@"!7HĂ 1u]ωCga%FAJPڑH2Yj^#P%)k.%0п'qU H%drUCSK"6)R"{K$c6g Rq%!ɟG&hӦV(P| cbu<i BDh!MM G”SՏN(ֿv{=&'1l\ UFdkoKPj:3K6_ 48e+ه_6@t8Y! IqWfvSCTS%㘜MQL,=mu(v6N.wT^n@SsvQ\Pua^||>*"R`.>Á7 T:I{ kK婇uJ(D 2 S3(L}-iirm sZ@}o!/3YГX_6{%R0=].+@yw=<㳼Ζ|JETka; XwiPisdҥZC /+ܾ],(*ɮk ߼)X&ddq@ ن*͇C$5x|b?8 13ֿ+tܡzD k$jl_C=X2g!S,,<  bm v(d!v?hNL8f"S5eHв=z:*8)H'7rd>F 4L)D">tԊqk}ݡ]@ک嚢\ǟ3O{ƴ:Ҍ:Y[)݌?- Dp8?UY"bfk fUV./YpD*pW%,DA&lC@qM@&cTӞH)SBaȹ ?Ⱥôbkf2&FA.oR Zq"i*f_SZ6yVF,'GG-\/7*nSq}Dy.Ĕu uZTʑ\:j|fǦ& WP'vDYQf):i,b= &O5OsU5fj)iuv<p8>K| %N]9Y"Ҵ+e-C }@$Hk @kR^a:1`yBQIc5q-X/tj8%095* },$ݧ ^UΖn)T5htA>5YPv~S@r_{F^$-7D3-r8{ٵF6[#԰$ &+N+Pr3澈Gv\[$!­jEqD w{܄jj <p8>K|Mٸ;/ͬ+ev >3f{܉t 8k,jhDwUՔUFtv=jfW,,DM~BܖB !"f"7A$ ӟJRڕyUajq|Wѡlsf|Ygܲ6bzp8~a\ ,h)~ɮmdA,D,́3m63RlJxJ~Ú2q1)u⬼a@:y,5g6ղͭVXeZ-ï Ak|Tg {qq%d"s=d""V#d8_-V=e$G}+Ruc_v(22h= igSOϩ;4mR*5$cʧngLKLW} Dp85~psqOW_3$xr8 U8)0L1Mu=^-e!b!I#JZ˳%,ϖL7Vh0F*IH 6Z(ˡe&b`3l?> 0n#LHa\/Wt>XMYJzhf{X+UnS .%SZg<^D ),"6y)5$vr)^ 5")QpYS"gvb֐#HepTKm3Ma^nmFִg;d>ï N :qcb[*UPuA7<^j'$$>zlWߠE>˳Lv?>H<KgÚmSA`eE/u|]N02R5od!\9SkFu$bv_FeR[6蛕P+$9s*DbNW NJ>XB(EYϡ?ǹ0F+/ǭȤ J)?9,}x9Y~sږ<p82EHDzLz5 Qk[+qW< Żu 5, 1Ms~Q_]yt͙,g!Ɏvs@DzȲ?fA'b-I(٩w]i%+Dki D"Q m*f*LF( jw,yhHZNK|R6b(R_=E-^!vuP6#EYke<)#_-fƿ} HK:JZyouáZ䅅m!voOp8/~!ŚCt(P O{Rfr C05̤f!#.m` '3T4s'°/M,-T6'JHEaZ2۰es؋A :AQ`ebVl<d @i3d򆐈ubz!+)Zc,^>V<&"T0I'jJZ^\zq5,`Pu'Bnd >|695G?7}>F6J">T o)^LL"%k߯7|fˆp8ܾIĈN'F FD讖BZx4iK _4H2P06T)e!f_`oB<[d %5ᒩ_چ(i!^bvk7|a| ]i-0=|6l ˖}p|tz`RFF@mgMk@mԊ`4'RcN?C"#[+7'IFڇ5^|QDsD D\#oYC8cNW-T \)|kp7{1%d"Hu}ïN :g?@vK0NwdӅӗHNH_#a'~M6TAUf#yr|FGƀ) OeYʜMCFЂNƂEwseM |)ϖR>X_P\Ӧ8k)>ajB44,'&! D< l[#$bvwQb+50ejV}3}'#s`=C1ӽ]r+Ғb7'm#e{܎;'gDi)PXj8ѧ-XJ ? Yʙt Y@F8ϋyw~U8:SViidNo Dp8_$o.C+29d-`d;$)8@zAh7FzPohRvh0~)gJ2T2Ov4::LfHNm'/Q=@>؉Zc]_lTQo_c m|K:CAelUtDmFiFf Z1Ue"(JLW=ՈZ]qBYg9kN-9O>p8/{ߛ$"BпNM$L,Ob]l t8p8???YvOe.F`Q]I>D_]2oxM1A' .( %9 y u5- ?>0 z||>҂uqVĒ8uy1&{)K31Вdg"OK 97D$!/ (Y|DC-j1\" j(WCI@Mi;M=3Q~K\\Qf=NItv<p8/= vTk5\ d-'ԩ;<`yY n/1#1@ڡW,d TC "v5N5HD!"BS5PL g͕BZ ]ĖƍUؙô?wɬ69=}X1y2CN־J i޲zS0 iAgB6r7Z`OwjۑH)!P:MIfÖ\E"g(@yJZb{ ˇ{w=lg'BP|)Ibcuه'p|}w;xwHDqs*%Tq2ƲX`5>_#/ ,{fKr_#d˳s7pD.ZS2:X;?ڙU:SE`ʼLp*[5]+$"]5CԺNF$F BI6W!uy=kDJegsz%rkmi"=63{d?c'%>'Elxo 5;f/~zF; }D63[Pufiֶه'p|%z9vWeZB}~ ʆ!,`#>9[0 uė#߹]. Ķ=*"C]&[0WpQ v0R%gwsF$V -Ug$*v\7gAJ.Ctm+ICݴ5e3=Fh7oF)K\%X"H}JE)h$Q@Ok}no~Kƒ3Q|22<t?cвhh=[4~duƽVEH*}pp8W~!֋y\EMlQ L+"9Z\@ )g_/fSb=i 'K"qM I&"rEsX33a %Pb')S\-&"Q#Rr?mG~YL63|ԑH!^'?VC^L`<0Ҵtp k}.5#_棢O4H'TgXӞƽkf'WDj-9Wmִ4כƚCGp8*í A~jZR{bhw/QVf*wN=:Ƚo}|Rɻ)9)EAqp5r}vaeЉ UCZu!fBsYf0 ’%V%m,pjQj?e,ThόEYd,l&e9A&c iwo ޺{Y&_@9&5;v/IC!\􊥕nq hCp8*' %E,Zk?W?>zbӚzs|y5`  +q%'d撈vm h$,ZŠy@FĔHtDrq7WmNI"!1f^##X[DOz7WAkHf{\N} ʃ '^SJտ5֊)B~bEw5aµ ן>Q4A)Wo*ա#jBML]^ه 'p|u+* ,Tn)hZ\RQ, 2)ǁ^#@Z.Vtp8p8o?Dl[t]ECհ."`"(KIƛgӫW Sܙ9,qc2 үeHݿ?ܳ Aҳ 3pI{[/7k2 r*#^-!9W*v-:Nmo;usSZn ד#]|d^  uy=+r ztX! H,ɵs>9g:$8p8[<ւy2h]F"PC$m:IJ!I"zh,z~"eX?{'Nw4c!}@JJ@'rFxډe;KO\͎<,DiJsmQlOzR^~1a2DCO r#OkIJوٺ|Z46o ڞ( sGJs茅rIIv2s8nsu3,p}-S 9 ձN]-u% ]KRisH!K2)1#1FBT=Y`}gj3l>D)b:pxdGO5Ӹ- I1|N)Q7Pc+eC@PMI{6R߭6 j$7^="s=`% hC$[#xҙ*("vy 3.Hy}"KgYVG~Pll}訁p8~,j@DBk]QA :.c`!bvRy /c|]b2 HO:Yj[2k0I5lw1~gGf(6V,aX&Xp~v~NvjxMZ֦AQ-2*R ECDĝiQp9֖+{Hb4+352> kՃnUQE鵹R0mElf!LXk7Vk֨-gú4g:pp8C?B+H(̬S`aPS2HCZ,p|4sRkGF tau 6'"ӰN.c|+a~ETJ IDATF BAEMR?F*fP)YdƬ@İnxrѭs}pCMY:HǨ(XB1rbMljDst~ 41co[MR+MN[>2e-冡զ L?}.W0aҙ߉՚D]هZ8p8áߍS"!+IDLeDĀ6yz}L"^.`u"6F(dž&r#\,i!얤/i5m"'΃X:^dgf=ڕ~q$JkSj˧+?"r}RCטFnHGHAET8N{Nh¤Xk3YUETX0ȡ+VIRZsl$Z6g*Gټ+>L;j펔ek.ʊl*~f Dp8nrB0V$"~_A"^_!9YOoEdm4X;' @7< "EZ\| rhg0*U7V{e!XĶzE:Ɇ9y(5;r3L"ۮ|:f/igGv&C5\ ʟ=bPb&ˎڌ>{" e'ꍏ6) T~Zˎ8p8Q?OQ `2vÎ\2@Dҩ̒V>}9Nw2$bR1q,!1sphwz1lހE(QPynm?&75R,/Y ڥy}aR!0I֠SqA(>+F=WDڷC蝥\B6bCub6%>Q߬'iM0LeQl#E>wl`=s~S e_&=R>t Dp8J|3T` d"y7|)IE{[ : OH78Dj%P{8dQT&MiDUDboXuL!ρ#Q,ɜ<[Q14@^Poq# kJiA5\$9Lhj@&_y @#@~T&@H,7=l ""p#|"DߨL_yS׉Խ3fLZi:;./֪hW= ܳ8P_I ۹{q 1Jx7jMiCG+@t8[c?DD&qj@ ZtqίH+H>I*٬!ǟDnu_R6"9cԛq0֋2L~Xj!dQI=-'9>ʹM>T~?M-j,QP˵N$~ 0&:˾f*s_J eZ˜=(Pύf/{/Mf::BE;0n"Ǻ%/N1u}YLm}Z3=V<1N :p4-sPA"=ޱ`A C'W.T8|J:'ײwg`^HDnQ8 UR"t(OQ+wCpMa7I%EBi QzE<ҪJy p{Zm# -g3"UƸIS;F m4s89SDXT̞E{K#{a/ų,Yx4ċ%_s Rxeky:݆TX֜jrcag: Dp8Fܾ]?(Wn@L3N>(=㬗 C3\-V\F,EO#g 1 g(.(D4kK: dQ*Uk [t"A. 6@1׈HMdS;LFrY.NDUˆw:ǽv[̤mTݯl/7=lY ˠYn5`2YcȐJ28Ci|򋚪?kZwrm(=0p8@6[A4xhL] V˫4H[$; f\-3xƶ=~hpb }vn^t(0qL$$5֠U%^P;|]tPx^lĜi-ǡh;aoƍ#[_\+}/Pƀ2b&EM${+v4`UklVN{fMVp Dp87?5Y8D#s}iڥHtD$ #@e$:J|El,eqNRZ>`/8']5Rtkb1;윊v;~Q.1Gw5kZC㺈HzwO)0k10Sh6be?b$+5\>so V>Pߙ [iAѷ@^1 ZhfU"ǫ2,-*F]Tic;^DH.dsp8 |H+d &6#|-3m®`g2bj!̲id>a D[dK$plքȑls ș;s|'Yɉ 2bòV9N[tepPP$:}Zbd6Wyazv_1SH po+m}5;n4& eJc@uފ:{r4{?52/k=1N :p[C?{#׋5 H*)RMLJDv$#CzOlbԧіuIDKr9Yr;GS4]s)E\ QO2Dâ:8:@3 s]=+@K/ΗUbTS[JagqC?5ӝN' oX6_ :Qi$療wlTOm>!Fr3ia-eVX\o6yg=qEtiG:5: >tN :psHbE?l,n5`&?S9@e$bӚC( }J%98{1@pP{1& ͔2khOz$AvM;%juJoֆD"R*lqYk"@?Z =V [I86oeq3=1 (1(g8,O=a=ۙ2}8 8YÞpQPEG=;&pswwEG N :pn5$" v ~"1q]L"k⊴ӫ%*Fm=DIAB2$Gx@4,:ȇL/oq"P+ꐼk1akrKym>jd+HETM!,'K!.d٪< Ax?fUHDzp.0a X}B̦o6 +9*t(;ͱOyu n.oDilQ#f>uq*8p8qB;3$ wH.+M`}΂KdǙ$ٕ%9l-R33x, a кƻ18o 1e~U %QfUw֕ /Ns~9̪߯UO<['"L!(D:^hE͢Em_gΠ1ŵiVD_̭A.fN5͘7p % ۛJk4;7Lp?qY1ծۭr`vxʬ@'`}'e>\+o[ko)jɯ)αφZ$J&x=;}/^<=;{Qwv oڥ7&@fԚxtf/P/" 0  LhlVTC%0wfvZX"ƎԃNFӝ{wcj+PSȴn6>4ڱ9gRIDxPMF &sZ D(e~l#lB-F*!HkVި)Irdjs_PNj?9-F{҂^'Sq; Q0ZMFkwj%$|fLD$^Έ::iN|EOrޟUw|YaHF 7AqZYmI3%:$"5nͺ[Vz_{I+"}~֔VvqGԌo[`bUS0vgJ]TD\A'LC[b1EcҹkH%Y4"_ ?p^:-pr~NZK7-i?s;QMfmVHo \J Dy]}Mu[(b%OrĊz)z"(E[UдgaHF{o5HGSh5%mw;;{+Xv]T}-~Z>uk+yfukzڙrj"4VҊ8Os9zom:_ac gL5M@TrB<:OmL{զ-[mͬP2bճڱY/QO.p7`Sy;SD =aɋyU7'hqV3&=1_~owl;_"ه04#Q3sMHDJ۟fk;ݘj:kO(60"¦M)Jtfc%A!Q?.a!btAʙɩoB]Ƽص(e?.ToT(ѾVY\o=K=7AۺSO;flRW/NFn |o8l"eu^?s铩C;tZfapF2qakLqk0Qm}D~ʴG݈UA j1o>)HX@9.hr# 6[P[1_4p:˶i{E~)=.7H, VTBb@c8">S"@AlkORJX,$\Ʒa S&t^&Sr ܾsx <\!F:!Yϵ_>NJ\=֞RnvYfT"{7ԺL&?ezk}c02__s"+"r,Aꐉ#"VVg\>wXZBvK2lM&5^y_J 7ER<|\m֭M9S]r=])rzZD ߹v/Bf8f[QDDe6i;ĸk(X1azXl oY+u6o7T)g<%=ym|ݿOE-~7A&Q0MOcnl;YT޷E}0}AܾD%p|]EDgܠm&blhQhQvjtE"ݧ5ݸ֛&jWSF hd"Mr)g 8E2.Дt!J+_uR>W"y5EZG1o0/Gޭ+ȒwOjBFbBbVN"YЯ|g|BzN[D6IH7z6Rmbml%~7 ֥ϔ sG:UʬC6be6ٯ[r5sIljTh{(ϫeovo櫔":>ѿSjs)a{|]G"v7Sw_'F`1DIGK%*^8ۭ yE4ƥ86u1bHCv8T{^vvagBSxE8gC7{"HoϮX;71GZn0?WL"KzՅ[{u]7̬:>Oq2^D Aibqؿsry>*_epσ3k6p{cK6T>=@}~FR)98@sDhiGp- ۆk㑴jnD* WmWF˹2g{v8 ~ŒVu.|IυǍ`YG}xtv,RDs.ŝߓ} EcoZ=%e5(iz:ZĩOULrvyEV W%rgdg#B(㘴}E  IDAT=i6U^/mL?eg0F͞j{{ܺi dk;2KPraHEj4:xr#qHHl/{~Ɉ6^PWIRn7ÿ{Z7hqd py?|_;?D7c*j2oK;G/q ,D+7m?O{ 2]9?q{c%~8d:+cQsڴ`^4{[@?,mYi9NzT{[{TʖFease;u1C(;f{ mqDYXw)MF۸,⍽bδg; @@XQƛuȐ4"کv)%VHd{14Q}L{NaƢdMKS+c6#Xr<=ݛway6Rݏ]qq5Hgy+?hI+; [HeMmOZꞮ n!Ҝv?s]µ!xg]v+n) ;>7aTuhϓ'~g[~+H 08\ 2z3c {htuy)^uHSpQ[js`nƢ(%So?%^0:PԪw C]/x c;:gg ѭ,+(iP?+]Q2F3'mؽ>gHU8-m?9E{yk .ΓK gՅEf$$Bw]>{{etzp( DT&!`oe_ީ53uD}WLSB[YY>Q,$o*Y1P=|&m6=l6(پ-gn;(hwnDvd?АOӪs4l&(FԧRE=:dKZ}a? 2ţ3m{˚!JlQO3σ xr\[KlN`a"+r?[)MXD5||?=3><ՅSЫ-ڟm;}ʱb [LB^+"1)kd{c[[=[m}QL!QM<2uy/.vDqQGW[,jD˶9>͑Fr ߝ#2wA^> [ ! { ި}1 5Uͳ俏St0L\g-eݡH)Ɔ?K,r][(1ϒWM'g xJB5ۄX Ko1uD5ߚ"bӲ5hk}nY>g+H?be״)hъvS k-euǗ%h;1g,w0U/Mc{4wY^M }JWH.~;@`o^*7u(8Hv'ɛ}_M:cЙzoț#+ OX))

|"Cf|H⼼GDdMk4TA%g""gB>*X\[J~⽘csYyy ?Fo?^s0VkrNb8G$Qgs_rk})&e1$@G:)"X֫o 0k!".2j1b'68."ֻ*^ votJo;5 b ggA!Qb*McsHCkZf ƲnN=:)9kq'#Aj5ϡEnqPv X~v/߳45%Uܬ|>5I =pA0۟zngƁﬤ:ޢ;>; |K6NU` ([ʐ\n6eʮ۪v*#".\uoJ8u [Mض@>x&&,"gx峪f~St xlpO.yb1ȳ.3׵ȋű\'1?#mT&mO͔`͛!,/)~=ͳWﶱNb4e-*r/t8t?ޚD5{2z/ȃzD5LG *N :K NRFgpzyj `=وJzgM4L3,tӘܸ &n֨Gf3Vm|JsREɴWpd$qYav$RQdJquk{ib;\qƚi'$5C4 I`6u4J>,KcA7x[%J 1"9bVU2w6Msn-۷ރ1 U/}F;QmV&Cusĭ[[T+$VծغG,?91$ĈyΆ)f(DD159F -gɵEPkoKm3ۆ{&^ѱjnw\/> voB_~W:_EŴt'H];;n}n1"lky:-+-rQ."ʫ*!^]ݍnL!F\8 ] $#[)ąƢ͎l_͆)F@91"\??'04@\Kf'7~?yW J7 N&vFb_A<ñy/חPeޥCUrGp;;ۍ jt|%ϟ p _Gw'"^1*+Mf2[jbSm[_ǧ 'PϜ܄b ~|*_Ywmwc 2ԡ@}cxd|UoPPuKv\-Db0[Xw~KOivr 'ͶJL ~q"ϗ %H^˧y33zE689>;7Iϸo^}"5DnNLE6bzgf{8l6;ӫ1TfK-'!YC9}[+""[_ Hz.0,^h31A'h5{v=ÕjwR#Ϻ\H?IY(ay.z <R eý#6^ \"}vWϏK^@HJ'))>AY.!DFѹ0uVDk&HfygâE{>|}#~Fg*Xsk''P55ѫ]*1:% q!U`>e7ҕ>7/s-E+%$ڀ}6rV.A+%'[۪1< ֗Ua nvwg%bl,mK~~B,;;5FZۭ9rU<y"uwn U,YijT^մѼxbw%xn}6|&2_Ki߅?}CXY!YI#DQwzIUj";MHt;zn.mhqlmm+|)0{cT)M钻v{c:%vxٺwLFu6ROcȲ_qgRs}ޣH٧:t8_~J*￞0l"5= /憘ȌbJ{|2ZYL5&+p{cGl+Ĵ땅X6݋Ȕf(eOјD^kH\9I lw.!3ЮǒݷQlg?g)$yI%m Ykxշ:,n߸ 7ou JZ +vaT[Fkwc*"6wa3jkEOe(E:6V xD]&jZ mu\"onNߊHe zQ&~R}5_V1dY"UO-鯽µ-njc4Sh`'\>z<^7e}ϳut=`Y kW,ufZk1ob 7˫i#$j-,D-v\T";v얚5֎UBƴ\nv]]-L7qO3_LijtF6vԷ2/l.SPr+iG% 1Q~p8p!4I?Jρ: Ţ[٢.(0}S`m(5kǏoߕO>n :E8QƉ,ʝIm5 &rrq"vaDLv4_'F/N>gHg7(>RX3֯#&YbCw7_BWs~{̎zwwOo1x#jmBabXZE#!%1兝Ƿ^kڀpCymP"bUBuv+"Z5Ocmuu蜯2rII1r{]ub>%.>/eyQG"b?oG_H {ZMqq\1aGu{t yd*txdZfʻo,\vV*PmOϪOP3Yi{ZCQngZvk[gYWk5njGݘ p~uhKEp>D}snRk(9:? <Вǰ27*E[ؓH5 ˥>;q88ţ3FϻSxt0?2.:pIFF{#%06T /Vl+7G7ݦaEQ>źƮBǟVLqȼ~֢kյh-.ϼ~DsV+Q`Gi,o-DGlk\ Jb룫 6:>kZ<#¥tPąU?eRH9tbfF=hjmn3GxS@͵!:\-Zs |ӕ'sփ58Tv3{J:}*¹&S7u˳ZyYMh zSm{wiBU~oWGgG?N©͞ zv޲9>;,cr$_=`p-~@'OE|!y;g2+ ""??_ls&e"VL}%RDoެA w'L!Qb$>@숈u^Ƚ@9Vbԝ|`&)|#7aY(z |g[2ūذIewѦ@1G˺v`/L_^}S[) ""omywDDd9+4[c@Ç~ڨ춶Pe̺޵VT=%e§ IDATО;hziƔy3N/OgA9-,m2k\kg3}s̮b9mruticỲ9䋇U/./'0vQ9ۚe;plkm2l)xz̞}tw}_OU&yqS~d:C"ww,Ed_X^WN̑L$E#4@6+Q8Pc*:/сJl9/ݕgW3&71>m9K 㿯UQ@#f'i5TX#Yy;t1 ۧ@uyx.úC"߿/Z=F*^'_\B-q[.nւAs ,:W͉}+cVdަb!wye&'b` -zMA[JomyyEDN.NB>cPRmDdgc[B:P9iT;a[giH [DĎZB&y/.WJ?rŒUg+u?B_{ȏ `3dٰ6==:µyKowst`)>|CC?G^Ymn,2td5("r.FnE`wcWD|{FMdKK Ӎк 2rGgNVU0^ uOlQ8LW`\;zde @/vh6kqJDl[9k&zPu9G(WNI׼%7I(d'qA$KyU",GOƓJ={w/ySQ~@84 Fz 1u3La^쵶 cJ{M@6ikm{gw+z܉{ii&I鎞)xk!fP"CO;-eq4uWsj:m=*6uc0~mrea{[XyDͰ"bluPPHVxةf&reULP vt^QٶFG9HKcQ2)imi۞PsgIFEx1vVfɃu5La8<:ZQyj$ u'&n[yZ0pl$1NHdRA6?'E!Glm¥N÷YW'cD6;If|f/3eq/vU;Vk(l:o[%rr~؉ &{ MYZ:كJ4\pzqm82j7?>unT+O58,Gg*/t1e+Wm~^At&$(֏P}̷L]08GrAJ/\<AH:d#_1K:zL"ZR5L7beY^ Dooݖ?z~m%w Xǰ$/+CF6듥8g23Ac`[e h;44.ńĘeloB[)̞zeW汐BQq1k} r8yWk);hGz4g5|)wq>Hɰ>ǪeI @~q "f&\uEb"-1d:<ƴʢܘ^XfmL,0ؾJK=;3E} ^kٳWD4e$8/mO9o|{XDãCyW2MK.k/"rboʝZI2PeYEb2*4Pŋi_yztkd:]rZ.x3'WC!"K.P~-ORS&*0:;ocN ^n+2'mںشӶݘZc=:)i0Wڿ0Ui TjsAYu瞢ggӂs鵱RUǖKKb2Tgy*gȵq yn,%ߚzs&*LfVhN.NDd]SϔPK/_Xf*+G1ttXB(ecw0LZ:B<#yq~isX.a3#./O -;#QyK:e%*osymPDm)43ޚy粞Bbt,7W f^swq qxt(??G[khv!JKۈS%%qH@vcD/~Ev֛L<BHH\p 8LL3sHo0Otܙޑ^}k"$ov7)\Է~eUDLT^q8;T u(ˏ%vI۾-_|C@?{{I땑؇!Ònk2r Ђ+ѡiU.՟){2 f(bCn8ٗE:҃%NYׄUq4BC:;o\kZK1M_լi?}Uw,^ïb0Du\?1EύwLB]C!+:.Zr@aC?d Zߕ?q"Mҟ̚9qIi81m|g%z&>DJDٯdbm2祬-2b,QļInamXYzXzB'+]/͊yT:!7lZY yy"uo ^A=bC8d r9+WߌËӦtY-0Wvʆ vҞ١yȬÈ _xY /2K Cc씭\c][@1!@DXk'r|~Vt-Y0|^ße1_]'e΃wE''&*-F7nrSCM]ӛ:+ZZE?oCa 35˻_WnMnT L[Fh~c/Cx\kNKN=릙f<nݭ&)n,cY')˥@s R3CZ{Bc\'1R&]x(RM]4d P<|?G'20`؜E-,4#,vx6]88.#eot=QߘGI/wp(ϫ= ngLl"\;=wJH5Ub%ӚE$*!G_H,dm}>9?-sJ_vfe! ^o5cއQs׋{<$ D|_AU q'\}V׼?z2WJ_Ϸs_9^]}gTttSUFbT0wݧ`b(c*w\aC P?y[D \)!26[zhPNץWHn$+RK筅8/X*K[럈7u.f߿/"_2ݘVSEtz:Eզiųtzzszl78%ӍZChYOVl"7_~lV:/gGH!&:&Ny^1עnmˌ(k/'B\G 'by +#d^Ʒ7<#SZ( >BbIF)ųoЙc;$q3*\ʦ)+"x<#wt3cs$w"#+1anuUY_!2V&;:sF+"V= f#/yc.#BbV.tEmj?E9!J. ݟ;C5U+wOzU_n7p]Bq܀ݒM-ջw*Cv\2<ݩy\_mY8g_xX 2uA)b23}1xMCv\27 uWN<3V^,Q=XY28<:m/Ƙܩ_^#{(w&|_h."\Z"4وƠw5c ݛqM3i;LplKBD@es#!ʃPH0QgbעbtN [TƦ+YLO?^3J aJvk/-{(z-S6=a 1vjW I̻}o!1rPC_N`naY#ͦ)N6bdfcZsBs;g5hi~_d~Qe{vfBD@ep]1EC傀0|"-:9)KOr_ $;:"De!" Bl _lz!yٽ#kUٶGHP=_۩k@/ID囟N.|96W?Qsxt(??.#g*C0陁("+Ͽ"GGأu[\/v\XKFgq֔f#""''f ]G F55/_l-!fqb7!ڂ02MVgJX4g\n?6sbEGGh3klD HLx鍮фA@1w]K3#o0@okZsXKa&hۉsnM[ d!" *6;n5!`h5حk2?7m㹇'!<\/QnbXGF#17B<XMVG~$~H>vR^5iZxߩL^g5 [SqM,Z5B<X]V܊6Xz zqV;S.Mkmd\pFVuuf̌!p/!j qkoAX5b*s ođU# ^/5`2` x箏xSB۞tkW=ۙ/wߕFbx}.F&7ZE⋒c;ziʼnL78xX4e"];Le1 Qb9xpc@@X3t!:r"l{&g^Ι\ӱMYU׾kDכ:VC"]1lk&^8nιmB6Ce?Z=O=sQE/tnkcsΔi 1f!6>و޾loF=GWid '\8CW>OwZ?&mJwޚFEL||cRHss1"/׈G~$?;'gOԺc}lǚkhy* K`-67Iȹ |!7אG~$~H= Ҝi"bI~="]j1`ts~/.ʼh:07 yCFE< ~z ;wMӚF\9mh*3b^+75´qC" ؜PDCk+weF@ _+zC" >or˴qd3y#y`t>;|&88U[7~;3+0cC/]wsoYY!c*NWC*U0' ?= l*\O딁xGhe X|YdC69ZqY}*8PՉKypU#-bW equmҍYk$ e0F֗ߪBk " %;{sH+Y1-] :G1tĻ*.!@*VrÔґLn̉" k}EUlV5yp! 9lř>W$T]|lUG7}gH>Y I cl2]LoG1UW9f9P~z ?{/)5s-Ps,F1yEGgG5(ZxpsA@4B3֜d|.ӭ Կƭ /6+9f)7D'ZF-&˦(8ۙɛ/vf  VwֈpjLϏCUM;3*n2Ժ "=G?*kT8ey_ uC"f#k* vjaCA@pyϻ$lR2]9n~>o ?oT"ؚCّȵWI0E<DX*]7d19Ç."ʚcJ"ڢĿтwȃpe@L33fk<2erA@ɡS#}̮"ّo 8"qe "->~$ONTY$ '۰ψiEDO߃Lg%Fqg<:ׂȣ_=rJT_6*"=JC@xŃ A@kV2ۚbs_p` OXRʒy^L:@@kC9Ɂ<~ج !1ƛ8(m GgG""Ȉr8:d 'Uv.&]hj爈Uq,攌zLom͗`Xst:@J!,D9x|f%^8۞ɽ/ \o0zJemDd2sd@@08va="ZsE:e KLQuyͶg{Ni^ Yr| 9ؕ)uW"@Ď#lQH\s%uW "@!o0Ƌ)c{vaCXz08ts*" qL7UL|շ`%@@'ӅhOM2Gf.c jc{^%AqXXV D8|r(<|V2ߓ{_?ЀeD`UA@XPʓ'foD6 a1`ƋoLdTapشa#ϒs: ,?x(. \!C":Ǧa`䖻Ɋ-EXL7CX7VCb)q7Lɡ"1`]A@XQ<9}ILde`R+T[,Z4D8u`MxCS/}z䙪Z0|"&ɳO'GK^B ҰFȘ ! @ NKr'IENDB`hkl-5.0.0.2449/Documentation/figures/m2-101.dat0000644000175000017500000003541413237020467020712 0ustar00piccapicca00000000000000#h k l mu komega kappa kphi delta gamma 0.000000 0.000000 1.000000 -0.519320200000000 40.400329236644197 134.704182457760055 124.948883370711130 -0.022336900000000 14.824478351069212 0.000000 0.000000 1.049505 -0.519320200000000 40.768091717727891 134.706359702627083 124.937616263670648 -0.022336900000000 15.562801324231163 0.000000 0.000000 1.099010 -0.519320200000000 41.136743458042275 134.707659256470151 124.927942900053353 -0.022336900000000 16.301774870111238 0.000000 0.000000 1.148515 -0.519320200000000 41.506230350975692 134.708190640309368 124.920007658730114 -0.022336900000000 17.041431540414870 0.000000 0.000000 1.198020 -0.519320200000000 41.876507620818174 134.708049077776906 124.913592033865314 -0.022336900000000 17.781804145828875 0.000000 0.000000 1.247525 -0.519320200000000 42.247540324497315 134.707314695536411 124.908512076211267 -0.022336900000000 18.522925774655075 0.000000 0.000000 1.297030 -0.519320200000000 42.619301511185569 134.706055402623008 124.904611808914268 -0.022336900000000 19.264829807409075 0.000000 0.000000 1.346535 -0.519320200000000 42.991770790385168 134.704329132977165 124.901758070916415 -0.022336900000000 20.007549931760948 0.000000 0.000000 1.396040 -0.519320200000000 43.364933205530861 134.702185612108707 124.899836473097054 -0.022336900000000 20.751120157785124 0.000000 0.000000 1.445545 -0.519320200000000 43.738778340013162 134.699667761625221 124.898748185916730 -0.022336900000000 21.495574833533713 0.000000 0.000000 1.495050 -0.519320200000000 44.113299602958364 134.696812824030332 124.898407355249788 -0.022336900000000 22.240948660971945 0.000000 0.000000 1.544554 -0.519320200000000 44.488493653216139 134.693653272317391 124.898739019200974 -0.022336900000000 22.987276712271413 0.000000 0.000000 1.594059 -0.519320200000000 44.864359932709455 134.690217549724792 124.899677416769407 -0.022336900000000 23.734594446613137 0.000000 0.000000 1.643564 -0.519320200000000 45.240900285720855 134.686530675797172 124.901164611627721 -0.022336900000000 24.482937727380651 0.000000 0.000000 1.693069 -0.519320200000000 45.618118646338118 134.682614746704388 124.903149335335854 -0.022336900000000 25.232342839798360 0.000000 0.000000 1.742574 -0.519320200000000 45.996020780950623 134.678489350195491 124.905586040600070 -0.022336900000000 25.982846509122627 0.000000 0.000000 1.792079 -0.519320200000000 46.374614075400778 134.674171911482148 124.908434108375289 -0.022336900000000 26.734485919345456 0.000000 0.000000 1.841584 -0.519320200000000 46.753907357989661 134.669677983697881 124.911657196384397 -0.022336900000000 27.487298732482031 0.000000 0.000000 1.891089 -0.519320200000000 47.133910751946807 134.665021492887917 124.915222663442279 -0.022336900000000 28.241323108361122 0.000000 0.000000 1.940594 -0.519320200000000 47.514635552491612 134.660214945294399 124.919101105138367 -0.022336900000000 28.996597725175405 0.000000 0.000000 1.990099 -0.519320200000000 47.896094124108608 134.655269603620241 124.923265941552984 -0.022336900000000 29.753161800564556 0.000000 0.000000 2.039604 -0.519320200000000 48.278299814337906 134.650195638155026 124.927693092295115 -0.022336900000000 30.511055113470164 0.000000 0.000000 2.089109 -0.519320200000000 48.661266882081478 134.645002255831400 124.932360652284999 -0.022336900000000 31.270318026669447 0.000000 0.000000 2.138614 -0.519320200000000 49.045010437627603 134.639697811740831 124.937248660169644 -0.022336900000000 32.030991510130185 0.000000 0.000000 2.188119 -0.519320200000000 49.429546392776608 134.634289905410014 124.942338868764864 -0.022336900000000 32.793117165125388 0.000000 0.000000 2.237624 -0.519320200000000 49.814891419689715 134.628785464326427 124.947614551333146 -0.022336900000000 33.556737249230693 0.000000 0.000000 2.287129 -0.519320200000000 50.201062917075383 134.623190816613857 124.953060344637933 -0.022336900000000 34.321894702208262 0.000000 0.000000 2.336634 -0.519320200000000 50.588078982843392 134.617511754489072 124.958662095239717 -0.022336900000000 35.088633172860433 0.000000 0.000000 2.386139 -0.519320200000000 50.975958392326170 134.611753589727329 124.964406735943612 -0.022336900000000 35.856997046840185 0.000000 0.000000 2.435644 -0.519320200000000 51.364720581250936 134.605921202658976 124.970282175513674 -0.022336900000000 36.627031475565893 0.000000 0.000000 2.485149 -0.519320200000000 51.754385633292159 134.600019084826585 124.976277195687317 -0.022336900000000 37.398782406213599 0.000000 0.000000 2.534653 -0.519320200000000 52.144974271102576 134.594051377198326 124.982381366997416 -0.022336900000000 38.172296612886718 0.000000 0.000000 2.584158 -0.519320200000000 52.536507851023998 134.588021903553624 124.988584975441597 -0.022336900000000 38.947621729017449 0.000000 0.000000 2.633663 -0.519320200000000 52.929008360789645 134.581934200309149 124.994878945693003 -0.022336900000000 39.724806281103341 0.000000 0.000000 2.683168 -0.519320200000000 53.322498419939578 134.575791543123785 125.001254784265299 -0.022336900000000 40.503899723760711 0.000000 0.000000 2.732673 -0.519320200000000 53.717001283076641 134.569596970264371 125.007704534681054 -0.022336900000000 41.284952476307105 0.000000 0.000000 2.782178 -0.519320200000000 54.112540845136699 134.563353304008700 125.014220709473861 -0.022336900000000 42.068015960799301 0.000000 0.000000 2.831683 -0.519320200000000 54.509141649258005 134.557063169266826 125.020796262600740 -0.022336900000000 42.853142641774710 0.000000 0.000000 2.881188 -0.519320200000000 54.906828896510568 134.550729010661769 125.027424543585781 -0.022336900000000 43.640386067629656 0.000000 0.000000 2.930693 -0.519320200000000 55.305628457738507 134.544353107726437 125.034099265393550 -0.022336900000000 44.429800913882815 0.000000 0.000000 2.980198 -0.519320200000000 55.705566887360398 134.537937588534021 125.040814468799155 -0.022336900000000 45.221443028309608 0.000000 0.000000 3.029703 -0.519320200000000 56.106671438931656 134.531484442189537 125.047564494312866 -0.022336900000000 46.015369478132492 0.000000 0.000000 3.079208 -0.519320200000000 56.508970082681003 134.524995529916083 125.054343961832174 -0.022336900000000 46.811638599349422 0.000000 0.000000 3.128713 -0.519320200000000 56.912491524853017 134.518472595116833 125.061147737329350 -0.022336900000000 47.610310048378302 0.000000 0.000000 3.178218 -0.519320200000000 57.317265228730385 134.511917272681757 125.067970922445227 -0.022336900000000 48.411444856056960 0.000000 0.000000 3.227723 -0.519320200000000 57.723321437637125 134.505331097227014 125.074808823615555 -0.022336900000000 49.215105484271355 0.000000 0.000000 3.277228 -0.519320200000000 58.130691199785836 134.498715510600988 125.081656940648784 -0.022336900000000 50.021355885289424 0.000000 0.000000 3.326733 -0.519320200000000 58.539406394826031 134.492071868935341 125.088510951492594 -0.022336900000000 50.830261563947488 0.000000 0.000000 3.376238 -0.519320200000000 58.949499762557039 134.485401448792459 125.095366692982793 -0.022336900000000 51.641889642964180 0.000000 0.000000 3.425743 -0.519320200000000 59.361004933454886 134.478705452984286 125.102220149282900 -0.022336900000000 52.456308931498988 0.000000 0.000000 3.475248 -0.519320200000000 59.773956461337967 134.471985015770144 125.109067436398519 -0.022336900000000 53.273589997174597 0.000000 0.000000 3.524752 -0.519320200000000 60.188389858113261 134.465241207733385 125.115904795609836 -0.022336900000000 54.093805241816447 0.000000 0.000000 3.574257 -0.519320200000000 60.604341630785257 134.458475040145146 125.122728575243315 -0.022336900000000 54.917028981128134 0.000000 0.000000 3.623762 -0.519320200000000 61.021849320817054 134.451687469007084 125.129535228519089 -0.022336900000000 55.743337528572653 0.000000 0.000000 3.673267 -0.519320200000000 61.440951545880459 134.444879398799571 125.136321298402294 -0.022336900000000 56.572809283728169 0.000000 0.000000 3.722772 -0.519320200000000 61.861688044242420 134.438051685895289 125.143083408123772 -0.022336900000000 57.405524825440004 0.000000 0.000000 3.772277 -0.519320200000000 62.284099721848655 134.431205141728071 125.149818258667864 -0.022336900000000 58.241567010071662 0.000000 0.000000 3.821782 -0.519320200000000 62.708228702348549 134.424340535673139 125.156522614546148 -0.022336900000000 59.081021075245133 0.000000 0.000000 3.871287 -0.519320200000000 63.134118380114124 134.417458597767791 125.163193301002508 -0.022336900000000 59.923974749401047 0.000000 0.000000 3.920792 -0.519320200000000 63.561813476600634 134.410560021148854 125.169827194391459 -0.022336900000000 60.770518367648393 0.000000 0.000000 3.970297 -0.519320200000000 63.991360100098717 134.403645464415405 125.176421214976003 -0.022336900000000 61.620744994306833 0.000000 0.000000 4.019802 -0.519320200000000 64.422805809287908 134.396715553691791 125.182972325289114 -0.022336900000000 62.474750552671054 0.000000 0.000000 4.069307 -0.519320200000000 64.856199680663295 134.389770884655405 125.189477518710163 -0.022336900000000 63.332633962475903 0.000000 0.000000 4.118812 -0.519320200000000 65.291592380285351 134.382812024332452 125.195933813848526 -0.022336900000000 64.194497285699924 0.000000 0.000000 4.168317 -0.519320200000000 65.729036240041594 134.375839512798706 125.202338256513727 -0.022336900000000 65.060445881289610 0.000000 0.000000 4.217822 -0.519320200000000 66.168585338793477 134.368853864779396 125.208687902058713 -0.022336900000000 65.930588569503172 0.000000 0.000000 4.267327 -0.519320200000000 66.610295588792638 134.361855571107753 125.214979822132563 -0.022336900000000 66.805037806620263 0.000000 0.000000 4.316832 -0.519320200000000 67.054224827744235 134.354845100094394 125.221211088702233 -0.022336900000000 67.683909870834540 0.000000 0.000000 4.366337 -0.519320200000000 67.500432916982618 134.347822898798029 125.227378779523789 -0.022336900000000 68.567325060242425 0.000000 0.000000 4.415842 -0.519320200000000 67.948981846199047 134.340789394232360 125.233479964692577 -0.022336900000000 69.455407903848354 0.000000 0.000000 4.465347 -0.519320200000000 68.399935845304725 134.333744994487404 125.239511705458554 -0.022336900000000 70.348287386732281 0.000000 0.000000 4.514851 -0.519320200000000 68.853361504032620 134.326690089707313 125.245471047832950 -0.022336900000000 71.246097190516195 0.000000 0.000000 4.564356 -0.519320200000000 69.309327899808466 134.319625053121200 125.251355020696565 -0.022336900000000 72.148975950431137 0.000000 0.000000 4.613861 -0.519320200000000 69.767906734707267 134.312550241958917 125.257160624785087 -0.022336900000000 73.057067530412041 0.000000 0.000000 4.663366 -0.519320200000000 70.229172482336409 134.305465998208575 125.262884834921024 -0.022336900000000 73.970521317830290 0.000000 0.000000 4.712871 -0.519320200000000 70.693202545239458 134.298372649562538 125.268524588080680 -0.022336900000000 74.889492539530181 0.000000 0.000000 4.762376 -0.519320200000000 71.160077424190504 134.291270510025015 125.274076781301915 -0.022336900000000 75.814142601193396 0.000000 0.000000 4.811881 -0.519320200000000 71.629880900070660 134.284159880680591 125.279538267443144 -0.022336900000000 76.744639452079952 0.000000 0.000000 4.861386 -0.519320200000000 72.102700229711232 134.277041050350022 125.284905846364381 -0.022336900000000 77.681157977564155 0.000000 0.000000 4.910891 -0.519320200000000 72.578626356975121 134.269914296212193 125.290176261800312 -0.022336900000000 78.623880422090863 0.000000 0.000000 4.960396 -0.519320200000000 73.057754140558231 134.262779884336908 125.295346192191204 -0.022336900000000 79.572996845476098 0.000000 0.000000 5.009901 -0.519320200000000 73.540182600072669 134.255638070306276 125.300412247269165 -0.022336900000000 80.528705615856055 0.000000 0.000000 5.059406 -0.519320200000000 74.026015182351188 134.248489099675709 125.305370959126975 -0.022336900000000 81.491213942904594 0.000000 0.000000 5.108911 -0.519320200000000 74.515360049950644 134.241333208459281 125.310218776288252 -0.022336900000000 82.460738455458937 0.000000 0.000000 5.158416 -0.519320200000000 75.008330394136991 134.234170623650442 125.314952056149465 -0.022336900000000 83.437505828155622 0.000000 0.000000 5.207921 -0.519320200000000 75.505044775070090 134.227001563553358 125.319567054443795 -0.022336900000000 84.421753462239849 0.000000 0.000000 5.257426 -0.519320200000000 76.005627491928294 134.219826238257326 125.324059920812928 -0.022336900000000 85.413730226409541 0.000000 0.000000 5.306931 -0.519320200000000 76.510208986381940 134.212644850019956 125.328426685539711 -0.022336900000000 86.413697264267981 0.000000 0.000000 5.356436 -0.519320200000000 77.018926283173982 134.205457593601011 125.332663253060844 -0.022336900000000 87.421928875901912 0.000000 0.000000 5.405941 -0.519320200000000 77.531923471947977 134.198264656627572 125.336765387856701 -0.022336900000000 88.438713482026202 0.000000 0.000000 5.455446 -0.519320200000000 78.049352235261324 134.191066219891638 125.340728704701974 -0.022336900000000 89.464354680376118 0.000000 0.000000 5.504950 -0.519320200000000 78.571372428188482 134.183862457695142 125.344548657350714 -0.022336900000000 90.499172405364519 0.000000 0.000000 5.554455 -0.519320200000000 79.098152715924414 134.176653538097241 125.348220521545187 -0.022336900000000 91.543504203612144 0.000000 0.000000 5.603960 -0.519320200000000 79.629871276525222 134.169439623221479 125.351739383491790 -0.022336900000000 92.597706639812756 0.000000 0.000000 5.653465 -0.519320200000000 80.166716577161068 134.162220869522173 125.355100121039882 -0.022336900000000 93.662156849594240 0.000000 0.000000 5.702970 -0.519320200000000 80.708888233547142 134.154997427980589 125.358297386337753 -0.022336900000000 94.737254258622528 0.000000 0.000000 5.752475 -0.519320200000000 81.256597963536706 134.147769444394157 125.361325588345906 -0.022336900000000 95.823422490170103 0.000000 0.000000 5.801980 -0.519320200000000 81.810070647971926 134.140537059580311 125.364178866173219 -0.022336900000000 96.921111487069084 0.000000 0.000000 5.851485 -0.519320200000000 82.369545513832634 134.133300409553357 125.366851070987494 -0.022336900000000 98.030799878246512 0.000000 0.000000 5.900990 -0.519320200000000 82.935277457254429 134.126059625814378 125.369335733008697 -0.022336900000000 99.152997625129558 0.000000 0.000000 5.950495 -0.519320200000000 83.507538527436054 134.118814835420579 125.371626036927438 -0.022336900000000 100.288248989548421 0.000000 0.000000 6.000000 -0.519320200000000 84.086619595623702 134.111566161254785 125.373714785174769 -0.022336900000000 101.437135872050320hkl-5.0.0.2449/Documentation/figures/B_b3_y.png0000644000175000017500000004511613237020211021171 0ustar00piccapicca00000000000000PNG  IHDRP˛ 2iCCPdefault_rgb.iccHgPY<@BPC*%Z(ҫ@PEl+4EE\"kE t,ʺqQAYp?{ossp e{bRɎ(tջ{i常r)teJOYLgWX\2XyKο,]~ )sT8بlOrTzV $G&D~SGfDnr&AltL:5204_gK!FgE_zs zt@WOm|:3z @(U t08|A $`(E`8@-hM<.L@ށA2@F 7 Bh( ʀrPT UAuP t݄84 }aXև0v}p4 ^O6< "@]p$BV)GVC!Bd h(&JerFTVT1 uՁECDh2Z@Ёht]nDѓw aa0Θ Lf3sӆL`X VkaӱJI%vG)p`\.Wk] p xq:o—;IA"X| q B+aH$͉^XvbqD%iRi/82! L ے&US{1O,BlXXؐ+ NP6Pr(3;Yq8WJ)Hq"HJ IKIJGJJIKa8y"Ֆ͒="{MvV.g)Ǘ+;-Hז,L_~NAQI!ER¬"CV1NLMZ)VL $L`V0{"eyeg :JJU*[5JLGU殖֢HVQ?ާ>حѩ1͒fX9֘&YF3U^FuX6m]}G1Չ93 |UҪU$]nnCM/OS~~>&   .y݆i񍪍&v\mu:ƑGLMv|253Θ՘lOv19|y-Եl^Zä́UUКij}ZhlfSoV6¶vʼn伲3صs-[{'BCSGhGfhgWΣ<lqu%V>svu.֪MZ26,b&*4r**4j:*@LMLyl,7*us\m|GD\bh$jR|Robrv`NJA0"`H*hL֧uӗ? ͌]֙ՙdKd'eo޴gTcOQ{rswol m ڳMu[NO [A^i۝;OrR V (m? Yrˆ[EEE[?Xި%%Ga%oDDiNe̲²7Yn\^{p(㐰­Rr_bULp]u[|͞iU-x4:zccǞ77Q'z̚KZ!'lsWnk]8q/v=s}ٚvZ{aԱC) _}ABEKr.]N<{%DƞWzuW8}nX8[[Mowf[@;]wv8d3tyoy02*|`a׏2-<>+|"ߵ~o /ۏ?yx??'󟓟O)M5MMqb݋ɗ)/f 櫳/ M^̛oy=}na>|ZZ.V|R?B, bKGD pHYs,K,K=tEXtSoftwareGPL Ghostscript 9.22_ IDATx{x+} 򐇇.Y["Yqxatn}&Nlc<ͮNs:%NӮk[d븛6fweIGȒ|زHnG:pc0I `u<?~}_;KKKD0faaA zէ$@B>BcszoiiI }SN1 >\@oQCщ'z/555%qO$^YZZ1FONz( -@ĹTLOO.1qFJHZN/Irgo H0<o& tbTcj[qOTH/Ty555|>Ox hD &@L(P1b"@D &@L(P1b"@?P)g*e>'>qg; @ƚ2L; @?~2㮤AJ l6P6P)r睟WSIl"kkdYL&?!P)lۖKe顇NzHTJ9,˒Kb=(ҊU*j Kh 8%-w'vz`'T.߁~'ƶ`P6v:^oB;N63M<ȝ]^36SP}Ρ4m ^9=~=>ÇZf\5 5c@:mmb<6(XkI @uEtqc\`1M:yAʊZ`?P]᪾v63O} p.h\HhoU,@@GA02 Zu֊s^E3paȑ/?a!@-70 &emW9O(Z59O(|ZԢfN g(9[OGEHs6b"@==OP1` @L($4'bt"@]j#G3lT9dR.…%ңvp,עLؒ%Of4#_~2 Tٟ'&顠C$)̖$5ΏEJ3Z]*7\s*E<([mZV9#HZqVU)@RSdYR6+}a P)'rI Pn_Bx]˒]??a\rȒU VFFs'.1HL{##ɍ5O!GTΜ &r'?2%}ۜSm W.K@h%+_i$S S4mw]Ŷ42#f5+Of4'TWkkvyȲ.hQ-(HE~Zo.!@%EX SsˑS Q3S7ڼ@@ͩTO oO2鳟u{>F_K947j8t*A++Rܺ³`29#GsqCFF]O imC@{js3ުugY-Kg԰ь$B*!py*Tu*P5;P gORcxکHwtHvR]@Fkk&bYcΜ9i@Jmn*ݹ /?(oBѺ$B(Zw4 @oY&;#@/D[wIH  }!li@BE[wL FF(;@ZiEB*Ѻ Df(;@*T C f(+Wy|p ;^{f_ |P@_&=t+WZw *PhNsm:^ ߧ5 %0&x-.2C HZ^^֩S4==pji5n%a1fE\uix??9e#d ۶U*u7H7 w2wܩڪJ[%Ţ; Ǿ}_{)I}M097/)MMM5'Ympv>I|򓿣@dɶ-U*jU_RJSl5's?#(j$7eY#ʍPvl\#K%_],辻_vy4CoҵI"CaJ%)d.eɶ3@eG#U-`KRk/A9ęDN#wIYL&L%ٶJ%LFTT,Uk~~.aIzQϿ\MV&Q6S6U&U6U.7Qr#esȁq}o># _Ty傦n}y_~ v( R IT\BUFmծ3mg-Ȳ77Ջ@9NѪn'^O|NEr9JvEKT***6U.էO~t JJ(I*K*JAٖ, 7|sdt`FGG522CZYzV^~N~UpNշ^yۺ7~v( RemK岿e0dCUFLF2>yv0nJoyyyK@[QvO*N$r[lV* `j:fފqȒq%#92r47t!GL@4VW/I|a]AF1m˲3rʎ*꩏ߡ-7Y7ߨlÞ^Zt䶑$c/-)C-MOk7` myiH|?dK(L;)U*૥;K܈u뭷n})L, Px;oי3*',R6k^3vubyO {Zo^_5+W3Ր&#G^mNGOض߷ pjvm}I~f(j<$ei 8F;P-|hYqZ4 QCwo}z+)&,ImK(5S%5ܗfs*6eۙZu+zNw|Ȝցj^;jvU@%xWˍhddTNhuVV^FQ'N\Bbrܐ_E}:#8q#5r49bޥ3㟨˲d[2rٜ2%۲%+x[XL8BR6h6LVLF~"U*$kmVW.ȯ:)̧|^&$i~^ :=?/3;K}gllRL&jŷ>R.S.7L&#Nl2::q+a=%x ӻΎ qw'C:y YˍRhe^ٶCf7U*GU*j5 “;]IsVxݕ='&uwɲ,el[Y;\6\.Qֶm* Lپ$WTTXPe*ŢJJłł z˿pMu#4PKK w-8Bp՘@^yefs9~*JZ]K.zIkZ__k_}Nȇt7ugu{ٖA^=\.]Zj|?(T'U.ɔu-'`/.2GXVj'JEJEE߯U^Di;ڡ .aND]a)LtM7[^PҭO猂$I[圹G_s(\,8 WIwJOC5S1 ^Cs_QUY]ݭЉq:N}' gx^p דrsVkk:]?ryLOiQѧ?}$i~ oj}zt]_Xؓ7}#*V**K2[;Tm1==0i;KKK P=a{x3Gꓻ`}/N;^Ŋ΄D ک"---i^[5wa* 4GCWHD;j* V'4[m548u~ZZniiIƘ-I[EF= OHP{sJj#0N:%y%0E>&.T8RԼ'Iʫ>7*)뚻 |aq]k7(=Ғjߓv[|;.p|x 6pT<Ј (m젝d MJ[48mw^0&<---inn0[HgAEߗyO-wmtj>O5@,c,Ol~~v}jjWp6;4/j(hUߏx? NGEWC5?'myrST>3T8'Ӌ׫O_^^n:t}-ʕظ\bqUEIbig'\}⇧pR[',,,ԩSyq=?z;\OrZ̍Pkrzw!<4-nRx455D7G{T[vם8[YE*&dÓT_#Q@/'Ж- 6vԌQ:rz[8( Ov=V`jFjQIbtĨu5 ޅIyUR@j1 FOqTeE( hxjo@jva4)znT,km -SR7r:mA@F# U:m`Ls۱CFjF ORZ-G=,3u,Ĩ|0 N @`𴰰P;tC]7W=9\`q(W,y &<-//7)-(N|E2z]ۭ<{.s˫^r]D OOahcV$nSjG%qDޮ[zsKxIdDtW>mοog+Ra8s\m;~2ĮpE5 0~Oc'WO˯33z]GRcx2]өSvii#1GTk1pf?&A]y՚z::yT/^y{xn=7`jV,RSՏԓ8R|o*ĤMVT_ʹZ[K+NMxxg50< y_$Kcc:r2ui.^8^Q?%m@>Pէ(WQR?u {70dYOh||\rIkrAVɶ%ۖ%=⨱j L$iddT%\Va}M+^W^z-<ɶLFkLxj8'^wWT}k`l[;(U*mn¹:wmnn4 O%=Xh=GT}ipLnDWƒbQϿ\ OS6+r9AiPc;iaaaBD5 w"@%:8>!Z=^z]Qt4yD:8)HtqPR^8 *OT)68 iږMUֲTX/~OkU42TFrRn4 "cLmSN'<9R$5\Ŝ&)3(Y2ٜ;ƺ^xvIΝ2 4 *M'_'uuh R^⠙(@j F-;qr疿WξuMJGGĤ46.8 oH׆ =k:EQϳ`(@ DMٗƤ#G''c'ǂ c<_7-gꮍ+:Wijjz4??)>}!XEC1F@aQ@L"sxޜr%( #fD% 5( GT=A1j PL 5[M5 A( 6WTGsD5 Q(cQIjNF-ѕȫբRHQP O*6% nrej`W{@Q`|5V`Uh!q9P>_vN=0Q>2@m<0z] =WTth)^(H=(w۞X7WT vϭ~u9Zy\ Gcw@ ()F9=?C5712J Tf9w@8jFyڵu*3ރyc!Q P.VO"ۆHĮtQOs2*2̯q^V(S-fg;mߖċ+]QQFl(rf~UOv0`L"wnezYv[<4m당O@OjY?~ղhL([>0+z|#Q@nwIl f3/ѯ}]GǎFVu!EytAWG/-˺5:qrMfuH#hUN9=}]t~-Q@_"@pQuWNW{.?|NLOj,s6|D#z~IN$ZYU &Ǐ5WNAӯ>U:1v.&SNyCG:}W/f+8ҁ8iɢMLj|bBّlF[H00=2!8y8);y=Y={osԥE.>aU!@Cfѽ_Ki-{j;'/ب^\yN=-}o zmZ} P[tӒyFtpLW\y_Znxד. 2%<*]}5*ezlY]7oN @ z{NBiS-?M,o(;3z{N> 6St\ Q(mzY׼劤=$8`8 N9+Mt$׹$`elvqWh0qhˋ #@,  @00Yt  uQ# h,F']G9P1bb9rnGα>(c$p?F-<(Xb`VA)6-<娾̀}T$m$0#tpImq>C @tI` (s('} d9I#@-tۉ\wU_hӴRLmz$ͩf Pz4v$y Α+Bm D;M"n;wL #NwLVE8s  @X@&=Cċ\w:n9~ `90 -j<έ=V9%i) XE/sO[Ct @ov`LoIDAT?GAp_=ӓL"ߜםNy;{MzgpNF7 P?9zp*D OP&[Nbcڐ_IENDB`hkl-5.0.0.2449/Documentation/figures/k6c.asy0000644000175000017500000000267312710332472020602 0ustar00piccapicca00000000000000import diffractometer; currentprojection=orthographic(-1,1,1); currentlight=White; size(12cm); // orthonormal coordinates draw(Label("$\vec{x}$", 1), (-40*X)--(40*X), gray, Arrow3()); draw(Label("$\vec{y}$", 1), (-30*Y)--(30*Y), gray, Arrow3()); draw(Label("$\vec{z}$", 1), (-30*Z)--(30*Z), gray, Arrow3()); void diffractometer(real gamma, real delta, real mu, real komega, real kappa, real kphi, real kalpha=50) { real hight = 3*10; real detector_arm_support_radius= 2*10; real detector_arm_length = 3*10; real diffractometer_support_radius = 1.5*10; triple KAPPA = -cos(radians(kalpha))*Y - sin(radians(kalpha))*Z; // tpp draw(tpp(hight, diffractometer_support_radius), gray); // detector part draw(rotate(gamma, Z) * _support(hight, detector_arm_support_radius, 0, 1, true), blue); draw(rotate(delta, -Y) * detector_arm(detector_arm_length, detector_arm_support_radius, 1), red); // sample part draw(rotate(mu, Z) * _support(hight-5, diffractometer_support_radius, 0, 1, true), green); draw(rotate(mu, Z) * rotate(komega, -Y) * komega_circle(diffractometer_support_radius, 1, kalpha=kalpha), magenta); draw(rotate(mu, Z) * rotate(komega, -Y) * rotate(kappa, KAPPA) * kappa_circle(diffractometer_support_radius, 1, kalpha=kalpha), cyan); draw(rotate(mu, Z) * rotate(komega, -Y) * rotate(kappa, KAPPA) * rotate(kphi, -Y) * sample_holder(diffractometer_support_radius, 1), yellow); } diffractometer(0, 0, 0, 0, 0, 0, kalpha=50); hkl-5.0.0.2449/Documentation/figures/4S+2D_reciprocal2.asy0000644000175000017500000000271512710332472023130 0ustar00piccapicca00000000000000import three; triple a = (1,0,0); triple b = (.31,.95,0); triple c = (.4,.5,0.76); currentprojection=orthographic(2 * (-0.5*X+Y+.5*Z)+ 3*Z + Y, target=3*Z+Y); currentlight=White; size(12cm); // orthonormal coordinates draw(Label("$\vec{x}$", 1), (-3*X)--(X), gray, Arrow3()); draw(Label("$\vec{y}$", 1), (-Y)--(Y), gray, Arrow3()); draw(Label("$\vec{z}$", 1), (-2*Z)--(2*Z), gray, Arrow3()); // La construction d'Ewald void ewald(triple ki, real gamma, real delta, real alpha, real phi) { real k = length(ki); triple kf = rotate(gamma, Z) * rotate(-delta, Y) * ki; triple Q = kf-ki; triple n = rotate(phi, Y) * rotate(alpha, X) * scale3(length(Q)) * Y; triple nyz = n.y*Y+n.z*Z; // Vecteurs incident et diffract draw(Label("$\vec{k_i}$", .5, S), shift(-ki)*(O--ki), blue, Arrow3()); draw(Label("$\vec{k_f}$"), shift(-ki)*(O--kf), green, Arrow3()); // Vecteur de diffraction draw(Label("$\vec{Q}$", 1), O--Q, red, Arrow3()); // angle varphi draw(Label("$\varphi$"), arc(O, (n.y*Y+n.z*Z), n), orange, Arrow3()); // angle alpha draw(Label("$\alpha$"), arc(O, Y, (n.y*Y+n.z*Z)), orange, Arrow3()); draw(Label("$\vec{n}$", 1), O--n, orange, Arrow3()); draw(O--nyz, gray, Arrow3()); draw(n--nyz, gray+dashed); // Ewalds sphere surface Ewalds = shift(-ki) * rotate(90, Y) * scale3(k) * unithemisphere; draw(Ewalds, green+opacity(0.3), render(compression=Zero,merge=true)); dot(Label("C"), -ki); } ewald(2*X, -30, 40, 60, -60); hkl-5.0.0.2449/Documentation/figures/k4cv.png0000644000175000017500000031017413237020330020744 0ustar00piccapicca00000000000000PNG  IHDRH 2iCCPdefault_rgb.iccHgPY<@BPC*%Z(ҫ@PEl+4EE\"kE t,ʺqQAYp?{ossp e{bRɎ(tջ{i常r)teJOYLgWX\2XyKο,]~ )sT8بlOrTzV $G&D~SGfDnr&AltL:5204_gK!FgE_zs zt@WOm|:3z @(U t08|A $`(E`8@-hM<.L@ށA2@F 7 Bh( ʀrPT UAuP t݄84 }aXև0v}p4 ^O6< "@]p$BV)GVC!Bd h(&JerFTVT1 uՁECDh2Z@Ёht]nDѓw aa0Θ Lf3sӆL`X VkaӱJI%vG)p`\.Wk] p xq:o—;IA"X| q B+aH$͉^XvbqD%iRi/82! L ے&US{1O,BlXXؐ+ NP6Pr(3;Yq8WJ)Hq"HJ IKIJGJJIKa8y"Ֆ͒="{MvV.g)Ǘ+;-Hז,L_~NAQI!ER¬"CV1NLMZ)VL $L`V0{"eyeg :JJU*[5JLGU殖֢HVQ?ާ>حѩ1͒fX9֘&YF3U^FuX6m]}G1Չ93 |UҪU$]nnCM/OS~~>&   .y݆i񍪍&v\mu:ƑGLMv|253Θ՘lOv19|y-Եl^Zä́UUКij}ZhlfSoV6¶vʼn伲3صs-[{'BCSGhGfhgWΣ<lqu%V>svu.֪MZ26,b&*4r**4j:*@LMLyl,7*us\m|GD\bh$jR|Robrv`NJA0"`H*hL֧uӗ? ͌]֙ՙdKd'eo޴gTcOQ{rswol m ڳMu[NO [A^i۝;OrR V (m? Yrˆ[EEE[?Xި%%Ga%oDDiNe̲²7Yn\^{p(㐰­Rr_bULp]u[|͞iU-x4:zccǞ77Q'z̚KZ!'lsWnk]8q/v=s}ٚvZ{aԱC) _}ABEKr.]N<{%DƞWzuW8}nX8[[Mowf[@;]wv8d3tyoy02*|`a׏2-<>+|"ߵ~o /ۏ?yx??'󟓟O)M5MMqb݋ɗ)/f 櫳/ M^̛oy=}na>|ZZ.V|R?B, bKGD pHYs,K,K=tEXtSoftwareGPL Ghostscript 9.22_ IDATxyw}Yz^%R4-xZsb\` ڇ$\;ν9!ccKnf9;6M?%biLW , {-sz{~~8#С r<ӱcǢ> @K>@\r9MOO󼨏RdddDf=@!h0SNEvVcԩSnO @LHaV0!$VLGp>@ՆQ?>)=<0 `Rt&qctd>Ȉ ALyN}땕:uJ߃/hSN $)d:R؆0ӧO+]i RЈ_ [N;W=T 0jxxXǎc%)@~!)gR-_H>4y:n=ϸ |6)7Rϰ׺X~A D(Wn}lGiG&'@H@q=+IZ$d]5>T(&duJ$υ$Kd?`1"z^ *THU邜'؋'R#SthzR=`1&͝Hb&V}]30?(g`havC*}J\6 Rh3LH@ُ=Q53fR#d@[ 61y:j"ʸ 9C; LH@=QM U=O X@C Z=Q{#RK5Y&QmH@ @[aB "瞨vZ۪8Kk|Kmχ>*JZ^^1ҳ>1zR翠b|~YKF}$C {x_j{+ 4?UCzg>@[!=0y:nL[V08tmQa&'&t|߯< /uzoDz.vC MTMĶ'jGb'/ @|MBdCG 4I\{ҒjLR翠  2ƨ=m ;1 $˞ 8`*\ _# yϪo=m kO{!e~^ V&$577_#<@{!]' Ʒ/|ዕ@8~IW %l=Q _IFAPdY:;3_m@ v(R+ gL U*ӫg}.C)؆p=(F/i))Ra+{DJJ}@=O >` j{2H>JC}ÿWSf^'UX⼺zLvXhR3L,(ZCmT\X񭔙 PҢ,RGG})H:žD`pHeTztjJ|ؼK_Hqb=ű_*\k`v]/^?T%  uttul@ *B+_5` {f%R痕/Kz6B _O$zb 엊_K} _ ;=RZ^.Rݽz"8-@ My^,{DH`jrbV땯UY 󒤎.~86@[ /ծŅqDŜHlZ1~]uM/X5CV/K2&d ?fsTV󌛐ݻo'<"a.]u>Jä5b|zDXW'lۖm;rGҁWjd*zu;ƙLFǍUEO~ɉ/_: peTU,T(um_&ޔj5O*DW_'ֲ=/٨0#dtK\g>} ٶ#۶8::W>7ܫ ֔L&(& E}B "k|LIY\x+WBx/D},B  ?e.]QZ_jbbBJPX.+q쉲{¶C*`,Zj|>)0y:Jirb"4+CtEaGTA>JÜLu""hsRZDLc3e܄QhxSlL=Hh[g2XQj0lVǍљ'*nyQ KHhDCD 4R(IDRqZ_ 9QFCYݽLD?|Dֹe?qbrbBSLF052Rj¸ zVGbG@k`B @8Jj5ϸ Yݽ-C* ɿtA._HSq)&DL&*' q~ɉ "ƄHLHsD~)4=QqY3n_=Qa`5>A `Oı'' Z08Ʋ_i)"TzDGi< ?5>I4퉊TTG%@cHh3L,(ŵ_1K4 {⶞GlR؈)әL&6QRy*+>`ࠬge]qd:Q)(m@ HbDYݽLD  48$҅SlVN:)S)mceyq +엊R;Äm<ٚ˕=>"Y瞗}liɉ My2%ST(&^0 G?p04D.tZ'R)6MY/u2Vz|\cńu`ı_jrb~)uHƔ1( cuʽAGTجI`5>Tŵ'?HOfJw~)H8d:0b=h__=Qar,k|"'*nyQ@|C*`,XOyq T5>)HLmOT~)G #D  hOR@ű'ʸ z\?|$Vk|R ޜ9NRY͓ADuC* ɿtA._HK5*& F`;~8/ ) &FCTz|\c=G8QDJ5>^0AQ)t:c4jZG>7UŗTw$Iֹe?gdtTcn| $쉊SEO~)cB hzÄvBtAΓODp_ 4R@ű'' )Rc/Ŵh&' RFRk_T{~)[LHמ( a4P{c/Rdt2z^D Ue:n-=`d2 z+{vV=/*ZLN )`8QVwF@GTجIQ|6C l'*nyQK6B l n=QKn-4R`]tHuuYLZ!BtH!*HFFG5/jı'ʸD[zVè~=@_*k|KR@Eܦjb )DR̥ ΟubS^JkU>5){Sth(AT), 1@ U D0~yqauʽЖp+>g )KScc1G 9CQR^OHՊN0J%IDw]2nBvA(g!WţD}e:nΰ@ }Ą[r/v+g`rǂX75>b@ 7y:No zmL=QvwoG_8Qd:M1FbmUWN?Me" X)D%/Rkvj{_ )NW+j'"\' SKVF X WF`ʸ z >{-@ q"=cOM jh5SlV'ihSR1MUSM' la05>) ڔW-&ULm3LYݽr?D3#bA ufbB']FSD~p` g hzhylLS^vQibLD pѨ} GUx%Yʺ|14Lz|\cВB[9y0*vmT8E͹ƨpqbZ C qtVE7vL_j;b%yvKeOk| V0jSN4k' h"V|(V+{qodtTo' rLHm9RfR/>Wu m+\+'4L.qctn)"ńZ WvPF^_vLE{ )DaLHe{^Q-T`߉ńԩS>l%vT/=;2nBu7Fb~)(uiBYFvZGk|VWz5SlL@jttTXF2 vLi'W{o2R\nWNJ1</dYeS\)D@>s邬ge]Q` [5vUD~)~) akԮŭ_5>+ Z;atT{9?w3JNʟ،5>&D )D $5F8u UF~0V0h^϶O[0k|l3LPs92@j@ԩS&jC¨FRS8}mgG (HmR+yT?W8Y&9fj$jtTUH:JtaZD[RRk[9WFm {g܄}[#Q Bv.Fk|L:}lbBL=k=W/Trq$ݖJy:B9dS["@ {q[㓤׼*PlI&m\zzmFAU(\{^J)Y4zaThh/A (H5ϵԜI旯^V=}𜁤勀 xRY5aԎ&6zmqeE@ Q jv[㛫ܾkZhJjǍ$k뽾YXUgU^;\z `Z"22R}Z4::Z}. RFFFV/ jZ9/p}2D;S( H! RJR^Ry"fr[6 <)k|L۹zU3NN"҃S-, CzĄ$U_&*5ko~kkª fu>_V~H:X9fiӧOktt0mWj=LG?O*}_uDaC IDAT৮@wskaZW08x=~Jg+vR޴T I#cY2-cٲ*eɘU~1}0P*JWnKܖ*-VJ\kë0r$uHĄ~/i)@ g4y0*6pJRrZh߯Qk 05J:?Z~8\0 $[NW:_`pHljԋOזy_(0LkUR9d*eS!TƵZ jR+P 毼VڳWkCڛUzծ_fWcĄ3/`_@*n:^IOҺȼ5~ɨSVrЪkEЖG uljjVoʴSe*%cC(˲ePʪLCٶ-rVT *7@J|k©)WUTRy6p 'TVk_ 9~٬~?vM#&`_@vi~j/x^z*hv0hwJC/]hh0'Txf*v+kv+mǕ8rGq\Y#۲eٶ}{-ˮ*T ç_y6** * *łJJXUr`%N+< 6Zozk+U.''&cS<}w'#婔I ZZdW[OXxz ߿Uϙ:Q݂z|דQ@,q=D쵖F=%cWB(DَS \%;:H&8nyɶ+{ս@P0U?WVŸVRWyA ?U}kB!B>_XXV!/XJbyڪf*_3T ~\Pm69e 㙌^_`=ѷ'=}{?<>{%f)aT{{0jT[Zu(?|D# ~Pb@*O=a%crܤdRdDBnSʲS8 J(N9F7}jƘj?UʒmٖD"!utHaPU b%ʫX(hiiQK Z^^U:_ UTx@6Tm(UuQ];ON'' Ŵ\ 5==]tTwkp)DڐY]SQ/RΓOkIzMut<^%;Lvȶ/J_Q&NF+Ppm9$eU~֚?Kvʑ'¢j@e,˒mYrݤz:TU(T5ZZT!UrfbWTVB9ZY˫ z聤OOLSz`|\߻}.W_Z,woW֟VB eT ź^{ݱ1PsEĺARkֻV}(`pH_oޙ˚aYC7jW,_VT_*T!T_)j)yWjwS8MU L Yʿ3&:2縉rzc4vdlPR`[e˵m>T,\ UW_j,ܚE^ {l< VZHbَ7eu(U ԟYB)hRؑׄQIuknT'aJhkOI_>o_)C*(ʁMX]KErJ(eUV9jK*XT9ԑV~-p%|d,7?Y}3Y a帲 ۖ,[].k-[NvT(j~~VKK+J*JRWW)[驵T89* ْS^ߟ߃aNAT tˋ +/jd*n^ Z:콧Oxyf6 &RSQ`ʿtaR7ο֕!]8W*4T*V|ߗ#)CZ $ulyR6޾Ik٬e?o|泲]Wn2%:$2]Sa88>0R߀47;٫Z\XP\ /6 oa(* XWwd %\WV%ZձeRK P*T,Hz)dk@?jtttzGyyp|mHT6\_`Vϭ"iDT tA] |_߶JUL@I*Q͐fu5Nr$ґ:kjg=O_fe ާ^ut萓HJ2=e[\VgiqiIsW5;wUsWSSŢJp*i5کUTeɖMh~iARI~RlU9LgQ2ZZTgT yX0{)β6yfUj'NG=ì^VW!Q?w[ܮ>(`?ZhG>tܛK*~;Q;~Vduo<ҹ=/}<=-'Q l[wlRY]իZ\W/R \/iW CoPOO: u$Lv3cubQbABAE-/iiqA yŢT*JȰjYүݿس )X8ՆQ[ZÄQ{ѱUJkNKվg綿g.aؖKFFG5l;zU*W|{׻d ~S=Jv!h˶fgjnvFssZ^^*1J*%ZNIR}*iaynN/X*3١m^' UYߛόP*!c~>)y>J\NO?}}yE{qtF}&4l"ʬyS못og /;Y}zʿ:qK e*WkkgWӧ%iRtdtTG[G_~-]? 2rcԑLWݽ%7K句 ^a/ 1F/_|߯܂~*zʲjٹU ;U ˣQAi رc&\.O|zYcg=OcbB*+Lm{H! R1٥Mi\6p $ihdDMz׿+Ԕ;/g%lG]=SWOIA5 dVSa8FP*T_ |ɶmَ[T J`)ϒzy*>ܞuHOVeY X7]R\ZxNzSꗲ]W=QG@Tŭ_jk|9j_Vgnmd?4+W.KUPPXRd)vHuHlFeX*8JnBnSCu%;ԑH*(T* *旵09-]UqyIA իI_O ܞrmzzZJR ^y#>6>tW7 ԖYu ȡ7 \ LLI $gDdLGyIs rf\\%**} tPR2M#ײˁ^Ju&eݝLv R PJja K R JBGGI@}+O_&vT(/F}HՆQR;yz H"B48Sq5٬>K_}V;廮 `jYf4s咮\9 yX@Wg#gM0))WI' LvC]k Z^U-* B@u޴D ʓO~Eǎ|W28^;t}G91 {`j;aZR5>$}=>Au^D߀Jh)5;7+W.jf撖gf@z[31Zir(Y3)ѩή _Q|J-hq~V 3*,+(RqU(S[Rk~/T-SR3z+_(OFIׄRT ]܄:ݤnB]^Gz)**/-ha^YJY*YR9P @/>OP(q\nBc˲J8P_G$:z:z"3;,Kǥ֧%Q&K95)qodtToor7&?r078:)M^Qڀ )cK ˮrՕPgGz:ե.R!R~YE-hEVI̿"@H}ӟ‚,˖mrwU0e%*See˗eiQw~0?V{\7Q B2.y򉨏P^㓤Yy|T=~}o TY}K8Nu}+TWC]ToW: b%Z܌f.ky~NA~Y*FGs@SHm7zOkaa^S#۶eNLYd1rݤz׻W4{Uj8?K`R֊$=295>I:~Cz>m46 Pʵ,u8nO*TW٥ **,-jaf/_B^e|_O @jԛu%^11ڞ]wdSz=z衟?:z*^ zq#)D@ 뱿ح5_JsDp~ ޯ7Vg<-]Jtu[IQ1Ғ^}G= J%~rrRÄRo}ҁ}2ƒEJE ʭBb(q ZrZ=rV=} RJw߫{( fu2։&2e$-ޖ@ˁ%bkTҒfuy~NfuqvFge$r:;vtjuJJ#9mHRW`?#ĝwޮG- UK*J** *CC7ny{t䯿Wg׆G<6yבtM(UkqE=Іj0lVǍљ&4zeٶ,ǖmRQV8UL-`/i.ܬ.+KYq:ЯPGo_%re,[ꏙ ڂ;x~w~K}}=D" ~c97aVlOݿ>tNNK\7AZ08tmQa&'&t"T eɲSۖoéաSX}~Ibh+uy~VU] WgtJ~uWO:zˡX>շ(8#ڢ{@Q |WGG:;>̄roymNvL9nBFQc׈`2ۮLIRȶY+c ,K]N koAJ(5W*jfiQfui~Vߛ\_B^=}P:Kn<)e>NJ@HmÝwޮmUww,V}_pY]k L5z[ m{Lub(R]{ߨm+i;JXֵTJ)MBmqmABebj/iׅޕK%t{8UnW;x$ʡes{RַuSwwzzzeێ{WKtUY Uo@9_LLT_< }&@ߠ Ʒ~#JXU,{%r#q|vݚpR^SՂyIAלw咾{咾;.*p TuI&%UBҟ' cg2\:bx`L_[TW"ѡ5+f|A/tA/Z85~W$Ifk<6=գή: /;Y}zʿ:qІ!H#>McYMyFF402=ߐ%#Y6l˒cl*?oY,K,˒,#˔cIȗQQJ[x߯J2*US ճZ.Uqtuu˲mcPKUt3=Ξ=˗(T"Q} ]P" rWxo,",J  E (HQ!EŨkWӧLӏge @$۔C*Xr,K;U LJUoc*aT%xJ(U @%I@* ż|%*ɲm\h'PJt^Jo`5ԶIc]O>6~|{KizzZ:v؞sV=`j'RI7-\YhG>tܛK*~;Q1a.]ull&$)=>-/c#U>/*eOA@A9\ |_~|~˷}u۶I9\I10FR1P߀ RaY$aA~wQ+Rկ~M^{zC?S}y٬$ittT==V&5v&77d"yY`+)4uyF}zdrRl3٬~ejUI2֚cU)KjVR*A9}P ~ e++UCc8:s@7 e㸺zỺo4?;.pzk^{}q菎znddBeYeY4}3= /u0 .(f 勱X㓴57Gd~y}K%Y~I_~ @vȖX\˖cr-Ke˶m.V%ߔoeɷJRI APRkayIZXZ$4x:9nB%|RaBAyǷj=lzU\.j/Ji <ƚKծ>-Uޮ:!lRR+q\7,zgYZ}uf_NJJ|2IU:IQay#U2FAVf%پ/JꬬZ7n *\O?iB)tiIjJԯRLG}ܼ`~Mh( @ (HaKߪ\}RRgy%cʥ:e>nQ?}N˗.{L7JHfK} ?nnz@ Q BTkFyU?PQRA+S9SU*VW+V*_RP7 IDATN9~I+ttCg^qRϜ9˿HSNizzZjﭫWN0ըi]=:!B5˟X&`j=d!sodZ'Q2AU/SJ d<1U*+gFzuC"!gng{"jaoOm+Lj_MzV4@ V/2-oPh )D@ dK5󞧿Jqz~R޲Ty[ #FKKTnԿO-o{Ǫ#BЊ/5Fyt61Z,%g>:@#jCaFk|dgkf0{;܄n`U@H! RhUq]k` }Rmj~vUdNK _)8Sq O굯3@[{w*ok|/7 @H! Rhq[㓤 OG~>v@*&`j!ӋNUo|t U=MD (H-|_oO_` Tr9+B.AU{-h2)D@ (k|WG` ڌ8_:uJ$)Bxup;@C*}G J}ӚNè"&bY'jw&th`h@0!(0!8$=uQ]#Uo{[>`LHğd2֟bh{w0 pyRw=e?7GVńTL))meB}RݽPh0&&7qz鮻O5Xe:JZT2[sv8&L08KW+[be=yĆ㵯ws W08tmQ! Hꗔfw}#T@},Vzm`w:ɭ-).RWeLyZί~Iw=|Xï]wݡG=>@bBq+}܌5z{!WţD} ]PJa$ Oӛ.şittk|(5oSzfT,~7Okp\}&}I HJ$*&G7)3v-JSdyǩ6;Ud2jǜ;dyY$'!a#[ HJ&ٍ{yp>h~~62Z4z C#2y']<渲ׁzl׫oYz/- `x1/:<y_YzNDN@ nyEHPڎRNHU5 BBC mmǕɏ?'9-ED0}Eu:m'U}{;R՟(""""5}jP[; 3r-b~ff}DD+{ݙψWvEg9C-_?8ӘrW.br(BMݱ0 ]ȼގzozl\#"""R͘?8T)jj^=_o DD<R䫾u=OAV wsUGv㰧~a۟0@CZ:u  .}(DDT= 6y5= Nj=Pt^`rz<8)"&0{j:VTئ62L)""c ީlwiۨp)""""jfR:3!/EDM :7Ⱥ^6(""""jfŠRDD@*ޙ;utG{?e EDDDD-UoT'aQ}H;dͬ5LeEDDDDmRoTGD1o(]{ D3kc%" #A >Dx:7>S.A> |87^h02{ίw{>}-s *AmeߙoVk=("""$kiL 0O}݆ﱜ/*2s003H!;CPӇ*z)\YpB*~CTF(>(" 1NHQ8!Dzrnjjzda.F! DD+B%/UKl_(VY(* ~H߂ d{ǎ1""'BewOLUq:Q23 @`}kibf̊<jEP+j=_@%W4= }P!R+0S0Skv;.#(GDR!Xן)" 9NHQ8!~JAgKX2>5̖W9ѴU%KKPU (-SMk|~-NKQOT]{zFN'aMVwWKa+G_",Frݽ(}V" "BBħnAɶم~)wbZ GGD=R!x̙vL?yד(bwuNHQ8!z"= s r"J|~<>QeI&QaTeeT=ROʕ Md8UnhG0 _]ãHFc[+QHQHNuO|y|fu)jOdz>ڈMW( D7Tʹ%|UUi 6l ZAl |g׋0Қ s{AFK_zyҩSPgDT,Hwq::) biU TN:!UfX4%P=%U8Tvޣ^k)#RKL}sd'ٍ{M縉ʥ>B>!V 3KuR!>Lkos C0 0jNuO"2!x핻S(={sm~/)fQ3Si]NM-#TtiF4*[44r>榯i_ k1 gf=HNy#Q(" ( Sk=o}H*è(9OB8W}utZ;i+J|DU4GYU;*);`S7hQsy]l4r}ڱ/ED~ Bg4{8EDlDU\rgM[ nnSBy]4hߠu)|ҪJ疃Jt]SNdRG++=kʙrzl(SOˣ#ˣ2RXK]Iu‹Tk^+{8R"` EA` UjSOg̃t>4$a0$ Äa0 RJb0Lη2lRJAkUm V*²,ض eٰ.RZª3gRq#Ⱥj`Japh!ؖ]PP`jRTזmR\#n`}o9tP4y{\ߟl """*D;YÀ[d8Np(YLaFF`D i@'ҙ*MGyn%/mX,X,*8 ۶`YJpglX̓b)*S& X䔽nOÄX)&FS#8|l,MU+v9Df(lݿ!AFfo#0" 5_AQ0qB zq> >,"|OG3b""#""s(0!wWN1t QqӝH&4l`+UN8e]ˢϣP,@N0LN9L\+x^ߔJEX*[\I!!uyb*/%"qH([3e(ΔT6|6 +o9RU,XnտԍR\#N MUt}s8&4 iJH ̈Xs6`i/eSS%Z lD`FbkUX)WmtݙD]Yn&,MOsߤ'4GP[S[0gᴄW|5>" +NHa!ljz$&HQRxDjNb~@2X..znN lU*/MNY ʶ!F(vCRGq$<>{jjz⾥I@ҐXHDQa" -ڙGKZsXYY2j(祢 1GԌgJ*f&K}>$1's'좍|6j5yߤw>cE|kc*ݴ 'xNP$ACn}DD6>L_նYTt%+p3!R_FAB g } =؇~$чcn$#oC,K\,]_-% H G$V ÀiDHch0*Veyؖ۶QPy`t祊胆 9+KY3nySRKH&`Ds3&3)UtJPʄǰ%xRv_>(TH[v&>bqMT7QDD|c{Cjڂ`֜ڽc%~g3|Kɯ6s|)?ܟ8]^HBO 05a0 H"5----bmm)Ls*a;U.SERgYX'`*p8~]0g[/H0V&LO/,RPMy2A6`"f'JRL„)#nT$G=c_QP (y",Ut/X$"( nB5((\+H$2{bIUcmf~~333|2&&&SO}HD { &GuNHQ8!XJk͚~,|߷QTl/{bC,˰`Eܸu {71e.DdYsW>SRA %3P]`Ȯfʪ3)U~Z P<\kLuuqLNN}XD@*33\DԮ(HQH9.7pu0'^~uqu/H19S}.~vǾJ€YO")"1ģN0/ڇD$IǓ삅bjk+X]ZqB R ѓ%5>S!+LHإ9r,eÄ [EXKQT{6W,:דA{>!%XY\ ]pV$s!=>)M[N 61??^z { <(*σWYZuQQ'a$ΎO6:Ky/4KIJᛑ&uRޟRṈQD>$"}HDDɾ! "I@"k9,.cea9Zce,ٖ|I7_Zr6 oou}ǫoO'1Bs"" (H*lTTjѷz!Pg5q)ADDČ>s` X"tQWRn  Zxڋ/g*LRoԊGED]SPPjqji%i+awᇻJ7qpIaJz̆N) ' r拓%rqsд{nb*݋v.=Zu[۰"lۂlXrֈb8{R¶,h@ǐO}Xkw $@ׄRgS禥fffK/aqb5 IDATqǎO<qBj>mvD pBKR_\ܹj_5>`ih> h@kBuhS^9LD;R__d} ēH&څ!Č8kyrȮaua* P@6~Ǻq]LǞ(a Î7\px#,4'.@ T`j;R?fQZkhUy(87}Tķgs)g/"b ĒBA c/;o9g[ZJf*oE@@.!2Gځ\g5c;33AF˱'KlGntƽn7zamJry qgͦ)5mAT(dfr i"*cP֪4)eUH4,]-HfT& (("b1G!W"_E6\a @@io5 6xf/FvG; Pzd]P[0g3!_uIQDm 㘭ꏪ֮5;eDԅ8!EA ^ϫW+^|nOCM|,T>(JPn@U^ON ,ϺGE|qUD1Dd1@26Ġ70=}H}ȭd^25 ( (p߲|a$h~뭎]㛙׸G~ vPuz\#.@Э?+(M~Μ[vC)v mmªp MUEJ!U+e"@lA0?J+n(eKԇ{R^{ꩧ>$@jzm}v) B7RsDFsRhhjSラ @ \J>†R4=U15N۔DRъ(OL~GL acx =E2n.Z >f~Ǟ(`?%!ڋ/nf'>ޟ(BI?xz Q{ΓCICIeen$1m i|T]8;L95:-lr"WN8䍽P k+ RI碝0`J4aJp&4 BÆtN  %,X}"TB|E]DI)`Ylۂ:A~rΓ;AG /S tR333xW'O2Q7κPYFi_WGH-\Y㛟+3g`xxO<B=sg@7o[S =)sW6@Ы9R -_jn}2ބ@nwkk {FQ 0siPI72ms[+e"" t_K@ \U `" #sZX^]"X{셂J Z tʹ3mD;v O<{B+{;hV7 ^Gҟ6ŕ= BRA+nUS`HJ &.'QĠQ@Lk |I LC NB[‚"lr&hEU "ѽ.LqBo}w_k|xɝbOQx1)O;CIOi_> ( *Ĝ4/[IDVUy۹`$!)1d`+(db(P 2s}(TІla;ʞN9~T& d Q,}ۇD1ŒVaz=QǏdKZTpS+1xM.Gu]LL1"*a EA` U[؃_§Y HK92Ӟo 0j ڐai 6RHǐD*4}qpJڰS QpB.`ʎ"G9]i,?SP}1zm6˼ : 6RS+q|z]E?xęG@@jsݾ`jn}̍ׯjOEDU?6(% R9S (26p& 25(@iSG0c0:qzݶL{)uRmjԡ$^WbQ%RR`5-do¨:IǝCR@P'V3RFbJ(" q'v ѡ\ێUR{&&&SOQSH/fSh4Oq]UKqz) uX0z^;f^q@Mqo1 {6?G5zb(RRTk|^ϫ~>7`Oo^ЇRSOALNɓ :\8gFVc F#:87 -SǠGDD!4F.p7qeP6ƧGTZœ]^,3x Q[}xha0pR7#P|(d p635Ʈņo }Wz87 3%=TD]س?/-LoЇCDuV+Rw7ADջlmQ(>=L[͍{ ]z^SQ[} X ?j 5}J}( 1GavAFc""\kOF"#fǛY16KQx!{L]xo|s0#^ҍ+{t;wv߂ύ`gfKoUo= _F6|:_'K$5{tDDJᛗ"UU\̪VKK\5k!^vЇFԔ(0w]/uLsލJb _qgMx߰9a ߗʞ%XlvNz^=2R(`HBj{dtD$ 3+ 6O6on_:T],W^pq:ڱgo~}0o}£O؁##aD+,x=Q? KmCS+İ812 wy@ƏlBσZGMudED+{m+wZktUO8!E5O<<84(ĶZێEKmEᙄ9_ğ|2TTreɕA $md2sjSהƒq3u+oO/U'zKx@98mw9B[+K(d>$南O㍗O嵩t[Q,/(XѠeĜߡ6/GXXB!/ݗF&Fz j'p!0'w_JDmODԜ{WN]DO Q^3k|Zq/Ea+k|"F8zk|/5s[p^iIR]/e~(ϜGD0j=hh-JSR`*LzY +/A87QjgOvyWih@f, .pK7qePSX K 1һK۷l`{Jԝ}?Oc مco_ў(" Rx-PT-b E"K=xRR;(_j{>uk. aHDHy~jT]5VK% ;{7>Ms=QF7S~)y"WJ]@ < 매Z/Pj_"hhD$yhNmz_*O`rr ~x4-ծUQu?qWGJZ/Ş("6RjMo5>4/ )jR0_cmC=QK/}8Dm6HhgK͚ZΎ8;n_j1rY,,, ߸_ ʹ]~^ {!PJ`$X!d ~;"m ׯKKt/8t޺5>M87 s1ǹG[:38ͯw\7u>|o'O}(Dm1aF#0;peX1)ЧΎ-YkPx{6/n=Uk=C'{Ɇ>Lzd("6R-Vu9K_o773_RcwXPoz}>au+ aHgBJ)RM^wp {E,{OTL*(&A f`M8DzᯑWZm~!o!U_zϻ5vBE;R\#tzv_M6c@ W6~?d5ۻYq_<G< XZZ=|OT {}}*55=PFDDݏT #OR\ڣ 7_JvX/Q~엢n1`$ D~ppXa㳗 #͟{(~6dzfS<%"o=rm<*QT95>k%|R׮;fT醞F_RZtu5Fq޽X9'y=Q`fUZϫ17wspB夔ZWrRu]o}{omS5>0;1<Աg骎f< L/,\`DLE aie!UhNŁ%Qay ,b%s>gR*w|WzX~6k|DDR-' aԺX/UPk|))S) H,!(_Xbb+G(DSwA>í[7zo50h҄"|T9ljʹOTPF:#uKu~k So|o|:!ڔ4LfDNe>@xEmb.諷_V8)D(صkP(xRdzw_Kf!sRDD=(|?u; I7LFn{fSRZh0f )/δԹ٠y''LQIC4MC.WiL+ E`[֖^8Ubb}& o%v5uD5Ø17 \#"iR*_[㫧_ ՚҂^/5k|`p_0:(!4 F:_j5$W\ nD?Hy=?ݿcAT5KR-$ J+{ₚRWX/Uu{AJTaOTk^>2! #b8 )?Ԭ p iohRDDT+ !$D=fTJβW9)ET(6Qs`k|:|GiHha hNJЮ7qePֵWKþ8hbb G8Kup!w8)% pδWuBBVt !u?/Zw[@N%Gss+nǔNH+O Ǟ}5Q;'OK SPBCa@)&NJ9CvzwW@}S SwqpЇBDD-_t0'82 R?큪qK(p`ݸE]xR(Ý*lu_JM[PQL>YRpC) UЩcJZ/%Qw`c엢,^Ґe[SKxG Pi 9g6Q O!QtW|zjuϻk{)K&j)qn+/8k|ǀ'o{F/'> )˶XjM^THf}HG$"9yq2C!"1j!0*Py|}éuT9"Voau<'?C _v@JJhhX uJTBH@ '/ty|n9J͉~Lδg~T&~DuE<`HV4+{M;jp*6O{PRdf0?6nB((啓+h- _ztNZJGCW^X/%^vЇ>q5CyRo|o|:á.L\K@h(4_61gmvOK}8:D~t8o%re_ Q/%|z=oQcf&KQW7 ';%*θLO wIAnb|=ct_GWS#+l|o~=à6x^i̽à:p:t *VVRZaNp:[?j,XE\œ}*55=Q`aQU=+{ZDžWL9Tժ3Ro~׮f{6x!{NDu9oo» )^LG=5 q>u.5mAM[0GùSѷ>""a BaB'.rUJ9a+J2qn87R=엢V™r>ڥ J|k~|4X!~Kv'E> IDATDy(L{sL|g. JĹYl|=/Ş(x6>j@Zk0Kyk|[KGo"|RDDT/R-TDe/?T2dDa p&`#N05/Ckg5}(OxOmB4M;gZY8bR `o<ɵY(o/eQ7/+{NY+yxYADR쉢^> 9W5W5A:gM77J5<""Bx*_+{'*Whs,W^(;zس704u>|o'O}(rB8v( h5> 6ZKDnJ/aDsdЇBDSli0 aVNrːrUWVէ_S^Oh/EZE|&_*k|_;\s[\5~s\#"A\k!0J إ=gmo^y][WgSnODO<ScByS5>{TM+ y#5 ߏ;rY׸j)5> Dfk|DD-`a'-*P=oZʞwۛRJ[+OJ1"j GA1NsXSAF /Q<8<#smR@_8 ݴZT 雂NȤ|AU)WN'Ùtg5Q ^05>bxi\S<_߅_NWƺ]cQk'X3Sj.@I&ퟖʽ-֭UPrOrB]ĹY'rCVK''O'O0QqM K@}''5K'K j(K+vgQs[\Av-!  wNҷrDK,@u :T׮C,4?}9E7u>L/2~ᄖJJB-.C-5 atcxЇNRa+6~PXn Kcv7RZ!\Ȫb?mʠ}^$-ݴLL0\ЇG;sɇ).@r<>R%?V\$ʹ^_nNErkfH[)ic広gݟ8ށ# 6@ jx1uWLi4ƴ`3QPDFB\^0؇AN HvoI!}k{*vΌ'ܕ;lYsWp&t_he/do087 ]/%^Ǟ(t엢Zϫ׸&ƍ7/~&Ύ/\#"C !` iʔLùFz0LfbHSABM,k*1=TU= k k< |oa{>rI1OFp7n@R̵:ϴX1) Pj:}O_;+hT>A|垠(k&!s=zڙ{]˓<1;SSvE)3-u/~&z7W =ϙzJ&''qgDQz_܅w˧1>"I1q&奖{ǒXOœ4ADXԵƂ%5mAM[MsHx@DIHPp(JB( 0J@IDžNI'ҍ6Qk)oǡ'&).]x/| AuhyU z}/d()o`JT k|""!#QcG^"NF0))CHweO=Cj\ƥGDq1_cg%1R;mD+L+ !Cy66pePb(1TmR?306~ޟ+eTg*%7f*QR_(U"./KAD=igx=6<<\ .\˗/c~~hvΑuL/2')Rۇ.h= !;w@L,[;wŘ 9S>QP4X)J5@=HuR-x"J!jS RP%ML !RzDcM;<<Ǐ.\ .0{G)NgI 3Rۇk}@wV^,=O@2|kgW%Ύ8Lr"X&"`@a  f8_Zwޥ4օS9=3P vʱggs $?y\|.\(OR{(uKuH5Hy` foP^¸&zr/iL@tJA^�c@=HuR-8˥(l4%_JaJ˫~BB&/'L<lM_… 엢1u]c ռC]PR:_[vc/uy=Q3jRD݃T93!7\B%ypʛZEv& k!HyK˗/E=ÿMmHy^-7K74/%2r_i=/a6u ڃQ` bwNg3S:jL=©TqJVO>3aev~|_'Q~)-^0tmH9RR z_]CN@F'jy0jRD#| ]@>I Cҹ8e>) )aHa%Lp/4AEԩ |Їαg~tm?~'O._^z 333;w'OK1ETwX| ƛ $\ Fcl+C=Q|($O=`-4GDD 6oʀ 駪~3U>nB!}+ VjUOT#5>KQ/~)NH5 JAKyk| w_D+Rm )@M2?w&``F.߾_QiGOT/EH5@~`_[L1j)".Rm%zb](R~))~)RʕK;uvD5j~)/"V/@yR_ nMK9Rk:(qePb(b RD]֪tVA(j]/%t:~)/տgop_Q BЇ=Q:u'xRSPQ4K]MKQE)hJSR:nQGBm%wO<>X599z 'O9sN|F޽ugΥo6.H,"dj&;vW[U3-&[<[Ijb&x3Nf?L%@[qٚdjU); `"@ĥ>O[w<.t6sLўquB {ԛxBs|Bv8%,ʏΡRJ@y{R/E~)o5z <R`,~Q뗪(Pd-!}>{DzRԮ~)WRWRz6ǩST$R) <e9R aIm·M`ԱM5V/KQr/E{!堧k| ST ΦСOm[P"j )URTgN*B*z Ԋc}[^ጏ##FGGKSTDŗ_SO{gS|8 !BރI(nԖSS4?SSuh'jliؖa[-&>Rr~'a~QN卜?~)۾~)=kuT}8`ED!UcbP꓂,{ 'eeŗ6K-5<9QcoE[DW$)MF]|R6/ð_K)*z4?B "`QT'`Ys3MgJ4)e~)!-:~)8~;}U~wاh4~X,jR/ /U~)D5&NHՁK@>0-%;)%-(H޻G-j~ 0~iD"$ \|333I*V6rFzkwa=/'&*I9!BQV(v@IQn0 A8%,)*RT}ӃД R )"+NH ˴`QoLMԔ6R=z֨YQdOT_Uy^4BqoڍbR>EeOQ` U'?8lpnQSrgK7RB #^-js_s(ի(&&&*LQ;9k|gR¶/zm0/]GDDTyTTfl/vLmRe=SeSR{Rub(E͏=Qg%_W㣽, ~IKQ[`/ ۺ_:0`Ne,p+Bʀʙr'̲I)^-m __0jBHL &''y5>j _LўEXOf)"""j쐪я};+喞br~#'ul|2-R0*kRǀ Ck~CFU!u0"℔?iB^yTclzb8!~WXƞF+/E]c텔0a68!)n(Bٴ *秝ˮ /D _ُDp8~HD󘙙0ԓX{'u'*I9!BQV~5>8=z( GLNH5NH^)r#:{=r A4UӠi:TyiTx_נw~nM/`0ګAb@ LQ[poZq}GX=>BUBaMC뀪( iPwr*2TuRJR<k’/P՞KjOȞ/}qkE^E+xk_PVAd1RT{&& 'N2"OATFFq>==aDQSFΟl R`i*ߟ9:!m;a\nvSPuzfgr=!?lGϨ?‚|_W< {XuuɹSdUyMQ^-jnO p._\,>oFͼL.㗿R+pcNeۀe9UZ0[\ 7t@'bZGk|\k,\#b 7*()69(@f德oZ{h;R/_f47r~>޾5k GaiiX06(rnL77*]䠪(+jLI9)/PM/@0"b 屾@J Ixp2pH--zE _ᅥ(wiph0??yqaaoGT%);z|yI;p1z=d2+P.GwU LsfYR+@iiːVT|` Rr}P  )"++x6Mؖ 44`4MinܷLX]zvy/ڋh4 c~~ӘB<hD55rċ/QZ{f0zRBQt(Uun !4ܒI Y ( !T(J~O;iߜ~35{96'79y' J6TMtH]@5MC{K^j U88bX)-MQ_~ /kRu'rT(:t | t_ ,Da†m[m wV *vPH)5,8 U M]s`%1j _%Oҽ!4͹^ !thB@67'PV\i@ }UNDQD"R05==0ů.7LUUd2+e+v>z`7zzٍ``BQ !ld2d2uN} IDATI"N4 6 , Th!3G!BlMU]'""rs// ߀{T J)*TBjېU!&lB} 衶 DQE"LLL Bx "4B5hZ?4ӴݻpאN0 Y ,K@ B(t d!d2:k|bê>U}N""` `~oq?"UHU@Ub8% EHHYSK+|TM@4gzS4E4Tioxx^~}7qFI@O9rP|>BX{r L3 Ei 4 u>'G6ܹx|w. 4ax>6Wݏ`025}R4*k|⇪v;yDDDbrр^9*RԜ@J(T! ֧ RлaS^j K&''GmR,#^*nGqI|AضU,//amL3& )uB }ׯ N-{K0Mx>4`@ tt}?QKi{Zz5R ~/@*bB*R*u[)>PC!(KQsp2Rj]]8˒X[w`}=\.U@ ܾ+|=._)?Çdr>) ) *tݏ#GY?x|.Kq=h{GGolҶ!- x- e:7fL6hok EQaxx/555jŗ_x嗼>JCr#m++ky3;wa}= !$tug*ԩQ[Ѵ9E|Oa}X_X^$EܻP(SbdV~[slLs⇦ @FQT;=:W=?H ݯb3!'J:Tmdž/^w1v]c_~ #O=5Mfi9]D" X]M!7LF9?kpm>>?2 8)s.28yΜAocvD~)guMDDjn(a*6&31eML wbʲ`l)!] __0SLNN"{{09_1ԓ^! .tu#caa !.(w䙝pT1ܿfgcx^\xG!8)qNss޽Utw©SGqL}'6uT86N[T6m:#vV,Rm G bbbN7`ZLU}|H$Rd%Q ~```Gg_}' xҏdH&Wq ܹc8u(N9Z &;oF(%lRR2aLfR-MF>{?/ż>Q͵{=L< F|@g'pXuԇk߿s8qbB,,,ʕ{w }}'qatwgjt""@ ;!B)3-eCn( T(T/ ʗ=>Qmk|ccc6LQ;xr/_E Uc}=5d2&l{c2*յrׯ1^m{p\$x$:;S5;Qb դ~{b7Ο `ʶa'mN8e[ڦǦ*SDQۊD"~vͮ"섔*, !+tP6H97-7öu$n(ĭ[wp5d2pJh3RMt4'NF1ۦ~└i ɨ^eO~)wfOUu]M9 !$|>' `PAgg 1y\,iw1?kn0|x0ΜaQ5\HW}-Bi)a[HlR?}m~)jWnT+麎`\t!iΪHB-b<ܧPPNp"CCA]DT% Zh_V &m!z}\'w=A/E]k`JUU(\L&PU'r)_ 8q"$B.d2 i`mUܸ1xu?#Q^TRqZeRSlDq=hg엢vժRղ,Io]/RkMܼGqihZ4NK永x|ɤ@ +UH@U0jAQ|w_N0%`[U>4+>*@D@4}`ojjc\K6Y )%4MB ::tg 7c' J p P(ёDNJٛ^T K5)`JȲs'e30-^yQ*.-s=`k|.^|X;tSضSf(R>PHlBʕJ ".Ξi'Olu!|m,,(8} ^E&cB%| >I>2QSR0"jj3Rk|LxmkWQDu~)jW/RKK5B*uO=u(@"Q$,KG_{pʙjTr~URu6|^<"K`VjDkk{?Nr@6 f%|u^peu0js};~TT==QcG!"8BTZZ pqH#r9tB"Q@:mPa3)@Jk|)J4JByECDDQLLL`xxJk| չUeu GٍBLF 2n t}%j Z)*9kR:҉F# QD]+U>đ#*;{dB:m#"ԜRD=:92)D5R)"-D.gO˙Q,9JYft=%j RpBU0m}w_'9-G ZVR\#JC8vTՏ| $2٬@^)H)_]DT NGηԮ*(FXc0ED;Adwp tuu0@ʹD6+oy}TRy} "R+QQ:+8-w" ʗ>Hhn8r0WZsB)lF>/pG%jxRJ)V@֖1|Gi.p"͸Th;R01<N] _^eEDFFb 8("#*P.=O6ۉC8tht]r9tD>o'dG'jIB^[E܈0sTSu<"ڒ@b0ǽ> N0fl=bXeU)I#9D.tIgױ_#j5^: HQ !EUs*W{wavRQS.Bϔ(\D.6q4Ls#J d*QS(ǧ!jW\Zo{?lخ)7<:U/555U~)ƣ]cдnҊ,k CH {=|F*CoU3'~Hu=> U jn+_h~azP\#zؼ~)Rg)Xb'T(!d!Q(@2ç>eP@ ݽԺ'!Za EuOOb1|\bxOD~iK5=Q՚Q.) {xa0PHHzk~F0=0"OE[FN8DD.`bbX 333dzi.²0С>Bd2N ;=R٬T*Wp ${ѓZgE&HQCd"KV=Q^ێe-{!aaFT `~6"/p"=1"""VR\#zDĶ! EYi0M<@(z}""vK:$b#j>PRe0YO(P<̠ &))t:`0j͝" )""Kq=Q;0Ӄ`Џd(MH t:z}ZT1"""j nU~)i tvBGG,Hr3鱱ʵ=""jM\#""j0KCBӺa) Wb=o;L,PJe`$""RDDD RD;Sծډm[4>¶Q LS"-P` EDD+{DDD RDj=0f=>ٶ E|>LHeIrAc )""&]G#+LSD=il>ZF!˙HDDD5=""&R/\㣪[nPGׇ =S 'am~B B IDDT3 P$RxۃQS]7\:j^V=Q 4Wa^qτ4MRmKJ +x}L""Qs*/E{qͷ*>#]]=:{|~$?CaPU ػ")%E)> l[² *|ܔŹlIDRDDD-`||xRg| 3W?5(S\{ ϰ]]h@0xRRq#r>:Ps$X8Gg}5hHDpH_*czz/5::h4zfx{i #]]8U3Pi5p,ή~vp4uY@0BN0ePU@QP8!~ٚdBJ@|J4H5 7Iѓ WFXDD QqbfffJ1Qͫz3Nc.35Yۼ #bv x:':7˚9P>? E4m>P|ڄT TU/NI)R)9]R:\קq(ňgg!"j6 Z#yR8Q[R[D0u>yS߿ބp)wrJX PG [~(0aRJHgۀtw!-cv@U]*t=T Lز<y]R0ż=LV n.Gtv)eAï I"\5;} C)&?R:R`*4?CQ ˸q=( `C&C6m jeՑ#g`>z2>:L=~<("QD"`TŪÜm|6d2U|li[~o=9nc~0PWsf܎J&W!UU(נ( e2ͫ2nߞE:ߙ:ӔH2( H)KV>s5GV@;},()"""/555yKKoU׉uD|xZ\wpwp*!>G.g@[q!'7R<|%{u:M;S*#/_X[[Jiy9>D"T*˲A{[8G;t jUG<_j||>]zLGb,y JR|kx]HbLjݐRYJE"QׯWsB){-uPE d{>{?VH#42⺞㹟z} "@KqLOOc~~\kB+0Yh8h_GԝRUn0FpKUsO>_4 TR>HΦHHN`^ 0J>*Dj~NgF"zG.W :8rz^`EDT_ h[KqIrU/1>[z["ss4i<_q5k| |8r$ !Ba#raY )p\*NG{Zu>_}}p0LS`ee)XY P8~QDDHю6Kk|jlZ۪'|=o5>_j`*I?Ç?mKG+С#H&{ ( (4!{n0>PybuuwE>JhJR{t"X IDAT"V@vRͣVzڏ5uw~B+U?1D"ør:nߎ#Xm†e >@Q4h#qXYYm$Iaw9sq0"""=q5>K5jmznջ_JsXWD&z{%.^$q- \E.m[$7R*EG0؉^Ç+XXD"2Je~?p|aRDDD/O5W_s4 ck|R#KA )! ܻ7#Gs}p*VVVNP(ayχP CPU| XZZB",V0YQDD~Hс=R/jU'j?j/% Ň@`zXX0:ar9|R{ضL&e,//ceeT m#rVAĉ3-RDDDt`~)_9{`z]`j/k|{헒Bp͎`yyKKB{<`>_\ \ltR ÄKBN7ÇϠDDԾHQlro #vځVj_s4KY֧iWimG"WHC2y@%aLӂa0M RJ@W3 r"` EDDD5KMMMa~~333\㫱}VySK]_1|iB,C)~01a,#[i:_W@U[o/fN'DDmVk|엪y_{_G>"4L~ ~k|cccP bk!YՋC-QSw1l0LHofrfĮ4:֑Nx}" )"""H$ K^V'j~gwJ?{"""` EDDDu~^3^/EDDD@<]GkYk \yԳ;~^!EDDD٪_jrrRtͷ=QlSDךaKQu0""""ϹRLNN"{{vͷu\zt[͕ڏto/-a0v^_NdDDDĕ="""jn5>KU]-i=o//Bj5wRjUohK~)""5$7r/ؼ pсگKq8!EDDD -""afftk5UHPPok񜉩%N\:5nctB""@(DUO+{DDD451(SwͷhƇzKaԝuULeoO :51"""D011Qꗚi~X,O*z.\aUes4+{DDDԴ~)cffxe87'./>0"""7>>x<2R`O t!~)""]V闊b.Q,{9OFFԪaixRDDD="""jI/y=]5M\ǧ5>K )"""jiK{z(7,{t_zx:zKWRk|{FGG1>>^ o|ݓsް_h8!EDDDm]b)羮ktth{\̕5? U\:tK 6pN'$""j< qj/z^KoUקkT =\#"@ڒW~)TiKo&KtuTWC]cTcHv'pCRDDD`]sZۋݬU|ktTpLq )""""lKM헊㘞.=WZ\:5,eZ_zֽ>Q[a EDDDTf5WZרR_-󹚿Q9RDDDDKMOOWV (\Kp|IDDT D011Qrowz;m'P4@U!P5@U8)N(} p~NJl˹/DߒR 0""""~)wj?ybWqUo3#BNh@ x_T"wJ s*p^/><д󈈨Q0""""ڥh4Z?*IYjg[@0z @HH)S5E)QGusJ:W>휥wVMᄁ_k| 0""""wmo}U<]1NNt" ؕnŵ-&ddDW)juseN` f5KK{:\#"F@!6Qm7T[ٖ@΍%,*P, G7rRyydYécM -]ꐚZN>gP@>LN55RƗF~bEDDxz^j^,+}_133x<5ZճL'T l.Nv1hr'U}YB¨5~g"}Jjs=e3Tk|{"󈈨)0""""* j;H?;==aW|o[YeK>FP~7'vl2t*h[Uh[>M|༞DiڃUЩx_+))`Jw&|> 2/󉚜Hm^(7rg~~iU=*6VeRlFeZϺ?o[AU ,Di: xCT@l.Q@4a,|yN7\ u8T0iP|缎TUH@PB!`}H]`)"""jKSSS ƪDD"YI(P ٦3U^~?c喥JGF ?4! i N!N"N#o`Xl˄4@>) A (j}@GP_Lq)"""j+ڏKox¥+Cu ңeKjUZwPS (NDYP~2ʨv B@@;Y,׀CC{>n s UÄ߰ G HX,֖aumUds9ئ Y;T:@4U™z pc _ΥӘKLQa EDDDmasOVWKoUQdKK0~ _3 N~U6AeOYʦ5N':99AU-FXU%1Սデ99B`inޘZbBv bhX!*%@Cx",lmO0"""V램]7kSKID:ᎊ5 rg-tl\16Xdy/T8U;Sye{aޞ81?O>~gĭkaU.#_(@INϕmaCj0烢RBZ&pQ'x[,~)""j& em^ϫUOv.mFyLK5Qp$Mu|\LHin^+;U(*Y{;< rTT Rwx0Οǟn]Zb y\+]AНP>U->{`5RDDDrllroSTTePlJy]7¨rܘ Sçy?`Z> x'qs/'py$D2Q1)eKU)BPttvç~g9-EDD Vs/Zw&|+ E2¦~(pi(8ǜn&UWn#g~ ~buuV:oi)۶!m 4Y "ku;?1"""eOVvZۉgRNݽTضFsN; e9S)??y x$RYf->޹_i\/~wXB>W `J@BQ -EaCn |7gv~gDDDa EDDDM*sڮWrj/ez+z{=ӄ4PTSP, W+̳} #@&ClUT>M 9möL';rP^Zby5x"2H֝Y;̱uބ .V0QAFEqנb⣟;.K+o6wB4 ,͑s\\! 0J2t8/OU6mDDdH杨N3u_Y0] 8yK^/;[Q^_3/fu_կNVу5f#9lB%r8^)Y6aY6u7{k| y놔@JDDDzիW2:ɪazNK x r`YA@췒7AR3LݽWP Q'WޠjNܨ'n x5Gq|F$սXxSHHPw㽬f=Q[|p'218;aT{+0(y+ Ql`c^{K7V#y]+:.~aks({>VZU0%DzUfj)L-..f{1ݗZ|isy+ skYlpa!~mu!qQr,F/\ٗi7ԫrjy/G1A[1rϳ>~_ڗ.('(LN([ۜLsir,]>o?UV>Q&д^% /@cSOP \?Ȼ9iDaRInJ !Kɳ*O3!Dd(7j;Q#}psK9_b濞a1XQaLMg|3`[-)7Ghpri߄iG?䨶f> !R"""rbVVV~Ga'j[ލR)d}=Ty]LlmWLs4_<'_l&7g7I6iq q.% x9ՠE:0VW>SunKȑ)k7O8IeYf>ˏ,0͹z0Ï gq67hz9v@n DTì-06sѾd[["2HH*Dr=֯>އ888EQDheضFOfϕiV>˛uS) }sKAjЬmS%W(RpZ~Hd-;d}})*O38cȐP %"""ϭ7NAT[ #T:.i>![`.6nnXfǭ4oqγwRBZD&6AW,Sr=kG<K lgHR"""rlϕw/#VLLR"""Wzb:!nI& IDATδo!epS3[m_ w_\Ѿ3sy0Mo56iR<6-"[ǑVy!"CA1'/dlOd} DDDdǤD|6Q}U ?Uaj~JQ;ݻ/xvZRG品'}VvIE=ǴTܐuRR[+{*O38cHHDD3RUC&ޢ+g:Ͽ ٣'=m~|ݨ>^kO 0= ׳>q&Rkvv *-#7j<@JDHLIމoTzeK-U/Nn?ΰyY'-Bl6 `R]مԞ9J' ~gm7uCN:Ci{r5 R"""jw0;h_jCH*{Tn4[dG*aa'7iXNj y kgʞgTSTS Y_`~!"S %""2aDMj=׸TY}kOi_ qoiIc 94hG@T֧ ʙԞz燆Ym7GH) *1Ua}ШwnIOǸmY`Lyb nʳVa~unirZZxO:&4l." DDD\I^674ߤKE$(8("B ƶ,,Ād|9^!Qouwq_Ӱ(c<QOe}[ݗ~!8pl˴vT69g .˛ 7{s35>H8&#($&¶ݐ2Ιauͯ=[KRG:D$% DDDҒvHUľT~~m'"00 9RPoj{qkx[RLھk4ѣ@JDDdi'٨7&r_4u($cLL޲3W8ѪVyNO:©4Rl.'2NH_}FU2QR;880 01 >c*sR{Qz.~[o>ץU;̸Kԯ6DƐ)'jaal5"T]}ŗ8w~_*ܐ40Q[F͟/5)5^[iVF)R"""#D;QǧxW[i,P7-(JnJ{G'DU=8[W wno܂4SO4[[ЀȘS %""2zw^ ]^GK-\S_nH,2M "䎔1;RiVQj:a)nn$j|[̞@JAP %""2u0L,ƴl0 by^Ug{ڹCz}_Yv[in]|vR"""CH;QYuvXۿ/x6ܾT%ߚ&ibeE1Aw߲7ףҮ}FjWo<`V7i'Jd(2oDDHdL;Qd/us`ZʞmXE# QcsBqzSRV;LԩYGD@ DDD2g'J'K4'j|CL401- v, Hz棬O;iQn>)o#0Wwޗ@JDD$ډ,UWo7_HeYؖ A;R [Y6uʙԆV5 UÌ/R"""'heeׯ|_PUOS5+pSQgC*!e}(°l1Jw~(UFR"2lHD+^G!`y1\Rq {+{M 6qa&G_{!7FwK0Q %""2`ډ:9˷n'G6\R1`69bn$u8:s 0T:ÆDd(DAG34Rq 6m/ 5DqcY83 ذTY[QTSݜj|" R""")S=/8h_j㓹-UInH9.bu546fg伽rBVyy)@JDD$%=ԄPUOݗZ|i*-uj|a9r^vl6i>ia6Q ' n0R""")P=/[IV>KjRn#6 j~`z9,v?s=KUtUSTS DdH< ի Nz2(Rg9wvTRQُr0Pq$GyKǠمԞ5ޠh_JDM1h'j8''apGۗmia/_(8.MM us+ciVy#GMlU0Rf}3 DDDҒvĵe} ۗ #y`;XFc|4zo(G~WweD$U DDDH;Qڍt;J2o_5z56mN.Gl@Q^˴h|R7-#ZظF?죇sS %""+++\~}ډ|O$C5gLvp<Pkԉ O7F25U˟ ~*/:|z'R"""NRUOE}ss_RCPqA@$G6Jr&gYkVi{/U73> R"""}߉R=ox'hyJS{꾔߆f% %laQع<Ǘ7Y sUODD){=z2vZM7k,B~wn"_|i(OWpmy֧}f\ӐP %""cMѦcq7-ؚVU[⃙#5sv!g'"2HXZYY;߿z`ڐc9\/z~?+6kܮ?Y ꉈȑ)񡪞P,A.Q,Na6 nh?ߟqq7[}i:+ ?Ue\jRUODd)1q{YA$}ۛ`;vnG<0_i_ߜ;,YiCLY՛[UUODd(|6S %㨺2P,a&ja<*3l;?s~hs͕N0QgyWGU=oHQꉈ 1R""25t;J&nvynr;nS*N1[9ÃnQ{)+̀I0xv+W* ҬEcS %""#G;Qڍ4d.݂6a9|0hv+Pss|#V>{ĕN(us2 kU`轥PDd(zRUO&.rN78.qSorԹ1/|f/Me/5U˟0R""2D?Ud,[nCyyy QH3"3x/?ۭe/UIYꉈLR""2Tϛ ڄn.َyضM4B0(JO_w_wR`ߖ*VΤv;JU=ɤ@JDDɡV%ps؎K.8;_R9mZ|{Oӭuų9^!QꉈL&R""2tTϛ,Zrg<eaьb"ӢT(135˗w>>fƷYH3t3G'"2bHXYY뀂I|붪z2|HZM:x9#"h1.S)S= Ү]Nv=LDDN)Ғ u"JSzX0M( iW`zz_(iK]Kkȼ1[eCQ %""NdSUO֗!_8Xc;a9ry|7V-ݍ~w_jz%"2Hȉ݉z Vb'U=u\"(C>_T,y.zN?Ӿ0W4d."2HȉNt'ckK'iضia@;Ȳps9)B|1W>{g_X9VUODDH-..f{ Ɍz2|3bn8`[1ia9.| vx-F7{R/MSWHꉈ.R""20ډTՓpql۶Ð0 M, (xj~t?Sz5ܹ>?JQꉈR""AZ؆wn[Y@}w4ssq)f~7owFUDDƃ)Iv0%cՄz5ٍ ,, }($4- urMmKf=ɇ:̳j3?+ͪ^cȘP %""eeeׯډxOC2^ZM~ riXA 0mv ͞޷1\UoO54zk?Ma"")R""r,Q'cـM(O%oԳm,2Lb' B+ﹶìO~$ުf1\\|5nPyj/ͪO{dN<%Qr$W.~?;#|uxips`٘iA@`c;QDua8+gS ڗRUODD@JDDlNyr;7V>4x72$BBMĦaZؖCx¨y(;5~Rꉈ(N<+?Cy ͬ$rt&Զ:5=fD6ai&1*GxCoG׭/ufzgSUODd<)i'Jg%ԭ_'j|2-mC fTۄQHl`CnGQڗ pQ'"2HH_<Q?'_@ v mz8Dm( M L00q֧?Vݗw U/a?RUODd|)=%'ʅ?q F `;`GĽaa``bZ&`YYGU1/.\¼Fv.> DDxwUQ2PW.'~'+LpXݎ DD&zbջ+e8vRӾTa{3 IILn'X&a@aDNnFu(Ӏ8ƌ"#B QU/n} 4d."2HL D0ڳ+Ԥ^^\Cd撑m#l$TAB'Y|t?rr0000vjzaͨ'.VϜ]HYU!RꉈLNy.ډawyM>m{ɾvuroKQLr['! ,0$N@'$AUdQb'P2L8ً" $" ?gbIh8BZUX;`_FcUUODd(KKKډ͟6yM~N/']1ʓ] K8zI [=ss0:}자{{*TQPE!i7jz_h֓PzɟGa2^NGm k#2w.g'ޠhF&B$Q %"2%mn{~T6ǃRjF'HEPmd( J*{ӹ-e%7~`$3,ffΧ)Vnؼyf_@ɟK<:nj(L¨'IE?x7m+94zsGw_*?,F{69 -R""cjeeׯډ[?/ x鏪{k| ۗc0^{瓏PL¨0Om' LN0eɷ'rry*/<'V# έNdnn'ff!QOs}ZIa~~ND1-hIuqR L9a(dwꌝq[Q owwjza3ptv_s^˟FN05766 DDƈ)1'J<%G_7R-;uGDAM0O)Wޒ-ˢv~sQA$}?N ryxLrjD sUo'FFcƗϪ'"2FHz(E7Đ}٤5s7`s€( -|ag`T^ZئIXnuk Ԭ'7-:myΞ)ѧ@JDdi'JVݗ;_#6ԪDqLR3|AgWʦxvo4 # BrՄzm4v$nROtݝQa|AtoFvv>:TkKAr&QLKyS %"2bzy d487TZ^#$qgoS|+;VcSi3lL+ 8рF=-4L:PXrهNOQ7vݹX RxToG]ڣfT>})Q@JDdDh'J;> zn055FM9@7U> 98K'8*kjvvZ-,~rT*&ԭAT; {QfkȺ= _TF_` .LvQzO})ѧ@JDd]zUA W˷L}{佱 V4/Bm[TS<{:xd;A.Gɭ)"$$IPGTݜOF~5y;;Oq.lDuݻ·9sVTIպɝ_&AEɶR^!44Yn8ew)L>cO0vM {B)>=z7P{>-Oa$_ù @70Wq;n/k/j_JDd)ډI\rS~?䓟#] [-6=/G!@ꁓ7浕|_z:JB9'ٔ¶[NO0/)E^ zi'xT7xޮXyﭨNTyvQ|(NI_!;\{!g})gq}i9iډJ{j|]/ue&ϕJ:˛yΜj`[Kk7jA7873|̧M0$6Mb'|ݐ}s_oƔٝT;*?EOnB6 D$kë&f.v;nG5f Ww_ 8p_ѣt}NUR}(4's_D> nHdD;Q"}G,- ~}Dʼ7X[[[45aAD'lr-)݋'z}nITvޘ[ͨ(StdI5oUΥڣN4RS""P %"rBD'?,-?Wgs~t)! {͟6yͱؗZ-GeF'M_CyW+T^9ǹ׿֣/k4 ZAAEId;oLƓa cay^TޜJ7FrjzQ]3gi[Mz@ߪw\}nR)y.vz DDN@o=OAȮz^ϭ-~>;8MK&/ KNj7U_8q/ r@4(Z3S3E-Z*45Aa!qwLi2.RQh~T3:Tm|q KP9J=˟ŋUgmKS""'@߉R=O$,AT{ [XLԾԟ "'RH9/˜0`^'0SvEn[ARa@aܢ#( pg<$_$7d*%odzTij FjXzPUQhS*yLMz/Y[;<@JDd%ryGuoa-ޙ8 (/oQEKhFEAiۀaYOd)#b#"6;TlAfxNR+O'?rf_(^o{VͦN3?|(R"")[ZZNHiQ3ܞEiLԾT*ÅuF#$}cl|0_"XT%ܨA8ٓ:yyV<JPHv6 T:|gO(U.TR"")NHǭU7:};tk|}IzCNz܌SSSɾ?CUDD@JD9pu@;Q"Dݗ꾍});RT}q95>Vr&gMzUi7N35Uҥ񉈤D1D\zUAHGgqNj_{u[J Ro[+ \N֭;<R""Ǡ(>#f}=Rk;Ԡj|}S_d` .LvԸT]o.^Lj|ڗ9R""Ϡw'jaal$2$NwTՙm~;7K Kݎگ߾T\P(%"r DD[NȮaى:* t_ŻN/%Gۿ/55*F*ͦDD)}%߰DaRqu`5>KɳPUotλ5|~*sOHGo=O;Q"{Nq[Xe{zkP6$kꍞno~*·)HNFq'8zk|'/wJ5Gl۪ ܎Jꝴf޽ *N(yj|"" Ddi'JqU7 z_LMܹԞR{zhcFm'gi4ܻDD2@JD& ׯ_P=OǤQ[XRiݗwJj|iBjϚ[MwL5v'ryU@JD&vD6)gqо1݀o}sTރ`j]O{<ٳ/LR"21vvT٥ pRk{~_/5نטRssIOR"2IHNH=6?| Mоgzk?MaK=[!w/%"E-Dc`pWv~,oxرM&D}=5>K%U&WoOR"2)HNTK6)ơ 5RUݖM}Y*'"cKDw1NufϾ~wϾT7T͟6ynS0ʪbLjRUo5>~`g_[S0%"F jaal$2$u2zޙ_:߁RjO Ro(U2o_J5>' Dd'r0D{ lOoq;nǐһ//L Ƨ}5sv!gͭWTSڗa@JD2(Tϛlՙm~;7K <^6R'QUoHQ^$PK=[!wgU)z* }=5>džʌj|)֪^cWS0%"YQ %"'fuUQ"ډTw_j1 sUo=LFB,J sU@JDNy"i'J/[;};5>ܩi_TՓal|郝}|^R"rH@)O;Qr_}:OU=vڗ(N%*[;5>1X9ڳTՓA/R"20 D$uKKK|ډ顝(ISwоTo/u~NiƧ}j ufjRUO_jnN5>R"DS=O} 3ۗƾh_j4èK7ӻARmd}4# D乭puX\\@"CBA,Ԅ3 ϭSy0{5v'ry/%"Q %"Ǧ('Yb_[ܻ/խM`05U t;JYoOR"&R"r,ډOA }5b۞0W6t;JC7/%"K<Dz 6?K&`_JU=566jڗ@JDD;Q")QݗGwj|yÎ&m_JU=4b?DdD(Ci'J`ɨݗi_'h /y.kk_]x"2HȁT>;n9U{M^`ZUTՓ J/0ԫlmLȡHDz~Ry#7`w_I̝KYo(G''[ٛ;i^euK־h"2HDoWA*3#Y9ڳVӫIf7iS"R"DuUQ"ډIqؾTo/&o_j:5z߼ڣXIz9:|rŋ2?rP %2TO;Q2R5>ǰ0sRNoט'Cc{SӾ) J?DKmՁFi_jzk?Ma")Y[K*{o*SSK)I(i'Jd{ lOoFR})UD[ݗunKL R"diiI;Q"}h'J`_R?~[})UD}UD D&y"I5OD.}oARʙԞL>NG@JdpuX\\@"[P %r|YK;%}9^!@R.]ԾP %2%P%28YK}{5 .Lvz2./%2YHN(8 DNVξԠj|KŶ=_r&!U~*`ƒ&T7ҾR %2&%'P"٪l߹ٷwRR;5K sUoݎԭK'2^H8DɤK};5aj|'/5U ݎ1׽[[]U(%28!"N;Q2)t J/s+|o쳻Yg(n;8ԾTWTSʙUT$CG6R}ީST7 ܺRSSWd 膔i'JƑnA%틏;Lid^TՓ39$uHI#rsvqN;Iq\t Ţ5z} D2ҋi" h{Y(P^hu/ @]c%iC% {D7P$ŗ6 "@Tbь>f^ܳ"_n̫/nƇ_Ao=& 1 )(y #!ꗶFLݟ[D5ٙ&*= "\U!yLS˂)(Rc(U< o|m@0/O/ՑR7]{ ?۳??Rd'&7 _f?RSFB(\#=<71613~vKͼrg.ac~~>nݺ:rj/R';4?_A/\Ͽ B( ӝ4!uQRw6v5&*1|>֯=+W3RrBxADxL y%>_乘++qέczE'bNw@*5~K%Ztᥘ8ד媞"Hu/OTN y#{kcrqT 1;xWkx'8(FŨHT"~/>_aݞ?&^~)'{GRɘKf㥗^􅘛{1]_"zŴ{e$6W?}#VVv( uH%.K"/~iV@{y \ez;nSS19y.fg__~5^~ti6z8wn*nÇ뱹(67v-ZVhY9׈O~'*1S_mK}2C_noWFA-,,` @ RNگøpBLO_~sKfckI<~(67֗ IDAT֓h6{ATkgg'ſWr֟ #JPD/mEK[*13޷5J3+|0O>'?pd2* Sg)Ha7q q~ q\%>'z߿_޺(Ȕ~) ѵk?__t<||xd3fZ_f#F4Z4׷Vf0LCbRsڌr凟ZՃ/%3_g?{9_155?O>z}{/j4hԣlk{]=O!e U/mE35KOGL澬A>/uUR%tW~G ~gR?$>œ'lF ׷¨Vf3k_ʗƍbص~Ǚ=阚<ߓ_jii@ :;O_1;b< AmooGz=zZAnyyT|K?+ hI0oblnݺ\Եkײ>@ N_BloDVz۵նV5h[R)__///f0Dt~i~;zFYՃbIqmRpF)8wƍ=>ѣQnœ'QnEOvozJ%}%H~ck|g闪LLlU/"A%k|vB=jGxQ4_+_rJG=xpky/xI|f}\٬qRN?ʉ?^R~V5^89_*"KALH1tzX)>q[h`PQ_ꕙ=;CMa R ˗/ǃ޽{^\V/\o0IwioZ~^}쾀/ y)|՘?t@sk|^g~Uk|)r%[zv_/((R{I&W_4C:7R'/+e}ouuaTrWwW|U#͹F|+?lOzr(=Iԕ+WX)+{J/^|8U(z@~)H1DQ ؚsx1g>}|? I$ZZZ˗/ǵkײ> @ D _j{1u?O: > {۷1R ?I OQíh|S+|7ctpl~0R=$1[;2tpTg a$AJq+|V4K1 JY݋լgr?_) _ڊ?ƟnUBܺu+._<۷oǽ{> )2xRDDܺuogVV{> 9g7(ؿƷ(<Rd* \n݊+WDij`4I~R\~3nܸ)X͹U=5Wƃbii)mPX)2Qn:r관7^?}7\ 0? p"G&VWW&|ڞ@AQX@,,,B,..r,//w\}y "ItUªq^  KQT)2\t=tw(!J./_Lk:dt@ʺY@Q闢HLH1p{; @^H&5zM@;YVGK6ݻgܱG.#=y $ڿƷ`]AYXX5۷oǕ+WN~H i:y{zLy!"sg]E++ƍY2_ZQPwս53m@'Rdn~79QFW@jX[(66ֳ> g0??n/E`i~t1LEz@0P0Rdn~~>^8-..)߻w/VWWqeW9ecc=jj(RNև8>wXXX80!uvڀOHܷd>?>ӬSXJE0En|qo^ziW[[ըVkXh7X<7#-R˫{Qwcqݬ@~٘'EK%Roߎ+W ""Nw}]Vzll+ dr,//իW JN=^^^{ʕ+8ycE`}d`K---ծ8쑙X^^xQܽ0 `D$k|kkf} \/E ) c"2!? "XZZ/5bJY]ׯFIFoCk~~>nݺW\ҁ @ 苍X]` `֭[qX^^۷ojǢtH/ A/PL׮]ոw^,--Yb&F0HڇQU>k׮իW>=+z0Qj^L33133zEtFy/""\ 0!0 )zNy9EQbu faa!K@ )aE175>IV`juu_AFPtkkER/P ~b!DQ¨rYK~b ZQ¨V(RŤ_R@WF@IT Ԯ_w?c@(RKKK{R׮]h#O0 QKmlg}`~~>nݺ/umRHgv(Fz@0P0 q֭|r,//۷cuu5c$+{܏w>zjUk|ݻwooO`:}Z5С_իXZZŬ52R@GQp2RŤ_*)T(~)b:/_RQƺ5>J"boO0{)X(~)#JGF@jX]AlC ݋X^^+WBG+<azll+QLe}:{m#F@}J%fffS񭮮ƽ{bii)._,JIpYF~)b/&=ׯߌ޻1`(^jZC) "Q5RŴ__q(ȉdVf}:]z5""bqq1C@ F}Q3IzG Kݾ}[1R0\Qmcc=VW (uV\|9۱rE #Jűn5˗/[;D #ʚK'*Sm@pR0\QKT1jK)v `ĬFHe x)!z`@`ܽn,.;;ccYțժK*JͽqB CpW0 8C0_ڀa&S|3 #7Q@66ccc]0c~f\VϽQ\e wʕ X]-ǒ`jcc=dv*uEi(*r嫱^?C0o뱺wP+Ⱳ' 4RŠ_jWXNև' ^{sk>?80ss uǽ4zxKJ%^MlmUZ c}7w5sYك5jb_@ rfe~\~SO;ȯ_jä_jex!tHAN"/okkER~fqqf gtHAܽ(! C0tHdRޮFc藂JzQ@ʿK5xx0*B䉕=Ȁ<`$RY_鍓mlzaښFh=䱸5>Ȏ=o hRþw^Kzeokqσ藂lXكIQ(XƗsT[@¨57nZ3!}ÄM6Ru;Tوju3ʵko׿VǀC DOdhk|fcc=j~D_ Ä(fB `ʄAiLH '*-R?:DNT_j=Qi闂HA܏+WDx}Q8zgTوQj|?x^!]НZ?t/nܸizDt&F)蟹W2U*{ۏޮn"oFη>=8'J{~JN[Kz1헺r %the~\~Sg!:'*-R=8(5~)+{ݩT*Q.GVn藂 z8@ ~)_ Nge' KQtYz@%RXKk{[`Ʈ久5>x=x(:beWT/VFT]Ide gcc=5r(N{ƍ)RLHA>U*MU|vBjkH_U]{+>dF#GOpdv5Z_?M΄#EO`B an:j6QLESoFη> )F(ѳQD ޻W|U#E P[Yƾ;(J>L}UA?HgYc(Aq/uʞ(ob :wk" HAH"OK114(a9_JOy_aeB³RTyoCa<@Z(zVDQ7n/P0!E! K&ȃkފ萢PVVwKQXV(yGK+YH{ׯD+V+R=rSa@g{~ܸqgBYY y53B%RsJ' x#+R䂞(bB By7w1 "tH1=Q{ʕ"Rdbe~\~3}#dG' nܸo~)2C{]Q R R =.F~)}c=Xp7+{ Q`ea_~HSz)Fŵko׿V`萢'VVBꗢtHyAdeԮ_)`dY`闢[V8ww5QǍ7@`_jegCS$7nܴǙDwk" C o;|+csV8R%,{oE'Hq~ $:=Q~)C =Q)8;R$0=Q ~)VF<<'7썘o @oMVFD' O{~ܸq߈H zȽwKRCJOE_j4BztH@;􁕽!' a{ )0KVV ` R' Qrx7K Ru& C: [^$=Q(F~bH~ /ULVrNOk}."~H嘞(8kފ R9r?nܸ1S%y[I ׯD@E 1=Q08A =QTR'j55, HO8wn*cϛo󭬏1RR'@ nGT5H<H@8eR} 8)G/_IR?)N_?R="(]irD E'K@K8jD))ȉv{'"vRt_RD@ E E RGZ)ݰƗ@ VVǍ7>&|H Huz]ZlG"jX5H(zF "SHCO |H/N&:DORb||"Hoo-RGH='AHJT* KN;k|H(G !b|xoe}\@JOR;;;qҋYFZ)OԈRȊ@ C EF_j)AYH?Q9ddgg'Y~ sH@Fv"RŨK } %"OR)jT6G"Bdd?*B EPRׯDK)E0PRȻÁbsg)`"ZY7npÁԹsT3>E5LT)=Q@jgg'ff^T0ZG(aY+l '":*pk{0@)o󭬏Z)=QQT2emdgg7H1,W@JO@j||<.\`4cU5Rz Z IDAT&GRG D 0+RT)y )k{ɺ{ :Ee %bXHYH1j/@z@*[!b_* QqR u 111`^YO [T恔ϯE7z/*%؉Ot0<RK)DAwHU*Ӧ)4RR7HE))8# YN Q[i)SRйR0xSRRS)ȇ VVǍ7~0Ei . u!@ w\0HYσKHOŋ38"@ 5o `R$G _Scoݝ#@ʔO P.ߎ٨T*Z-sh6hMI!_;ȋry<&'+1>>TMEVLAj[) ej^80L33=Йfꓬ;51#LNV¨CTbff6JΦV#(țry<.^s禎}[^WS3@wM<SSbzo{e5Wzr8{ tGDwkYLKA=/(Q'D@*_ ;'i6h{vP!{zI=Q'I=17jjXZn.j[1111J3j*crEW闂l`ԘLNVu ;> 0 -Jw%+`0 `uu]5)RpryYzt_<H%fffRX>նbbbI6 0 kyGQ5Waaj[Y0 4JT*S1?R~\`f!`( b:Jhr/f]I /DR0tj_iPzJ%x\8ANdH%5>))MPR.E.Rrh6zO29Yɬ'$ Fj5P@ l1̒<%wTBƓ'RHnB!$yy ܫQUccc=jZǁTb{:]x&~z-/dy!8 CR KQTY}iRhNLNV١" >1A*GygY K1Hyafä뚞(!FNl} R D~G8))NU*v-.bLM]wavH)h\ SE?MNVYa:_jmCR\<6g';On_?9 gnURD_Bdҩ Q.OX)SHy>ţ'*_bܹ󍈈}oͿVGY!QnEgO?{}?c{}o~ K¨gcwd;c R􊞨5_{}/JXX_ӗ ORς?`4= v={j@ʵyJ;71 iw*귞@*"6Án藢[?f ߟMEHry΃O+ R]<SQ)k_x=Ϗ jjll HhU ?lJn?zemRg@Q˓Q* :bz#Ν;86JH%_|9CT{'yTBh=+O 'YӋxn?ώx뽗Qa=/=Q'(JܹۦR/YUOVN:jBcc8w ^¨g#J︞) k|U)Q Ƣl QaT(z^zD́Tiu TSRDžOGvUHEE4FS(00*i'~ڟ{/ 8 ;D$u /5>:q)WHh4nwRLNV-&E uQQu~SSRy Ƣ^o pqZT)Q Z<>F!uwRaeJ*OX)vloowE` 0* 'Eb=/^QR R 8YH^nNd%J{1FqATJZ;J_~_Q͇m$Vs(džP)FOTz } "ukmC%DDl6N}RɯhZЕRQ*#0=QzQH%SY#)Rccc@J嘜N'"D7 *1@*a/Zkke} 2ɔTdh||2&&&IEQNOTzX;`*=R+%f{TSQ.dz I E1J׿wVf?@*_KӮW@*b,Zf<~,s禢T0R¨Qd=/,i L_j44%U@*yѣGNTJ|HeDuΝodD%rH%go4%U@j7zP מQH%˪'$ wiS㸂"Rccch4Í}FMr>J['25Qeu\Rao44|EPɓ'hvR9&'+Q.725祗6J|;c`j5%5 TgR(15ua Qnj *7<2X/j68RjX[_evi8)zye=/=AR/`*vCM!kk*zQ/FQ"y'H@Tz֢ikqZH+0@ʪ^JOTg-*6j `~; O %=QY@ Syf3ë{) 兞Qg':#k|D?fjO"B uk|@=e2T2Xzҳ@*%TzC^z}[ uOÍAM=2==Qݹs.d/=R٫VD okk8^<SS"*r %ʞ@GSVvK u"j<|!HLRǿ0*[^qoe}!!k|/Zm+@G=Ւ`j;W.Qϯ; QٰH?ͷ>F!FՌ@G={L?QR9D5RGO<| ;zG Gҳ7xV+j:)J~a0ۉzOlFH}&wJ j@@jg%#=Q E #ҫժQZnx">Jn׷ckkK0+dJ姯A u@jw2'Jz^rH05ivXzH=NT[QVSX)'T:~5O .jQ'*_bܹ[Y#r_w>@Tgj[蓱R RV؏O:ҳL_?@OT`Zv3ϔJQ*δ':{ jՅQ=$Ν;D@ _E տ@*VE|FTry|7!@@J[U,sMK_wvvv!M ގVv; y R*? n6i_~z˾?{߯H zGbH5iSRnmf4MBEۻ Qݳ!"Lu\. R _v;mvc<{=,:mRv+M\F<>F!Y>!_*=k|+Q.'A@*+{'Y08cO'&R¨XKO5RCJTz? R Hv]| :H 35uA&rҳƗDeT nejNR*bjjJ @j11q.΢ڽ2iN+ޮNW zҳ7R#L0~)J1==-"Io[*Ts*^pvptm#׫n :'*_bܹ[Y F5\\ɘHE>ΝD<'}ncgg'ZV< zׁ0sҳGB ED_lB)T>VN{scjj:l6BÁ@zHZ׫=?0DuΝo#k|cbb"RNLMO_H`85hn "R֋@j :d=/==QE őmR)x\pQ a 5蕽fw'y4UVk/$,:R6ފvէ ATzz8@cYK_gR Ř<0ZVh48~&ՄQ(:!T7$ /\tgv 19yΕHՊVa%:z/M j5Fbj *w_YH1RY; /\H;ŋ jFՎzE#귳RV3}B(J řJO0u8@*E@j۩bgg'Ν;t-툈#B/ Hh4}*czZ7fHK E*ҳw}1RYR¤,ܹݩRw7klY U@Zݴw =Q @JO0uVRI];*uH%/G$T~*#ΦVEBEY U@jF(*=QYϣR~ qHe5!u>$>MtT*S15u>3j6l6BRHY;Q@םMKarr2^|S\RGOO=H~OGN˩j8BY u?gcH IDATmǿ_HY;)zN05⧢R97iARvIRwԳ155RVF$4QaZfT}E';w|CE_k|jX[(cŋ.@jÿԧ>mnkk+"խ8D.@^EYKz&Sz_@j+{;;R:bzB?oz ^F=4сQwHUj5D1H1_yQ<{!G 6:éD,= ??uRH5 +zXKOO&bSz /\Kf"bӂ99:8/Oç A@1JvՊ>" )2a/=R;w.^xa&d zHR_ v.\xԿ?j4Oo=:X{M u@lD^D%sMK_Kf"/Q>ɟ_^÷%S.׷ѨQχHqm tH/2u *==Q@YKAUҥT*RG_@@Z#Yu\U eB8祧'<H7$:ҥ{}ӂlbu_O ^MQϫ׷^ߎ$H 0uATJ_*=k|Ϝ;WTRc;iFǏ"" vK)T7LEd=/=Ay%"K'zҥ}1%^rƶ@߶;=u)"vW깷k{z=MAD,JT3xLOJn;_*=k|T*J?U@Yt N*TP=8>E<.R>ێәzFOTz(B E!XKO0޽,IT=={1+;;cno^H$#ëFh7nr@fP< /Dt'H]OvK-*Aj^HZM{.Aj]:8x?1*]^|dtHI[MV{Q'"LYm)Aͣ? 5]z|(NݾM?gG?/Kzxx6M筨;D Qԑ E˧m4 S^U%H͋HoOG_<{POr?B͋M|ARS!*YF)j_p8HtOU%H IT,㔷_?ӬsAjV1g<h a*~ic|U Rސ8P Vo7oi߱|CjA[Q#BTaʲe?FQcȫWR R-Hټ{`EQ_ITUշ4M\oyqDTtr!/1j~1ݽg Rw4 Rf|e|}l=ofSzOfU i08-"<:} U u}}e3| )oHU=Qɞ<S-1!S˿O^)|S?~4g~{mlԭi_1:UVHknk!jx^>cyq:)a*~]__tss]@OOͻgeWZ]z RHOɲ7BT c/~Fo߾ټ{IZ\*{Ng#mlly6e=^AjuA/:Hmll QA_s HA/g/n0H߾}MWWM Rf|e|}l=$H-{.HTfL[[[ϋ' G_*N,}5}zRJ?FF? R>32>y6e(R U RR"TV~Z2%HAM/g/_/ӷo_̷OOͻg)Aj|g{ZS) RTBRQT+H/HNc9y'QP41pOe?F# 4^ϟK*:^AjAjoo7u:["Ԋϋ3'HA SqKpx믿R ceW*>H-jÔeo~ ` )h c|/_y=^A*N[[[ioO Y5yqDAR2TR5<_ UAjsAbAjo0BT>DA; RR*/tqq..Γ >ԲT+H-vv{2gO -e-dTyn_VLZ\*{>Kނ*gO $c|y㫆OYJI* U RwGi'z&1gOp pr!/1jIt~~#P RR˞ REo_E}!*x L_*__gg)%AjԲTۦ uvΎU%(`A ~8aN_O9eAj{{7PUl^Ǩ%y<$(N5AJZ\*{vvݩJ5'D/'LO)>}T;͸Ajf_{/gNOoߞ>7R R34M;޺;~ OudOTDRҌT|RJ_|~0'Hͼӌ7\*{vvv(:<ԇ=Qq<) L3<-47\*{!'*,{#DR@nA?ǏR V7\*{Fi//ދf0g<( F_]GJ,H-{.H R/>G;::LYD e/˗_牟&H-{.HyL{io7hyqD"H+!L/}e*AjsA]8>gO1gOYRAKq*[UԲT߻}^͌gIV~Z:::L_!~)`m(ռ`%H-{.H-rioތϋ' ( ɇt|Ǩ%aUW`sA*~M$8Jd<( ~8c|mΪUUѪϛ~NN;u'*N&H_*Nqz9~PH*^An٣_>Ag< A D?im,9=ξ;og^~Po:'*NF*_0= XGga/~ZOϞ/ph{U$H$LI쉊;::LYJ*_>GoKP[u H'Ln|Ԃ Ԇ1pOe?Gc|O0gO Rk&L/0IǞ(rR%1g8{%H,y[*~)8{Ac|/8{E}ُQKKM QAG McGoK`OTh{⎎S-1(A Ԕ8y,B`.a*ԋOX Œ *1'ϋ' e R,M_ G' (A c|/3gOy Rrr!/1j~)(=QAϋ' " R* `u:d<U(RqX(VI`e엊 nw_ 2 RRq`yD Q /'L|D`)~8c|0=Qd! (1pOe?T8yITT1>L;::LY)Jg/~1>Zx^=QT @eSqKtBT>DP5c/~)x^=QT @e SqKBT=QT @~)x^=Qԅ @-|H~Z_:v yԉ @3Gϋ#A Zʲw)JAُQK3A ڲ_*e'*N )j~8a2g<h D Q4 @/'L D)~8c|Ş|@c R41pOe?5e!D,{[cZR1|x^=Q @SqK=Q @k㋳_aOm'HzYRAKgORa= Rpɇt|Ǩ%aٺ}!*xL` 5%IDAT8! f K Sl^Ǩ%y0 s/g~쉊`q,~8a쉊3`IK&{⎎S-1v)0ƗOR`{(( `T\”=Qq:)0gOT#H@/0eOT<&A *~wttmُ H@˧X˷z: Qd! jB17Rǘx^=QP?Ԑ0WRBT=QP_Ԕ1|/e~_cR|f!ŭkx^=Q,4L30l^<h&A ~" Ql4RqyT/D엊[vϞ8! C_*n^'*x -cTܴ1>{ɲ7B -e/n8~@ RrT I|msttmُLR˱' O~'H-Ξ(1A `o>Aj>{Y)`&aj6Aj6{y)I&,Jrr!/1*Czx A X1AjD") $޵zAx yT[Ark~6)y@Q)0m/զ %DEµaT<`U)`%_A*QRJ5uAxM SM RGG)ޖ@KR4i)Aʞ( vMSMRDeyAʞ(lP,{WB*nc|u RDU#Hrr!/1K2T TRKU=H Q@ R@UuTU<)_jAJDjJu#HSRURGG)ޖ PKeu'HVV*+He! =A hu;H4 4ʺԺ=Q@ R@coAʞ()VVNoc|RDm!He {[ e<hA hRBVJ''m&H/ RB RZ~ԲAxA `lR)! ` " RfxjSA0eU>@ RO57-HX aqʲ7B)%܎){'H~ Z IENDB`hkl-5.0.0.2449/Documentation/figures/e2k_3.asy0000644000175000017500000000051012710332472021006 0ustar00piccapicca00000000000000import eulerians; currentprojection=orthographic(-1,1,1); currentlight=White; size(12cm); // orthonormal coordinates draw(Label("$\vec{x}$", 1), (-40*X)--(40*X), gray, Arrow3()); draw(Label("$\vec{y}$", 1), (-30*Y)--(30*Y), gray, Arrow3()); draw(Label("$\vec{z}$", 1), (-30*Z)--(30*Z), gray, Arrow3()); eulerians(0, 90, 0); hkl-5.0.0.2449/Documentation/figures/eulerians.asy0000644000175000017500000000260512710332472022101 0ustar00piccapicca00000000000000import diffractometer; void eulerians(real omega, real chi, real phi, real kalpha=50, int solution=1) { real hight = 3*10; real detector_arm_support_radius= 2*10; real detector_arm_length = 3*10; real diffractometer_support_radius = 1.5*10; triple KAPPA = -cos(radians(kalpha))*Y - sin(radians(kalpha))*Z; real komega; real kappa; real kphi; real p = degrees(asin(tan(radians(chi/2.))/tan(radians(kalpha)))); if (solution == 1){ komega = omega - p + 90; kappa = degrees(2 * asin(sin(radians(chi/2.))/sin(radians(kalpha)))); kphi = phi - p - 90; }else{ komega = omega + p - 90; kappa = degrees(-2 * asin(sin(radians(chi/2.))/sin(radians(kalpha)))); kphi = phi + p + 90; } // support draw(_support(hight, diffractometer_support_radius, 0, 0, true), blue); // eulerian part draw(rotate(-omega, Y) * chi_circle(diffractometer_support_radius, 1), cyan+opacity(.8)); //draw(rotate(-omega, Y) * rotate(chi, X) * rotate(-phi, Y) * sample_holder(diffractometer_support_radius, 1), yellow); // kappa part draw(rotate(-komega, Y) * komega_circle(diffractometer_support_radius, 1, kalpha=kalpha), green); draw(rotate(-komega, Y) * rotate(kappa, KAPPA) * kappa_circle(diffractometer_support_radius, 1, kalpha=kalpha), cyan); draw(rotate(-komega, Y) * rotate(kappa, KAPPA) * rotate(-kphi, Y) * sample_holder(diffractometer_support_radius, 1), yellow); } hkl-5.0.0.2449/Documentation/figures/4S+2D_reciprocal3.png0000644000175000017500000103052513237020302023111 0ustar00piccapicca00000000000000PNG  IHDR8T5Q 2iCCPdefault_rgb.iccHgPY<@BPC*%Z(ҫ@PEl+4EE\"kE t,ʺqQAYp?{ossp e{bRɎ(tջ{i常r)teJOYLgWX\2XyKο,]~ )sT8بlOrTzV $G&D~SGfDnr&AltL:5204_gK!FgE_zs zt@WOm|:3z @(U t08|A $`(E`8@-hM<.L@ށA2@F 7 Bh( ʀrPT UAuP t݄84 }aXև0v}p4 ^O6< "@]p$BV)GVC!Bd h(&JerFTVT1 uՁECDh2Z@Ёht]nDѓw aa0Θ Lf3sӆL`X VkaӱJI%vG)p`\.Wk] p xq:o—;IA"X| q B+aH$͉^XvbqD%iRi/82! L ے&US{1O,BlXXؐ+ NP6Pr(3;Yq8WJ)Hq"HJ IKIJGJJIKa8y"Ֆ͒="{MvV.g)Ǘ+;-Hז,L_~NAQI!ER¬"CV1NLMZ)VL $L`V0{"eyeg :JJU*[5JLGU殖֢HVQ?ާ>حѩ1͒fX9֘&YF3U^FuX6m]}G1Չ93 |UҪU$]nnCM/OS~~>&   .y݆i񍪍&v\mu:ƑGLMv|253Θ՘lOv19|y-Եl^Zä́UUКij}ZhlfSoV6¶vʼn伲3صs-[{'BCSGhGfhgWΣ<lqu%V>svu.֪MZ26,b&*4r**4j:*@LMLyl,7*us\m|GD\bh$jR|Robrv`NJA0"`H*hL֧uӗ? ͌]֙ՙdKd'eo޴gTcOQ{rswol m ڳMu[NO [A^i۝;OrR V (m? Yrˆ[EEE[?Xި%%Ga%oDDiNe̲²7Yn\^{p(㐰­Rr_bULp]u[|͞iU-x4:zccǞ77Q'z̚KZ!'lsWnk]8q/v=s}ٚvZ{aԱC) _}ABEKr.]N<{%DƞWzuW8}nX8[[Mowf[@;]wv8d3tyoy02*|`a׏2-<>+|"ߵ~o /ۏ?yx??'󟓟O)M5MMqb݋ɗ)/f 櫳/ M^̛oy=}na>|ZZ.V|R?B, bKGD pHYs,K,K=tEXtSoftwareGPL Ghostscript 9.22_ IDATx}p}< 9EH"rTd:yp岗^*'wqݭSdO4Uʕ^E'"(vb[ލxm*dű%ThflMdxg{{k Kr}}f@{ip#G (<Px8@p#G (<Px8@p#G (<Px8@p#G (<Px8@p#G (<Px8@p#G (<Px8@p#G (<Px8@p#G (<Px8@p#G (<Px8@p#G (<Px8@p#G (<Px8@p#G (<Px8@p#G (<Px8@p#G ]hy@pU絴8*|Jf hh$> 7/Ah#<9%*t׳ݨ+@?Z` v 2 Ӛ%kDPxG NP‚$iff&ӧi, qJO.o8$kaaA333 =hhiiI333G wFC :~jZs%)R`+5fރwYR쬪 hh~~]A@@άpczz]sff$2==M 9}xUuر 7vQ kWߍZǏ{G rqi6uۨj[8@D(<Px8@p#G (<Px8@p#P~O=@almm=@!ﵺ>P pܗuZ__{(B8w$铟L#08 gyV;;M5ҍ` =c;^~ *8 }15;j67Ww`pxfSfSᲾB`}ciggGlJK/ l6%uO 9 !0ЬòuG`pXfsfUu St#0(8 gJ+ijkkKkŋy!0yVF;Ύ׵v8 gyVS,[R<^8 Zcc{{K[[*Jpy !0>k/OqVp4Mmoo'? \l5u֦677| `p8>Irc֖Degg[e}( =sv>$kydb$B`|cp4FG {`N{ryD>J`@ygf 4Jf\eVpUI+k{Xw!422q=7<\pipǶt!I߯^8ߗq<ƿ%*^ -mllljlYG `p(/׏dTRcssC=_} `~ovvv~444w~/ұ `p(y-,,hffFya (<Px8@p#G (<Px8@p#G (<Px8@p#G:/{`I$rG)xcPeoֻ-o|0Y_@p `sv!Eb==j|aeM< ~cd5k-^I|IIiRx$UGZ]_M7f!Qŭ+L߷B[RYIZ;~NpUmt# I0:VU߶I~p#cAᆱahms|¸ Wg_l!]aHSMCKeCn#҇?(ؗx.W[,[ uWnZ\'Ê =-2H%,:wԸPZ[몎Vuy*#g-!^D]&~wUCX`7ڏ% ؞SeO*nIX ƆvO}+@.B ;klhǙtL3+kL͐E&w Jfhn^O>*Gp(  OT{ԋOK$2$@Jіy$Wѣe'ָ"eВd5p|{_uޣV5ҳ0H8cf&QPXoO0?` 9gm]A$[6Pȩ"U(|^f],y>/^ֵ~MuDLy%$kiII)tN0#4 u\+Șihmkd%# d}={`lN(,6ϐ;|KqÎ?:ߙFM=Al*|YBh5ք:Ύ#! c<&4)J+lG]؈=R&M6s<͍%]zdevykv6^ht\j\mZ-l6#Q`X|/ê԰ pN(R2H4*#}]2DS?$wIaFf{$ :KZ{ϱ+k2+ƲνzNAa8(zRx--#A:}8聃>z7Mԍ[쮉v1y7iЋv:)cÐJ^i CQ5HZzVj3TWD<'R3R [8{^`gL_`o"绫7$2{A2blMwPQNˆ0'}XBhS380GSVZkyIgvDjFF)y ZKXe]|>="4JFTHh5sg'jƟnѪVW#ϊ+F:g^}ƺhkTGJ(4I`>:bc!Rbv6}5#ɱ@S?H)c H@H4VǪZu_|)x$ͤ˨h_mCJW#cNi:<_I_AG1x?9>uuAB@?w {_ 1+H$QXGخ6ծpp/)H3WѾ5 ,I~sj<;ha&~KMBm9\Uɻ=XY[DOCfCcypOt U]t#fa^P®o 5IE8g~* ֭JcRH`I|o_Ʃ&=gAhz+ϿKJ _d_113o-7#"%' :v9527g٢E FHfvbU4"NjIY<޾NNM<7h~}p@Zyi:C8TG_:ifD=?¶~5_||cw*5絰2BѕZe'~J̄WX:VDcJ=Z|mQ7#Ƥ؈ѐ)5R_Y a+{6WޯYT!㜪N6}F# &km-;YL4< }y=ܜl̘CdNq ,~!VL˪w/uNğP5ᆱi p>/mu(_ gi}mz!<,HU'Wm|7^#ƹ=gh߭5e{νz.0?oVU‚"DZa5Scn]ZUaƵKky:ޱI#iR+а{d0U\UG.EI %+ik 6XkX_xTsyG_1;iPiG5‚968閕ؗDU']2XJZ'} LJ[1Ý`g⿲[}[fI&pHG!ule2c-I= y" mbIagX7xK}ԽMpFI[x5:p ~[J44zgw$zynfc>1>ѽc, ҥ/i`@pv *:"5#Dw;iBZ$4P4ŮeI{E̗J H5(E2Vp$=ܨ_K%9C )ycU-AqI ֹl"^3q#OcSLqW]jH%0&Y2h2 @IUɑUa510~]V/kY F]6:Og&pd kԼ$pCUخa5 p#%sMq 4L8T{^׼ 7 )&qWC҈縃wCҕ[+uX=P"V6XTp(*8veN#feiUEY)mu9pu~O) Ǎۖ޿!}x^FcLD~ =2N&+z`@!p`OUaq~kuյU穷LAUzu.}5hI+T5uUWoOs<}:"<`Pve=zw}*Gp17g85q/v_O}5o,:^چCySɪkӓxN`7$g(">̀/z$~z%boS:2y{IJWD$Oiգ#y5ʎ+>D_AEB{Sr+:5%jM]-eA)z{JI#Ih~9?Ҟۏe YeO=_ϪZVVmz}97kr#e+ {N/BR{{Rß=Ti/9ΉXxuQ u 5K9BzhH )p/yk.}2UT5E,<x~Ph׼ƹNq ,Q`ϛb)*Ľ#AH1- Rgװ hv֬DžР~>So`êrUe|sa~Fei'`biѠ q ^ 7#U>tXS/*͵%JŽݫҏ~,s N-:t. *8سp/OQqk٫06S]E}_Eu.I ޽$>?c~36; >7$g,>.ܿ:RF?h$-.k|l<&xOTm B,GXZy9q>h>*8d^6:9 _X0'{uܜ3ܰ*9XXW.2VqTjD4pѩ06 lY8$2 IDAT·$ʋ&M=VWT;ܐꤴӃ YiWm-IɢbP*:}ϴꕰ|4?Tp(*8BT_]ѱWH/QJZ< ok=n;v{UEvSő4,h87ecYV@چsaR9Uik=ÇGo"q~gb@%jگjꩯ=5l,u}xvuyikeyc^L&~Ddwuh^|>=qV(a2"?{#h+k ?7% 9aM4B_;4 $v[ٍm]cGۼVF=u]xsb, 6JcXmr]A{y{3&u ;u{ `"4 g0e C*D1a<^V>tXG&t=>1G$i+ o :qψʟHa!G.ww`"̌.jG9ϦqM)2;^KS"~zKhHg:;pxAXm#v/4Hiu@wJ ?pH!֒<[˻?Gʭ34 8G8y47G49VMR*iXҰKj'M5e1q_K)xuQ =xιCo>k:0k4ZFJ6vqsf1{/ 6r zZ za-IIO? :ҵK:&.]X5YoM}~Brn]D `7i4ZZZRVSV{8` FavV}N/^PstTkλt]V{*߯&@Ucc*GU.kxf7?-oqixuQh¼o.AWhH_oUx IT'?) ,66/=8֋ߒ_kW*g3Y4cPy_~Y? cˈ|$mlaLcEMW\mz,}}ך`Tt#/"^gb¯_{^7WxnX_:xϛt۴Ύ67ֵfƭ[ԏxxUy_gLd[:)/񮮙G?&pþ-$զ;euu=`ڹn:.uUn~}Wz[z 7l@`yHVmeo1)noַ^p͙rO/J7oCwumi7b׌ti~_}]ɷJɴ5HMv2EYr/}ݡߵb{,'I&AE]6Ұ>tXSKC<5;’8?yYyܿ!Qc4,:8fpvBGRƯ|564oV@U[}RI+Z6 vS_[c 47PAj9.·\‚*۶%95t8m2A׎x=?O~vÍ<^hEՑ~M$hHK[L:7#yVD@ȑv++䘙45]SzST*.6;~kMk7[>_,u}TUUaUSX=2 h,9mJu^s`cr~?Tޕ Y4c~6hi<3{Fܪv34b<*<7<9R=H}ٖĸ'!G68ͬmc!GC]ڸ=omzȨvJ%JږGWj,^]T|]'<&UݲUUCI*EX2MI3zy L3rHb]CuJ=A-In\QB Te8g!sH=ex2R{W\ՑۏuRAi sen}:y;IӇz8ec)pC6՝o?kctLo~ݺ.#3}[BxuQ'N);(Iښ<Q' ߟ6xkHf8K( zuߨa@+wgԁ)gFVq/ާŠu5bس 9z]͑⼉щA;\zQ7O;__S szo]'U?<lcZXJL9c:pJ U\U Zǵն{i5m4:ΨYdO}v^t^߀Us$99B8Kʛgfw];7VT''O?/ifS͑"|Y1}˟WoyW%z/bMj?\ᨶXLc-G^e~܏p+|,$KyT{D:hVAGB0D=7xmx,_wn^Q=D?$8kʏ}_kkj\m~gɪ0})JWU.&%I OGQI57LC&D^"1ytsY. 7܁FU"Ցjp.A󃚑+=0x'{Hd,:yt4r`-4,xU~5G;Vq=tj\m4UU4)I$sv҃3> Fɥa8Bc=༨UAHxMocf632QN)RxOWߦAHk&OY\'ͽӾIƐY.V/Re0!7$;=j.p-[zgWa6>C F+iرuDp9|R\%͇Wd MzV'|r\u)9TGN տQWu(Խ]kѐ~QsɉęyM۟M97=-7z ec9iܯJ3AKwуw>6%""0nKO` sno{WTЏ#2Зzs,>Q}#ꚹ0Ү°>۫.ƙ*K?l~߼=qFZZ2nH.Ũܘ͠U1S"I($ᤧhBНRTg;#sjHgȑ:y31MB0]G/CqDBLV᪘E=3Щ?ۧU93Dh4J+@Cu[Ze)OwL:@S=nxm X5Ia%m೜OU9(LԳyg(bb|;H4UqNn2}sǁ` 5B+:9ofSe%KKٳҙ3בԵhQ:f!5=4m4znĞ,{VJd*Rm/j/X^[P2chWa5BEБuMV \b={]zQ7S\|#ݬ-[hԸ^23#oU],-1j-c?&զcKV`ab^²d.aYZ,cIn&б&~1KYĿu]k u[FxXaVS1zw9;CӞy (j=O{WѳXdq\ҏ#Xl7433A f!yd9/e3԰xM0{DC/O@ֱ fZbd.cYZr;*qPvի1xOb<'Kǜs蒕e)}}7<ƒsHrgudeRTp( Gf‚9˴ EםiiaW̠\}\a^ N,^=7,'KKHҭ[Za5Q^:~}~C$X K!Ggur$='rw}R^t{`Y}9fg;}9!o!E{l-IjG{]VkyڴeUp,XxRkaZ^V^ΐ"0 UB[ÍL(J-{.ܐ:?iyܩ%˟K:}Ir~4MՋLjr]A5 ---V@} OOrԿQg]y N'ƆPV3ÇKO*:&vqXuh43PߵZ;06Tm}.p͈]-ҵK\ KVҟqtM)/dD77gVoH#8S:'TM斮z];JԪ8&y,جZ惬iūrC2m5ذ=Ů%5={ǔѸW!0=`W;JWF7Q0wcI{,Ηv6/~Pԡ)M>]VMu*hfy5uֱ8@tCz84$uz6I *1sdVY2w3bUn8zT禝^cutP,Y9zp,^YI 77ak5cA3KVs71mJoA梶q;DweYnkIOFzr]wx#Byi | c+/KInHVxDY5֮jخFX%"~-yyTT3; 9ϼSt;罗H%(ֿ}3雝1r,YiH4aPVoSn.Rw7]c zA^ѓhɂ0ސ{wI|׺# H3|=-%υgPx2C?ג#!Qs'\>VN%Wo^f܋J Y_N̴E7UWWm{a}LZKKjVICMӡ﹭ړARң1LwoGoeI_wߟ`[W~!yԯy{R"QϽ;Y[)W7w5Υ~EGRYGUF]:~LO,}46 g}iG LwRێ(]U9J2D=Խ-gSQ J7"n9?^-C$9|pfrO='͔_\,hwUlo7L~.iJ^DI%MMfa-v5ڞo8JQ@Q`8ZJ&߽bMi wjタL%^4{L!ľlfP[䦖QًOZxƱFGٲ(zP棙#bHGrkEVjQo(wݕRhu*,2Zkkiū}T՗΋#ܐTZҔYsҋc >Sy56 ~t=?j$&?;pD*At .?[.9'jJ1 4JK>}=\* u 56ڏZLPKҥӥK8Wd=eFV?!טLQĐ:?5} zN<cltuTZ_:iٰrv̥¯<$?{Z;ƭZ3l_r4  G$= g#D9R~?BꑸXWpKaK~Hx_~%ˑZH42C *֗z?>S_:h0k¯<{5ʒ~b5jR-W5u`?7gv~*۹yTHdr\vI+k_^mx2ͫw9 r˯_/}dE 539mt_1U~U͑D_0#1&)߯$ ;ωkf|UU9tqȑ,YI} 9uhf65"#t]Į=fhUqp'rǒ? ?gxKVL¢LNC ̌gd|'dqcq|zI{/*53w!k_ƚ ]pA\A7 IDATC[dr3q6-qZOZ][I$8jL_߼j8JTơMɥߧ_m;(~~ױc=Ǯj2~5]ZR]VxNu# 4vcY~`pW~XTT*?Y-Wu#џO{HIs~,߯E^!Kj+c1(EtR(/ FsT{r=H]ڻHxeI4} uN2RqVs9dvcL=I…^V$WvK;H5Md$}k9Ҟ<+9bW6¯U)r浈7vAm/c/mKW2\ix7f{-7U}?ƺ{kz:KV軬7!m4:%sd%+w5GL=_2[)j\K )T{FC4cHܧ#s|LOVq}_=X;앆Cssssy4 ---VV=,w>;|)xyIKe c C塲폿vI2+9|yIf/Ɔpq-ʪ~᧞ۦu}*q9N--I_^j,I?C26=g3ޛ~Qe>&2n4kYkCѴ?%b粱%)Q#Oga܀!@b~?pcfv#y*GҧwMSޯ_>UFxFb l=+<:cr㙤#x2}^'35ܿEOnXwFd$yޚ^1;-ɬhy3z kk{[|OeR:^njf5ǃKVΞMrJ;|^I/JU4%skF Z:?:y.Kn 0cb-a0HKV $9=IF1fwOrձ y0V𱛷%`PקSfd*aF{!-vCz%+S_|ڳW?o}ejl[z1,I\~_7GSҙHh#NX4X+fPCYmCne2IvL 0A!+:2=y^R@+Dk؁Kx;R{7|l]`N|/;a8a!ٮ[JPmR4ߒ4gzT7GFuskSu䟾y\#IR%/^c0b|¹d%%(.5gxN^W+ C,i߿[Bzx~l $WjyTsdu } rl_zmx!BmfoZA@K֯R' N(?SY[~i\)sW#;?JnٔW4z1W$HwY5n5b/iOk5ٗʒYZw'-cO+%l# {}^s9ъq$}l~i_yrDl4\cņ 3zeY^~mUqpPPVFJû׆skxLj:-Iz_PIw7rY7c.Oy-3>iֶGο\#іmBfG'"k;!o/|( )Ƒ0Oڀ`+wFɬjsiF1Wm$~U/7:#vcX]3{m,|P cl[8Y6„+o-TwJ%_LsGko~%mKV`\oTw>r$kZw:rMhœgEHWUQPB!v㽚?ې#xzvOT&41><"r 6gkA?Sڈdfqn @Uǭ7ԼO $5YN܉es{n~kIÒe=9:O &l6sM?nۼwIMi^J/="IfHgrxi/oXy4|k^]״aϞǯ[>o+=6T BH5:+.;j#ʘZL{LvZkrVA@A˓z4?x*-J(|0jZJCƷ4$ih}CZ+;M}bhHuΖG5|BGǥjj}uM$Is[zo_̌sɊ.+]׉)iȓgJϽ#$2V<ȴke$;L/*FOP伤[Y TF/uL'>p/l}@#iTA[pB˫˝ki[n(Q#EǵW?nl kcgGW*{#mt՛GN=ٽOA;ڦ6onO$kjx3K}k!o.+!GDLEYPP^]3u]x8׊qh?wHig#fH7q+e/n `-._glF(~Ҩ0ZJ[ }j|ohX6}TȘz!ɹķtj EGZߑ6 0!tWYϞhsL63tjw4rpӹ,z,++؈}0=T{>xX6Azà'yqXID=t(5#HrxِyV$O3z(w$ -U ˋW:5[>^xnEɅo IgtLn Kisg[;*J*462ζ5..\2OgsMcC~?gh9^dd1=-㭾!׵O}CIhFZc`]%){q62 H/eeE/εBؽ62y. 6Bq9$gȈvPA9'%)ТI{jM`l巵>+u}-54 ]~/ښƐo6wvfS*TȈ wzGn/Yȋ/^c~moK*Ш4ђ3W#VSM!KVZv(eM^m,}ǔ,~dJf8V9K+?#)Isfڪ,LrWoy4;j76.7)k#]oBoʁk4'i߾!Viߐ6wΎJW*i<}* K? lVsߕںٮ8jվ!-KcRm{ɊFry^eTU=Yk u-uCزTu*=y47F8m_S ?F7%/Vkgv/_-v9{t/N9sxU=x=P-$8Z._ ?Y"oJʍm5KSɪHyD{|ޚ.CzaBz sIykS/,:M,K[%YgȑkcǤ4DkJ ׃p#tIIN"Sc4 Lϰ AEOM{ _fȱ- 9R|5n2n{՗Xd%iym9! A}7%+x.I"T%5RIȑt?VaZY[N{9^W݆@Z(r/r`Um8O&%gx~.I=N5{fޥ;:)*MsiJHyD[[{B0"}^8 zS 1$Iz۫752Z>jCJ]R.H:;ř* Z{b Dv![vXVXb.+z`(@g\l)EÙldS"k~4S՝=3D!+n޼?{nfʼܓU~sHH24%gKb?OϮznz{~@^8q|6~|Şm{z _zel۷ K: pOثBIēS|^ee{֜Z#YHĈxmQI>Yh )P U٤Cc;iч 6CjÍp"5pTULp0 F7GppvNnȹ5nTmȪF=&'%8yxtzǎA}{Yw{dY>ϲ -Ȳ V~≚kqߛ9ˇ,6\Nc΋yBV|.B #X¤F< % @<:McETP%Ķ/iݸq kɎ`˥+N6g~W!{~^Azp}`yi3c?݃X7ǞkXXCS2`N~`CiprC_c{O'? Gf>l</jII76>)u86WJAXxP&tHNBK,EHIE* @E\XR@Frs7XB~Lwa5lD̽{0^=P۪$0vSG1 `D.~"lܪIɆK_ik$>*ׇ䏸` _> yYǎ";v ޹i>?1W1o7oJ B$6TW3apu~ 5Wz`Q ujqS 9.G}_裓( !P;R{aQ>J2 67be܇#;p!j90/Y2JcVzȩ8`0 #6*`FifVP&#%@UX~ <}`O>X8~N@ɿ_ϩbVB%?: nG~s2avRRE(!bKaFYST),ZmD~P r a!#,)!:UbTtBw"h-` vbM'5Ѓ8J``0 B!)7E~OR1j牡eaI𗐲& "00<  رcp=H~Imx·bd)G+~YNll<OټR/)ْǠRmЅjՆ~H\RCZQ&8  Ow&;žAGnz$Cj+; bd) n:Bo}?k 䢒"y M [?s> 9 5I]9HZJE-'0?ި _46p*?ДхŽŽĵdox=!pB`y+!BIm2=5%я9Q"9zY^k`0:o|pep|mͯndn{S]ɚHzؠSyhP,(H*qbWI#gӧ샻A\.cB~ ?U* uxϻ A>/_|Tip  [^Z1g:Õa:ŹP{>wjWXcꯜχY`VX^Jzy(ٕޣ]{8y>cg>Ӷ aloolllQbtsl܂;|$:=Ln_Ӄ-1i,W`mxGN96߀+' @$ au;=Xu]o/|v ?^Sq+q#.,z~ſ齴ҦЇt`Ģ~'ṞX&tT_,iצW܏= IDAT"8zZe,_Tyk. ?Q?;{'B]5p `0g&I2b^ mT\124E$ʼ -Wjۊmal=h4ۼ-7SIE1 H ~Dl{Ck\n4v}{Pmfjou:)).%E9NCgWӺZ}`0 WI$S WeDSCZ;6v2au|uP]ٿee[]nF!] ($}Ջ6\zQ~Ĺv*(C_:w %9$BO?˚YnUk}?6a%vE'=P@GESǹ40`0 #6xdp"Q@P0!SEDh˺K¾Z%6lBőMk;Us ȧ7^'W[γR:d τE\0Ov'J*TWh0Y`o 76TVCWm *SۜB􎄊sp0#}?x7}J"7%AG3cS3Χ`̣ _@_}S\K<ۇ ۿҮ5/iVߪ~ 3iEAz睴ۡ*Lp0 aAoR SHfnacBNmְk=J"p@c'ss<`9Bh||TArDC! OJbrLI^ϝ<A*H細O2N`Ep wI#^$+pyQeM-1 񫒀V)wU=(DWw`0lf^%ab7g|˂OϵQ vPq%k㟞݀7^9~B0}9*Y8 sT4ʘBߋ܈X;&/Y)#/`9&9校TfY7 WH a zQ&8 P`tcW ]Vc"6(1}ZGj) K X YP_b\0a*3񏟽P C$b/%E+pedsUWdGz' |*s: BNϟ|IؘD]J_"L| ?2shr{0EwżnIoͼ|4̉ )``0 <$%*)B3)&[-㤇}B23LQ%aU&|8bb#-P-ēefPa"׮GaĄXaŕ䐑M!98-$EυiMHI5'W[QQ~c8",3is髾qگ'$l$Hܖn5j*55K>y9̆[ xQKW,T93zR;I՞sYm".D;*$lSHހd)ȍ"Le\n*?YJIHbK-4=0+#$9sDq͑AH8w򜒌N*A_/ ƨHcH6 zDKAdoECET{u[gdpAp{@\Lp0 Wf6t7vAQ[( dy[l8LJTCD#6dGQ8., 0 UtFppUq`HBZB[ ҃ԉ)_%l@Uԑ]> ԪʠotP]$Mf6TDMu΃)DYҶʾ1G[2Zd2Sn5"CL=XVn c{Cy]`0Hl~eR,&{MmH4Z!b[T8*rj _`, k MqE^$tߐǮ!4EC i!9=oKB/xpEAR`Hn kkQ p!S|TSEmA9aaOVc 4"N*JC0Q H-34!CCVۂ==ح1` c΄ oNT`0 +!hVL6$ lde&sR<` M)J:-D- A藎ܘ o+Xd|x.PP3J҉" 7r$]!pmSMsP3F~V }xDa!3, a#gvvKbzk$(j CVkt- x`01_F3KDHu7L* ,Y/\u êօ(r"NRC@nQIEDEQ/^ٍ2(kW췣9ı B}М'oR! YQ">* {R#m] ?( x~i+\P*7@q,4䆗/3H%hŊC4z΅0`0E22 'R6rCRxܰL` 6S2fU 撰l+v;nvg>o? b|7?x $` J\r}4Q]&>. KRՂSޑFHC9p,{bS4>G_TzZ[xv.2~Ɛ5J-ǜy `0ť^+( tJ$2AFlє <$lRAXNڑַ(W/~y@U؊sb~xMZ >ϻA42'o ;6bU}W8P Z_ Ejz5xᮦ-: EAj[R.&8 q_c+p黗 D m1QR <$l7fLhhxnL]¤W∨( DGc7xAݔ<}v mf4mEQRYw\;[xQa帿$Eշ@n/WWvHR"jbxӥ0&8 q_btc'2I4VI1ۥ\bN l}BSOͮ›B.PkWV\܋*:QQYR% d݉9g pAA~ v 'Sq8hXM[UErvPH<ֱsRD+RQΐLp0 .~"LfwtmH3i -3*%a@Oh qXTV'2Tq?{؈bL<]+>$zBA2}2ꪚw q˶"Y"a?f+T!~v=QKZ ? GWrq0`0 3ݱ7M Ybb:eR#|_J¾ȻthJتJ*XNn_CV C,չ?Jπi?s&W5D͈ C[ok$ ANrBf͘=WpsiTASG@{"PTUsc- `7( Y, p)4:(Zjlw(˩n( ?A*4eC GrYh>~N}ϼtϞ/IZ$jPJν).(e$xL(ZȈا 2e\K;vX PV8/ϡ(8āzxնɣ |4F兑n``06Y" )'|,.T$GlvN4cqB>|m^OWВKP"ABY∝3%=Hee|>6 87}29O mP` UoY&L2J"mю~H]bj뻯&<8XFOLaH[{jS]Sa`0G_ل[ $Ɣ6/V(VD e˞P)GٶLp0 HcU!ބ&h3*4 /$)F2Kd QQ]~H DL) !?ľ(C -4ʼnx@&4(l`0C;vr*>0%J(:޹VMiāLm{!)hg"7_#b9 Vocg>Ӷ aloolll#|U(AEq0߮Kn [ Tv|&}/N~v[ayx~N +'&ZAZmX|6̒j^ɟhmm /OۿA][a0چǾ=菶ɓݻiZalOάc,޺ o~͝x-Ӄ$*bT{EX<>_Cy5V`73 ,-8| O}$&Z uk\hٰJrE*x|Q]tO*FOCj(V('ՇX`0#(`$_ĂygbS0&IH$9ujIXCD9AKre[G|7yuF`hP14`TqGW2UbCm`0F7F9PT+Rv$j~gSV[ ¤ fѥ%A%靼ܨXR!`οئ\1ӳ1چ9ٍk-T AKCD ; EWJ8Q#$-gY. A׸bWNQVVTH뷮[ǪZ؃WPNՂL1=x `0PW/B_#7|LnB>6RYgҿTR-)H YJʒ\aSjࢢ!Sqd\2j1o ɏ8X53m~WT$qm$0%/"+BOcD>𓵞EѺ=}J-xXHBp{L6`0 r`7,wЉ ip$eBRT* tjd)12bI {2J3$la!(% V`":\E @Nrt 1Д΃Ic Bo=-cm4H:b[EU""4Bގw+`0:Pb6U(˼TaZVl`JiR%aҠzŠuJ(U6""~ |7>&:P*4 Qޢ&{"&6IDrx|hCUD?e .0#7:jc`?c`BăxQ*$U5dEsva*Lp0 |uSMn6spiVfr/ǎHh*Д#]$jdIU9!cX\9SqSTX/be`}ٞ'E=7FONظ}oauhLp0 sـml2MF(Z!FzBl[.,iEw͸Oޣ$ld\ iQ[tk&޼WN]+عyq< vWa0(TLqlx{i*)m 6}xhvG&9lf4I CN`Vo( do}SȊ8:~0zw]8|R&`0 F#7ĜM!=T! ⬭d˯@w#VhJ-]]Vq{gp\ͱ,#7 w/ɪLv#**LXZv ~C Uzt2{K30"Ħk6{O/fgpVWEpv`0 Fg&wbA˩aBȄ6S=j!*^wKCv M)ȍ 'v^E r-<)c?:tOBR|fһG$ N#rC`ע(}rR~åON o 7_D׭6slfB7P{{rG&8  ʍi: d0Z dME3 7U(r,s_΃VY IDAT ~Z&tX|/5UL;LDQ(k>'uDa*+3CnW<lX&8 :6,`&q{7IaܘF4 E$l(zU *jXL5EBus{r24@ mT )G~ ƐQ!UHgoaߊl7Ē=^Hʉy(&8 `t}7s ehƢ"h_ږ,%j@IWbDAJvr~JRſ2жoo ae$$bYrlĘޗnֱVU2z'505$]>E](_0R;$X1' `0 FT,R4Q#22_ dڊ.JNάӕxˤMQ8@*/Na0rbP!?ܣm858XTGh4Nlh;,d%RIʊ_Gd W&4" z2>:D:@ _~*,`F #7y5i\, @BPm%Ru N"-ŒTrX:.*13)Qz8kQ<t^&Fx"a CqtzÇh$lE^csI[QSW Qc70ӾAU Wc /I'~fc= Ro{a-"ȍ?\2`0(Ȝ*JZEu()5B^z{J p6[t{dy'QqGȗ!&ȤFz/j_;'K}NNX1u 3e"+*VPI9NP*tc8@U@VVQ%4lTg&SzkD`0Ln"`rױs{Ϟ2iMP($lDR+y(3b;b8Uٯ8B-\3ڢ $(qؗ MqR:^W"uF<32"+F$5HjۺTpi$}22&2qr!OjmI_%5rͻMDn4``0 ̢?=L96(18\Z2[S&/w&hRb, [رV*y`R>#f?pCPq$ʃRQ՛.oz㩓O/$̱`S V5Pۧ$:PQdyEoA`V*TRGfϔ/O #q .T]]d^"KDz=ɑɞ! 8"ЅXMQ!x؈d1ɉr 4qҕ-I츶Eg$-L0bt5F2U. 8Fʼa*=a|Ν EC`T۠})JR jJ:QU{qz*+y  2j`{BzF-V4Mnavg7Ѷ6Rp Ǫ&AYMK~͞.htb1'=*{wjdEoA(`0 7T+DchJj WגFiZK>A ):G>_3YJ*KH#v&^2yꡧ{Hj*6ԷGW+k^W SN7NsCE4`00>'!@rlPUehrFG$,@@ \T$n*\D^y}Q:JQoU1Aen ƱcijC1 7P:߭݃]~ FcEԌ$Sq0`0 gɕ 1ѦK&ubpe[7BDBꖶ$,@biomZL[ЅXtÑmwRP L2ႈj`tTQ6H^ Z4X]Z[)15A(ȭqb1`0 'ssՍ.͉۟d1Q.dIEOW*)Zs !1!uRZh GP5ǾTh &gUAbT}0q7 b%F,i5qtETGC 6=v}ʟpQoP?=F&8 K߾T0{ŨC5Qw ;:"NꜰSs^vRĪX`S5ieUhGz/&H QO8wR{CF:5Gc1IB li-}Ii:̄"ƥ{mrF0`0 46 [7\CM(h&EcVdʒg%a+L;i>)q֖nA%k6HsKHDH聆@#ZH8U?$)G:٨mXiCHr8RrEFT^rcN~49m=WM `Mغ5P(7|o>o. 3(TEr"OTJPhP UCOc& - QB:_Dڌ'X+ȽѺ2D"(PsPli\b$c&*3+nP{ge4ýQ, |b`0V|_[tzVKnƀT]\MR:5j0-GжYUda4HuS\UTó.*B "}:Su:1lJEtF2?EomCVP}w0V1U>>0c D4=XY\Q՛;L|J`0&|.h9.,% X H洛=mnOQqmr8JIZ@P.BPۜ sb'z+.eaTOke̮9a=o!%qݴ{ ǽXT}7nz'< [{T+8 }-Z&{-\";wIYQ1(U~$왰.jfUK7K:6LάyƵ\RJ_TbM E OB0OCx9[s- \ğm92yקH$IM e+T!芪Ocu􉇟^݃]=?^ǤCP)>``0bt}s)# tNwbn&dع]/ꂝ;P &2:h$꒰-v*#V W>U~m%A`=3UTql\q c$,LUFh]) 1QsOJ$GJ(Aܛg\.**zw'FL,`0.z1#ݬr+OK@|*#!)yBȻ υkr@BF04؜rqXx/3R顙nea.*!=ٝhN> =E6ɸuI!rWa*|dWv*[ߍo_s&8 ,h> ?K2B^RkY 7xlbIm}Hd)!'9҃TPïyb{ᆤG|ڿOn3';?d04 NH٥4X9 $*B0x Y!a.QT4Z7,v $)ۮ xQ5AqoVL!r,A҃4_EIXlh.O "{TSdFdXmxOš#+i2 ^Y  frzvWP#Nt%4*%G6*p ҁMežj)h8Rl79DPb骩0`0(DF r#vwNd2=W7L "#$)4ED<%SGĴdgA:k"QUt*Th(i/'7 º]%5!&9&{ R%5UaG٨ Ġ∣ਣ4al/^:\y˞8V=ɾ<^\, *"1bRAa Rb'2D$s/ [i űI1#QTy"E|z E0])Nea-̔k#G@#ZljU*ȀJ&ȗP{V*3]ZSlQ[smbRzi>#`0qۗ DIA Az+;vn cUٳ(BS%a;: mY *&  Gt5yaǬsڦ dځ¹h"Dk7vC~>Q״'&w)F\Lh8GyJ@J39RLp0 jŔHyI)!=H7DI|6s/yhSI>@H(|lƼXE"A$!Kͨ7]D&9|hTq4ek+@!oT0{w@+,?؉\y x@0>^h*ID90% Q)82jbIXLhr&LMN[+g j@^KBS|.m %#(MS=l@v#q^iȇBװ:_jeB\N48efUE^#rLp0 Qqw6"@Li$1f ]B$RRLTOkIgFZbI =!DIw6 q*ʄDVi$|@N;dFݖ%YNЇ>EYأ .(|iB@tDyfV;^tȒh3{'ߛZ ̴ xRL* ]fr%ED3ℂ(DG%AD˯TV{IT8QJK3q}'TC\MӒTЕYfkaQUtsc'O!(vDqQJR "QK4bG "d=ƘT:*.ʾ-R``0sl~ys^BUBEPh 즇SsW#*%`}-LIXtSzyGWa?z|I IZC8ҭ%)U^~bN NuJ"3RsĀnҭb_W/-+9nZ[X] bQHA IDATҡ`0 e9X ` =QݤlE6):o~2Yb*zTBNlH洛>AcX~E.]\@bT;Tq<_QO&b=4zQ2Ä9d%tJHR cP*ϡ6.u Ƕs'``0S\%%Aש?82>ZLD$=Lʲ1 B=ɉR,xq4^m<' OT @'v-uda@roH%?** -9P}^RM2|)1J(M#Hko_S+F} *Bw<- /*KL' cDLp0 }эY9XŽũb&acm.Z I`KU$/zLԙ,%5˯)KZ5*&Ƕa&.ӻ)$Ǘ=Ej!o2U bNju$7AN'iE20hn"?DHt=+}IW&apz;6O>z9_6WB k+miKy_``03nSdT-.Q @G\H拉"!;$πa_MC1U& )T: q11BX2!.{{a#H;DLp0 .~vzn(&/ċh1XDH6ZVsJPIWd IQt۰!(ށHJbZ5J(P`$ݣW#[SYj\+cGP C/TΫtcXYZ)_U:mh 8( M07',<h{3%a'HlCo+Zr`ԏKUc+ /BPPFh7򰞸*we{kL-,b4q| ߠJ"%*lzVD"9sTqx5o/q WW*2١%?4c? qDꦽR!Z͡/zr,EI_x䞭ws[O Fſkrywb#FxAbAݬ''?ńO6a܋QчVl*W[SqvD˜brlkaȜ =aFMf( ǷǶ 8?yŔ{64EcS)tA'OЋnyq<#L[2bBץ$_N$ Ae/NpT CE_7o":~Wdf$1 ǟ3r ,S|t] }蟰N= &ZI B@U"9hk $pB!Qqxl[ Q Ǥ>چ9M q01oM!;PIlw0avYt~`s{mȋ"4[m`+!S dud؅x0yMC>(H)m(8HLGum!* @"ૣ`K5$5Lc÷r/>8HKºaqd)i橓c"1+&@&H(Fۭ;y1*0XqKRS 0`0F-h$Шxڠ HfI[I؂6L$ZMOg }1R` mӷ;^%zBr EWI]̟AITvD0rHSREHL%&#ԏS$Aһi)Tqm3r~qǪ&`0G#KJ"YLԫ bT/w0l §n[0xIlaZmfy1B .u9 F5h"W& F㭇*UjB9F0qTP;!aS끒 #1U.6b/na:c@i[ōw ]J*敭IW'MÿLp0 Fp+L WJCzaF&TV@^h^Ru ~^+p![[*u)TOM/vBӜS#"DHI:8Jec*LR?CP&"9 ?9CU6A0Piήdʗh%}H+Ŝc_$<޼[ML~m3!d`0ZƨwÓ\(K- ӰOSqbIXʸ"BX*9{0Vuc;B%k!PGD㪊c{<{87;x|jFK \c6S&" AIr8/*P3y8} 2v+O[U}|@R(=2z|wXUzvYӼr `tsifR0? ֶ5ĥCHRsټ$lHIPWńBKBN;טOLU0iVVP UT!8*{GBkToz }HDkG4Fg;F[~v&EeH6si)*`Ek9EW*UK͊47Z#&C&8 ӸKaF_cUFQ bND`Hn[09;/ KتHg2fa7FN ~ۡ8 Fm ] D|rGOSQ+w+FؓɤvXx>`$SG #21ٝ4J V9j€o:%*}R,=ltJ\턜HZyɡn\Qb0S=L oRnSj3Ql-1s$&O(]:ez|g`0f‘$5 % cV`l;Y=+$YJϵB#2H0:؅h$GzUmq>!_BSBJvU*/%9eT)| BrD$&{J;p^> HP_ߝ"մO3=Q2TǬB *UybCf"x0``0@Yh#Ad)q[[֒d)A[$l)3蒉ڎF^N ;{;na5͝N3J?R# 4t?m4h0|JJ )`;m94hFH*&{*@3gY%Ҫ;@& 9!uLIJv6B eIXy>AwAdb? =HBl%/>Y+h誯4HX[Y5^{~c>rjwSXВZ7c7G٬{0!s?O 0U(HmINPj? ^A5)%<A0SU IDATϪoN8$S$^P6Dbڻ`0^BN'89+ehLnHN\cP<vk+ksQ4x` *]u hŁ8R@$321|rn+DGHg0 ɍ%'Y]^Ғ^6Hzߐ`DDQֺQx`UYxi:g;d W`p5_%a+~(ɉċ0"!=H>?d!zRIyJ: a jŊ qfGu6v7`-M.SJ?9X p*8~kJĺP]8}hZaGr"tQ\`T6jT*|&@86`^wLp0 F$nʒEowG %5,Uc=d).J¾sֱۀ/9Vgb>3BL0j%=rDIBaS\x|GEј*[ciovvjXT{`GVqv~#խM\Ma3d? HT^dK< %"wDhV1fcsk"7R!wɗLMXK6= @M qVeH@)3$9*bgU|*%rȀB?m+ʆ&P.+ntS,oSialRPQw1(<^ SPdP1`0MZA (Q T@2 qcS $ zȩ~WңF248wQdhɐP*NUS'_0 $.!Gx2=ڎf(qwx7`gS2z##qp訐mMl>|v&9rF[o>XjOM06 =39Q#H ƵdD^Ȥ<^Pگ ĥ^[%*\~EAUE4!D҃F҈%a^"bL(I1a.]!2p];yRxW`S o_kʨg#29#LOA9KǗ6ꍮ~_"@3bF"L&m{|m`O7 Ⱦ5EE>TIA4 ň(6e E=eC5tXYZ;+GNrT+R#GT{`0 P=7*t/frQohG?<ؓ%ah- >׀;r۟h+_Ln[z&h`"`PoH>6Vik}Hr낒#c}7g8{S2L7h%Qw/>$;D^ވk___HF,q_G>\IKE 3=A!{P=3UPUqNɬ1[1H1>*Шo{(WŁ$Tv-J2 eX`"v@z5)b!l\R s2b%'fI܎B` o|2d1|CG3'^{uӧYTl8c|D|19 QqX3ts77V׊+,JV[{Dr!vLu{vp)F8Y`UhU&}8Tpm 8UB;&@P(5rm$;*|ep$#!!!6o[Bj#bC[y4tւ3 HO-4m#fs $bKԩI&`2 FvUc0bo\[XdjX˽cXAdTp8 9؊4QX@ +:8Odu3MmߕF@ҊT+OWGW" LW`ڈ^T'6a yH Kr6a],4`/6ױM4Fz#-%5Utch Z)%ȆŬE9CI 9Bm̓hĘ.ag ZxgJZ%A~S$9T^ScP$b" W .`}Q޶)b!%ƫm-oO9q7ĵ-`'˵ ʺC 25NBs="mnZuI(7;ep ZqTqszCc[X/  :dZ ]6gifR1CEJ_[e q@p?&<s,;VGQhT& B:m$)@"8|oΚbT-J8FWB[ 4h"m2%_R]hbDwI1sk+Rlɶrg uFHM! `Ny[É1bdF礆 1 OϹ޼Ͷ}jCtunjI%hAI0I^][C7@#U* ,sTŪrLbp$$$$ī~Tnǝuذ@o.߁; ^8 EZR:Ĺ򤻀(Ώ=(W ü&A:lHsҵ1ȕOz22=0͛ppiF ٢_bHaw9+Q^Ӯ_A{aa!udlJb:1- 1  W`4 zN@ 6z$쳷ԋ㢂Evסȧ"%,<6L%jtٰmQJct֐IzH:&9@@,/-o} MyIGXOd ZOdhItm몖V䔰<?I/xu9<9mY耬2::Zx,?vu+LheIԄ|FfT Uox〒Q1rMyG$Gp}gy9|ltHr7(r/\b\cK_͆ AQ8,Mx5l(aSvp&~#$#!!!+Y'SOYE$h/m >#oPH7I6|+G0!w5mPu>:!8*†DjXD+cqQt7"Bq-A7L]`njGgMr.+E X;kUuUӶq*Axf*=Dp$$$$ 5ܹw|Y/N#Ġl2>Ąج+)a?umu!}apntZ{\Z&"¸ǓqwD<[ 9|uEr\$@a!1$E`cDIuB&\JYš#TaөZ1#)hBBBm֝-ܠ6nGѱh9|wTi%%,50r;'ls&9p\ӹebizÿCWr/ݩbEʐ"Ygxu ^š( BH: IqO΂- 蘇c$;kKαHU销VP潗w -TCΤb!*E'EU'q4 l\0MM_mYׄlEW' L9S8Tx%pRR}3U=+e!mc!ϓذ۟)\5PɊ8Va<^=FiQ.8tQ!8MlM\#>>6Tq 0dYU$ߑjX8LAl+K+j9BAEPՇb9׉HHH8ظQws4PmcOm} ^e/{c[W3r6ծQc䦄pe&b٨껅Xᱸ4Jc帧~T3Brv2g[~mCKšUBtJhŌV^EL[-9v>NGoGT;B8> /moDb60j!%-t`HGBB‘ƕ HUoBKn + ɀ,-ͯmǏI jW3}Mx7`ǫla[2_u\&rs󴾪f+87#:ft<"ǬD,P*T &9;iIŁ3l܃T<ڱݮ*x_v;qⰑLyHBBXD IDATD"84^+Be lɠ-޽cl0gA?fJXoBxq7SHX]vsUճd%P u=~XLc &Q%T> ʵZqvATa#1dcHXT#daF~,<$q€cJcĹ GDcՉ.Qoeq}ɎJ~@.J8z!d&#!!bMx'oBt44*\%Po1%E R!R\ʖݼɽhM$HQo2Ium Î"P8 m; )ˊĠpEx߾H[\c+ԡa%98UB?.D4Dq!aLiCP DZ&P&~n/,JQ@QLFz5Of)AQ  G?#5CzFQBxy#@cn6ҥ>qA瀌7%l8N;^&jA&ͮb ĸwqص@N91\7 mcqqbIu!e<o_bHy߾=~@uo^[|åpַ1d=TsT66AG,]XQ՛+uѝFr- \U ]ADp$$$Ilل+[WMFJ$Eyo\/l%U- RA&b=e&>YJH,\":ӽ.0Aq=Z +p;z 1T(#A׳N{L۞%f{dxr8j%9TStaUpdL mPhvU$؅\DC(ɡ1_C-$#" ~U㘱`T>g􉍁-YCl }+WTEd|H #+ m!d;~Mh"$8J U2')?VWƜKq+_olQbS+-wkkƆܪU`~ N8oA´ͤO4a} My||)T_>c>-?K%^ E9x$3ƓBl`EnDUX}k.~m;F}qGmbujZ y]7JB> $mvUDy05\ǐx+:[7Zvx(9#!!HafCpB<! ?u|h![0$r Ӑw~Cꭚ7E51uY lR jpzGz{(|7+Z~>_EHHH8R>Ml"PnƢ+CA ~K)V66!ڎǦ)} ډ5SA\[㸼;>Al({^ bk?ya;FmqZeMWq{k>Pmژ{^ძ_KP$74D"d-1I`Ilq[0. '8) A0Jdܕbk@{_^Ojm{`e!>QE%!!`&l o޷!Lzʿ]aC̠F]_Ǯ"o+kKv,á^.ER&˅CV}qt@Ɇp GM.ʰgT GpquDn,bmer^# 39We[xauuӷVVxR#)UH%+_lcspVt\ǤHHH82{p)2\LQjHAOCgɈ_MJQwF_3ؗvu7“sYaRb~C6yaO5\2d ASq@Ũ||5XX޷>Jy9:PrDUalWrXٶc?  Cۛ\Xeu&(LTdm 5e}SiBO$$GBB‘@۸!$ALņ\֬5i M 3PMъ#6o`}w:L_zQ0jon\4fy_m$ ? 1~H9'\운 ᵿ~Gn,`1ɫYamUu\Ѿ}wiٶ-0VrZުaOŪh mZ; %HHH81S8 ق!cMJuYunjkQS~OUȶ!Gt ;ؐ$N65& "ࢧ ]:,7nۧKvG= 7Q c5PaVj6DG"9e8| I2;£_r9 ,Rcҋ(3@lY= ÿn0DbPt"f >LݽI4esRJ&O Wӈ6l Jh"!d ɅO"pL5A)Aa*_̧JuD$9ĵaB>Cu7Ez*ވAtH8 342|9%:ԋ$9(yP$ĥ'cD M-FaNҳHHH8?z#nC4x6lI3_n3~u(ɍ5Dq|7oI3ڸ5~~}ӫ󽜗AR6 ̶&pgcUg9VoͻOs{ Tӱ 9f8dꍮRnnv-`3뿙/Zmm(,ć}$V:'9 2 k EPz-܈|RL2]2{ck̴׌U0! Ŧ<cC-cSwȴM97}Nr0uO 6HWT)kl ً`sRo1]~^KpExZ6>3~]<{>~Z{8WAHd {lxqvX`|FN_!ȉ]m'7vrQG u2^3U`^UAXhP[Wժy@ebY]sL*t?É HHH8x'o+)1U\[hb.Ń^y+o}o ~y15%}@Xo/ΆiP#ذK`;a*CH]Tmh1#+'k†AxNnxVxu_E@dB6`"Fӿޱ^ ՆbY3m\q{g>."Arn%=-/fs~jo8U l^v 3tjCzxDžd ۷>$" 6vG?I`e-R&MAvqX>o s`4~& K`"m$ SH&hHGBB!ūy<7+lTvLl 50}nM&zV6n_-~̪ShŏR\0&QE>`gÁY0bԟ  %וxPp맷& Sa@l?QC7RB¶!6_t<5|sP)Z"}YZ2\[y?פe}TjmC]8jnJ%!n F!+.jyPpKp'HhDLH.`8ڶʹ"]ataHC<$G$<]' >SE(.J 3ڣ-aPэDp$$$*l\`Poے^0Aeh)M~$r߼I$HV,^XIT./(õwƳ]F `y"3A؝S.x,R*gocQ!: >T/ ) j.UK缵JA% 8S0D 9cqa$b̹Ʌ'>qF: 9PnWT(&98*.Guc$G;ќɱJKr`,qHGBBh2RH[ 5\7Dh6:b[cdn A|/ T?|0ZV+g]n6>e\$F?Y6̹RS0X츲uVG^Q4[^T\ݸF 9d{C<//ڋ\<{q[:9pIr/#Iі@D t)ʾ\~EN%ts`ć;-LAu*6iIGBBOZ6aa&&fX{CJaiKNmįj#*`?m'ĵqlO-HM+;{>$cFQt)[" {SڂJ,O> ^ LdɩZq͙/$(ً\:{ J"W_iHÈB~F{ U/Iq-VA4a ٩#l˫u]YQhɡw"9s8ppSˉUihm{yGoK)aN{k5XWYf|կk㮹CX.َZ ։ `mVT2.Eł8'YƦdO)!Y Zc\5h`2! =8`߸nx/¥k/kWkų}E! E^gNrh &,l'Q %YqAvHAZtW%#!!@C!zbەHN"wyqiͷH+uV0'tUKPql}a#e\ױ+ǯ ^/ Q;p#d >y5{ u=Bq^H@q9 PE9O.(X֋xZ{ GZB*tяE[lrWA>WaV|3tsߌB?->QD!9'#!!`ʆiZm8ѧ}*y+:miRϺ)?/)BynK:)H/9փ_]UG]HGVΕ|uSjHlj|g9>m[7@#2aD *0Ln +#h/0sD~ 06 Jvbs)B>KrB;8ɡ)NlJDp$$$XF", 95 n |`c`?q7r&e|#%q UkAn)M}FشZC^"#6X[]S9Jzb#zV"ࣕM_˝%ɑm)J#؂!m3ېI qx pnt9O69uȍ=11f(lSVhߩ j a(+F ') Z5㥆+b227vNolaŶ2tҁrgh Z(_olI)a$80э5~[=c؊ޱ^Mz(ƱԈ̞`Q7Ж`%܃cOSNjx^kr _nȍ\>$GxMb&ۍAr&X^̊E݁5I@/J"8$6n ˯ATԮa\+ͽ IDAT'0 a;r-aF!a(._~J,/¾⦒U6Vv.XeRRsGLĆ Y |?g ÿ{䔻ESc#f, Rt1a4|Xǹ9՚x/l؎?.FjטKg/9E/Z K.=VhErpH+A#Hr'GHDp$$$8l\٨B *E0|/Ak+)n@l5G{A'HJc=#ȏ~=it*EڎEI_#,Á$_7#GG$(_{ '7 ,@&1&(xD?zޔov}"0)ŰΧAN;$GOf# W7Md: zU3}uZX9[ i?ʾ-w'T~V WΊ4ֲ.D&2zutCh;H$Ѷ2y+>~?+dxFf[ゃ̍-O9WbqUgKSpv?Q3/@E w]4%Vg]@N-dݒT CTUN.v0H HHH8PظZ7jHk–=J. PؘFq2]<(_/߿*kʭѬ.Ѐ=.>t,=eC5um&%ܘc>iT̮>LhF$NbM_{ /3;!;"\SDR[̏#L%tߑI!ʬp<'?0H&ɁvCE"8[X)1`6WkC~InqwaӨAi#ߥ,SG dJ htY@-hRkAM-$+Ab:Trcrٰ%p`崭x/kxΎА1IJqgEv=*);cؾ]e<6g[]8SPr(1JC . /H%9(Ń@ƆfF,; #X'eC%R$G^}T`WpH, n܄ӧu X9\@ {̭%bJSo<MjS)=ZatOJu"B"Ͻ%;G+1'UqOߐU";PW@tkwؾ'cؾ* ^I1X\1k=ym͜*Rc$<?膃 6U^'Jp@O[Hl+֝Dp$$$zp|!-X 6`c_#5*phj 4;C\d;L?!h]2DQ,HtuF!̡H {ߵH Uz!uc1wN#eңwL?]!2FJg@r*LjakUx"|_jH-s&'#$HZ-K  m 9\vpAo*>!# ]s}`D=և1hzlzӟ96 ̲½1/&n`)aI7ev t#%$8Ƽn;h(S9FV]œN@)>УKBz<4۷c%N4{X|_,/e /\^kf6dHhZڄ#GDt8T -./ ?Hd Յߝ|?GA~AHHHXHlل+7X~߲m[x sŒ$&0?ܝ^G3jV,Ի-zc ˙XČ JPG1.C)Ac`DfW+QjM% /ߩ r}81/Ssy(_Y^ TTRAQ"9j X]^ԉE3HGBBBbF~"6wa}܇IΉbm}os,){k/`;0TfM%%?EHFG'ݢ?0?j;?\^C]:3kײʵ)-Sz$0&ɡ'(KeNf9 _h lp#x8fevE:'`<~/H@^'z!9cjڑ<&#!!a boșQGxl1vY}[s\#߆g䆼--khډ5+y ~Nډ5U]AЋ%i2Kc4kO$01gǍM5"3) kDgiq<ʥ=R5FD/tRtQ9hǢ(7i*@bJS~h8c(3Au+ ?|5ܫVq(RH6k'~լ)tE;5KmFnU\ v.,7sN7.\zptꪢ{QT́pM[zy;ɡxX@Et$ZI. >5nsW?5k#BA"$L[5 ?vM Al*C!JvR"P"M 7:ZTpQo0[dÞ@˧1nyN~{C@rRqdP[*z-ӹpn&̂`#Lr}sm>DP'#!!axX S l-t$X^ZVR to##\{ukxkrANy2AޓZq2!,W#CnçB|Hz=<և=OX28ZQx*"'\ =/~%$$1 #Ha+ f9؜,v1Q6 s~hnʄcugJO:~07(pSš1&JEC"03]P/TZz2rI:jeo3nޘ8v:#?*BTpo%'9b8O屐;.\Kg.3/$r#!a80$6ެt<9}EBBBBؼ w&v,6M8/3NXj{*1ݟpCV_%s5luCi,AZ {;CX8ɍ-]U '-=&=EV@vFZu9 %Dx$L87 5pp\[ pKM*%4T~qPl((嗵+Y-$E(j( Cl2dڼ-#cΜڈǐF8nYg*Q:׽W>ur̀'Q݂ӧ㤄%al`,6l3s[haw Erhm2 ࢂPNv2y#^ɗpH%50ӗ埽<w/Zqپ]Ók*җn%+}؉GLDrX? 9h'9@MnEr@seI䢒07lلю@h~M,#%Jmq89bGsV۔ILW)aKruMibjuZ%8p I=Avu[_b0o`PIF>'NFR1vpdqAuZw-6] H,9l`ݍ ׇ%`Mp Oa䰳k6w{J{ÈtWkTI{(^`U]*KB]Dp$$$ W7j1fCè5 ߟW  =Hȴ35OR/`#nx/ʓRO_1.9/˺]ƚ}Dؓu 6oç`|,Zb@W cq<}dLШ*(tN2/z ç0XO㝱@bnH-`m@8{j#/wmH"&7I(Ͱau"_&FȆ2ElR1;N`P a_>_[T"WrD4(vDoArDX#V~.#&*9-$ǠRo1:AS|x)0vFFx9 =K626eRBpEfHv&@IP iEDDkQ}JBrBkȰ@NN(> 8',.ٶ]SF`3v.,akb]׬=!V(`mo)"h'l&\9ZXP#&Ɠ1l6T5YܿΝ˼(h (RH ]!]Ū(ẫe$Q20Ʈ\ʬ۪6YVzK2r%Vdz( ,Z_߂gk|,7ݛʌhT:RXU!$G}D'"9D[DG[ވhe_#$^g?ydڋ➢a8 IDATcF$AZXbĠ?!0MvEx9OBdH\ANp#< {'c%;Qqa < 3Pއi+ֆA_߉Qil>ɸ!%.Zk6׿=Dvh-!^^)yL5|{DˮV<@x&TrPHq_mW`~j LybDE(* E >'Gw]-s>8HқGrȦ03șS]5T+TU3-ux1 arjt#-_߂əp &s٥׮,V Fn `*!#=U}b lde4stu\TƼs AG0)U55 9|UuHH8"ݴ_idI~$OOWڞ-xcf\I~ڬ$#!!afSBx[ S_fRE]Neb. ߛby/^7(g.ܮ+Ą-Q8Tqu1:6BCOQAƖ=(QG+'˼uLr(G $#!wm\Sy»@_Jkkq<ЉDp$$$t #sJ$(FH dLׁ!t* "`DJXGT 9`JsFJ\8$R%Ql$#!!Sqxl J+2UChH*29$)VzP!V&7JD&llΚ6F#g\A/M>&ڑ2VK£N*ȼ!cEU|ynWix><61 HK#˼!9rT:ёt҉Pþ=f r ['#!!3lل&k_DuZS?rHr [D|/UɫP9aȲ vI^7 #G<!H ц@ naDw+ghq< 7b܏2ݙf@cxb؛6}8*oO0 ?G.U(ے~fOȓ8Vs$#!!3)aІH "l"(7C\><(QA<,ute"ɡV벓!5]V$#!!3RobU%-2=V6"Tm\e :gvd&fI0](~yS:4;'@§arCUK(n4/6&dKp=r2ܻwO/м*$bW6:PP\Z8lk$d\l%5F Ϛ3  mh>*x2a0<9.e7\AĠP]Ÿv BHA(Z0 ,,Mo>Ai(~^#[)dbx]no\4)mȢIppmNooÅw%vǠA<"{A5%$bZ"jvb%Zq˺zꞢPyȚT7}6k!-FQm .h(du>ǯ/~>w܅۟{qkAPyM>:u$7*čk >A)JEkyhSڝ٧|/WX{ ." Kc$GW2rO3&9O3nBڜ Pq\嫋z^Duu<LhA*U\Wh$a̦>IGBBBtl\0S8BsQq[%dj#(Pڭ Ӛ2`gY> g?:k ܆tU.]{:ܿ}Y8}49zS\(9t4!*D`4u(4hIrol@InY@Q /boH!.,&< pmlDxgLX*KO_*,=ƚAe(ÂQqJ')$vV{Y`'kʵ?tjǁEƂsus&7{9ܐ.#z!7RWsȤ#*ntk d)dM55bρ$/5{+%0T> O8D?;T&|ѳ,1ۖ濿ZTA$u Ϳ7b'Mdf}%==2 ?=R@GUokIuE[t(   Tʏ,:A!6kDxNq7)ZYx&³z:JL%Ssռ)kꅍ0ݝt+%nۙ>h/oи10QEQ7&=7v)ҭݳ{wW_S* 2{JXDb"-=D~V*AtDv$ %ݯA'q5(`sزTdlJ-6ݼ!9{'L$5Ia3p$6"ufn\Ӓ$swm^`݈.F0dTYdx=&936 t"8ZÚZ-̪)u w]ƫ PumY; 7 H"SB%*otosR\èIGRtoʘA2m1z{6Ã6-6oөa qʱq,$ ( vI@r$&R0l5"#:1[:Šg~gS_:PD~[:HRh̯<]NGBBB+԰SѤH l,6<=^"(2Ǣ n UaQ /0؈J)aQ*u:@&S9oc'sV&U~aI&+v!=0#L~ZYA& 9/ #7bX )sD6XPD,!'ڵPeތm&G' #y̖~cM V$?िU$ūJ9·*HHHhAp)Jb(=Gw=QE'G8 _Oyt7gTЛ hA?.nQ*)Tp E# !ȍg?,G>"9dc @M +_gr.$ FrS([m:vɝVq|DSq0cnÓ . IDATq:A[`Tp*( #}vʎNa5].Jt,k6e\ w-~% EC7on+c'/mS֚>j$two(#~,-̦87]l™}ϙEu;>[e``gq9dtOlŜHgl(kcj4W ^( _Q #8iNGBBB0{ #xUWAQ TCbM;1M0pw|E鄭 +VL5Iz\rn&xoSN ,0W6|"91jY7'nEr0@a(ӻR_7԰ "8E|/M.2/(ik!SΨyg8bn9Jߌ`d9C@ V;d%Q"&#!!!W7Yd7dԔp,pe8q|S{ -W{jA/ii zk1f^;Y!0aei@WVvJzfL^}9O6wN$]qQ=e7QmHϺq'*wg?gz0xIdyWDZmRV9֤cMn^q8q}a{7VZacCkBAhK[6,Z$1$ 4xCtLwuOϠzefefeUW?f>Uʮ~a ]A#FeO}% H Z޲DbHLh9b APeO+C ,3;Ca|'/݅mWFnb^oAK~˸yVvq&Sɮl4Vazz'OLM2A"VreAfm 9`[$0V:U$9|䉸2[]`1e^k/fS*ҷ <.+V\XqMSQqjLNʍпvkP]Hذr3w+}O7۲3[H wdm5֬m!")#A@gOqכkMswhw}a"ʤ7ԁ p"so/q7q'FMKdPo*QհL"NF6\u n]c"„T]Z!!9h۝E7X;J 1|AW0wP?9c^.>c=PG"eܡ9ҿvS %-d((;.}$;K:0+CLYQjwټ-7 APpS\X@scd\/l+ꔉxbF9Z)aoZVœ:B*BxK,,,H]R:}$L@JWU59hZD ɦ? IePl 2KK ]dzW$^$OA59י R71ƽ\tǸ߶*=$:4RL0wxSSSbŸ"B(AtH'z4D0ЮIrh0%\3y KzH B=^8;MI+g,98R| 06 ,Et%!=~ ,-]t"7f '-##vTq(I|q Sy 3 $Ў@kw@#!2(#5mV颮 $=7Ze4<E' U`&2*v9#w︮)"r#hޤK^z9څ KX68冢c}"wGvfYM u,3q`ҍnF䯕԰z#/YlHdG/I &hȲ|C~D@ ݸd鹄n*-Kb0,P=;qk:6[#z"=%82r/H A8nޢҵ=<腲l!"S`& "[^OʶLZRS6%l7C:)m' "2nX?>DmFG4{v@p;UܩQX"06(WŋKC 6fˇKGm# o|߭vȅ OAO"L%e)=!*Han&oxI픰1*9[nٍ{vRq,uIHF%ku_C*-d{bLe$GO RX\\L\U$pSI{J@!;8ċa1EƄpvI ڟvJDžs>U rz^-j}WPT0=]SP(̸T )="9B|0?' c<ç0pR^7t&LuODƝTi{?9{ z { opU#޶CHg`Xc~k'rzDTq0$G aƖJS2,cr9V3gsI l/0S(KK^Kmʍfݾ<-"=.VQ܃Vrx?ǥs;WY-)Y]TU+j5+?F& F)=@f}CqQ1&ߧja~c"o 'Jz1G8\at/דĩp#bS bdp3QUUEh+Rj\} pgJO>z΄W}QK8{,9*:|yBr H ӨVXhX8qBHn;F^AZ<8c#Iu=n!,'ԺG%5䆿Qyh(9ԧ|ziiN^~g*%X_X)z(ϐ**;L7$c6 z@VmU[D0}rHOӧŃW$ /o-VKb6'Nk `2e&gm41>g-ELyU's\S֏c둇U藒~x7"~Ge4B[B~$7w!FOf&rEω>gzk˔{=!8^z%V_|1!7$ 'M;l~Kd| luM?c!?Zsx1씰վTT"vXup’o)X6"A^6$͵sSujt蟦WϮT \e<km|d &qxB2>inqH^_Q_k`PIBHv꽫גN$ iEkb?|'HOpgEpB.G&,.Heٰf"7_Ee,?I_ '!DϫTVoV0='O*Xᾐ&A$ o(Sv8m4[MT׫+6aDr9l78죫UoAn"z㳧`RvMLh_IG\{!؍-ͺʷC.Y0|FbWS}ЄD`z0/CHrk}xr#A2_kW& 77~ tK5",è/c98^y~)%Zlwj8<2've]2ʌ h`2 (qϤ2( nUż2TxPߙWXW-ʶHAW$ffkeL˩7$ ҡِmuc_sQO73ɱ008H"AhB+s+4Uz;-}g    o@ԟD8dDspco&"l%XcGqKֈajRif8V܍O=BD;8 )7˸8@UC DOn_YDMwi1]'D܃:r d\'SOsML2CIlUJ &}Xy PIl!'],b}2ƅioi=G\mu\wC̏bL妤0߶O>XRZ@H (Q]J959EԵ@v삘TnOA;`wDT9ܠ]S?5k\ID1^t* SxS iqo0H/u22Lw:b MLX)Pj*>g~4mC#E$EP곯+ڒ]=EP*tkIэ#.FGű"&cIPhm3D ?nS ،ޔ䠠$82Ο?^z ϟG\;V l/tGX7tθLn@gJDB8yyt7`aVoW, lZb7ɓM:Fz<ڿ۬+1C\yrZ 3rnLMXgjjL_  ^䯮}3fp+UdN!# pխ ip03$G\X,~`sX;n)B+lU%eG\̙3X\&38s Ο?ϔ{饗+dRI =E."yBI+¢JW ϐp\Sv _{eSVqqi j b1ڑL^HH6 ɍ5E< ;ksDrDQIP!ܞoKNTC &G_\bgƶs EĈ1{6M`d 3bG\"Ucೠ "2* {9Cx$H`C`h"3qߴ,&V "QX_Sǩb-žo8ƦAQe{)a׏c[W>GcHi]F!#7:Mj* "C|7c $^FLUm>HcX#k"//*H$Ec0.qVJw.SJ_[{ ?ADp-pIN>-p?:u*!8$8w霻̚Zkͷ_Ld0H$LHAEij#g2DO3]p?Imrd Zl*Zo۶r~)ZD_)(*& H;hePuJqHHrДdrߒe7໢5>wkkAq\}Akw!RIe0;=쁀,ґ IDATZN1Ü08a9wCtHC4Qkh6Waຨ,..*ʖJ%z AC{.(Cd C ua -h#E=*&7,;^gW[26Z\ WրϜaH$PaFK{Tġ6A*2WR-K.*a Dpx ~Jq&9~`$2DHj #k cu-'[ZbGE4crIXNѢ\T8) kT1a]KZR)_V=t 'N6JeT2鬿 $qt2xKy7k%4R8zt(sUAIο4A~\XHl&wcvtJzS&05TG016F鯩q~5mzv}#zџ>gqv~wdTX; ev6 0A9J LެSĈz2*?͐ΐR,7޸7xSRm?{l!w?;{˗?ģ~8'H0 "6P# wd8hYdNZd/[\;)ceo{Z)2S]^ܠ!DFXDXRWWvf!}9`lL1FXbrÿ!9`eXȚn> pjPC@X0?i[AZ#EdN5 9J7F">rVc{Ԩ~N^e#n{E*h.8138;/cq<">u0k2=ް_Uh_T72Vo|s zi=rC'&5t*8T*Iv2[ `!"r#Nx 4MQóil3khނbn QB;9|F_i8 -앎C bj ʢR)Z0 (LD]Wtv*3Ď A?lCf FrVUaч.* BI;e|Ϡ ` &<ph kezÃ{sl?5V(P@ u"2%۬y%H]2KF~]d-YTTѸ5'ҷ ?~ 7Ua'!g?2* 7"F >@[Mm;E.{K*! zw,= XlG~ S'5+3Had*?e'O??ca'pЇ122ӼMlnvܿN޴?o$_|$F,DŃ!2D =-zZ Hz߾fᛜ:-ɚs**CYWVIH3jNO_YYq{:$݀vӓ*UM+ SGK|fpZ_e){m:I!Vv4:'7Lb&9&-6B)8Tv}o?1CXnFU( 0% @ “ sUrT Mp(x饗tFɓ'~E/ Wkm]>3*਷.&B~YPTLnM K Zk Į!,,.ƇV:")Ե 9דwmЩd _Z_H.gDAR\P);Yn>PȱppZ[;.SцLƷ %y$ Jal7=.'vOѴs;Zq6w, +٢}[`dDTnjWxh+bZ T|_*>W",tQ.QTeX⩧~ĭ[8pr<&'S(FGp=>筅a4qY\\"eGH`{ܥs(.pcljV8WBsh[Olwmlmjj:   [[[TV{F`clEl[:-;P8W޴]S Vąj`|lc$Vo, x~͈v@c|lB`iY@B`#guo`&ϴ҈=4[H5N5lMllN`%)Ɩ{>]z2$j'°]7E˧7叡ӷDQo191o<~'òpcpv,.\vCm86{];9]͏(3 }שư3ۉ|KY&ӧEVswwu?"L6[w |vl|FZkqraZU%Dm4=, |Y#-pY쎐dMhm~"x'iOՍ0Uu[*؂"!8h'7|y_+cK8|clL}ʯwu n.br2`c2ⳓo'72RWm[Q@@<0Yt{g.BıAcهv&'&}PF^JOpFXdK2"N>*9X\\s=7 +"| O _x _?f\.;wncu6Z iR䞏J).8J͒ AXoȍFa;?+R;l&"*l!vQrM VQNJwBp%FVx"! ?DP6sBim1NKb&S hrd5[M{[Ш?:k`id&Ҟ =Br׬[J(*yc&yWn8$cv1 ē’_+㡷zκnzkxv[o,bƢۧ0w<ʹ"P"r÷1A2%\|$BptΎoہR.N{.?gqvp8t mL!3}ׇ3ި[υ|k?%Ν3SP*E|R/#1v6re7Z,'tl6W}闾_/h<#KgM.Aڬ-(ޢ)TZV-bFp]NKPeJO?[O=!+6pW(Nm$ևG@-u]yVA0EuUI_mt€*P)Mk d_"6`8:6mS# GqE ё9Zr3&0J,r>k)(깢p`?ɍq-55"L&ñCވ]ݗ(%u >(iױXu@ЂN@rlqSnXs]qq?DaE!D. (G0}Ã=҃$Gh8wи UFV[\lLxMo}q+ Exd BrQo8q7rCh/"7 -OdS9a4J$OE;꬜# ëmh2Y1FK!]K)In/,}{mrpzLظL4S[}K`dSp8Կ?~m7;;lБ">hI|)P;5pZ_̴2""7h+޶ۅ$Gth[D-O({JbDAlRq\*\ 6x?ac.|T1>b;~ĎwE _QQmZ7EnppF**DSh0b͋s6pJeo߳ytLo7J#.b"4v+-ϝ‰ϝO&!2޹u9J~<;e9߻&VRԈ`* W?zx>Z0(ݾuT X1;E'D'q]g|߇蛊#\cf *e3$G ܪ>P7.+7E ?f8pq K6|UZ)ayjΤ i䉅Vve @&O;M䆶R#-t$pI߭E8ֱpdhЂuAcB'jJ% r}q署w:NmXZgph?y (ϝa:C=p1zbҘ=gB{n8^|Ed@V8^.y_} IDAT70DP1О[m0$Ǟ=} I݅FOZ0wSZ}'ғPY#hٓWnko'4%nt"7"JŢrG< mFo|?lPpQC!=!TID6%9 `u, Lп*fa \/第')^`FL`# qec+8EL*XFb1S[s،/!lh/"@:*>&$:MD"Tvu'Z'PL1N`cgtIY߾Jz$[vʷuqȍDUqcvz͍&2mkÀ10݃ZfenqJpwf0 m/k֋ "',^6[+j`9ՇV垢 $7hb'$؊l iibujOHɨb*=$UqX2.$'`lH2ؘ- 45l`b|Ttž={p뀹 @* Na|~t%;S*?S6VnQIL`H!hqE f34"/@A,Ʒ=a&@o4}^ JBpBIFn dW! v|cz'k-3ӨNT:GbdӞ}^qv{N]zQ#1괙΢^Dn!7hp 8tWC %́VEpK EN;aMiAB=#]zE AUqʉ/XN9ab|dҘwL`-}@2<.-}X 1n|寥وv#MzVSu]Nr,t"S)Luɏa~+ĐrL0;!}Xnx @BzV8 Dp XMr/΂ (fĩKF2rWTJPa_,f ]| 0==۠iKcg(FGhm@](]+#'9dvZm&khuܚСsLɩu22QbrbtT r ryr9^Ǐ޻Q_[&>ar~޹Xj &d0|)"O $@Tܷ:G%F4(/Ă",W"ɑ |斄XkND&茪)8lc @So'T YcǤ_E# 5>V/^drl0Qc25:٦I @$Gը]Oj B++q\al`n.f3dǽb}:cȠI ϝƃsR"&191\6|>l&\&FG`7G9|$:/sPȯ1^ʡO"u0Qb*3՝ʠW vO@<;赊`}Cmk/}6z|F’ tժH$s{|/ QrID~'VYlxn+|zqR¾KjV`7%Ů~X{[Q{'8&)爓!6(L\ D.!7'Bzq)[wi&7dgD c="ϸSFd2gs-4u7ֱVZ f6@%ᝧ%! 9of0"+~k^)M0Dxh# \G$G,~ٚX{BIX:/LQ{H4$!ڠ0T.D?#btǔ$GHL)Lk5Ƞ Ylᕗ,|(=p'Ȅۊc`㦄s0T/!a5$x#As.괰{)4..FnW)Da`a+(MBux)fwUd ,o?Ĺ¹2reɋha1Lw @B*u4X__jaA{41#f+icw<~l){G~0GX!$n9Vo2o6r'bXFx {;8|_4Ʋ3!!T@Fnh)BXCaT '!=Tjң8wYRiוr\pq8Cp<}7H•[j.T,0]`:,cMrCnvR)4Z͘3LMLQQLh%/# O ^j9F(hL6"bV@\}6UԼo;j9ѩ:ţ_l6l6` Ellt6[Dt&7tG|sKpOȐHG\hlb"9߈i![A.C \\:M8lGV9HƽjdUvCDr$ib  1|pH ]ss!V X1b24: aBy.1|'FgZlc*.^\LOxBRi)dirW{П;PBxj.LąT6~T hvRre>2 remRCXMChlnb&{\-rhV|mhCB:8fJIe _ c|]0)IXwG8h~[;pۜPÇ9M,^=C'9#Ё'=-.S+/Cn1K vPPD ܸ뿌GJRvc%EoNYG%76ͪ^Av vo!t[ t'@z*݀.$F[-#W:CȘt)Tm a>>*Q]lmn`d(|:*7r#f~p~BGW[+c"V:3Dvh&A%Ic1-pQq{,c °]\`k 6| FL`p<C :jE&[" Mۼ"Z `D3늢cp^h&6#٤l7rM 0:-J)!PopbAM܅C'7xw },lc_a` Ȧ)'fP)*Fj<+F1u0K.rUȨy="F3]U~x $ݶS/*3dW0wcFۘZ+\zDrT"i7`| 6du1C;]T"vb #c*B4&sF}m{!cZ%nD&-Aᇈr|RWAg һ Ep8n'0n%GvOWubKK,1c~U sٴClH*|' ֹNʿ8 *?ޫ}yyOK5}|; |2UE'NѬThLd'w\Ǒq7-p]ܗFDwJ_bO9Ħ +h"Y:oc 8w&:*(6%9'8tW~F2cere-_}Oős RG 9s781dDl? v b*n#=]>s?SMdȈQ=c ;nAEX} Qt4q믺YS֯Ṳ k0rTkU\x,N9 [Ep³ N+@<%F6たbtZH)1#3πZ4\i#wQȊa 5V],!SCšG/:JA|& =.%sAv"¨8FJ^#7!<]cK;hOcD A`t*O'-v*`40v{oZ= ToXYS?<AL0]I[s r.-%3„b `"sw h1}.q و?r,(*#>SxHaMKӴ> d*Tڅ̼5Y|6/Uu528h$oa;CH^68&#ARz aTzEUpxpf2 1l~ǀbx4{06rk"7Tʸ5åR,ln%B@D"73xfR j[J+_Q&.ᏡA,6w}gKCX?e[YF$|%@ķї{ľFtq97twV\-y;NQ(N꣸\d-I- u$7:LFH f褫<ңALET|0$#8 zd&k|ehJ;[܋xVi;Px-PP~~ ukPT@tfɐ |yEd\DL?ൽ_ ?oȻL”SL(T u(1)6bQq Tb]uF%AclR1^ Q_"sDʭKK퓿Tq{X_LwA9;yu 9BRlG߳ #!8$tH~dnqS24 iR|d&E1`3} 7&b{{atZnC[Lmr/kSZR`1y/{ !&7ZmFSJrՖcƑ0괱g޽UgvsA)S!"T7Ԣ]@s]U8A@ Faz'CQTDPv}M~ DZKC;6;\B#L<¶Ga#1Z$mb䟟\߿Uqā qhL\T$GCAJpʎSD!ɞ"I1 RQ*=s]S,E[(1e_r]!Vx#cN)g$xƾk@w?~XAӋʷJ?&+5QP;d *'QppDZFEADӷOQ]DlJmrzl@q\>'1['18$xyJ f QIkJ!^S!7 :g>FH Xwmdg7ű Qr!7G>&w"dheAۊ!RH<|}kqe qIaG5HTFSYw)~r+:5]GsEYdlEu jEp3I>uڍ zmFuLec7ߢ99'tow Cls0}E(8$z8*sqpoDͶxk* բ<Fb8EZ(W*SRc1BμB)˝j6&@ & zCp-p$rZDpDFÐ*Ͳ"}]/J">]CsFC4C\]Ց h!2oRFP̌PhύWӽ!ʬ𳎱M藽>@SDQ*yBeXb[:c0v)<GCQ>]Hgn . /뉶 #'*ؓ][u6[*rW~|7?8%4 dHNDjKʡCn017(bFHnok"C[R&ЩUBU'e˺@SQTu&E!-jBdWrč*m*ݾi%Uy 2>D6 ;[]"^6B*b{*7%쓬hi8x `Uw թPNw:NÉD Oz8w"`zzB:@ [pgsOXen]ć{deXVt"i (fP(̰]⺠8jG~$!/L!Vn{[oSzDFc I|jW%D[Bu#Hj_c* 8T*|=5t∤8Q~]92!9I#ͮNy:}Uqg5; vyA { zB| \ҮD 5&=>GT0Rdr1jI)Pkbf38 .bQZI8)aS#nFq ޶# VO;s Odԡ\CRLPaZ, IDATߛqڱ;))TZ3?)hDFr ih2(TLnuT2Mi }tK+=lLJ25+=irt>/DucqQȐ BDnX% 5%9JkU#A][?Lhn4@^x\GRzp oƫ7^@QֆsKۼ[7nqྣl!=CvJK,*: SȠtr#I]S?o EdXiWԶ j"G7O EUwSRXf]m:-7ɱI;FXlP8FT*~%-3Q=e*>AHz|RP>hUJmUzx$PEB$z#Jfpl~{vy0d@UHA/J)ڱ=18Tx ǾD6Sr$  v1wC^87jZSxJJ+ (Фc F叩0RiKz:dgPz:O!we*ޟ?zW@@J*xʽ׶6[ yIaȋwj- ; GdH^A4O&N ^aW ca4qΙ}6KnT$QΦЍEL;24fձ:LYBF6ib6?].=\)уvC(I_"7vy0CjIq|q)T$ZD)ʭiFCdCL/sao>ե⢟K 9|oZ '.4PVQ}xJ%mrO|&]IJbl)bM+ׯcAp GU.{/Wx0Eǁbv8s6H vZ/[.%ٻ"[(2#\\l"kLR2aA›?SMjSF0ro«88w3]E9ds!_SE 56 *J*ݾ"7l^\㶷f=8aRqD;VEAm ;쮾~(T{4RH 9df R,XhgQzj53qIB"=lŇ~bݶ"8qځ@ ~U.O}M̠t9 VE)_m'sf1qf)Z(aŅFR0,OEFiiP6O]dW4[QRdXգ˔"U$xTqؾ!.:Х˅mvE6=@Bp$Hq 4?HR ^Z*=`/Hzz< :J -HqC> L`-24yq\+LM@$&`T,,*A)k[ Ď)hO_]?:!Vqķ^[H Mh.١1Y^M"Y}XbvjVz,=3֤v Dec7t | a;FA1w/ ǹ",n8ɎXUʯ_í'k 7ycc8_9 uԝ4~}׶EΌp'h5';X*P6OA!_/E48GWaZ/$F@pDu:!9tFb#)UqDSD5r~GH6SM)☾jE 8h Tޟ u1F~U{s[$  v<~M 7Iae>SBbW?|nQoԑB ؄ux &K[槰|urp?'>7oVeؠ$ZwpPkV=2T`܆c&N zOeUq: [pAsRH!`lH R&BazY@!{qqiȤՙTtlHKK㬅(9an\oڳEhџ8i*9z_GvFGA^uCD?XH`7@tSwtO= 1H@C&e %KԚk~λņNJqqqR?.,+n+Z+{W5-+Y|ݐb`gzu+3+*z`ˬg~wq(JVzUP-WqCdo=|a.8/zkk!kU,૫Lj`{-XQ(*/e!8x9Zr:J|/*}AZjLT.2bܥ R "hS3gG E!77àq; oJUq;(!U_h"%BY2"S7jGv"Dnԑvq^jVy"CR!mq%:e,&j|GH'hPM cu9>19<(2fWŠ /'8rgR~2@фeVF+0v͑v J'nĔ ޽uo\"UfJq,ĿŇ>Zm@Qzv[';ֶ'| { ʦl+ ߾%(@Z@;II79S'5V-6zۓү*2/˘Lb2i8OY j8H\qW Ga#Oe_Qa.T]$'!H~ב0I>J":X@f>\7r@ bPV722þi$ [uϼ4HȑcC22/!B9Dx,e>;+mƭMPPb}vӕiS99<|XXxD~T(( 8pP]=]ڿ3ry.4ɲa/I!J_@u/Vn~x#9xUjbS% Id,)TX5˘$ R]~W:H"|:e}'xV%e)"zvXg, xq6+ǰ"6˾RH_$:e_]7"=0;)v0 G{o TYEB&ċHVg61u5lX3޺o`NUq"*2 a2:OCg>Wa<Ʀ- "0kPDǨBa̩cf˴1N~? z9vz*g4?%"A<7AJJ7|-'t$IP @a%Dr*8l}-@rĥ<- !vP~>,t8HŌ^sb$ȑcc6h 󦩌VP-… a8!>̞C@1sK3+u|8}[u}Ӳ^Pd=pLL:-t8or!`[.Y$a+W<>H$GOJ$g"zr$ ~^QrE-3%H2y"!,A*Sq@0@~!3["mW#18"14~~!#*qL>ɬ}ZWCȏbo#0>2'C)XR(R|ݻ8X0VTəuNJ8^W{O`j vwwvU{. c\^Z%|/+˯jcCgK wtQd"'B }Nݴu Oo_6E[k E'Yi}}' ()GխNĎpk;@vTJĀ;N)$~lp;d eïQ%Ni$SK8$A{Hoz' 5|,8`?sȱpp9PRc~1h%b5)P /`Әᓇ)bv4uhuc cScSZO ZQa7/+Рiwn0v-t:z9о \ͦMz\ w~o? =[l-LƝ])bx9lx :Ageb}>5lB mo A}m!,rg{ъ؏u,˟+?.'9_7i 21*9 x _ $X7PEeIᐠz.e?| 9 B Eb-cC5#`!LMAj{:+30vEq=l It\603Zm(t}P (8| c~>?loa6^~'^߶HX1 U #£ABw3-fioCaQ cMZr EPDJ,Wu5T |4¤iE#@CԎj"IKD$ʌ@NxVsD D"7_7J %DI=_Rq ٓp_CR e0s=7h#r?νqq U |)QRFG<"gi yPj(e5 8CX:qzz(0M( @0^@9FNzWS,wQlT{(+T&066{b~ӓ8|{G{TkU͌#8z|?^$.bG++y]lo=l8 #ntRzbc L&udp`zMFuP80{ITGXXuݾ{ J LXϽ4#;4^-nЗ2}dWvϗ;[&A$_k%ݪnC(/2n4Xۮ,͚Z({k5|jSX;@2e/ ɠ4@bMFRmO<{[a {:# BNrT-v~Sa3jL`ъvQ"UߌY`a+(HP\'m0jev/rF%>coWG/l׀9O hQ.}G=;{wI4p0%E=!>8rأxO NQI۴AQ&ރ@u:fjLt,-%׷q~ G!] \Ѻ:(к?b NM .6vw$~3Nz('D}g·{kiԊW˗kks8Aݣ87FAa ' z 5ׄUл&l`jkn twՍБwOnWu;g)dju&CԎ $Y+$&E ph!Ӳ?qDYCi$DI_QO)./Rw4%B%# cOW9rM8'0 Uc! ŋS8uHn&ɱnb:F[X\\˜PpW@P z .!oaG:аxd O<]&-^"d^fs[[^ߢZ(=$!"_"cx;!{Lc /E&=(;}HT_A 5[bA^ W~m>;G8 )bBIxJ< yBqNp G9Pj ??&VWʹ,lᡇ5όSn:=kЯDQT]ٵte(bѺf2NtP`=d|V)|Z85֢2 $Qdղԑ%7X"Nf'f.HG8#6[pKhαL巐JJlϏ}p}L\#{.ub,-f'9#~j IDAT;&eQ)VgSX\\0@HVgQ)VOp>a$xGlba3:qs 򌀾 "7x0}qG!=VW?mHe:N}z4s8YoXv^<"_p>Q쁠m*rIhU\lo!.cv0[fB!B<:IH x'>}O73Ss|KppeLS I`C!M};M NG{FFu DMr"&''q)~bw EnP-{;0Ø ө( MGhʅ2]cOhwڨk? )|j ?:>KzcuӸy6CQ}XCsm'#p`98}% ~I# ?:ȩf"cE?+ ܐ~FEr8I"F;X-61^ii-LT+$G@Her׾PU;xkmf"߃!%%(DGR!#ij!' G͡؋7]ox\3195'O:%i= bZ?W%F뷰tx@Ć&9KDUrض9\DKʑ4)Z+gY!tu1h607|0pm0?,A#7x k-W=:Iy,j0mo/kIaг^9풆Wϱ_#2R_;LyyZj UrafjGSF_n V'WId|q[\eȏmp {-ʌ%Ts?|9rA?q(9BŪhh48ySSSP똩X &Mz:f*N]LWqW a|q6 [B.CX%#6D։aQ l@alo7?Z W;7ͫHin!< |TξJ~9}<.l@1=9]Xox(r#.x ҅C!ST7(6. ^Pr #a>,mITkױ0 Y"@3 X^1Lω1p1!SGȑc[_Cb?ql[>i,{UptT`DAX/mәIә]BE8Up{p`.`;vCG 3Oa ef(Uzjh/iZM,d.|K827r EzaN-[XWɁ>|;Ae]0퓼vR: Xd75%?96rG{ qB.}3ZcL ^&'-g:ؠY46s@7VoGLV'2Qx lVopIi g]SgwvXiNb%O`Jp*jW/byemmMPt m* ls <ADT'ҠCKj+^|H+_beR;uCt@d^}~97^K.EH',R엡SqHR!͒z'qL WpȱP-UCFz$rcԬU9Qic,BZWPK(@9>9Lr=F1f~/ BpȉtX^،8Ԫ5B(3H CS2沔qC3,Xm^VWՃqũ{<K[lyX|jGM! U쨔Q YsE?baPqHHIC[/ ѵh_\%@ȑcٯ=˟%iyY&.\(SNLQwX7 tV9]rkh*8뻦C8XgIoMapt"H碉'=3T($O` 2whaN[jcha# Y YǶچ&>D~8K8h񆤂÷ 6$@oCĀwهQ*Y˴'3ҋ7IDȾ̲#0kc?7i1K@ڄS4\#G7d6hr%){H%֟59((F8 1cO2ԄRP .S@L/n呒T LGa-J0[\516=? #lck@"NU3ڤ X6YLJYM)Rj"|0i/q*7 3+ mY+戨\OACHlbۚd&DlH%@USTzS5mLK)# ڀ9rC] rYVUQr䩓Y"!BXN^=T-lnt" M9K#%t㱗.9蟄Y-]imvG5Ԧǰ𩟻O}~lg6Aכשm{%T:`"_ gA,1Y8 ~e?$ژ}ĢyԝCfy +8rسPwTzf\lnl8Μ9)%7)* bn3 j=ԺIX;vulל0 En_MP<'@?H) / p. G,D;u|Nk[>fs4Mj4n ]_cͶodXкIԕͨA~fG"7$ $(ߙ@v߰m4఑Ji[͌QNŤYT8,Pq<̀&EGV;6u >(ydlȑcso_3o I˙ʉ L騨k>IJ*CJωRh?%(#;{_ *5N?TimQ[l_|1q4-ً:I;+|.q W 6vsGFmJqŹ. PՈ=Wq<ڈUч`06UzD5_GĴY[ʻ~Vf~ofYaWHHI%"Z{-gNQǽN 4є+8rCPL!7N4^jBQ)K=pih6|+0?ĽC8ހ%.{͡~= 8l2tfr0-T $wZw0;1K'`XX8"GJU,aHJ"Hj{* 9&COA=[ ۇ}rP G NdA1 DZ9r ]>soKT/U Lrcrr> (4<wܣ@i5^8z(Ewv(W}TmTmbY Źɤ.IfnN@$+%6pa7`lr:9" oV 6ksusxy`u1,/_n$=Fu¼hծ1SټY"9-$6`TP22_S]t%ٶ[8Y&YN_mX\3'cK_Ϙ=da 1ue2!>…%@|lֻ:e;mM{;\9 0koQ6cu1&qm$=4ƀCnpZGC9h* h:"yy |ɍg2$12dmwX\\I߆ QGPys˕bZW7rP"3LhXOJpn>>\.`ɍ66UO?3 ~>'$;x^ù뗼yrDRJj-LqKPQmMqS?D׋"YWO꺏Y"7l!;`/U& ' 1Ծ("b?9+9rl[FFŇN}SSS /^DսKTpPh5NEA6bA*5 +cX L8}"]keW%R~@رgL'%T6@*5 a&ȢV9KTPvSQNm:ilܾCn7pksh6𑏾+Nc~G?|,;[O1'`;>=D D˪7Ȉ'-l`"%҃T%ȋ{d=.DVqϫ\'TGN{cod a|p 9 $.^@䤘ܐF8 61A.Qӳln`uEpERY䆙ADG[.i!~LJ0TB*> m!XZmSEi`,>7񉟽_'ãw7Әk;/=y/>? k8ùt"s(.]BGl(ң6<Ip H2c:A#˔gLff=6Z&6GLM0O[IC^&7`vJ9r|eFa:{y/܏!R+ZWE [&An5*Ev(^'YXu%|YHc‚ a~b&rh]#cz S1 n= UW17W߬,|/>?Xz6>U>xP\r[U1 bSN<`qs~a5z_J A>S7gfRRZa1Ɯg󞊊# g)PtT?]w~~>rGQɑc~|YY`\`wyGb=Yz APP,-.bqq $76B`$S8}WWL`pz/&Ax{ 1@ePϠJF |CL#{zUujgAo0<{ʰ;MZT51?ckbY4qWQ 89r[\9g|"4\=ږ8gj! {YU=m "?"GTP|}%d۾";V|oD=%6WpȱW x`Ɖ'%)~P<4)Ax aVXM?̎"05r-[JLnT#P"#zD+!9|g'א<2*mi[ks׌2RP\ z,yj_<{x7m0+(**94 ~\=XkYGD?S.OэNas0Qp|}X]S$C i;;pa3 \#"&Re[ܾT ჴɸ,90.\W^{An 扞 mǣP\R޻4˒7l*zG _Fm_H,!7KCˏfEhxуbw]_.~7>wb9\~u qk( \~'rJ u$.v8v?Q-2<>>\/ڐ(>2/T"$u$d-\_*PD\?>Wpȱڵ<.\M9'Olp(哃DjZC+_g!RņDBBA IDAT"C7GXuH[7Uax>>8)`\(>Y `#=8DO?QS[m|cq//_ښvn^ !7CC>LB#7ʂ,W )ٞᇽv{{R _iq)EyGȑc`:e<G!|Z#~vV^# K,O)Yr.+3Ծ=Wi$$9UodCm׀Cr:S믈u˞@D9/ Qo(^^ƅDg?{ګT|3(07w"9.c~WWLIz}P*8PN&E+ҖJG<߱ [ױph!^*c!={:oUL" Pqd]ՔȑcQoܰvUЏp7,P}EuT6^] ӕij_=w&x~p>#8rCPǗ= 6ya/n!Á A8Ì;ξlgo~ng~!590s&%r~+|_n o7o8z`1r$.In\uM! E/E<_I#u_gx/Y 30 Wpȱ'F)fI{MfBÞxĶhߧOFu\B*=ъ%-p&Od ۏEONC%G3Rk_2]*~Pb@>0F}-emKYE#G!F^ r+S'}~KOPm| go+$ 4kV!˲}p,..bqq{x51iE@p(L{%·%pbm &vҮ>8xx%x!§QZ=z\΢jۨVj+~?ۛc>+MxP[4syI|CMWG֜RmKpP2Q\|.[?B ɱph s O8S4bMy|q$J|ׯ׈K4d!~cO+:'8rNuhxG rēe&<EvyIF%l2[븄LxҊm&*@0ӎG9e ?#`B;rMbISG[*!%mtkTPhk*FoyrJHEpR@p;Drw_~u<-%=Z"mѤ:$$Bt0u~4?O$H5 Qw@:$_iG€ _K/M_qaHa)d-YKIH4!uG$/TyPAh3W8I,"XrwV.OaNP-FIp(| 8 &wT!{,p9RKtzD GtGbڎDq Ip8Ka%: S;x0o>Z#cRz|p2Q )$9x~:.Y9҇cOkʲjwV_# 2"/>8r:|+_qgϞp!zyfFKnh] Q/0j1a?Q8VATFMRU %:dmyܐ|*xUeNL CKNF9Ér@e$=- ǖkk4xl Z´_uxm<8QH܈# jPFA Zc/)GL$F˰7۟)ؘT(LDpQTr"ƯگFDg roq=/ 9aE:"$1 i &7hcU \"zFUᴇJ'C~菥Һ":L ԣ4O MHG8g3Ot?:~u\q ;- /g_Ͼ\o.7P2HDmvC `*'mJjƑ@7AeDT8'@˰0ֶ:,=Ht9r lg$aܛSyјS*TX݆,|IArd3'=":dHA+̈ȦZ ê%J l$AWJcne UH-N[YH̓7ZKwq0?D&xݮftl/I?a38%% uB׏JJ#%,@TOr$EQu<_5>3e`e+s to_||:|:>k>kFNw>Out}wo +_la:o>=@9 r YX, Kf~J2=8€iPH v2}LNJq_"w+8r XgaP"p[~33s[q6ƫ 0ylE=%bu#%ʇD/:$a80U(}Wٰ bP2uu%8uGu-=A3itKGtt Po>|3סm]~9e~ X:E g'jAY)AI20nCEVq {za ;S."*k)*C"JD12dGB /~N?C}p2$ z?_?`]K3Ll7aqqKKG-PT:E`#SX[S| Wxytz~><|oظP。4+*ZC󆲶MC^!ッ,oۻgbͯx|pP\6ѡpR*-.wyu߆nh\@㪩X]]G}'Wgˆl]˴߁(7F//ibOc!zB0L7*tf*>Cې9rdQ _[ @T:,-Ph); ĖB4iP`.Ov;ύF^!{)G>(6]Antv b8FJU #:(P f0g %~O "8 [0 CpD'8\e@jqyH(A<.[,H/xUzIב)|qB;HHKKu͌cwP/቟ّ+EFIlݧ_}@?~a 4y _\bxa_$ԾT?DA)d nab< @#'8r{ ={Vg,CDpICޠ),>A'q6 4 GFP1VzĄ%8t`2e&IpD;pֶ=D w& y%R32m.C`xv{6\,Gp#a 5Wġ.J萫SU%pF/7Q6/~c'7Çz} Ξ]!ashUŠI\ő16G 3F_Ό)8dAKNp1!8HwB#tjWV -Ip\m\G}WSM5P`US<0 q׃[PAa jWK1 !)l7"Ua. $8T2 B4 i!Hj**6ᱻ%܂)c|fGI>rI@P(SAb_q8bA>O $?Nߤik+'8r2uh̙38{lr$88K8X$7 gT T Aph=*8<-Prm:egzC73P!p ++@ mC`xFpaKCfD ώzC[iJp.M}ueח,0I;e,aȠH*12(J lO_{,?-d bL@fƎQ/0FB 9RD6X9aD}<ʅ2T]5Q(>)BmZ];)<:*#ݶҪGACuH-M8 K#%s1MLf!F>.C׈ \F6 Ib=gXFkDZŤ!=%WK?mH"7 ($9 ҄B`ysm>*t R ˠ:.$48ڃM叫4cFK|g/̿*hoZV팄 v/GsԄJP߃bv*ɑȑ#ao=׮&fa 8-ԞjQbP[$YoxJ Ш7Ln)NJ!8mV|zնb@[7Ol70U3=8vÞo) 2CP?~ !'0 &6}{(,<>Jj@Uӄ$qC;B`a>h"7[V_ťW͏N䖳gv17\v2IV}i&69a_۾8ohaYrd5 +8rHIpuu (xgQ䂣QǺz^MJCph= E&677QA`x $8(UBC0w RIT8-2B*! Fkr$D a:Irô-׷[.n;Sx٪bѼmUG xQ)zomG[]Y@[<əfvsCP۾ PvBzGq슳\/?Uе/(J=sˎ#Tz&2o~جh65: lDQqYzP#}޲gSF G !%)\:ZuK_'KXhT ֶk]M<,z5{ a)5rLe2Gea0Th>#\'2;Ao+dT:d-./ 4 Ej% ֵ¹߆tj܇faԂ;h\?'PvGّg~q_0++g[xQSI*=RjSJ}b#m ºR[e6.8ԖXk d퉀 KC%M"z9r$ȍ:wζBD(!}IՎwG]bAh3N3h:⁢4[)LM=ln]mMhqTPbC(%xKT\ =Z%|ZK2xj"O *{(7Q8PwyiDX5F.U#$(dRt߈ᧄi\][:y̡g?uyyJS^w.ߏGsG}w ^˯#>$vb:=4jL"RĐ IDAT`^'Te^jch }M>kc1D|\9bD^ F"KRX97 2B?P p! dE$(l9^8QWj*(hi%lt60UbS)Y}'"8R)Sv09ʋ u u}%pfW~9 +{+W $:&+e/wKpp]O_ X&!Xʎp>8Y3&La:Ǐ!]EE81o^HԎ~/Bi>[-qP=jd8&Xf|q싃撤!5>:ǁX_0=wbGFS{*z9#G Kr,/kXXd u_̙/)6 ~~:cY/ՉU< >xGac)2Dx[y]EFFY<~>8r+++8<qT O|^  >8x)(y˴l e4@ CX_ oHr&;H lAץX~M$>0tlWI$Y2u髕WՑ<{a3L! `^reɀ-v$"{}hxJ ʽ,Y&^%ӟcwmңۯ^_MnBG~9^B)?V_GT藉1"ږcK^W$uv2sQ#G>3Qzw>9C`Pu2 >$܁f:`TITĆXหous%Kait p^Mw<IO#;ctJ[k{KeNrU dgT*0 ߹!P^0> jv7 ,mI T > ny!<6E>1펒<~Y ӡH+A)=H={++g_ ƧŤG !XTHkK*s D!k=AzdDOX Wplr̙38{ BFJQJb^Y&[=3eaW.&s`, ZI$f}`?Hć$Hrch [o_O{/TrGaXc3/)Izy} 3|QP{"$>f7!:@M~'X" 9"`6xxSNW ޚrÈ׷B%dY4 K#{:uw1RqB4BF~]٦T-DžcDy~ '% &ZlwSj|{|ń4"7[9, *+: Q"&IGT` zo+C|ՕL~x3pվC)tf/>IS!4*Km=fٓG?F\#Ghdp ;NERk=BUFԏo4!EPF $'ۡ|-:*R;Da#ۦZESc0׊wG HLsD?BA[աKX?4*{5+T=T쉶ڄ O8]Fe22Mȵç\#GJXӠY_CvMF|FDy٧g@,:1bHrG #s68!SqxrO/R+1xE_!4n8M)=~ )8 go=-IOQ:BHd9%]fb!Wo, r \_b4⾳򊰗l0 uGE<WƝ}Ƕ01^&NN@h-Q؉` &=1Iz'8\m`cI6G@8zlS w8@/==S( >8r`eeϟ쒔w?' Xgv5TUQ']r.j KF锪ݦr|pQhk!ɇ>=&AAU!C܁j|VDAcb+Y!\:{7)*S6dm[B+!^bv4޺|.{Ɉ[0.ߧCdX [?.[zlz?_S~P(w`#I~8ӏ1Pư9ǙᇄGP\'q6lO(gI8e?8fSq 98ȼ ;uWUK!إ)2E~C9=h)n^pTZ̈*0F1FP1%7e@AGg\#xRT8wJ#2ՔGxs`/!ұFEZ<&^jwLOzi aAm;cuLc}b#D7siz [wM_3_Qbiع|x+5҃P[r얷2Q%},ё!,xIGU2KeM=6H\WI.U/#=s}#Mn9sm;ux]ő{m`~ Gsǝn *8676)LMM9G@!<Pr6r[{ v]Rz-罭1Z;@{%̠ t]~)uP_ɋD<O^]o&<9<=A27 ?T~ J!Q[ge=sX=WZן#;عxZ0?_^>rK'NFXx'1 t>p{KFD4Norcmmm~ [L^ RsS^,6趫j+VO:&aoWUi֑/kUqǿMO܆OoWC|7o/߃?Nj_ۯ.~[:f3q kz̴GcAk%ѵNԽ3s<Ll J1eReN^ԣQQg*.CAnw")EE` (9Acvb$r75!GQ̔R^B0{Dlܱ"G!.Ϫ:zk:<+E3:Щź2\uoЖ;*B[۰s*vn{|/~pװzf_UP7(8LkK ՚R]As{x> ^+cMc%H^=~w8qblKhOɆiQzopoVMQu"`Cxt$%dF" :I)09<3_ KԷ{G{P{JDCG41djT̕<熨\J4Q 5ĨKCL&r =</J#mq,ɱ8R @p_f=(| SjLHCEB55ehw챸cC@ДTnٹul 捛jIz<ʄy$7Sw^t'9 [Є-֮w\>EJV"=^#=78Neq?}_qw(BR6775!)"Qpװ}1Fi y0=l@$)vB!32XX>eDF]rKrl"r@OnXPѻ <0\KuKr=ʢ {!*PH#ّ"YNʿMAյ ̓r^[“BtjOzÌG[ he6tp >W._)FK9ONq':.rBL&(= [XYY"0 1H|7A / t?$FsEΝiHb[EIYd A^$e2Z)$+eS~T'/X*OhٔSPPc+?~)փ9AA^۾s#} 48:^SԠI0p~CPB`!*Z%nLxDzll\*6%T-W+,>8,#/+xK9}߇G?ĸxKV|.&dP8FD3Y$zGǷxяbe$q 1_.ηaeo4֐dYAmuƅ1 M!O2Y'.d*Y v]DW12VWQڒ̧t "?)8]K(Mn1~nt.>vGUo$/')!o߹]8W1t1ɡ$r\f!= p3ǬPۋ@s +O>lJя?+^S.rh8O1 ǀVm9N sϗ!) X^ INbee$Y&ۛ`>k[EG2"=L,ɍ CDFBm#|gG[gї0l/ܠ BfL$ Uq Q 9!|:t=f:#ͭ",E%w [dG>njϿ|y;斘piM^.4* :&i\!c<^C? |_,rt^9,.~"sww'K_“|Oi\|xB9!.s|k`[;nuAOp{| M!y7d$7& {{`aaK?gìU1 d~Eu PHL.#*/ XNRI5 rbI|m"!0Q]F$QܘahT5RlKD*< oraaSdGH߸y2oGXSG'?'8z5ݿKKKc*~7xE:P԰P ȢfqK)_F@Ä9ܭ]w݁nwݮ$=Jc^/ڋIQ~is1X/|zS.=#=Pxo,//cyy`Up!tI(:kI(ptt4Ck5Kixt/5MT""ntRҘ ]Onp9ar8AS~:Ξ.^U hïpa!#4P]UA(aC]dк 4ym wTUx2zTf Y H3b~*W>+i sVpCC΢f)WG:3Ь]-q s[@վPjRj;@*š/a)C 2A2g$ ̼8ԿV#}}=zs *)Cg9vww1L `cqq nI_{&t,'AJ6՛gg9 c IDAT"7t @AćFKr ~\XRwn;a.!Ujex21Y` h|}&;f~żXX"0ߐ")LH( / u}+ې'G+ɍ:1Ӄo==66.S/ap)"~WO]-lyfoinZc^WsEH(z}bW--amϱC'q=c.oX^Ւy{{,--c0<@@u~ëx1g}B5yo\dxUD=O Cs-EyL O.K5-x,ltME<43GDjJ%,Y r<_}^Ʒ'A>0M6ꌈ}#hQcQ5gIrh yMHBx}ظ.}$=vv~^{m ?UܼA`XHE<&BtfTyl<;Lߘ~߫gL1Kӗ㚯ƗBg|Q~4j _Y?Yޠ!'7%Cv`NSM{!J2,<%ݯ31#^ LCT|R~Yۜ\'myUq_::$^=JOgN-e/J*UK :o taG+#)Y6ck=8z>/`4:,..ƍkXZ*QIln7cwwIC8gg}AH)YXH1;;,.?ʁ%{2g} 7|Eq9r^r zĊ6D3%&+X_>mR+J֕_s%B¿XA o!JTl?ӓ ]xJb"V8b4QϗV~7&E o5r>N^ ٓCu}"+N2|q :y{ܨQzq|9<x漐-SBqO@uQsg5>SϒЇx_]]2nAbaanB77o MobQaaaq9=̰B0?V ^vYrrp؀kP7qzpJrnj;9=aGr&>A=d!@Bn[ Vd,[Lc PnLH3$:+g+{?Zm4R"OVEjեF<$ ٣8sA'dGEz+X_7t W<?ow^ʫE|@Y6pKO2 Jn4 c\WSWOf BN082vmguHr|HOe\`.";عq;uJ_v>Ӄ•\S|J;K_“O?&<3#y,~=m$FҞxo2]#Ȝs?M=zGD_(=Tvċ#=pxUy6\C͎&]L* ȩB#i<țovEHYBjo^*Lq࿳I̗433 FE،s' B2P+۟zg6c=rt] 2 ){_am|󢧇ayGݾԛB7m7+/J-Zo >Lj,`rQm+fWy/r7yO(lA㎚Ǯ:ehF=>o:/JGWs/]'2j? Yٹ7nbcc_"*'H7O9?5J҃ ܾyztMGA4d@nd9\*п!U_\t΍B՛IMJc}7lme<2Vm9-3ۙ <9>DܐK>ɑJ}2rE ZEs2[ },T<ЄTBzd0ٔۼzq4.4V4=7.:MhDM_x=}Qw}<}Q;wuK/Mlnnb<@"^e> O| .~s?&OZyӥ{uΞ!4F'Q7<<Oz-b<gc=637 S5n>%6o bl1t]v02(b`eR 8  6Tɋ|#~m+2|s 7IĐ'h^M`x/)s4j싅Ҭ5#uia[u<|oZB !3=ֶ CQ uqF.ě|Av܋\*.^¾/~%ap. ,MAqW~\ꪣ &b}< g s=ѣ5V|ssf˱Ɣ&Ӳ5|]{zL_#-DN|g(?)D' D2  B!7|$N4s!u+dFK";.D+%ѱ72tnBݽ_|z3EW^suVG]"9BRs.b_Q Bt+g>.W{)aIzt%<+ o8vӜ٠Р>D܃8nmmdG00&mٕΉ֓fL0sLJ(] =.T&׆ΘڨBLȼN!7r*!acFs@J>O*B5W$Q#|_=$~B<:fDb6tQUhi;I,jȍ=9.)W{]wILy=e"S>]lll4f٠V"ӮdDs ТMDyD611}JM7/y"F1!uQ(6D>ž Ehx(suD>Cmux=Dɦ" @4Ǒ&dS~L<ގ˷Dsz>SmeSx4&g&B]\zJ';P{*NeSsaGIsiTg7F"Lڍk8wZ!,{)ӟލwF<4$^"2\EՔU҃/lI!/,s㘯̓x'b&2OtSA݂X؉ 5"'8zX3Lpԧ|Lp 쐸W"@Aa+X ׆ cz҄O49F ̧8/ t+oo҈ڭQ(7&@l{np[G|/%!5 1Е0*`[o!]\ x~Kk'N[er;+Uܼq7o, =^]ϡB9عn*< X__)ǸtRO t?-KXU{@]۾ss~K*LXʅ|L7BNI^Y[ubt)(]j":*4FEƥJ%Ǵf ;rY^veAQidHLegFD!В+'WEϊ6FÀ .&J#IȈZ &.2T/= _`*b믷OU^0* )!/-7vJCEz*]VsP>+;AnLo)GOph>,`mmHJF"IRTOd)1 <94C.˘{z^È"t 'Qӑ *|~'**G! CO|3qے9&G XOx30~te~ɲ}f/}")H=D;!~)$%w{Vq1!}5C8,l-Oh_xOs|Λ\B楡"=d[A?z^1K$<++am~=uQңqhCP?oU*"s#;dTtbW)J:m=IT3#robGnP'\"\Bx8 ݢɷScu#&!Tb0[>ǒҲ|X駭#T zYG :w崂g&1x \WOiWs$J*- ,TnGwߎ};N9 wwx/ů^y v7S=-7otTmUO2ڣǜI2*cE'{0mD7O*&aDG"7Ȧx /7x]ں8.v9%H`k#įB䆾PGmiȫZ,<96) [x s%C " =E$ِ&X?߲"gMvz)]zIF"GkNh_[C⪳k Kgʊ?q^\E}߇GTA j{z@<=:t|3|?5SA =F6gEp,"Cwb$8wH$-O-lm {dMpd r^5;l˾zC[Imn<BV\EGpW)#kKp_+#EcKf6]y)T7|eV(1x!a)kwoc}; nܳ * }k 6sy:Ѻ^P./='lj\yxOd.H.^]ҩK=whJOp1@MrXӃ +K2ACpP¨$[&b.,FZ•+ݫ޼%㭢LkGQe Gڃ;Ba&⎩9x{q(t{sG熅q>9`0cC^.%u7^RAw%^ea½Sb7]MyƊN}ߤn3$0" )"S]# 9Q݊M[vڋg4b\^Hw YX) IDATu9AۄxosAz-%86h=5}<Ѕ-=VƆUM\t/ :a!'AS(5@:)ނ'8DLY i;I>'jp'i_ܓ 'tTY3!/@吴R1fA&ȪtΙfd JT%1䉑@vr" kY"ǃ?XAeV$G ZuzLn0y~$q˞k8eIk}d /Cx\v%g>\t $x<.>ԧ>ը=DeaEa~xRmIh1V[Qo[„TpULmɊy>|l(J6 ?I6(  hZ}4w5e!ŵk8z5ArޠABUR:tEce)7l<%z2 -=x6sդJ#U[xt |߬q'=HZDz8 IPjPyGOpbssSYҥKFcssV$7dH-RpCgD Mhċ:^U>`%:$9^ nyȐE9 =81V 8z@$Nds? @ !G^!**h%NFG`ƛadIm/L8qחogg7!E^Lk2 Aymꛍ 6UrU9YG"J340|HrrwQ%eHw< !7rQ^zq CH[Ќ{MH v`oSK8ώC`3ĹzG[T*j@^B|#JA H#d7tS"h(KWI"j]i΋tؠ  [S^HS~u]ox,漺߳0,Kv#[ f{ƒEǽ<ȹ ΒIrH i#(= o46+&bDVngL}"-^s,7_mo3`ȗ5s!,aVr(~'߰H*: ߌ7pfxZTKCk"3ve^TWfM̴zf-^Zd%I AS.桙NRD6BӹDdIKU7FW:kxry5K2UsTCk Boo Ba?}C\}Q1Չv׶q0eUdb\_b }쬔wLvhGbƚ1u<CuXK'0/ěsxv> zLIq HJ=#677=$g CnԈ ybšBpɩ YYbv Jcr|QG{:BTXTMሌJ+Dz:llMI8K`H\ܯPnJ+$zP:wtgJ ) kPq/&IZ vZՏ8m[c.KCt9p&=萆zHu-=^hr!zjytOp666$:7fB x,JAbsSʡ0=5$$0*O &vK~ rL*Je Q;X/*z+Mn!Oޠ?1u]]bk!R03Q-_ڨ$$d,nt?E\q(KĪ`NCHI $51ɡOfv$;:4y0JN}W|{ˇ5N%5 GMUm0),uI$ $+# IGklnnJT0)}A#؞J)N'58hpp ӤjXRʆKE0 *A1"d0PIl`O L@ b(WD*j@֋y;C"Q%J^V!ŌKit->Voι՞wG$j}̳'߃oKE[ n EL0EcB.$7paєAUB yl dY7 HйNC[#;]%8El QjKo#י)q =Ԑt{=,4TrCnƹA𮈈۔ ^&7G5Xt:1F)|d f =|=XZv`YKJBK%TZL.G#Ͼ`F0]أZ%%VOza[W !*-Ou ;&tdx}ڹj$%^Ala8vܠn+ADW HtؐrHr7w;(W눶=Cx\Ըt6WOD&~L*Qc:Xxqs *%P$mDO~;qp5A/}{͕tޒ4ElB"7T|5{97"ԃ.߱G ݄Vȃ2Z/<ɳ)RnvU#ibv\~VI0Ufc0NtUij6\CITN;_ңiGWIP:!7ry/Q8pzojn9XŦ6DŒr"- ֡>>ِvr a&枴}H pɆIuN U |\3!7#4y2H}61V Lr(9MfKvN9?V|6yF1gh ]`]/I<Ʃ.FOGOp~a)q}Ybr8aXd0AAߊ1 Z=8Z X2^֕RrL0\T!~+975e{a%\C\⥸%u<88idş6ɍO&:!\fԘŪ$T ݐy2; 'KC VfcJx@45P[>>5=c]?ސKa6Cz$m'8zx/r666zrcXƽb~aIhHY' +SNe5Hj\goIyXG4q#;ܽ:*,œӝKZHο{s1ZYФEcYȓ>Z #0hxd!u|g}=6AdB/׹FmS^GV259Bvxk4AD)2lZ15^eKk`- 㜱WFqGgKҢ5rk!I;OZ0[*Ĕkkk<Юze|[[[X[[:oP{wh/^ C.xqȬnO쒹(GWزFQ^lˎ*#nr8 n[5)ȎfeIB$PrN+<%L4E2\1uM8YN A<\vvFyN$CS^Uߐ?ijA0䔎 9dCڵRk3x9C,Q 2-P5bO 70%h s֦Anc%Fנ$84G)A '?ݜjgApLL8trD2B(V&C]ل;Y2-آG;] hf"8WƳB%j&ˍi.*!8t].˦'Ϳq#6d+ySY6bAҊSG>%<#]j KAyLM-K{Wh!48Ehm/o(!T DEH$8Jl K@8 aߞyu+ b𻆑X //].exte?sƒND9ӥӞsHr?9x(=z9?._|84GFB[$GɊ^2jo{ǏLcC'GaLxyqjЬE ؐP{7f]t myK jJ{Cy9$Qh+lAJGaB ӥ!9.EԞy_;PgΰGN5 y WEp`CzhumȞcQzp~ ao"*Ah'8< ?ҽJÓ`6Yl؊ilv5XC2 IDATwMC%bPUC#/᭫Ss2x*?$i۔v@+,@DHYזcs={j B.H2ң'8zs_9=X#g ⊉)e$t5֘Qa*ӱ*2_A?ymɒv0aqcrgdlJ$C'h(l2 ICSk4Ky^ ds}j#v8\#+F%;oݻ՘iz/oS@cUQApȠ#=HLlsw}Wzϼ / n-s;`W( F;c$*_Ζ CYeʛ#: C6yD 룣6ت5C SEաHnHƵpih,S-4+#<3$fHZDR~ga.#8YGΣlaLu,SaeÉg6#.riAGz!uN?w\ 8=z9|\4b{oӱl]|bʍE PEKJ|1l2\e/eI>'Gz3 "B!+QH'>yTCUX!wQ#"l@͐2趇tT& *!i0XbELd2mi!CԃK4BXcfCN!"t\Nuζ@Gɨs2EspFy OFzjcN3vS  =RP=EYLv/H'j%Wz3\6} oIO2ZL"v^(77ri҇,,iB/Ru䚰&reX,Z O7ojUxaKNc'n:h T5?s,u~ZݚfzGO#ݳ0t9<2ls[sQGM)hfi][zZL&ҖN4` `+TRWHםtȟܨڨH sǚ OI(uXA ZH 0 ա9$iV(! Q2jP7$;htsWw֫sYv-tRGD GꋃgE2xMkD{jpo!l8#$q[&2\ɑITG ʿiC&'ē=9tRhBD\y8^ b@U2Jq (:j dOyutv:v^̀>Q[61uE[iAϯUZ5w8?=ѣ1us#qiai7uy#J“-xZn3#!"-@'-Łzײkd5IgYfӁ.nCkT-)H[Ixa(=F❐ 8) p3ܼ*aʡk"TD,H]"^wZEU ]"@Opqyh%!"qmr j¹9\۾fgz[gGf0&cԓt|GF.F?we(DO<~P G["kszp7&7_ {r0WDɑ[,L9ьBz ?)4V #7\ͭKaI ya]5գZDĚ׿Rd;iR|Bm] '…=r%<Z叻r Xg=7jz =ѣqU+d@$ s1=JA1)/ƥ.FoC9>:6ck’$d!t)E:n՘ɱIs*2Y6:TgE+'q%ysRcA!_ou›ÿ<+$AηڎM]1.8mk*6qD٢wGç8T. J z<[c҅kG@},BOpq 01.*Hs|2/"lJt(CdQ"#9TI63!2L'iBVEȋZqHVT5ɡl l hYAfytWZ];}ֹ78BC`⑿*z:= G]E0VO3lh-iaTlUt%$E_bo%JRӮRUQZzwjԅX)1zBdS(X[95RdOū3;܎Md(85$GcGC ؍nBFNYYBtkk=ѣqlWW9RZX/غDFf<ɡ )7]}%j@k E0!6*㍨v UuP%] X 12ђ3\!G4A +Xe g$VcZ B݄8R&eGAX CÄŪkDSy<1=ggS=HɆƳc6%zk#DՖ.!›h}M` =ZiHH,80 * >T|#.Ek H=U lF9Ì GLH􉾔\O)-TL\:M:4UHVXURN yX:Ƙ#<KL`(peF<$" aTjk  xg!:fy*!:x#8:Cx\K64t6EМm`] ,BQ'8z86X?^|>?PP5Cd7rhB XDL ]R&1G7^/H5H*hofp Q%Keϙk%Qv&q%! c 6vWGNmQXWִ:yr͕rdg5h]kzhݨ-Z 'FoΤ0uFExxx4 ԙ0Dxy-mg 95=zwy.BRhJat"V utqPk-EP )HW\V'*fAha1,󘆣R X5׍1j Dj&;ichZh٨,Ntk7x$^p~JZGs{LѣGp\ˮ&SDaPhhSzEtx߸C;N#`9F1lzpɁC0ДE-=]#QJHYaH(T<*`G!Ҡjy_7`H 9d:52wGtpNl<8Ng{k^kʜ'8z8&?(az86!M<*Յ{!8&[n /UU+kJ*Q̕iZ2ؾ-|I"+~dJ )|ĖgZxAC1&٦:3d+uo mڮ&!2+#h(hqidǣD(IThNY  Agi2KZ=ѣqlEXe0T.}'7ltn#Pt&*C8~d)޷3kAd@|bFɨot53t1pQQu0 n]#ơ<_tlA; &,&B;ٶ~-B3\q֠F=>7PP=CBOI9~2KìNx]dRB 9?ye6Bx8YZю'8z8Fxיwwyqe,W@dJHG"a!M\hKrt«Œxqh^se@MP\?XᾠDĖGdǘzsHV O8V832=535 ?3 ;91|X !AU[$1Y kٵpx3%[ G .!:ŁLb:M)9f0}>Ovu"9–/*4S{՜Ó5xdLrd>.ׄ\'l>Y: j^yi7ɨ$l[_5Аf'*h/gx,ZtFNx4ä4א ȱ])X%A oƄV֕ sXs~iԆ ރGCa0ڶIyKb !` :Ŕɣ2ÅYjWbIW(zGJ/X{|o:'D;dX}HlHd8 ^]@q:BaIl<:}ӎ^。.*܈b䣞0y'mGUPog@` W;K@* m[÷Y]2=1fe3jxwܜ0UDf!:6$ƍZlN3-AqTc쮕% =vm遺MfaCUQlUVAkgT{l`ܾ0 +x'ءZlX3,BbP̛tP'%aCFEP'.q6-o!Qra w=z "F 1AiOhyq!eN?#7AA)[ڶ2  C;B2\ȎWL)٧\wSEv8)C.E3^2^<3 !ct3GeF:K74`:%D-,jArD7ɜ!H*!9J)D"wBoV]o0;],=zKKs.Nf)Wt*r*C @$a"cT$4f<ˁ3A ٱ2LMR{%A<\~DFfw>[ dӅǣ~o' 톉UiE3EH=;<'0}!;Όi+BӔ7scZ;t&zGcۏae4"2C2{)BUY1Tx$D1dhU ;ל<LZҙ=N9ANGvUs"9Bn=9kTa'k{Iγ)#o=*MEd8WB,FCţ JC{Oj4nv')"ƣNv@T 2P"l[407('rSkrL~q26$j,gFHssሞ+oWRb|`29 d`&AR׊gHbXgHSw,uU$,4FVDwT;9x5_hVjyEx Qu$ Wl{z^H  tG$ NWD%ˉPa0_faOx(ؾ?n)6MjP{S1g=l n_$ -IKq3۩vlKfѩV qGn\ qRjw{qGkc=yX~`qO*3ÛA$R6\R0"HQ#2U _`ugA8Cmz}sp444\_Ylh#%qrDgTur [BCb2WCtfRD_oDw DyT}7>Yf`/TGwo{ž(x|ZSĚsMW #68K@ϧŹ`;BZfoJ`2pfŹX!TTC d ";(:xۈܹ%%Go4GCWw?C/޿'==lr^3@iJBY!":9&2Y.ۼfFU!yf2dSw:¹@Lvҽkmy v5@rw!.Ǵ5sKZ :cv{UP9zxvv4R8/8eCj4#qxc2Z/7Q:047paZ>ǯBٝ >Da ĝ[FY_r@sp44|x{y>X ۿpE*- lyQ n&'>\etIEw2ީà#Gᓑ&3)&Dct*DPK|&_c6wt F_ێ &&f13◛pi)ge.Z)IӞ3'I>cUNn؎ ]3hϋ82].p9Fhhh@8G>4|`l z$Aqr2jc9y&7ECFGn3ٌq7XJñ@3O?µ)r~ruH " NۖaEGo"h d,vC7Pg^R%b:V3m=#]V,'E%j0 |u$/stzgj?W蘝A)cF#8r=.&-MfB v #7`S9|:LNpzd2LmG+Ħ%#s 򛃣FA}W O8ʙUK0" wV- Ar-Ehj\CKNŽ2 P9RDhN-3Cx&jF;Xcؗ&O jnKL>'6ADeh-9nаhI;; %`}Dƺ1r?" ԞvGo-N6/`W szHDI)hbć.qbhrmX\Nс?X$qNΏΉ4!i;rr ælsיC/c@ݮˣ6$|8|uj; e6F_x軞tzL2qnsw/ёyvJ*"oa)b:84HyrmPj:=4׎:9젞%ne= m[g{*N @ ت9?Ücf+ 1_z hhj?/ȸL/H\8/0݃ m>Ɂ|e990, ֔%$ؼꪣ6o[RQ[)@aÊ@/h1jpӣ&n_ڌ!LU-TlnZK6p{-S⤸6 ьœbkO{TQl 9VIuu{aINJCzHe~y̵!#L|3UodxW =Οhhh}=lL5^_sv_-7420ECۮu9aUpxCT118VzoMRQVrSrUTz`sQKTlA#9brt)c*.*Y8EV6J̶ʱEuT] Ҏ$ ##^ 3$ yBsUgw vYJ)gTmh b-P ȽDXmC?hooiLjv'n(QNrW$ yaۼw䐒iFPF h^mrr0SPnK Y8W}x11٧M}qDV%,gLGW)Euڕţ@9T׈?-A4>w:b,M:I4scozgaùr8xxAc!wx{X.%k DѡU^:/jXʲ Z%# Yz2ψhhavoi\" |JX)QP:9mZ/CT| JD"szN GD\'s] L)'ީKT /(+pttW=lK.5y?_B6[j4~ dž)B3Գkn:,/l,ߴy*K2?\9 /6/]^YΪΆEU*QW26GCW_R\0xMLk/so6+ >Ny.W,Uw,9cԈ0߅U8<.0+B:Fs(Ƃ3e. ZEJ9r5CZ|#)"bZ+};`qϖQ/{̭298W!Bh8U?#z980*^(1<`d9:G@*q6jAb.wGNjs[D}OV8\M Jɩnss🿁:ɬS[)B7ܳ5:-"TlI,Y}Gt:Jε3t=g.9Ǎv2.Fi쌥莪{\uxDG]58;AU$q\QD茘9=*p6gCgs2(hOvmg!5ӨSBG#SjS[#DQH 9e+D#$yf8y}8 @%YS!]Qd-ʵ ?9v/ퟏ$M†: Ǥ!#d\Ko%J6/LEײM9I`s yV1Z’sN -Drt; {鮹%< Otv9֋4ԙUBA)DGL8N)kȋ3cHp1KOF#df~zRK,#y7rC"GNiγ1Fdb52~Ҩ 8̨x)]?A |JBOfӈ1Ɣ2MYdVWB8LԱN.ޙhϠ0o֭/ߊk(ȸ5lon^Zd 0v#ڂ^6T\l10ojS6Rdr}aDX]dC)8^'FLXOagfL.U/!R29w.KᏔ98zټ>NkfC kP^CaB;NsFqrl@ef~q_aHtx9MۙO=pKT:T4m[0pnJvWv€]!E'9IڻVY5\IlA0'لp%GPe!uqΗ1P $rc \m\\⌘*sKa0ud+>K]Ce\.D\R@98rL;=^qE%rc:L?s.ekQݫ,6qssbY((:F{9r3 w1MY\سv4mԎHi/c#Cp b-P08<*DBO::U,&txĺO,K+)qaRS4GCC?_0ZtxgW7| vreO?/g)g 8v R{ԎeOsjcATgHnӺс#<_ =pP PQ!\ yK0~'&@uP8Ֆ3( ۖ:rc=9V֫0dŲ/7a.N$9$}2Yt= ]X%Oͷo97}B5jDLz(c%sPN*E\ҒCtFZūV\v>DT`PM(gh!d,ө#5X[)5 KY8Fꢣ*+kuT;u^} Atcs^R [ԁFhhh˻_Y?}OB-3<z\+)}\.f"9q_VDmz谣c͗8 v@! eOiMa4ʨiB.YVb&ތ8|p<0vKZF2-K1-[9k]b V2z-2b-\?8}F1䌾cĢ6a ڢ%¬|R;'Օm'K:|G $ IDAT0 E~$T2+"6\U3tb%EifKι7k *{";ݶ8W:6֖Qk,8":8`+L੯TpH+U+Q4J."*Y RG@<.Ggضw st|aN hhf@%Mhpn99~$=or!L)!+9?N@EsW;Q"i%=%5M\w&܉,^u[YxŪZNy~zs@Ff#4~ *Lsκ/¤O-0 +FR^?!CX:qott|<|\\|v*zz|Q>h?|x'nB0v `zΆ BS)Dl-"HfeA62hah,;DJ1w[ꕗE\WK?'c*gj}lwnm0]ӝ !0[rQ%Dsp444!ߒs!91&댃rUjH>#mK x)s`]Zfa;EqOGsq:eY%kf/veB1SE2IPUd Ň ĎXS4׵)n˛>h<쌱zmK0KKrueL*eEtz/pv\ݩ4ET`wrލVJ2)+ ~moɹhɑ\E9SW c6:KP(HTH62nG^7Fp6O?tdE#=@?z2]FkL'K*410[?Ck.sh>#Ez,;Ͷ:w/DYqY "vI} I sޟŖԇ"!80X\Yuho _˓}|&0zzEsq 7l2x!2a@0g'>!(rvvO; U)ضy>Nd$5pi'GQDFwe0}9-*YQSp5YpfGbe\pvNmw7:#f;0Ԋ{bSc4Xb8{v>~ 9z98=d9)e*蠢!DF,IJ#"~_('r TЈkӧE>cc 6XG;/Ò!6_umUs !$䌫h7HPK Y yR"S kHchweA]IZf3~wOAN@}@904gV&nfZ?B{UXTUz΅6{q?QbNj(ԇ-T!n%/C*Kbh?~yKq.7\F+/<eT1 E_n tӑPy;TN|q"b:qVg)+S"\uIi x z ce6{=䕙;&dÃf lГu,(e)&yP [ׁvkGoaYJvQì_tt8 |Wl1]uϾSQOtxwq/F8CF[ 9ycu׌ӡjB{ B9ɠ@Pn KP[$F$l, |f6Bة/AENGadeӆ!y!BC10/*W2+I';7o'D-UAF^XՉrk9C3猢U8:f{xz-wthUV޳SEPDGG+ q9P\:~s981~3|שrY˗ʜ)Drl*4(e؀qx֗:̺*.<&c17]xLXY6a)1;|u@|smmCÁ#=A䕫(*t]\瀓b)㈲P%Xͬ<`PQv54ٱܲJ+AIeqT{\<#M.'x3+^t,$-b,&sM &9w79812.%WXh͋Qf "R$Ĝã{p'EGsu*͒op >sGKf =NnU-*&_Kn1OlaPT]h =[Sc!GÐd^1ouJ³,0:. ql;x9;j#cͤgvŹD ;;r`byF9dg|@B/͉B1#؜Rcp=Vt\dXnw RZKZ]]]e(uبs;9?7}ho߼/8NqviYQgrRpӭiSwoQB9;S8F>{-/ n|$Gd!eô q~Ȅ{jI2*bĝP(_C hh&amc#T@r=5+W}a /զERH7X [;}<tzop/f{ Є; ve9rVEtlmk&Ip|ө 9af5]*nQzNJdoJv, /v_dk/+x?>TOr'0;,βK ɡc _7\IFIuGh "UB16Oe#Xv2qvG,ۖ\rBziS] kvxdg0_ 0[ꨄB51}eQxg3!,zi2uIx$'懌i8Gއ'QeUBG' O[]o8QU!Ubti:ِaipͽ[\tlTnޙM1*!CrZ/ё9: ; }\pHlz;9T,%^gsGy\j xLqcsӰw ɍȐSJwY: T# v0Yj+3nztA(Ftȳbg3/cjm[KGwOƟ$ή[gV)'7Hu,&ܖ`~9ky*slzcim]*Dm6nT6TF@-9l[K2vS7 itvl-.-,3= e1:jKیQ!:?Fu84GCCWe? Z@*rM>>A1bIIƩ([ <;BayEh)fZ2+qx>D\Qž 5[P;C4 uKE ')ʯGo𭥷W²3"96e >7Isu&<#xwX$x;;ٱܚՈ093^IDzٌdIKFGG-\ PGTKwdaGo[.Ue{؈hhy_81e-6`a§!Hc,Dq zu)0DR$76o,iĪz .zEAk&(dY۟@Hdx@3Rr4GCC{ɉH <@Rr']I'n+2,Yi#GCtl0~"GH򝠢0/p8y-|o \NLT6 dm^$?.?eN %CBy3/n_j!u3ZO)Ám9Ilm;oK+a&pMSLŀF1tk"+B29e83Bg_.&D˚!$P&57iMjkx@QB/!qz~s~w7.ι l'H 4 D9CA҇ :_<)^L2O6j_cç#:؎ZO79$;B@,H1soDc$s.9n)d]ZeIv; 4iA6Fdl4Vb5vqI?r ˗p;.@a)9fʸ BL>/_'M2 촂d~eQu}UhoȪ99vJ1YGQeQ:9zM~&Fqp:˃%=Rݫ.sTAсɲp64(9fbmmyAOy[)lT9Wo2Y#e戙1ͻDÐ6P2)]h"2f6Ӷf.P5tnsLJX,_JgF]=ooKLDd=rt8[}o3]*c`lv1"pd5,6Xzb',UXX9Qn)EuP׽{"khox7ը";/%.(v7 6+aĤm O U%2Dz I3j7ވȒbO| v-MLu7:*'w9; >qxLAt$X?<nH[::$^b/() ߥjY/3٩4s٥řfKC/a-9@~cKӢnF eݠ%l&fLeW6'F]-qV1_!4-8#Eθأȉ:wmQv "W[r ˚hbHeʋ(99jx't _CQWF XN  .dXt۾TbfA<3W{Vb^_p≗MK}%mhZy.p;8JLao.Q{82F)*TFf, lm6exlced$NA7S|}(fB,N+A.,i$KҶS sv0r][j5m 8pn Uŷ+q]!m̊I"#^&6I2Sq2,/"sQ!LL9NQ'$ւ,i)J7㖊fKZ\β.Gs2|7'L;aALoچMop8f&N$7枮 z!zñqH>HOaR5Gh_9q2['-6"bWW#OO=;[J4t9 >IW}**e`ie\JcgdY@A̖gľA?[:>?V2}!Xit=yMrvǮኊXIgUf Gq Ym;VuNJO^;:KC,kؿGLķR&P$#Ҋ#C5ba\fT3(ꑞ{fZPԚ)_yDT ܥȊ]_hGy;wA'Ir*@ZVkE'P~v*\U[T +NqK,mz8ޏ$î2W9D_km@lgmԖu3tva{hKZI?}} F},1@ScUeei븽z ?~*  IDATjve8uˆ3џ86˛0"AQ1j˾Be̐gI1%6WDzbQy⎱X+ )xa]5(@sp444xdk#M Wwg^?Ujrcfi 2pNBDvt?+g9$f0Qm,*o:x)CyQ:M>٥5.E'24ĝn=(ҕRdX/S3HgVn%uoJjHV/h ] .LI3d/\yD|e-i6UZ4GCCÈwo0 KXrttư~b&qJwrs\O4 -$?uktZ&H–ins'A&q@D-(e aTI|d7z%1|Ѐ~_) 1gs~;#2IK=itlq4KOZRS謨}G['h OsVdE$C"QUܑ uYeKLڣ#/vtl_ kjR.i2{;6Z%ŃI4mE^ۭ/x;.U'bl,,i$첨R#U)xC9t$EeOs6Og3N&k!F~_sQhhh@_J84#uɊun ֥2$U:9tb [ ?ĠD=BhG-hm3cϼ8}zⶳݦ.2XTg 0IlSNmJhPx<'$6M%aDtt軞$+9STCoA,)'m pyrrj95rLmし?>_A.3A'r+7c?Xکd,ƤP\lqN}vJE^*K3Cˋ21{;pjZ>UceVCsp444L/{N F%4]W`_r ө<~[տ`rtd:c<&~8;)Cїi RIuE J4EiB-E෽rwe d)GJ wm3~oF\(v IOmX!݁ѧEƫ=p$.Uk'HC~e'b>;69rF O@@TJ芲㳆eQ(Y~)!Go4GCCCww pɑ! `/kmJʷf˒Rf:QxʕKeRJYu;讳j Tog3Mcdǐ^>zySE,B SN|NJr#Yo m]}"?=Pzw qPhgJcѭ&+O?`0LPA raRvL3)<7.~<\Kx2ShDrm}~a#/1\U%sjٺ>/!1Y (GZ^}I Q=(@sp444dx{"V/h牰bEHS,4k,lf!#4~NKAF:tߧkL9}rI0;o9$&3qQx{C. ضsXL* DLӊ=2DYǤsx uQc#YAhg1~YF#c)^&^nA [3ֿ~iL% r8ooX&S-bvId^^w@#I]z6 0җoovs OeN 12MS_2Fˏ(E%Ζ*au96%IfqgvZJ.^^wscc;T9>][Oy*$8%uvUpiy_)eh4G\R" y ѿy+$,)EV;!Wi4Ax`/ 2LN2Mm:uTNK:ŝyiċPfh m5_Ke<)Lb$ecƠ ٔ(T)׷IN vtc}ڑX|6ۭc%G㬃{HqAɒ#0)SR, keJkA1+9lwe_蓩KϞ}8mo뱰WR;zt=΄bz|q,u^:%.5 ]N(_I*wo("\Jst"~L)HOi45F*MMKDؙ|[ M7pDbO(IrH6- rK(bodr sV"r3i'8C#ctBaI&ݠI-:̟ &RD aPf@A!Fm%~"6P?^rũ/Qe 6 O Kʑju0MKt;ho!hDsp444K]AjYfLGdque7:2r4CP@3䷏/K>~']+ =1& e j0g#'!5Tx~<"ko:8PzC j8U3ֻ}сKRo)6gMVczO.[f6>LzKst0܉{"gW"%Aɢ`0`$ܬ0֭ nLn7C坱6w81GQ J[B|;hEG>{V_Lq/F{|<|Z8$ F)eV?Ǜ͛7Z^luLy  px\F\2;9#7 ;*ʽel}s%&O }謕l]0 ~iwO4RS'|K*B4d(]\cۑJpmRLNFGǴ[ rt-c198y>OKVL>I۷)=SyxqMc'W)_dް/%k”_|ݦ[FHe-G[V)#97݆-W,JkWdlR]-j :$Fq2 erPФ @4oyi1%eњL0Y&CA$GG˞ SK[*P*[ldx8䨔1S椦rK`ƈ+ܾa#.vļpЀۿu'՝J$>ydł!1zR Mh-mbIWj = 4aNZw? .}fug@LvlAed MU mL?1/yn*vO]xXm׉`eEN XE/ _edj8WǐtM-IRS?I"Hwv‰3&#ahV}m <$ x~muBNV 135 @dN6F4GCCo_Ѐ ^ʙ!%Lan9β(|r?@t[nɨ'LqO'bYE@8;gBz>{yZrPSCP9cWi|(09U+ ')* JJiT}?&S2hDD^QD<혟vȐGg3LW*2/G2HYfeE1Vp Khܠ~Ӄ e!! JAJk\!5DadTAaJD:Q9|VĖ/f).AueXݴT޷<98e*@]30 n%kMtQ6M)Ցe6A&FgG^afG\'nEoXkE0nXy(Pm:,HW,ARyτb28Dݶeiʽ3gg\d@ʵ%Ooؒ~$8W+!-ZP>ARW7x|'];;ֳ s80.g B򣇱&'GRKcvs\v^X[] "p-O>k>g+ĥ- hhh{=ORG7*D N)2~CaR^M>QOE Ni^RY< Nlo/hzC7zmO©jv](OL܉@Ңl( & Ƴ.ၡ4D[_e%VfbV,Y:z؍eAΎ=I $ nD#&Y0_FS ᬳv%6Oj`)O`d6GCCCCHv~- ҌԸyVKk*.$6C)<= Ss _2h Omwz. y>;Du$k$PofH@sUur.ġ8eKDyJB A_ 5|hk1PrƢĄSog*i8QjUd*|uX q/)>6ĩ7k%9cdz_a4 e,ۺr2::/ )J|gt g:ߋTP[mQB9|#:v;^sxPo7[Kg##^$nVRӉu! X#(u9!+KBttxɏdP-_,הi EqF NZ0%Da]o7J ˱G]MP \Mlo1z98 xsfM 0;iy8ٻP[: '2ɘ xrtP98KQdƧ=9%Os~msf,b2/)R*!#I~RqɊxx0%_%$a,9!qH=3H@99PSM P=d>b!cS;WNmM\<ů?uy,,zoh/-upG*!CaC%%4C&q=K0 dh4MnLzbSBϝLgu?%M=͔y2J=rØ|fx0bsRaƚ|iЎg:<d9S#hhBM,8&-_)}Z"Di4A2> tOz4@VOeiL0;w'Gqy}/*2LIf̹ 0rƃ@ӊ%1ЏiU!=M"* 5q;YwHHqؿNjhA C6y:ߛWjPx,_Tlp ,0>ֱ?/`/3`jBҥQi>,.3ga=ӯҚRh>!|S8 ]SYڋkz ?PeVr7eE--0, b#0::BxxPAk'@|?C7e¶([G`ۊа>y&>QzX ~Wx;_!n'GxNN als4b kO ~3Z"=_&A rGIR'aք9 60@зst0o~$X1+_~AMyL;2t9 |y 43d{]7(¼ JQ$d1nQ(G3 ܼw:^n4dthFE@Kdw虷QhT:9GX~DȖy6 s3cFttGUgycʷh~?`ڸAK$:9%^89,̗hf4qV 'M];Ng ¼ۇaFGk>r'%zHSA֕faiX%Pt͓>n+Kǣ /5WdEFW^I60]$iz6~RDt\e&z3 Ћv>pcX?f0~a:DvY96'mM;A>+y.DNE|wc_b#]%*::jA^BELV`98x=z ga ܒm8:^rrk#( ´ &RMbQedNfqDVN e.dssNX_sIF9˝vB u:7`lh8P'\(Ci& @ Da ֜ՙqӥkt>?==1 Goз4 2oE4 IvwZ edr0SFvay>CįnnSh!:' Azf|rP^^g`=z-'hT <S ir+ԒptJ_ltoMmrZB,W}:i$QGg'|㟈C3Ƨnz%ЯӅ_>T4p"T8<ё1? pOe9a k Rz1p7D8/g?ǫt_M]NpqovQWBȢ5JcX q.qLbyZ:"7P,$0ZgXWNa?=Sg_Rj_'tęBXF#i|EE|vI`X}`bmJK6s잲B hhhp Wi>" "Ӳ N5)xRpHz!AKCB2bբM O1Qxf|՜3 yMB!̶OP,x?QFq{9F;1\>r^dtt d7Z0l4I'0,6:YijFULvOIq"=MGG=< Cq*>i,FahэoH Ғ^uP %uffE+RHUy&(,oog@'8,4L>|2>6=6ZV`psU2 㡄h'/ D Zrr$vVn*1 aEj"2/{8 (hP3UP*ozJw<%2$;mžS8>j qmSgY(XUzx"} ʌbT "/`ZF&!j2_z=SJM=LK7of?RX8nj*/\0FMW\ TFNs}3I.cQl})u~ ~q#[tF!I\6b`ޠU/Oh'utGz윈 ike|y (x[oҩ܇Q9'l !!0G^o{l:` l@=;䜕 we/{UAّMM#(<&A=TsD竓ZH-ڬ07rI c noax;rkH~]a~Zego7-;o4ѱA.B復~ȼ"N9}Safvvd_8h!e ؑBү]G8t).uC5OF;lGa$o)qiOt ,bߢ74GCC3}0S7|Am^b"L$;mp1یr.߉f4=>GwvNYxr$]^yr%QLMAy* R4vS>xK0OO'S8Ow( Fh .o7Ast<G^*P0s}ilD̤Q@V1P{xx|0Z\+tl?y| Pu$ Xɡe.Lgo^߈98mʘX5O L ]IM7*Ņ1oY^Þנ\gEA,Fe^2\ e8iƴ JjK)A.51rkdUbLrwr2b ׵a8k<; %'&$2C0;׎OG##]sLBo)rlMGU!c{( χd. Z FPKJCch[b?R?W7_Y0(t8\ngǕ@B%ionYPZf :):& )TkN8Ԓ<œ&Քi/6Xl$w)0 ; ۣ“dJyX}jPw߿#cdգ~Y$k|IH:@;>mm~/>2in  pr船Qy]ހrꁓCN:OTXSm,ndS2,m=)h^LA_͓~k%Id1c}.R0'KѬF`l w@Hږ@[ƌhhh/ 5k19e^^#i%EjCEHz91$-@1`8%GXBWw8|;. |}pdK?#  Ή0+pdA+,*_Yb udl!^Hp|IIwv$л9~5R!k:-Qc-1@JpDF3)6۬C|)F" &_ ^q/Q|$Mɟ-}]ᦔAmn}* Yi Jb{fpdG9:*Ec3޼OXb}]X?Oם.*c9jdh8<@17Mc17Wl^o~F%OzoEi4ٝfɢ- /]E#WHYy<OhYPnO[̶ Ykn KT5HZIDyi 7Kt {YC`1'by,rlhEi0,ȼ>uP%nbRd[쟆+ֳDbqSTi:2EoDS[E <mHY9UO%0Ҟ{3v)+L3|cWxЄx-fs̬%^Rg;X܊` (ܔM9)D= Œ0mԦ-&Y #4(TvϜ1% IsDsϖzSYy$"xܾMH /]~ع>r#O !Eau3'Ae!ȅ\bD>%oIu6CP| F_ Kć!\T&02YotawwIaȥO{]Bb^#;myJhhhX?}i_=zb3_2ηۋ0QpB ^ m!sU7-Su)NIO8F1 fiJ4Y&;y2 1gM rDF}[|,;9+KOy#$O j93%ckX⫉Y%ٹ1R<0A$؈4Ffؔp|Mpsu7WYdꠣ*ͿO(IX$ :v#g NhB+-PE 1~wܑb YkvOoO^d/Ctt[|D-zDsp444,w^ /.$"Q9^Mljۉ9? iq[@\:Ne'+5_?N#LzWXDS; EmnLd5;* '\_ʜptpu-1GQlN)6#3%('$Ki釙MKxPr|?9Y$0]$,cahdtZ7DgGâFOG8n\r萙NOjnoH] ndaSFH>n) 'zF7,Oq0)e]TڌN!szМQ98_/5c!(l8XE]6"N8XXE6°S r?M۸"k"@v$Izzr.wb)!\\.0SFm.sd/ 2.o_\`Voۚb~dFָT}pD:,`g}];"l.%aV]+OI Yљs~0BJ)~Kw=OIIAn8DthЕ*!\[f5qWq.M'xʳ|cO8SN ںrM+yk8&UN?G_eZbc/P)F&NO:j8Bf а }.u:vH s_п펎fbBZBdD_+~xɯ ;4!ykڐ4At'<>?%{)e11/U!rjgz2N(v>I93oL\/YK"m(tQKC<JV?ޗꦍm|EhM0*d^ uX{Gr$OBRDfw`w{.]=mo dOOEH =hhtwEDVW 9i4鴟JE*!d8 3tytphHwY,Y ؞btcdHHtz_YՐ!`5_*LնP&Bp{.=ckr}5HKq %] [@pTYGrNDs#Bm>oH ?N ?v~וDr+um`s@΢|:ʵgmF4/}!*EXPIF_8$7Έ'W;ti~/m/MQ+ <lb#헴K/1ZobIuD>]kNoIl6zcL/]uzJpTTTLdi|:뀜%F'PY'h IDATk{F1 "*ieSG?HIeCʴ:eѨ>gH&$Nx5_%rܴӂ jXP#Nϳ'[w<7ttx!;Nk+v~k|پkdqc6*Y(ɧt }-H#';,e+Z=Պm&5kX/BCTl+tdB^[y<;oNp)4,|+Ncq]b7.D(S|ƃu+WAQ gH;̋K\L: EV닻L1k9WMߌ%Eg%8tTb2r{%KbIfʜ}I)Ep8nh ށzюl$6 :sٞ9ɨ^HN=ܛEz5H@#N/˝C~p%8v-GG( -e˟Ȍ-"H>k$ޗXI֘ρ#FH| --]i9:(ZŘ]*ԡi~V}|oXAue]%mudžJKQ) 33MOq<à>ӡNOQ &.J:j<-# 6o)$r$=_r]&l`!vZRwIJFa[¶/mf% NDu8=FzApGtވڽGStlB=wxYB;]mZ~ytr:7ǍYϨ`:N%HsQ-ѱhXW@>ӻ`$irc-7%on]-ݝ@H#y~-'w3ng Gr4SD]gn~TFoبGEEŤQZ[B}8T)kz $cc:2bcMU!6Ūm[A BB+&"}ԲSGi ʎ)MɌ#Q{Wr;_)2\yܧg1i#j)72*;Hv\UJutC0ȕɵ''{).!9D knon񡪗i*ԓ vO M ʉ*3Y|P>ba&kM86Hf5"z$nK\$JPMZ玅6:ZMtMYyzpM02$D$uK-{d?V?{x7aHL!6[L8[Ah(*]^dN8L:D~3Hk\a&9E {3m@yl !^}K̑oa+-OO)#}81@SGEE{_eX\T*ʋ ~Zyê"ݡ+Y][c\`08 c@N3"?hskX b*}n t::m1_SfrRguaZh`9[fڀ䛵;运~XDnFQɽ1}ٚ%9Kȏ$la=vhYU>}5Pn`k%N}:S|GEEE;C@!!›9Q4cQ2Ou!!T"᳞IMr:]NkH^&kw(X/5`[8+b"NI2tKjr/MC&^ lO;6W}&/TtNΐUQ&5P>@r29J&JEȆԳl{4T" ,58SU؋҈4&uguWY>N~FɀvE|} uN݈tN #C#?nɘ'}~tp&~kSN1'ռfԔ/k#h3pWڊVr| #(^s3DkqC&խ}FCVJL nפѣ:,)fQU8*l#Ś bB6u$u:=P  mӠq}+ζS5QQ pnf$G_-P2y`/buU.clˉt#AIW\0y#u9ǧ'qW=E\/Y 9,W+@BԄ`D;JJ&x 莐bri<^_ٵ4Hw3:Nu-Tzn&Y#&ͱIC NzF]oV9DzKLf#꤅59>C)}4I۞O\O%9b5]RN+#HesP֬l`>l\EO#;zrMvr8ɤ:=ŏJpTTT\ w _A&\S]´;(Ҽ5d/8MJ%ui!=1ڈ_4v}2qC/HLb Hgl2=1PHeq拋!{ pww]^҄:.Wv5pyArgMgm/-li^nI<+砵}>hEZYԐVT&>?*QQQqQ(8HP4" D#7t}:㱑ݹwW^< -O'ܯH HȈ7 t~ "bё>4X7CvߓAےEC& 3M}InXΖLSq'oH˩OxDEw_gcwڳ>ڂ 8ݸeZW5}'2_ u9V)Q\f5[Z[r֟-|mF!9V+Oг٦Ǩ ٖO3Dv5ZFq;-sZHN<5/H%V ncO ;:N jkA5}V%ȂC,V>Cm腺ˋjgK(:n=U݇.N:CEc6m`&ݬMw^-?~* {tRJpTTT\_cʄcg^>S" {Z:yNudiX eCVHęjSK>  |jF])1ɗAXV:,ȃϡ[4$  Ivj:4O5駮T0=2rt>D(o:LW~)zI2奡uQ"qZ_q]hPb4ueY{VMl׋5G;Ju)~k]gx/Ve"btTQuzJ9*QQQ"&A L02}ll*Ȓ(c*hڬAӝU)j `NN]W2OɉDZlŊrFDH5DOuFHS^4Fhq{v,D~#0(YcUf#xOR;#zu9ڈ:_ޓ6%a6h)R w[EԾ^v|-}!tMW˗7S riLl!kA7)VbrjuZcXCl}OX6[j%mP3Y8ПY=M&0h drS]n 1{'*)EǕ)W;pǃIvHuzJ9*QQQ"siA2#w_j=LS)En =Ӈ%H&/Շvlau}ͬ?ӭ}2tXU5Oe>]@ A]ʶbc?$5c $|{/*,n*R q+ h,_.>O]ѵ7*61rIb!=6vo(=<J꒚6 z씆Ϧ(iW%ӒZ;$6E6ЊKvH&;w~(Gr@><=!] D!.fS//8@ֱt ܁! vҶE-w>Kap. CF2a&j0:0I*v1[t>$8W㚋Ow+| `S͡)_,(I 7_܄p}'iis-Lƭ Qހl!_ӆaWʨ+ɷ0wLj@,?G(۞[)ei/"D]anZ3+&Dh'ΗSUB1Q#կ\ +ʹE]As@r[/T&?zlUB%^M-7״ NOJpTTTE>0?HuPhuJ馧i5@LofTGl}:ޮu1[GnXdw '~^o[c5ѿ!@]{5h"J[;iȤP{IY  iM:@}e"< ѝ4=<")sk>to2xQք KGPu%2ؖDJ}L :D)dm  tk$/@3esvI')>Uj|z民TmP D$qӮUY{ 3';Go RK7uzPTEq puJvS=0;.m#a<&}!t))#Ш7SFI~TwIS3#q!LݝvST/Xh.ECem?]*ڸ٥9#+f5^Uh/㮽FM^FLL萶ac>-YЌhEiµJ_tN̲m{JT1Р%pSK$*I, {Շ~)J׳~zs&y^L˲GrťTnY?Bfj]Ԭ5[B IDATv7S{:GEEŋ}! bm|G^@yC.ZٞsAƐ&6cM"&ׇ$1^>dfe7Cd覮 w!/:4OYljə՜3R}u#$xj4C7&E`~ V"Tmak*(Dt38J29rM{B\EҌ0zqXU+1C ~}Hd/΅gKcJQąY!v_Qԇ;C#/]*_4?ՆI#e |%jszߵ+c8ٜOGEEŋ&:\zo/_>ў(Ю*l##X˸ރg*bp_ZMC!Jd/6;P9@<ݴƩ1O=@t<^[THg jNR]Q*)ssHOԎGu֑tZdGΥ:jP¸-i*K~,@m>n`{(ťt1kr,~Ej<ΗȮW| ͠.ID!X M۟KGxvꆞ6!^&㓨^2~ݝ*|ĩ,qjV? S z?'pɷ +B+X߷9I aHv\- e 9ӷK2=--庣t99I"PZ. 2F8=jU_rɖ]c)Sƣ/@趞&;"#4JCCrhXoԼT4i= V80E2h=N }l7x'vz5<1SS61BִtSYuNt; /ג9!ڔQ[Tld$Ag0 i+*9?_]9kU} 9m2bKl.ywɽۧz+g8rE*Ȓm菵3+rZ;jaO]ζټǔ VRK<$y?yꖴC[t2ਨx5>5^~pEDgVJN# ߮%p}Q6AYsQ r\XHFܖ\|ڊ$y %4: O>lL_d'eZpZ(׏Erʤ䲜NqṊ6ք`rBh^=A*i ft ך-IN,t=]?t)n=KLJ4.Fv6=y)EP>@Mm튠crO,#΢jkY*UNO$6i5\\ uDH~{R~ 6UI/64|9=]%8@%8***^"1µ([4Š`Ʉ^QMdEYϊcX[5hN,) t-?(4\y-T<5Wȷ3U4 ;_T88}G|;ۻGCR܁FҜj fzr hiꊸFq`.9fL֞!RzMijruztGEEū#Fq0GQOKvТ6hҗk{ڶ=<|:>A: THC<]eyc`w~@]4HXVWo ^ 1(YyrTѦ=!adMB$6Q9kB`z4gO5aU Or?JL5/l9*WsΥǶjjm-J" "Gh.{`eJ9` :$ so_dmrڴ4im/MnՒ} (/, p}e>ۏuzʄGEEūˇ/}Kj۶95?dA|l0I6yt馲fwbRFkq*'ztӊH ˊBx%- kƔ=#MOU !jZu*e_G'Xw W>)1r3mc- " !1CP{-aRyJ*(*QQQ&8₍9B5 e*!Elq%xB.&׍:;2UHޘ^F.0˒ qyhMվw]Q>!0w͖=?Db\^%Ϳli*Xҗց %EH9썄Nc,~^:ɶ 34g1wb6MJrKX^/{;24{kbwڑ:|鲬LYj(4iZJc -Jp9E]R㸾SoR{-":^x*o?6 ȼhܻ,u|b%G\ ud9Y`KHe(>^K2.E>$?,AN\!I]Z#-,bڼ{$L2}Z>) BD{҄{k ,/$2/8 Tߑ[ Y=tP>\%ETrCEm-So2lʰ^VƵ];~S7ڵM PaZf/M!=v(N 33+iSG%8*** "hE+p[Ʋo tXWfƦ:`Hr3thΩVp3'v\gw)Yi,+2^d)!$pFͣ"K!pCk~vPBL1WtoEcΑ Vf:9iKը#H 2V>f㼢S@HR+R2P5^"I8XM!_ly?ˮ^Q*-E=ZŏSF%8***ZV ַeЫaYP5Ag&YQ8Z@1'?pöPBrͿgvЗQ*qE]{˅)t;'·K ANQr٪[7H$[eUAj*b^fG)mֲ;]`b,R;Y3]*٦Z*AZgrꦚ.HE D@jУ;JXdc&^}RXrc*GEEśB$8wEa>HM6/#54-ƜV&2P2 ހY*fU8ӈVƭjH.2(2]I:Q# t\LaLX+.2onbɽ*g覩Uzs+۴*] ٢9) u;en:HϏԃd +q.XqvciFZuөZ(~!Da\` 8msrmW;'\ikՏ^V{4姖5xP\ਨxs}yQw y(#;<%Db:RfksWmw9!@Q`GT[ 6vFDX\[즆x dpudpP0 d-nX$͉44dYa0C/7#jMH3;&.gǚ=2r DJC/NȨs>sna+F)ϜxFY*}#1YpT*#Kj_S\>yr8}R#<)C%8***$wI'+xY >o3㻜c5RR V$qWk8Y۝.A?fbW*T |/Tz8 ݍFpl,-8ڜIHOBtr&Ahے(sݗ-jޥ%!9K!!sqgP}BUF>R[ĈiwY&CB'!j32"O,f+-JG @ۯ.-}d …y^c/='<(Q7.JpTTTI(ns)aGyx!Ke#QРW 쵁p<+N]WZ4 }6#Wy:KH H2TLQD#/p[g>[&#@Ctѱ , ";ܶBv8Ghi^\3`ڀخk7Kr;.R@oG}CN7T@hFS,ɑ0 9*nnSU>D2('_x uxQCv1(Hn։;>~Q 7?_7( Y/B5POu˱!ȏs~{B^cnZG9ڥ%q%?GEV+" 9uB"3,C(ٝ:b) p&!t j:`4љMKNE*%)SڶLC)+BA/}2yR=v?H+~&vPUϨZ< ]!Iݘ4+nk]id){&s]&dGi?l{X V_9#Rn[5Q0)Cqp$XǦA`X: _g 2wtXZ".hU*4}\BsA>Vn @Ś@LDz!& z IDATX̒oc#!a/޻:"@$wa3xXq{K ]Ѷ9z =] e+4ȃ45.\3E;O6z0m׫ 1Mo1\.ʩ \:09<@r`TYНV}KC7FD9v'!QEd׾^{O0 6؃z]*YWJ{ 9^6O.!3 B6 ~D^ l^uˣoOi64(\PQ`Ci"E뢣p4_>Sޅje0ȜCNل,6ZP/sBD-9~\ DO_lSpI^cB^Owoѹ'@np&3׏aw-g艋c*Kʬf[Ē:6`1Mq?L@G*".֙?`amvO7!(>\`G8<9'A]"q+HDHs NT*EEsRdB(gػ ^h\ -F@}4GR)CС?E}웲P;r=iw2֠6dZN.RCr:[ջ)|ݠ&arq mgxO/JpTTT|շ_;3 zѼbeu0ЪM2*#\A3Nn/ Y@O[69do#;GrCi$Co"WΝblCXZG4mYmt`G1;x&r/ѳ`qA6(NmzIv`՛h򲄎wZĊHJt,!ͥ#/~n)Q l$::ƒLynn= ,ju퍗C%8***|>}^&/lʴM$};Le)F.ɺʵ fySQ[B)ktQRU~yʏ`WN,1f8ϒHcg '9l-4Qs8wUP:X^/ayLH0qٍWkTznpٜ|G}sw$5f5O!ɖA6MQhACdb$S^ਨn(酺=ݮ*|9t31E;sRGwd8c6kC4nXZ]HtQ@̯gIn#細|󐊣!O=Z_}ZNHȗLGs/-d.>brFTC瑳mO[>oE}GyZ՜"U۟r+:FJ_`ivWFr)lSbϝy0S*ye2&¶#*t!u^[*[$*QQQ]AZD&/4N9ujj]9O'WYc j4199, q:rԳ@E 8G>]dTJHu!gӟ-N ?'+"/LɑA9!9? .>=&Z }C1j:IF+חs@hj*ڬ;)Fի:E Q8H79P#ε؞wFU-MSjF6: 6rMcN[eЍS^ਨgsVPN>−/ʹT<:7&r"]]j:xt":2QT!~%3Rs2 J''Dl$lдOO~\uHȔ*5IJk,vv4\T}C .FM=P_b_+S@IBN`:r2]'9bMt)Ha[vIw>!M B3_3}5o~aY UlX F%8***;^vkrh KԻCg"q<EtO 7KЌRH7INh&G$DRCKKQ, A9Y|8ҸzN;` "fgM q8:;twƴ:R8` Їடm{vIʉ]5+3k.dSkg+e7f!:MEU1d}`}RCv*TrQ _>|xG(/\]:4_k}f'`n\/dhi({/G̯0t7OW!Á@Ct`tBOv`ǓBsdC'Daӫ@u9П^,u*Et 97U\F$CCGa' C><6ǩvaHr+9LqyE旞:+!WEܲ~PŶ&Jk{zM民: \ԗC5\&h液HLD"[ˎSK]\Q 1C+k/{ ` zPubO7mES[$Ў<{Azn;,Qt,\zSYR!!:+fy{ z;` D;#́@ravh=v;R\H¾I%iyd՚ςVHz9|y[a>G,''?Odw߄'6H;xƃ[˕DRXy]*}dv=([z.z."'܊=0U2#) ra%;"gY}Tܶ/pY}#J4֢4!5 {`w봅y]ai-qz>v-078};I7 :G)ɌD H9 $ B<JrN;Xg9Gr`҅m (];"9(uκ>DoH`/k1Lvj_ӢYCvY^;~ 65*Ee}A@IɎ"rb]ڼYHDeeE@Aq;ljJ*zcH!;r7,+U|W 9Ǜy7wHx bgƣ7~u:ĵq=V"Ld=#|4|/RgqTG/^v 3"8caɉU͊d B2J@:hyٓ#_^AR7J\͖"O'( $ǿۿRHpn5mebVqc.OIDGD/|w3/PHtwKw7E֠C'}Wl0a ]H6?1}NOCS8euz5w/ i ywZ[[T\58,dG;4dSs/8LNnxG2#&0>S?vYF2C"*1"&)gMTi$$GZ?X|茰L35e"ה)IR`#I^)z;MWwԕ$RDGp ^!@^ݡOrPlerRkB? YMk uqD%8***{5$?M%i9ԙT. /;9B$hP9c`W|p{pEltYC20%INsXTv&=.6@I~ U2Crt")GG'P\Z('.Lw[i9]~ArVSU1mI􆪯,o`y}Q;d[GGLz?d>|A9\ -mE6m : x;~Fo&*QQQu,B\q$PSNҒDi؋s>q[p6dRNO,g{ZYhT3JohNPTOOO2!MoIڄA~ `'kSHdSA.# ҵ9`"\ܻS.>^΂:u]F|<]$_D}-ZC$;zN*mw;)YD]\uQ {|:dn;9[wn]VDis([=O{c> [Tӎ.&,D^XNqL,Bٻ$$WL9ԜsAxHRsr/2eEAͱ)bAr>z(>)@AY h*ċ)*:&$ M{[^w$;""<:[Ɂ1QE_ਨY|Ü\,kSItlHy !lZ\/ (/gjczbrpqnt @y|*.xjȎ(AutL҈'aG@ &9Bwډ4#.098aHuAzge-e qnrye'hN!&L$냸ՑUh:J=5@h&$gWT&-FmCKP>*QQQ_h[:<:EqJݯ?]nue'U1|I84mVPNmx؛V6R* !$ @觴Oǎ<|6#, 3$G$Q!9:m KGrh!ks8kx}#d 1_%ĶL)Y\êpYkFϥ74b qEl\}ϖ+>G4n9cmG{mcoਨY|"4bBZٵHSQ Эb)fF5Ax/me5\C<"ڃb,"=w`NVtzwL>v-_2DDS ADcP)fh$UMǙ }YQ"9SjwlKOl!׿+Hx17A6Gy "c"wʺI Ȅ!v( ][r߉^;Wk'd_χ, L߃[v(1'FEoD~Fo TgOOO5as:XWu|'C;M.(&۩{Я-9H 8\v%xMN`*}z!"˿![0vI!z&)3pMO3_}GEECpA_7_Ij~QϸkZ mAP rX\/F X̢O]ıHpOIIA@u=۞츒eSܕIv`uhSI!sWn+䠶i$xO^#"[p_Yΰa;L՘!2_1z\d{V>ձP{r莗q˥!3j jHE*QQQ×_ЈH|$)W!GlCKv )R5D|@;#i ]y;8'O.if+U':I41%{15+?/8Szg*r|z|\uF'}v.氕<5 /"Dv8UJo ۞v:ف"u de^U!<奸 S*QQQ<:OODVro8Q Z[ |Pʔ"G+juEGbT3",V5LD6HR+K)Ҥ~Z~-qЗX !IG:"p:BGG^HFw>,ɑFrp +qa3c}!a<*2ǍQ ӬC4±DY.c00u኶{:ڮnIHvT $SqwsⷹFo-Tg0K9T@g7yz$ѶD, Jm~ @ȩ8]E$5R1}s2Hj=?w!߈#HPO#IU,gEG~#|6Adt)ɱj=䠺BJ4`⊰w]Rx츝ѝX1dIi;ox?N{8pÄ'+Yj?[L|cTG E$-L{KB%8***~FqZQ^ V}z5f.[rprFLa,H!@յmc1TCJd"9BWm$!?:#mnCypݱΘ_ϑp.A*Pqz~M)Ƙ"}*#:t]4NvD+6ؒP2xA١y׎ 6"Fz<5wʮ,i!FLO1t *QQQon0y.oiToVeu+RtD/+ Ze8ב.*jV1 mQN?JF9Bz]q-%R) IDAT gѲCҹ9ܾ%:ֳqɳuNeoWC2 E]c,=ȝro_/, .wKN A-+S{ PP =g,Sf+d L>؊HdI}H*朗/3dzCNР ,‹/\d nQcu Q1N+leNϧ4M$XTW :%PU}z1dg$p8nݺ!95ͅW 2v;^ŜMw ]Xi{W&2!iRE…T jD%8***~ |~~XGbL"Q6, %oѵa)>LQсd'9! RBr#ٙGH$b6OǽHr ?4Eda3q͑1i.Vգ+&:/>ݎ24͜]s;e->٪#96cB|F[e?£6֏uq7JpTTT"X]*R>}Zc0' &beR:Ct8"#7ʪ vD. ;ݵ0$D1%,J@Lr\NrtQMta t]SOʟ=!.YcP=6oeSV7ƍ|ՁzD#;^h+|c EBB_'i]ɍJpTTTb6z|ZƔ;g|Z2˶w{ÄQ/d݇S⺠"a$6k~(56DӂPMM!3yIAspFVUBrN"9tBrUƐH &ʃ1Y\Zq4,.9[tW]hQ9[Ho{dG<e41ȖuɎe(zuu5iZD %F܏u7JpTTT"=}9 ҡ<TH~Yr _gCZ(4i] ^P=gIR@Z|# 5Q+:Hh,iҒ.?Sz:b"az #$!=TE;KX5 o;sF*=.Yx~wK}N(|g yaz(V[F%8***~Q=;.[RH;R4 V$Gs.wq<3Q!3`0ҁ2Z= r+|6]B!蠖jAW>L<䈑"1Bomj/9djcIDI>, ڼ=`{;QqvcʣRw$%%;lݻn |S,]:h|bQ.꘼o@:ٴG5zm8P2 D99ǟ07Ԉջ+O t-G 6j%ȍ>ڤ|}%RӶ-,:Z>&OٗevTǔoGP46J8Ե۷it£n Q _,xPӅK0(3,gfĦ[j1%?ƵAH6tw a=էn>Dzd;A>D(Օ!I`3"2JYő<]k sưʹF\fzyEUѮ)^sK+-U^% |zTҺ,u9n1^&$w2`OgyxETޫSU("W-™K|k$qR}~9n-CNfDD/%S\ߎ2F,zlkyF"pk&ސlq‡ 6WhdןF)2hA[+b\^Frd9_tj3iΤw"\x&gߕ-FE٣xDfܼ[ $r&iOY1҅b=[ǥ +e2:&E~ETѡ}QQNtV *i(>̝&YwÎ/ٟĖ溝y[ږ^'N]xYA\N֨hEtrA=fWi!Wq7Cy$Gb2,Œ LM7rө)_BV+?%T^}^7 7sl%{3ln*VSNg >=ƲVK/KbRrE^D~P _4o5#62mhA)=q~"RZT,砉 B<;rYD}~k(ŘV^aPi]4zh[Lt8;_'$!q%#9i$LV8{ǬI;FHtLQ*>+)%_c`ӵJ.Xwpԯ n\9Be1>zc˞olr8}0Jly4x_:z%G,)*QQQoKXL/OwOi+YuN"82]Ӥ.Ѻ(w3Q2AI RNS`Hd(dZ"ZJ Do:l_w_|#% "Qͳ qc{4xlin[H&#4-O i3΁(%4\fQB䬨":8ݝdJj$ozT7L[Ee\YCˤQuqਨ/߿4MgqsQVY,{G9KCuEqɩwvtvlZ GŢo';JIOO߻s9PNmҶm6ڃթ+H3}8<8ek{u62nXrOkpҼlC42gry_(#&F|r{Goh%VydNmGO+\e4'0TA^=cv?@)*QQQQ‚##92/ "3`=[=,9qJ>g͡iHE\k ~0_+ؠbiHB3T(Gn]VZ+cx r~A̼Zʱg4m3?'ut4ñ0h;qQvf J9TF]''{ 1 I'r-ah8zTK.>c"vN)=ߞ  =-=m_DWu$U^mLW6hٺ3'"UPt]V^'e8E쾐72eubh8#GX,~Ne )q8+2m:}?t%\=[RC{ń~8 ְ*QQQQO'jH[fXzְ PӺ(ٍË<<]O?X^fqt 0)ϿM_fvu{ݫS^Yzl`u !:$ʦ:1D!X{L9=TCrn8A 4}FHOa@̀&wY$9ew\I~.t;QZ'^떯lq8 eZ[n[R▐Eg> M^Q ?VI (s8Row}3NRy3pNGŹa\a%9|ٕ9:evoQ  @V0z'DMբ9X~YHu5]e{.C&,bEG}E6ˏ_{yNWXR:Sʙ weiML9ݿa {]wWlp6̊)G$%]RDhJ7~GGGGwˏ/\0%.<hWq%+Q5_ez@Ns*eme81DgDVE_ۈqɔ=f>xa&"Ic$Rq4`#.oIrIh ~_k{wn? Zl +v@Z1 ~ 7Ju+I 0Nc t4mSK4lysr G'-^ᱡִ)8 ߓ31}_\aGGGGq88 aLr,'$Z]?eǖpʊܼE/viT U8|CE 'Tu&ձ?J!!lWvtqc^UheCQF@7.$]mW퀐d  \ƾ -jlRӋq=a3}>%L~%ahCTC::3Ȁs!-948£m_mF'8::::?KuT49]טSف葚V[#O#=J.X55Z X@NQy^0mI=$ 訥R(iɱ^EdC~x:)*pjb?4D~ ;"9M(Cŭa)qG1],.@bL1 6O7Ft)!췵@UW*l8#lS z*Aan xz}DBv6|QE|\pMskZ=:guQSq~꣏/c'2y}~p̍4B/n+-a#HK4i%Zr}ïE莄S "i*ܨ=H'<'&xm8DGdV,i ~P$#EKr FuW $/Z"mN=2D]abOC5BTo@UkC@;$Q*$+d$(Z?'bM6WJm)?m"73o"0DnDd4^mIۜr=Sji-1V9! Np |Ax-b- @E!*6Ma q9 *wJ;/V fpyW"I|rmVT*>VdW݊|\uLj#` ߨ8~*tEyi8R2I]V-\viſ))^]忖Hk6wjUW\3{@BtLj2ذכrT/eTJ“KU۹+ùy8} X:@'8::::o>WᅡKI.T(ԍƯg]$Hw9xfD׽Tm~q/QOW'ї*!7Ho||B9R(Iˋ07/Jz2H quX_ǟrɑ*[ØpFvPEk*{و`iiUh,]YvuʠUZPMޗaTH&G.Ůמj:/K] 0pO3*茳;Cv7.Q)>Ѵ!7#DOyiGU7 Fܽ+SU*Uto: [ ] !˙^K"W}OoS-=ޭB]]AU$$*m@i%:LCpqcw܍uŌ8#;S=-Śb6a1U'o׷3ĥ3TǙ hTv‰j0 \[IFyrq[b^G@@KL8I6ܬWv,x6ԊVg,2ϷH)w? IDAT8U}R(JnK@ iu.kX4Huh8`Ds,%ՕGuφ_o$bDPSfLdN,t{Fب 6H=M"Gqp[L;=DhwYi *]\zuBhSH5'xO  HthܤCmI8VM/3UY˹߅Cn5&V:q7DC_ Dz`(ְ?!tc">~gVٮut e+R@$O0(z<ʢzY8*LtQ#qi{iX.hEaf*TQ eAW9d!X"9"n]w(g絒M&9jzӉ.g?̵ B͐0μ׭E#9J=SIjϯH۹JG˩"c@fp9:e0s 96)bGDFՆDū{kĔo>2;eZjii<-S[荟:1w{oWLrlI#9&9fp^_ܖY7tZd{Ng3#l2c"o!9ȩ$>9‚gq$.%b;$G^GmHSm-V~nY[cEazm#OMrT'4EO<ף7l»J!)0j4W|N%hoh5\]IL֔s:}O 蘁p Ԣd- 'ItV%""em|:<ܰШ0]D7y}vl7ݳJe1Q'6mmg!a16g( >ҔSUuOB=;M9n)(@7a@jø ͉L;]"b~c"x|m:IUh2Lbڪ\\eIMa 7ϳm]:%rgֺe* tBR }O蘉_~ð őA/(p `o8Z9arRwp Oq}TSC`?n;k{Î4q m΄9Ҷ݈HҰFvPB5!Y ";Izy?.t[BjkQ7$4gQy=jLr8DrD+"Μ6}Ȉȃvɣ::NhAKic2j݈QSXTC埣֯mvG?=tc&ǿ8,Sg(l%iO\] (lr;@&MEsQU#zvVJ;.KPjd]tB4fbQ%9NU .+BSUY:߮_m檷HMu!v3*Q8@uM,2Iؔ}rI;Ճ[P'~]cr8DGHnmTL4үKOôF[)wܿeB2[3,_?Et|LU܂*g߬6ÙQ?zeBrK!uaeZ(UyO[B+M$9#P2f؉:IzԙTe}mm)<,R`~J+W{dBo5 Nrl[w6'@X% Bh%I nVOOM}L`C Tihxx?D%DeP3ﲳj9;s.荟&:q">~1^3fpñ(\xnaIRr֎nťI`#dӆ^ך#8|TE&#FА &Wtj5$ef凴aGsldɛURՆdkf)mk}ãOqRfL$]5TdZ}-TB/#oU+HLtRـPgdMxeb"@(dQ$zdq*aI#:(:m`mEUV  z}fuR6#8s;}O8wvu pv_8 rjǑ:xLZ NiP7l4YJ([\KD,NrGOV9䨬 `)@P>OycetF:l(8.|x!ms 즒FPg*@'/3d [Դ҇Vm8p"Ao*K2c%+#GTr7 bk'M1Fnx4~eJ:14Rc>N'EZ$)7~GGGGˏp1g,/n#߹zQP;_G1Js ✧n"a:EIA_"E]+,0R-|LhzH )n6Y^ԑ2( ٤)W1&b(ˬ}HmDT1Y%Iu<+N#0Z\y{Tʋ/^PʻHkrRܵp *U`~8! L+VsMdcҠw[E -]^ˋڠ'? ;].KRcU3 &|qŧA'8::::Έwmag:O+.%$Pԫq1N_pyq ^" <]b}_1 ;,93sEPH8XDFSIXCrrx=uGb1ܙ0zÓ^ÉDZu 4LG55m-[?5N(a)Di:Mz#眆8fuH3@ :S1;׀HHq{6l˪+46}!P|I 8. :AmIq<6!ܰ}I٬8%hc5ݻwTN^)C-G\Ko>=}x?)?)PDFkZǫ%_1;(]h+tbC]wKi +rzC5$GRhY|Lb4l+)#=;%#4J]vc |Qyޛ\͍t;Y]@5Z3ֹ]^$'ƕA(X9F]uK֐2 RcRRndak`mg`꫼l-O^'%g"/p{i87&&ps荟 :{o8ZA "i瑖sy>>|m7r{r!Z 8ˢ1W>{_Je殠i!|W; 8 $8VKV|$Ţ&D۾[_@M&̯͂G2;2{Z!#+!|1 b%-Ss.lm" n[%ePK( -˘Vm֕x[{}ƳEaJSZ:난[Go< 7l=Jj&Qz#XbfWK"IwFPc:bEr,hHƑUb &h6pµ?Tr^vTGZm-Li-AEvy$ő%WNZ1]m 7jMi)Vg ӾHQSYjQl<7է| 7 <%:"&,&%[%B1c(r|1d?ndVjQEYB˻9lٸ K-u'LoY0Q'0 ә*th"= 0-lHJځ5S }NzeUl{nΐR :Go u{Bc*6 '=mkơ 24<=bJv颠zV=+Vy~LٵK>voY7fRy'ִ!>zNptttt1ֱc#@@L ,@[jy)$ ˵.i0 :qو|9Ncܔԅ6VC[XK!GT ςM1!m0f^f56t>En/*U [sBZ~Bʖ!hF@lWvm! hDζv d&W a|Hq[Yu@w [C#h.ojZ/}?/tyX 'aB# SGqg jT:O)4Vcf&6M-k1֝ȓH}k `Ch MGqxSO(2Հ =DB IpTN)@,,Q)OH,iSU((ҍi  VYF(?֢,LT X>ҶB. ؈ WW'z^=RȎZoa z_.vo+mk}-R-ϫU97~~GGGG'BֱףݫXxr9)x2Iɀa{JAJ fSY31D#!Ivn[8|0{.䖫l@כּ2Ue+wKטz@]j\wLF$qΘxCJ/d} @Hڬzlg`wHr 9z$=*-j~֌TQuUU!-4|k]wvƌ>zNptttt|"ܽSS*_aބ8 Y]S$N0'?pܖQ 3PMc1^#ջ?,炥Q-΢UrY{i#?ĉI8#0*j͔\Vڏ1ò6>w=>zgNptttt{_\}Qj:;N:fqryJK8aֈf**e_^_c@Jخ6_v"unT:n׀po&SZZ݌<UHkaKrP-I7uh#*MNYRJ"ڻ*7{DIH-9wjrgR\8M;xw7YkE|V\"lCkk1?Gt+4Êr FPcWaOeZ)G4lA~D P 0%1#e*♸ܢHǑ7|( idDZ6e6N5O#8U+NR\v2Eݾ:H#]$GeJ-GZT-:! SST;MX*<W­LN@v̆AVpąQ+r;,y:zɁ}P]2;^aʨA]EņNogO}O$ֺx>=Nptttt_`|J3ɡ_0C-|f>&+(+A/2 ^~] IDATHVRE(kH8sGudNuDJMILv)k5Ox&,e3 IM 3a]'Ě@rܬ-FM1Hy2jW^DRC8.tL1l'8::Yv5IA<"dxx2]bxC#"\:hdHɰ i:nڊ5 T|cavtYP@ iDGYo;%^> ʙRJ<5CEmW[iH37 g74k>Y0^8ޟJ!*>5; LpYqqXphL81}r.QuQ?^})H찂9͡_r $/kl7|)qd.-h8|/FeN阽 f$p32FL$W~r!jҵztmwZ7YlrUnK~ǩ4,AWa)xKxQ`*>$}^OGB/?vj'/ =~MaJ:C:NXv+׫- BѡvA1 N&7xo>4% + AO$˵Aw(:A |Zvu[FtT2>جD:\RJ^#,4AA>>Ul9~T'VV:ZvYn6[VjUsۃ pӤ1Ƶʤ"jvK7_$V\ֳ>~U :ܷ7'k[JOI`Y~]}7(F6IkִZU(BnەhXUqfqOaFayZke;vV#rZ= Tv!z*LUˏO*+J+9.D6;ܚV\?BdƢO롺# zW "a]8Mq1yEd SvcHڃn8mXLr^բ'9ܣ6W5w?upjAC=<ˣ4) Ko:B9~^MUtd79ݲODhvG ڏukkAڼJ<ܿwVԧ,jAkNntHt3\#cz1[4L_yz wGڝi$TwJu<_55) 9dz<;0`~.@̮SrYmݼ9{wnbYJBsN0$?N:OwRbִ%Gj!_@PAv^d&q[SW*Dlc¸->E_Ȼ?&7\ hG[vڒIxU<'(߅GGGGgw/A Y6_ بE6W%ɔaqІ,V!׌ vq12ېa@hkXfo xdeIz{[,сA''|x1FV4 MM:ɑH˴Ri0-7Ѭ }mZaX|3e hM"Hف)T.bcs *tQ[TTM` S&6#Efp[Itx}ݯZO'7:,t3WdC\O3Gօu˱RbL\o֎dٙtHET| RPCc!*/`w|8$:l: "'n-.Vi&Xr|iYQU,JfչH,\Rcnj`]YkG{dA_ƗmY>c%ãV er H7RT}8:D\\ndTYy5{yPvR ;DtLFSvՊwB'8::::>s|7$˭JiOtH:lj "QgH ͗zsֻ"| AQk f#_':RAhљIOjqMYZ#Rl"ܛ@@NF7 &ψ$y즄1J0ya8HQKYnS111#-rvͦa%J}AN70j 'Ꙏyy7*X^TWo=A2trC'8::::~HqT90LG;1Ȗy4U 2P$^֭IVdZc$Uw`-{!r,jN'qok5Jsx}<@܂$<Bx ѸqGK=rfn`8(TD鄥V<<Iq}):1T }8 %4.ɨkDDCckohoq߳a-FʐfEs 9SB^'dv}t-b< \]}:#oLr;`o׆ê|Aϩ0)]CGlݲ Zc8Tg.*R,°XbYHp6a='#ɡϺ#*>r# S;GCz6tgg$׮Q,nYTGMpDV:H w>.VD C^`F%Ϊیpx0U9j;.jP':Hޣ"ZlW·=3XJX&Hqn~'L0<;k(<Gx[붘m- ўkϚ-7bjK9  ҢV ձ$W^Dvҁ ^CӞe!9JMr86VX&sIm(j!!Kyn_P #gAIH245jN*ΝllmRAg/VS:ՒՖ '_3ȡz\EVR(P/U[sVU#ץe;]&7S˹9 /PLWjĻf} 7hJ/pY#l GcdVxo^$Dbyi"iyvM5G$ʛ<Bb=,];w!"%p֋UDvzYCMu\?ШM_k`i#}y ÄRjSTC=36CZ0e[*(\i XђJUCQ;LsReId*umƑmzgTڼ4LZ7'__SЯH˶%puM[xLVWhC'8::::~?J{Pk#(r-T2EJ_Ǒh9>T!Z[Hkyn+ YpL:;Ss`ڢF8SYx^;ɩSQ;Sn+Pb5Vrq5'r hrK2ú. ++A۞ P@JLaiku> TLA]?YzraS0; /П|s8VjXn %kUa9eu}FG+:#7_߾|k ZxTCK)H`ҕ6EUòBrXK??΢0z-A^GxM%1z'ur5IRغJ=k%7H٩vg/pYD sإB\ mȌ>`\sa|<<5:n#:꠪*=,a-i^: b0A)d7]wz9@6K#n;Y0kX9Er~&[tv]N7:?\~Y H3 tXV2;4[$ iDZ' ɑ׸L_!dJ˨ңؤ(g(!9& "J pضʭ]gAaMSJD6W:;y]-Ҭ}Htt]ֳ= |˧h;*FZhXoyzyYSí&/' ~:PTE*s!GotLA'8::::~/pLr}Il,I.^O18HfQ[zZ':4"l5Ix-C(6r}P8K9B"{Nwtn=0"o:v̒DG8=_&q\6ꚚdmB 2FWB~V.#!H7T8i/8A誓XttB0l*{2륡]_A} 0܎%f$[$<_;;TN24%Ε"Z?'GGGGOw } 9,jy Og^3$:|y}ɱب|*~bFȈ.ǁb:)vdgMAI/.p|y?|l?JԘԋ](asڱX2x0DZNthi֝8.9Y2hE_6cKsz#Tym%l:)DSw[[t>MU>hi5T)"Ikw,ns~ک/;R"GFEeUwkkFt'vV!9,W6[AKdَy QYDR=ɱX3i)YJ1mA@|utsH9b' |[vNHT[q/]5 4cjYxzDđ†_ۃ>Ҕj;!kCt*GvX6Gz DfN,"gjnec 6_7>7.z+397Q=M\[x- >zc>:w?OWi`P8O^c@NeUEu={9"9>c Z$>4mKt,@SDWujВPw]:#Nn&z;!z TBO-kԚ 4-ͧ(O~bSn?-$#DNSnݥxsp*G vfCt-V[^h 0qݿms ~7âU#o|Ze%<v^kF:2Fq AIQC%@\mAB\l'9LJo.6ί ^hV G":0WO[)7eL Hyƒ;5g>A* ֺχgx5m9G8a$vki:>r! :$h2A^S*)xzWY[MLx|J4^Nu%.jDV cf;/ӵUWhBWE>c`eگO7:NA'8::::~;@Pm b qjWy IDAT@v YmD:\ǼH(2^̄V`W,ոp .]Tvl&?)rsjjOF+6dr]~Fuvx>vT_tÎ -]Rq .[cݍJ5|`zqdX7ӂZDvS"M2_tU斸Y]3GLQ'ȏCiL -D_W+{Lag7:NA'8::::~¸{[Qۋ-M\t4E(RM:p+Gr-e\2^QIr fkJl43 LdȓNj$dNj o*A|xN=b$_^F {vKH}^ ɱ]^P>CgdP dHo\KmGuTN oFܡD>$҂c6 YLҕ̪`Y3X)NYF},2CAȼhyS?q|#\,.` 2QpqG6p. iLr%d#E4!$ǷOF~=~ieUtB Fh+R0-+a}1=qt^j_̚vN+ .O6÷0XNlh]XRMGV69F;:#Wzs>Gn[&#ٞʨTa*o=MfMw𑺝Gpz_.d'b܈nGDGGof:~nEG+.]{f@r #P&a rJfNr '9B\ҍ|[q)1D8Zmr>Vu.V#၊谴G5$Npu3k=Ա\*2C>=͏6jkRy5 zIa=p2zC` 3}2a#K^a~3ta"+߬vb=o8>5GGGG|Ͱ},@~WA ?W"(28]61NAXn`HrCdH)!J}/{mRU` @O(\LqSw_ XT2 젙莧sվ6 s)+!@"z<{U ##:x*D-U :&A=)+hP;ZHٖMD??SrR/tAܠN2j2lmf'$g[[_vttgo]X䰦V$Gw\riD 5DlA*1$_+]HRJ!\BF^l`nMCǡ.U]nrtR\@~ )4\0m<!tK)d!=(.h?eʉk6D&=L[* +LvBY:DMmi3rM?B 0={9$UAEE3W xX{k SLo2΄>z\GGGG _y82iArWO\t<7;Y ,3)>fɁ8H19ԭŜp!D:r > 4"ʲYG1'3là4B\ ye:Z@;p×:M:͊DnbI$ˑBnxlvXjA8:3o>Fm N+WQǑ岍GƑ 4(-'3_FeE[35h[~ o6 5Zh/z56U {% 6+rqֶk}0oRh9[hvN\Rһ*Š6+}Z>d|DxzF'8::::~{n vXQ$"hwK6UIGY<sBr\]\2)D i@r$9όɣ%^b5s_p 4 piClnX$:We p /X> >E"7x]ǟvVizʊFcȓ!9Nۣ~M%!l :Zf+maQ(1b㼄Ժ, adI{*enNQ)@lI<|X#bPfTƙ[AWhkotwVIH `A%zTqb"$A./.U}epZPlZ*׏PrH/TPef%o!_\~] CM-ݰ*sF5<auجJd1{ck\Z\=lF6lt56tOR(":XjʽC+Ac`:ukVsHYH;7 Cd[ix?g8fD7/on9?gJɤF͂ 7:c $fa6HMr\#<!HZ'/94ANGX+dI]܆T8Na"Z-K0[LYXzӇQ5D8vwh:!s£%Ζa 9 !bWD8e ᡬ f%3!v>qh k-?(oyMkeP'\;SΒmf0z>z |9 1@Y:#C0eWyXʦgНHWp\#eI@K_W0 zRv9Lbn7#:x}vxzR)NRKf0G+IB!χSA;}b՘ͪuOBH=+B;X{n-JDJ;Co.V[׼GS#4 O[-dtR)[uMv| tÄ7]œ2b*!GlG#"9xu=1ѭi)ɱ;[.e49MY%|!rxL$ODthuI@^gIJbeX&uU]m1=O?)ԫxEQiU%c]i4=%e72 ZKr5YPFle$eǴSMAlh6oW*AQΐoמWQ!\:ZLs4%Y_) 5c܊_90eE(Au'cLQ(Kx(muuer5oփ,΢ !kIDG}Ҍ*d #!͉,|˲tbeUABykj纴m2vHZJ>G1kQRC[nn%NvS*:' `gkcWCWꝭIkJ) wXkr򖰖dZ^~zÉArXSU( O'W2At|iT&x"Dٛq':2P7uݶ[\DFC_e:K *[bT"?GDy#1"O{C<Mqmÿ—7_9juL #A=l-rԃ2mctqג9^T+$e"SǍX^cd"XǔFO3Ki4),yv9 C]2n/vܿU:5GGGGGGaν 9Ut'n0 ,)!ĘBRHZi EGc Ku= <1_!" “)@ɊN:<!g r$Îq$aHdt!JB"vJ?`-@:6'7,뼔^|m5Z9W@ Ǫ_Q:O靎XUSCkz:Ay&U/F{uB5e쌛p jh ONpttttt4㛯/9wWA@6"qEHG~~ڀr2^䠒%a) U λy)U!8h9Ia3c56\x?MpzPtv8TUPI`$"e&Rhn]#uL׹m=y_V?ry4#ŨIJ5Q^3{JE^|b-'zAAw#hJ7$K5< +#M-1eU;=)lZ\["Nnt|jtc #+8KIPixmIN##Kr&%%$XcAt9XTC\ l.6|uӺH?Œ_lnieMMTX/Mpx~xRZĺE㠭&?G\yDMg)DFu)Y >ܗ@{Cm?tǘt+=T2:fЁcMtغPw-q{yipʈ$o'4dkz`vGGGGGd_~5AS_hɉwF-H\lȒx]j $kq$[~e7o!Q\v?@'Ep]!EAVp7vujkQ񝳫H5M9\S~UeDPVtFO LPhDo7ݗɗKY߈ Ani{]:|omw9Frْ>v[J?:1 | #9_mdk$L)1PqUY9o vx=|#-"%A]m)\ i >JFUb^;r&/®(O'om{h) 2r2ezM{pZX6n2*c a NacbV5˫z wlCrJ6ɖULƛ[&2Eů}FNpttttt%9?jrw!sHJȉv h40#N$&95IOԌy/(u@v5ŐIjdKt`X;6C-9T ֗B]@evcU c릶B}n~<5h8 fk aX$Q>;[URa'依gBɎONѡҝ0NMIϬ ' L;p 4k5Tz^n?I;PS[荎 8 r$GD:;CˉsQ2u4b g^+ Kq FyUM qGiU?#]@X#,hj9hi be˟y8Ig焇r]/+ kjB-9}%fR!9jHcݲ?#L0#3,}MȢY̻sN [[q`#t^;EI0Mom]%_<::΀Npttttt$uOGr`N5"sBNwuqs N<_H%_؛>c~odlg, +HVo)LiǩA0yqʹ \˳p4-SR[t CD.NlsP2Ū#}P}=

ɻE ho4BuMZ'cRj-t` mf^BraƏLIGBq Ϲ#:,:Y 1 :0:uOJ]evhvR_a?i+BO70%vZz LK'[v#D{˧Ź7eSL.J_ӷgwTI>mCt9iLR(^EyGֹSn;8wwͺ:: 8;>~LvC<'Nr#1*H:_PhI\ ^-/A9b4G^83H(Cw##:zfjXh3lDrE(Ye|Z wIּi1`tT! ZmgTn㊥uJ H;l-. Va42~Ұz{3/<*ӤO1a@R0a&\%Sw/ #h_nJoNptttttw0wIh1_z>e_TLB1H:eۀbvFs@hH-tN(]b{~1ء,Wp5X TÈmD[|ﮙ󢜎Qk=l?Ui:cL+}k@ bfLNʨ1#T\i!a0hMVEt" # Z穘SG2e 7$u%K@}9HGbIrHNYvavb#1 ѱW6|-|-,1at#!Gml̀+r܋*a FN6a,@ퟂfm׌xש՟gd-Qh٤ͱ!<*!w3ծ"^?C0 lrMF︾&S`SFEIj!)oH_):fJr)HlW1pQjYY;B-92dzRw?D"%Sh)#jH |qAٚВm8\1m kFu{> ' W%Bp n.7SdF mF.㨶ḉۓ0]_>3R\޽;462'8F*}[YB,R¢:H$Ǘ/ BkmKL:`*/%MtR$\r4Üx|2?M$3DDb `εHCs?l(=wiԆ&@p- uG+'tDGB(_Ret%$-1U=խvQ+dF|# >w{紻#}:/zha ] oVW|Ѳdn/J3r.ğtFsS1ckU/.!o$(?2N4|ݏ\ihŁsjhq'j'InH()RumH $N0;HnAPibO;ig6=z#s1 vrsD'8:::::> ?W>Zqt7.o#_dh$"ia D]FQW.vPIPvJ<쨭rό<^x:4# 6,l7oPO3_rڶvmsE@OhZ"I~.t*r}9cݞj]͆vӾiВ$2lE;Q'5¢+:ɐ|u0 ` > <|)Z]͒GvݍD4{ԔHe{Hk_nnpYGGh"ֻ^+G` pcAiDFGy Te@w9IyrC5u*퓶뇲;io YY\̈nloZЅp^!$O>Ҭ _(vT y m,W{c=KGYo6 JNkɪr 7(.mh'ZjKmoJ1TQ9iqCI*iGNWtf%lbqC=e2S'geIaռ(V`'ұ2~-8.iȴFrP]5'^y5U-W]Dl7}C TNΡpIB pM<զw~9&/[ %g1Q^Cs&;bӾkao*aCd^W)MtK$f4<-7DPGW))NGt;|a]VVkA`Q'ڑ>jWٗ\MO &h Γf! ymV;z;=zwjin;n㺟US[ {-v  g޶7W7k8@Fro}rC1<sS8VTO Jkh>)3=lۖ4ߟ/%;ՑCCT,B`8CY:rJqYF^^4O+m7HO׆ϥdHs5Ǘ꽥y-\HC\Eؘ>r\xsH1~q÷?ܼh84E,䋋::A$.*?)S~bTm4s}?zqh<~NrcoEY]jZx=,!+Oa.PC4kj[cUb'){}RjV'Ⱦ-, R 90'5'OyLSVv| {LI@c#`bIڱ{иli)fM]67cDH_ xtD+ k3}*V2 7Z`b{AI _;?@x m_ۦ E,Ii\|3 br`[<-ōśC3d\=WW, 5'h/{0[\\tC[#Fٸ6gƒ@ԩNL/ʝ=/#}*g][AR F5y89/<~~X3l潨Y޿yh5J>Gtz~Znm& 7NמC^B֖@p((K/6[}4[  D]gK"C`bK|ƳsP6ZoWyL8SO~X7oXx4b]+~ GhJ<|Bt Q[ʻXmcTxi(+<4/%+Y_l.lĞдxVNoy5_Elv "WWU%~W̳bߊ;(<:< ׽J>i[j9<"K@qg ƍ#B`>cw"\:zfŻtŎe HxP SI~M61PȮBS'_F2PN겣1, x{ªX"4OObO-BW4E r^k .&ՓBVԏS|}xdl5a*ox*X ;oU\#EjHiUaRKWS.q?Ly <7:kh<~ZN]GwCƛCbqSS"$(q \_\hwK6Cţ:"bo ޠ7oDv"cF0'IFV{$[Q H$&\Z*LySWE ~Dcȑ/uo^MK5FБeb=e%f;1@ӧ{7Ft$d3H %GI#w.UVk:Pϴbgw~G2*<]NJo~xvNApWn04p&M BT5 +s+p8\ " +ΧJ_ի,uPO~GJ)"eEbAY]XlI; K0qDʞ]*l7,|=eW4۳郫 Q;|vn ҟ%-^#L7\Cu7!07xnu6? 7cxsLSod )%oR:'>iU m3>Vִ{}zc.{o^nׁP52cD^F_^-{9ZvƬb/N.RhQ<"4c#``cG4bX;V'ʲvA AnZöjJ=뒱]c8<Ëe]~XS?)('Z:BZjб\+~,[m>%#TNS+fh-|?@h X{ p8edY~`|KM)t[.K.G˳jH^jB C=av^zzܻyw_젃% <7rs;FWcqQuFmE^`)=7؏~6-98l2Qc--^⼒ IDAT%5\ܲyKL/;Կc2b?#F11t~an7=3_{g{BEB'`zQ{Ӧ#reDIzW]s+UD)-T7sl #zoDߖ!+rK7ɶʉ$h4(mzʚBa\(]&~gavb[IK :VͷN`=,o\L/SޤY?ʤ`6 xpXVX+&j,vV,Q}R붋F oQjBĈ^ͳZđUV8o GgňD$0ʝ ϯW8V vF^}JrVU|//D;-nT??JZNƨGU ql1d&5'*%&FQ$Yz=]SyfzY pUF:ں 1yq,{D^c4ڙѝ`וzT}

Qݫb.UM?&<@[A Ͽg"r$ j;̧ܲBQr#!g..HZ$wȏلԓf%G6n*jmӹPHlRmA$ɨĄˀ>$a"U8EÒ`S ߧ~@w'A7GGAeYRn?G ٚKz[=^N͏c9 _wJz,컈W9R{4AR;٢6ZG Ԝ}=0Twѭ%Ȼpo=yU<-r{hM p1l55S3s!:n"&_xg60!t=eQZC "γ+"x嗚n%BٸҒqq-aIX8yfʓ>Vbv }ϯu_ӈNyC;ɟ|lgPT,s`NU0ztYaP !(W.: Å$XLRM9MŽʊ5eZN+h\f?e_K)΀8¶BG=S6 87N\d†JMh<~ZJ:upҰvɐ!&vB/h`sQmrgr`qF[io'r\㨬V=K~=:bX1/Z% lnO~T(_wKPDY yGs "˫cz5Vf(s}|ooORЋv7S%,hҟԪx.$@$ѓ_VEŎ~[&sR۽bt>Ubmw.^-%,t4r1hQݧ߿ CsR$6HS҄}ǒtI0cYsY\<"?w2d: "*DiD 5$DKbm@;s qO 2iR1 I$ne-pjih3e(孄Β5oXXU؃o?~@nO\!?//(\?KG'l%']rucI@O_h*h'|[EBsF. [6dhK6)4oP}IjՑT=$y9DXikȊebzXl:Jj) m׻[6_ 7UVc%7cY59nLCq)'?o?R' Iѡy ?5X(뷆xt%^Tc덭&#VybQ\+vgy/DgcNߣxu%XWGsJ~ޗ|Rdq#Fٹd_M vNw6֛C)~筡mwUw]^f(j\a%f#>߾q޺q;ammm[I h&oqv[U9+SBSpO>ٙ1ȑ#BBe9@$B00ŵ%ꝿDٚSStnoĂiV=qA P3?СmyiSF@lmCxŪ&e~>,.9ko…x&5rRl9_6yE@R5ک'ELXbh<+i! x[VCOwjUa<$F ?* Hy۶o!ą%!bzbnPtdžhMoz:ݿux?Q^hOfR/:)xv^krкCc9KT]?H* ?8% Y ۻcsakk#(3̫Ŏ%t`=O2Om$!vwa-|>saŗnom}<(1֛? ` '`#i_l\MP׌gPm~{=+|B=Cw)ʲl[7ޢ;rlˑxt&iu#oݣ|bnD-JQed]DaCgU^0"zu9 RccC"IiCXq#`0%ep 8:G2c]>ŖDYE"džypgcigΊ9_G~[} DX1P ibI|uy2_5hZHƔcJ~.L9=>.Lwƫl4-8ڑh{0r2@kl8$&/F"GN!vĎdRÝ;tǫl8@ | :; ZhJbhrDϳ"i(ϒ<9b[VbI.pR{q/m WGGe2Xr7X=H2 w=zc}ID$A\m'UVEnO/\ѽq* WW)n<@#!LSJ'3钓N.'q?g u>Sh8%[y޳.ᢦp] Vv谬+k\zPWAm6 R MҐ"8`}xsh{==FCpyqDM pu^|id}/#)ufxRO/ Heq9NpB//\ATQeTSԵKƽ;tx#lضgf c@q~6gCuG99z9b)Juy2{ޣA"cyu4?IY8b DstAbEX;tJ=~LHh*k't:($8>iu#ڀ|oř1 1L5e&rtv $b2q{:OűGv"D]L!8LƣwA a$ʞ<w,ٛ*:W~2Z^ ڒom`m$%p*ae]〸@;^鯞WRa*: ۗ튫4+&Qi?t!nQ@@-H}=*=/uڍV4p[`E!*Q .sXl8P+φl[}l3G٠21uj96E e<'h/ eYUqjgrDyLg3.cZYDv_rBC[9 uzxa:Nj>+<"@G7 nB p`i|}B2[pU/9S>1u,xH7"VUqD4'k:J]*؎s8=zQ}j分 t|mHbZЕ]]6e{yyKPs,cyaq!n~ p`eH RxB$9Krghp8߶eEߕ{- n@~:CPB qEJ:`T]E+^8<9]{MUU2F}8(AC:L""`:2;ޙ#PKN ʷ\j n@@~:_| :<R3hϙG{Xұ +,%FDHTPc9:Ml ^D+v; @`V1z9C:Ayšz5T"6BCUlo 1 DJ n@@+<1t$)- P]ІQ\6XW?yDUwP38j2AS) UY V}񱵪k1& [E'BNaZZV9@dt6Ca!ٯU޻KZZs$B?IO4d.#Gti2AoQ-4@ it6*:t0DL:*w" Y' Wi(ᰵL xoAH  E_$%-uV͇:E^FKq 8c7IDATNa2yQ]"Q/Q"G#ʦzd !)*@/4:RDCyu"@S@biAnAT~2ߟřJQnKᡱm91\Ѹ]H9Zqޏnb@ pܫcx*2[渄Ri9A6=EC<"tI @Z pو TVH9R 2&lkP86%@.㨧mʏaJh88lDϿyNqѱ1#?΃7nP`bxmZss% 7ơW/ C_.6,Fe0`Y@haԘZ"dåpƦjx,-DacQͮftgpG[?FDqٶB^UFtzvJO;se<;:wjnxxmV5%vQ%;q瑗2Enk<N10r6r?G}cͱK&`Y @*3 ³CmNR@P:$_߿ҵ5zgbebfyx簠pa.@1v #嗿΢IZ4n们Ua:>+8xu4Q Hk:zsѠk`e\qwHA51aGCl8@c};*J)Hq"HJ IKIJGJJIKa8y"Ֆ͒="{MvV.g)Ǘ+;-Hז,L_~NAQI!ER¬"CV1NLMZ)VL $L`V0{"eyeg :JJU*[5JLGU殖֢HVQ?ާ>حѩ1͒fX9֘&YF3U^FuX6m]}G1Չ93 |UҪU$]nnCM/OS~~>&   .y݆i񍪍&v\mu:ƑGLMv|253Θ՘lOv19|y-Եl^Zä́UUКij}ZhlfSoV6¶vʼn伲3صs-[{'BCSGhGfhgWΣ<lqu%V>svu.֪MZ26,b&*4r**4j:*@LMLyl,7*us\m|GD\bh$jR|Robrv`NJA0"`H*hL֧uӗ? ͌]֙ՙdKd'eo޴gTcOQ{rswol m ڳMu[NO [A^i۝;OrR V (m? Yrˆ[EEE[?Xި%%Ga%oDDiNe̲²7Yn\^{p(㐰­Rr_bULp]u[|͞iU-x4:zccǞ77Q'z̚KZ!'lsWnk]8q/v=s}ٚvZ{aԱC) _}ABEKr.]N<{%DƞWzuW8}nX8[[Mowf[@;]wv8d3tyoy02*|`a׏2-<>+|"ߵ~o /ۏ?yx??'󟓟O)M5MMqb݋ɗ)/f 櫳/ M^̛oy=}na>|ZZ.V|R?B, bKGD pHYs,K,K=tEXtSoftwareGPL Ghostscript 9.22_ IDATxyw}Yz^%R4-xZsb\` ڇ$\;ν9!ccKnf9;6M?%biLW , {-sz{~~8#С r<ӱcǢ> @K>@\r9MOO󼨏RdddDf=@!h0SNEvVcԩSnO @LHaV0!$VLGp>@ՆQ?>)=<0 `Rt&qctd>Ȉ ALyN}땕:uJ߃/hSN $)d:R؆0ӧO+]i RЈ_ [N;W=T 0jxxXǎc%)@~!)gR-_H>4y:n=ϸ |6)7Rϰ׺X~A D(Wn}lGiG&'@H@q=+IZ$d]5>T(&duJ$υ$Kd?`1"z^ *THU邜'؋'R#SthzR=`1&͝Hb&V}]30?(g`havC*}J\6 Rh3LH@ُ=Q53fR#d@[ 61y:j"ʸ 9C; LH@=QM U=O X@C Z=Q{#RK5Y&QmH@ @[aB "瞨vZ۪8Kk|Kmχ>*JZ^^1ҳ>1zR翠b|~YKF}$C {x_j{+ 4?UCzg>@[!=0y:nL[V08tmQa&'&t|߯< /uzoDz.vC MTMĶ'jGb'/ @|MBdCG 4I\{ҒjLR翠  2ƨ=m ;1 $˞ 8`*\ _# yϪo=m kO{!e~^ V&$577_#<@{!]' Ʒ/|ዕ@8~IW %l=Q _IFAPdY:;3_m@ v(R+ gL U*ӫg}.C)؆p=(F/i))Ra+{DJJ}@=O >` j{2H>JC}ÿWSf^'UX⼺zLvXhR3L,(ZCmT\X񭔙 PҢ,RGG})H:žD`pHeTztjJ|ؼK_Hqb=ű_*\k`v]/^?T%  uttul@ *B+_5` {f%R痕/Kz6B _O$zb 엊_K} _ ;=RZ^.Rݽz"8-@ My^,{DH`jrbV땯UY 󒤎.~86@[ /ծŅqDŜHlZ1~]uM/X5CV/K2&d ?fsTV󌛐ݻo'<"a.]u>Jä5b|zDXW'lۖm;rGҁWjd*zu;ƙLFǍUEO~ɉ/_: peTU,T(um_&ޔj5O*DW_'ֲ=/٨0#dtK\g>} ٶ#۶8::W>7ܫ ֔L&(& E}B "k|LIY\x+WBx/D},B  ?e.]QZ_jbbBJPX.+q쉲{¶C*`,Zj|>)0y:Jirb"4+CtEaGTA>JÜLu""hsRZDLc3e܄QhxSlL=Hh[g2XQj0lVǍљ'*nyQ KHhDCD 4R(IDRqZ_ 9QFCYݽLD?|Dֹe?qbrbBSLF052Rj¸ zVGbG@k`B @8Jj5ϸ Yݽ-C* ɿtA._HSq)&DL&*' q~ɉ "ƄHLHsD~)4=QqY3n_=Qa`5>A `Oı'' Z08Ʋ_i)"TzDGi< ?5>I4퉊TTG%@cHh3L,(ŵ_1K4 {⶞GlR؈)әL&6QRy*+>`ࠬge]qd:Q)(m@ HbDYݽLD  48$҅SlVN:)S)mceyq +엊R;Äm<ٚ˕=>"Y瞗}liɉ My2%ST(&^0 G?p04D.tZ'R)6MY/u2Vz|\cńu`ı_jrb~)uHƔ1( cuʽAGTجI`5>Tŵ'?HOfJw~)H8d:0b=h__=Qar,k|"'*nyQ@|C*`,XOyq T5>)HLmOT~)G #D  hOR@ű'ʸ z\?|$Vk|R ޜ9NRY͓ADuC* ɿtA._HK5*& F`;~8/ ) &FCTz|\c=G8QDJ5>^0AQ)t:c4jZG>7UŗTw$Iֹe?gdtTcn| $쉊SEO~)cB hzÄvBtAΓODp_ 4R@ű'' )Rc/Ŵh&' RFRk_T{~)[LHמ( a4P{c/Rdt2z^D Ue:n-=`d2 z+{vV=/*ZLN )`8QVwF@GTجIQ|6C l'*nyQK6B l n=QKn-4R`]tHuuYLZ!BtH!*HFFG5/jı'ʸD[zVè~=@_*k|KR@Eܦjb )DR̥ ΟubS^JkU>5){Sth(AT), 1@ U D0~yqauʽЖp+>g )KScc1G 9CQR^OHՊN0J%IDw]2nBvA(g!WţD}e:nΰ@ }Ą[r/v+g`rǂX75>b@ 7y:No zmL=QvwoG_8Qd:M1FbmUWN?Me" X)D%/Rkvj{_ )NW+j'"\' SKVF X WF`ʸ z >{-@ q"=cOM jh5SlV'ihSR1MUSM' la05>) ڔW-&ULm3LYݽr?D3#bA ufbB']FSD~p` g hzhylLS^vQibLD pѨ} GUx%Yʺ|14Lz|\cВB[9y0*vmT8E͹ƨpqbZ C qtVE7vL_j;b%yvKeOk| V0jSN4k' h"V|(V+{qodtTo' rLHm9RfR/>Wu m+\+'4L.qctn)"ńZ WvPF^_vLE{ )DaLHe{^Q-T`߉ńԩS>l%vT/=;2nBu7Fb~)(uiBYFvZGk|VWz5SlL@jttTXF2 vLi'W{o2R\nWNJ1</dYeS\)D@>s邬ge]Q` [5vUD~)~) akԮŭ_5>+ Z;atT{9?w3JNʟ،5>&D )D $5F8u UF~0V0h^϶O[0k|l3LPs92@j@ԩS&jC¨FRS8}mgG (HmR+yT?W8Y&9fj$jtTUH:JtaZD[RRk[9WFm {g܄}[#Q Bv.Fk|L:}lbBL=k=W/Trq$ݖJy:B9dS["@ {q[㓤׼*PlI&m\zzmFAU(\{^J)Y4zaThh/A (H5ϵԜI旯^V=}𜁤勀 xRY5aԎ&6zmqeE@ Q jv[㛫ܾkZhJjǍ$k뽾YXUgU^;\z `Z"22R}Z4::Z}. RFFFV/ jZ9/p}2D;S( H! RJR^Ry"fr[6 <)k|L۹zU3NN"҃S-, CzĄ$U_&*5ko~kkª fu>_V~H:X9fiӧOktt0mWj=LG?O*}_uDaC IDAT৮@wskaZW08x=~Jg+vR޴T I#cY2-cٲ*eɘU~1}0P*JWnKܖ*-VJ\kë0r$uHĄ~/i)@ g4y0*6pJRrZh߯Qk 05J:?Z~8\0 $[NW:_`pHljԋOזy_(0LkUR9d*eS!TƵZ jR+P 毼VڳWkCڛUzծ_fWcĄ3/`_@*n:^IOҺȼ5~ɨSVrЪkEЖG uljjVoʴSe*%cC(˲ePʪLCٶ-rVT *7@J|k©)WUTRy6p 'TVk_ 9~٬~?vM#&`_@vi~j/x^z*hv0hwJC/]hh0'Txf*v+kv+mǕ8rGq\Y#۲eٶ}{-ˮ*T ç_y6** * *łJJXUr`%N+< 6Zozk+U.''&cS<}w'#婔I ZZdW[OXxz ߿Uϙ:Q݂z|דQ@,q=D쵖F=%cWB(DَS \%;:H&8nyɶ+{ս@P0U?WVŸVRWyA ?U}kB!B>_XXV!/XJbyڪf*_3T ~\Pm69e 㙌^_`=ѷ'=}{?<>{%f)aT{{0jT[Zu(?|D# ~Pb@*O=a%crܤdRdDBnSʲS8 J(N9F7}jƘj?UʒmٖD"!utHaPU b%ʫX(hiiQK Z^^U:_ UTx@6Tm(UuQ];ON'' Ŵ\ 5==]tTwkp)DڐY]SQ/RΓOkIzMut<^%;Lvȶ/J_Q&NF+Ppm9$eU~֚?Kvʑ'¢j@e,˒mYrݤz:TU(T5ZZT!UrfbWTVB9ZY˫ z聤OOLSz`|\߻}.W_Z,woW֟VB eT ź^{ݱ1PsEĺARkֻV}(`pH_oޙ˚aYC7jW,_VT_*T!T_)j)yWjwS8MU L Yʿ3&:2縉rzc4vdlPR`[e˵m>T,\ UW_j,ܚE^ {l< VZHbَ7eu(U ԟYB)hRؑׄQIuknT'aJhkOI_>o_)C*(ʁMX]KErJ(eUV9jK*XT9ԑV~-p%|d,7?Y}3Y a帲 ۖ,[].k-[NvT(j~~VKK+J*JRWW)[驵T89* ْS^ߟ߃aNAT tˋ +/jd*n^ Z:콧Oxyf6 &RSQ`ʿtaR7ο֕!]8W*4T*V|ߗ#)CZ $ulyR6޾Ik٬e?o|泲]Wn2%:$2]Sa88>0R߀47;٫Z\XP\ /6 oa(* XWwd %\WV%ZձeRK P*T,Hz)dk@?jtttzGyyp|mHT6\_`Vϭ"iDT tA] |_߶JUL@I*Q͐fu5Nr$ґ:kjg=O_fe ާ^ut萓HJ2=e[\VgiqiIsW5;wUsWSSŢJp*i5کUTeɖMh~iARI~RlU9LgQ2ZZTgT yX0{)β6yfUj'NG=ì^VW!Q?w[ܮ>(`?ZhG>tܛK*~;Q;~Vduo<ҹ=/}<=-'Q l[wlRY]իZ\W/R \/iW CoPOO: u$Lv3cubQbABAE-/iiqA yŢT*JȰjYүݿس )X8ՆQ[ZÄQ{ѱUJkNKվg綿g.aؖKFFG5l;zU*W|{׻d ~S=Jv!h˶fgjnvFssZ^^*1J*%ZNIR}*iaynN/X*3١m^' UYߛόP*!c~>)y>J\NO?}}yE{qtF}&4l"ʬyS못og /;Y}zʿ:qK e*WkkgWӧ%iRtdtTG[G_~-]? 2rcԑLWݽ%7K句 ^a/ 1F/_|߯܂~*zʲjٹU ;U ˣQAi رc&\.O|zYcg=OcbB*+Lm{H! R1٥Mi\6p $ihdDMz׿+Ԕ;/g%lG]=SWOIA5 dVSa8FP*T_ |ɶmَ[T J`)ϒzy*>ܞuHOVeY X7]R\ZxNzSꗲ]W=QG@Tŭ_jk|9j_Vgnmd?4+W.KUPPXRd)vHuHlFeX*8JnBnSCu%;ԑH*(T* *旵09-]UqyIA իI_O ܞrmzzZJR ^y#>6>tW7 ԖYu ȡ7 \ LLI $gDdLGyIs rf\\%**} tPR2M#ײˁ^Ju&eݝLv R PJja K R JBGGI@}+O_&vT(/F}HՆQR;yz H"B48Sq5٬>K_}V;廮 `jYf4s咮\9 yX@Wg#gM0))WI' LvC]k Z^U-* B@u޴D ʓO~Eǎ|W28^;t}G91 {`j;aZR5>$}=>Au^D߀Jh)5;7+W.jf撖gf@z[31Zir(Y3)ѩή _Q|J-hq~V 3*,+(RqU(S[Rk~/T-SR3z+_(OFIׄRT ]܄:ݤnB]^Gz)**/-ha^YJY*YR9P @/>OP(q\nBc˲J8P_G$:z:z"3;,Kǥ֧%Q&K95)qodtToor7&?r078:)M^Qڀ )cK ˮrՕPgGz:ե.R!R~YE-hEVI̿"@H}ӟ‚,˖mrwU0e%*See˗eiQw~0?V{\7Q B2.y򉨏P^㓤Yy|T=~}o TY}K8Nu}+TWC]ToW: b%Z܌f.ky~NA~Y*FGs@SHm7zOkaa^S#۶eNLYd1rݤz׻W4{Uj8?K`R֊$=295>I:~Cz>m46 Pʵ,u8nO*TW٥ **,-jaf/_B^e|_O @jԛu%^11ڞ]wdSz=z衟?:z*^ zq#)D@ 뱿ح5_JsDp~ ޯ7Vg<-]Jtu[IQ1Ғ^}G= J%~rrRÄRo}ҁ}2ƒEJE ʭBb(q ZrZ=rV=} RJw߫{( fu2։&2e$-ޖ@ˁ%bkTҒfuy~NfuqvFge$r:;vtjuJJ#9mHRW`?#ĝwޮG- UK*J** *CC7ny{t䯿Wg׆G<6yבtM(UkqE=Іj0lVǍљ&4zeٶ,ǖmRQV8UL-`/i.ܬ.+KYq:ЯPGo_%re,[ꏙ ڂ;x~w~K}}=D" ~c97aVlOݿ>tNNK\7AZ08tmQa&'&t"T eɲSۖoéաSX}~Ibh+uy~VU] WgtJ~uWO:zˡX>շ(8#ڢ{@Q |WGG:;>̄roymNvL9nBFQc׈`2ۮLIRȶY+c ,K]N koAJ(5W*jfiQfui~Vߛ\_B^=}P:Kn<)e>NJ@HmÝwޮmUww,V}_pY]k L5z[ m{Lub(R]{ߨm+i;JXֵTJ)MBmqmABebj/iׅޕK%t{8UnW;x$ʡes{RַuSwwzzzeێ{WKtUY Uo@9_LLT_< }&@ߠ Ʒ~#JXU,{%r#q|vݚpR^SՂyIAלw咾{咾;.*p TuI&%UBҟ' cg2\:bx`L_[TW"ѡ5+f|A/tA/Z85~W$Ifk<6=գή: /;Y}zʿ:qІ!H#>McYMyFF402=ߐ%#Y6l˒cl*?oY,K,˒,#˔cIȗQQJ[x߯J2*US ճZ.Uqtuu˲mcPKUt3=Ξ=˗(T"Q} ]P" rWxo,",J  E (HQ!EŨkWӧLӏge @$۔C*Xr,K;U LJUoc*aT%xJ(U @%I@* ż|%*ɲm\h'PJt^Jo`5ԶIc]O>6~|{KizzZ:v؞sV=`j'RI7-\YhG>tܛK*~;Q1a.]ull&$)=>-/c#U>/*eOA@A9\ |_~|~˷}u۶I9\I10FR1P߀ RaY$aA~wQ+Rկ~M^{zC?S}y٬$ittT==V&5v&77d"yY`+)4uyF}zdrRl3٬~ejUI2֚cU)KjVR*A9}P ~ e++UCc8:s@7 e㸺zỺo4?;.pzk^{}q菎znddBeYeY4}3= /u0 .(f 勱X㓴57Gd~y}K%Y~I_~ @vȖX\˖cr-Ke˶m.V%ߔoeɷJRI APRkayIZXZ$4x:9nB%|RaBAyǷj=lzU\.j/Ji <ƚKծ>-Uޮ:!lRR+q\7,zgYZ}uf_NJJ|2IU:IQay#U2FAVf%پ/JꬬZ7n *\O?iB)tiIjJԯRLG}ܼ`~Mh( @ (HaKߪ\}RRgy%cʥ:e>nQ?}N˗.{L7JHfK} ?nnz@ Q BTkFyU?PQRA+S9SU*VW+V*_RP7 IDATN9~I+ttCg^qRϜ9˿HSNizzZjﭫWN0ըi]=:!B5˟X&`j=d!sodZ'Q2AU/SJ d<1U*+gFzuC"!gng{"jaoOm+Lj_MzV4@ V/2-oPh )D@ dK5󞧿Jqz~R޲Ty[ #FKKTnԿO-o{Ǫ#BЊ/5Fyt61Z,%g>:@#jCaFk|dgkf0{;܄n`U@H! RhUq]k` }Rmj~vUdNK _)8Sq O굯3@[{w*ok|/7 @H! Rhq[㓤 OG~>v@*&`j!ӋNUo|t U=MD (H-|_oO_` Tr9+B.AU{-h2)D@ (k|WG` ڌ8_:uJ$)Bxup;@C*}G J}ӚNè"&bY'jw&th`h@0!(0!8$=uQ]#Uo{[>`LHğd2֟bh{w0 pyRw=e?7GVńTL))meB}RݽPh0&&7qz鮻O5Xe:JZT2[sv8&L08KW+[be=yĆ㵯ws W08tmQ! Hꗔfw}#T@},Vzm`w:ɭ-).RWeLyZί~Iw=|Xï]wݡG=>@bBq+}܌5z{!WţD} ]PJa$ Oӛ.şittk|(5oSzfT,~7Oi$y󨻺O 089P$fxXZ„?b Rk#`)db(pXacw%/Z--h#c !.``Ξ>|ͪXy3_=xk9,< O?}< =Բ78Qݶvq~F# rm| >t0C$2 +?K'_s ABR ]i>~A)= . bP1 B =*rk+]ugj) A@RƋRyLvyRK5OQAAX:|tbD~}UX:7sxg~paq|A[ jٛ0Z\{DnSz i 2'  $G#o㻸0.8Kpp\rȭ|kxv^ Eex ;Aj#  XͺjPyaȭ|c[ R_HzaESNJFzAAD ;w-7 #PAt$~1\X\AL<$&:*(xh6$  X:fW~}+_?qqSA}@BjBy缧~i"  zi$ƭ*OrA=$&7lj5RAAD˗rFЛ4.:a TGҮ4.<(  " ɗW(_ ;Q_ў7]~|Z" !}Yp9|R>rr_EQa> QQ_N$| |Q|gpAԘ _A$ b s=Űqּ(h]CSn:o$Q`>0e(ߟ 1KWj#q13AS~v2z Gf:^+A(({`ԗ@lA}ߍOK\H'>SQocmYGjjULnn){x:Ggq$oQsA=/#RHLA4CBjygOПW^ݞG&xA1 wqzg綻@Z!J)R$ǧGwr[*cx0'/Xe ?$ƘHzSY=۩: 11 RfK\p]Z x̧^ 9`Vr*%Y<Ӎ~j/!,TsN"ϭ6>SARc <(`pOo#K1Ɛ"F#έBb^,lH5()^Lq}\#>-XO@y˚?F$ F!NJ*9TyMŬaV1v[iSGVԘVY0s R0yy~,efpx6㺁źEC#cԠKć}J˕ ]_Eнx-m[ɭ}4 SŔ_l9pmAeP2ik_~%"bKBBj ycqĉW?u~`WK1ZHHd)R6 u 9qRS#̗qwѧ]#z{u˕2nVK{m> ,T+XdA:9u["bN'9NU!!5x)w~zY=z-pQʎ"b !EDRVHӻVqr6>@ܛ=۫z{^]sdcTJɴ5Ssc NF)>)%9WMYȩ*Cd,$`ȴ& ?2" 3pO_IL-W+^VnO k!˂i[mnf(JooZKYNݖH`V !@%65 Җ4[]o|) ɂԘqW?u3?"bB !E˻IB} Ra7툩"^hɽ[:{n+z֩tR\H)YNI냳, 9EA^p[" K z[, 'e7B6KAL$ƈ?8]ϙc HHaY) uKA?$ƈ_?~:5Б:MMQAL$Ny!jqZ yLpȄ|){zwHܼ޼-eTc6Sc7mr^N8,y< %yZQAr./_5%$xqtGPVPVPQ;J)˲L܁is|) hzC\)A@Bh{+Sۏ|Qo+SCnsqkȿ:޶葫TUPA4( UUwAQ@ŻiZ02`&Lm'D<}($[]'Q R L;fzO:MAVD9x]m:6Qo_v뤅Z$ӕpmN~ rdN*t=X,D"]AU5INV8e{m{a^0jkjU ð%U!q< Y,GY_Lܯ}RG>?c>2a^HOW*e5( $)m)WRUlX:||v~j.:8Ab *Ƅ_GSuAUH=ZL j)_n׶H6>{~;4xxXX xxO^ρr~[E%Tjz4}rʫjvR .j,Ffs/4MTUu\.^siA}~|B|)j#b 1[]W35NUU( bY;MTܦjNtZTLu/Z(rŔ{ ]P7 :z;evK,zݕ@yPm.A<{̮'ݪ"4PUQ.|/QEUw,U*(E1Ĕ T( p[@\iH$nU&hJ%HR*EYSS'`-OQK'O⥓'IL1Q`-z>RAq9݈Nnf:16&1%ʘiw1sx57 )|iu+(V="lj)_䅤+d2T*4aueE%JS[EwC1v>SʚR"sO\m߾ 1JEuD<.)x 0 Z@#a> ѩʗzI\X\6> &R#Ev;ovT/TEALqQQ&+z=VaWtcT|)]UQ7 ܈pcܱ|]IF)IiL4 CfQ\\.èVT*\.bsRITO9biS'$ݑagAUUIRY9njDž4= ѓqj#`Ω阱S'KAR#'[lѣv= bxyA{0xeI>fj)l:Zs_ jToۍvcニ-Wȣy#y2J>3"[Ӿ,MϡMe۔2Mm|KT-EXAR#'ۢϙ=VdVB,> -ÏK{w㠪3lTcM\T>49ӛs۰/ ~*;sy,G3ޗy%R&j d T Xۭ}"3F33y%llccbqjGiR-LjvNuӺ_n H"OJ-|ZJsUR})9ɗR_T6> R#iFc? "4$b8 VLEqIɗ.wߴC&_ʑ'q/.E{NViH&Ӷ-y "A&\n+PXwŔi2gBF9{m|μx%)_NU.RΏش82҄`>0̗q QA-{#Chk< ) &jٛ"Q摧Uзqjec0m~m[ƭOih'νBt]GG.G*izbq+X__Cnz:N hߋ##Xxm)ż>0PVP,Q,n\.L ϲ,2)[ Pl(_j}wk%gHHM]DJD=aԣ;$K SJԾ~Y5 ˺l6gWM)zƄ(`mmkk+(Kh| )ΔȒC1%rI)%Ĕ2;`XDiWg՛Tڲpʗ"°Sh>(KMPވuA 2' ƀl/}N8-Rqf.gsx13}W߉}0i4t>b Y$N1- A.7[rݾ?nK9/Kj3uW85L@*Ǥ,)g=Ri_TQQlm|m4|bqY=6c,O<1f13iYS}ϲ{u^2 F͕R1\g'MzI\X\66\x?<ʉ"^ PZQ1EPd]"݉ НcT6n|T-UR898ڏ|UQr۞W5%/sU篖r*RH&3dH2\.PXC-{2qϓ b(_D4PԐ9f4qKՓ?³qS9A1Dy#p``]H=?󨪪QQ ΃ԀuEEm)k8oa'ӻ}c-fe #*l,9;RrJs[9&LSiZ0M:VJF ZLt%0MR(ش82P8Fs HL]#AR*GL)k{-)(j#hr> IDAT!PUݺn0s j?Vc!&)u^c$Ec:wsxv#'x/WJ xoVb$>OSH&H{+UQ.P*mPXΝ+?G{Q_TTK9l6>ʉ"ABj<0VD6CyQ9AS _ՉpalHT1&v/%|7n\ׯJYLy![Jʛ网4X,d2Lfn A6;Zr 5b='OoSF|_@ʉ"C-{C?(kmjiQAĠF +Ac7cFXQK#ZKO-K6_j޹O{%Bt[1Q1Eb BABjiыϗ -܋ZNaW\ݿ|j)iFw.WF@15cO k0-. \A%Zc:R `LfعsMqU.#aqĢ<~F156>ʉ"E}1kBΜ:3Nٿģ}8$H6M;]2 ZRIUb)'Q':n;< 8Ld&.ry߳@{vۄݿ]?w ۜ]2ՊO@ɯƃQC ! N^X'zaR )žc',`*9k+ػt3UJBTEQf59u~XVu(ꪕz 7JE}iX"H" aG:C!bpbjqqN@y1i0FjRGYIzS KRԢK__Bʽ o ͔K5"_jf}{Kb*\{^Ar׋`!&N_+e,W+nԍr׋D;_>?syj4ΠP_TUKjs8~zGD_0дS?jכj|RGlqHHG2JfAnnt1ERR{a * ( vgFr4|Q"DABj׾I~T/?"jHL[R1h|}3?qk Mb*'ZQHЇgb_)_ʞg+^z<{I}G-VQ_FO? v z)Q1PpRunԼ Irx'6> :m^TXe]^#Y38) 0Mc.mY@:%]S䍩ZqӺ'8PWń9`f}>4M=|)btX:|tb<8TE ׽4anik6/EL;o-?[ /jR6oyL Η 1UEͤRUD5YK|?nׯ c'6]-gtj@MRAL6$'c@qԸ,|)RМ/ž^AI+7³C/~,8/9:[c1;t[5iX؟}oƚUwyaܭjf6AL$ğ~w0*[bkÿQ-P1^^xq@W4YQ2CEo+S1jMZەP,9UVP7VËmRD( * fq;KD8)''JiABB M?$32/El=w9R.A?{ |'tR6>n$U4}˗6*:fDR!]p:b)BW'6VowތDDmopwL{`UKM-#o j#b ?y1t%T7m|vuqV<|)b ۞/ˋj㳡|HҚ~H4K/Ԍ:FŁ+*2.FvF/խ )HH [> ZGBK̗WFJR6oW3Um|VKɐBL銊CL(n^wQTfZ$Q060yA"遄Ԁt"=r!W FLMep\.|)b4&%?"Y-5"8_^2[E U,\xShUiw`°rS(R1=WT{/rp9o)K*LԼF)_j.j#΁?C=|>vԵQ@o9QKrBJu1Μj(jƶ]mb»MQW8arܩvΗ( dHH 0Τ'lӎEB5' ֆ] 8bǀ=)_QDuˡc| v!$lر)dzZ*s`p ә*5l,ˇ3/#UNTVmq1dKM5|nehgc0=mv!+#bҡk_GԲNwLcx87-[_b9Q2m|y>\ΆI/ʗ)n내CWTCR8iwתfm qkJDN7m|A-{1=ē(@  {wHq6ߩ.7~:SKn< ?bY4VE92ʛn|uY"SabsPV-Ph9A]CB*b<Š(̝wm S^BAQĐ`]Q%eG~7?_hܓO78{G})e 7Ro7 C-`Ŕs#f$O!<.)ϛ~ϊj%yᜪa8% @B*j$d,_T U1 ؕ`SHL8oTFG/o721LSQԳjAHDm-.)<(eZL.y1NR h6 6_Ԝ3Bv$ qP*EEp}[-A v*zR{vtE*bK19Qr}/*]Cْs[Rk?gߐ1HYp/9Na`C>יڂ8xyzGDyR,`[ű24vAdB !F؃l;O7C >w XKۆss/|)@rfD  ~‹ />D`^f=kb*HC7[8֏f$OQr=-Vi&pك EQ\W)%3ͽ (J r=TN9ĸ=ѶgWL]oJA=}^q͟F~o~.ggж¦׊){STZ j#roS=1E")?%~GȬQDNEYic8X ^ ɀT0E`r,,7(Ѿ$߿IfUrp㏉|)SSVk 2J 2z0} n;1"E}?oقR@+:  lFĸRҋIbʓSM&_j^Jb|K+QpTm|2J7_}{=g_udWKm5W\(e0r9 ˲`YܛvYso{\T#'{s}G~cd jND/: W b!!!/OѳƑhzg0ӻd26i ,Yu퓶pb9 %-0wK܂MX5TFuŠj1pLJA d -[wr2}aA14UFy/9'_j.j<)<eL4K}͕Qm%J636>gߩ˗vDhT^O:"\ys]Vd(e,!L#,nK*KH*b0aA8)U#75X pǡiq,>!W-ʉjn RPV5|boyc87CA$"-{x/%9_!K]h+HL-rԳmu+ZVD/E?o&~=K˗ҙY-G#ZV>u˨1rE+"JfI23!`ʲ|s3QCŨlAJ=A Ӧ'˧VTeMG)r/AxAB*J=-f̖TwGWJASbua^9S76PN8t>eOF2Hnω~~PRVE!IlCU%*Lf 刪)!,}OdxUSeՑS\è0j(7i1&޿}' #NSJ`OAVT(UUaYVCeݾ-{]!o9__)z>L|R= UDbjVEmWPNpom|-+IUQ4\.lxO)ĄYS ^/~x ‰dMks*L{#z}ώN`܂KX^8~QCݨT@*9k\ˉrE= dUEJ& aAQoᬆ(qȘ /%WI]+AtɠHFFǗq?r:Zt$Clsԫj)qaKuKSg R6UQ;oa vB4^uP+\-0b]nMܕQATe^3*73H'C\zݻ>}ݖREоrʿܓReMGҨV 1T˲˶-έ@ϘʗT^1P!5w?|_kET6> PL({iu뙩˗Scc-_:/-kЯ#QXG5ɭjbv>Jqa5K1)'sRu_5ʅSy?~ liOoǙ΍URA[2ޙ@QTvAH)1%\AdLY6JYu|@ |/~سpR0QևS@^4|~+TJ1R:SpYZ_iZWQk9y1Ҟ^Q] 9jh_86KQ1_*OT.Xl IDAT@:[1h9n-Qg氳I) T(h!OJɭ|9s2)}<1ADkl{ߥj>!5>|O^sڋ~ZBU >S:퐥VHj1śjF6ۍ"9@hjWDzܫQ)ӭ9ʲG݃Q|)'˗5\芩dxB6~>j'k3sYXE¨  qT(ˮdv˞_J|)H*66> x1jj/N$dNtGj5J)lc;x!V/1\Mum˕n=h9eˋiqo1nUQDŘ.p}~NuQǾ[Y,`4sDmX2I<7ܮfrע篢jL'w;{bγ-,XMRRyfZu!%_##eڭbq\aG@A1Ѳ'8*('eU)ĻbWI)q@آPT{<)<e 2 F vUQvߠ}>ݕw{DJёVȏ-5]G=C1 jJ/,gp4Z[QNhk`.tQv䌲8eog2KHF-, L3$ø 󥼏{R,b dXNѰV_u{o}kj833})}*Fqu L33~+8|;+(oR8zl''pܟTLyI ^# %ēӮǜ/$,o>˒F߳ [Iix8R@?N\ھōr-/`2I) )T`: # $rsOZR=pK baR"R5|?_AVSVSNr~7)%N5:8*-y-DT;)8go(z q=vb2]Td+-MS?_ H|\ȗf*n|\v1}t-|0yTJ/`+ ɃTxR({m᳤!ż:U%?TM)TEMm|[ _&qܥ!T_R︊1|.wET"O@ yRy;7G{Qp7 }@U=$? ;.- ~٭P+V&1;&A'7ʒ#sйoZqO#69K6.@ZKgqqnvۍjFn)O b* !!^˞\寖krZ}?JUS! &iΗ"59|=Q=HZ0굍5bIQnہz" @Oa  EaP XnK˭ ce $8i~v8y[[oA7.gWIi{|[h <7}_ŔT-/*;\TM9S =[|)Fs2R,RəH?\ܶMKUD9TSJ}]'A1zHHEHc^{UQ *"=n-Z&&\k/Տj'zʗe^)Gi&0)PN)BUi.$EH(n ӄii0,#ibrJƑ{qm*]jd(+z97Oʭ\ݎARSdWL5/tŭTNAVJ9S) ׫l3 v疚Q7w=E^<) Th=`pG(ɲKy͕TAM"5Y,~p_S+j|)nF/636~ьWQAa vՓM4UiUBUTh*aJJeԪypVEq[L%- @0P3ꨙONy?w:Pp}~|f.}cTKom$UGYLe寒Rn`ۖǤ嶠j2*bbygPc؟[%ժ1F 녛#Rk,VSULVE}"\HHEjmEU_BɲJ&';kWR͗ |bjnc{[0V;Lp4uq:SӇUϡ:;MQV|T At4CW5 ũbBNŐevx gAU a꺎inQ3 9-XT@WLoq]~ߟ`bȮID9m}|LvrFs%ohsUrŔ<"x.vGD粘2 z컯GDɬ2Ht}mAx@B*BD xRV 9寘䓿e˗b] ^Ԟc/E"jr(o4m|d_zΞ ]NK@rUL%Ō-bzLlJeLLpÄe0 ~ì`,7-nw!xDSB4(Ja )UbQGĔ!ƚcL\ߵOsY):{(J(Im}pE%¹Ԟ煛;_RzQȋ X\ Sr-̔F)ŹW5J;/cR#x`w>*P㸞RA qZlTPUT|͡-{)Uh5_&?orUK[#ʗK )H(l}nu!z1]H)W@q.ldԪW0jUUYBH2ųiΡbx)5Ǡ1(Eӡ%Rc3љCbz uUEP3먛aK;_JN=[^Ab?L&8⌺z厪'W;ys!3sR D}%KRUJmn";d){spۜT9*Z -A{A T &p3EVsgړU^1A/uOoPIDg=UuX?m|HzY6E/Ӿdf8zz X\TEiȃrDaUQWaKK0j!jUQF0=Qe`OQhMǠbP8DBdz"-D\ASh !()&4EAըnnfT H(xݸD r9RٍC)5(wσ1yb^6xSGy!jQ!wYn;sGk/%*KJJ]X؅tܮոY\ATIߐ1eϞvZybʲsRAD(=o9/eUR#ik~Pm| fRR<}1ю( RFRFRBjI U+a0*ep (UPZ.2|/ѯ'>(`iCK%)hDRDZ< M`2 LXU RR;6~O`H\A"7X_̛נPVIsLeH1;箓ȥAӲ|~b}.lȣj Hw/%*6>Md(VS&3-7'kYX" @B*BTU"8UP&TJ+_TP˞_NySԲGQ3|/}HDM8g/kDO~zɨ~DTD QJ aCB*B+"ɲ,bi2@a-Xb7b)_ʫPB OΗw{AȨKKX .dI?Cu]S/հ߰n."(o\XCefhų*%X*xf'ӫLœ D&TPh3-8[=oڕV†Ǩ i0%1(D z* RQ.C HR j)șxak8#@MW5@`j1XC߀QJèaV0e2 t =&\cPW0`BJ1\^3(_ʸq] ޟ YΗbBJv9G[8LmOT;sL=*w BoncCiUR[f ;RݞSgÓQ{o}(ocڇ(VE5Ta &xVJ)Zw2g -I;5UG6 txKYZBZj2 KW Vaj!*BH jz:X2UQZJsUå~On^R5qXxj/%^a$aLi9k7̝ B7-K(*T R~VlB"3ϼ[4Ma-#:DSHHԺG1ΐƘiw *yӷ`֋Y`G-{֢R"l A/4K_jȗdWFNC=ٲO k )Fp]S}5_J>ӊJ^TbaV<">2ᢔCğ`÷pO8uU\/+A"ļUs?wJ8_BR) U\pn&@PjU]amP(~@ RmPpx3, S1+_%%`<cJP|I93b?tĨR+HwbfqA4$HW(BW/^I`B!Xx1QLpfS/lp953"@ ]QfQ9fAXfiaEY"e6"0(N@@`rQpWwO!]0ĽίٴdN[IrduD/C =ʲgDlzpzr8W|))TQ\p5TDvj8?BP'Ou' ?;!Hd39!vbP(f~Noa~~ 8s q^wM&n +#-Rw?SiNa nj ^tt # h.gUd/ku<(emﱋxoZL@ G_\p269 cХFw|1)T yC s89@(֍}ma~f"r`÷BDJ+._;muo*Shǒc}s/k^Ρ҈0xM)-+Xln&F:~LmrHJ3/@@l{n/H5ɘbD!z_B)ω{0??Y,,,ԩSL:hS̽Fʇ*m#UTDUyiҗ.^r5 &t Ō\X SYg>1, Rmf1m6oA8SJT_ar&7[gNxR%gTy~3q@\.KeH ֔YSD@IcʗENܩ@ĝ32Cn@;{n`x39Qۅ4ˑ W( EQT p!#-WϹpfeM_ͮG|}T+b9QSSS%aӘTj_J^qru2,`'Pq&Rlpے #)S  [pjxdZ~ <_JC,sȗexS|)'A*8 \dɤftHQʲX9Qe-N{p{%WBP!dͬ:dgvmذvkwdFzڽ:ZP(&/0#5qmcSTu̙R_*B*Bo)PU on*Tvn7(sc k/> M p0 %?+lL*ǫ3>IА NR x=LJ8w^r>nWJoBA.gcd,Rh">HI0]G@*J"3/5 Jg>^Y|e}:JY1 Y%"Ps)KdExԎz=)̙3~}s/p璏 SAa~_JQ ks}/?kc 6~IX8,8&F)x(U*swfA!dgRm9J7Q  wD) FއkhLL'rEB* "ϔ);3Ur.L3jSwl@ UK-A [)ϫul,bfͣ)B(Jj3R/ $*ɇ눢C3 |[=0k+=B絋T*Uyoaa =*_};\ 0e|oo# T; ,0!BiFd DcĺM匂S$Dn)8Lj =J5x5,qTcu``@ K]PD)_'?%;B9͹^܁߱%Q30Z悔WW+q!m\%8۴ߊQBh%HCSxـTJΩ,|(e;2垍QأuD5ԔʗSfϿ|zRU:Cqh;K G0rs/atIf RB)HR 9\:ӥ(@ڜ/O%Y\F7 PADN<#{0iorF$")@v/0QaKBsրO +ū*RBUX P: RuW-k:̆QxE(AJP4:+Oζ!R[О>` Pg,ZQbbEh ܏cBT9SSSe|*_?|jbPT’ʗjMuZ?+;v~\Q@mAp, X+UJRIB@+'@\#N 9`!r&rať*L*ccҟ~'x ?ęw;VDJJ&ZŘAJ1\jGy^v!P$UW)B(p@jM;.Y`D:wfi5SRL~'YV-L$z&E<~ 'rO=55{󘝝0==]rQ)m';7\!Pw~V' _K?wo[Wʹ/#gБkoE s|L,KՀ Yy +75 }pQI1J I>uΖ䆜3&*z^w+(Wn#( BppA@" D.8!` B8mr?'\Sa }4 ]/9oNNӑ*S(Rb҃y)徖 FIǵ\/.]EqjPl#:,*_̞{EFSRΩ-U:ZٿJj3E#+ ݧF])U1.Rnp΅ T8Mҍ|9(zICœO,`XH^3w\F9uPʒ`ff:}4&''q=kۚxgTM)̈Sչ 3-:_-:I7Uǔ:æd2^Ǘ.;_l[fHYUhc) MLوCJ_K h+u=qPQ)B(*SpLA, $h3c=!kگF*6wk+ۧiЩ]ӡkZi4 !B;x+ V{}b˒? BPN!}~GT,_:B򥖞?1([NTJJl|*_ufϽ_VUͅTҀ[wpSno~ɗvDڻKxcZlp22lG>eBP*#uJ.&ֵݘ4Ҭ{WTP| :WZ;"J-3s]Z^,|)91T)iz,kFNӕKM(Bhe[-I9斂<,P5E))(!H۳)[mҾB<˦QXlB J)"BwĞGCW;)%ǮGG)y R~︄#uC4(o#* R(ޠRbpD4ηV|r|Jyf6BUnBT9GԔʗj>a+ƖQadžlT56ڨj_+pz7zac04u`'W)aEtJ1湥Dq* TuR葨 A\qInj9/,<(ϐr.)#KQX7됒㤰m.K=(Bh f`3ȓ 2`l)8)_TgQ(:[1'YTT̞{sCBuAUuFՙ/U%ީ|NQG_IQ=Z6 49b@qI"*&D>άXe! yD EPD>?6.ܬLuE-3ap6!wMyRP:u.hq;躆HobrI) EQ"ҋ} 嗪/Ur+BgCNT|9j._!gT?K#TuDمЅW7?p  M CX6Yz Bc% u4 nh`\@͐.W) S(J"h['ː*|,p,ƑsI]Q,S4 `&TP)B8!AoܶSʶg̓KrPJ[n͠>bՋʗ>ȕfrFcT-UpKmjڝ~A`?̶_W801CJ.)]'eʙ\<^̀sЅ@R 䆮sbR0)l@B)uPlTyTp/wKJt=I$|Ь BG Rdnc68(l0fCdA@Y)BS<~ .^yԩS0;;nxs^A#epAm)kU -:\WUjڝ~~u*矓15123@$h@5eYPȗB͍5u|,"B( J!x*w},BX Ӵ!h`W$<@yPU(ӱ{ ޵Cv/\:rBP3v!0lp߫/%BjR N͉:{ݕ͗ ~/58ēe-+j oWwK',Uw8?R8ػnG"S0v큞I HQJ%r=f{T>˂eӰi|4=1\X`Yv A*(Bylߟsܸ @#$$CVɗ*-%Sa8]&e„%J) EQR&1>W3{h^E?m.Q{Pw?̉jRԙ3gvt=_s/`R˳m֗MWRLJa&%g;`FnWaq!7)E(>o=8SDKYR4yRF\0@̸W 8Eo)w?1~Y,'>a͊ ˗r||3E Βj5CʅR f:ʷ1=v"*CJP4rHu=olےeI+sJ1-e8B2|)8p=By.^TM233(;}*;o:z5@TuS9*xKuZR7?c6bq0JAʶ˔ir`lv.Qȃ0!%SQ(XH `9*I@Pxo54A7t.FũZB{>Bة(Tg pOMqj=6e1?PBTHR8z(3g`nntRmWf_|?!ꎛFծ,}])5StKm[j8lw}Y 6ڜnͲWNR.b,f2KUiP*4DӡGՠE"KsL;F Dk̸'uJ%XH^犂 mO>GZcRtIs\Y:'}#DF}P)B(!۲a[Stmg=v5W˗޽CSplKαN~F>QamݾܥrTjKm6nKU5#bGTtac wALR|rEf{N)ӄ(94lX,wIdtit!d NgqoJ36Wː =J׎$:X0|ر+$P(;%Huo+eŶ[g儞{e|s 9zXn7`Է^eff=Po S'7{!"FelM)Kr>)5Ɂ~0VbH">:mppOЈtIV0|V6 ^A!P O*H pai QMJKtDʲDhtz!X BG R]bobzNƔ'Jr|)!\)!E]JRl}TNTo{e/j@HR-cAP-aƵ|<_suMWbk:Ƶv#'d ز( y%0Kʠr=x͘c7v`UX\:EqLU Qroiz7mF%U-_V8RLv}a.( Q@UW( EjEggΒ$K|B@i@KjP4c?f>q&uw333,,,`~~T T{?wOs_;ŀe ۯoBp b`o(j9 53"h 41 ](fr=ƼoG"hCDA`rZ1 B+۶9VWsDBQaY,>ś@E='+8kVsA;C85s6(w]5 qۂYGưP QCKJ1۔K9Jٶ-0]BܯrjR[RY~[9_:2Z2vQ'l531 ُH2KP@p鐲LEp'ӄPn.][q0voVVrxerQaJ|)쮼yu\mO|r(WT T뉡NAP(v4J"N?rؗ!S-Ŝ}ɖX kJRR[owlUE*g;Ks_Q?Q~ם̷[nn%i-a`l7w>4 bDqFYl{E,K9sJRM\R5o)_ drpY1ed^}>%HmN? R׈uFrYiBA8Tt#bDEbМu0a_rDI􍮍^y++@uZu iUWP(EA)c8ql P(E²LV10-fW(mp!*'j{233(|O}y\Gu~/U:U-;voEp48CIw=Bsfݳ-d^VAmC'߶e|KYY^+KNPFd `OqVP_.BQ(J (TJyn)o=ࠒgEr+ e W<&ï>%Dmce|kkk2>zf_8SUTw[We| ܫ2j}m*)B`}حWsRz!RO)`c>1d4* bAG .4 t# hDAtL؂㽅꺯F܇e|鴍|ކS: a1X1Zʛ&2ni˲ȉ+J=JR(AgV2=Y,m}1*ƗfQP~QUC=i(w'ưѕ8^el ܫW? +v~ՒRO"Fq]K._>g+WʕHDz0qຎ%azlX]ȃ[&e{ZUE6BcmqX[0?G ,ݵ(>iɞ}Y#DE(\ۖK, BUQTɟ)(e9Rr” W)D)E7~~VUVE=@ƧP( %H9|ץ[J3ay-pb3yX^o(&QKN"TR^Wd b;>/>EGr_>4|P(͉RyVpڑ/u+_oIj(V\T}җzoSGLnQ~nN|[O2RB: Ābpp ett/]k`-cl$S2\兹 XSdIZ=ɗr(JόkO˕wIΧZ(O .x b; 'ρR9!84Pq98סqA5ttŠ[&hR0hn9azz333u]cs8';Jo rWkXW"l$Orfm^U [ޗh_r&kӽvhz&Fw?WϜŷ"^}^wg[p9d%(b! a``XXlsl67Qߊ8#XalQ#JE ~b CҼ0x XcS#v J:֏Gϸ-շg _0tgS(C{/>Og@j %q:88:M(AJQjb͗-R󘙙TsO~JyLRK"ePK"X(SGf/oo-&7 v܏OyFV8x0=r9{ݝ-M&+W;YQC<. " 4B)t]b~lCH `–*cE0`6eB6c4W7+ӹ.Y7Ηk -,N? @<1[3$^~)w"(Ts)!4. 4Y@9tM8AՏU8ܯJ]cff333xKe|{B}^8kiVhWeΠrQӢ.Lr6Wc} gT:5!R]0Bp|r??Ѷ\ݸR~#_uw$%H$=سg C6/!ϢX²r Ćh@|kћpptc&5 0M 0h O(m 6A9ǿ/x i]ڑYqXσsд-](Yrsm޲kxmsGߜ=C8{n nX="TR[{]|T(-R.&~-KQM Rh^(8\QAhLルRl%n,pԩ26^RHa2>.+ݲ Ae|&DbxGQ~nN~םTe| .!YRؽ{c6WtW`Yy64 4x@E`p Kql]Q`9e{%e&_6" \д7UHy'R@ #G~z.B/La((AJP(ZB R}}O>?! BBP!J^\AP}@Xf*S SS2__777'N`jj ':Tm̗jwv̗KX0(SU(?*_1;002vMX__U,/_E:A R1n^B0pz4S!(_ٞpͯ_b8FFƐH`/7u}`88_;_9!JB,6oZUo1R^PP(!( (8EA%|nޔg2SbJŘG;2>W:}4Į8>;J2>x'_~m|e|`È"ڍv@eF5/j.!^q cll?l[`u*/a}} | b@4 09y YI,8# "O5j 4nٞ&-4<1=("YdWޏz+++ %+.U_Mߩ@iT_y- ޜ0 bA-qhzzBwf`%˷lS+"܏/*1Jĉ駟CO?!ܩڛ:ֹa}Kmeh^n(S([{PH$Zgn^w/Q$)c˫xy\tp.뀮KWuׅQd "u@wl>YH} ,-7q*n/| JRPj#$M$Fk 2j8`~ syi8o_Ck-gEo]^QP(4!}6`3ɗ)Jl|spM d2a(zc8{ n00Ϳ -l%_Ze|u K݈DbhAs]w-722VWC]Zoq++i & N^tFpC/_&hsb09Xbz4[ӥ2P'ׯ8 ֱfs!rJ01q nKvUB<Z{a|`̄aěs@߈SXvNr)[P(G R[(e%toT@P +\@h@hӊʉRleN>5gr+]e|}/%w=h9߈&Fܿ(OKy Gpe\LJ_ha .004hj\H!{N`DߋE[!B֠%09]':]-(ЀR!uzSPGOΙzCͫQ^SP($dophf}2h_8J.ݏ=YQ-O^|߲>ل*ar2>_C{7^]gQFT[1ļQ9{;oi(```4^]F-H޽7u]XKo PjXTB%{` ^3n{=!"66<|sνKLušCvny:4MsֵjߧU8%{ҵlOP(E R[]z=QʙX|)n[ KiRnu*zDZLBm [k ܫʱ}/UK@b0Uy& b/%Q #-bii $F00_; ޭ]F& -pj A8ã?!\3 ]QJ,.^\‹/ULvch(۹7 hE(=^-=²ru MZ]"C*2YBP((Aj r;zPZɹg(%Ӷ{mEf@#L?/bq8jU>;6;%'L3VJ@(r&U_+ӶR:^~ם[nuWJhtF*Y yΨx`xy6(  HsoDbv \ W/aii5 ;tr7[4GqO$R|!$.LR B_-=srlga%)f#Ǭ^w[fh$Jy vԣ_0Q[%l훌RDݯpTf ܫR!-uWF.XlBPd29llQ,rp.gԋF;j߾*@HhTA4 2 =ٍ߲}f/"W4;tll^Ν{ ,ܺ.)J2qm3x 3p9z}m[e{wJE&+U( E%Hma8ǡ;”T/帤,˂\ 5*'J9QlKo_G%_T(?1e|FQ(Xd0M CQ r (Z&"h T2sYX0<|ǎ ve:K/4p)p̓*wG))F7D֙Cp]^wDi*#|A2\=^~^wAP %Hmpw "JR :}Tyb11ÝFf|оTWc;/{[yNlZ͗e|#@>_@&irh,sxqQ% yXH$H4 02,@T8uoLa||?D*5b",\W__ a߾^鞛U QwRTgY(/(<;[(^~i]P(mB RۄC33~z2>ΠZrLqf#]&q؎˯:|v"v;_W969fnv|lA E0>\tѶ`Z&t@$P pE.)#8?џ|\- YLX]-\Ho}LqE(2*Ĩ`qJ,@NTx^SJ:䫞jܝhBؒ(Aj1-u}O6 ޴Ŏ[*D#>R)H8`?{ ח+OaYRa9QB3쩲P/Bh۬ؒ|{˳x)47|`HW14a׷X;-33B5NcC6= :Δ%Uۮu]yp14/r#kr#q#_ķb0ᦛ⦛NF-m7/201_KQDb*7j,ۂp2tjNXRf/_p5 |2kkEd26E pʜ(Bbs *@ISd鴅uH,Qyyn%F;s.Kq7r0qo'08(]RstF.ǡkH$1/rU+sO49n+ {P(m@ R֓8QPn~~%D)U8ů(lrl=+Iu:bVH{}ch/c~|b]-_G99|m/5amY`PiQno>Qw : 3(V\Cj_abGHŴ嵵'H͈" Mj7$w u H$=f0uwU5/~<'2*n(N<'kPՏ Obqq 'Hywsh88:naT$&{yѨm;vmt]t:Ξm{ܿyyqgkEI: ָA) R$mmn#ܻ+/C3*i/ u+oTQא א\EQ",Ks[lTLo4 D#c 490*X[;;wj-j-s]_Qt]XPXₔeM %x4/ꈒ58B1+P$ x"d?dVWԄt3AFW5TW!/7.R"-0.BחW;xb ۶z-ޡ(<"75/[=2W*R 5tD2P"R8;oo7HV"7j/-E;rԐ1BĨo~b?j E!p`pҐ1>~|G s )V.2gTxOT{Al//%PHd/|)T-a:]tI9כTZNWiѨT"*8bz(EA* 2G_(HB)⺕N:7̾9/;0GE<,Dp\pv!%#{O]\{N%ajJϣ1Qpx R&֖h(vS^Ǎ8w`e]P@eGiqB1BABH\[aje9$I:Vk(BzgsaI yI.z=Ƕ ݭ dԨv{Y:U]7j6-ayƣGy=)HY=-Y2N(HB)SpT_|Kw~몮_@^"'-\~!%Bp\ǏyR%rD-躀iB]FP$ RFYA)c]{V:fLT N_8BH(HB)= Эt1>}^k琗|EDHu: }w[%s>:;.{+R݅i4lsHYfJEZWz7=)@YVы R^}vlێ Mɥ”gBH*!µlORR005Re.,2GRz^S,c bѯQ*4MNEz ')NǎKqJ PPJ̽t Ӟ)Z8Hc#ɇ!Bg:} m/7zQ=2=Qn=`\G{Rg+I$T2\7j-8>]_NC۵ٶu(YeOun7f~.q_!L<!Z Fcxy#l/3W=s!;Q=r vA8l|bz9(p]@uu:]RvsAc=/ޡ(#FvF_>{qG}kƈw%EܞBCABH$(o-UDTF7Kգ;auG bmtn}O?^a'H}&X⮥{ 4\vHyO8^ׇ ` UQqrycTw}]>hm{`OzgDB! E!d$jt 7Q&a*G /o?I75X3KWB"s2*E,,xNc9bmz'Jٶ-YB>U8c~6^SO R|;д h'T,Yv=L"xeqp2 HD\8v#J Rb!)B!#AEE]èQYJQąfǏp:(r^\KxCvDz|t _xӴʼnRi +xFv{&> @Ug 7&41 RRRQLB!} E!dh]OpG:9cxYc3*i[gZB<0Geu`|#Z]TƣGgQ*~Xo37aۏ u"}]\GqGwӔ^*<@qtT*KuGGh4me$1=ݟo5IB9^(HB=$wT_RcwF% Ssz,2'Yw}|0~Ǐt'xײ4:}n Ms'eO:Q]= I^CJ4Oaii ݮZv0;w7 xHT]I:t# }ĨyrP"2פdJr"h^bIK%l)*Qdݻ}Az}2[ʧao)@E܅bKT.{Rz\}<~> O^@oVlhZ(DǤY[!|K)FB@AB[' IDATPf,Bɱ_jSH{ )FwHU%a9q-aOTˎ-.&Li ֖:wpFeT?<|_z5"FHaիC'EI/_r{M=XFT%]7**Μ4>cTQ2p:r!S,l5Ф=c]!釂!L\WzŝEYJQFuG]޸XdWAnbw~)׋9SC=Qb m ޗO4 Bh(JTX\YEn12(-F^zilmmakk+*/57Kp[QAB1JPR.]6 5-t:-t ,4M,,,Z]BMj5pmܽ{vADOQ/0b KnIf%l6ǽB;(HBȵ/H* LQJ!n1)^KsG%!#[qDRµBs4RZtWL8NBAՆQm討x!jl‚ѫT'|~T38~++4q/B RBM*(A1>`tןSe_I__j4$;jOp[6^5{H_r=Q PQwGMri)T* 454Gh4ZVN p Q8wy:5YI$99$t RBN RB3E !Iy1>m/;+쎊 S$D__>BRB/4E)?'QB7&}w Pev-t:ݮuQ*:u938iB"&JwMB!*!ڗn(HC K(g-YyEY6jԘc|tG%!fww{{{wyxěyO^_R-%8_f*"?JixS_4WLVOO2!䖊5B!IP"җ/D_"c*]t,R9c|\Sziaب b|E4oLSOT6~^S+^5} ͽ.@DZ!tn@h:ldž#]UJ3(&?~7*Y(u{A!8(HBIe7`$$juO LeT >tq{x\siR7n`ԄMCO 5Q9}o )gG\R;1Jt 48v4_!,P"ko(14a(!–~,TvG}󋿐k 677+_jBOT7|@wWB'{)@w \!]/BAJ=JRBcy焯p| "B@ABH*_TQ#L9q %6J)k+=H SiV0*7.\d>,K'aL/ \z:4À4s!5HB@_CB`(HBI$O_jc|e8Rך$l T05H8p '&;* iRX=̋9TTqT]@P'Qn@MM:p퓻15'1BȴAABH"~+ CK!=51>Qc|}#&eW䎊/=31q387||t69`;adtO#z~k;2CB)B!l@ 0rK/5(wRՋ8Qqfh{HO2Bn=nQA\ρ~\OqGAwՃ=ݵI^!UzccX!!i!NV140PIT!J#%s>ےKT)u|_\^ZwT2Jb8x^{͆/DI"Q;JdhJa@u KwO0)! )B!=z8 K@w>V|01c&3ec|{6IpGQc|ʎ,G#KNU(ϧyG^wa@3Jqa[@T0;B RBz"H?2 +Yc| !L_*oO^(–?^zy4wT)L46Q*QBauOwT_ƍ05/15' ܻn>~9/ (m5 'w t?gB3Kl{[Z1gf^B-)}!P"p7=!w<}Sc|9"{iגg<-602\^EgssJOoVyJn=gK~ (wIKZLҴ(ӄn Dz{۷j3 ³ '}'J'2G!d(HB1t1`~:Ɨ|Dϫ;* /%Cۛ{ҹjW/(q=܍:TA(?apeYp#+<{M&~3KRc|ٓ^!)!mRE)`;8Sw-_߰Ő1F-syYpG%!c|/Ş|8AchevUҼmQBv]ض*A(s|ž'0B!)B!2e{@_Y15h ꗪ>,0K8/x` j(z%J\O 4ضk*^g 0eP"2$!ﮗDZ||,LZ ?F1sD^0\1Fo<(3鎊3Rs^}W-'en@檫 SODTÙ)_7XhN!d8(HBbCIMB(Ψ,:8{GYvG%1-R Ͻv69^c %z;*t.`[ܻbP>cRoNABpP"׋9 6c(2ʟ_*3k-&?\C^A9$iR.57{ODzut '){w=)vؖ ZB. Pqe _J74G`yA!s6B?qnCF ;⒫SU?@* yRw'>.D# wty!L!dι6;*ᏻXRoTLRzDΨ"u@T|QqKRuIfVXfw'rXd86MQ(t0%fwG9VxpGqHaHaJm{P+r [Km$z)csy M:%-7=QÃ^'i x"/3W ; AwT Fہ t^_>ݷW#) RBF!1;掊S@O'?B=5 '{RtG_ƍ0cOr i;JlQ~\Oø{(va;"O_'JAX?W,/2!(P"9fB, L:w1sD^kl\Z;jlnnW^ cccgOTmpzNwT  -׳!H;HxBJ1-M~LRQ!*;0U:s57!d E!d dF#]_0Dè1)G%/%P?; Hm^j\C%@ۅzTXJɹ~_R.ԟ}z`Oԩxw=B!CABRCEI ᄨRI`~G伴~U7G:"=QŨf%.`@Q@;J Wn@Mh׫#uaFepB!Y E!d1~a"Bp /E!!!;{--DNa*Mx5Ɨ_*<=ekJo7WϠ!uyQۋhN֭[c|9Y~1p_h>\vvvpƍ@r ^$)u#*26QɧQFn;\NN rd,e3fu:S1qnl;лnIGtBcBo"9$CJu]QDT̉4. SuK |ҡ_E/늼gr("R!d랸IAߍ/O /F>Tf2%7 ~)cT:w;v<|X ṥ"Hf s`[vhԆ^Qac藒O!)B3;JLST^bBSR.AoT(HcVYf~\~={I헒q@Ks󨮌\H Q"wCJ/q뵛caAAUԹ6Gr#S"R!dΈuKE梈ߨs0e'$I/\\SC^w卋,3@'j\%/%Zc"4?bD*yg=ӄna*~yV< ,_*MSLiRs+ 藪BȰP"y#51 TFᩐ~sKE\WQa+.SqD_*sG=x4y;O¸&r%(3o7p J#Sia}p T-ITq=B!EAABp0TԠqI(-%\f(e&.wiRy$Q@/疂QQA*掂NVؿw^8cy#K rXsmrC0Fc|B) R2$F>Kbc&JgGTvG%3QKǤHn6";t;Q2tun5t:^y^XnK^o3K D`n~RPE!P(HB+u=~; IDAT>n)ъ LN >x_\tC#"=xw(IiݼKl4g Π$7tG\ v%gЌrB}watAbzi5OR_e{_ )B!AAB挾yg-4N? Ss~G~:וcR{Feo Äf0JefnjGûS9Th|m|_мV;򉟗B{BNE'm Pwnѥ\DNiÎBWr.דKϻz 7_ʕ+S;;;]X( J(=)'<e̒WfpVa.w,Ӯ/KP-bscہ9tGQ"م)Bv_{g@qK1KR|S[*cT)gddVd//5ir4R@KAJYO0'=;tӄQ*,U.6VsG3e K{~:~-Ÿ! E!sovAs7F 藪>Wyf-yl9_ qb(ӡa\O7 Xv贆XYR7U/~U!" E!sŸ~R_qiᄨL”)RZ9d70?B%KMSy$$\;JӢBM;J7K(*nfh)?w嶱K pX /ŻB9!E!sHQ}^/5>\ |0/8rl7/Yg'jT_f+LԻ( iBsZfnpVNFO[XYs쳦XW^!dBCB_9C_|/UZ;7*;j^zFewywGIQ=xN)M+݀Ch6܃J"M܊XclR[ u?1>y z\a)1>!!dN570/>\޼DʴKEQ`l+'䮺3 z镙N݊ϩ)W4jLod!KuB 1ABF \sk L !dUQzIa*[jXۄ? (`z#$Kݸq#&UvNqlwG)5_Qtn1q(ʏ7!Om$C탺TAuEO:4vvvQW\իW)FM_ʕ+[na{{;;;mx|Hs!(ƪ;Jxp+|jy Tm[hZMYC9F(A8MCsmkVՏ4dwq/2a!E!3̷_ߵ;_c1a̜QcOt"c|~7]ľXq 6`;I z(O(/W4X6Z~'R)zGvZcwT|…3cG)BBҡ E!@~r;QITROn/*Ƨ/"7IJg.|iqG%D17}ȿxoh2/$ =NBwuG(/X #tG2J FD$#s0AH ơ;kTYZ|Yy.}Ncv0eB& R2o*\G LI!*&""Nê8Tb/Ÿ1a-.tIB<(HBȬ" SIRb|@my;ۇ藚nܸ#@o|g/ pGmw%4;(0 ݄Q*(.G5s.$Kuq=%02>!a E!3' u?*L%K%ݍ/gf3(L{\/)7| _[nAܿO΃C5bkf)Q=͟+W̵ TF0& U}\`1>9db|(Ȑ.r`  R2$G%eKۡ+ ";.3gO7RDkqGc̲8{[gO]Z-;BR2Je* pf'psmP%'ƜVIs !dD\U1_9%/|zWTxɹ؜BABf~A _~'-Ɨ!)5G!? D;@0G*q8.`ktp'`sy[VySe>|w_fn0J J2nF:`1%34GK#KewU(2~2wtƽBX E!3wC_Q؏b| [Y n;$REE z$ݶ'2&`xe{.~Grf Wqe} W֗ZB7`a&4;m4kp[p:10XT*4'KziϫnXf^ֽ߼KՖWƽBȘ E!3Ƞ(eOExwTTr9"UJJՌ_[J*JzSKrNw{Ip (6U:|fMtM÷5u"/bk6OvKuGJXGutu1!cqr[RBs̋Rٹ}icK )BA#BJ(.y?\$,9?*8RI]S/5JT1>s|rBׯ';׾'ߠW< SuC:4M~{]WVOal` vFI:6},ϸc{ÈK}\O2O!tG/u.ݹ5eB)BA4EśX/ҏ^K *@_*OTatB1DbwGOlk0pT+Q=幣Cp4{{:xJӺ'QF;DDel;*)R4\^Gt2sr{TKQ[b̏Y! B ?$_J TI*oN(L%K$EyQ/ Í71y丹-_JlE<ǀ1 #|h:)(ׅ Wp5uh;ZK%0R=1> SD2իWOd~yo 7$~6R.i{uhkf R(aRr?%WxR͊kmIrHz_*~sy qfk-]螺RS9\:7(F2P"C10_JvCE'@{IR) _J Q#K헪f%E"Rœa4 Bht_M rFop&NaZj{G-\>"BX_g2t?9@ w5CfM:\:A7X`NȌCABf)H%.~R GJKszw>wS{_EN_|5v]Q:(M׃Fn(a+(*0 FGGس^?2>} })?΃C SQ%:8vnASyyQN7|R etJ婈.Omi%"HQ"d~ E!3yBTBS$B4#BKTJ~;MIT4wT<Ǟ(rȏꥹ5C@3Jw,2wg0 ʕ nF}nC~/5ڸuf{=qև^/{UE9/B&_ji9 !)B1B#?pKE lbS~${]闊G R߳Q^S/2 sG'L ? NFFt;Juh4GU*W vGᴛyp[TW7a凞/*$]wŮ~#\e-H= 5BKEAABf;~[IDŨ$TȚOZ/_*}~)=5dԠk5cx{8Ѣ]D bM{BY(=tG;Ђ2s(Q N : 5\>6Ouf9C"vn,sD5Tzy;jRkO[O(HBȌ?\QK'$NQqR\nuN/;/Sg0|"Ώo-FkꇞT(qP4wG -YVGvp=)F;KůKn nʵKl/r]5U)H55 /u1>X'{cb[ǭ[#?X#53K@ `0atM\9rBb| yċW>K!L^T6Ś~,g&1dv3bZ="$PՇHA ]t$$]sp@6iq$( 5 IDATH a $uUKfbOg3s3p%=3ܟ/fYEU˫P<:rȫT݄P*&iC(Xxzi~_]V,S +U\/OAe]3y"b}Q բ0EܔƂ[ւ1ߡ+,Lt_kok<ű|+߇X~M=g}2(kߔX 1 gQ=UD*r1cKzf{gJ OYIJ|_ZtT&M @&dE,G."jU0pLSg=0,"rv[zQH`Z&V[[m_jazqLC%n ZBQ Kq !Ef(Lg^M*:E:z!JQX_^%ҬZ _ϧKuM]dTOd>_~dq=SiUQt(22Jj1t )a\/t aB GC :m MQdN.%Xpl1JJ`b{m,MG7/EuAĚ(L(0o3_~.̢—&~)sKK )"w?~7O T]Ȩ i܃9<` Eՠ2  xa,9KXSB]zT*mO-5ji:0t8KqPAĚ!wCP3yR,X)vN: |pA/A\>,zc?-7u|fSU(<UӠ:` Eo/TUðEUǰaYXk~ۖ!Mi%%^}<xQuz:Kq%ЄAĚD~Ͽy{K_*6%ONc|aǔ<55 Ffc|(HSAovr*_[eTu)g:#'3JAʿ@^z WthM3Wr&cLL0Ur뺘҅F赛5jQkҢjRH`:Gnᶥ׶__*v9TmF0K/E1> . RAk(3J"|~ü~)Kʨd/A"b}iR cKDV/YBs*}|vjYp ɨ\>1Ok0&0UnXtGB^dgȚO-\ Fki1wLb*%bzװ 4Et:nAE ֌ 7{c&EXO%#_,§DkdfoJ됈{31>߳(o~ Rx_&fdkO2*yB3*VKbǻq*ⶥFT(Xl,~dBLmD-{oA $ (Pr9poV>SRBD%2& <(R))SRnAHdK؅d68~g f' ) =')u/ >?sΥ9,a#GʨA3LX -0L0101L03LnBk֫~oT"5 c1_j?^7^2TTݥ>x @ͰO RAkD!XBJԢ8_/$Lǔ,B|x/%&)^Z/99MKb*k Z/&!E\w?y~bkT6Y6(Eՠ&,EPmP`0`<`R:K~xv$v3L@4](ETFPNFǘr.dn²ض -׬[?ƠNs 1tMc|w Z6GQAUBB b}gp&g`<37KJ/IkW~)ddRt]b|~e'὇OSbsLKa2J X `0;?b<TM(]1ѮWѩ>`R:X.53SDIQ.ŔtYRwoSz X" RAk챙))1(;{T ~)pj)Ho%X<< RC"4_*MPW~߈ިTтu{qvDoAuP6ʥ 誆hΠVt Eɋ(ۅm;3nfgrÜ_tT&7";)zmvR9vMQA ) 5CN{"'Jr AL.c!/)e> *  LrRRYR)_*MPG^89;z:4ӂS(Je ab<c4M3`ҪF)X^9_D!K-,Bs S4V|R-,s|HQAĵAĚ(c@01Ž~)R)R{"TR x0n~)9&_*mj*&:rӇ"s @dTT ef2ʆ[1͍m8 ϛ;mb03՗QSh2~(:Ŵ~YY=Ah:*XK#J7N1ۖ_엲vVuAĪ !Ef(9ŏ≩!cP (R R&;71P"$wLI+ ta㛉]PA\Wߎv2 |e@3-_Fmck% %0~N nòl8Ni *O0lC ֲi/k)K+헺noo?/u)e(GA\'HHA"'D'dKtCbb**=gQ)$LF%'kP[RrEى/_j>Xq6q+=;I,jO/tLՠ&BmloD\A)hthv p ˲:E8h5NPS@̓Ȝ":Ǵ:Yb*K+)LKq/LKo8ofAq} !Ef0%-xB:qϏw"61<؝/}z*.KFCW͈ȩ 35; |>/63y"V{.4ak5(t PBeoRB>njb4@ab2ʱ\CYG>:OM`c)dӈq.DL,|t f--tAq !Ef]戨{ 㑼|sIL.'t~fIyR_DRc|\.DOqCb:j6E9r'٩-yk>;~E܉o"7} w?}'1WRrT_FU6}c4 v':˨QC4cn,KV4Et_"Ԍ(j:l~7%R ]ga's' AĚm11PJ'엒;8D!zZ(#f|)(җJ/6ߥ/Ta_ RErJ)T6:kO⫿;B†쉉(RʗQS@ec 7^͗`&54Z Cp0)aj&G=°q8䓌_n({OCv >o1߂k1nfJʠ;NAW ) 5㭝m|ϟ,;"JQyz\.;H) ~D/Ri>I(ARTpw뎒RJi9!vz?A|W &4Ҧ{G{b"J/K/c{&,hE'ǀm2 %QjtpuSDibj6Ƈ:S/Xs󈩤e7_BUG:J뗢( BB b`L@-:|E%+.#|6NQqJB,LQ%&R#|,)1: _MBX~w.*M &V]!l7&, eMXtfg*:Q.X(6l͓g89C 8`!)4 7oZ*8dO>Eb*)1N/5{{&q4{Tb1/.~e2 k ) 51=I eSF4M?ӻҧ7o:*I O1>V{?  .RAk &(%~)/ZPLL!=)Ƅ3R( _*9!NEŻ#|\T"$_RNeKʗH|'w]i%mz(Xǻb2ʑ&HF˸˨7E“3TU{LS rPppL7EVEu!ZGŎz)T٧UKJ(%V/4Ysp0Ƈ g, hHHAbBJkP&rʿ@šDWw -n[(ej0ʕMto܄mxVɨ$. v*Skɨ.ƍQ8_ǩTzQ;͉O/ ߚ<~R%}i)մR"zz?WwHLAW ) 5$s0#|zb{ܟJ5XbʗY_{#%&EnJ>y2_ EV'wS"{'cK GE㫿у,)wO`Z2;z ˨N3Qݎ;Jn ]:bT" XR@!D|1S\}OJBLɏFT%}]ey4u^1>Ӥ~) j!!E0E?2&>Qq!5u©(v|<l E kL'I'˨ û]g Qn[6,'zQdTkQG0}_rSKg,oӧ cKXJ ~m x7->|(Ʉ~*%@dݴz 4`SAEAB b ' zIdLV<,'Q"1;5"n$)K1H;ŏ$|BJ+_j^ǔ-EX r/x{/2EwXLFY!0,'&B y@w8@Iz~9tMcP*Z6g'֫`dTy*f"dv Rve ˲PAqY"XS&1yRg(AT㾴Q]E[&v=/!fww 1x3Rq!f{wLETW+Z]?EE=|7p*཮Y#0mRبlqk:>j4Zu B 21-DȨ8 &67(y2? Y#Nbj`3b'NoA| Ra.ocYN[d~Vr< ŃAĺvH}WAܿ@ b.N)yjʗ=1hƱ(k&zy3^t(BwN ?gK9+·3)0APFd퀟ŲdT^an(*MN,֪֨j`8 JniOP='BF ' /R?{1 1ӎy Qe:OYIK A+AĚ?{ SG$R薊|I[(Eiypug{PET<1KW, V?NPB3".2JF,U[iqQ*m`cc L(h:77h[GPC3Qp (%؆>Ptf lsKȨfT KIK4 7oZ*8d/:ʹ _Jk# ) 5&P1DKAZŗ='gMDE A e,|܅O&|ɧ0[Tq1].ϽK>|x_WK4 @,U!4ÄBU*U`Xi֬Ѭmc<@QSD- xOp>`nH2 H4KeX T2Z]UOU ~) <"XW 8ѵޓ&gOFf- {~ђ5嗑pHQTKQ<Er*WsvKLGyaw"  ) 53Qb/.(P,o8֩;UDŵ]cy/DW8R<1(3R⽐T\J!!N-D|/xr.OXW=@hL,[줧tӄP*m\@PB01LQol5yyiPt 0*&.NާhammoFpq 5iRY.T@K٥ he;Vd~KA煄AĚfō.iߕ*Qȷk0~OZr/ؙO[iRPf"|aהF$[7Wn޳#\TQ^n6܂Ql?i}QM phtB)9-TlSwoɨ\ ,1wV/Tb*k:lNKzF"7" ) 5FH&"LT/aއuoιrJ]b.*Gg/)~) xN||FNafG>:_$ ^G;wbX?WE )7UʦtQP(T@X@^Eg8@B@h8`h:E-`PCYG`{s^v×Q@߈0+lL$UK,swJOKJF]eTo/EARAk?M#_p!{SFg0K$Uн"M.}Nv$T)!K10㞐Q1(I;b;I~,Qڑ/

c<& p7|_ gC?xS>x$&."W*}QLՠ,AXFB ò) z:1`&\EPkXP<zǏ}t3@zK?!zATDc|Vq}zH뗢A ) 5&.e!K^Idv 'ȷk- bGj̗CG,K&:JIQ)]SLI))$v䓧f2 Û"^,~w;wwQ(~sA0=|$,'RT|U[(A5,9GEDDt<2Nz%G7'#p>N= <Ǡt?971k/u1>|/enQyR;;0Gb !!EƼYq'ge1kנ|0Y v>+^9]=))_F%%Ԍb T#fvK<%짒{&SRbʟ E"*wy/_=9aItÂP*Q,n`8nia0NkL E[h>;³{?~a HFdʧy7׵_j%1>4'J/cYsTo  ) ͊;7lf|}@ ?ND5Ecx/?IT(DHpU&EXOyA~h*. 9w&~C?ai5.3x+6EDOð,8nRbS˫Ghw;h[hwp,%\1uQ{g{qh;<$=~R-_L%eL9 ŭ[X%7_r~) AĚfz'?/S׏KSQo\)W_*QB 'IS^RDU~8;%TX*b**tV^b +9:m:-tz]G#00! UQ0lpr{h>¤+*4ȧ/@TjV |ҙ1>0&y-"QA"X{ެ8ڪjK:_qL b9J)?Bc|?3RdT nsdH->11$=_RȗB^3$;<ơp齱s,˷- WALF0zTtA X˨ ,n`414-Jn n ZcT?Duzώ}[`424UK Ɨ~RVAD;'A﹏#/C1>  RAkGC@ ?^^Eb b\xA)e_8>)~["(9b}R E*,8#_ 0'ʷ*!~]g˳x^@{KQDOeaq (ˢ/vT~ODF/*WaJnEK0 <>=1x>3oΞӼ:G/<.,D˭@ӗҟ:*W*[̎|n)b(/Rs=@Ӏ-1jP49Map" tˆ0uu1M3XJ -ǸAhǏyQh*rXT]iԼN/V5ꗚhZJ ؅2]To~7޸ARAk ) 5cwwwwAgOX'U|{~2'dTZ9Rb`]Rr|ucP)T0yԺ(⏠Y%$*x~'"zʨ#0M^X㖐7 Lu1LSr5\(`:3`Ьzt[/1)z c|ie׻_e;xҟ<K1>"XoHHAw܉w}KȨ R^SRao~PSSc` wKq~-0BZ7s(8o%@2eȘ$HL͋NsZA/WJzqWe׻Ga4+#X#HHA<4%يONڙR3,df|#_*#7[pG~dybTDnyC! 5|jBD1 T ry\x \^nwZiVST݀aZp-@5LLhnN^d)uP ЕOq{իQ@b8ZYb"'򉞪_j1s\"ާjl7?,TU1_*"x!!EF߫68c b,9 i) _*R>DT_*U>%XLt/"Q>/& 3J͗Q,ANq^(2 >n0,QbW4h)"z -cq=tz]t] x|.0X.NFF 'p/W$)l;炗7ʧXsRsۅҊzs֕~)(GCB 9CFD[a SbIAJlO/T1u'fc|R' '/QMSr*"?)J $MG2*jtC 躉jOw(yUnmS[6X>dN^hM`6\[LE9 Gh׎qr'u(䳦f+~XoG$iHK&KA<"xNXu<3 8cPH* ꄊɩdxO9/%RYB( QwAKy8~J-:OKr*n|'eE|WQ41"dꗒM3`&lˁmo>[P5av\8n#"z`8c2u8)hT~gG89xڣ< j"8@z'ܙ"~wӿgo bST]_,T:/ECB ⚓}k_; Ͽ=D<|P"–T,y!w~0'}vF~౐VQg0?OKar_ q?q{ yy2{j"geT.dTp3LKL?.lہmʻ~eömy]ǘs== x)rL݄c(,c?G4w1jց2 @z-X-FL-!ubw3YSU|ohۇ_jgFk4-E@B sΝ3D-"3b3j_ʟpS /ÿdQԂ__*)a<=R`" aOUEy0!tF`y՗Queñ]8 vaY6y?c}neUC59j h1NamxB'&,ҟKSWJD~zy xi١A ) kH2s]$1&?x_JJyXJAzxs\LRA$0 Bl IDATBNn1a b{\՜YMS1YEr̶ӿ$Sfēϝ5D[쫥}s)XZYoԛKN xKA\CHHA\V9 SQ8S{`~.#ƇTOF/T Q4 u b|.z(_v@bU!NKA\_HHA\u GR 19wMaS GbDe1%R A_JQBQ'zE6Kj ?Ώ֑UD4GyULFYȨUE4aٮQNn2j:b0;PH LcݴZb*ʵhLC?@}'!ثRDo"!SRZKe}ybl1UɨJCQWDZ RAϻE|FM◜SR/^lB*WC$1L1;} Pt pt9oQ;zhaT ثGS1>SgJ=uH{NNYmWFXL?3Rw(w ) A%쉺x^&]>=¹) >)_*PQ|O㋑!ŸRcRn)_N1@TQOV@ĸ${eNAi`y 9Mn0Leq BF((z=_FuTd"dt*~z,U`:pV.j>=߷KSL]yԥ;kT;PU}'{+by~ W.;0 vO ⅁A% RD|F=| 9W_񬀊y9=_c|_*1{:*FBxLn"` %l -T,X TT y >~է-O?QԂc| `dQ+,bu1@L֫hz8<"HHA\ ɞe;yCQS A/_q~)`_ UY1>bu/|9Gv#HSKmY~bDxJD@1|d@ vaJبlRބjd2FABFwc240/ z9ӂuY\ⴔx˪.(73M`c|EUFެ=ި5!D`K_zb|A+A9{k_s%A]Mc){y xΗT~y#x xKKvÜLB\%U(2d/VR>kpc}$x'9}!{f%Y#i2):VEjkͱĶ.T6Vj&[*dg v7q^l*ݵՒ5 J4Ѽ@8 |?.8zzj.1u¨A SQ#:6'OjrLt, yokcc]U.Uvʥ*i (߷JD9aLOl~V??  ,:Գky,ă766[{m $'OdQ坸'>;W*5R:JyQuRN9=1y57-UN缮BIF+}֓VVnҥˑ=nbJƽ0*=:c:vlZ4111Y*buo<ƺ7U*T*Qn=N[_eU*,c@J"[ ZX_*5>w_?#QX,66R)8ǑWzWWnnx+|ixQ=_YW-BMFyRc5/B _ʞ,gں_* n;i/<3Z<&e_OJi! Mhjj qTTE|^szXSPTTTT>:h&P]Y}t0_p]QKUK41:ݷ_ns=aERЄD5x'oi)=ӻZ9ۻdֆRa%K |Ys¥=5^s_rk|Ԭ9LHMmX/GD&Ùg3 ߓN2546cǞԱiMOqKEmok`0B`Q״RiGbQrIAT7Bw+*N 5Z~tc5>5RpnjƯ}/ed=_WTurjT0k~)Y3SS=,U㎩=//%_@Uµ_ʝpk/{k'ݷy 'E%SQ?y#=qJ94q;~NcI>i/(:x$iz#2G5<>'8jS2>mnmj;-mmvv/lT,kQ^FPD:9TyNDWvL\4`Z슊kTXk|#{ooѱ&Q/5>6U(<%)ӭ=QGޯ7SRNT1 9ޖa6<ϲ UʨNLRgY-eFg5 _90J8DINW;%IoJil\ƏЩSgu9MMWTcmnmjskS[[*hwJD*A7TvB!ӬtM;%|'jYg42e8%SԔ5V엒gez~g/L{$~퍏פ4}RȘ&O9C#66B!DUe2 U *RU*ՅQ%'*;TYr-ܙ9) W^*seOJ9Pݴ+_)7S^ɹ|5#K9k|r I/>7atGYVGoO`mx$>/埒W/eoO`əl ۂꗒoSR2R]JǟP؄N:q y=^)ʥ>9TJRIVj*evC9knQzB;Lra-/:|{֢4f$I=ŏ~H_H\}Ût2 dx=RJ-RQX9L(eTj rMT]T)oO!6QG\ĔV}{8+ }ΟNǴxMkGZxlOE^RnQVɞTxaTѾL\*BI?{߯ÿ.:R}QcВ-E'Od@O#Sje8aX>˪];IU1,R5k|P_Ju'՜ҧ{5 ɛAQ9N=RqY;p*J; yѓϾK<. 7CmnTnRɧRmeK-%7|*~(6 g S2MO:ܱ't_*5>/p']KS5Rw>b@!32z>tI8sVXMFMdU}SRY>TRn7锟[;U/U@9![~)I{)f5藪{nNHAb(Uꩧu?gn qN|^bAe';DKJEYYjv0$O3>;r??!g[tjy?'~짲T_J_!8QA:s^_ @/!j/?ڝ$fͫWL_}jBtY @Տdo0fJs?lSⴞ<^zzC}moSPygG*;yY^ UM@s"^7 U,6  S2Ԁ4:ى1e31`Aa9ϑ~&R)M FI"B(~ӧ444@B kd쵻N5RFr$UpPAeDZ_6Rܯ>rC|k|'Ǥ}XQDIt8jbjZ?zJm۪v  v ^%geDٓPS얝i'_&i'Y149sGfQ7*Z .7RRR0~x=+tzwϟNgԆI{& TTMyݺܹ0 *C,#vKIK9%`_JWw3?n#qXk.r9l6781woj{=*-Udmo٩QNq*yAL8 8NǥB9Sӭq!N7'IQc_C8Q:s昦FNkH*?Q] Û2tgMR*;y>7]LEɿTVHRj-]t98т(3R?~v6UXWe*[6'Y?,ӰƤ+w#ԞlXK=5>0 ]P(^G0H jffF ^P33#^0d* aL5U 'X:_7Ue 0U)Gw; o2 U>Ðir)y܎FRKrlL66OڋKOTSH4vskxx_XUN;M`Ŗ/~t`'}QQT~)t)z^˯g?^8LMY*RWSb޸G4+=Ϫ U@w"Q%wϒ!>&K?x^=Q)>=tahXdIOH._cUZ u}lp=cSf&F~]D=ĉ_E0HH$%I/^$9[r {-Ϊ75D,ӒD>n*j$Uu[3Z_~)Uh8{5\' ^=Q5AT*cv#E@GZC){D0 ݏ~)݈@ @̬߸'1eoeb%e▐B)wf*=]{T/:Nb2-SYB)/j<9uXsg7{^=QAQ@0usyPoF/HHl6%IDE#˯T x,Pp¢7Uq;)*|jIՉ(/[tV,^sjC)_rV̚^)iY[]0QD>rS]DKp0Չ~)W3_dazږJ/ =QO?M_q. IDATy=kOe햼 $kZBnSM'U5>╤zЩ]s');yfДgI2'T3Q/Y}')iaJ*էn<L^es8oi"=ϼ/u#$Xd2DԿo=ET,p&w"ɪa *uOeف{o ʞ|TC'˒&}31e_qe8%3-%-%Ӑ?5>+YfJs}lTATnbJ>k2%f!o v}_J^=ϝr{TT ,KӬ jwr0LY^sWIzb,S޾zЏj=o!T=7ph7Pj6Hm\?` IPèkNH-m闺wo-KJ}OyϞ?yjX>ITO:I)N&L;wR7d:STt jUP4eV]W䔳g9^횪x_Gս`k\ED')æ ~PYd9SQZ4(2'W/'KRb>s_p ܎&˩,KfgVWL{WSQsgɲ ͫR'yi헒ZʰC4)|:4Q= 贽N'kW5׃;=`JԾ'59Q/ Dz^2~s? xn^8e4*/ Þ2N3}!雊2R%2tϫ)*2*=>Ӭ Wo  y此fC JIZ)n7 h85FW/ D?qܒqI*,7N* {v@[᫛pRSr󚏯X/괔eȎj 0L9d:_s=%_u=oܬ7 %i`?1U#TRfU=$BqNЀ rR:P^c7V]sOdȴP dV*Þtdx}Qn$UT݄S3ew[RUܩSz_]GQI=  <-WYZVZRaQ/޽Ih` @TtL}uE.>q=gR" ܩ)g5뗪 tG #X- I).r 仚u>g:畡[sRiA{D>coהW^X=a5|k|)c#!RO7H&x|RP<:Ŷ_*y.tǷD0EtNP~!tPD.7ZB)'/5>/* _M(% 'Ð~ɦ=RnYzmGD>ô'||^(e2-z г'N {X?%zn~Ǫroc~)[s/ei85cF_ @T(H;NKɷg8vo=QC(Ko?e7UqN3Csg&'ӹJh߿3oN{G+CTP^ ^(TvZ*eib`(G"ר_GLK e2J=Qs%bRm;$wRPK=Yeծ囦2St|꟯_ ,.VwL3OLK)՗RiŀLE9 5$5 j0 ~3gX)a=S'rTo:u> dg)z^e9%N3ks9SRp^PKH*\l>`h7b>c4+k|RoKMBYѓv/uZԗHh[6Ғ$iffF ^bO?qx~ryG"5ꗪTO /:d''6_;$;aU*}th߷~~*VX;cRR,dX[R>_tB=I@ @Q?{^_sC_~LINoCu!)?퍲(_R?IUڷD>9tfOip~r)t>tgoz~Dž}{} T3 k r¾ُiV'pNĔf_D ]㓴_j{;|Б# ߪ^" }+}_iY,Cwˍ'׉5[BZ ᯄi %I/(WF0Xk/544mݽPۡ>'+{@1!`_硓i)=UQ'YVor0 YUNT1L=_[s Sʮ7%垸gYI* 8J=H*!AFyPAX!&5aj2ފDĉ[|>::'&5>Tǂ)ń=~nvGAS]3j*ߞ)_J ԃ-EۏuTQ>5 ª[ {c/ƛxvz9:_^ѓO֙3|0E $(oɟ6 ;j)Cj0!U/en//lmIںJdRewK eN Qb057@D#j?r 矒@#zyH_k|{'R~_jP-{{_5LTQ55Z}|>n|M_k|8_ЏNubEX~S>z@PHQ LHG (($эײ//4F'ծOۯ_+{п[J; ~B'w+zzPpP zY#@ 1odRoʷ_}7 UJNzG*W(Qbk|-?Fz4Ja T R#OKHG L&C_ɗiP5>nJ޺w0(Swum~bL 2eOH#BH@N|R@`=kYdT5>{jԞR57%VBJIY f?=JM >%Ic[?G վR~~|R@fZZZ$haa! Bt;~) HLy!R{JV!\ua0R8SSQ'!:Rk5r_@ H>) ^KUɤVj:UOj~L=*RR,ڹzfuT$(D@}RRRR@G}DIŋ S]I?WZ=}So+V5dUe0 Y)ðdʐU+˰d*%4[,Ӳ?4eY,H:HMd Uꃩf>ݲ2}k:=~Ѭ ~@1-ߣv\}0 66=w:rd =QE++t-e27s Mlnh̓z<2"Y o;$p_m5e9QLːeHQe/KORӒ4 C%+i~M!Ta-S?OAW}L ޿C?>͔FR={^s],R@^suݼiQXظnݒ*+jzbrVj$^)KNٿ gRʒ>U ˾߬NLadufi_#AmvYMNKIvhQ#`)0)ipF:4%F8;SgN7n@PDW4uTiYV_Xղs5/eڷsU̶fOR-?FbLtp*J}@Ϯ=C}AtH/#ȿGOQZw[GGj)cϯj U-9WM? ̽'k0g?kMvmSaO"T05ա\#v r$L F $=QVANA5+76gxtA0eU'T;-eJ5XT|RZ~SJB)`UR͕:"B\HSdߍd# ACFVO޴ Se:ƞ_@q)p>nx$_R`5)T:<=@}q \KD _ѷ=iRĔ?SixxTN?zie>Cz52T_JD_$[R.i>`/f8Qj=$)$TH@ //;aRF&ޚQCImLzC]a_e|A{ JH@AT]XXXfY"Цo|_ (ұc:yN>!moojkk J*w>^KUAṤ9uom{JI񚘊۴T71uR TRH&ڗ )5>)s6|?N<3gORRkC;;RxQ Rpq1}UrI ;(/_*Q4}UMy!BH/nW}?Ξ}JjbbJ[Xcmoo\.QJEe~鿈KAc%/X19w~)|Ó#FֶU' /#})XQ!BH/Ɂ$o~)3Z`QqMܹY=LѣZ__֦JҞ(˲(˲TTRЃ &{Z=}BR,WʪTͷ=nhjd\r-eY{)fwH_J#}O͹$_ )q?fgߡggT,7GT*^r$4UTT.T,hg3?A$:iޏ5s;߭ǣ5TKΝu>R#k㡆Ʀ) UV(`Ti`\}P]KOmP#1Xt+zvkn0RKKKK! ha@'N;n;?^ӣGoikkSrYޯrRr$0SPTTB!.4T~o_Jd֜gȞ*v*?5Oik'L5-Ci?´H߀Rf<=+_2 󚟟 XC ₩ggs?a=x=z[BJ%JE˥@jgf\1/ ]iXƺrcܻ%7jxl:V;-U,`;CXss{꯾THdL-//ŋLKmh/zU=z;߭-=xpO[[**^U,X¨ݒvv r/o j|tޟ8v.+lNMvv5tH@lC(ɞz6(J͑4/fZZZ$6HM~O^x:){P>J;**ݵ*˲M?>O" ݂ *yk|SA?e6&򾀠#%`*F퉨fH!i ˝`jaa!@ 87zşNASWXNA¶ W*Tʲ,O2 C.Z^ S[LJvvyTRRlT_؇P0N#BH)W&$/pt4=}RǏcT>Ba[;;;NUѧ? IPDuz欌=Miȝ5PJ%vN8k|i$n:kx_&B\"BH)^qL/4@ ]'|? VummT*}/4M}Sa-7>g%-rm*T)ウ )7|HN%Iʮ]ZRHj _ 8)tWOַbqG /T*zSP@D5PU-8 IDAT[ߺUR}K9o㿆0!BH)_5>`R:w;_ߔeYzMb-ƗJx(TJ%`: p]tia4R#Ep0)tO$FDs__Bz5SJ;M~RfSO:D4R#/P@ R_+WX@Xp~ RX5>x%Zk@ IC >/E XO7))A~/? p((@}R_ "hF!ЊɍuMnSٕE}}Qn0L0ń8(AdKaY@j0KBD:RH&DŽ/^G A8#Bw؄&GzL(@}Rhaa! :@ ]#H?Y@DS5 E}9Y(@}R_ @ B@FQ_ B E !jTOg݌@ DX=}VR$Q.)$ TCz qн'8=Eӷ_U| N BH@*xKH!6nܸY$-e2u歨/Wnl\xASQ_ 4}UMy5h @}RD"lVKKK+Wqy@CQHO>OK/ E !jTXC!B0 #LW^'QHç2Hb?T34R#  dQ_zF<ݸq)?6z-S8S)Vvu&t쬮\0ii#l6MFgyy@ @nE0yӷ_îtde)$ "IXz !٣@B C}_gV_R]haaZ^^V6e@ H,// '/B[(" =XtL---iii~):ƍNGR! ԴD D~)$ :nvvw<)<`;Jw؄ӧjٵ*޾M' V(7Z^^ŋy݄X!BQVBX6Xx;j{Ҟpjɴ~bjHwa k|7n`C Xp\ p>!]ᔻW2sԓ^q)̌48)z$`]Ino_K{d]b~~^^0uU))Bz|h~~fBjffF B 'tsGsQ_Nbi)o;wTy<Gy4`Zńbh6FH{۵kו\2mr&'49{/ ~)wZիbivv&tQŊt\nMܚN:ʹ$jeyyY˺x"h "{?77ׁ+Cܰ{@K---y+S8!2LFZ]]=pu(wܜVWWL&e!FOG]x1KBL-.^/ zPPP6{[\Epʕ+^0uлXC$lz'"VRTRTH!Rd)!G$R8"1??e='W-؏/Nuԙ/$7r477G?p3,˲.T}X$ϟOΝΝG}9=krrJSQ_oWvxW>_s} ԑA8`JTcB r',Q=0 Њ\nMB5>H 1! bEH"&~) 1!VdY---IR=ƌ˄Q@R\ \r洺 t/)rr@(r5e auhyyYW^U6":t}QN_ iaaAlV7nk|] )C$w*Q_IZXXŋ5L&e!`VtJ͓irrJW4Pj>J4>I|@0! tQ8_ ~DPF~)H& RBIz8K헚nܸeLH( fo/ 3??y_jyy~!((@rkti Aܕ=7f%F{JK@k|K% R0p0 J^h[R(I-G} _ ~d Ж$Q~)H&@ @/[Q_A$_jiiZXXzRZBEnT.`vvVW\^JTٵk =-[S6{` f~~^W\̌uUe٨/'HVVn)e ܚ : )M5PG}9&R/^ꪖdA )Q~)H&A PQ4~)H~L&CT0 rk@k|5>HaKrX h0  e599ɩ/ФyƍZ^^4??%=G.\nMNV:=4??Y/fmh Q{JӚ"p٬nܸ%L)52Q_=~)H&eݼy+/Ԩ_ŋLK5@ $(F$_5汲@׮]' &5B!]xQL&EVVn@̸RZԗ8~W/)q˭)M0 3??+WhffF˺zlԗ+R@" 9r5 5H=5=]#J`#z'\K%SmlR@YYE@p<⋩6CxSmC;'q_L@# eĉ9@ F[ĉ?:)@b'jЫ.r(z8T^D\$&'{JӚR:=@h.sue2eYaD}5 nr5 ysN:@(.QE<⋩6݌@ H8@`#ޘjЍ[\Lږ˭)[#1j-.^Kz{^RSv>F˭cn0˭E})yӮv"de>LpTrkfo|0?%= FT2/eseYV`D@?N?;w~;w~q<~;IO.i:u+/t^^y3ce)z@B5>RG --.^' Ď_ KzxK^ b($Rv=*KGK.…b) ]D$R@nt_R;;y?R@|D"IFT%_\.icc0J_ V/Io8X.\n-1SmrIbA@8k|@tX:lq2A$+{/+{/FAT#K`ew=0 \n5sƷZG(^t2k|@1!le{0!MNz zN;!U.oAYXxI/Rԗt=:`s'qkr5 aD~)3B@Ot7&1bBV+SmLHu'UKC =Q_*tOTC `e>LP4 <߿ܚہSrI*;2++ R@hOPP6{;k|j_*n=Qt2k|@@Ztu&G!ԩӑGTN::vv򉛈jƅ /W>epDnOa@5>˝j;l0J>F")I++x dK%/U&'UKae8=QzՉ~)VړNׯB!=Q_ hpzH_@ A_ 8+{@DRH G}@onT'ZC`ڂ5>`/Ve(@SX#`*r|~Aw_ zGU[XxI/RԗD)zS'vv* >RuLHR@2:uif'咊SQԅ /W>eEz=Q{K{7oincKHg2Ћ5;;y(tD&c }eDO Lɵ_T=z ^_ ]@ ]ڵLDBE $_}?' qB+{nOaӨ_(RVLH!XtR@wIӪTz᳟ k| Q_*(P Br\t~)t&HDĄ ^/e-C r(\_ <h}=e(@+!]O 97oҥKYC1!YY &'RأqEb(@RrQ_M_ qńb(@} )@\^y3Q_ )D(茛7oincK![Z\L?2{0`eD)t=Q.]օ //H!v:QA/Nces{ Bа⾆cace#Vݎ~)@ ' +ba%KQ_ R-z e2BB[X@Zx гX2.Vpd׮㚄QЛn޼K.ƇHiD~p4tHPDrep$tH@׮]g"  ^+|&@̱ܞ((Qܼi׽/H--.^&~))H' R' !/+{=(@'/+{=<@פ.Vze(_7#<(@ܼyK.]fHu[Db/NTCKH"zR](Gpg .BOܼy5.E t3_jenAT%.]օ //Jk׮3@ ZK%+{ DFzRF ++x ' x:$@/R1FOG^~/ [trԗ@LT@X'X\L@H@*bD9TD :S"0zz[\R*5(Hu=Qkpp(\^y3Q_FO!z"R4ͨ/1_H<#@ >ϰ2Da?R@HE 0p) ~pA (4cg'~Nb@ ͠_*XRmb=G$T,I_pZDVHB VL@UR@H@VVnҥQ_@ )`zNASQ_ I6@ ) ^4H탞(@ )5Hա' arQH!lgj@AO: J)6TX,@ co/)!@ v zD}Ӂ=Q47,KǢZyKh zB R=HD!j@jddbs "eR^@<ā?G %H!.z_)( R^@<đ?D?J"B_WR KR@<H! 9@<]} E9yBs@ IЍk|]HҥK P`ZpW)$U7SBReirxWjD 5RD!RmsM<E)K|RU.H#@A9NcA *荽 8_7d_!@oӱ5]U$RIBכ,?>UHs_ ??ۿ6.HEM Rvlu&HEL Rf3|gF+ߔjAʞ(dR{`C)L Q5ӂ=X߯ RTNK2H QTմ elObyT)ʨlNV{fY~)c|p_y{V,DͲ8<|Oul^4:'yd(XF{{{ngZ{M`617F&xM-l~,[:M 5nw׿}Jw QVHZv2 m"FZvG) Nj_R# `0lBsʬ,{f) :KQZf>G{c,ٯK)OHee?@Ap_~{,4lZvjF޷6UQ q;/(4Q <,4!*yT2H۝~) ?*ZS(퉚%lwۻK`3bLh4yeӶ"H){8F6ZQU[諭'j RKQ?vN y=E4׵kWh4;-W3/&=4\:)Š:p0%F'[aS#))כ+mQ!ξѼ% sAK E;%uu5*A7@]Ǩb~)FNV;QKrBjIR"sEIb ?;`]ZM???>Jŋ_/Evvv'V(cNjBB*Q>D;:z]]]zcec޷AEzgEk7}v?ڴ0m7Q]<E+&uȊ=Q?=H S>?6O~{jQa|nSAqmveCZvvR>GA*"ݻwXշo_b0񏷧NH R۪hԤ$HQtF3ZSQ ^Ɵ}Ԙ0ϟ)\^^ɗ*HݍMG_[4J-eh^OMO@M|qA*¸itAj_:Ho5vH?xtIz̋RZ-FQf(f5eL/"烋ͻ> E ye 5T"XVwz|9ˍRp8rZ jz+^XnڞY RVaeX&DejZ CQ B&ŨTjtr:u3nޞYRc޽7oަҭ'LUOIMOM.{Z뵸R0QO;.5u}cS~)VȞYԘReOI[_ FjyrSգjO]LEQt쉚e 5fT:aY=%U UR(1*b>RNGiF3RZe/ =Ajz^6 djGޘ)ƞt Qck RVu|""۷1\}^QzN덈("Zź&Y{#bSRERZ-NOOE)jub'HQtDdX3ƗǼo-rJ AV f;;T %Fm;{mb `۴O^oܹR tv'jBc|0Ʒ.//ˣeR(uzzkzV;xT tTKW=Q6H{>޼ym0U}NIU!HE)z#:?^iO,RcK3W]NIU)Hju1TJ$keaQU RbT5;6J y.HE/ c|o\ 5~~Q `FԈS ey!jAj_~ 2rwtAV6lNg)ĞteϛAjLJg:ƣ{UR37g PD%wGĨ'*]BX%T1U0W>fkTV_ׯlVVuA"'*]&L/U~W Uբׯ};n̞t**ƌ_NN|{ƾ~_|^0@N9mOx^*MR 5&L_>mDlWs;TǴ%E&D;:zoc*"~Ϣ?ۺ 5gJEv)1l祫➨Y"H{>޼ymRsr%ADl_8?NKjrTuO,[ƌ3We~ Ri)TNdURQ$U}O,[ƺݟ%a9HEOK9_ j)1 t۲'jRK_9|hp RwOK @-z*{AKm{f 5fT:aNO @}5Ut˜mϛDz~tN`pggBcYuܩAʨ^QK'DM&HMaT:aԉ JϛzAJ*&H`T:cQtv-aDRw+ YݩV2W4D#H-_:cQsvv@>`]1T %F=Q-NZ01 {8'He:OT'H+ { Qdo5/`iDRVS&RÉfx^:A*0pqяsAjO9|S&eRNGϞtR+2Ɨ~z1 Cnq~.5t#b?U %Fx^:y2"L_*_YFCAjzga g|ʤh~&HM5bTtGG/}mT !c|_*?YF#AjI0u@5xIkʇtD ޽7o}dT>A &}vɯ W$ǟkRh4x{GZ#c|mp8^R R~_~I~W!Ha0%Q7bg=D=mT`pOՃy SZ;;7? \>5X7Jg?7-HF |ÕU4;6Jx^RcT:c|k4hC 51둽YF㟯`؜͉ R %Fx^:!_*0fy R{@\{.H-r傔Ng_Jd<_*1t;;;h4XuwU1IzlAj4J'DmAj [ZQJLWވFp=r~Ŭ;HQiJgFpÐ 8y1&H*Z(%HcdosvwK3` aUqqHZMJ;A{_jqO<l^OAFFScQ ,p8d};;-A#{'OF;Tp8p`pbξm_Y޷A R,~t{YZ~|p戻8P6 Q\\\vu[6H 8??[mtD,A/Nmoo/<"RA=x?UFՎg~H{zGDLPw?..qyy[*F{{vc0G*A$K37N<CRyۘ4-wwOM^q~ޏz$oz̹ U ћžtBXR鄩ٞ? 5?$wdaTZ-H?ǩN<G,`0"fǜ Re R ӵGYxYȄRM~ "ADv':'o0`=B U eDo:{ QdI"3Vs|i ZVBɧnGU/l^罸P&E R>{}צM RF&'*!*=Q E3wn;=;v-Hm$HM9Ï/e:9!jZ+H9!U T}ERƻw͛yFev IDAT) S={vϿ Aj^H7Hkdo8L?..<"!n(&H R)ϣh) ~tn0 %HM4y?/͏k۷1Q%AJZSQK'DQTeT:aֳgɿ(Aj#{{ R3~~gqy@y"oOAM ÏTNEj40G RRjqx<ۘ4 Rsp0T!RAI|%"^|x)A=_s*=Q(Bn>[jE RBz} Rsny6NN8?wׯ_fFAJk=Aʩ[D3GR0ߵeOK R{у߫ 5mzx-:NOS񯦼>^$T?HM~-Ajw/q_7SQJ'DQFco50ů>(Aj^D'HM>=uظ{i4=L"H R..x*bRln'c|kϞƳgק?Ru߳ԣg<ڼ*A+MyDϿ}INZqt\>H Qf}tt2~OOX;AaT:c|~Դ Ryk^3ORY_?8xOx"VbiAGy쉂R~7o};c}^/z^ajs!rڶRe o030Ɨc[cwF}#7?65ddoF~_#{FV1 QwKgOdG u?K$L=jhD^y)R㟏=6Xz̛_y.HeתNcF3R2 c޽_*1zZ;Q &?Oz̛_y.HeԬS 1hXtBR1ҵ۝x#L=0?zf3,@Vn)vuuu3Iu:BT"y^NH/tF#z? );Z~ծ;!:!ԬRWWs=Q( A 6~ttzTAjI 5>摛_y.HeTwH]_Ğt`) 㛭V"$ u5Aju''*<ȏR#a*1nGޥţkNH-Gn|mk e;!:!'=Q鎎^F:ۀ&HAΌ19Aj8&퐊_=fe RY URkLb UգlP :}!*я?oX %bT:c|z)Aj6N? BZ Rfs'fɺKgOlA 0~N;7!HGZ RiAދf;;&Q' [_:8;;6GZ Rfs'vvv 6x^:{` RݟJdT~a귿=LZ Ry;;;NADJgO!Hao79oqvvTe RY uu|jޓGKgOp |xm޷QJTq~ӓJZ uA* Ӻ:DNg_Jd<xH_*1T|AjԲwmjE%@tB0 LeT:aNNכ RsR^~*h"k4wm<`A ~t:N]c uA*Rj݉J1N%H _*0U>#"">~ R+ҔׯuA*-s߿>Y3r'*<`+oƧF*Aj+My]~߲V7~*#{ Q@ A X1pZ>~Lj˽Q?Aj+My]~"Vk7vwӉIyx A H&L3W=߾}o߮OQ}!HM~]~"Q(Ϟt(`%2c|^6X{DAW n2H]vDD<}lkQ "H/]GW߃]EW uA*]W>=!*v_}@R@~ˣ&H-{]}W=|x|b%߾}wog{{{wgPFDB1ƗNNN#^a/~Rqoo?<_5`xPDPHT:c|T=Q鎎^F:H j?8-@iKg<(A (FZMJJAJ_~ x^:{/@ QJJj祳' (;A (wǛ7oR_ Q' A c|`祳' A n'c|`f}d<"A  k Q@ R@e/N ξxPuPyK3@ { QaT:a Exm)`/N l%c|^6({ l5a*1>fOT6r%H[j?"%H/P}BjWB/PM0 00~)j0 01/PNA `޽7o}d@t:BTgy@)RK0Ɨ@KgO)O Sh4co (%y)DK3?{ QVdT:a D3 A #K3D%Hd~tzxzRk`T:c|ٱ'j5+! `M)52ƗǼo3~S,GJwt2yV6j?x^:{6O0a*R Q' @N_ tDKYRΞ(b jtD P ޽7o}dPuξx@RdT:c|@K'D P`Kk4wm< ~t2'*P@I/NžtE(ʞt/_A},I(!c|9>PD3Pn@ Sy'j5+! ) 0ƗǼo"P@SMJwt2y*jfm3KgOX0~)(!*=QHbo5KA祳' U Rݻۼo엂|Q' ,Rd_:c|9@)2d/0h4co (%y @Jgex^:! 2(n'c|)hA޷QJ(3A Ҳ_*1>fOT:! *(= St A ʰ_*1>6tBU#HP9KX{)*~tȊ=Qv_ QT @Kc޷AIKg<m HtXet A ao51tD)0~)VcOJ`kKgVaON`u?9-~$D' RVao{KgO'H޽7o}$LU[/D%2 R0RUtBL'H KʭhA޷QJ`>A _*1'*`AKt`9,~tɞtGG/}m@Rj?8-URa*1Qv_ Q"A 2`/]ߋy0Ξ(Ȏ /^BT:{ {djʖtDR&T:V'Dƞ(X/A _:KgOl T"h4co (%yYl1t3N|RwǛ7oRtD ?~t>gOT:! 'H@/n”=Q@qRPKۆ1>{ QP<RJg<I_*]UJwt2y0 fo5JyZx^:yP0Lc|BjWB %b/]ߋyT#H@ S銶_JJgO %eo5y2Ξ((?A Jݻۼo/%Dƞ(A *_MKgOT d/ѺTь_wjJtBT fTUT/D%2'H_*ݲc|D`{REJ7/LxlA R&n[H-e/]ߋV`< [NJsv֋^oķm^F:\/IDATr&HR˱' K'H-Ξ(!A x||DRTttDRL&' X ,ݻۼo0&H]i=HV!HɶyԶ)! Ȃ lKmc2dE2M)H Q@) s۰_j<`])`-_A}%Dk#HkU1)y&RFT-LU-Hnu޷l A ؘ*U%HA6 a Aʞ( /29HMrTRe RDE!HP12){By}y6ۘ,AxPDPHE/U %DE&HVRE R2+~)! (A ("*R2 NK!HnuBJ)1<<) Syn T¦6D*eSajSAʞ()r61Ʒ eOPePY S RDU'H1u){m!H[)RY)y_AJ lwǛ7oAx)`J RB Z6H%HXfԢAJxLx`R)y RS/5+Hn:o )M R#H,azWB)%Aʞ( R ?6Jŏ;. IENDB`hkl-5.0.0.2449/Documentation/figures/k6c.png0000644000175000017500000040311213237020342020556 0ustar00piccapicca00000000000000PNG  IHDRH 2iCCPdefault_rgb.iccHgPY<@BPC*%Z(ҫ@PEl+4EE\"kE t,ʺqQAYp?{ossp e{bRɎ(tջ{i常r)teJOYLgWX\2XyKο,]~ )sT8بlOrTzV $G&D~SGfDnr&AltL:5204_gK!FgE_zs zt@WOm|:3z @(U t08|A $`(E`8@-hM<.L@ށA2@F 7 Bh( ʀrPT UAuP t݄84 }aXև0v}p4 ^O6< "@]p$BV)GVC!Bd h(&JerFTVT1 uՁECDh2Z@Ёht]nDѓw aa0Θ Lf3sӆL`X VkaӱJI%vG)p`\.Wk] p xq:o—;IA"X| q B+aH$͉^XvbqD%iRi/82! L ے&US{1O,BlXXؐ+ NP6Pr(3;Yq8WJ)Hq"HJ IKIJGJJIKa8y"Ֆ͒="{MvV.g)Ǘ+;-Hז,L_~NAQI!ER¬"CV1NLMZ)VL $L`V0{"eyeg :JJU*[5JLGU殖֢HVQ?ާ>حѩ1͒fX9֘&YF3U^FuX6m]}G1Չ93 |UҪU$]nnCM/OS~~>&   .y݆i񍪍&v\mu:ƑGLMv|253Θ՘lOv19|y-Եl^Zä́UUКij}ZhlfSoV6¶vʼn伲3صs-[{'BCSGhGfhgWΣ<lqu%V>svu.֪MZ26,b&*4r**4j:*@LMLyl,7*us\m|GD\bh$jR|Robrv`NJA0"`H*hL֧uӗ? ͌]֙ՙdKd'eo޴gTcOQ{rswol m ڳMu[NO [A^i۝;OrR V (m? Yrˆ[EEE[?Xި%%Ga%oDDiNe̲²7Yn\^{p(㐰­Rr_bULp]u[|͞iU-x4:zccǞ77Q'z̚KZ!'lsWnk]8q/v=s}ٚvZ{aԱC) _}ABEKr.]N<{%DƞWzuW8}nX8[[Mowf[@;]wv8d3tyoy02*|`a׏2-<>+|"ߵ~o /ۏ?yx??'󟓟O)M5MMqb݋ɗ)/f 櫳/ M^̛oy=}na>|ZZ.V|R?B, bKGD pHYs,K,K=tEXtSoftwareGPL Ghostscript 9.22_ IDATx{w}Tu2- HҀ#L$ ]ղ8hė<ϋ(@ E&&&$I\.ڃt) )I:}td4)N>٦qĄF`R-R?at*'Q}uر5}R+{Mya&]l&1:D}` Fl)@Wy:N䤦2ݑJPv@ .xf2robrRo H:LF3쎾'==)VD X {df5>y󚘘6riR)6A 8].[|^gΜO>YMOOt݋:TJ馅Qt*I)@Fڙ3gox&''tBń#4c=ovN5%§0yLD өt:M6R?>`0 `{hvOn/FN>-I 9)@۝L"c+m% 6*9@cRigOnLav@ rQDk| aHZSzv` F%:'jXCh'e'j|>/$F4)}=oXΜ9q(&!~ ֛۪3/(ְ>{dt*wa$s90FgYይQ|1Hvl&Ķ+j'fY0FLF9sl`.xNRQ Ju2"݄QdTn1mC -'S}Kul5pM}Z$&)f2LDRzzZStLu0\*Tx?499Y׼>==ݞC Stzdt3oIj#ǎ? `DF5G>_ N? 0 `瘐zu&7-1E9O<ގ R) SthFR}dE}]t(:q엚fjLW>@"tt2L6Q{ Q(M3d* \}еAԩt:6SQM>(O&r:N$RM@/O(]@ :L&ATmWW:zoGi|._|_х ߊ(]RsL&VyRe=]Q(5gd?ז.p5]xF7׼D}$„D$=Qݴ]q ڙR\ʲz騏unKsJ }/=Q@SHAhaFFOE},B mpt˜ح j`tLRλ>Jd:a k|[W*V =#=@!_ϋ &b[#Z>j U&LXT2٣? H\{ґLR> +2ƨo= &;1 $˞ 8`*\ _#-,ihh= &kO{!]e~^ V'$5??#<@w!=' [TƷ @8~Y %l=Q_IFAP VVeYz{|-t)zKup:*1@ZYYQ\z E`}DpJB Ĺ'~puz(S{U,U,/M)' ~PY׫++_am`3RDI'*~8u[?IڴC#J ?z:t)ϋeO{! LdƷv]r5=/yj UTP$u]}#ű}~=/.'*Gb׉kkzѨRBaEQOO\7!c NRZ3nBVྜྷZ|Ѩ sd]Q&==[#}_R6e۶lۑ8WooBP\?">=@g30&Va=QWfَOz pe\U*U,t]wĉt&ϋjTb5bNHg=>FLLNj*rU_3K}˶ٶ-qS^>7>=D}\G  .xf22nBX(Ri$eYzB/T*Rb@FE9O<1٬&''꠰ [! Ve FT|XKusRbd*l64?(CtEaGT|!#>JӜJu2"rRZDJc3e܄Qh=tS\L;HZg3XQѱZ0\N't'*nyQh t z_ Q"Z~)D@ @G[O$zq~8/ٜ\FSYLD?|Ds>.4L6 LFw051Q¸ zUGbG@g`B @8Jj5ϸ Y+c*ɿ|Qs\H{SiM)&Dl&*' q~l~)1! 2D݃~)4Rڎ({/f Va<&jy~Q& Xh)mǞ((k蘊<~)Z@ @Ky3lGi<<5>ITTG4%@sHhL,(ŵ_1K4 {⶞GR،t Ll&TW?|DAYɺr)4ũtZR:Q=9J.(SytL勱 򹜜tZNSdydtS[bB \PlJ0ZRje' 2{mTdt*z^Dtptި4\5>H^<( >1x(R@ اQ͇Xb*Ro}'*nyQ@@#zRݍ@ WKt') e=Qn>5>~)oN'SجI d" 1G_(9YW.E}= ӚbR@̄yq aTq@; өt:c4?j:kF}So.S5䤦2U@ 0!H0(RDŽDÄ~B|QGp֡_ 4R@ű'' v(Sb/Ŵh&&' RfR_+p_ Rĵ'>HMTKKg3JcQ@kc`*.NtKbeءf٨T硛degd?SE둙0!lS0{!(<5>I5>V-Dm= ~)fMĭ'J=QЁ~wE}fC h+.e C Qkf/519L~)PÄP'=QM'\XFm*Rq\_ 6e܄AV{LH!*g._u+Z{)==)V]FS ʅلU)D]T(nk|+{«Ņ?(Cۚ">Ů5>'&/]<Q&1: ٬NX܍/u?(gdrǂѱX05>b@ wt2 {a?r04ͩt~)b)ښ{@ q2=SO- h5S\NiRR)]ME2 Z0-EO`*k|St)t wXv]UJƣ*>J|14|Qs\(M|t$&U{^%$]E/NEF@wsn5#4]Hk<}Q]SɯX z[RqY=t0R?ZZ=DV^#q\㛘Rxʴ΋ϷS݄Q(@ JG(Mt[ H1!]WE9SQ@0!( 瞑}\hGfftG*1wb1!ui&[ ]u>K{ӭQX_ 4K,Y9sP*FֆQ]ֵi3l$\K0jhXR$?يaT=`vs5]Q~)!4ᔫ:~xs:{-/_]R7^ϸ !(ĭ_jbrRS RHT>י3g3;L\NTD Ww@ Q j\(9YW.E}!5bV =__:H:k|qb|BjOX1]rxF)ʹT܄]@k0!(0!=q[㓤س(OFk}﫬 Z@ Q ڙSXX&gd.Ձӧ5;;KՅQͦ6}}CqFe%;Z@ Q 9V}5ϓzqMZ9f?^99g $I*|)Ri6{mXR%*WodzZeIwR>Oڬ)t6j_0i)(;H! R{5>Ii-:5d&υo.mfmTտWLNIk#BlF /Et)D@y/~%-J|F7Zkx;7kk{sJ/*@H-¨]MDmr@ \ݶ7_}[7Å=ٔI7z}Wepu-T=@n>taThWQ[~)(H! Ra._QcC/JujD5UPUϯvuT ^J&BT>י3g$I`*Jibbb }\as=_fhR`*14Bt!)D@:_jN LDhꃩs{_ƷYkP5:cS)=D8ئ0dj(eYIfo<쬤JŤTgY^,ו7@t))D@=엺.AF!<*ftT)|FFkbeIwNdauر Y]vM|^׮][MLLH/'\׽u->5vwنP[OK}J &?@'+PG>d mN[d;KzNҷڝP]S[~Rk5|T7w:F]XֵY?d$~ @Z̙3LQwsվ6ԵQ IDAT_3R`n|- @ FT>ۖZ zj'5pMKd12%c2-XYXS[J%ImYҺrR6ފZ k}xRIfOcgLL8[<ϓmQS*R>B}F/֕b+u| >nZJ/o`:M0:_ߧ˼ogT͚@2U~}2՟quV+P 毾V'g ;֯9H7׍_ ~ͮGY}2Ip&CeHr-'+Iw5K0՟JnZ5z-14"(ΟkzT}7RVjUvN6YdJeYl;|JYi(۶eYΚAz}_~+} (_.\. |. j MPU?M%U&p©QHe5xWΩ{t5}TTv1=<=$UTN^K c*ɿ|ԐS㭙]ۭ٭>Wq9+qe9l˖e۲٫,gMO/\}PU.T*U,U**_KEE˥հgJ|N_Kj<5 6hzg3S>'Yi.oyy;ϓTJH-m$,<;vP Su_1~J/%2-KDB :Jj0UPX򒖗\ u@Tk}T}@ɩP|=ދ?/=ʟ}T*jɾ_[ Y,mU@@j||<`[(ip)~j0eD~ь~!IdRȲm9nBdzz*SGDRn"Q]3RIŠrT<+S ܌PT*SPwX2R`T*S}L$ddY $% Z^ZҢBaEbQ__ *i5*i*њ_Y[OMՇW~~nk_ +KJ,#:V 0~dfP :LRLGu_:\ ;v01>d~>kh`0 _y]!I.>?doٶ#crYbv?0d(jU'fZg>ۮvQ9DWX^ 4eY-K@OJCR-TK*m`Yؕxj*ՇPVC+Qz ٬>i ~犾/R_Way}?k_YRJ@@u[SSz 7KmtiNK5=Q[蘊<5rY׮hen\ծTRr$\RT- C}Z&JRSSpJ@֬U@Ϙ@ʘʞ&*EկtۑZ@e,KmI-׶ZzRTJ5ZT_ٯJV?5eim /i_eKIjtu@ҥOwvܵ}\)kCjGW( (֏J@ ®|.2Hj\kz V/~vWk|_$iZR0trؔJ>\_NRV;* alU›ꭾT|z%UBi+secdYW?ՐYVY+;mɲؕv۲`J~YbQKˋZ^\œ洲\_r,~m.UZLSk© -)0;K=u߯7)(k!#UµneiqE)PLw}.tSګ{MOO@hork`"uN0E+sw/wY]CiJ@S Ru:ʗ}9|j'gss9-g}3)u&P_N2) ,5S#*P,jaa^s47w]K*WjTe:5S- քSuUJʪRk:PjyJJ5!r9U&7r=\GRQ![~H_P/F}n:#335zt/J}q]뿮LOIԦۖo;[%c\,ja~N5T,*TjF WKhuZjUP[400d"DB=z=M&XveTRTTXTayI+Z^ZbAA$KRu=2Z A6!U8_0j;?k||0>05fBi}ill%;~Nt*䤦2SLʺ݄=%_eێ\VA kitIss5?wMsZYY1*eVNIRC*iqenU~N/T.7٣m^ceϪW3c$.JHh*O "cg2Yk}y'E8:T Qn5e=ʉ)u?4;ŗ؇ACɿ>qGdWkfWgg3g$iRtdrRw߫a-_>u2rcԓLpP'7K ]a/ ՛1F/_|߯ނ~*zʲZٹU ;U +QAT-Is{^}vmԗZ4>>->OhxxXǏ_3)׽v?|IVgT_`k;{q(E@ Q >nLKs9T?% 7 z^VaaN.\Pbg@CT2#)C̚`* }rW(J*k/0ٶ-q+!*RTT,_U,97;R[@۵C*}f.i||\ǫ2Q>%kQu􁩩I0ժ~)u5@{tH! tH_vƷs.| ;<*_l*ەE#-,.KzT,U*eY jR=F,[l9*J8P[QOG}$ eJ-/.hya^KUZYVP*JR{Re}kky>fgg5>>T*j^{7͗}߸ϼ?5 6 v2=sFFC#r=)D@j0/:.6SR)IwKKz+_UbL2Y J]zY׮^|5*)} tPR2M#ײ+J&+eM r(XJiqˋR(kB[''cI@[5d_җ'~m;*騏0*Pj7(aIR`*==5w|#ӧzoR~b5ZQy]zYW^¼łT*i$kW䳌.JᔔR &{ӣ^ʵmJ,-hiTXZ5T Ӻ=m&H_?%L&8$zި7;I(E@ ?mOjm0%I|/_7)14r"d;Z|KvV]S,mĔkYJ֦*ToݤT_Oz+|% j(9-]SqqAA(KkB:3ZXE O|Iǎ=B M*HȶmYJRz^{9*/oO\rraE%-]*,׊έ Z@j?OZ\\eٲm[ dY`*l咶T,O#?}D ި>פ~)Ma)rxi-..H2`rsd۶1)+,2FT_߀\7Yyw*.=yz_ݪ^- 4ZjG0F@ 'I̴tO{1yz>m6> Pʵ,8nO*T_ۧ * *./iq\œbAe|_O Z@j ʕ˚.c$cµ=1FdFFnj~G?濊 VqUsS~&4D`R6b[ku$6憉T@*_-<oDeZ.`_RaEe_yQ=K ě %߲}1|$/\.X,ToEEJ%9aޛNfW5 lvlR>+`Gi|.SN8 ,Ke$$l\Z |-_K斗umaAWue~Nҵt +rI9=r{z5~&%%ǑGƶe$uW`?#k_{>_Ȩq\˾|rRRRR>6v?+_ZN}w\h æ59n!P0:V "1:ۂ7NY-˱el[TvNS~5Z(tmiAWte~N˺ &w`X}F74j(X.2!-A yͫk% /_+ixLG&TuQc*>wQf&TJXm,Kޜض|N *m˒@K_u+ s<]ҵx.^eohX}50P,LYƒc)@ʲٶ#qel[eéR-X %][^9]^w]w]_bACz Kn2)e>NJ@Hk_{eY :x[\'MHI&׭m'wj0OoKu oz(ar+ZׇS+ٶʦ7PuuEIՉbAW;W/.녋ѥr?4ћw`X&Q ,cu#ڡ400(vd?}}:pO|:th|RO{$=!xjLm-乑Q%X1Kmo/Rl%mLYj@8rGlǕuᔥn EI @ ye}U}e}e}֋/)p MI&%UB'Mcg2\:b|pJ_3_RXP"ѣu+fBQ/pQҗ/wJox8 ]T/K̺nxlx}7zno@} ^_r(#`e ʿ6'|A F>"I\4͑t421}w,2Fd[cd[Vy˒eYeXdYrK2FJ TT~VQRX ]Jr_mKbA |͝? `vtsr媒^%= 77E%||>a ī~%ߟ?`iVTMh@tOt/)D@ )9(-/,/E}=:;/9`|,'+e,$٦R9ƒcY%Xީj@ePvS VCZH*K*RU,T(TYmpB; PꅳgTJC; kM;6=z'}B}![~H_P/F}Ą|Qs_~1*0F1R2 }_2 T¥ PW |r |Wmˑd #ɕck,> Q2<*W4w/./(=ۿ_o={\.'IT#$.ɄS3FFL$o8+l@ V{FsQ[|}2/L_ *7IZQ`j8eUzIj@U_ S/J#lrZ(cG֑1dW/~[W^ szޤ{k-ܬWUzw&&&j!T.S.D8ӹ\ph`R +{+{h_\5>IZ{Ą^;fy},,˯Vuk-trGlꥥ˲}_˕[]lׯo7"--;gU~M? `:D>י3g$%RJm0q납I71z4@ v3/yT헒e2 T $/iEW ZTuϷW߫TT陪~_٘J15 MfپD+)eiqҡ;o>O}TJHuVK}M?nmz@ Q BTkfyՂ?fUTjT mUBUJՀʗԅSGp IDAT_ ,ۧ|%Fg/RӚ$;vlOk|o]SdNfMKV4 @ _l2=Sx&S <}=J8Ie r~ɘJ@~TV rI}A!c418[ 9uP?M??TkF!Ԏ¤V%݄nfU@H! R_$ђ*T>ER5 %cTRK:vt[-K?zٛ@"R;Y]k?{0uШzXDR:~jgdkke0{{܄naU@H! RTq]` sR]j~TdNK|)t8SiYT*5QM@ 3׶XkK:RE$L#d~ @*&`j1Oמo~ U=-D (H-՝zL??LQ V@sR);vL<'A־kM(t^1l6z~W?!c~U_E}$H_>|^R{(m8%ã;9>Z(SbLCZ3٬5)"ȏaOފwMFGaeQ`eq5>Iw갦ߨL澨R1G6hj޽>&l#*>Pl$zNg?,cޫLQ &bLeNi;R.6h`@1!(0!1/:N֕KQifu>˔ܧT궨ÄT |:%Vf= (.S/~W;tJ>*fTHu7J?Tc7. q+=~pw}HtKԬZ56|ICɘP66 Huͦ?v޷qPzR:`-,f}Roo3B&Y;R)}.2^^7zʛm|Ph؇n{!Aoq3/:N֕K1=Xެ^=L}F$AJHS"C&EĒ=ٞx?z6qLyjճ5n[=tMjzk+[뾌]ƙ$N5ݶcSVvB"?9 ϏLV &UGm/s6_P@a =< /=3VK5+BT]~Wi-`jJK%"j8VHQX!ETJ c YZҞV+)yqVK5hmC"0Vv,~VGP#LyA KΜ(Dw?.Wx?ha d^-Ck V_v[$v2'""""5:[R^kjgkA ˣ8t DD3룣xd^팧j+ݶ[|)>g| a OKn&_ڠiB*V*t5Y@!T%/=gFG^ Qc $jςnvm Jjd7ݿbp٨9Q{_:`hH5'jg_buk[- [Ur&/SDDv keGDRyQYzjJF(X!EA`SݐCPÓ=Kn2D&A&- T,UZ?PGp }}Z9du^áLR[[ZXEDDDA(ȱ=Pi^”+1,͒<*EP$d^[ &"'ڠ17"53u fjўOlݳ)ohcTHWQ5מD?)" 9VHQX!xƩ= 3Yc"qof+hZ-ɹI?eIUi(FyćH3ZVj/Z6%VHѪ+j~ڊam49>cb%/Q;ox8x|i%G+Qc?2, @B€mW Ss,lA|)ZZ {GD+BCFT?yHs\9;+(?1 slOɱ8K8%)wxbU]*: z@1Z"QsU߿3 "&@@>y0)|+PZT Pd֕t?iJJ@6>GXK5R!s(?L}=7tQD$HQHO^x喻SQv @ʀY2*RkY_.*OlXnTMEgB9r^ (I}/XͦK|)"jY BQoSv=o3ō"&@@6~G*UF-D)|CXާKkZ^L|[,SfZDUCT ؅/s2"#,YE6PV\RȤ.#JOiqQ1 {^=~|-zپQDdHQHrAw^q7hRB@MIw}?ABU1ZrQ-U#Κr&/cK+0{j)bʙ3eC{0r,r,,rثR KWC>`,˂RZ)7rb푀 ˭y2/R`ʄ˭iP%-}^0eDo)([0 ap/9d`bˢ] `*V{>_P#S-7y8{LQScTH|7 QpQDԄX!EA`T5 8LK3HP%a8wmFLDbQbqDcQDQDcNe&t~nSJ %n GP`+[ٰ-/r©Lf esPL9S&.?K 7J9se& t:ؒWl\[D>{ޙ}VϕVl|)" ;VHѪ[٢v="""j)dOԈR쌅`se[Nb۰mw6 v;) T1)!B ]<7 @}Ͽ- 4p*iD"0#fLS@,Gg[< ,dܰ͆,X*̗ܪ)-S6"a=с5XnVa۩DMJYgrJ)uO}S{_Ƨy˩ o9(X!B\Tv`{ B 2ўWXaT#-i\{nN lU ^mC(^l.H>{xjdx4$Τ #h8bmqdDBKv*smI |s,)寚2 ̋RQDEB܌#j܋S%3cG%ֆXvDܹ͘RvFv1k,, UJys1G=[Jm|~eVKQB*@ZfMuE{Dȕ\[ADjOў*HKE:߇G0 J8lhCQlCڑD|!C 3 +ޱs}mMnE#x[xf,Rh3 A"Վ20?;Y\6l6 ۲`6r* lnTmаa!ce`) w*|ۖW%e[D hFx.p*]8Ryg(J0y f[xy%|)Zm|D* FowG?0hegOa&ss_XP#SъR[Y==c᛿,*3@' Taxb`lt2ۍx{ѶD i GB; vB9(P0`Æmڀ!>=c_^吷sșY<,;w/9X$"( <))aZA@"u f6݋B )Ę w?}f낅/Zy͗ Kƞnԏ؆DW;d2,Xf\ۯ'X#*%:m{n _"چ6J#щ$bfRlqmvלJ< 0= ,UI/a_mʃCahh(eخԖKDf (  L`WUsܺZmԒ8GH^So^x/0`Sn(HI(eF L%h=D{"D$;g!#sm s6;R9@ 4}qS9_N+1=ȑ# M`m ?+h~iug_XAMQUUS0{THKC0&L;vٙaƹW KLH؅:b,eÄ [EXKW9䬜{6Ӿ;D'X=BC9{ɉ[0yRřQ`rrO?4Ή"+p(=^gūfND-R^!wкg=iɮ$$|isn#7;%N 9Е҄S L;`LT-晫hf*|ſ_PЅ[ [.lچealeRm[PZ#A I ۲v)!*PW$ڠw@˄RǏG`UK駟 <|A/BjU>tZ{"QRDrX!EALR߹qwn?3_6>`Ma IDATͳSxkr Ѐ mhSKʷMo9LD ;w6Hb'Lt"յm]qd.d8ksPYXrzk+S?k` _j6'gݯb(ig@BXUNyaҾiSm{BH-̕2ALnv#։D'z;>t 3JYPK^s|`=A/hS` AN_sϚg-AT~?ƳPQkb EAh@ Ą4&|)T4R`fv. װ*TOTM)gۙ69TŊ6юH.lu7 :1G_9LR`s|9QD2xE}CGO=jr[!$zYJZ2DAogNOv%at%ff^N\$ѯmeiwJpj6tJ}#Lv(Ri@hsŀC0 C0Cۆ ) !!$ 0аa;3  ,ؾKyX*\.Lvy;GI)`YlۂqrA'ݿ: yBЫgѣjQRR9TPS=rt^ 2`(éN0q$Dez[1e>hՋb9d:><:h`g7`z DgHm1v8uVv'{*so%7v.}cD,ΐ 4| ]> |7xS0 A˾\0u?~ 6>Η"Z+(B\ϗ W rv\^|ېKǠC6,y aW-qKpn aCJnLDU " _tW'?•[~\χm6_m|xpNQ1)O#If^|)0 0*6f/Uޞbұ߅s9eȥc#Wm#TІ. la;Cх Jy?k*Sm]2Aܺsk^^B>!Ҋm| ؞G\H5ؓG>5bԁ^l^8_h RR=Z|)1%!'̆͗z7QUQ˝_55ߋ/L-'7C&uܡ3m!S҆%,'y(PPȉriSv ݎmd?ޥ1}hkb0U|zAQa `@ X=xخR{)m|D> ( Vm|~zw>>8V^rcw_ޅsS˱0vԧBv: % bA. /rPZtt?v1o׽ZꂩQ?~ è^A+Ӱ5lvƩTrm|9Qx7~qD. SYsT n뵴RlMTZ-*%1*1`j%ر#|ghl%7t <:9QD-T~]GzCI)ڤHQH]Sն *vSxb ̱2~bhGaEYC݂p T Vͻ}-To$Z cɱb0u}?4(zBøg߉:em|GAMIcKߋx4`NTUs*uw]؅/t%KH=u"h!?$L5Z-c#NA_Rwu*S>(~'wx퍀WDDQFSF4tR;%]|)ݣ/ShふUbxڏjEjd7/etBaUQ`^}:)l\Jn_OJ]os|)jucb%'N9`6D+e{6gz߹ 4εAZ_j=xk*1ۋzu5|)ٞQv&RDH5НhXK1"`|)܏]:-D8:7hUYb ḉ b_ ?{JH9pܺ71}p$Ҹz8UirǼ~ *'"Qz ZO<"Z_W~S! =ˏUs[ݞdĥN^S-SftG'tܱ}SۯýVKQȮ$$|˩' dV#ʩD c[ jtYn,CV68F3)- ᓨ|_1|su]EW ]ٶ 5%ݳjj)ѹ}_)"jߢ/TLZ&19{w#N[Q8أ.I7!o+#j=QgRW#57_;7^ɕ܉q{~V"U P੊ Xw]W_n9Ng Շ k~Tq= 30+Z+/sKWBVR0uW7Ki)17;N(unA̵'Z'_\c0|H!|X^G&Ӏ;mFJ+d هn1yjmKw:fa n4_!F|w]^JM*ݿ: d!2DBupTg S÷6>ZVjٻ6%,!ۃ^βz u7+vM(TK` F*бjyki+;t; -umI)u-{DE@hQQZCQRrR<B\ U#|35_jW[vuYf/Eu s|1U 7_H֍+r8 e04nԔ1 U~w1Ӄ>,V ޚDKQuH5Nx0j1M 9ߙBo$ZgATLa~w^FGi@/!@#ZMpyL2tBFQߎWXnԂȉwJ)ٞ-1"j!R E(ZCCh-ӺWR  [8_"9Qϗzk_z9D 0e8"D^?_j s91`ĀYRH0)>D9wZ-Q\NOį{JUϗ69QD&=Gt{{zEa[mKWA1Zh{Gݦ o|A/! 4hf4rG+ܗ`^_5R08mxr޽ sř<)݋v<'jm>Hcc՝C5=?jNg ("Z3RuV }oۻIҒ`ly5!.Ύ "N?Ӿw^<|Q[އ÷RJCCҩF QgRnjn;7^ɵݛwaon?R9ZW UgqO>gaL 8bHDD-{V,$y{ii+ίm;?fiF(TKмykȷRR!0eo960Η:)ǟwn»,9R؛ۏ [Nss%?2vY:_!@'{}jDD 03S&@kopTpgشGA.~r|)܏^mDq#iF •U̗:fnMgKw.{۰ )ՋW̉Q~YX0 IKDDϲWgÖmpΰH[ξwG3W:R[7@?gTK vA!xgg `r^lC;^o/ 1.ML\vǬWn_8ULD1`eFDxAo{Ǚ7_UJZޘ~|A:I) J)g(u =/:)Qϭw~#(,fQәo`DLy;`sR#BJж) Vnu̢.]X>)Ջx%P vƁ?jEjLH՝B&/QKRwc| (iK=ڜ8_mjLQPPN e|KP6S͗Jw"9߉|rvp̝H˫EڞW-|){߫uyL""j.L3P!_0U Vr|^ΈCZӗ,Uxh(HÄ1`FLdbK LpU;_R8S| -| h[LwCp󥈈6mb@ ]I7TFpj*)-4zHQcNJ}ΗjBl[{:{:`BOiBv~gyk%#ˆB;_kfNy|]T_/~G̘i2AT=eL |)"M$|mB%Qŋy5P<^*)-HQ蕴yǑ7e45Η0h0"& Z Vj[M7l|¹מ?Q8_h` UGвWJ.8_KKQnLsj"`TpNT}K="! #b8R~Rcf4,7o sڵ|)"́T= !$D=fTJβWZ) KéhlcQcɱ`m|9Q3|-?d`!e3*ףgBwbĹNYU_%N|ꭻyrqQk WrR0 L{e)$d-t@kɾJHQ'ǀpgLΗ""j W'`J 4VCS вRp[?Ηx ((3R@ҐlRUjRԔ0CL7L{{Hi.!mk]Oy]ܶ22Q]c~i㻾xQőaTx}pKMC;[!e7_j8Azt/ko+cbA"":2 $*ۗΗri8U^L)V%R}A/ys~A/RQ4RRBCRyVHըYKJ(p:(0|Ty?N/-SPs%.].SS-L`~|{2j"|x?!)j ]hl>;V.:qjB T*|OaqjOK!"5:RBA)o8B8)(VD!zq2'̗85/}Y5)oԋË z9Ԃk  [͛/5ML{)Kp󥈈D~49%eخo(/%|zl[7Qɔϗ_yV1j~^KQ=9G]uqT0Rl#" }tĜərD)V8)!TLϾwZҭ=#mR;m{nŔc/l|q z>t÷ތ9z93CJH'ZAb5e!& | Vm7_J0& sl  IDATTjjxg:QhbaQV=-{Zۅ۾WL9TY3&&.]q/^Nm`j~|QVD8o h]SqM)`?],}.5bAX0NESW^0#0 R,bUJ9a7Wʹ];TPJR1Ε"1ئ/9QKQ=TH9}B uJ}Zu\,KsE~S49(oۿ̎δW~fN{8KzQDs6M6_sț/ųQ-gZeoyƷ|wwيqUTQCA?T2dDa .]v*`ꎽN0n~|{׾R($7CS&B hBu6meaCJ/􂩿~JB)8__8S{L(|Mز 1wV=oxym-{jKnwZDO(ZyDJ׃^pК-{ϗ3A/g&N Ηzwכ;7Ulp-'\P[J_l٫\AUGD+' dm|{G]Qn7!}pK F)VHGжN0\߻ĥmW} O|t7"/ z)DD :2 a4̲IRΕ4_S)oNh8_V5| < _Px,mkKϘbb^ %PZ.9m{K[z^ M߲?SBb6gJ\ m|};T_؞Gȷӯga7^Hc Љ68C*Tm|D:dD8a #j0;x޽ c"\I頗DDԲə% Jh!PiU_j„1a{#jY\U?S r |){xjd2$RuR ZR-U* Vz?"\89~ |O9tGٚG ͗zcxcA/B"]X}m4oԸ41a1ư.cs!tݓ !C  |՚i{<- R ҭ~R˜bVB%Y!ETks+{j ǑwC&mn>t÷6>*T( #)#6Ƙ܃v*)6> Dm|DDu710%RBBW-Ue*ZR %Rlϣ LQI ᠗0ϗJn aIP (Η2NECW-RDD@ ÀUABAH'dRZTLUj+ SL 6zԗ,( /b5O0``^K}׀osdqQ}7X33\UJ)aC _-%/POBQ1'rCzϗ( {:{:`BDy)즬:_MQUUS0/eo;KO<"ZŹ=p[ }z]K,A4%j]bnwdaP]17_c؏9 z3|В]I]I9F?CFI  [_T=&U F ^azBJ+d h٘[ 딸]ۃ$4Ԉ) z9|1g,:杻Z:,f;J_\$.S LN >`n`j~<C&~~s V@ jx 1/)vNWm|GAXi 8n^N HZI!}m{n+vΌ'ܖ;lwع TP|){ juprl|)܏W>ΉfRJy0^€Ktԉ'֞/!U!\orBCPҀi8(n_ tk.=Psjq\6%T$N?w}?WqB2{EQ2}01|A/Z\RLӑF /F/uXYQg0l[A/c7E8}Q`7 " &MLCJL{ޙ 'S%wm˓X1 :w쒡NwֽNPkGcA/aYeC9RwuBCCC8أ e=o`xcx퍠C-$)&0 _B<)q(`KjĂ MFD$T<55Ru$!$4!Jk7RJ+/PR6?vS tmDT_`k{~AgQ &N'C-F/D7d()oN@DDBG Ɔ\"fFMٽ0*)CHeO=Cbk{_¥GDqA<ٳgO㩧 zYD 7|-?Ľz)Ԥ?#_ox7`OGiz>;6f]9|kt` jٯex#Džs=ߙ;';:oй |șu-ٳCCCٳgqqP$jn7xvHyu~g:dэR֣F<[ jt$mhXlL!?݆YhH;=Z(1S!BB,?&ǝfg~DxO{~Kn.SOٳg199ntwwZ7#"b ~}@^bq~6t!oПFJ+d BLl|GA8` DD"%QUE` E:HY,gPP!LX- A\R1%m*^uk_E+޷>}Of0EBju`j%-H_.[mzGwV8<].𵝝81`b笪Z N0S LmHQѪTc0"j l1=B׿'.ŠP5$B)5a EQ>(jUnhh$Ξ=ӧO Zl| ֯Hy` Sf6e_#ʩ& suk)yyml쌭؞W ` E:H$Da*) 7_FJIܿ'aOaO|DS7=RO|)4oeH@ʡ(B\j)e-W$nD:Tc0"j )*W (4\@NO 9:{^xٳ/E)R\ oԉK\WhKZ'` E:HYLJߌδ UOpP9U8%§JUX/e' gU+|)\` h6>RZ (Ηחl`jS̗rQJH5) |QN$! \}Y8&!% i0 Z4 " TD*%>(~СC8rqY<ݐM{:o>Œ)jh]%hb"p_>a z))Źdm= ܺhX!r]( ~*/U~f+M] Ճa5'^KfX!~UH rR/ Q%BAX!E:H5HI'hV*QX Y%W?'EB1'V/EU3ϗb ~RΗ VKym|ڃ)R@֊TL{S)i8_ pʹGada3ZLDjR^XEԪq[O pK?[RrS\DWVyp&=}A-"eYeKEzlLN6O"U$eNJ753HLz3[3 lE呺=l( AG}?~ ntB7_Ӈ_0"z43ېRotAluSZR*K~ǽ{sDdGyOAmd_jч> 5!α_CURu""3WB?J)7LSj^0ѽov={~uWpb1LNN"{{0 _?e0E"9X_R!1jⴰeW`CaIDD\٫)<{/ltFm/WUoy{S\㛛+_]iԻq;V<_KqepGDQ*RIa;R%S[MKk|BU└(h;µ=ƾ K$DqozzSSS^F?7xg> 5)`=]OZvO ͛"#uP엢V_CO/%fϧՃYHFD 8ZEG>vmA y*TJ P;H( /)PˮGD0x}3>>x~[MLQ8M{\HkqSvKNLN h~yCNHUY3- ¶`[M|tR;'a~QN鍜Rt }Rz6j/ծp0C1wBP쓂,y 'eeٗ6K*|nɞ ɨ˗/_ZF!ux T~)K#m ە}MvHU;'?2i:SRI)0-eK l1K#U/E"KEQETu엢~i~ K'>qBX =RRRrr=O;I _?| *=0._X,"jf#ȣc޾SׄT9) 9(2%[( Q]u5}z'N !TUz 4eopBR5_2-X;)e[9SS85%31MT^5jqiT9U=엢VU/E/5]_^_ʧ""j jm2{40vJ7VBRJH!9pE-N+|nzUW$D)j#훔틞}'-LI'lcOk|>E-Qc U#3U STIT^)!TGJQcO7/E-h?8~)֎R""j<쐪8MR Q^)~ҏnSF&۵yD6|ٿ:KҲJ._9KQx ?p;;v"e@AANQvH;hHՐ6>zɽ TN(%H%s \kDE`*077x<x{8*=~L{9Rר Ry0I9R׮!H65 =Pe u8 hWC'>qg[s+|Wr η6:xeUǶ"jv엢~V]#"@{8qB0eltKمTn~)k5'j_(&''/E-RtnWn~)""jL j—LÀe8ai,)6/ *gzʝ2K&lx5|o3j@pL@,$G-K_3|m_e]$R)""F:~͛Qe^)\K%?m=Qcs˗/E-_k:F=NjNZK4Қba'_fufWx!l;?gzzzc!#H`nnX GF?G;Xe9!uH;!UNq\Х\G=0\T}"7R§4MP5 C՝ǚAU u jq}Vo\Fx/h4Z `llX_jO>U$~V_Z 0eh7]TBQM뇪VSQ3P媿V/=yjXp}S2>aknM^gMJ$t"yo@ UB+נjLB@J XRR@ ='O1"O|f""H_Χ1<_'""*ŕ=f&Vo(m]roU|^zS5'8zk|/_.~q~#7F^[__¯~wH&^4ʶr> Q~+ `^V3nhNŴTz)W_GD@c='η()6SP |7DM=Q~˗/_Hali;^5oLalPLs#ron0U1EBUoBQT/rRּ_*$_T}a ED@cYsqdT}|] \\-Qx.zzzDsssC<GOOzzz=Ql1-~(jv)LA< )Gjڇ@0"R>󯿊4lӄmLùoLL4`}˄e9qo~D"LLL`xxsssG# yYffD&Q%׃ CQtsT0lH5綾$@&dT! EI >ۑ闺>[Iu<䵉5ԼNw>H){XznCtH.\aOT[4ۡ&P%##Qzgsh2 IDAT?M/Uo> ܩ&)(]w'/]2`al[4|U?gJ@*Ҡi 8t}ܧ8!AU?U/̹`0jDDHՑo?PU^EO\ipS:4! RWz(+[qoj,4~}'bp1F,C,c0E-K_3^~o1N/G{{'6! EQ*NNJcmmTi aN8en0%`YB|u `~kHmU= qRCUgZ|дΪ=?vHՑ3-|2T#jPT!Tۆt!4aC:e E;.bE111h4Z 8"ϩ_:f/ qZ*;wf O*| BntuA_1wӠ( MS*t]A0MKK ܾ}w.bmmTÐPʲ n ~@D&B:Dޫ7!?s+>P$""Ru~k? B))5(BBj:Z\ӠjBנyTKHHSSS5a{}4r~oiHn% ]]p)Bta[f0 ł)4݋#8z8N|u69ܾ=T*u! Wmpe>tv!绌D|U߳0?z\ԡ E8"5''5BHBNXo(~IQK`KH!@==q)|Aض,--buL3 & )u|n!y~3 `p Νffn`vYD6iڅ+ ۖ4!tw-7{cUny5>Q=a U_\.FJ **b(BQ7s5AoVQ\ϣzKb1qǙR󵣷9@Z++w|d ]hkB!'Nϻ`Ky6>i܇C\zKX_7 EmB ۏ|p&}B,_A#Ru߁* U)J 7%`JN 2"vF}fEu]s)wR~),^B2 U c'`Ywq-%ͦ >0<|w%go z8zt0?lOJB< ]ر!ɟ^GDDL3xa iېQٖ2YrLX 4AudyQT"0<<\엚XDUs yYRhkl[*_֭;X[KA ]tݙ:}z0j+ݻ>,~">G аI,-p:ܹPOȍ* l헲)]`EDDuRu(< %t˶ R΄:WB@h+PmAxc 3wRԊyY<06Y]tD7oce%\΀χB_3uW^űc71:$z{{_%$VaR*\dFUqI=냮 ݹR>;uMDDtjn(a7&31eLL wbʲ`l)!U _/~ a( arrxۃUGG8u!Wtt{wTp=@QUS{03wŋ8!|I)`y9[wN>gk;)GKDD? ęHζqslQg\]+YݳH$7z5H$ ;,)jvn0k|KK@UhoC"ݻ+X_ò$ ~s}\~pdO?Y?>)X_ׁ,Vp2O8sf ""j& 󯿎3F(%l R=R2aLfRMMF>{/F>Qյz9t:sbW/^]E_2>aRw1?+W>۫=ӧ3]56R 7^MYJ9i)vC)fXǦ*Fx/ݞW񩈪]`Z3=ےk| vkk),-"6aQ׏04tl]s'7qU,-$|ɪQ1jP71_;Wn0eۀ SͶL'-dlcS{eaLLLKqZAiTdV CJTYB8W jMGmׯ[~I u:nܸ>tZ?NIm@D)Qm*LI K{}DQ+rLQ+9Hˬ񩪎@T* ð!Q  *hotT)!17'5 #0M7qp5׃g'ET ljCf@ <xסlJNK B*e3jtOq=hKQryOufsH20 MsV@*ma- ,'?~*R) 0xg$j6#Q0j2_.LK=P\㓰\aZjcb*Iy}TڇҞ(RԪ_JӜZ0R*~͓ я׳88N>M R),c}@ Ѓ+YH@Y0jBg"|7/E '*i^v!<{!ܳ755T ,ˆ&Rmm:~ݳ ыx꩏ĉWS;UtuYhkKxvV'~"j ^KSB;T6i{jpiuyDTS\Vs6ߑ#2sUE1BgRdrGp1!WN>h KKIH©S{zVF&;z} "R- J&0MR=QDSk|\㣦Wר R:NNHBQ>&Fw{mHtX_7 R+H&MA qk{DM»f/>FI\ @H&W[s#A""(b1<ξiClu!j|m+8sa|tڄK|yi | D EB@:< 'ZLy_r}ix}5 x<(bg{eu G=JauO 4 X^pBy0jQRB PƆ/^K繞G~)엢,Rhuuݷ lG6 d2@*ea}=2 o %j( {.o^J&JՂ5x}"LMLL_ZN3Kի x'OAJ,JRS`*DzڐdphoD>d@:-LX[3`W #+NH5RTt&ץReF#5 QD]+W.cT !sViR)>8Q"j nA68 AQ/1"2d 8w::)\sɤLF@hkKx}\ )f@7Oc>1"j[Kq* _ĉPU?r97Hmd2< y}T O1HюD"o}};qZjOF_|AQD"1"2[8{$:::aN \yO"HmDA -OAD@L$?K3<,NKÝzKvaaxxP%HdN(umJTԜ^ODkso }PDH$H$h4X,X,xo&lV"2`}G'jJRDMX3E\FjGD[rh4Z\G#CB:aI! BN`a6 )LF&c#@hRJH0"j NG"8Z4oG_ "]k|xLMNNbttH> |ǖUnt:Ǐ7ofa٬%IΝ[B_E^co^*RT1#~+N/x}qJ F~l/ū?U@(x12dz]ot=#Gi>`T2i gUsT~EQ>U'*Fz[ onxDTInTꏪv@O@:B+z[E " 2`$r9d&VVtR\&gJIGU7կ`p?71O=]s(Q-l^cQ})]ϳ$,kQ{BWW'S0 | ׳' \< aQ0rK\(>P1 _P|'"Ri4枨|Q.) pa0PH&sH&s~z5a@C (f@ sдNvuAׁ@@e XH&0 cU )"":~)ݩjG]Dƶ-hEQa(R)3""ŕ="":~){mg3jlۄ>Uu&Pʲ$Y1Qخ_j||Ք!zvb&~QaHd&z>*QUpeK".*;ABèzډmATHY>!["1Q Ø_*{{0jH+W1ʫM"V #٪'*}D l{#iPR*mtI dyIDDT5\#""j`nTh?.jwWVc}~G{OׇDoA U|~h@'B(RBQc !ʶ%,K 7 Op}DDuQG<gۥW^Eʇ|~0}}5?~{zz;XXX߿4 PU <  )F9@B(9iO?&?i)""&KqLOOFGGD>!wUo'1сU?Wg=ϲng YC*A.@(S9UŏR) J&!4H_ JLT?[O Cs^a0"""j2nT4E,+ƸGe6d6l*Ʒy=o?A}ݏ`J7n,kB д~zRe2|PU0%@JtIIpU^*A1"""jRn5>KLGmJKmzN 'p]ry$\cϽ R˰e@>?ߏ@w>KRP a¶rc}϶Q]zS1䏼>Qb EDDJJ)/Ł:_zaR]]P@.g-S@&s#I&yR-]'WBR'Q pk| ZSoTy5S6B烬< 2uB)!;NNK *z&sHBC@ʄi-KڗT o}*V2")""DDʂx<5rU̦RX5]TS@$/aT,.){r_pB)vܞ&'))M:FRKsgD( ðϛeP`@WaQ0"""jAj]YۉƷU jVpR!AtU9׃.ܼ)%yjv]]~wV_:;`d)esx/:D)"""/5559K5KZ uDz+mHn$n$^EOy/a~dDܝ8uj#Z^N"ۘ\r7S\Ӵ25@!e,//'އ#H$rH&,D7=w==QDD@ʸk|ǽ>ХW^t * /DWsqbRj{W"3Bp|:@ +9=B;ܢt206|`}}'` 5$iضR\jc~I5蕫tT'Ho[ԭbUj0b_j'BT%45LS @Y(uLT FUܐ p)r)j~NO)sP72{.<DZc\#"@]D5WA ?7Ja6}}eWۊW`;cR7B),e!ߘr 5Jxt& IDAT_W{G4eި`!NGy0K̉jjs~VUzJ]sv:=po`9r׻#(8!{n0>Pbee oF.JhRGst!RDD5@RZz;DĪa_];|TB6 a\!nތ#Xm†e >@Q4h#lz{AUu,//c~&!ߙ q""@r/U*'jy{U~)!Ag?²$|%-qDZ8o`ee+fSm S TUэ++˘D"2e~?pH?~aRDDDt O%WuPV ck|RcMB )!{sgǎ='Y,/ J"0r0M>>>P; *r 汸Db /aԹs 0"""Cq{6_;XիTOAU_J(=_w1?=8r$BaXf ryH ZR`e$IضPY 'zDDԲHѡk|W{q([k5 6s_JnYG&3e,.)8n|mCtdIdid2YR)$H&0 . 9AToo?=6Qb EDDD_ʽ1蕫ZիvOAͦRM/eY}MKm=]F.Dׯ$LӂiZ0 iAJ ޏNDիa!Z)"""8_jjj sssb\㫲_VyS]_i|{C)۾7a,!]i:_W@U[w7F1DD-UVk|엪yuP_>G>4OL~~k|cccP Ѩk"YՋ0>] najqèRn0u-]C{zn<0RDDDTp엪kOAR:-BS"""` EDDD5~^#~/EDDD@<]Gk{Yk Ti}}~~G "j)""""l/599~=ʫ;~}sOTt5P=Qjxmq*RDDDT sn( arrxۃձKtT8Ůj/7tWA̦Rxmq+Rp'z>ZWn=R/U.z*&joT]\#""2RDDDTW5>KmoU] v~)wRDDDÕ="""Kn0_ʱyU/¥['/5>""յH$H$h4X,V_^8c|x"'yj6ªayNb715:!Qsc EDDD Rt{*tRDDDŕ="""jVXʫ?q0j* 7DW NGDDԜHQ Ø(KbFP.Uu2 M/|{# Qr077X,x<4k|xUzshHQG<o~' ROW:~)""=5f闊F.Q {>鹶 ܰh'""":<Qs59O6Db||FE^'aTs:1?Z'ek|hXxQD"r+V,T9fS)<׷/5ch~ Cs^1"""m^Vny.j_jcRItqZ)"""jI_RuNX^yQ 鎎]cT}xɷG>Q` EDDD- u:_juz^_ING5 wo?("b EDDD~)wRx{^sMj{^㻅S7O5 {jQvOOf\kn_K0?U""R 6)헚.Sۭ'j3Ue d#@Q<;ZzZO$Pş mADHm#cbbކx<wzm'P4@U!P5@U8)N(| p~NJl˹/DߒR v6DD-.6KPY+rz9 rB#NOp?(~,~*VXSTBP5p~GDDE"(a<_Tt 2U;! }oBEJ青)J!r?SJ&ՙm, h|eRO]cEDDk{/ߨs ]wB(UI87wŮx+ݕm1$K' 侪}N4HU>s.vl0L@U#Y5 ~xz+RDDDD;DbX}`%Wl | PP@B(Q@IAv Ss$R }STᱦA|΄CQuHM-tB(l s&1RƗBS[K1""z@h xl=t5/ssssb;Ԫe:?Aev!p A;/~.DJFmPů>@;Q>+P:UԴ}@9)v&]oTGDD Qa41>>^-g.M@aljЩmVm6RzniSnoTsB}Yx)ݙN'Jx~)U,0vF"":0RDDDD[ 癛dy~U*J)BYwDFPeB(,<6Q,\8YSB)JŹR|n(Qe2(>XSЄ>;eWu?RTC x<QE"JnUu2HӁ@釂R%OSIdi87:r*)!B:@QU(UsnBUUhU _W! WRB@–m`+T 蔛A@J Pu_q霒QkNi{̦RX5=;RDDDԲϚ&2笊RI Po DxFQ!i:EF) 7KX P:C4@!uP5MPGMP; 4>CT@y#L6G4ae-\yN7\ 9T0iP|缎TUH@PB!`m X_w)""jd %MMM(XU*#g0_b|!'Z\Ռ v'(r'OW U29 ߸zm:SUZu*\pn>?C=޹]QnYz4]A^Q9CAH ? Aҩ$uR)< ˀmFȅ6S!Ȁ%B U B՜?^ XLq)"""j):Kx¥ˈmC8å] V+*>6\Q>') !T0d Q>/ 5 ځ@!:qP$G}B9 @& a/DoG8.2V+dM2sPtK  (2i )3IuYG@zΦRMLQa EDDD-asOVWKZVdMdMd1~ _3N~U6A%OYʤ5v':5t:AU5FX̮aCG>53B`q_jb|vBhX!*%@Cx2 LuO0"""V힨D\+nu:"=mek|uLe*Z L+AٸbmB,^|a"*s§0*Biaޞ(,:0׏?=Wk`ye |^wޟ\Iۆ6T!C|>( !%e'w^RDDHHQڼW\&rsV1*헪5>#Ht7)BabFܼLw:*QT.vt?LH $owa?>>{Uuc7_xk\H9*PUZ .RROu@Z=畝=r/ezV z i:y{ݩ ! -Ӓ,Y./O<~?{?z !IC'?UPU4 Z0R 2p{_5 ~)"")"""jHx^Q_>Ʒ_jZ妥.:em EJ(byҝr ˅(Q6`ZNgULup 1}>R$d*LR5U Z㒶aDZ:Y_@J畊=w4E|!Q0N\k{OnDqF5oGOnz/ۋԪ< y맬./V4M0M״s9mOdY߅KJ&׾dE􌙙 N5fn!X ^3FzEZD5> y׽O~G~=vC(7'ʥUX]"6M0-\qsAͯVڗ&/g} ef}{套^jQ>,]FAU4;k;9~Sc= `NxQa`Fա8N H>wrè"|Ǟ4^a(Q *Ai8kg~ }wK&tm癬 "]J7DDDkuNfdOR5X]1p]0- 8VUK 8ي`H؛ŵo|wZw$2dOʲ9u OW~W*q^WODD:Jtnމl?zY)ys^ԭ8I) n{ܫY.Հ3ߺ7{X[ebq7¨`Va!Q4¨T|p6?K֖\#y]+:.~㰲սvJW*)=YdI'h@JDDD2U=ozz:CNMMpRgvB=$&B8jQ1B$7dO .GRV X+A.GQ+q<'aHlqϳ>/%{@JD@JDDD2K;Ql旗86>ʩ#qc:r( /4FɇmÇ=|X[^>xO{9s|#~J&ʑT})>DXDM^ۉY7oc>4!ӏl>1Ƭc0{NFF! 02ʭ[M>Y.InI9œG-/+2d;aHYo}GQKM^;5e}B DDDds罰KtUN>nH*w<.msՏw KC6,r(22}܌KށORU)RZ+תP)[RjJQ`q>Ss_m)I)~ډ:sUq/+w _' ,ŒcgVcIã+^c>)}8Kwٻ}So})s<R")IU?DmL/Q7C~r8VvAnz!eaZiaXKf*sj|5^9Feد'TJ}_/0y%*q >}sr٬7LG.@JDDDRNT/^k;y.8FD6ec6f>_g*W}N%2_]ZS0q1=* *Cc(85?$»YʾTGkL1嬏!"]Bn0sccLG/8`T֠^ZZVZ%U)Az7Mn KNES %"""{o;Q[9w>½,z9l!|8&l qMZi?5fORrm5UkUJji1^Vŏ#у02{bо)ك~ Gz+KGIUa.ÈFU°l\/zD I[K@Y!oZ IDAT%Fj1) M ^ĝzk| H;R"""kWaxr9,L ;Q( c!{5ڗk_ACImW^] nZIͧ.GƧ`JDd(]\;}tQU=ô1nu]0'Yn(t a`vRݿqv@^zЯWEreQ #̾m TyFDP %"""0??ٳg[k=]OTq`d ò9/8n~@ }懂#:>>SV.BDi ^{)@JDDDU=ozz:C3^gZqL׉Ðز8^qĵ:;RӇG8w/u\L8k m yw5"cwEGڗ_Le} DDD.333ٙsBgG"aa'?Cx<{^ߪƧ}] HnHA_kXApUKYxpyϜ{Dz>t R"""2h;Q^Kt;j Fgd GRޗݾ/5}dTR品'}ZzJE yi%7!n>_brS'"G NVz^{_y]R3חu[j+4j{>QS>0mc>1X3ܗ-W>mIo(P %""2y'j^߼/5}D5-vr) Z_'oYrfJhc6jjƎE4& H.ip#\M""BȀ䝨Ͷۗ#@Rkz_&;R908!%LrR{ 8ǵ\(9`j9$t DDD杨A뗪^7j_ڗ"pmW^`1m#``֧ CR{m](p4(y XfڗFq*k[Ra!1mc[D9lnhn~(gM,TuO%Fħ)jiӎ(s[D r=o3U1Ta}_*"E1DQ1ea&$ ގ:y_38T~Ƨ@JDHzzYabc8&#2;ٜ3ciQ'vdʁTSs_j k|7J/"IHNԽ^^hSk|Ly(( b&F'7F d vU\*z`ߠK]XG)#ډڽ^^GMf*.U6S133]RUݵ/}c0(4 Àf5~V'/W3hRy1D$# DDDzvza AS3B84]br Z[+TeȔvD)5??ٳg[;ڗjU"(" C(4 L4 8ڳvzs՝Rs<RumN!R"""=fNG׻RӇG8w~_*nܐ40ؑn]&;8E}A[d<0JO)!ډ;UV5̍>=bɏ[RQܔ2 64zp7 ͳ֬[0]<30s DDDz@NӧDݧ3^}#;9~k| )#y=˴L08#e ƎTU_?9׽AuHOv9R%28Ht9 qsTR|L2m0T2`J5>/ DDDRz^TՓmU㛯푵R)7j?0i_ıԞ^sU0%"@JDDQOVTՓNiߗ>2ʱÙߗ~8x&Tc?s\?ǎLEU:ER"i DDD@;QAU=Հ3ܾTyL{Bqu 1^K¹5UK=>R"""iffF;Q]̹W> K<, ؎jBlq,Jd$ͪ(4Ug|A5>I)]NTw9sUݎLl/Z)6mN.Gl@F=q!,ӢaJݴtkU`si}O+D)yΞ=\;Qٛxt;J2y_Y`*4q1mQ aɠ{AU _~# fo}<fp2% DDDtyk|XvH9Bqk &GXutԞfUo-Nd}E872> R"""[ؼz^PUORw})5*b8.'?Tv*k|;'R44~(QiW.|'=l@5F?()=d}" DDDh''ݬƷ}ZLryy" V*e(s=!xToG׽P"KHpNyIU=`ƷTy줮g9 C8K-))uVev/FH񒘪z""S %""M;Qc%U.U]l/a! yCXvxQC#|VoҮꝜKQz""@ ,zs//#ɖRC3>7xn#"fum0ss,]y/pҮLvӗ{)8 zϩD]R#EgO1{?F.a,ۦ)W+nqz>}K֐[,|NH7P %""CޤjMNLN=zScP2LV𣈡|㬏|ߺQ""CAJvMU=;*Kef!00 ;a+'{ã㸶71޷ni\D{(z^oSUORiC+c4<\+_J\u9v'ƎL,UDD)K={ӧDU/.iC.p<0DvGry;+'""@JDDvzҗVav.mS HO-VŁ#.1_ >=OKYꉈ?R""7fff'Μ{5#ou lr^vTRJ=-pOC/_WҬM,'"2HHNTxHI?*00T4MjZ?DvX?[+lNZ5f*Y Ҭp.G'"HHNT(KK`Q.rF@Lqho}|5`FLMxSㅮ Ҭ=Jjb-UDD)9ډ_gν!s?V8n0 ZP19ُz|585oR<'_V.|'=LDDR@JDDzyKU=[Kຐa:9ܜqZF Q|m5Tavwo0R""D?U/kP(89,ԣj`yC?縼)_RCR{z""Gt5zҷV 灛KrmE1'4 E»;ގڬ/^;5^`roK Jvz""It%QCU=[*! a;.\zR C|M4k|`jHgk|WHvz""Itzҷn߄Ɛyr;2-(DEPdl-KvK|gJJ/(fu|jRUOD(1??ٳgQb%U?}1usQD-Mq_,o۬K9~0}z'RyHQ %""S=op=>HjUVUrGlF#ܼ.kľTU)ގZxRz}@JDD2533 j@zYA3n߄9L$ C1=@Xq;JRiW2_>|)5 DD$ډlI 0qpl8 31<qoR+ݗ檞nG&R""wN> j'}VIUqp a) t*KxRGFk_z2M DDd_h'JTՓu#'iضia@=Ȳps9F `7sp[yζ5#S}oUDDItzt̨'}Z#`e>~Rqm޿_)gz 5` U@U=Y@JDD:F;Qzҗ>rp\,ƶm0$ C|u= ^훬޺[5}fo|XjWR{z""}@ns=O;QpܫYA$}zeQa.o}}>CmT73EUDDd#R""Dvf/^%Ro*k`ZŴm,B'"B\0pAɷܗ#E/e&:sf{~ ;z""AB;QݎSZ)ٍjQa>ae:9\˦~u-/ km&4zˇo'"'Hٳvdkgν!s/*.7¨mcZ&au("0 0-lŵ]j[d}]iW뜠$>:9v]Kp+?Ia"")R""'n'}Z%IQ϶L0}0  >K7>lz pq9YKwo0ɜ)o333 dWN}y >ȃ7iOaZ8EVomm(2GL=ߨm/D(d7Zww(>T+FVF!_'b0-lƌVZ0jEcUj_JU=R""rOډuxOٷ/BDvVJ܌^'cb0d<D=>8^aQ5k|KgI {kVNMv[I aHT€ش40  Яg}]mUo'}]-19Y/:0Wĸ`JU=@JDD6NS_+Ud7P4 80 n 3V#0VŘ+œ 'J0⹡ӗR;tR""];}(S'/xy{ ;ܾ ÷X)~@JDdi'JܕzyGl۪Ivoocq܌ |z( 0 8""7saԃV&Ɵ3(rLMwU(@JDdmMOOg{ XRc'5>K%|Vdx?IzdP0 #("ͨfeǘQaDTȃ;a{;jwKj|E^/% R""H;Qҍ6Jz055>ǁS D n.6JND!q{훐8p2 (jVMo="a{_ǎLΌfo})UDDGo?<DI;q%~_|{ɾjipoKa+D1m)/(No`&!481 &  5%(€O(0s6(ƈ>:= UNkKǸ檪'"2@H DI{wx*OQ/h+`(NFtvԪI [=qs0}춐y{*nTQPE!Wյ,_%0?##0dFMfM/$7zıԞ+{}wK=p8CDD)sډ^qq_{g}%n<>8joܗ*2:iFj5(nu RI굤8RVa[FR;bl뵾!2K/gR;^0H|\Ѹ=fDaF>_O(jm_ɞY՛X]Uo'Rky@Vkw+?:W`\R[)# DD(vf KlAnA$7yBl? b, , gx|[2ecYo\f0׼$O(7¨0dCFÇU=zƶv%rڪ=i}R5>>@JDDI/:wջ K*CaKw 0(Jޅ/lll'6<)~+yZ=WkMz F5 *l~\kɇ_(^8o " ه 7j{QFEP`hPj:]I3jߗ5Ua DDzL{=OATK;4* ʄ5~1nl uxnQb4*mmi%T'7T*PYKn u`4]AT?nE5x=*ե ގ:y>GX]RDDz)(7/*/?= "z0է5JN+Pn cz/A#@a8e'm;ժZr( Dg=In55vA{UOB^T|MYHF/0}iQ'Χw;j7U{ѾHS %"6N> J㧎+y?ŎS}yVcmdÏRz( _S~װ||2؝ #v]p֔eQN$#5nanN5'LB#j|xSKƠ{3|j}37nEōT#0X_TҮꝜKQUvҾ/d*߅ot[JD(b333ډ+ًTI?$}`eA 5 zu(@R)]c2M0$j4^c e4~3`t[QU/ď+?]T DDzt?%ڑ`j}RG[xaH'7BcF̒iuJHSCN2-`xVmO1j` {GD5Gw^|$k8L<ֹ12UϥH55>>Ѫ-]mǾ).2??ٳgDyq%T߾X8pabߧr#ܱ~7ϳ0K'J5 ɠysɲ)Nf51l swf 6|lny[Q~;*n{F=G:A׉Q[iR_^R""]HHNHSѿO }m?:Lm/Z_Xy>0qn >pr|l?qmqe_KB9'ٔ¶--Jޕ/)E^ i'T3xjޮXyFT]ף(~Qq BvCCR""OHƴ%r?B)bj|OQ呫A` 7j|=///vC=|ׯӥwY'/~}7&TL\3vC _Ɣ؝jTjs71 D$Ǟ>;ͯ^DR""KHF%7|[ C:Z}7q 5۷<0=q>2u2 ׮R^+QՈa7vTTy_7oCmHujfX܋7oB5A/BYVrGCX߈jrBjU=ͪNڗROD$[ DDY{=O;Q"}?yil>k; ŎR2cֿ5(8 z:n~䁇xA8rw>>`eeZjBXg}K0ycꮪQ ڌj|fTѨ :N}u7'_IQ^ջ}fOH6H;Q牬˿fff_+?'#8CLHSoTyj_KE^g|JwMq,~tc?zcG&Y%Vn}ZjB^#V(ɓ {)ø;Ts< 6{^7 ?6>v4zU̪z;iK5k|9܌qP0%"_Hz(uz^ۭ\E\$a3X6Ro-וJv(Y^pR!L!bldb~zZDeeZzFA@aHč>5P*jm܏ cA#je%8Ia?nyvUs= _~#u@ ,ט DD)ڼzH~vק>!گ}{4j|NR j@-\[[#0Gps9z^'5z= €( 0EGQAGak<$U Cd*%g;-HGzUVꪪNYV9f &`.)sO>H_S %"ډNݺ> G&^NNK};Kj|==/[R*aQbFf`6``XA#È؈F [xW<' &9\ջ𕟤}5&#GyP0%") DDR633(-D+ri"ťV0_RfO޹{ĶR=/'M/拄נZY߂+e(]'{R&:o>JB zq͸[NğoSDD:@HJ%vL#WV _c_jvn.}^g?eI&Xo>HP %"9{,(v6kK5ߍ});;RTӾTRdkhPj޽?e1 uTI)=j߉8}(yg׾ 붔tR NOQ=]I7yڗ:P %"ډڛoŷa_  :UkK"MtLaԉݎꗪNsC<_e1})=R %"rw@"]byU[g~þTu,K8j/x|p޸/UJh]Ԇ'\*`K=5 &о)DlvQ_XslӾI7W#i_JDdoH@;Q"r'jvڗ*fOR򠺹VRP(%"r/ DD^NȺnىګ#WV/%^ۼ/5˟ XX0YY1>HWR %"vD֭;Q{Ӿj\XORr?T-sOY%O>s劕DD)zvD6ꅝ>J0l$5>KIT=cQcaT0%"F 0:k_JDI'"}K;Q"7 jO-M ;R% ݐ/Ƨ}zmUӾ R"w%=ҵ:Ju4bxyǰq(AGfo}ՒnKU[ԓOpJ5>W D'7|o}YVxW7K5Nz#WVV JYXR"HH_h@"]B;Q}_$xƥݗ*R~YWH5:y>GbDo(zO-:‘IG6:Wv_j|LR=$0nGڗ~@JDzR{piQ" ډVilKc). }^ҾT?ڐ"KQ,<})Ѿ#R"s%5Duf0^s qƴ/%@wWQ]HR"OHHϘٳvDi']Zb&Rb`}_J5UvT7rbyhݔҾ"R"%=zGR5>SSUOT{}_KD'(633(-(MYKz/۶j|QUO T^@JDvDz^b_K_s_UӾԾSUO:+WHw?DlމR=O$ ?5>֧Z5avj|ڗʖRꁪzrR_‚}): D+h'Jd{KݾƧ}2>q,g=JjRUh_JDz)\Ny"|-og}4zS)(Gg˧ޤ4hSi_jJYUUD)h'Jdkw$xϧmðF0ן ,xKZDiW^8ڣ7{tg>0:! j|")R"T7 zCi_1`6TKAVRUo}WOR"R"o6QOV%;QS?d<^ :/լm/ZRow+?Ia|2l'"M Dk;Q qu2_oǾ#WVn/kIZY1/%"Q %" JdkݼЩ{5k|[Kƥ/wIӾdEtvD ;QJЩ\ܪ i_jo,UӶڗpm)R"._ (6YDOvR%ҿܗxTS{zRH')Ԩ')|Qnl/GI""l~~g055t>I,"Ԁ6d>'Ry O_Ja\X^6Z/,,ڗT(=NҮ)|b_Yڸ/լ `0U/vܷD$M DdO%;)|hߗzoپTlUt;JLmi_JDJDlAy N];t_U})Ud\bq劥})y`vD YS%/_Uvlw7hRɠj_W2|G@JDv(O=@%?D֬5k|ڗz0 ڼ/O\kܬ'"]NlK<[|[߾]zeK c}Nz#WVk_ U@U==`j|ӟ19yEGHEAUG#T{o}RCe|Xjz_:'N8q憘+f}4B DE<}߾+R OAVRj| c=Y;2ڳ&ӫIf,.`ĉ))+:}(;QQ%}i}^z*OQz_j5z/KQ\=Ld]s01QpDj|"Ң@Jd'(P2(R5>ǰgl5.ߗ֪[I׸v 5>K(X D܉*Ԭm/:V}n]O{HJn39k_JDH Dll2J>iD3sur0l$5AޗRUOd5}su[Jd) 333ډdYfߟDzDBƗž_,h_JU=y_UD Dy"B=e/M5>~_jhPjRUOvR?&"@Hٳ?{#}y9Ե/d7)QKI|/J!k3v~Lx @" X b \דlm2^ǒm)"-)}}q_utUwuwUsSEY… !B(7FԀҹRQnU=$Z_>R =QoH3>_/eL2z7ŪRh!鉒DOF/HWގxa/KR__k|Tk|~ܓ$ɟƀ~)J/ /)`HQ4?ʕ7jt6#F˝%I5AK5/U>s0__5>`H GOF/h~m-,8[~ R_xƗrJy _*Ϋzo}( xBwfZ~L+PDaTLANs-@5>/e/Ū=엚/pR@05eZTRܩ6KK_JZҵkxaH0c~tnLӏ{}M/Hy1!utQNHiiiIϩ"g.~L&t:t:_o_zJb-W z_?vk|'N*{GyH])٩!zK_()N+رc~HN=/xk+8QHPAF&(ʼnit*ɇtߕ|#kzwch@HKD п_kT\NtFɓOhllB>zB.XC2Ͽ˗_>[k( M omE IDAT/%^;j(Ū^H]\)#ܛ~) zR@>*S:qMMa#V:7uz=y($ۚ+W^8SV!T xeZJw8aVXK&{ e/gz?^{ǔd5=}BN=SӪTZ__֦wwW?ø0bBIQz[|cߤ5ѷ~GT?]mKm>8P(Fw…F‚Y"@ #+:q!=i=ieymmmhkkFU*eWGt^0(=vgfL}%Ii+&ċzԃW>k_xw7.\]F0`R?W466q=i=Ïu]hss]*jr]WWkԇ4j(}vgfI/r+׷`wZ}P?Q@  `5>`0Cz~_ibbBcc:}zY?>-mlkssM[V \<+aGZ3 ؋g~_*oR}[{[z^}v~ܻ'޻/3e)Cèhb&''f>l6MU*(?(nw#'PAȅ_߫Oߝn z'tG0R!8'u}-kggG6¨Zj"۶庮ՊJh'P4D:mE/ȝ%9үt% …Os:>ĉjZָTU*UYRJrbq'껃!׳i( @ _;U=aGpnU= >@ 8/ӧgя1ݿWT.!TRQRVZi Jb:Q% MC9ADxtgf'_{cR7ŪOΟ?ϴpDR@y_֭%}DǴ7|C[[VV \.\.5¨ZjR($IO?9=F|0Lz: e k|6ٓ3=z@]R@Boz75=}Bwᆬz*JTJ*˪Tʪr۶ӟ?9}5{aї <CS5ҴƗKizU=`ҥK.\C G?zI?}[O?]PT*wT.U*U,nXiU*nMɶm]UYs?ZT!ųk/mjaz@~9---ʕ+KD gC޽Z__ζ6bq[R@?l&|B_-b* k/5ik|ʥz'U= RY)bm=)j66ֵuU*e}ONmzNDi9p ]м;yw>cn<k_x騘xu'?z u~~ 闒D&0tzodYy.\*rc Q3oHEnbRM}@ vRHahiiI.\zS=8K}[3IH@~/~ƴT~^~س~)G0F 3;;%-,,hvvPc'{`@DI--ߖ I%MKJ/d;<[[|c__ٞ}׾bn @<YBKKK=K.춀~HԩMI%e俜,ǒزSvYr-ʣň(tH 'f_n2mkzўڣ!:n;BKŞQ6|YֿT30ꁤeky%RN;r)9ie3tRN։ ;3K?[ ++6VFK;wNKKKv>, R!VzW|833+LDI--ߖQ߬5l**m8JeSR<ۓ+WGr~k+C03\6ytgfWs^Sw+li$vRl~`H@EDI[[tDY%;m¨%^}*H;RNJL^̘12ycY=>3_̝`5>/kO _o'k>\ v[ ZtH@ #*(}Qޑ4.+*W%;U/-ϥ䌥RҒgr楦6ersRY*hljMm}K-V$Rfgguҥ~)DLH!ɨN" Dv 6쑗՘jY2J)dydeQf:vKlwMFUJ*Tu|w^Nk|O @   5L>@ 0aR鐒gX Iա DI[[tOT9^J#Y)KزҖ䨥'ʬe9sgaTɨVf)FTYfY^ޓ~)z~)/"B$vH=Þ)BBEe$-#(acJY(}ϑ<۫OFam0j\cqeRRiʖ:J*U(èjDG@/ ~)$R8 R! DI싺-&iZ^Ns*ʒel)-'v~8rMj,7\:vU;+[Y/˛~oK;ok-f2*x{b@ AVB/f=OJ^.iIޘL, MelWQm)(*XnB츜fW6ʪaTu"=$TbS0k|!vXC,H;3QجI 6wF=$:)F90*Q?eϤg/*+x~RTT\WV`K;mkmWmu=n?PĄ k|sssQu= R󌤅Q~!/j\2aTƟҞdl1rʦʤfˍ+TݪE6JTZ-^Vm*=,Vh( * 5+WܹsB X8^7j=HZ%I RjQ暞ͳye[ʤK6Xn\VefYVVieG'},;BvB\H!r]ף? 1???>ݒFBҎcjvF0ʮQEτQT_bn;v=(dUlJdFQ?RTu"}P!/ ~)RHpP7 z%$Mjw(/o ^L_T6S6W.3\zLZU\QVխH"(/lvR_B+x\)%SQR¨Jb9%egKQ=YODeʦʤsJY)U6nUTݬQTeZY啒](胗Shek|Kӹs\)t+]QF¨&$Ԝrkz-aT+%rʦrʦ5=f]WT(^QeD}L7>1\[XX"k|V@-,,0:ߖe;¨^1aԤ0*+<FYJF9<Fm/*)+K嵒J%W*l{;T/0 d~-gQ 0k|ϟoh"L!tۮ(#iaOOCS0*̚:Ӎl*#䩼VTiZQ?zZꗗ~)atR)D.,uڵ_()aTZqATxM/ gslèTFtVTs2VRyrQ%>R$_%S .]-,,ʕ+S )DnvvVϟo98:??iH_~*JJ^çcjQu%,ɜI/IfMτQ#N)5='+1ٞԘFY)22NV^SuzY*+eUW+r-='kQ0Rf \p!CCH!6]\\lѡF/ʕ>ͼ0j~1Q0ʱUL0ʑl˟JY0*WrUݪ^VerY岼G=i, muXpĀ2grΝ;7)lKQ*(#ikzkS3FY3?aTNɱUt*#誶6è*cQ4+li$BF03@H!RI~h-,,4?w qߍ&-ISj ΨFT#2a(eQi'+oU*TU)3^Dw &b\㛟o;@9"377---yp siVGѝ5I嗘'l2J?2]Q험[%Ǭ)ܝUU6*UYR,Qpy]ϧ[Ϣ>1as5z>,R)/Fp:*x6>Ĭg0uI5jɨ'Q3r0ʶ%RmmmTYZUT^~)aBAB~)@ `.hI܊F%iU5=FWlJY^zIdY+%vd{ܝWzEF=}R KuSՂB Huй ?FHb΢*ɒ4fUdKc5:,Y-kz%[g9rqU۪vUۨZST%B0)DP(4wQ/dhI܊ɨ5II'{2(+OG[,է,G^SmfU͚UW2aδI`LK]v5>1A$)Jd_e(e{iIiB5=Y~ed{_۪]-7@m4]F>Pfè$IʟL>ٖaTļqƽFs-GZɝ$O[Q եKt9---ڵk-4^Rn~䖗I %\dT3_˳21e:d(3eXsjrrХS/%S .]-,,ʕ+Z\\GDEyGp0w%M~(Kջv?ʲ0ʮFƪQSJĐb@Y㛟go1!``"y#Y%w$U$Q5WQ`X6];'jYe,C_5 =F ` o&?wOtT~ Q%˱T7ʜQ{,גvn䮺rQ޹~+W/5D]߉掚a N@9K^7|LRc>ʄQ;5OޤO]C+BpC @_ M5tQEH*I:!*xV=3jYHy%Oގ+oۓɳ] >_ @;K &PI/(IaOȟJkW5WBER3R͒Wtxr7<%W:>MK3Rfڵk%Rzn(˃VdL95̊_vQ% OU'oǓ+zQZI#:P(h~~^ ZXXйsT(>4t@ @O ]%%|KҴQfUFY[&,ayҩhRso=~#feS%+{zf8è?掤1fUU[sQv,@ ! ?Vd&LGèzԘ2gk7U'Hު'M  Du_{~ nvvV.]jK]r~H8˗_0*iE_fnۭՋ=kטrU/2M0 0_mcoRpHPХKk|W\a/"Rd~m]Bԇ?IZՓ"ssSP騔vGI(UFxRICKeϬ$ bu733X#,)]s#Qu=s7((+EjR5SQ[*m}LOjA/SR@l/ ~MG-ITsB*Wjé]g֓TMN0xf]0u7z R=Lu;Q#Us:*|=IKF&*8 ,ɲg LGY9E9`Dv^?rOTW߇= 1LYvk|=hQ ڔ-)݁T|dT;ʕ'(љmԇKBABAZXX‚Ν;B%]F*.?xʨTlz(HUOF$ e+ϒ Q fggb:+{Z^F;vzF*\f^/M0@+$]R@5>z@ @˗_+iaä:vG:H6ĺFlKh(;Q`%̼T<^zZ;Rm99jrͨ@:<^x]g|+LI//0FzIgڅQ騽:(3 Va)1ox(O~R=] ~>QE $=Q& GXG ("FHFI^:W!MԮȼvz&rz0AoԛQ3 Rj}:FphRF0Z ~R:Ly^)WSRFCިUII:)i,c9T'*(Jj'@,ݪ.F}0PRq&QzU I>T=a)O nז9-/+ѐލ757w]׮ev"É+&% 0Q&ʒҁLUJx%Iz匦]=dU'Np6Ë@ 2W^u--ڣQNV3'gѡy; ʴ'C0 Rb7|A@ 0$nܸs羠뒤3QV%DtԘ&VNSQl>LHqv=o捖?znJ?ـ3yrqݫ~&#%aԸUto=Ztv3L[҇v]}vJ++6k| `/>DIF*trSW2>n]o=y=@ $.|Iǣ>Ѐtu;]a$ݼ(.V巀OuUϑ>]7ATg|g  L+Գ>WG}(@ HpOTz?^^RN%z !Sm5R ۷SKI_%gz Ѯ'*UWOEzCeI()7;{:_g+$szaUoC)aTVUG'{ց)_3)Ϭ}׿>[0 cUI tT=:0vJ? )Fʊ`5> q.^|cOTzCqQv2UPʭ_H0RC _ƍ_0x1MOT;KKgtDI*?:%?ʨYdnKdY)yHy;M<?Afoځ>߬/$իuE--a:JcϪUke7%~zsv|<`=ݞޜzLOo7*[[闺x>""dz] c:j]15è@ʲRuϑ呵+"3IKzT\ӻnkk"σ_S'$|BtTxU\ҒR3g:$G/U.״Rjiǎrbx9%3Ń3ځԫM9R3dYiIyJR )H;uE "$KUt>Z]ʡn߬/D#80z^/¨|˄0ʩ_ی<\Pu;j75%? F闊VEᄏgeEZL g7nVɷ6k|گ'kk'tF33ztTKԀeOT;7o~/ oIZWz)5WZZHg^k{> )+~Du_[KC @{U=ʨ9e:2T(.5LIzl[` z/U.״RGR$=T݂5>`7)bDQ,30*Xf<^01MMIf-VMk{ `THUTXp` hbe#Ϭ)4QoORڝY*peR34K6x^PJj-<7[e02|S>)7nƢ'ޒ0 Щ<1”5Ryi] . ~N`DyuZ9FPz:Y]"&?EU2sgwwTx:$2^b Lj_a"#diffnE}m/QG v(3NG힌0j騪g[ZtlP)P&l NwIs7c %PnI__Zԇ +{ qjg(IZUzGNGѠޖYݤw c.i+On0|WnƇC 瞨N>8+򓔌vC(H Υp+;cﳼu;0͔T/*xq%->66V_~7B:pTa(%'$cwlY/@뎒Zv44Q4!a)gN"{FMUMᲬ-.vRfLHa\z]>vF\j"` n]/x}Zsjl'+|PUk`%W ^x$>6R/>}A azy[~j_hb)OhvmXfA%ebv"DƍxDQztGRsGMGIz6}>AV3 uI;A}°DuB &?e u*4OGBMKrP*fdCc? |NVCzI~) &HIB;w'$(+t+K+c> =R|hSR^k%e>МH^bIF Dqf{a:$&i'tTpB"|SEjTO*XfP텙5>)$+{Ha[ Wj-銙/ vJIQcj/!k'̒tB҆x5[5p1df0%3#ѡ?j VW53Q]5>$ b_Wjf]d%|v^(OZ*Fi%ʘBmY3aT<\[5~~[R` nG=ի鰇QLG@ʖHRÅ?jJ%M5 Rp*>f@4aˠ_ IA ֞NU] OH돒Z{+k'15,5 My8jWp0K!XCl {OT' LBbvRVGmiBsO~T?*WJj2 E븤fXe% LH ܊0~)baza]o]D]9\Y]]oXz򧤶$՜ R˼盇3_3O[]Jԇ10~kQ =DlTz:a]o6 {{G3_> =RZT<%w@Q}+7YClH!7nŋύLOT'LHm߆ϬN{R. P*ֲ֡vP*-eCok3Lԍ9x`e5=Q+3M0*:uaU;l]XpHI ZURNʟl OIU䗞I)eޚ5=U8aN |_>)Q,tauxߌuyjްHIҔd[\fJ{=bս~c:*Rl+_ X2k|KX@Oݯ O@'zhUmOVxҴdLI>r皏ć&b@ q&=Q@ ^=sHe`|ݗQ(卹Rj>R3`Rs7!" 6莊 wgn:R9Vp$R3wH)p^S {xySʞRCҠ CX[;!zB/H.^d5u_ϰIIR&t9vO\1WɴTnP&2y`0' .C¨XY]LG,KWXÁ]kF:OfR.Or7'Y6{%TY|O</֚I9 +bͅã_ GE fBn Us-tV򧤆xI;j/NvT}{2]4~7X} &u'LQ0e$:QUf:-UնjC);t٫ˬI~T=`0! )zYz3ytnUǂ;Nu/ ŒS!W΄#;cvE>+|fu/8-|hgޓZ7(@w2%4zǬ]\ԇ B['cO0s{Hug٫i骐bOyغ쪬GlRSP{>)3ǂT`LGa_B¯hqM]Al=zI .Ofsd7%%s%99llz&2SRJOkKF+@_ {C  @]aQX )Ae eJ/d[Xw7zt%#⩶SgyPDuT3Z`?QqK^=Q@֞cK-wH()S;*s"'e'ߙu]I u@m:_ aR#hPISP@އZiR̎2SYiu^02L _9ts3tR0XA!^9|gɟ* ݌l{C'I-MRi(sbfu^ ,5;TEi+AmIY]R#EV' Qq.]#/iM`eKp=Y5mXeBI\͇tlu3 2'_x ċ4>Ra/:]x0 9Ybf ·LŪ2UVf*DVcPT{ɭ_jCz`xq X-RCƍD!۽>g J38ԖTNz(e΢g:RbNEۧ6an:R#!EONR歹C<;hK{ָ^C'$Sy2{R)WT {rx啛 -kd N?<թ\:bHw,YÙmo)hٶݺYVOC)W@ 0<=/Lԍ ` V( p.RGXNNsQՃ}ؓ9 IDAT֕Liš%K۞J"6C%ȓ'i)ɟN ά/|R uu&pfƌ wFg o'i?<~CN{6{^j`x s J6q.^| C"&o'oR*A{#^~e`3aWQyOLP՘p0U'j5`ߵ0J&Vb( d]#y۩WPj1ݔԎ-wے76/Jo:ĴlUvʕzUR/g9uR َӜ2R; LJ5V3Vvj[˓l_81R?=cƍDa{\|<C4e.tӇR#ԓwTiO#itJX+5*}(U$7uiN@LDŽP]2yC͛ɟ1>${VnVӥHT;oꉱM>!r؎WVUUUn| KטQѓgB)Gn_rvB9f~x~Į^ 0Z2?#Xn¡q\RG`J-*j^Uw~3S:q!M33V*nKN\xR͓Udy5>Yzn%|Ĥ>8zƲ8Y9#Gl912&89F t`M@nܸ' hkR˂MI#%~(Sʬd{{1ݼU=ԩGS6Jɲlf6)^z%5aT :6>_Oƕώ)JIj lz|fyvèą闺q~cea}=RQk[҄m8)S-WS-_n~O_zD\V޽wO[jrk;-ɭJ?9&\:~BkOVeYVEr2k6sMjdz=G Tg5|`$5>@Ǯ^D3Ed]4ΦהSn5qoB[n:TV+~'~D\N|^֖WTUQڝ?65=)-y%˕Pʑdc]5(ۭI) N\Oj o=,ϒ~? %@Gнu'fδVu= ԭƷr[Yovc~k(˝V.{1*ZȫzTU~S-pxR&',ے;Jһ(KޛHy֕UGY}rN5"VZ :FDz.``,`a45-HrxLWYwȈ̌}1"ˬo~J4dC5q7EAg A'>q>ɏz8zD)"T@DbPPԻ4h^TRxu_NR\UYesioL릕e r۶e/ߋ,:MgPAa;~6K*"J0!_)A|Q*2+x/=Aac2D1J#Z'To?Ĥq̋|ۣ0agY_GR&p%9e%H?ƊP0m/mk.:*r&_Ÿsx"ۦc,%)M;A}|)ojC0L\u\JS7ju-E63v]vѮu]hW4-, iJaVZk\7j@K È Akz_=&[%[@ be6_җD:|c%(kDGw1+KQQ=ۯh;<PMF]A PJaDRXE8wD){;K,,C$$ m{ ډ-T\_{ۮ/Ti IJJ20R(ʜQ*9O "1|1gp&\Z!=ΝI0"Hٳg = RʘVTv?p?%(nE:xsI Rvڙ  خ42r ,(qwclfG3=5CB%1c۸ByTPQ*iVE(|g[tUR(V00Qt(Ji? |ix/GAaOaM7WC)wΝ;ϹsYZ:ȡCG=@xO /JybAGra RlրA^t(͒ -<k5M= Rвd/8H la[޺ɽ+r1$HZI mNv=k)rj(*+24,00p;|{Y J&3*@B)aH_<֨0<ܧ%#e/KJ)^͔Y, `'NM+?}?#O4Q1HSCY1;ܪ`_}cOq|s3lY / 65T(k;nqS$jIa鹶BEWs^N{O/A$gQL*Q8w<ԧy~g F9sE~#"F #dO0C)lB*XtCv3>8*韰,]ΰzc0/W,^f.蒋[rq.vBiHq@q3Oa#O~cM66\۠]R Vt"tfyfr4 (o&i焩=#H9 cR / Sڲ@tJ9.) \m3twb8"%{f5$=pM]_ܕ=+J:ZRQqkGh[Ψ.JBvft +86eltRwlAƃɌg7\OFjԮDIaH) ) nh^}Δt 9s7wIE4ȼ!Լd/z+z\L>㶁v5!M Om”QA.{BT]xUL\ƮT!`639LeY\oV@ўsS" tLF`ezA'>q>ɏz8g RR'?D{>nA $i=,)ԃ~R>5Gs|$Wg.9Qʼg [u=U@x RQ*2)4vPBۚbH%J*eJ]2Paa&lRt TT5$OJa1IƜqE) &v s!J&`OdaUVR/V.O3Pi<_m\, )Ws&/C&/LR-;TJ*e-p+.ٙ,S3ӘeZ`u>%lU<)A1'cNaͤT(c?7s 0Dv0e>Ϗz̙ԧ>QEbY_ϲ͍J㕢 )`O|4jԅڭ[Gk@}ԁ޼E#omPmFݨ9֨n'ui{QbㆼH$]<5Pu-8^)vsƶmp4v˖ҎK&;E2E)ۮ]@n cEƜRsڟ^zFM.J.6B++җ D]!H={}%=-xNEEkRư MPS] R U'Hycm%>5W)l[^J_̢La*3V+P1bѥAB݊C\ƱmO*8 tt&eZ(bWp]o=m.-)A Le1Ũ^34\W|gF)a9w|5{S]'9QX ƌ9 4g ]Q^^/yKDX&w` նu|*8v*! #%eIY~ԋ= +MR+HIN{#.(SxTP l.AE%kh}'pp{ѧYIS 8T>ʌ3O3?||64:ᢴm\MF.\rv5q]| |QR.a+ EJ"b ,7k`&6Uޤlpg\TA S4h+Yygs崔 wRz8]:9"O?]D=~<'T K6a ^\=VdS[O5+̈́\Nwt|E:qfR:YbUXlpp.:QIP)#mbf,̴XV*H0XFocBQyܶM`(mw[nE6qm\];sK;Lr$Ii =f޳8ꛒA Ν?™3/z(]11ٳL AF2xv@\ .)Ut{v446X~3\7Ck (U1T` D*7B6V6M$IXV i&II,**TAaM+kҸ.ΚC^{pMV.ݠ^bqK GeI\)" KYL'f;^'A ^;gNqgK$'JG=1$'4av 1jEϳFG?x藻z Z)KZ[w#47x5{'G+~0uUBm`/5Ѷ_h\G]^lreOF]tIK URTe )l)\$Hr!jp?T)|I #mfHY5 d寧D M &%_J鑥̙3/#JU\ȕ+I,"VERxRϖƳ$ Sg?>?c`βgDf3YH{lqA{?v8k6@mp(rTUɜҶqrv k:뿄*0 cdj K8|7鰲zۛ7)E?'Ja2m͒0x_ڿl1jSﲊ?@pt7S*ey"˗F:A'/5)GIeImfIEg *>/X]Rx{}@g(5{#[s:ǻK96]6m,Y G"7]/%lԺ/Fi_(Es\Tmmc( @;0F.n Yw nllQXSw˰~\ћyOAJ0ӻ-}X+EaR'?>2V))v;Rl\6c<.pIxbU)oGPȲAG3X! RAC{.Mډm (Wy60@Uk8N5L9y*+S.tqLo50 SG={$jdOzrz?eZQ`!h8}cU{S-S[ ぉa+uOok1yı;>A"Ys5Mޏ^%\I$fFU7TA>-B $?%ZOaectƽ ެ{2zwTiOIv'|`~_,f35βmo-9Hz,{Aj~9gk9%6$fm`7' B $kM0mChaK oArK8ə3/1JvRh}"'0x.DūSwݼ Vw<.hQ{ѬjZ;h*,ft_6{~BHY(A&di Aj٧h#LQAiAԙ3ËV uy~#%!TZgQj?)|K )e- p^*t@5ڕ"%{qMKcԯ;׋YAz#%ZC=o3T/)}唈Q *^x3=;xC@J$'JzAr>ZCUBTv*UA^t+ KKg~%̃*C 5t%{[;Ds^x'yYp}^6v; BodiD}A_9ozB[;J:ee|}eOr9;ϲ'cZ K a/K{zX\B巭v5e/=Y+WӨTdeoYUz.A $:j7/i)- TyR~EʇjRWd%{;]yW#Aj(CJ-1s ¹s^SzΞ=s}ZrHT3\7,bӄvƽ`NAfTt xSu9I+(l*> n؊JQ;5ކ~c^/a8S Bw4xI>jN<4qǥMu}rb^/r PI4I#F F 6DsAKu:sE>)ɊA5Ck ]0rԺ\R%t/pHU>zqnءd/4nu\#QWϼ^-λ-% E֘&g-:%{])Y_" qG  8w<ԧyOwGGT%y0,zcN~ #C8^t- 8Q*8&KW>s{9lc^mk~qySS B#Yc!U^o&ܴ#Y+$7J!^$'JFZ8s"JbTV&RATT YStW~5ѿz8<{ 0$H2g,/Dt1; w ^xtGRJJN +WrepmJCcYl{Pdr2%W, <'Tt>oOFd!2P(R޶20BaD2ve`TRFc>oU=|*lZk2F^ƪE'zA%GumZ5~D;]19Zw:8OWO<(ai&H],/_dyҀ${vZ$'Jl=i.b)j%%U$tKEKN@tB;ǹs/f˒O +ً'd/`^"o. ,ܟ 0$H2 `N-d%!ANe| ٳ%'JƎ:{mDz1zS#L Rk'O]l;wyR@g%{M#p5cLK+DA Ν_ͳtt:=a HTkuH0L€s<8Q*.S**Ji\{_cu7u9F|8iUyl<桜SA莌;Ţs꨼mxcNsFO=C5%iZd2d3_NgXZ:,” =wF=\NcI$P>+*BQ*e~Ek}yk1+j_6^4~̲7xrtp! $fYCY'EpDq&,+Qme/r9)qsI( ,jfRZ|/ Dh^t/ݱRu㒽S0~%{m+f, 08Y*1<1zBόыJ*d!*9\n'N[J$Kj'\נ\^$AW%rG*uL L3A B΃VT4O j{PuJj䒽p3Y͗Laod+,0]r%F4Cʽ|;AJƅVmL38qJ}KK}k7S(dI$N/`!Ay)T ,SJwҭ@;)QdV䅷q b:rJRɣ?ƒ{$ev "F 8*'J tO.W[_Jm}o8[[sRHrQ*XgTQwJE;%{pC-qd d)M0TaԸ Q#eϹ|\{ ${?O&sdr9\R๤ ԺD)M(:gH6%{Os!'`F&{HlHX嵢|fTBDs:uEEi:ɗ".)M%C$( TTTJ?QU^n*٫P5?'lA0 0m3sJqGCf9OPO܏0N;JFA2Y /%0לv)$H։RP DrdI ޜR7_pKq 6ϲ×a٭)_8џ.pk_A@,iLyg Sw”Q|n\n^a(ZZdP(r uKKj'To:OuݭKJΧ On٭, q;o`bw 9|3$ Qz-Quq.hQ#(A&Df^_b*bߧfnzE۰toF\l{T*e޷.~̺nvOrkcrcFѼdo'QdotxQYU=7ݘ00S`jWgAI̊ P;xGC}b4} Rj? ^4-t_J1Wajmm5B \)Ӽ<~w#lnf;JEK(,JY)к(e9})7q\ScOPoModH8S8WdZAF(cPόg^^-'{a #PK2#}syrya\1loiN13WnFRRFTHhmP^E%.rgj%Y;.~^^@cVSX?F)W+82Aaa Ib+Wz(5˔Q5IA$L"_͓NOaA)ҽvӜavpO ROH RaO+WֿRR!.D\4J]b{_өs: (.JGپq{4ƥ]%{v8~4hְ}zB{1.0JFbP2%{o[g~# wRa1VD VVnJ ӔҽNmXY9theRlmݫ˔QTN@2 ]Sݱu?/Ȼ^e=o6uC ;F>u?k_#צ@gZ6b{S TQֺ5.҇=q _}QaRa9Q tb RG 6sjØ\n޴9rd\0 66PRYPTsQʍנVꜭKUQjJBꤤ.gك?y*l9Ux(' By}c^Ұ޽dzd/ľt3џcarUNT+Bɗss=al%l[Ekq {m咟)Ҙ)UwM?{2 BT~3GƏM[LJu 5Xaq~eN.qaQ*(5o ow=<^z€^IcA*@򥄽@.7xA Qj[J:@kv<aB\u!̔/ ڵNL6(ҋg>^Ə~s&C^;穏8IBqac7m&ԘEm"R'Pʈ,/_9aT0vTK BH&/Q.Q\\)r,QJBTu! 4 S⢵R 2#d*rlTk>o;\v^CۙeBR] ZSyc{<*肰PK%uc)u/g̯f,a樇 81TK ՁδWeݡRҽNp]|40 W {OX~kAjGUH ֚+ ؏Vp{ 0$A=5oLEĨ=RC= I^0_J; cqʕ<'Oΰo0M{S*p0S*tEՆG3)j7quǟVOK|*9^۴yRjA L g lV(kDD,m.{b_>>Rjla8&B Dv6b6+{8pOϰoiJ qb1mWܘ%*Jy%|^T%,Bl",5%|wW^o}vI0n=.OH ; ΐr1ހCC\:F+1j1lw܃O$ Q%Hri)&\8TA LtBDqpa׽.ѣGY[sw:&]gs”Y75sFA/xuJk f5n 'm>%}WnΧ;ް Peo{(|0dFˉA\&Ó~k8_g_c bOZ?6g 2|a8g) C. ˜/j]DIədw*kK_p2lg L:D Q+HH0rQ #O*uID.pO<eqU67(.ԊR;ʕzq o%wOw{]_yڝeP&q?ٟ , ҇4a$VBSZO>cTHLcjVU_KOևEv1ӭדPqp 9#C;J4-ٙQA*@Ibyy+W_\X\qDk׶N8M*5ŭ[?fmBDZ\2"T7xT}4J޿u])Vs꽗XX^ﹿft\:/%F5C&[s 6O7U]&>M`Ӡ+(Lgd3$\vCNT+v R++F=A[2+ "Ju[h9y0YquHy0_%|\)hꖚ_DSS_dkҖwwyj8GͿqa_;Ox,eOk=0Qj&woaRĨQ"¸[rZ+t:ÉO[F dH0ܸMXGrؓSܺu *9 0S(Z^^q꽗?sQICmKFfٛ0%{=[a~{d\"T d_}I|j^tה( IDATWMQE112  IJrZ _je妔 c\Hǐ^!_&˜;wG]bi,7oƃswK K℩)RQa ~[:_g*oy\O}@vJjl1 GEa Ot 毣oQR_?>0̑ 8[sZ'ɗƊ\nifKClm|;7x%|4kܾ}-&WʡV .Z[(eTԖFY:y˳g?ֻ[j`uP,{nUBkpx~{/3CJʗG0"a7qbDbO R R177e35umŶ5MN'Idy2kv r@4 T? R&L|٢n)AzI`/)揭\Ʒs^*I|^+QU"VnV%x;'&kg>*yB0QDͅa/űɗ/Pqnax!JMO_ck똈R=XYɓ_'sIvU[!ߊjE$SA)wK՗Dg fh'o8~*=?^c5߮:/{};x-4iLڸ,{MB˅ZzQ\O%{ar'^gc㨈R=R((Ο_a{Olv_cccbxPP )/_7a j)Œ/N `<1kD cWokK-*~ }hk;Qh1vu*d_a:)AT{i6)۟ Xf\UQsvw{n|WhNZcXZ!1Mt:+x_NH0,rҨДɼ`u߸x~=SS9y2kkRAy}ˇRȑcLMQJcYf )_0)m@cພ>goߝߝ;/rySjqT͏g.F,aQn-(agkQ/ &TXVin'0HqqHya6dbq?r8-߿Qi ׵u݈k)td \Th@)M6ȑ%/iUw5 Jk? @H-TXok␪eFs7k+iN'nN﴿Ae@WtH_zk², c\Ũ% d2M6;aHC |"L }gسu2ct2Yd~&{yr:$G>^n]e}}Ba۶}'TTĹ,f(mDZq]T*ePʌSI fJUusIcsOsO86W3;]͡wJȸ Н=^z@!.<1j|(aHNToG޽ܻ'@;azzF򥄾N;(8Ǵ^{e9R yˍ8}T-GRnlx,a㻞+eY~JPFocY&e%$Z{TsT8 iNNͱ\*uaXVax3yRS T링){ƭE!f'5bUQ }hk u#:׋ѭnӏs R\ט{OM[ =F`j&EOhjXA*B\=țUvP)oVmf&OƶE'Z+/sM,biaj*KRI]fJ SA_TH0M;Qx , HMT[ n識od]9`CnCB%<4RMp۴yWũs?٨Ni"M} .ݜsTqM8sj(Sf~!R;Ī|LJ⿧!J0H5PC ~ S*l0sS(qEuNV,ًCGNyc4itDկuOC`{ee?ŢWr9yr'8S w~U~pkΩ{?{?/ ׊M RyBz !uc=³jGBT@ǂT~wG)]\KQv'H;+H}"J 9G=_L3 RUmT, i&L@ dff R.۔ lnn\vT ̓5ϓ]\!V 6ɟ F*HmA;o\%`17sK R5DŽ(}}o O+Mg넞|2.aJh璚oM ƍE @N*ҋ4 QQT}{ La$tUJ&ӡ(a )e]`}}ͪ(_ἧ->t׿\琪R T'DjCxi/v U(iaPb}z4-ٙQc"_dmmM*pp_<= ̿e7-ًChR]ir H7΂T0)  1 L&+,M ߒ0s)~ Q}GG|.H3,-eDb9~|#Gf+?իC^+sR(mB1kB Jh]T`%)ce*2J,\J$ek@*Y/0{ؙi{p @g*TJeX513}q/faFU'F"Uf'3rn{*QEIyU+,@ 9|"ypI()3_V$iҝ8KVw#YFE(x! S*Ʉ}Jw(QR/e1>ٙӗ_^VtOH:!yRӧKZTzde}qz_?)uvԠSI)ejf&ق:ޢ faE߁NN*!sK/T_zq4/'tHbdokaZky)j'&u )Ts[.`ZrYٶ=4TOHq: e.h\$IOۙZοɓ%_'V`lJ"vZ·Q*RZXXRl{^GG::jP;;՚=Qie-}ޑ=ג&}mף/As5D(Lmg4;mےFǧ(R~:!=e.A|w05kn0Iޗ_^ 6P "fGn1zvF܈SGmط'4CTGA\~ry+AHU*kww.[Ν=~˗ʲlZZZ֙RnRo;i)KԌp膩YVMV]GG5TTWTHZEWX8l.8>?cI,IZkklOdLGEknQ|GNBf4;;$?4vG=Q17H#{̱_*~˛^3;z1?HjT}Bq\Ԡz?c|9-*s?ZZl6޽ξ*uKfS[E%J )>S 0I~]"2|Z/(ڧvEudnBr'~h_? %_+KӧE={VLD,7J}maJzɓ;Q uT'FuFj6A=199'5ajWjFҬ,k^JZ\޻\=T=Vj$ WirRTمAjRc1?WDRTjXhͺ^y$ A2~t/o$&Hu>fAS"NBeEòZrfՖIFϩ0ػ P,k,kA33r%J״t]eһw{zfGujR%瓘7.<}["/Oc%Qρ!Dy8BQRc/]=sOIu)˒66Jw}?3;_ɼkTe5ۏ'Nڋϛ=c}q*LV+VVorT^%JWxEK۷;zfG5KngD?2 )RQZ@TFWD(DS'FIQ|҅(j5NF>lrՎR5ѾI)˶ ?u-󗴷wr[>q^N#{c HKsAʍOkQW(dۙI RJBD %1c|鰻;/$)YAʲ,ܜ=_҄ؑem˲8ɸaʲwN*}Zj)Tme{O5M}G::j\~ׯtrҒTWc'* us>E2~>s/ z^٬Q(AEx%A"X IDATc}}CkkþX"L%_T҂Tz}=GlGҮ$#UU*i)q߉j,aTFVVͦ>55sb\.]W?׋cIMdv|ﯣ8!5$I_Byj~~j})(O6kIţR~s\e(J{F|`9sJ*Aʲ}[_}\=5OCT'XLz.rONI I' S({jjVҼ2E*>럩P/jkkW~%%_j)*k1˘ 54H^, B!lKZtTr1g.{FM`9T2}K*Aʲ,qZ{폖M뜐)jOV5O'5dY'견vqVU9+iA̢ʕti{Ǐ䭤Z8!)3GԘR RgZo] cxΈ̌=2=HJp:*il;|xqN]/c|{CRr{ϖ~9l NrO0HjĩG=UVy:h̪*(YGZ^Ş^O6kљԐR}$B _Ko PHlV;w$?S' {5Du2Hu0gZ\ 6Yw{ R%K3vkɲI:T&ӉS'F4UMU=FcVf^ e27e7hT!-I} u=ɿׯ h1<$W;w**AjuQ$aO  A2_rw{ RR|vw3~EJuL&ۮȲjj6oɲ}5G}$~'k$)S/A 5k sۻp٬\ѓC&!H12Ց %1U_׽{HIy~y/.Hu?yb{@uO A*d\r;wݏ'z&*Wzx$%Ac}}CkkþXbTh.AJvv,NK~UQRZA=vJxqOEeW$=H-.eT/FQ$uO( Rc/>vwg~'R>䉭Ǐ9-"ٓTNVnH z][R?%=HJ%Fgi{NK{J:dqԠ&O>]{i+rgvEZ1*QҲ'jT)R^0_}K^s%=z5o߹}~O`꼶wWt%:JZ]eT/3=Q>Hu_a*;Q*AJrwK=z61_}.A~I& :ffl?lWڂ1*r!P!Ha9kooV_})AIۖbP)؎[ 8y!"ijaaVR' 4bT/3G 5iooVeI R㜐>/rZ LLFKKg4"FEmgþXboM"`VWwBtdovF_ +yEAZOHGDc<AaassQR1>+پ< uju0Eq< Hy9Koc:}k\Ŭm ysGTGQc<y H0eRN"HvnF;;)IH !~ط)1 7ux=HNq R*w,a ;;'{OJޟ9 b<{A }~poԴTvFm\ Q"Aj=G,16B7 A*@cowWc:}. չ~xV $_>oka!LAڠQx9D 51>C:8ӣG |AqAڣGzd~_t nR!FMmgþXbOR㛮/Kzj)'=:_N@\{2#37sv߳V?1ĶԔ_ajz=\_"HI)w'O浳onha9AjtoQSQ A*$2t<~|MGG R>Vr[ɓvwq03#̸! R= V? y=QQ"HRS{*\lAA7L=}옿`!l"H]ܠI {1 `9(  jٳJ܊J^H { !V+*¾z*ZAjq 1* 2"ǹm`TD1M_?y: )T7L `rnrwEOF 7Z\|;111}#LcT066>!H:ϟ/ŋ` MtC wZY!F#DA*&3~)ŭ)Gf\xQҋ]M7˹|T"HQb<{ 3R/J%#:}.Aŋ%紿oL%m*mi~= }m)bQObc|Trں Ayz:8_ ]٦f[:|B~Myo[_ðo#STr* RS Rr:8ȩ\<@vS'f[Aj{R(Qް'*R ~)s\ЃT}9HuC.+#?$\]()Aڠ R(3Ǟ H%{rYAk:ezuuknDҰ 5车AX|>Xl;|myCJKcϻW>:doッ^¨oa 43T Q0g\b9”7_Z@ )H~}M_ fg57Wo? P R;i*o#rB! p27oF)F37jaAo+m H R=|"FcO9BT:R1>oMNKxcjT'_oZz޾5;V5;{~t>>>x*Q&et!Hac|fjmo^T繣޽PJi7e2uV͞R`A)beNb\ZQmJO R!zOmmo/&ࣙ#V5:>?XPAOb/se"Ha&S)#{ R**vw ^`"kfHIbAk?H&Þ(s+raBDJ9a )GC fdovv>RM`L&vCC EyCA S^_j2{{?IݏwwwD5,HӚ_APxO?_Q8=BNpc|/5X$H]. L RcCfԕ~VZXxO?/ScO!Ha yi)CIQ:}.Ax:;. RggYfe3 R/~<,Hu_ 'Rf')B9Dabc|99)hRy R~Z~aYd~fd"Hi>!'$F]o/u^Y{8!uQ~ƩV dYr%]GR';Ht#z3Ǟ(LA SE2~A%}ȞQUT S7l$PYց:'G!Ԩ{Ij˗bD!D! )1>sW GߏfSV <PҰNJ{_ʕx9D!L)qpZ-˲>J^PA*#{aʍS*W7@#Hq*!{)1>s[jG)vHwTK,0q"ϙ q*y(!H!270ۈ%Y2)dAjп_%Cy{rO@Iis)ԠH.q*W.W Db<QCB_c||L uQ`"HM/H zsz_ o3~'=G"H}.˗9x9B b9T2Hu_o>aDdW =Y֞F#Ajŏ{_eNEIx^>_ 6bSQm2GB\ #Lue2) A lRՉS%- @vF'ɍPA ttiSQm2x X!LceYKnhA*Ajϻi??=~s=n4"Hοw׺tiSQbO(A 7&䆩LT1;~=ׄ*`=O{'I_'H۷%Dyx "Lc˶?mFR}L[HGz5/ e:Aj }cO7sX#H!3WVT.o}s,!H{ 5L^*NU!D(?@Ajs) }ͩ(1yH 0eR.*. L)?{LBX?(hD"H uל!ʋ9o A 7re?pZ*R)T ~ kڒ:x 5i|9R^T>F˿R1g=QH*i}}CkkþXb˲J1RTP#{.&z}D=H޿e_Qdɯ R|-y"DyŞ($A 9\}[,Aj{OԸzÕ5yI^l Evrc<{)<`a冩!AяAq0A]XN! iGB_aeYRc l| kA* u҆._Pڱ'y R^0eY7ܒAe 8I^:A*`5A 5 u7(' BpV6`eZYc|sv-jry+ UB YMY֍o=yy LcˍRezBO℔?pB*̓6Qi 9! OHt7ZXxcO9o$NH>e{ZZzOfZMIr5A~rb+˗%D{!)?^T-uRcTwH]!!{3)c|ް_f#A $?_G-H$HM+H!b<{oRZ[{mk4.Ѹ} GBAJ<4IDAT>{RB A$ EuRT(kA+vtSB\e< X) `2pNj:>^$H|@v< ErիOuSjz} EAʟ{ ~R Ri R ]B2GABjry+ۈz}F"H#H&y}Q4kמPU' ƞ(s!H!"LcbGG9jYjYT 5A{~C(kT҃{jOׯ/ Ǟ(s+raj) dyS.o2wN:8S7"17ٟG ;H6p?׿Wi 0g< :R@Ḏ_j|s:>8CMR}/ eytMJR*U,h(o! 1c(eko/+Ԡǽ? E LAjڟ ~}4FbcOM)  _j2{{YUU ȞL9/^ua]G-H z 5b@n? e=Q@cKMvwR}x5A*nAƍr4ԁ0̱' Z[{mTRbigG ^=)o eyt 2yAX<͛e"\@2¾ c H1~)sޖ**AʯB5A*AX6q 5=hioXi[H=QQ@aϛryR>:<)s AMuˇ)Ԉ&y}ioX)/A8 B9o`KMցk:88AjZ Qk$AjqR?x9DCR0eRӵn$6)_/*&kEAw!X!DDR1>s ߯| 5^'5H&HcJǺ}{W.̱' H7rR/=7Lx?adA{~C(A>pO1BB2Ǟ(A 1hxb[{{UETTa# C: Ƨnx9DEpj}}CkkþX"LE!HMI Ra^RR—QЏ Kc/zNQYTA{~dRJ:*b3G0 A P2Gݣv:Mx!H_\'5HM~úNFrSBvV|1ۈ%\ `$Kc/@u#B=|xuoMNK%g/%I=8} 5;xNjun**c!e<^#Lc/y:aՒ=+%H )_/*&~eo+ZZj(o! ')1gZ\ 6O~$A[h!H$]Ԕ$-/t<3x0eRgk&y}ioX?rwS5enuuEs? )bKΞvwC 3lD~RoR5҅}|,9ѐ'HJY-- G!Þ(s(QC)#Lù2a{=?sϗJ#n2x("H$”9Iž(s+ra DYyS.orZ [c<@Dac|!Dy8Qb  63WVT.o}x9D!Lc Q Rb1>o/̱' @}~)@XQް' @$c|/&̱' @$<`AbطKH"a9~c<! @$~ (CH:c9&e -RRRSq'y҆  U/e1>02GV)jry+D{1 RR0e1>H7D[]]6 T)7&c|"c<RF2~)H>B7s=RЇ1>sdb<{`0 A2~)HB9Dh)1>o/x9DxR0 = 6bR/\eB?_} )c|hc<{`r)083DhbطK9b9 |2GR 2x >a9`:e"H/e0`O9 )1aO7s!H@3WVT.o}[c<G) Lc&C2"ǹm@*`J\dF`<{`R0e)sQް' A0gRb<{ \)<ഔ!KH+B9D@4 R҂տ.L 17&D{1F#Lc@#D@ 3WVT.o}RC) 8U>_ 6b<@R߱_c|3G  r!yc9ɱ'! 0-)԰_a {16`/e1>`0Dy8Q#HBjry+"!~طH9 tyS.o2Ƈ`<{QBDat(o r3~)$y* S/$ DcO RHcK!3Ǟ(@\aF,_ qQ A +cQx9B RXr"L!Jl;|my8#HbRCeH /e00'y HR4'! 4)@_a A`O9IE$1'ǹG$A hV+*¾ yA )sa(s+raSAc|ޔ˛a(̱' F)@̱_ Qް' V)@j1gR=Q#HRqpZ҉e=QR1>/Ḵ' RX_ðo#SɖQ<_c|x9BRSfYŰo#b).~)s{A 1_a*e<&C`B2_4'~ط@07&"`\ZQmyR0eR"DcO#H3a3Ǟ(C )s {A 1gRf3Ǟ( 8NKbxl;|myLA )bc|1g@8R`}}CkkþX"LQ <)B~)sicO9B#H20Ş(s)"R0Ǟ(s( @İ_\R{1@4(KK{̭q}`7f,OK1g< @ i#D)b1>sjEVط1y@!”"DcOE &RcOG 70ۈ0KaO@ !371>̱' d!H01>CA)*/yӀ< @_ʜc|#Dl)R漆\@2xG /en1>D#D)RR. S2xC e/en{q{(R @J1gZ\b<H7)G2stTQoK9o 3@ {@/8EAj|R.F{0)0aj8p!H u{R`,Z[{mDA,$R`"R.B0AFA^4Jk"D?gi/ x A &MQo)4JCb< RIRsCJ_Ry`R`*VWW8þ )05IKJbOA L]T{@XR 4qsbOA qT{@T@$m/NA=Q jR R70۸P\y R _*A "-q@RQ R(')Q/ x(엊BZ]]L@,=fb<A ZXa* 8Q R =7 Ş($)( S RID31{@@b RIG_A=Q -R 5o R!HTkϏ EiE?kb<A ~) E HH|ԤA<.@$ R(R}/5Nb<`0K R+rA@F67(H10Tr{(1&)DL `??˰o zw#'IENDB`hkl-5.0.0.2449/Documentation/figures/sirius-m.gnuplot0000644000175000017500000000047213211074263022554 0ustar00piccapicca00000000000000set terminal svg set output "sirius-m.svg" set title '[0,0,1] -> [0,0,6] s1/s2 (starting point) 10/100 (steps)' set xlabel 'l' set ylabel 'kphi' plot \ 'm1-11.dat' u 3:7 w lp t 'm1-10',\ 'm2-11.dat' u 3:7 w lp t 'm2-10',\ 'm1-101.dat' u 3:7 w lp t 'm1-100',\ 'm2-101.dat' u 3:7 w lp t 'm2-100' hkl-5.0.0.2449/Documentation/figures/traj_n.gnuplot0000644000175000017500000000027113211074263022256 0ustar00piccapicca00000000000000set terminal svg set output "traj_n.svg" set title '[0,0,1] -> [0,0,6] 1 -> 100 (steps)' set xlabel 'n steps' set ylabel 'range' plot 'traj_n.dat' using 1:2 with lp title 'kphi range' hkl-5.0.0.2449/Documentation/figures/m1-101.dat0000644000175000017500000003524613237020466020713 0ustar00piccapicca00000000000000#h k l mu komega kappa kphi delta gamma 0.000000 0.000000 1.000000 -0.519320200000000 40.795148837723552 134.088340521547394 -55.578087980042497 -0.022336900000000 14.824478552849410 0.000000 0.000000 1.049505 -0.519320200000000 41.162927817486029 134.090501606362437 -55.567541326156281 -0.022336900000000 15.562801325953199 0.000000 0.000000 1.099010 -0.519320200000000 41.531593227586733 134.091785622984872 -55.559521606340653 -0.022336900000000 16.301774869400464 0.000000 0.000000 1.148515 -0.519320200000000 41.901086207380260 134.092309868773839 -55.552260600258755 -0.022336900000000 17.041431537715610 0.000000 0.000000 1.198020 -0.519320200000000 42.271362938674514 134.092168497861906 -55.545661168587955 -0.022336900000000 17.781804141490330 0.000000 0.000000 1.247525 -0.519320200000000 42.642389280064464 134.091440743675946 -55.539641520213969 -0.022336900000000 18.522925768941228 0.000000 0.000000 1.297030 -0.519320200000000 43.014138958241922 134.090193761488251 -55.534132283904107 -0.022336900000000 19.264829800524737 0.000000 0.000000 1.346535 -0.519320200000000 43.386592159215553 134.088484844662162 -55.529074171727899 -0.022336900000000 20.007549923894963 0.000000 0.000000 1.396040 -0.519320200000000 43.759734419630838 134.086363171611765 -55.524416226134598 -0.022336900000000 20.751120149081245 0.000000 0.000000 1.445545 -0.519320200000000 44.133555748006358 134.083871192735302 -55.520114366056013 -0.022336900000000 21.495574824107685 0.000000 0.000000 1.495050 -0.519320200000000 44.508049921657388 134.081045742829218 -55.516130225791542 -0.022336900000000 22.240948650904578 0.000000 0.000000 1.544554 -0.519320200000000 44.883213919814573 134.077918940516668 -55.512430283500727 -0.022336900000000 22.987276701641672 0.000000 0.000000 1.594059 -0.519320200000000 45.259047464982231 134.074518918773151 -55.508985074745716 -0.022336900000000 23.734594435498039 0.000000 0.000000 1.643564 -0.519320200000000 45.635552647485198 134.070870425413005 -55.505768578752495 -0.022336900000000 24.482937715816131 0.000000 0.000000 1.693069 -0.519320200000000 46.012733618898558 134.066995316397566 -55.502757712153631 -0.022336900000000 25.232342827832756 0.000000 0.000000 1.742574 -0.519320200000000 46.390596338127537 134.062912967023010 -55.499931935472070 -0.022336900000000 25.982846496792639 0.000000 0.000000 1.792079 -0.519320200000000 46.769148362015414 134.058640613898518 -55.497272858599587 -0.022336900000000 26.734485906689144 0.000000 0.000000 1.841584 -0.519320200000000 47.148398671510577 134.054193641840385 -55.494763993668229 -0.022336900000000 27.487298719516325 0.000000 0.000000 1.891089 -0.519320200000000 47.528357526422461 134.049585826324915 -55.492390468376996 -0.022336900000000 28.241323095109347 0.000000 0.000000 1.940594 -0.519320200000000 47.909036344527522 134.044829538552591 -55.490138837299305 -0.022336900000000 28.996597711642369 0.000000 0.000000 1.990099 -0.519320200000000 48.290447600706351 134.039935919625378 -55.487996907245517 -0.022336900000000 29.753161786780758 0.000000 0.000000 2.039604 -0.519320200000000 48.672604742041301 134.034915030190888 -55.485953565546929 -0.022336900000000 30.511055099432234 0.000000 0.000000 2.089109 -0.519320200000000 49.055522117603658 134.029775977911669 -55.483998667698970 -0.022336900000000 31.270318012395446 0.000000 0.000000 2.138614 -0.519320200000000 49.439214919459729 134.024527027833244 -55.482122910217470 -0.022336900000000 32.030991495623155 0.000000 0.000000 2.188119 -0.519320200000000 49.823699133750644 134.019175697673234 -55.480317752925927 -0.022336900000000 32.793117150386770 0.000000 0.000000 2.237624 -0.519320200000000 50.208991500438380 134.013728840293169 -55.478575312145480 -0.022336900000000 33.556737234267530 0.000000 0.000000 2.287129 -0.519320200000000 50.595109480165107 134.008192715653536 -55.476888297007598 -0.022336900000000 34.321894687026543 0.000000 0.000000 2.336634 -0.519320200000000 50.982071227428435 134.002573053730487 -55.475249956196912 -0.022336900000000 35.088633157458155 0.000000 0.000000 2.386139 -0.519320200000000 51.369895569556540 133.996875109073983 -55.473654000473623 -0.022336900000000 35.856997031217659 0.000000 0.000000 2.435644 -0.519320200000000 51.758601990011940 133.991103709501914 -55.472094568507671 -0.022336900000000 36.627031459726865 0.000000 0.000000 2.485149 -0.519320200000000 52.148210616349971 133.985263298303948 -55.470566176261826 -0.022336900000000 37.398782390155368 0.000000 0.000000 2.534653 -0.519320200000000 52.538742211774377 133.979357971809293 -55.469063683919728 -0.022336900000000 38.172296596601484 0.000000 0.000000 2.584158 -0.519320200000000 52.930218170017966 133.973391512684515 -55.467582254706976 -0.022336900000000 38.947621712509353 0.000000 0.000000 2.633663 -0.519320200000000 53.322660513376313 133.967367419325853 -55.466117332383661 -0.022336900000000 39.724806264361888 0.000000 0.000000 2.683168 -0.519320200000000 53.716091893514822 133.961288932030641 -55.464664607676028 -0.022336900000000 40.503899706790314 0.000000 0.000000 2.732673 -0.519320200000000 54.110535594683853 133.955159056483410 -55.463219997047453 -0.022336900000000 41.284952459102307 0.000000 0.000000 2.782178 -0.519320200000000 54.506015539492175 133.948980584485525 -55.461779622065215 -0.022336900000000 42.068015943358155 0.000000 0.000000 2.831683 -0.519320200000000 54.902556296752358 133.942756112712601 -55.460339786547728 -0.022336900000000 42.853142624086011 0.000000 0.000000 2.881188 -0.519320200000000 55.300183091494446 133.936488059417371 -55.458896962135384 -0.022336900000000 43.640386049691976 0.000000 0.000000 2.930693 -0.519320200000000 55.698921816872243 133.930178679578603 -55.457447770302132 -0.022336900000000 44.429800895691123 0.000000 0.000000 2.980198 -0.519320200000000 56.098799048124938 133.923830078373612 -55.455988969536911 -0.022336900000000 45.221443009853076 0.000000 0.000000 3.029703 -0.519320200000000 56.499842058405896 133.917444223293131 -55.454517443236924 -0.022336900000000 46.015369459409023 0.000000 0.000000 3.079208 -0.519320200000000 56.902078836106220 133.911022955600686 -55.453030184694590 -0.022336900000000 46.811638580352856 0.000000 0.000000 3.128713 -0.519320200000000 57.305538104620005 133.904567999796257 -55.451524288678854 -0.022336900000000 47.610310029099942 0.000000 0.000000 3.178218 -0.519320200000000 57.710249343247675 133.898080973130448 -55.449996941901581 -0.022336900000000 48.411444836486240 0.000000 0.000000 3.227723 -0.519320200000000 58.116242810440355 133.891563393543834 -55.448445411845512 -0.022336900000000 49.215105464407678 0.000000 0.000000 3.277228 -0.519320200000000 58.523549568502432 133.885016687379533 -55.446867040834057 -0.022336900000000 50.021355865117251 0.000000 0.000000 3.326733 -0.519320200000000 58.932201510472318 133.878442195992733 -55.445259236574714 -0.022336900000000 50.830261543459585 0.000000 0.000000 3.376238 -0.519320200000000 59.342231388714943 133.871841182091174 -55.443619466001607 -0.022336900000000 51.641889622155162 0.000000 0.000000 3.425743 -0.519320200000000 59.753672845530872 133.865214835447148 -55.441945248925570 -0.022336900000000 52.456308910354046 0.000000 0.000000 3.475248 -0.519320200000000 60.166560445936902 133.858564277967531 -55.440234152520596 -0.022336900000000 53.273589975689546 0.000000 0.000000 3.524752 -0.519320200000000 60.580929712363456 133.851890568622906 -55.438483780717746 -0.022336900000000 54.093805219975359 0.000000 0.000000 3.574257 -0.519320200000000 60.996817161840177 133.845194707614041 -55.436691777686931 -0.022336900000000 54.917028958926274 0.000000 0.000000 3.623762 -0.519320200000000 61.414260345253389 133.838477640527003 -55.434855815151423 -0.022336900000000 55.743337505994234 0.000000 0.000000 3.673267 -0.519320200000000 61.833297889245117 133.831740261926598 -55.432973589839847 -0.022336900000000 56.572809260763030 0.000000 0.000000 3.722772 -0.519320200000000 62.253969540519279 133.824983418872279 -55.431042821814877 -0.022336900000000 57.405524802073337 0.000000 0.000000 3.772277 -0.519320200000000 62.676316213095888 133.818207913861414 -55.429061245418225 -0.022336900000000 58.241566986290792 0.000000 0.000000 3.821782 -0.519320200000000 63.100380038255935 133.811414507819961 -55.427026608310179 -0.022336900000000 59.081021051035883 0.000000 0.000000 3.871287 -0.519320200000000 63.526204417644166 133.804603922722009 -55.424936668953073 -0.022336900000000 59.923974724749229 0.000000 0.000000 3.920792 -0.519320200000000 63.953834079594266 133.797776844092937 -55.422789186902328 -0.022336900000000 60.770518342539312 0.000000 0.000000 3.970297 -0.519320200000000 64.383315138954771 133.790933923267914 -55.420581925850811 -0.022336900000000 61.620744968726946 0.000000 0.000000 4.019802 -0.519320200000000 64.814695160662765 133.784075779413769 -55.418312645439237 -0.022336900000000 62.474750526599514 0.000000 0.000000 4.069307 -0.519320200000000 65.248023227158782 133.777203001620450 -55.415979101338955 -0.022336900000000 63.332633935895196 0.000000 0.000000 4.118812 -0.519320200000000 65.683350010207008 133.770316150563076 -55.413579036291345 -0.022336900000000 64.194497258594339 0.000000 0.000000 4.168317 -0.519320200000000 66.120727847069631 133.763415760357447 -55.411110182004421 -0.022336900000000 65.060445853638711 0.000000 0.000000 4.217822 -0.519320200000000 66.560210821826402 133.756502339906149 -55.408570257894020 -0.022336900000000 65.930588541285800 0.000000 0.000000 4.267327 -0.519320200000000 67.001854851629886 133.749576374594625 -55.405956955690144 -0.022336900000000 66.805037777815429 0.000000 0.000000 4.316832 -0.519320200000000 67.445717778929918 133.742638327441995 -55.403267949425036 -0.022336900000000 67.683909841420473 0.000000 0.000000 4.366337 -0.519320200000000 67.891859469564565 133.735688640484057 -55.400500885946435 -0.022336900000000 68.567325030192606 0.000000 0.000000 4.415842 -0.519320200000000 68.340341917557751 133.728727735893898 -55.397653380916815 -0.022336900000000 69.455407873138327 0.000000 0.000000 4.465347 -0.519320200000000 68.791229356975236 133.721756017113307 -55.394723016185004 -0.022336900000000 70.348287355335287 0.000000 0.000000 4.514851 -0.519320200000000 69.244588381493585 133.714773869883714 -55.391707336670343 -0.022336900000000 71.246097158405107 0.000000 0.000000 4.564356 -0.519320200000000 69.700488072370348 133.707781663130021 -55.388603847354361 -0.022336900000000 72.148975917576109 0.000000 0.000000 4.613861 -0.519320200000000 70.159000135320696 133.700779750007683 -55.385410006131572 -0.022336900000000 73.057067496781798 0.000000 0.000000 4.663366 -0.519320200000000 70.620199047447485 133.693768468576792 -55.382123221435016 -0.022336900000000 73.970521283387086 0.000000 0.000000 4.712871 -0.519320200000000 71.084162214684355 133.686748142719750 -55.378740851769841 -0.022336900000000 74.889492504242583 0.000000 0.000000 4.762376 -0.519320200000000 71.550970141039173 133.679719082796510 -55.375260194897777 -0.022336900000000 75.814142565021328 0.000000 0.000000 4.811881 -0.519320200000000 72.020706610498053 133.672681586392173 -55.371678485976112 -0.022336900000000 76.744639414980895 0.000000 0.000000 4.861386 -0.519320200000000 72.493458882893847 133.665635938946110 -55.367992895743363 -0.022336900000000 77.681157939496927 0.000000 0.000000 4.910891 -0.519320200000000 72.969317904978411 133.658582414361604 -55.364200519476704 -0.022336900000000 78.623880383008341 0.000000 0.000000 4.960396 -0.519320200000000 73.448378538206811 133.651521275600032 -55.360298377549675 -0.022336900000000 79.572996805332579 0.000000 0.000000 5.009901 -0.519320200000000 73.930739804886301 133.644452775175523 -55.356283404396187 -0.022336900000000 80.528705574597637 0.000000 0.000000 5.059406 -0.519320200000000 74.416505154432684 133.637377155709515 -55.352152447182974 -0.022336900000000 81.491213900471976 0.000000 0.000000 5.108911 -0.519320200000000 74.905782751882413 133.630294650403528 -55.347902254712139 -0.022336900000000 82.460738411794864 0.000000 0.000000 5.158416 -0.519320200000000 75.398685790923295 133.623205483481343 -55.343529473830586 -0.022336900000000 83.437505783194936 0.000000 0.000000 5.207921 -0.519320200000000 75.895332834020152 133.616109870627980 -55.339030640498635 -0.022336900000000 84.421753415915830 0.000000 0.000000 5.257426 -0.519320200000000 76.395848182607210 133.609008019338660 -55.334402171345303 -0.022336900000000 85.413730178641970 0.000000 0.000000 5.306931 -0.519320200000000 76.900362280513875 133.601900129412456 -55.329640355507031 -0.022336900000000 86.413697214981127 0.000000 0.000000 5.356436 -0.519320200000000 77.409012154585341 133.594786393183426 -55.324741345422396 -0.022336900000000 87.421928825006646 0.000000 0.000000 5.405941 -0.519320200000000 77.921941896491376 133.587666995955914 -55.319701145744666 -0.022336900000000 88.438713429429541 0.000000 0.000000 5.455446 -0.519320200000000 78.439303190769024 133.580542116229481 -55.314515602769511 -0.022336900000000 89.464354625975361 0.000000 0.000000 5.504950 -0.519320200000000 78.961255894370694 133.573411926149021 -55.309180391158485 -0.022336900000000 90.499172349051193 0.000000 0.000000 5.554455 -0.519320200000000 79.487968674354306 133.566276591608727 -55.303691003464984 -0.022336900000000 91.543504145267093 0.000000 0.000000 5.603960 -0.519320200000000 80.019619710555119 133.559136272663039 -55.298042731511970 -0.022336900000000 92.597706579301899 0.000000 0.000000 5.653465 -0.519320200000000 80.556397471879052 133.551991123756125 -55.292230653645802 -0.022336900000000 93.662156786780116 0.000000 0.000000 5.702970 -0.519320200000000 81.098501575717762 133.544841293904767 -55.286249615405161 -0.022336900000000 94.737254193349145 0.000000 0.000000 5.752475 -0.519320200000000 81.646143741556315 133.537686927000379 -55.280094211081014 -0.022336900000000 95.823422422265040 0.000000 0.000000 5.801980 -0.519320200000000 82.199548851811130 133.530528162016566 -55.273758761097163 -0.022336900000000 96.921111416349760 0.000000 0.000000 5.851485 -0.519320200000000 82.758956135014273 133.523365133130596 -55.267237289777633 -0.022336900000000 98.030799804502919 0.000000 0.000000 5.900990 -0.519320200000000 83.324620488796327 133.516197970083510 -55.260523496923803 -0.022336900000000 99.152997548139794 0.000000 0.000000 5.950495 -0.519320200000000 83.896813963785448 133.509026798239631 -55.253610728358929 -0.022336900000000 100.288248909058183 0.000000 0.000000 6.000000 -0.519320200000000 84.475827432648728 133.501851738786627 -55.246491944180782 -0.022336900000000 101.437135787779098hkl-5.0.0.2449/Documentation/figures/sirius-s.gnuplot0000644000175000017500000000047213211074263022562 0ustar00piccapicca00000000000000set terminal svg set output "sirius-s.svg" set title '[0,0,1] -> [0,0,6] s1/s2 (starting point) 10/100 (steps)' set xlabel 'l' set ylabel 'kphi' plot \ 's1-11.dat' u 3:7 w lp t 's1-10',\ 's2-11.dat' u 3:7 w lp t 's2-10',\ 's1-101.dat' u 3:7 w lp t 's1-100',\ 's2-101.dat' u 3:7 w lp t 's2-100' hkl-5.0.0.2449/Documentation/figures/zaxis.png0000644000175000017500000120122713237020375021243 0ustar00piccapicca00000000000000PNG  IHDRy[Q 2iCCPdefault_rgb.iccHgPY<@BPC*%Z(ҫ@PEl+4EE\"kE t,ʺqQAYp?{ossp e{bRɎ(tջ{i常r)teJOYLgWX\2XyKο,]~ )sT8بlOrTzV $G&D~SGfDnr&AltL:5204_gK!FgE_zs zt@WOm|:3z @(U t08|A $`(E`8@-hM<.L@ށA2@F 7 Bh( ʀrPT UAuP t݄84 }aXև0v}p4 ^O6< "@]p$BV)GVC!Bd h(&JerFTVT1 uՁECDh2Z@Ёht]nDѓw aa0Θ Lf3sӆL`X VkaӱJI%vG)p`\.Wk] p xq:o—;IA"X| q B+aH$͉^XvbqD%iRi/82! L ے&US{1O,BlXXؐ+ NP6Pr(3;Yq8WJ)Hq"HJ IKIJGJJIKa8y"Ֆ͒="{MvV.g)Ǘ+;-Hז,L_~NAQI!ER¬"CV1NLMZ)VL $L`V0{"eyeg :JJU*[5JLGU殖֢HVQ?ާ>حѩ1͒fX9֘&YF3U^FuX6m]}G1Չ93 |UҪU$]nnCM/OS~~>&   .y݆i񍪍&v\mu:ƑGLMv|253Θ՘lOv19|y-Եl^Zä́UUКij}ZhlfSoV6¶vʼn伲3صs-[{'BCSGhGfhgWΣ<lqu%V>svu.֪MZ26,b&*4r**4j:*@LMLyl,7*us\m|GD\bh$jR|Robrv`NJA0"`H*hL֧uӗ? ͌]֙ՙdKd'eo޴gTcOQ{rswol m ڳMu[NO [A^i۝;OrR V (m? Yrˆ[EEE[?Xި%%Ga%oDDiNe̲²7Yn\^{p(㐰­Rr_bULp]u[|͞iU-x4:zccǞ77Q'z̚KZ!'lsWnk]8q/v=s}ٚvZ{aԱC) _}ABEKr.]N<{%DƞWzuW8}nX8[[Mowf[@;]wv8d3tyoy02*|`a׏2-<>+|"ߵ~o /ۏ?yx??'󟓟O)M5MMqb݋ɗ)/f 櫳/ M^̛oy=}na>|ZZ.V|R?B, bKGD pHYs,K,K=tEXtSoftwareGPL Ghostscript 9.22_ IDATx]$uyjvWuwUeՒ%z%-[cfƶdYz1k~ԃ` `$x <czv1اZI<00(䥼PV%lTWdVufVuc"3~s7"2_;s=q#22WȊ(@RT*J|k[q2GG={#gੵ`{p6h#xP<ܕ|.JRT*iU@KRT*Iտwxy=tf*?ykn{,> Kg [+mXzt zK=9@[A>+5O㼌͈*[ېs|2{peMxc>x܇E 濝ώT*JR Z*JRB߇?33GG`Mo^ \ P?a/߃R._\ކ:0?`/,4&PɱG֬wM|2>]>mt_kcx?._ {CWm?g,pP<=sMRT*jRRT*3}߆܄Ky;?\<{ʚ-TiT.@2R@4oIW[q3}z=߫ʗ,? |'KU7cWT*J IJRT$ g#g`ǿpEX_Z2Qmhxo=ݏk`Fe4<x4ٛoV>P7o Uwow߆+ G8l^ل~QRT*J5-JRT^+ʹ|2}x“?އ9[Nq; ϾY(v5n̒7"<(P꒖a6)3Xc55H:1gPOۜc"k}{HdO_ҿ1(RT*JJJRT^{^yjAgxc2j $WS>seuUfMI|:#,,+̜[o /^3K՚`8@y>>gt]QT*Ju¥@KRTSvwz 0L d- ˠde(k?{|y.JR)RT*h˽'.<{{p󝛰tf z{yUSQӫ㬄^(j{7^\]?tT*Ju@KRTv߂?_,Lml+S x$![Hzaإ|õ_|ó\2׸T*Jz@KRTuم|/큖+ :):9yo@>ṿܼCQT*KJRT-ju5ޫA- *Įݔ26uغnxo]9jqh [(~4|_ۇSlcޡT*Ju@KRTo޺xNU3ƚjSm{>p0T>*.S0<qmͅ ߅/˺JRT-HJRTwW.k[AoW.GA0^x<VBH@XQ[eUQo'oq-̜x>nކãCgnRT*JJRT7 \ByȊ85߼#M1{8# 3,ݗAh#³_מ5]l^RT*F T*Jhw^~e-܀K NϩP}`AOWhw2% t:lz=]KRT*C T*JPk6^Y>tr?j2럀j[z7ٍ/zo.-]g?fpT*ꡖ-JR=T2jojýn*giFNAX,F;j,gO;뜖ӵ5G9\ksJRTIJRNv܁=߃q]1}8~k,J0pdž 3ۓw0C"&|f|7;ןur>ԧ[ARTE-JR*~޹ |OH18Y"ƞpSrذۙ7Zb>@=^;ʶ2f&Eמ\ ~q~~c^>T*Ju@KRT'^Wx'urYpS~u mᩄ0YEҤ4[ Z4M^>ڏۀ[3K  *+ ۇao5r/9*JRQ T*Ju"[|&\}jAa{hLQl FYL;љC Z%QXCY^rx-wLerJ5h@S}߁O=){?gJRTKJRNka٫&jq~djU0{"FHH3ǵh }uwz#%ؚ>]n܆/}K[DJR)RT*jve bmRlm?f 2c}giF\휪ͽA7~Ztu3E5߃s-RT*U{RRTmؽ {^ؘz[_6'Ο=AsXv0%<ΙGzVSni:\t6?9PT*J@KRTsWap_!4HkCć`Ӿxa{}VU| [8WF#X>QdQ;4P->4w:A\n?VRT*<@KRT3]x͗awQ9ŅXh<~<?2k:E4,G`SZÙshQ&&Oj:nz7,+ЏacB`K@;EO:oz혼QqTRTIJRf oofTƒ  2a7ֺlT2* Qs`SyPK i2B$ԾBf:jҹ%߃_WuQyJRL T*Jՙk-ղ0bEBŮg( $5\{)uj7;ͺƑ X!yb oWNZ_u;A[H ;d߇饩`Kz>׻'Lz|&\k T*JչhT*UqkД:K+ Ýdef¤Qz14"|*+YBvWF@ӝSy|֒ں!Ku>ʡ2>!+& кeTHg~ xObͷoµSRTn@KRTh-ؾ]?,DT)(?0q;8C?rrX[EuEerK rؚ4WmI<0|r>YJR#P*ubY`vJfxp$>BFz6['F׬ԃlG6gJRNhT**[۰N6,)‘$/#Yu9]Iz,ĕ_Z+(RT*H T*Jj߃7wpAlU{wx ,%v(%j5)Ŧ3w^ܐNۆ\r DDKaGi#ERu?hoGpz[*J"@KRTom]+O dڿ=0k5pDu#\WAf.J|!sg0Kupɰo1ςيȲ#-LB)?m`u9` [RT*W T*Jwva| GSLyOz[[B~YU&zX ~GhΟ[š  Sdؒ ,MGTYͷu؂::l~d6>n0*J:RRTvo [lcᥭ鄞ᨍ_#mZhNfq r=2-`F^>|x$L"t-?Z=92 Q 42'06xĂjMI5 FG6au[*JKJR=dڷΜ۔CXnژF?Hfl<) xڅY>o|KhMka+/L簊ĀɊ7;} !l&yK]^Q&YT DqG^ӻ돭#ҧ4T*J0RRTv؁܄=rB&[rZه?Uی|д4|?eKC_u33u\|1fJ?OKQaMdF>i3[5χq|y݈(V{oA-kY"4(sefblYMbﻪY[*JHJRbxPXMX,R*>bڥΕxRH~RLI~j%#VT7p-H?DtWbz^Jlo w#y޲Pkߢ(lJT*-J:epvx*_6!SY!AfQ[>J",}}YX^ ) v#$5N7[ۤO*G%z*_­.>q[YdqqamNdlZ[*JuJ@KRNomW0R̃LwSŬeE>zl4PF# bG$5-MH<3S87 ?tYwv!&P"j3EM%cydq7c:\y l~t3݉JRJ T*k v_㥃uZ]xbhd1mEN|#DD?6x g)q9x<,4`E9 ءb0x oC<}CǮ;QT*ܥ@KRNXm\OQ6ZB^\6Ϯ O4tJײJX9MJi/>dŽ 郎L?FF:Jܡ)~Y17[(J8YVW10RT'X T*i-ysǯhd5W*JXY*kc r=+֛MMFǰnV@*aIҨd.eմO1"[{C8ymA%:6%Jib_f4`~fկ;M[*Ju¤@KR\մW ڠ= aও<&] 2)u ֗ vFyV5+uh|RA HxrNUF_4gJv' @*I  hEA!EC}HV\Y8%[:QRNhT*Ղjze hޔ7U7i+ygv/62S틔}Au #H$jx7)Џ(G}޻˩3~b"1R,dO'`eP#;3/6q2aYa$s-JZ`)RT>@0pwYY >M$] ~2 <8FMYQQ֨7Y`ҩzKkI#YvV(6Z'YߎZD {CXq0 []>N؂FmLpT &cA-u+/<7XT*J%-JZx٫WW:N1+|C|ee1scb8'f[݈%IQ::eP\kt5Sqj/55J,H=fG#ig?(peHZhj"݇.\" -!T,/K;U)ax#Gi(?e7KRT $Z*J5G([>YMWy>Bp20> Ͷ@yt)dQ f/ʕQ@GQC8_<W8dWL%awVϭʃ'[dqp)4V& sѾq#AC = W/6/"r-1zzݢ ^]eJRI@KR栝7wO^G9\^Ӏ# vBڀX)+"kpJZ=s :*I`uiI?I_*tSCjz6?oFTT@KRZ]kd@Mu'S|nZY͸8c N !շ [ ĚZE݈ߺ@k|FA.rcZ C "oKbuPjW{`+q!JB[wVd:[*JնhT*UC%/.dMU}42[5=ļH^=Dl, IDAT{ Ȓ.bt$1]".S!6X3HɐRƺkj1z]H25=Z] 0K3RT'_ T*P `ɝ% $eÌU!ieBq\P7Fe $6]ʳkb BEt0>|q..ɘJ{aK!47߮ꮥA"<YEnf&B-&vf9z=[*J-JB‹/@>yDWo؇!EIքy>uxP%{`BB0 GY;Ki582Rw[Y-o[qYllx")}ªJ{ڡX‰[I] Vh*?F-bb2 O4 hf׉Rێ/[*JEKJRھ ۷i+ycj6ȚSXT&[17{S&62-XVŃ)I8 uJS 6jNH(,2@naWbYe' kaEdvkhu[(bV'[.X e#.7dMV&!G9Vڍt&ݪc$Բ" @y5Z]iۨ5+:~{?݄͏n\RNhT*to@8#*2f@b(ޓ#@S?WSC˒)<Э`Wa'V}M0@ؼ\^#'F p\zjg8ȹi| #91#Pk0h\O' l2dl&)RTΥ@KR=ze vܡ Bv8MaJI\H0̮ tP+zC"VM,xؾx焊6 E7_5٥SteV VfSbT`(5co :ZoK%p%v\D&mlT*-Jj6l o+c7 dFI~~Co3 d3$B:^rZ%_^q5)n8Td3PUe Ԏd q7GRɅZC70Pˮ9V.31 حR.1!ʇ9l~tfqT* -JPi. nL$"vYٮC|<=&10 9QM ̒LK ̊Y^='D&ȱjfq-OUR ǫ,$j )9Mnq@ 5fQV^(CxKj!1'.:tk62> ӌ-JpIJz({gomnnB;YW{0lel&چ@ߑ͆EV#x'cjC A +*k5?8:latdk: (qE<ȺP$<_3Bj$֊aExP)*cWڊHRZ T*թ of\ajf(:jZl(ia&Fxոpt'dU0EǀA(wDEcTXtz8Y~FTƲ` W&d~,eusfESŷn~ⳐQE+t2pu&\y\J:RRN2d5m۹" B@_M.d@NE8a:<? fƃ,S ,t(iy&wSS l#Qj6]42ng$BSjUp,g!x$D).c޻ =74l“5.S)RT] T*թmؾW*j03a3FG#X>Xj-c1,]HYxrY{pѳ~[gIV?l057$nyVSߑ&N3maR=EA)1=s6lP˯Ku1/1,=7Cz=jp!,]=21V]fk-,"oRNhTS \\orVYA/s< o% +H#_EAt Ԡa탆Ẏ6L'fAp<s{DM- n!AOnMN;bD!اd-뜖xK+F= 1,=jæicZ(Sˊ{Z|Geq5x9r Q`k}uy\m|pC߈RNhT/vEȚƱhYY,Ji0<fvtf`p45fդ OKЉT=\\F H&1& ]}>-4݌ ,>)d̅WC+N,eݔ#ZhQPntzAaJü 74yHfnƩ1JtPv tJ:RRNv܁[ېrCUdܼ18fzDf> + 2xOae~I`OЎ;H4&"^&,bi`w5m>82a_Odg[oVޏ4 ?<:V;+ʔ|+#票^چ2-ӕl )h3Z5LCGBlǍR=0.h1a Qr}PKЦh+[KֿD3Tl- [l6>h3CX9wQ`I$kGcRza;*D( j9="જvC7.i]jyaR>ʡԫ~z$W,·Qp'kl|w>EmJ +v>Y[pGC8,Nrr[(%/[$Bv]eSYS ɬڧ'`/{?8:@@ 2j BF803A'@c'OھâSs*/ë <HCxd`,Gw۩ Rs/SlKejg" '@/r[:-qug{8_cq8ـkT*ɒ-Ju"䭓5Ì$௳n9|`3'"jhXN5cC*J&l *\S0֪3L.g fY-@^Ĝ#΀b"vׂhxol1m&l hBQ}<@ӈښLT kptgE1(FGp,@,Eq:!~7?6$gk.\^xsɇ9Z*HJZhمݪ ? j&^, 1LYoF T~7U)evrR&ߠ\xZ R0E#:?h(s->;­)n+Ě0@p kXt|°iƔ%B^Ζc8!0RWf}UA-lnlQP U ͦ^#oCϺTx֬WoT*KJZXm;oM,`֬YƒvK MyOq@!"! Ye,GD&Y΃,fQ kxD,oK"(ɴbLm;pupt+g/pBŲ\쭂+|"![P򻦲0g; wfP.{0S,|b@=wI߳V'l#&l~l%*JվhT]u*e~Q7TSv$,Y<ȣA.ARGͤt~[*1{MByB^3ց̖h{p,JRM.`w]vxanb 'v](ZբHȏߨ A-ǍeZe*#gdQ<Őލ|@&N+]d屾k T*BJJZdj*fU R`Vii>1 (\%4YdЙN48A!ul&"' _r0,V/Tm( C+ŧ=/qwn:K BzEf ECa5 dMeWP 6iTU"Ԣ}Cb6,Zu[n4DJPRRB_^b۞1RЁ$fBڋUc뭆w.s)fEjlPWhTSO8w\"A @{N |ʨ@ HXAaB1!UB-v(ċy+x}BQƯM"Zu /vԁJRIJom"uud-U%PfLW$o<+bA#`Q9PWTH"2F,#H831P=BO{"eRi0\= "zRdj 8f'm|QTK͏mӛ8STD)RTsQ5^ysdEC 7uYuѮ Dʜ ' m&l]rdM+E B"@b2@2N Ͼ]O (ˆS e$%Zaz+ڱЈpPFvBeA" j!1֠(77:u3 *l*xג󇭒5 `9V.wOU8 aC: QRO T*̵켱6䟝jdM"q.T 8136@P\WfU 0k>-ج&fXn`V[de%,EH7q9<:)L"wE9Ll@tg!]nr6xK+lx+ ZhX§, T5`L[]/jdl_/~Z!TKJZKA֤mRoNӜaZHpneI`/ _PNfM!OY85ɢ42~+ ,.H{b!2c'/8 .JaV[dlpt+gWh\ßl848:s+^P6ZVj> gC !uW)cƤogǵak}=EOS4u` =a{j%) pQK'pVRThTN}k^قRʲn k6F UCfUv+OH,@!8d^AD@#Qּta8)fUp@m`` (Ӗ:7ꍃ2; 邃aUt8ӌ3u<+8<>g/FT4~m.lTԨPj XYZxiz 4w1A1ֵ?|%v B-E4*ٖN*%O*{)RThys\=$AU%D*$n(iHY-~+2#ZB+95Ua{]dSW|̎=<*Ԋ]Bi+LU r0_}iV4l@ŨZ;Z"S *|?F^%:odD(hU^z!8r8 F! h_{ $?N]$EU*URRZ{lVuErn7i +л02d0k'{z0cL|د 4[0dgSޜ̬|{2H+`ִRr&c@cZnz^Mǽ(BE<2ӥ,gNPy9j< ܘ k˫}(c,dP;H<stUۗX}_p\,ǀ[󿪋ƫTv@KR5]k ]@Q7I0BeSy"YVӟ1- z=AeO ,?䪼Z(lxhf Ys: Gƪu11‰lLPBN{1JDjaa!`s\q@Tضjyabm|ϖlރ'"j𸂝V.tGqRT*U[RRuEYT fQjl D Т /\G/Lf:[X䍈~T<rQRx4N{?qG?[3ڎCvצz (Z-AfMdnc[M7V IDATݡ;ڑoDwAHwfM?GPѰ ,"/Ԃ/_|CQV kdDr \w" [$2UJoCjzִnsa"͖izj24Mc0kJJJ"zVVOϚ -D1eڐ0Y$HOYfeT923@9?a`瀋6y3k.$")r-j!^+S>5wߎ+/jT^<\9 ;h˫t*`"REñ0ƎLU|5Z9<5fqcbܧl-JJJBzVV0j-3lDdddUЏ]x,"q=tZNd8ؒ3h;00s1[':38Xa#^E,ET:HډkY` O(jHl^F8ʑX ޲E-| Bq1>bc@ M1h^!-(Z|/vJ:RR,u ]!s107!̓(*_[q .qj,a!QmCra[rAdZw>{<$$J:RA-G{ B2HƐj!`!n(28=vZl:ZPPΉZu&]j#%! h5h#7fQh!-ؚjJ¤@KRUze vፐꠝEAV0K$fdP2?xdE) $ʛG,Ie upptb1]*gYɴ PDΤגPF7\/Iȁ{jpD& к‰WϢkx1Vn"c[CfǖxF)x$A/udEǹ%e:fkT*W T*م[S C0KtF)̪KaC%s.hٌC<Lܛ5JxC \q0 ܍W\3\wAB9a< s.Z'& Z{1\l~$Z({jynXYZ!l1ZG-v/Z2'&2qƐpV85Q~8ē0'6XiS 9 HCm>Lkul|hŎU*I-!mmȽJ@S" IaV];A0 [֯ , eApkcѰũ2B͈j)gV  +n{ \Y`0hŽeV)+'L3cZrMi *]U`"d u6oW0TQf$I9>QW "sU1YZvLhk,bOz5 gHC*I?mgwRNw*j~uf Yr#s.0.h;o܏?Y-, D0*OpI;MHW8[97C7jʱc@I@LYԁOtx|׫e/{|jamճ27uΆYV-1 n0j#*H>*;W'n~xG{ zFQ?"z߱ȇx{ym,ڐ=Evɖ̓v~:d7SJu@Kz{gM1 {)ȪmǺ1S|Mv>ʣa5f›O*p߈A~(z@䲳bbaxkK=NtP U۰-WS2j2ʜXrCxwz$ UYd9,Z5yxadGbǓ}߿|"GRã0>0aFɍ)'eWk ueꖥ3W'as_0{KӲϹ(lǭ:o~7B-!N9T2/@>rnr ߌ+B ^8ێUy\x}G{?ك+O K7!;N[$4nm,0#j Ϫ@zHKDMM+bȞ :991ӏ"64W1So gn%Y* 1XkV1ӿ@4.۽ID,^cbbBC;uKkhRhhM=dKZLTF5F _#,X7,j6.<ϷЁJ:I -!]?=fx0jrϺBd2}l׌壼]?;1`V($CeA[iYm+2˄]#SM,¬ ̒]^T8"0B=2S;c6Q=820/O^6)S#srbua܃1~ؿc82:nkqt{So i7KDȇ9| 쾫Z*$Rm;o؅*djE=~&oj(wF{* @dv}>24C?TYe*YD߷c`6 ƫThT\_U@}=4YE0Ƴ,oq%4/)r7v(%bs&i6BJeD摠-Ъ? xӁQc'0-`̱m06 0/6_iw)oJ*B ?<:-;?&(!wvJ}*Mo)~6[A }|m*Xe?$zO/=[[ }:Ʃ@U/Ӯ<9|hȠW,t3]c0ͮYk22|]oWxBY16DHʎAGQl{(2$[+-WO?WPRV)RNȬ,,f"i wcuZX>"3YUe"̚Z}{ 3"jw{(2]$W {|1[^e ЪZb%?d Ӌw{6aW ?6“d=2?׎^E1^;zק8/_},[&dHPpHSUw0>s+HPCy-<&(3UM%Zhp@rO)5IዿQT#Z*)]ؾmì7MfkڮR1B0OF hY9(leٖtMI~ ,7†@.㳳(n_ CQoH&V9E(zHO`<3KW*eoEBF,Q(cvׂZFn hKܲvkl~9iMsu|L YfTNH&sF·ERb2\{l|hpT*@K:%ھ m6mìxu#4Zr \K[ܣq*Q/nx粋0p Px%Z`Gv2YX~9ȝk~Lڠu> < o7_ Aoo[e\MPJx _S (B@g.B=L  ul{Z> ύ3q^USв,"n}BOx3S6ބg6[ GRO TS v!& < z茣NcR;p9 IYCǐxK(bP("`S.lVhZTaZPɡ/o{hW/A׎^=$j!C06c}$$- j emX)Vh˫^9 W^P-.p@ y6,x%vm8F4iVSU#Z* ;[MXc+knR~JCN `%X5H́{%VsEc[@G G1qAf$Ā$.WGƆwOyc'/e{u|Nٽ`+F]J)6)hC xGmSX<V]$ sܲD- 29cE-?~1\8GX4[躀s퐁ftI}OEJNs ƫT'] T*kaL[GN}9Bw0p1gVJ$SC?HaAzF`w(B #0 j) R kOàf@+w.%iy3Rt)RN)ofMˤ7!P\ F͆a*0 lSTy'"NH9@k0~S̵sƍ;hAFUF V Vk j)j  $ 3}ha Zv)D-hU-G0B )rG37~qoqGVCOo|6JՉw*J;5̚3(/],|Ƿ?MrZn YDN1"ө1Z*t`|@goߪ#q:A/ ̺{|7Gk!']mJ>#| 9ю',33:~ThYW>v#/) A fUVYEkayiG]kW~;?<$JծhT'DwvK7j#zFH U07MQ$i]\|~_o)P9!YLq njߝOi}'w,yDl谕6RgKM ^1Ɖdy"a 1($L^*_P/+ ٥w?(9 )4nm+@ ڶԙ j(d^Xdܢ(46`vTT3N9TN^x$0޲sa@VD]>/ҕ,sjДj|DB`I"P);6>-0pԸ̬ #̒xPfhU!"޼,,c2!2>f7Bm<8[19Zǂ˲o};J *̏‹\lWX6fPwP@%-HH|VN Ѡ}2Kkmi+"QHYv9.;'JZ[uX1[b} JuZ*ՂKK%k6HUvd,W䯐5.fs}y14MaV3OfʹfNfh0"}5Ym^?޴ENEė ƫʂdxScjqvuQ9iVӿ6vvA؃NkoֲR%'Wg_(ù\uR"Z*Ղj.|J)H T(8siI@ԢC,)!ğ]ǰkp,X<"=fUr6N !`:qZ>u:J@Vv?hK$SV΅׽DTM9T-u.ujږhN[`CoDo2/yl#qI᪵Uc--NaSx·U!>d|k#FYGoh~{w+R-tʡJze vؑ\gES٤ʴj p;}8i߽G.#j3ى~(# +ϬM&E]d1~(F>ChaScĜāA—I>X&T'QiLo_׎^]f_߄?|~cDP:[C B/hۤ J ㈜VJ;fъ'x<^[^vm5:۩M~2So{NOGFȵz}. IDATxt=7 UcJ\O_^uR:-j{g_*2{{zLVc4㛘ىXb=Aח`]uK)/>E >W( 1X0^b9uq "Ǻ4!eЏH>t `&.YPtZ-ʌEl(IY9{^y(.$* Fw-%s-,!(+@;fGgŸظٌM ԚBPປ:$KNjmlZ*ITsmmqV"Ʋ0E2p^,m^4kB5aѳSlbz'=f;~FSj*dt7-}A¡/xʜ] jGk6ի;?},]l_;zYOM#M}8'>EGpQ Ή.;-*U?acUV Id,7/7 `ZN{h]( 9֢o;'YP8&Va";BE%9JRRQzYBm-ga1(iN-Da P̥>v{j h =D-A@˨ΪQt1{Vb6dPH~4 FDąW390J5>okG<}OҋƋ`V PUgТghM:=Es.HV (gvA6t-B1O̴:i*Ztqwh[bк B30X,{( 64NԈ y/PyuI $Z/в6 TIoxpȸq~QkkpE K;'fdna\6nT*X TK)2%YT[J1+~U,eߒƣIvXh 5\dn EvZe#hqkV!ޑZu'n?V\Q2p(6 5\*|KPbԚV_# gBee!TY)QnHgDkT5F}1/ ìZ.8rU3ig+nW$.PnN(7[ ѽ0XwV؇5/^;nt :3 ᓐx:RT4CKjAwvaa^Y Y]-ϐ2JUfYՑo'cbdC?QvQŷGe`hL8;͐TibOix2bpXL($ ˫r 5%14vNw ˰z#ʵ| kt¬L9D.V] YT,puPͶX -15v>n}ďeʂFݤF|EN9O;:l|xCWZfhT {g_-aUj0!YuL`"!:T/!` @>d`r@bEcaf[x_O+*+ íӪT,NԎ;'y=]VU0T_>Yxh _8+k5KjQJ>V6E72N5ou}|O{w\,:QT T.[a0saV?؃¬݅=lrad ='mzג4ԯ-2~uyh!1؆=0pD*i[ZְLJo[VhSү5=n-X<;;)ϐ71{Lj2|FybuT~(mx޻-ica CTUcKEF}G@/ =t?EM,)b{dQ5#Uˢ :޴4E&2  _Gv?@ ّ 4x$Ƿ?//&ՉZ'N%2OCܽ'&Bچ(Zp37FDS,"{Ξ2i~oڶJl9TICQTy]ƌOޱOp反 |r[;kucD'::m[\{#!ʯGPmp!@0Fy3fCv42GPδBUi/Bkxz\ij$T!~4 ~y3YR+lX[ N k(z4Ėg1߀Atٜ%qT ^K%"|5R̲9dYҬ54Y9X$B2--ҋ,Ll537q1?->:*0]Kj7 vt,G'::5p9+ZKQG'ZpM:2 YITaL|Vc՝VdNzA5B(s!BtC#%>*飑E !r/oW_Uؼ^Ng#7m$ҧI@;ёTkD@К8GG ">#2|H?^=cg|G q2P#j~Gl f2`3mqH2|SOfڧ3:qQƁ~ʟ>/hDfy%[S}VvF1AӌF)A F5ZjD%=e5W->q,]qsqΚPKB[.Y,qT|]n'-u[ğ8UL<:Nj{э/Bf S a5NFgcүg2U_ lrÁIm*]s܄3o"r4qwȧkb@)Ǝ4Oj%d kMcO'^|e02IܔUx("2+Y (RmABSosZK.BJ7ZF".%T{V1,=xլgaF/hg{k|Q ?-[y .v od`d%|H2똽!Y[URFJa%7U&.mQZ@6Hd pH+r -Vi_^'guBK8iDZW1R#m#C}n~KKIAq Y"KX|If-,(tQf*F_OfڇĞ;V% !t%( IB"Vt@B9'x>O2?R#ہS.FYYY -<42+C{ơW~mV> F:juDONrC0'wMBDvq">qLq =p'1Y??W) c l3E:xl7-k"*it*!ɂlHZ=-[5E;N|]C }@9Egw븧".<&lrvQqߊ$Yg"e%S%qM& tz"];aY3!mHMAcIvsvu'y;ǩ?}2;OP_ą ҉qT,6:/'Df {צ1a`2o⹾ն͏)¾+$j91՛p1%}H[ͤ 8Jn K )f,`SJTʈR2c1+z .H\ub$_kqƪL0cUHuTJb~iupXf)9F;QbLr4A=C'::tBɰ*Cd"W##{a"'b+)U-rL#sKj{$>HARj19뙩f6!;.ym0ڦyykxlگol۹}RcJٞ{m?\`Z*zp;}ߗCLLimv܀}./9VzIC-O,6L ~VQUFSr&*|۞rSHnJ^w&5"}?oiy^e^<мrdl$Jٲ61%^X*C ׍`{M GL[I \MX"4սNW/7օ_]Z :1b2Kn=k}w%x@rd3һ ,63O w!b5[S0kM,bJhBV`j8VGy5M޳&/O"" ׶D\OМ/o vTT!mZ #uxa@H_U}z8B KF.!]JSϜ=CkSi$NZ{YY ӏ+"PJĘb{lhM$lY(Mk9v_N7Z '˟]›,on+9̂Ie[MOۜr1h+-tȫ'9 +kL^Yl,u+5+*z+*S!Ě X<zhRIZO eeųa$52+ö"jS;aP 'K=a 6jؼx~s̸(,>UYƜsXU`|Nb& bk|w\ym,pLY\~) 9ψV^(L?}l 5-~&zyp yvX-nh+H$$ML2EaB1FxIn>;}\7,#N&8;/RPEVӻ0wܗ$\"`<6,/, DZ#-rIz =9Njuo^`yK/\q]\ ]z,7T)'saBd2󊯨 <3=1j7ibjg#2a,y&mSV{8礪eq]5,GtR)ZO,3ZX,. sΖצ@K| $^jܓL v;x~1jLz$02 uq>OR2ӝx ʤl7$&+R DF7e j$`TS/  -\)g9د%2]VR[s\QBҼm~TWiG[`xQi:k&_[^+/RydlPIsuKd쒼Cn[4}4[8/7DrxjVǣ.([U k!<$9h@p\r%aS׼by*@B^RW)6BRx= 1"s`<8n(Ѡ$c|JwN#Cᙜn .˯KHޮ}d mr9%Kr|m,g/1KLu卨~jOX+՞PW^o;ĉgNa!<j%c`xt!wjfk|?ԏg'0>prfWCNju<%tBQc"0B oz"%cᡑY-{ ރY@>ifC{UUdP溎'El U-j\<oCh89+puo¦9=0B4#+KB?|!15i9Z>ɨ -DAN/H,\aQW5pk ŘWt|M#&,$ .KvmLD,>j Yɳn`W59;P`Ři_)6+@XPO0N*b+wRZG%"hHLou64ޘp?X*_腮-V"f7>~9 V,Qԁ2_9-8\jxbl& 鞶9Y3|ZbCB<H&UXu% Kw#u{gIWh݆qJ*X!j6Qꢵ/df&d͝+II}dVվ,Emv3te.POx|e冫)1_0AZ;_x?bj|])fE__|rt•I,`45W4sYf7c*oѭʞ/rb6X}|KHP?| :::%e!-0Mf_.ߛ5K Ns,xu_08/Ij{S±ʊ(%9#s=˩\ YՇN%ZGq,TYyw#?=)qخ5SDD19=ns!E{3)2~BjR?Bˁ(bcgBߦr*C0U ;-mHÒn>jj3\j'qJZEK}QtNJ#+/^ &ygF)"8Y09Zj{qrGINJNhu<4Y5h2p->_DJXqWwWU}5t/ k֐Id検5iL#&ϟ}@Λ#Sh)VTOqlZ ǫ";?3ILבA"JnSo_ F%P8?+X'&j-gZ&)w V[j@3E8 ԒQd?ԟxq9!ĄtKVWa&N4OmWjɽuǻ+ VcD':BdVtXpugsox11Y=mVӶૅ i5VvlФؔqbγ0e-˝JKZIç8`*M޸c0A|i% 3"G7ibc!>uխ+9w>6Gukے,<ӽO^oM YDT _gW̯/:7H¾HC`^rTL&^Hd!l{vay8 Z//K;tc!0'_[vuR㱡Zxo2kI|+NdBMY&"T0SLO$7b虵%lY3Z<2dvyW.F]pYj^hGkMeK=q72Y|:*omIDŽNhuTE7ku`v+N4U^>fH\iռh"ݣ%]ic6R6CR83Y*c~lq˦>aI.Nju<tBbe=h= P%8e e sF5+' ~􏺮fi <=/=:l@¦TMY|z3 Lv'W2>jaEWӗUx&eQ LgMo-im⹷ =AǶa-1qJmaIǀNhuw<  4zw.^MyUv DdՄJ+MO(e,Y5Z+dNx?q J٪/4)h7+,sOsH7u$~s!&˳zwBl[rybH{C.7ۢ&Ew93#c, (%^t"28M9ᯐã]Ui)R:x>MygX2~3.W'Apws{^n)1`Cǩ_7,T(}':2:W2 ={`Jgk ֐YکN^܋yOW= mN 5^D†:WM=b2'U#X5Ke0m3y8jVeL,uvͨ`s( @օ-{^e3}u7;'@_EU$$JS_1guOz)B*+Hoܛ?udټ"8g-38.%Ej-x!c3ӡ* lZ.Z:3XoɕYlR2꡴y[= M|DHr/ըtK; !riˋ&`N}_VCD':VY]#Um?._,|EX%ӠyYgO$VPipn5|P9GyŎ;QlWYSf8{~& O?^G}_#'\aNG*IBgY[DuR\>Oe">A [B*Fw#Cn{6_t('3@BQ3g ==΋)Qᘷ^3_v-{}2BrDe bh5Mq-r^MW7WK;}VCC':No߿,[wgx \ݣmK0^$z!hɷEm7dжn NK&sӧ:]F‮B!}|?"3u[͓+#NӖVZ٣OΜɻ^17\9e<9I@*u.s!g"0%8u|vNΟ۲BƧ8ۉ8V9T-U&2ܔZJ9V?gz PfW"B]<ƍI9_Uw`Jz" 4_y+獷_x&Ycr`$ BތP NdTU `2rMb&M!/< R$8uV0MEuD|r 0^.<,Zm->8À]1`/P/#uR odGOUX@jC{)&rɛ, +DleJשSA{ODixT)os;MLI01#2q)p`ޝyW9~39, }iΞQ,kL /?y˲tbD˯s|DAsTVgѿįPVi-f )^J xK97oR%G㞅If9{Jg2"$gpuLD}2e%LfB=ʼ\ Fc>@ ߚ\O<5i׮x:SK|[ƺrWk ӖI˟^nLGǶVI"BfAxv}DłMпd)*8{&"զAX"Y +E^ꖚl.Psƛ١BawMIKO=ɋ14:X<捪IT YY)7oHJ5?VL᪮vE&_}ˆT;x?? M'# =;&eZXjJzKjz:=zQ98>IsͤnsYy+?^evew-{^W*z{wl;wzgx9u0XCRo2Wu۪*gi=/7`xj;81.nQ /R䍚R暉On&+T)LNy1 \>jDr(=N=;o38&gzh}3CUZk(͖_ZR:Ue_6yW~WI:qVIjyx: E+/>W&mSfEWgm1_5'wSAve$}M fƏ:auV:&weqCUM}'46+KE2!CB IDATacRճ!<1\!)& _ZlDD9;C7GZ<Փ5OV[Ϗ<4|u&ܖh,雈溊}!ǓjCD?s뚴ݹN,+ \߭<9ɰ69TKdkXy[+%kg(Du aio %?'INm Vee VǩZ'/.Ȏ5>{:ڀ%|}\=uY`*N*1 ꅞdDzXX4̸5Mȋ[2HvzZ{yP02G TZeC)Nz(AƜ??q&Nr+wB[xF r$̤)^6¢Tm۲,d`}*,io쬟N809+*K/o}V ePv\"a{~QnW ꭙ:[ G"̈́sah)H9`w3ڕ^AѦ>_`Zanӳi @&no}o2%o~ \r# e͎C*#9 &WV1|mGYN1(KDݸh`9xDfu9] v=rW RI! Pd$Dk2ďZMԦ|I80:7JI9܃$|HMk=kbE\)db4H zMmn^>UʹC>Yu2%qĢ+s 3Z2ݘV[[M.@cڨ=:._?o?8 tBhq:s E>fhQߞG!ƉSV 4N;PE82yX*g&.F1?$u?k(+OVĔ.dgtzc&&.*0|ɦI BRXw92] WMf?zJv"uT L1qix) JM[ 2De@EW67*oB敾A0Ĉz^Dq8p[9'Qp- uAll@򴶒q Vo2˚0x254: t"A#:%K}RT8ȟ9rO* u,pul{z+9D>6;qltB(xC縔J&ji*~"Esףp gB|[f4`"'ekD'#A*:mx=@ .n*sm%Pk,PE:_P2lkQCOy"~a{p! }}>tݵŕY{}ˊ'V Asbϩzтv![FT4H&U"\.tdv5kPu,e-mdnTxyq\Rº{rXiՍQ=}/߶9ѱ!:qp2V" D`0wZo5\f,Ü&wnrd Nܺ̉de1yʪcNJ-_(G6y&"BJ6{y"7d+ɰ!V'2.:Y\:hhUPV1 *2Z k7PTXj}ϡN\Ƃ+bgօSd5YO o%4J'Z$Q)'ltVe@4dTi+fe?HLB!ؕaܒGE}0,* @0+G.sޤ-ǹQCSzyv޺hgA̕^hL:RhS#TIyye /zYY_t]BXћyՌRMN/S=ٸ}3<$5a-l}A))Baѿ"\; G6bNju;.܎8![`@tZ ym.h],z&gqBHDsh"TV_OϓPG4Oʓ&%BqU{~6͞rK#$K!.k^VPk *r>\U7BgQko x`h~oCE蘸iՆUثQX@txX^a$Z٧̿\a73ZhJ:b aZ|KkZ^O {;s)=\#KmTH~P|ǡ Kx7t;GBtXJF"1o@z̥ Jz,R߲R/@]]VvT--Z'1swՔF0'X"%<}6 uqfnEc[.?$&o_׬@z6z/O.[ vt,B':/.[-9J}fy\ݣѠo~<Ԟ{ž}e0o7'\ EQ.PҲz%&ѦҌ]8W/i$5dJB߂7KߎeLd]) d 7Sd xƌM6rUs+aKkAo썈F1=qs5 )Zc ި9'L0سK37#߯Cdˋ^jx>ևD4U@opQHtRRkZMhp85NyUg[Xɔ$6[ vt4Z{Û￁O_[T"o`*:VDvx%Z&{W4Y~ ͉7{2Q*g'y[IOww;&e8&܂v*+48~joqqH93K>B6Ͷj8VT8E.JnqEl:ɥbPNZϡD/h~fȢ-%/;K+Ɛz9g*l;̄MI7,V9dT5tHLf56M/^ĶESQǔW7W~z xq%q-FӾRcV^{2$ŵw,Z/uQk {X1׬Ҽ7ڤZQ_^QێK 6U?cI` . ƼH{J]y st-Y

Wuډ^U`#vBŬx1&,bKX'S7qe 7,w% f,XG~*mճWj6)+)2[/Ss<l,{@_Iy#='i.!X.ӳY*Eq:Nhul{ ~Ag}8BJ- ۮP6quwu4#2g_I}\N 0O&|膾BƤ 3 a<ɯm="Z3?? ErO4`dj(¬@[_ehVmʦgT5"`{9 إ?8Ь\r=hs \9#JfL H=?SJ= 0yDV&gmEVez$t*FQي9&1͈ zL6 Wfu,gKr/4kg8xJ J):'͇C':67~#H\kx?FdVA[\2keSIj:jUU*A;̮$uL[QRљqX}Q6jFlHj&YMgmy}<>נNWg8`i蒔9so=7A*7cXClNպRϬZ~=NjulNhul/.z$@e4V\ \T5 5,ReBu,}_;!DȬ<ꢚ%D_Q W;IHNpmDR%y4cp2sytTH^! j |ê=<,Rg* 9 }W9CXI#F:eWoi` o V)/F+B"i}aUWu׼'hoRvjHĔḳsF^0ʢj:ʲ aI:3-?Ѷ.kĬDp1MmZ-V<5DJ( ǁjlϞH?C?$cStBc5.7{Gf,OcŞ &}}8UKToX^?j7=ȍ{_ovHj+*r6͌4n\ ۩z`vw|RZdh&k=Rg Lm{$xLʁJiUiogYOzՖ~&R$$gta-O!uN려9t+7t(@`;p!H Nu,ZMS,_-94Ujyf9e*4 Mz kroաCKmV~"Z9R3t=MV›}I UXEfY'wL۱hYE~i[` crt3?d8͠}|z,&E|Y0/GVƄmc7Iת\<;CTVf9qoj`$"sdR܏<4i$Bp52肞Oݒ/.mΩLF]qEmWXҼHXxJ1+~&LEY׳IffS'ى^8GLhˋVS*fd¡r `lICO+Lc2VVV*}VgJ^iҴBhYywXy@{#j h4Zʥ.[K*f!u:ihj\Jcc0obm_wxVbፆ埵՝ˀޚMVSy cN(0mL_qH闹% IDATkEYKVAHo+l܆I]}ΎAXgSiU5%y oj7k)`",ZaF3]I9Eк*i6_>ho]\Ӥ(o,,/*tK'=HR*g{դ5?|YPiKlTEG9 /F/,//yNjGZF':p%}vαM3ye;8 ݭ+?7- ,!t_iݤh,J.B$c=YO_IX+%iԜ)2ؽ*@Y5%XoD$;!a?\YT SѸ+aRaY7R 26RD~-!is_ b5Of3pڟ`TZ.câCc.,}GCHw[<>C?$c:F tuwKߡ|!{ >kxEO[eiZ<>̶yzhE Mb"̃V"f'(ΝѧD#@j$ = Ahv9Gw BB)Ye.SnVLU&'A rOGC bDٷF뎳d1%Tdk j-5-g뺩+Ԇ?EfJlp X0>9#N:b@~nyXatB#Bf q-[Ý@(k0aæ-B ,cRV4$HV2C Cbö\~Ci o4YU4H _|yڪ@/$&個*ҫ1 )*br.\)v8 N4~t]%|ޯo E4#cC26Dpٖ-Svo:˝lVzg1> J< bϖx`c43B^^67gd;wRz'_-gz??$.a?Nj؀L&t$Dqx7ʄ_Sg`< R&<|&&$c(_%.V0B||ne,ٚ(d.%YLnm̯A/RlMٳE.krqOʬ(<2(QYH ,<ʓ!b'PQfNH;H9l.{Qَ򭐏RRML(^ t~p*eD÷lZHYgIZUk'/ אYC-NX$|~(0+kJc52KYkLi(͚e}͎K|zlmeDu,slIW( 2۷a 2GJfu"1RumJ\ᮬœ<+ل/9]ɦ=vV]ڥ!۷Zq{KX$Vi}Wt+,p*sZ^- .jZ;ԡٵk#DQقS-KSu ˧=6Wj(:BY(zʎ-|u{€b$>T+M5F0M eN0L:DF(Ӊ l.:4*͞^ؚ ^cO^Fϛ[h I T@ףp˲ g1ǒFԓ0ɝ &twg`zY[$$h'[fiԔP ɏ9F9 mXCuY$Z7QxrW7d%dN?qaG 0q%|Jfi>'R2+*)Q lɐ`hw_|B3"k"68U!NscQHV_ kr MfC%$%$͋,2E:iT@.2 ]cV0GSx4&hS=BlJ؊)3WҘ&g, B~ tI3 4%ek99t A5S2qқY \c :m l>qC#oVI-"~,͇utBC8C î1dn4T>σ-dV\Ьj5xOdrDEqo!]WV> eO2~ ҀB7 )j}Nq@!\DXFjs \\eskc|< sUے-rɋC2jE6z,9Yuϻ u*gہl‘KJ/J1//NgI-0ا/j #ID&w,㉠ZoΉy\d[a^x$ݱ0">esY>QXh\B#}K vSɾ4ZEQFK6487W/iڐc<iMOh9- !4$;i+!vDʛU_hyDȭ|Ld|r _oUF␶>рo}-JxbTs9˵q׻uvor8{vlYP1jގ uAN7h[J[H6E*ƕ0WSSiAmf+y;< xt Iџ-i&[ZeW۔XY )5XY)qu{XZoI*\}ɴU5۫+H=Gk/ GdJhZع>D%F}y11t#l\('0 Zռ]f4iUBͳ TSU֗a"t3自 l{M/i4,mGom.v8Nft džl@j~Y1Ԗ.4 y!B9~[ts4 _\o4,(Vdǒ½xƈՃqvK:ڴe8P}hWK#]d74C ]"]ʟӡS!m_NJmYr6 )8vpZRk?xVkhu`<\ơ٩uc0R?X: b,Se%Sv]+Qg*=JcbNJWx[ʪ2!&##Uȥ Zel6=id,ab (jR޺0U) pL4??##Qkn3y%Oa +Z_I͒j}8*]6XY^xAtAbzO]/ " 7jzY,ЍP~ɟ]LcOOx_arLUƾڞ` ݻ jn}Y8ZNh=q|+5}(txR]-^N>G= uuQEN;[bΥmZs"@,$K M&9m)BD%PWIf6FyKvQ?%Emdсۗ +QaҟKH89U߭g㬿2ȸE'݆J,ɚ(}FާYf0dU$e]lowηeML1c/.y[D".^^+pUZNxŽAM[dO`9h*2hg" '/.^ʾ_ɐ-r$ NPh8<Ť('0Mטm 0ak!?XH=c>yUhR a5_QL[zQo;8CՅ \'V? ָ]v8{G}I*k6!z|%kBme4w 2 u'@d:v E95FDҁp;b&R@5"EoBD*j;sY72]Tƅ*BYN2S K7PXi#cF!℃l0i#¾Q  4sYm(%\%'%FG+?: [I U8\7GVd 6n'&y0l=Rɐ'#N,- WzOsgYIj%*>!zx3/ʬ7 Bb< k&)Mv|gu5Ӽ[ 3+]u 9ALDjNh ggX0ESnk?"/Q l1kZ(dj?/ZmFeoԗ!6MyZOzbr&X[+~;Kݢ٭/Mwd426e׿۫pDʨN!9wGҾ2ZBfqh`y^`hL_AQGc=Ҁg2t(#0"Z=˵{8y:1nlt!D4=:I&Oٵ΅ d;(3l/ hdKd~QlYѕo \(g])u4(H0ȁt҅Bd&D܏K1P!6/yr>JqX,- ʇ0'şKˑZO'~D'L2w8ZsܖE⏍S@a⤪e<j6ACTdA2,D/T݊"7z )iS<)2%2i{ U@ނw54{{'CL^5s82~~Y-seK^wM 2ͨ.;\5"rHJTF0,3$%SVMu| %v.&-SMÙjBuFE-c+úpzWa!.yAߤ}O6B/2 V~)OiC'^T*fiuS}AerB[ D'f-{!0JfHZJݑy)s6( r+jAJq-rPH kxOOeyƗA("e| L9(86f ԋCa߬z* 1mlk;2wLt5ʚgᚔ~3?K*TP#xU& nݢ(JQj|?i z:챕ZR̿,/S_' 8c>tViN/یa۱z_eب6O z:i2 2;7K'$wz[i+2k|ỹ糜9ȉ:R\8B5G$U-2cTuV- ZFQd`ݢ2ɆCQG/Ht9bb^%& 7 RgQKUfn2c)YJBxyO%2^?zJjP:p>pc*@RDϣy 3,1'W<_4 2 AwsrȤT~qD5书{G,X>}x;W:P Gx6֞>9=fYa-;ymu hs~/\4j7>UP1(5uRJpEVKA9txkQSwP T@&ۄߒj**DXDt5 ~3br=;8?U7TC-n Dؼn~Sy~^6˚cpUT7FS~Uh]N\Uٚ9L:5o=|#9ځY IDAT\ÜQYi9 +ԺHӴJϒ zhˠłYzߴ*R Ia8dܵ ZB0\\\#X"JӄD 4,05= {y9*H7ZOzx* Z[YxhhȄCtmiuy$?O)wz& A<|ŬBXrPj~605E҂ }T%t$ZK}.iI t5",(沁\!^F9Qg&jIR29)bsKgM_UIM͊ 7X]ޤҪ*02>*Vk]nZ5(9ҀG/t*x`cL{q2GY+;{ZJ:Nzf<(4=e=ˎ-䈩={JRos :Z!9 o6ǑM,IY˽8<r|f#I:`wO.A#m6( 5sTJ qX+4Wdjy,7Mp/azmr26)%ZͳBPVą {dxYoj)NHO|f.:9_C$?J ^~cF'!s8 YlR1_Lp%I- Uީ9 -H+GTM]K)mIߒ)>aA'znA &Y䕦s-t=<"5Sh ZE+Nz8Y8xzotxnh!nRkFj}I?O1ZoFY؊Td&jx7 WW:uE5mb"G)Cd"oҫuANje"n) J>e"FRB\\fQi(%=dd=iuV؋2W2HF+RoWbi/y&[bKZ`ISD^w6qŠrNIR2Yu,Dנeu ↎5iP$dV܃A 8Eo4f=*U~E/5R?Jaa'':ƒ(J<̺B0Ikց/8'GRHZz?wF?Af٦.RuͶ#Yy_r ƦS҃.2Ixp6eN}3et ɭS㌟憔k]**("{C-/W(} ˦|*)<_vd)w^q7[C4pS2xk-_սZUrKNL߳Dm:ɮEptk|sS3D'ԥ|Ҷ 6E1KQ|c! Ȭ?*|R8_z+b5L  e7}x*e+'袓m%׷Vx3u\2K$t[&BlJl+&vtOm"T Q61EE:+}-fĐz 0w NAޏݵJT˗L >ga-lldYqc#-U}E[6+VyNsS Db;KWKrlX~$Hz/~~o~b G(uugҬ [fIx+_6nl)x]h ̊֩$>(25wj]A* E2S]SH4Ź] 23JȘqS_AO#A.NMbkq*ٿV"J!Z daB#&F"%cJH$U,DWBe_JLq+dL)O_y2໎a2@=Uuyܶ5yWWmM˳Z6\d1]@C9hljZzx!i@1"S9?a) !6@T:=V˯ ZgyYjd sZGfUS/9an)B圀$**"gblp`c.nZ2 __3\' Jf&#R8E6dJ%P,$7H\`&Ui yAu~a%Y ZtWe .> T)wᒇBZ!hh59CN;c\|,y7m;\} 6WWmMsa(Yk]GM kN9 %?Ro;N zr&023{XˎLlUwSo$[}/8cJI fhLiAxD2X?5?&e 9ز{ۯ$eR|=9xNGW~W=Zvܻ{N=V]jշWvӉ RV݄3J1Nݬ aLɚV7R]h@Q2[5zt|x)0m}A(rZ7eQ!0鲫6uRXB̓u5Kpaoe;( `h?7G#N?2$_DMj1aTlņ;o'C<Oݝ!,@0\5,"ѩu8e Q!AY-'`tLqbL "%b(]9~o=< Ǘ~KMiق N $G¢,w#Q&kQn*0i'JM %顭n:KB#v?`lI#jJ=P56o,D>LɏAC^՟[oiX.|7(FrDH.^\U| (:5b+@$)Y)iBjl7`H+\ڻ=-N65'0+b6h!YFo4Dh#;ަ2ԨʨE pR%z@>^v%- ^CF|Zwn!u|ˡf/B55q`]|V7&6iڜiXXj*mQPvq\ 2t75M+Q{N΂ୣkȅO3zn|dUA&&St֦j ھΫkK枨3@<+{d{v+] v_:_\iF<׈TG֘{ "P2F½Pݝb "v-2ˢJH(&҈,cM2j,%I*M޽d;%7:vEjqD"\bXVM\y1fBkn5TO4RɔG#M$%2rO՗^v3_mx 'YqB+2̲'s ֬a5;nѤ,HK{@%RƯ%[Y_ 4_vK(ϤkI-p$!S^FjI j~RDmD{;ena:N2uxu /cS.?%i%l_iv,Ĉ,q*r2>juG B%7I6:V,ĽlUԊ/iVD̾H-r8c̄;wKfpc,. /d'2>q3)A/UNJ&oV Y_ėNf!Eս~ h'i=$+H.s >2֗jJk'LyAGCX__QVEBQP(;BHHLF4K2wٟ9m![u $^SbYx6U ҋ ;i2d֦C3qKdqHpCOaˋ% da!^nVy\ɖ`b Z,; q6Thi|yYO.Qɏr޸! 4o%)e&E>G/Hv_FV`q97HNHk<7` 䪅H- Jꐕ4 GX X!fLyfibLk1X d:Zc3#-B` p8$~zY wsC_BdB°` *^}ղ W?=cwя_u"RN:3>fk@,6$>YI +THnUܮ tv 4oh۔S n|-7-+ջ-0pS4MTa)|!mӱM֮)mس[|5WmxYiW)Xo(?cD̄qD-.0IIΒ tgCNYHoKcšRUt X@ PqҎ\:U;ln1#\@fyۄTW#)|2CDYnMXTކ1h?A0+ʲCFmVJ bu<<h6#o u-//%}ɿ.QBІŎ@0N!AJ(;R|jw'A.l[[Vg2gn4Ff8"YOkC0Z{e#%NR, d*)?CDf F(זX "BhTor0䒹H'Rat3ĒYfjCk8"N2 1Uec]!xu3)(rғWh$"˶.FF: %W߶/Hҭِm/p VlUyQU7rݠVzj㟷p6;<mWHnJcl2-\|[ %hD1K+!s*w.lǑNyKwReџ_|[ YxYʓM JA;1nMbn܃Emp1T9$In6%đf^P2$c6D4o$ދ3>[ F`)/[e[mY#Dn, i@>Mjqe:ZlEKw:=83 eɚh=x}|rh"+Bz0b4![.xmL=ha $nyT1Z쁄#Ba4X9d YX:obK&.ҡ eWrغiG~-(oa|mq36ZSh|hq_' swEv*Dط%Y#Q~ȘQ͜d{DlnERLh3j%ܘO\qmaWOjp 7~78>ľsa-'&M=&Mj!_Lc+Ǣ7.Rd-uF0!$(iO`ej'g36,N-Ua]Q,ء^YC!6|K2>U/zz22\glbQqBқ 5|5Aքw@Xq}А)~!.Ew'ivM1:B)pIQ7Z J\!(H&Y8`:͖x|MmM}4}*"ۖCpZ.eéa&&7`vexO(7dJ!&Bfi(.JדH^4Q~:7{q[H"^ `b)Dy~(DRB C"Ң^_.uI•F,۽&fympEUS$ g2Z9[ARny0Z~KsL ĒwAĜ}HVV>FNE.YT2T5T pӅtqXtvu̪ !bh%v1E 9ޖY> yspڨZWAʿTpDm4Fq U#x MpĒZᄲzPRpwc`BpEis/IÉ#$LOd|v-7KM{.M]Pa]IbQ^(3ivYt352~w7Q6ŐWRHʑo=dNjue3uʞ X=frdJ$^4oXs<]m&X~ cЪ(dXzǑYhm(FAXIm}i/NĮNÄXOuݮ@GzxqS:HV_'gYAR+X>G7\N;69Q{Q^t_f SP!k~-&P B9/Sᘇ.ᵣ*4Ė2'/+vɦFWxGDzOD'#>D9R7nzeגB/_@9!M I"UéKn[l- ~mQB2{3.gUd961ʨ:ZSY.puJ/xۿ v|@ IB~AٗDd0g#mu{57\/DKY2 C#/xm%ُ̲ÅjlU~pCCJ1A$EbFwe-89\B$y 0oőZZ ֭)ihfhb,D1_fp@:\3c |eW9J!o햵|.o,B+qsV%] Lv_҉m߳ʮ!kҗZq$V7WnFfBk$V5U ޮ= e1M}#(˺ h-mws􃮺nXXx{J#LLG%F"($!Q|*IDn"rOX̟}ј|ҹ8"u,RDsrH-+{g9# 35 GC:"ށe(?-%MwJPJ%Wy>:-$VjZL-#rG."0k$KIژZ2 TaMxᬎNfN?WJ[^Y.aiِB[ČW~2T1טncIKohȫ:ׇ}! @3;ewNw3foDãuti6a1(1Ub髽K@E<,;[I(;ܸE^+čGOWCĐks:"T;vIj9e0Zb%* eEY^V<0&R&<57$ GDbBeYkf& J)?|bn#8?}SZ&YY.J9 Mehm|Pay [6Y2}WŜJjY'DFjapĽL3gxH+9ѨLd*5>W;g op+Uvr ┺Sc=WA>V ei7Fja5cX̄@{qj";&{R3Y܄zw87dev#VJ Wz s=,w<}BWe!Xi~,fur ,;H=l'UV1Ll%ìVB?us-ogKDehw;|›@=Iojn Vyω<"49n [m a&~wǼ#Uֶ1j:ݮvH`s2 7FY&r|$2mR.p`[ӂ;ku[܋눧lѯ4eOڠDNggH2:H&FH:T2ИB%T"xe9H0$!  kaf,q[w\(_&k>mG*N)ͭW~h*%_ !DP=0#f!mCS)m,UG3iXDrVl0OS41 dN-#nXMHMa_F $!T@+OuSa]xD6#35󋸁] h:`H($6uͤ,D֩XVu//:$9J@8QҩVAӡǑY֗Y~YD]<݉HmԬ:X>X7(ݴOFbDIn5UdjRk4xv"(ݝ}F1n7K;+},2!exI#\W++AJI%N!9C4$c\q㉫p}}hi(ҕ!ͳPl"dfkԛdPFmQ: JihX2AJU 6^Z7fBk („M9d6$a>YϣNf46"ʊh.4qb*3zq_`0fڥW,?L, 3h5N fLV^(l&~!xa1@q2@[7?UJHʵ:^y~O\ ~mSGaSKRHp.,m> _£-Ur^82kB~3I/be(hȪtn ǻc_T ޔ5iMOznggBk̇=.EfqaxN{"rAS6Oq~2eZ#wv٘P 2(ʆk]g0",75I9ȬSbFV낄Abw?HzBDptZ7姓S}i4 uB{i\C\<K)v M!QI^8/n݆̊cKX>~j)ʻ>WR YdDjL*ѧSh!t^ *J0i{>`)8GA=1-`=3uwEj6#3Uo;Fbq(5NVj\lS#C -}1u iȴՐ0\uO2U\v/FJku$(ťiQY©͑oH]7r[/. DJSD R '~qYg,Ek ~ʋ߽8L0_}_D11IQ=en]>k_I8sX{n":`nͅ2bj l_287kcn( .W%ޘ B{qPsbjiDI AgW!d>͒VXT*P %1 T!Q" l,#)GB0ݑ6$6iz4b xd崓 m+e:$1 HZM.V [^ $_JS?$D `w rEDOCm \ vP;^ E?<{Xl-%0P9M>_^ {qo.@ucKl5i xf+ _fA%O&4-]#"ׅ'<(ae;eh0[E,L[xbK9i+A,r[ѩXR+RQH(^ Y(P}4]cu,!Chewf.mb+]wa+$:՟ُLCVx| V}pXgZ+ks=n^ZģD\xpFoR/J.+h}mW%='qF"(2+dP*,)TPfb77-L(C樵 HLY^ZEKC?N|} n> KXAx)Lw^!y+iL?.[/J"չI\8߅OƭNUN .U7ힿX 2ٲ٢~N&PceY@RI_z<=|u' IDAT? p;? X> J9?C%W![?FNleCC 'B9cKRMڮݨ(Pp ʈ7hB#b&HA#=>%0hQK%O TbОQ? x_BqM8fsgfeρ2˗ _ _/WiLTg_;nm7tM)JzQ.H uu_m~}eg}-051H/:'zZb˓8_gƛ߹Fj;#3{/YOE"N* z)U|rLo q=5{K5Mf5ux,X*NX"T3EF T ٘H"&<$ zeٹJ%H*$ VYais %*{tZ`XYPN* Bm}Gȭ;]&u̗إ6R, hYO~|=jG*5g~dumnՒ'yH(v(^tM2^a2#W(1Vat4jy/'ȧ`}IEf0Z,-H&sR$5WӀȶUq~ UK~L[-Wo5\l]bҲ ˏar2˓^оbA++!OQMZ|X4snJjI]+$NWx\ou^\M&{)jZ%&\V;w@K煚zzKCx_~k (,igݐ)X}}zKeYYiD()6A m}I)A~<2. tKxsb(O\~`3d 2I, '^IVgR'+p!Ȭ v}};ge( 2Mrd퉕OH;3n?ɡ2y: Gvluv^2i*댄Kl]xZ0!I"7J3hG .hGj[.r6JR( ݾQaiUB9&1_ 9w$@]3YjB:+q(.J3_qeeUPgAvY| OK}_~+_y>O!v[4d-ߵH,jbwf'ř4xUm>0U!Rat,VyP A3M`iqV1 IߎEqfԜe;!o_{?Tbo> O)bPĖ`)EyQBrܸ@9Ӭ85+Yb{toJC;Շ80DCHlLz+'b9YdЬCZ )RH8S%(9lU2%9T]̹5l_H@& 240 7<`iyww???q6hM#B%Puk ˡ2Re0%Xȋ] ^SOFV&7жnH\~}V1˜ &^"9Y9A+Hh奶(EUZ!v y),WLhz{/ h+@@mxU?wC4B@Qd"2=<ŧkS)B&~x[DR@̒uc#QD֦YL>4fi2𵛰sNHU p:5^7,{JVfSX6voTV#|vg)7#g Z05@߆HF et!LD_w0e励sPyiCc׽s*-j )eC _xhEs(@uy3($'TPHfʈ4n2 b֩,f *sIkf{ tAa&q,X( @nJIbj,2kDfAgᠠǹb: >*@Hh.fъ b).k$(Ikzg"8ڹ2XDF~t,_‰pCu.Oc4aGԒ+ 1$am$.+Kl ͇*bMbkh/>Ryg1Nj}<u&~]K[`Ё8K)f2@tс3%91u}!$&0WX/\ץ-d]c^DMTAecf93LmX[A%,_]^Z=0 #2bIQ҉r@fF_聖YG.dMfv<1_|:ɣb=U A|+G)5.v:\1#KoO:W[ ]c݇gTp㉫p㉇sTq$ }BY%}TT]FC5G?K|+,y^ iRa"(!ysϲiw/k OSSO abJ@wV,l^Q1r6*Z^(yEDJ=WװjQHF M0 j ]HA`"Q"o2\y|7?> #G<=v}b̢hYϺ"`J-y@~.:N# .^,;rN:(f.r>Ij9R>^[-;ư;KU/,ٰyafB+oӇț 5̒ 'Փrz"2* sJ[ =DzY]Y\12!VDQ@0EKȌqyɾL]ʶv5YD(FV"b^mq$ L鸈[I/$(ovsb~(Ft]k Z%eeJ~/d_Tmt-R˽<ːZuEvV@W7ʕP#cR3MT(Y\̃O&%勶g~VdY",3Z_dCj.WZvRs@8̄V^س0}~K ɢccĤcЋ舷˝"meT#1Wmڃ#yD X}";kub)Wa!7!ŒYLVx$E'6R3oɱD!ˆ'+`mb*vBt !|-~KXguK@#ZTݗ .~.8o8<27N+n;k%\P}^mQdJӤȸa׽'<6[Z? Sq*{}YW?a(bj z1 /A!d]Cd>)YNA-&'D00^ mCH:%T3a1]1ªJک |2>#0 8Qc 1 }мډI-mЖ P9%if Ws^+0LwI@R?O'1aD_O|}ð ~ ^#4\ɿOކo.:#aWa/#9fxzh^zM^=uٜO̺cf48g+i+`蔰({9Flhҕ|[HiKk=jv0{h zg$dԣ+P&If9XNV&>Ƀʱ&!- τAxs4LXKG%Lq`a EU6 5z؀YRlޣ:ZWVRRBBD:pp0.+W4c+*2"#{+@dŒRGوr"%_ϼu|;;wmdк37`%> w\u&Ahֻ$Y3*LV)EwXL E%dd-o$z]i\.N%!eȯ0`=X~Ē+Cz@qc΍'z)%JLPJ+S!b аX1<[LwV\Wƃ7c[ M}Pԙ^Nݐ#Z8h]1kxTIY]#?~_Fja @É8R bܼ|e WMу{!ٳpFkPwJri,_?ο ;w>uhxi1Sk"˶CaǦBg2_a((-/ Uo(D)CCju6fgqfBK 'y,n;x׀;oSEa!!49Qrp.m+j'>lTQ܂?1!@o*Yz+\\fş!XEqi (2 5&V( $?]pȡߞ DڳhCq kt=|l>e` hv_ԠF_[/I8p?HmEhj4V u /-+{8sށsp挂|gj] ^ ҩrZ|n|/a#W$GSp/¿oiG,L -e@bLvbCH(,,t}Ʈbchpڡ,5nB[fz ]ĆD$Fl s,_)lwphW_5h~󿘪LhͧawH~K8zȬ|I}B?Sj9VFt@,,Bg"?#8SH:F.FhuU(BۃjFQ%:I\KH]QφH LK1":P ZO ~ T6w+4G0uQ,mx]pϻ μ Y88S/2.w?$Sb3 ևVaO՟6o7gl K[ ؽRW)m.rCۧI"2v=RFFB+Iy/!%pʧg?4OmAhi ,ݏF0o9d!p1c`]F`d[y<@Czئhhdy-2pHƗFN{ؿL^ku:{Q >wΝrh u[js]cxno}qE[cZu֌ f2KDf 6lҡf y`i++K팠糴$=콸g4$V@2¼1fq1Ƌ'1pBɰKL&e,} "m)Q% c>-DD?$JL$DEde;xQq`dºF,4*0׹16@F:XFWSaWV|}n)9ȹkxYuҺ"?>|WْL\ɿj *)v?y4@u,]笭l8)Y9j<:H42kj"0~krBy[ҍgя=A&#!b)*/y[^j9IP4@;I7o h &K2 p~4| 0Q4 _'1 z+њ>svNAi;͎eXHjF(cd 0x;w;[@.3gԭ5o 03pɏfn;2\8r6 n)u%7mZBA؛|qQ&.*M9W/8fB {v;Ē_?I# | K unȉAUNh9̭wyFM$搋\g!R)/i.bki`ݒf,{eb-#Hb Z}T죬ҹ*3F F@%Qk#aL;w|D3mWwT[5S^@sV 3znB[fH$묺Yҷ}s@晸)˾_0IXl 8)8G-C+?IYβĢKooomk(t_"-EKeRV>$A=?0{ivPc,t+=;M!*eKOZ5|_ l睥/fU4^ZwʽtRVyNb>?JP>dי/TK+9$A?="l39R //ֲr rnRHx.P^ĵz 0pq: #x/%S&7vIwa"=JZ̄-S^CV- !RmdI;MKD$.?BBZJŠ)?Lj dq~ɮlzR8FցAܪ,vgxYYn 4\nRԕZ}h ;?lρ$9 תt,qJeȾM7zK5Fqw">5щ~(0.PR4UmF^ZC XYR$ %J\}oLY7#%i! JVI}ˌIgRȼ4L纩h){r$j4?V&M$haԟjiTuuAD.6eHgAKK{_^p$B7eN(;[Y bY_;Ui uΪ, ؂o?§a໌ZX>TZ"ڸ/Q1v0$1a;W#(k t03?K89n\Dۯuy}x<`ή@)mZ+=&r߿qZZԛ,WŘ#ʜ[ɢ1Q$OL]t&iro7Me(hB3̥D85H1B k"\@DTl_ㆆd 3[RB26$Cx]|K{L5}_ l, -Xs]t Ґr8p㉇[dVpaѣK{"S)}[f@6L}0$;RH6¶)65c_PK U Xϫ>^Q9ɬ1I^jۗcRўu:1@ë~ydb";2X^{eEdQw'c^-H užPT v+ J!>z=-B5e$~4/lvO Z. K'<͚?<w_?vdm?3فYՉY͚ 'V''ɫ$%}իp㉫-ŦdOxFiO^>Qk;[8;hEL͡ο?@'< 9p%7oumՆGRRWg/-VY&vrZf^;5hCPdV>,2 /18 rJWV.Cm7 BI#gnDm,(zʉKwxU5o~"> bDh~q ݟS[/5x@)Pg϶:|=w^ɫ٫'D=0𢷈Mܖ*r@(MZc }d Dy.O*#}i37tr*Jql\zTsRehNddPPf/-3wVk|_#OОY R& GN0eDc"F 뺶Wϥ &-a\Ka>KO.lBBOjh¦ȬI%\)z%T~SA*P &.>,{WGJsa;:JF~(M{|8{>OWÇtK]KkQ9 w\ݭ o=@gtJY$\hvGZGb~UvJKYlsaqO=U ؾ=jěƏnͰі<>;LhvcQ7 F miU0u&: tsIYF[ 6*un[WKD6IRY hqI#3xgQbdA|c^p*U9 WrKM5L6T?k23/~y wstY[(}n"̎<vp㉫Yں4Eѩ$iۛe GA6JޮzIan`Q\Y_Iw%8'+Pm97/]OS!O N=yg5 7W\G7DiQNzK7".;1lGnXM[9ʁpIH )?\ҕQfxj,, ̠PŸXDYY.SveKj%i'ʎ8n5yk{i;w~v}}}U[ zzأMkI˔$NB  ͏%4k?I1lI~u]9{FBxkɕgv^ZJ9a5f̄\8,qrShlO;kqqI5 {_⚕ouM/d&d P7 L|1:|?I.9OS@12Ж3e-<[̜Yp^!7eef܄V=).;p].w{}dxm; *`Uk} `OOLzE@3R0EOYUY2yku*+ PfH Ké&LJ@yy|րsɬ} P,*sjic{QE>YTT:SMH|ӹBJ T=(,EF/˄(g̪lHX$r@Bcd0,+ dl4]IKZ+.8T@ ̏Tǖ2_~"q[o;0O@I#ȶ=v"o'@qѯ/93FS))b@[4Z&p$Hm)?G7˴}k/-?zpj 7`N`z)H"a XrY.Q'%2EY'62PB~"ЫLɄIxWm?V A2^fZԒ]}jM 0\Ryn:˗}'J+Le ƒX֏kHmyLj$16XfS ~'`%k))ؽQٱ\ڌhd.e}Svta+N;uj `qw=hk{b)iB> MO8WvBBfk*RNjYo~n;Y|ןp8~`żJ%Y0~8)5mv%63CU8I}Wߑtyu&WԘX!Um|5{iU8uU'hɬPޘRӕIXHkz?h={M HdSNJ/)@ybA }HADjQ^g= &zT皀rd[̥/m?{_(|k{p # |Gm',x@b[M|[QYb 1YQ-rMQxP#.z*/ӈSGh]k2IyJ[oޒOwI#Lpn:{$@!" %¯Yݲ"N|B R񔍇i@c_NO,ד8џVE:6΍wGWDз?0o* CC;5Y }`G̨&C/T&n̽]^{tVd~YT&UpN֩"^~P7{HoUһP(I]7&1Z2yIQ<[[p)Gxj* {"YOȠFQ&C!Dflom9 _'_T ѷ>*k։Kڲ7l490;m7s3C0:7RT=R^3)$*<#TZވQM5[ KtZڋ'tR1VbӔPYZ7s'k6=N(JgM:rKC QP9adH-XwR=t`AmzuAv1yK pvɞ;?|-QG3@9RCx36s!(P:Ӽct[[2Ͽ m2,wa T4ziBG(q)fT2khri6CG!~S LB\ys. E.g=o@c2g՞ChMMQqR{&86DlV},!Ȓ\ @#Ri(XyBp*7`Ʋ>dBŖ!;4d޼gԺ0zǑ;ZVe!;G0}ʯ[ߒď.7-Q"+]j :ޗk|QHͧ~ַS^oݲOMNb$MmrI|riȾ]̵d¶^Z@zi-_=巗'Bp.M2)qh]*/;F]cI_h?j 0OF= - 4CIbe@톽T0? $C<3_!Zxu٫nxn=82uUnƶi>}W{b)Xyg,HKU>hZ:UGfOEH+ǐZKCyyY{:VKfq> bKw$clxmd| xNMӷt;-\oL):mCadKxYniPDS_l_i:i'uM 6¶_\,$E~7>x -Lx\ydn|5Z_>'SmcDQe /xgE^"2VG+;(4W?6A=?B92_p{i[ 2):ZOW!F>dVl\43YM@ƒovC6lڶ@~,Kly2=K-$ !S](r</\|y vÜ(,@9-nir 3~JODݒZA`>si E-)DxGcʊU5Sů?>6K4DZOɓ8{gjɎc.9Ru/խf{B_w@<$`'yZqsnp#?dLvq/c9Yr'1깡mP0]o}KK9^Z >^Z'zG")VشHIf 穒E"rx2w^kG6@*OX/URp1:{(KXsc|*[r)SIuN^: l7e(>rHN$ʐZ9AP]%?O.Ije_\ ߦZ{ߪh"HGɉk1LLxD:oL:e蕃Hȵp4mT{ԭnm^QٴMeA?awW7҂r#CY:G IDATǞ[Nrxzl|*0ӨG;$\>8hm\x =!lQI:ODc*쎵{)E?ue"7г1K5vg򜼺0~^N'za"br5!yPƌtk{SHI@\=A]D^wmP@s*gaRݔr~{ZQdgMYy6 n ͟3F o5hh! >Y E*7C)ז՗n?JDE` "'][P50u}#cLHi) PyiuhU8^Z':x㠟RJ ę`؅i!&Us+ MFHYL|}G2ơDQ&Y .w 3!4wY]N6ko݈C3n#w: wRbݼ̈́4"xPrKZzPUѶ.u}{l;\Fx$Q9iۿJ^ZkkuDu" v!@TV_+''_YP}Th0w`J 2Cm#nquwq*w/n+z |"SrJyt\[ 3pNoP >l=2TrAr~@=TORzz>6֟(R+si0v/A™g%C3j_78BX#ݎ<.y_HKEM0thΓ! (o>U@xd]m1K(巗NEzgi.h)﬐TP'M ŐjFA QVa2S>'l/G*a}5l1HҞDbsQ1eYy_HTT'G/mv<j]z|?{oeqDz̈́065XdH HNDi9q$)3 K!9CBi`XL5} G^,sgV:6p_Sk][Ugg ،z D/K ;w~!{-kz|1&=^8P2ӓ.17NƮ:TwGIqLf]_#<3MގZG|N'F;lm4o%ZIw.^$/tHc,G? @qf DޣaAU̜lX=]B{:;;zcMD_s-2SRW~ j*ҷ&i]Z{K^ZwgjY|;]YsL+W#+l"=>:ߛ3ײR%u43:n3CctGOV2_bwjк{ڂu&YWA5-WbG,hNVˏ5ps;uG9yMrjVQ;؈ S(e.'?xt*kvg] _ǝ_EZ͇Yb ,ЖZ@,#PEtEGq4>ӟlT_rokBڥ 3UR<^IRzTܣ%̗&m}*=ܑ]J__C#~ dmN-=p!X(]?x gggkc],~1ǎ.cbURttl ~+N` l]]C vQlؼ،\)=u˺TxZ>ґ5rXXulΗBy/GwxgdĶhTK]gwΕW:lM)R9fEMknNN'P}s^[E(eNv\Z]\9f!eBjV;ܳ]ZG h%Fx tE'zlљq($=u+ a% =7<6Rc}Oޭ)ϕfﳇgKՂVJh>:}MbHꕇpM\A~Kk~ %뢣T_kȴ'AyOkZ櫕X& 9k, `a{w#DRHRߛtXUEΙ % ̓r)5sΈ7o['0 㿙f}T$OD|~SwuqR ^Z (ͥ<{p#qã;:cW&.:Yr~,.#qg=ts9ڛ2KXoPۍ>a]Z[{G h>Qb/YJ/,lo}FZr|%+,ۢʓg#kjtiQYJ0Ϝ^wgU`PVMV!~M"(P u'7p?nؤ C1Ztjo'{V: iCMS5I$.jGoTeu:`TJ}į]Zar6ntc;UE\⳵z[ *vϱ*_yb,<1%g$QT-{~*&J}}P fIPMN,x}#ZL7TD8P1^/5qû0X7~SDU+rm.;z58Dkikk|nrYXzA@-$ݥ(%.7Q*{r[ix1=}& ig?xgr@zs~+&b]u |dz =eS 4>LAfѢEw19Bi*ڭ ߭E?L]ZI!k>=cGh]jwH SeGRbg];t,ym;jZ"/ PRojH_Ew=G-5}zA/t hJT+7f R0eBIN8n͊ ,"BOc36ĺS6 -sd >&bxn-6PkwPyo g}|Qw'崪rm<WqzU'G3@ ~P`+-.b)/?*@+b _zQt 3mi>=#y#h蔗fDŽ+,sGG,ǡM+@ h%naB@Y'{VH CPKZQ\FɠJ^?Y33fU?覃t9\~3OMuеKI9̽Rr9׍'(\?1.=(šN~0+q{: `?>]ZGh] v=whYxGqV*{ꙇ5{>ӁPVZzUBLQ[4#dVIod$Ķ|Ӫ4( j҃sp@RaU_=OTet$*kh+vf9'bT(/#ɦK zMXPKVtE9v=,#>& ֨5lF $ +/!]LPՊa,RK0-;YNTU\:RSKzR)PȦ(㐥`v'GvZe#Y>$+evT[A/,.4Fdjr3 J-@4\϶#ie?1g5R#+܎k\,fU[ *Ο>|i~K/|렢c\A`yP(LOyP4Al{x#Sx +DS!e>0>DH΂_KHH;Ȥٕ̀ӿxjn;{|&u٥>e6?0ᲸWT25RK{/@M '+^Ok($,^7v;]CkG]Z][##GkVfoN_uOㆍրI⠢1n FaV+W$d ZC(ZxPY'GRbկc ٠L$vǡpYDЪ&^M;+Gy~=>ZG3,mJiк54.tXCB9΃J}#ZEmYWe#b쥜gLda7Dȉƀbw"N>Ke5)"оHb`Mg@GޖXYIGҜE jx,"wc$Y~"gSW.#",Kޟ5Sv/:W h]2ucZj~*V28n{vsdžV IDATL ^#9]2b 6UREj&}3L3O3UemvAW>7w7W9 dyTlާa}ϲG O)4UFrY.hE1VʦñËy k$y<ʼmǍMd{W+VqI1{8L3 noA5~p";<hifi-OY̸'Sm ڍi;mt+a[T>% #H]RpswbRʤuM1^*8t5K[Z  ,Z_UtLIiӊo>yGqHcsr\rD"&2ee~M \vxQYSNx3vd0nӰ1bM)[p9jOhIx7]jPa%_WmEHn ݃lX1Oa\U5ֲ3yގ>RL6Z8FX^a9T f)E+SQC\Lp<,Ic@F/Yѯ.^EQ 769!B;"rXǐ:Ef-9˧+Fծ|ol˪ݥU v{rZ[:>mKaAfQXBbVX@Zk= \>6x2,{w"& h sGCM  Ԓ:ǃB2JJ +ot棍Re% Me2M`Juxrc_EY};oR]0pi0KCJU_c\v ywG]`45 + Kv4=M/ݪFpA#dPkK D~vh9ȯj/6xUkLrvtBkwT -vLP0RZ˯ yZ=#y1H; +)94v%;\QPkP9äؒNMHi495` uRK;m{Ț>U֏ǻn]4!MYCWÜ,w2n:VZ\#18\iv7QVHUj-@ݥ5/mk~Vr<@ϨqnrP y8tEFG{qLp&ǯ_k{Rݕ黶{@¬*Z~bj\lzER2C F4NBP~Z(LSȓ1N@6g7`EM]kUҊYk^vuݥu";䐩l]{]|(]pP? ZPkS.h~~Sc,^@ @@IqFaGZxoPs7_ZkyA׋ h3NՈ-s W =,A0IV*CѲYMZ ka0n…b!̩;ز&ԥHHx)|G&U5]?;==}Gu@1v$ 8V+wZO04'ElKuVʢYKp6 p(!"eN<?T^ucU2ω^ugƈȢvi5z/_^ABZzv5wLn~+ }ȥɷUM=,JOC!%Wa"/uEv BmH'mM+L)Cͼ?]KK0Xٓxܰng7^#o:{_Ik;XX(zhSҷ I.pdݬ\~Pc@\?rZO7/rO}9{x֭='whgk 'g02`1B |Xx8TeI FE14Rdj Ks97 TX|QD5)Sq`#G {r扜"U _]#e>PdMqܰz^p^tPoJG:_XE4-YKnybV=iQ8N=A.ʛ2 }ij ïVhQriz, fYu.ʼn"f%[]s;n! ZqIzvj7զgq/p` B7zwk\)%$fB㉋zt͝a6g5݊}l]d2ZE _d`^gEshBrVGs rZ]9rísIt)Ka*~Wh]}sn[;Ϳ>T6@qǯY 8ep]#y<<& 1< .E:18BMMwpsTT;r8ʏAnI^eQǒJm} R: ]f2Q9d7I {eDS]Ֆ1 b"/OE[ZqØBjOqChmUլ ҒF ]Bw^ /ɡ=n*x\G'tJTlǤZZ4F`|O a͌NTH[h}Y 1$õU(t*B~4*h%$c?+>n;rG3LkQ?r_ik:#whRvڵm*@,##I~-{˅C5kG Ցl?_CRYqH׶Kk5z"6 aء^R]ZA-[if& F8nM-bp.Hm^ХZw.&Zj%LSw3?cR@VY{hC/m!uH#4qwʂT@}?!mea3k [C;|{owcÀEg;ݣ @򧗻/13.R$2iVHc`Z_\&yX _%?Jn\R b˖=.-=@Z=ń1Y&aSixR ڇ n&̢#ZH0 ~ sE/)5U)Q1 t/GV̲Q-Ñ楖|WUQ>羗b'~NQПժO8Pr V%oк!j [wr>+T(GPn98fl+Je$zlT{쥯γm) #z:( 8rQ8rVF$u4"@v'A-4uVeUs!'$6U\; Gg3U?bWޝ ; >n1E/ks"XO\;wc;#B}TpY3?s\s8|L15:j1r$kIU}kɞ ) sY>=u+CohtEDHZ hMtCa GC`&S|F։,HDϯ_-A# |R0*+%*LK,C$atY0' 9Tv)ed&97] :kdT[ Yȝk6WmOll$0L8ǚl s0$a7/Rl2_5Vv=c$e}pc+jNȋY<qVKZ-T]w 4K=م0u:Yl;O#e- Ҍ-S joAv NId|BA( cBG'?oT7D[,䉊;D'>ekcpfGxwm~w^p莑1ɸljolC7pk2̋NzS *ezSlOK|Շ݅8cibF mળg0;Lp0?4ZCZDDR^!ˣSGcqyY0i>:BwJAz7˭ul"U]ŮyH=N4&k$&~BT&yaƱeu#NJ( xρDTv\f,_='#mvD1x<~G]{z|qÈ^{Z ٰ%_^8#Z)/h^*$B;?x~*. hM J! wHū'j`?K%¡[Z;q795٩-Kѿ}^1Z>Y:̓Ij@[@Qd cƕ3+;<-W !.4, `1Yi㕑G ~ɷG>RY6Q$\,.L8n7!|>d5 +I/V%fds@xŽY5Pe]f^` ||cݣNظaqc, Y/hM#{Fo'N;!>Zɱ˟^J^ZvD@5<`v%KgF]SrP3."v PSfT{ "<?idaT"Z#oh#mnCO+&Z#!̊J문'K%_\z$ǂHaFT af]GY\Ԡ~wvgjսwU鱒z9Ϯ;fmТ ThQR9hj-=b3€otj^q𴈈C;.h]}zov`x/'¹x vU7bfNg"5n|1iY&mPX {{t)@eglO"f?B!XTob(B;}Mpxϥo8X'PZ5Nɷcc%@o`$N(DC^6[~'w,.8n-ZTD'}3Gk!;S$m~~6 ۛ8b{q|ǥ2&mϰt4Y+s(^ʙG,<`1"  LApĘ!B!BzYHE8S*4 &R7beqdd7S>7|twQj+3ǝI1IwfiVbr=Aô_jZg)2=Z~$έZ@ ·w[(`ƂM|C29u`b׋ f! h =:Բ}ӄE <2t U*FcC|>%iT ȓv1ɣ @s`<nBpA'?WX`I`+61NH񵦋ox) )Xe8輼ߝu7ޟŭ+uIh>&`2]2B5eAc*W/[;]5cDq<9hᛩG5a[}9h?Ӊ9v8po;`XmZqìRD9lY(C#;c 3wh& eNi 9D-~&zXk.-!mxVgXvkQ  %("^w!cL<%Ǭ) k7 $RvU W\JɇXp&n`NgT_%|{ ?Kxg50U}Ƌ"o:<&0k5Ȓ2H|% ~J=`r ~.GK]XQpˊ\3+-hM :.vk̶~#y7Vo7gk{9g^@-gMT!}I/^KrC f3%#5  IDAT)\Ft1?nS?*D"Q 巩$aB MwFmm^Jϯ vJߩޢwg βP^B<+Ew2p0h,᛬Rbwhy==6YU>y[c[m_I dS/`Q?Ԑr90xUU 4~꣫~24;uKȷ攧ky9ivO+v7[S-:[|H`.N)5.PEbuwɧ-)c-C[ @=U{2+Ymo0$Y Dx"DIe GJ4t'bwg];d]C*W"hmC+3!Z>5㊖ O KZ'SPd_@^S^q_Dg aY0ٶ$$?v8}K/vM^ϣQ>Bzaہܗzjs;&KZLb4b /ZmM TltR'ji5FM.O+`=+YV$cLX'<wJqI\(,vY2F*!fa s- -Q7\tt}V޻fevL`@OkGKVxtNv)WBdvs OGkv@+yKLF,!՘l/^W-O{הwmɗ"mvH;sMq5y{^hFU(CKB)+~ l%onDL=2:^jvC4p`.[0rt2SƨÆppi!9n8b5Yc#olJ qc]kcDu,~S#<dmLrD*0(HY1`q]Ⱦ0<-cXAf%x8+uK2Nus]+t wZSCs=m]c9xQ/>Bb6OΝ;{;/q{h9RV!UB'6`+Tm`Bd1XZ{81`V& G Y,,= ~a֓Iu@f9uƚ}/P0kVhfy N\'Xjν`rkSŊ^aWh x|zZ m! aikRYeZkG> dsٺ2(}2OB]ː[!O{r;: B.> _T暂 M6$t`N $0F:މ1ł}6IU,SˁK'I%7*UMx26!.wmC2cjb "Aqëg/f,3­skql[oWF-61?VuS`gԫER5os,Nތ''H6ƙfFWލ[ 4iB-EknːDp|ܨ˴IP{Vi+{@o‖qDwu2C;qcʫks5ԚdAsݺfx"ZR?OhL>N 5ܶ5a Ea!D0Ɨfㆹn&=[(D </mK'[zZ2noi3jlێLÌ7:agp0FQ<̩`s*Ʃk*(@`tpzJ3@T38xW>jGAa x qC*ţ; 3rm1Az5hd*֮@V,vEV뭩rrY[{ LJ㐳h+$:LVnqJFa7we,g'gW°{9h] )ZCZMzi&桷t\Eo]dlou"\2VQP&ftX! 2`vpE NǰtC X%2դ]qM&c=giIjS*3p̢ 㤾 >&긧V,ևj7@7IxNٷ'TRk}76KJ =ҁ\ /;|^u{uLJZ̉.rLݠX4ie9*^$B_s)`G0‡fC8{ˑ[WY(ϔ`¾BVBvm*crrZ3[^e4GSk$[lƩ'wEij?9@6OةJ B)#,%ąGT 0: C\Ǧ["3\T2TUԻ03X>2jlݑO*؎2mcyPX %:f߫!Պe"%fokyJQ,<# <Db_ 7aX| кɥO%9l~FE$cxK4$ؚ/:;=[EQXE^&2Rs" FEw(-Ek[Q8 Ȣ) DH'K( &Q~y`UW vfJh}K,@V:p5ކ}TEGĂb/mHkjM\u@qպ?As 5ޡU7jjZq85X'=˶CG^zWOx^79;ېQ,Rݿf%c}w{[ݼ?'FкPC7=kI zŦEhXtk@%qʞ a v=۸OۗL琇 GM"ևG胡 fitbC:k=>-ml;1@Rsɂ1|2ɶT/K PwoʩuKwY9'/j'zI7 άZ?ˬ>K:piGZ,&m#ڍ9Q9M!W~ԳOjP&id?mKzh,& a0Y\o;h%ג0]2B庾%!Z[/:e/U;Cb 6.CrMM,)H(^Ӌg)sRCUɄg ؇SZ͕}6E-% Z,OC'3VhVގ_JoWCqǕg #:_?j.Xi%o4lUus,X(,26O.l 31 8yOwJI;tA^IBچ2fGiU!WIcoCҨ\Lr zX6hc"|#Ъzi$} O{V@M /wbEݶՃN^>9o~Fdi\@”¢1br~u bHVaSG%X~SM-{|LlQKKV[h{NNʅ뮪Yޥt{\$Jddz]8ϯA<Yw__$yXL*pьpvs)$QLz%$]* +-.f"(~m0u6-SiT8 `:*kSx/L:_{t O«Ast9cjPYsM_%un!ͣdv=;[޻Rw `uzu1J _IK&)EQm<-c"- nO.ɲ-*R^ WVzdQ4y DzQ!ae{|pw%y\@&_>GaSGe"@XM" ɒ)-wV_;' IYm]pG@6R</o/U㨜0m6A!Sv7gW?ظ{Ug;KެEeI L @8{Va9Xu}|@&݀kG9B7nd >Gۭ+-hj Qz4Q(.oL4u ۛmyS2Cik9Oj%cP#O%E_&Q>L!n^\ū{Bh]u0fvӲ$QvI%dVϝ/q<}F8I@t~)#<b l] 5&8 /rxzó|+׃H͵~Zvx|Lev?9+ifq ,ɞP*Ķ7춴G1AZҫ=I~~&OMHhWuM-uח`VF,^T'^cS݌_Z*=f E :6QvWks]fG &cNëO / 9-E !>(@KOYƑWFOZ>=)bD,NVg*HƐN\T #bdOtUdz@7ح̛ z띏:bz%;F4/}Ŏ5_v.*W<.eHhcn0R'44bI;LcYكS^G i;{6/6:]ͧ2poKe'i=j\iY/X#8ދST\UE4)@+g"%H&@-C>{H]7˸BDEs=ݳX>,xdD%W{uG 4#-˂M2W,ф'?|Rweޙ%iZbkj[{(w(Ѷ$Ucqī=566-Hc31A,],4 ( Zӳ,HMg%^0J=WfbLXVpFT6HP`{҆u/\ݢ2XkgI,rKeLcPsn⟼\sxRe$@/0pR3ޡdsxtڰgI{٠3נ&y9ho݊zX%$=ʂЋ&2QjC0Re"5 wEI<:|b㾍>#ť`eltO iœBeȸUkD} _wgq Yo[&:ZH`1Yk7k?J]tT!@vz;1!5@q׬2oJ.3 !잇' v}b!7@'+#8]dX`.v@&^ t*tPfl g/}ɒi{(lfGZA-9ՠPS!}TB2N)"in ǢV55z }h$R f]Vj̛2)l:GSԫ=y>[F$eF`ԗ%&gεB/M:& ]60z90ʻ~!y*W h cxhu= 7~yuJ!i-&{iOkǻ2UnK7P'̪d jK &טE898 W1)-#)KZHXعSW$[\sYPfi"84$,~ Y*_Z_ c{݅ow^7X>ɇ{O³M oK6l>76cZ/ii?K* }?AvЧ:۰(0I `kb@}uf*L$,_$`*D.o9 -YZu5yZC>shHf"UI Д8"? 1E}V.: y\%+OD; Te,74[؁Yl*?steCɪ"8jx0LjhLkgWqG|ۻ_z&0w߂?,w5=?O|u츊~tݩ k'jYdvzX#!E+jZtsx{F)0)Y =߱DŦݮ=ZO7xaJWpr,:"XK.I7IzeG6K -k)5n"@EH4uU?소OEqa!N` $ )N]#2~9S?`7W4,/N3j|ti&Ix*#'\z/%/nHm]h|gm7u7ޜZ-9U-POަ塻@<3Kc帚pawV>ЕBME4h$UfE@ŏh/0{Y ~қS= =|v;:n狯]ԫȴR~)<&Ee |ұJ~vq)¥Ϫ m|Ⱦ\ r&<ߩ0CeUvpnC\TW (ؘ`\i.;rZۯ#eh^6`\2q@EX(P W4 DoAaBE,!SEXG,#-72tgδSDB\ ٷ\}HkM+tbm֖@qC̲H y~nw`Sd~2wwO-B7<}Tt(P i+B$Nf ڄJL)ˑLѮmig~y,Fh5.1XጌQsM`Čj.K]EybµqTcȪK$yh{S~FmbA'bJ"rYP@@'_'| Z61Y 7l"-А}\ z e S-f`VO;b-] $''"ԀC"K>J0PS> _swV Ka_Ώ{ R+ܾ~dυkx*˳jGSmx!h#=s"n jف5HZ&}pTˬ0CaDkNel$!pƛm!bQ*epNZZ׏n&'Q*B>8$Bg@r!ǐHںr w# 1@!2bqwVqp*Lg1 E`VE1Ë]>W/ʀ|zTcoe{օ':kjۻ^l>C]\*ϒfE-}hNJu ,~^NCߡ5R+V6L]^z2zgY0#mWFvP7}CD|Fqj 2993)Pa"  mϿvkEV *BJeI' M:#{1j(/I{NFp9שoatuxT/9nhu7 G%9yA/x,^{ke3Vڇ/g"vU8RQz`+fր|4P8 FCBH,A"ve 1}@ ۶4@ʢㆈ8dEg^} <~^})w7ŷǛ4oԏjGf5-W=ݮ"ѫ̎.HRa3@9w~EF ~n9Zmq!-1ŧ׵nؓTJ jR[NJCk G0=ICˣaJ_5%phj9JBttchED}lICl1h@:!XT:ME晬WY Ldj$Mvh]@*2N^?(/Mdq4* Q+zYB?)P@Ӯ%bѐ7@Q'7쩂x'}N>܁1B-yVBݢvY?@Cȼ nf;7l@zlIèhnojlͭMr j5ys'wf)P{;~:E:|ɑNe> /;JnB ŸdbPU.aƉj1SӖڴt 4eo}/S6$͈oxz=D+ÿI0ѱCNYQ opSąvzL/3|"΅4(B{Lc$LQ OjN2lN}(LDsF.>(l:s\B;Z{K'{5f~jmz dzsb}BˈJ!GV4Q,Z%WrD~wh]}|Ǜ<%;fjjXӹ.V-?wf})1||LKŦh1\aj̿ bA*rt.PGvGx0#H (;Y.p2oGB' 9RYK#Ђ\*w';>JU2P J̿zn*iSQ J{rm2vژb1BQpӇ O0kFWEfW.角&ۮg7v|VUEyaJ.w$My,oޏfLJI J hHH7 +{M((I IDAT HY /]pȚp;*P0+j=]cxgO={^+y̪>)\ڵjG`IN`r1/ZZ?yӡ}_U>@~Cr"{p(;gN7f$@=`& Y ybűa͋kI1KGM+6dԣY?Ke*XqF~á ̚{EL9V>G/v #|+93b9%]W{ r#Š,̲ctOqQR1L&IH!cytw_W m9ԿabA$6%>:7j*94&<69^?R|!ooÓ8XM=f@b)7 f5XRjM,SrymV+ޑyW' V,,փYmr[N\к%_' esA vAPIYj^+>1 U_Tj= 6n4b `C mEioxuP5m&6jUZpyNlqiziÆ%FoCJB,8b$*_1 Lc o@ZKd m1WE`!N2:,GK~ dG?!րX{}x8ꀬQH7奈9E#eEJ.6ko_g2FхMn^7v 0>< Vskܱ5X~|zk1ҵ4|RbtL[( h#\:*5?)hkc4)a,]Zuwha&<^zYod0L4<嶽R<:@I%y5CeLXnvy;Bl@_]cHLFF_'B%i;d5QG_dh{%"Z7&dx^I!w'7?{okq %&~~,R"YV)Z @rږ{1e/K p$0 yIy6U0;l7ڢIU u_UdUHO[Y̼sΉs"Nd-W͌8/#"ZG7p$~0|vauB^Od_YW:8LFfiʅYMĶfɬuOn#.tD3oq@H};~po@2> QO.>z XAE#l~w[ ՜%AFǕG+zZʶBn [>e,Pt*ʎ~D gQ4v{kxZ;|2_s)uJZo")u#TȦ+/]J&>'OD&8`ȥlNA{$V,>8;$K8ex"B.2%򾼃"(u'wPэ3| "juVl{Vi┒SZLω8/ ˏDJ2>k$7[gRP7 g(C]_"UnW:c0a@qo-4k eSРjB+X墿w\64kXɬLZv̵~ND?rn/S$nn:1ņwGS[O0eyh`w:K!~"A]>AK[ 2$':7l/ ;^`6gҜk+11 ɣw [py{{xt i!jquV'RBK?bME` l:-ؼ5ڹ@H4U{-ZVeղO-LFX>-$}b. _brC1qǯ:V .qQFYx*N}k߾V$ 1꼿%Ή (]%L6dßrTҦ?. M'`O YiBux U(oh{]@P"q@~ɚrCE$aGAAqX1֥Qi/w(&:E1 (G> vC-Õ2vEp;r)ZAUz_5`Gfy9Ghxk2A;8g p[YoRa'^G-Z%82kR]*I$zrD0+需\C5ud%\| jKy%qK:HjBᜃb|#¬zw(R#APl3CjyP/k/mZhH2ވteu _u{vRdGյP@6%r:<ЃFd!e\Y0!X_!œY : pSxk/{a[/qm~~?Ly']9NIR21&&5Y-&/zyydҀC2“QOqhRx噰rC|2ΛNvຎv"ڷs9yjBk fW 9$eTg5gm)"jLR`ssveOOrN@j%䓋/`3E"[>7[=%6ua7ґD*q Z^\1 ~Fˆ% Y DUdw^@&T ȬLSKx-vo%|k/э ~-lΆEu:!hL{ԓ.s_iCfe"@Lȗ\K")qjC`Pm9^?gR=/x#UQ"Ws?砎4T}u+b 6-¶9iM.on _[Fiܞoaump-`( VG4~;Ķdkabg7bo# {Eg2+_4R0 $%kJZY-y'~vd[Y_1YBXC2knxO0 ,7v[{/åla+5\zΟ\ÝNf<~@r^a*{Wpe8q'eJP,͆goyK `{!ɬ1uz37k^.se=XZts|,#V 9EQ vL7*TY7 @x(vH,<^saIh1o@נRh1 j(^ \9nOf6)FO%sՁ{mPRӰ㕘H[:.S`W;ح3LchF .$`G@EeMRetҚ]:B R5C'؟[Yu ;j ߅CV] 92Wo@L8&v*Tq>ΒaKfYU >J>69t7$/uE^'jCncCrnܧTghG|*!Dj@N8%IƞܽNN*n6-Kuj:_|UL#I7g::V.Jpti$d"aOhh tD1ދ$ &rP8'F$nڙE"UbCDtS& ;)K!/w78ݝ[5\)̞ƫpK'p4̄G=D,\)o\Ͷ}^_r܍MUZw=8>4EBOꀍG fF? qG|ly 3V,I(?*PMfitb{V+x3$ )aWOI"3h7N>Wu 1&cjNX$+E,\>If;×<~#;5BcEJG"!c" n'L=Q$% ,2v/=hLf d%ĥ?\S}s7)yF=$94X{G-&ֲX,4G;kP[5ڄU[_UI}[|"_gw'H [HGruЁ׾} o9nm9,NIxKmcunʳ/pLl<& $fH| c0c@Gg3beΜ$fgǒۉdpGHEnDXC7v=>A##!Ŏ#/7NMªK S0mQ\X-ɧ0n+#vKBf>ɊI)Tbgmژ'֕ x(I( o\vh]bS,)}I*.I 0yoV?uN^DIn<[2޿KYBFH1j].8Ŷ ز%$JnkF0FGn7, \Nr_ނ0Z.n0O%UtuQC@cSf)MAAJ?"B{~2թHkgr nl߅S*I-mB9V2}oDoظ<˸kPJΒr @Ga L92}U5E0$gmY(PrfClZ mjU[l~1}M֫veudb0&[$k;.r0t'k*v=7;ɟHm31ѶQm94톹JGSѤ{CA,hըqGėʫ -~1dl."dq}CJPwS20at`a| twSĄQxс[sr &DbRm MG{5 yo8W-\+Et0#xZd'DD.mR9"8{ ȕ}Ch԰L [fhc*ۧTaq·hہP@i{Fg.BDSB)LXD_թZWUOw߳DY7!|+"mU` n=F Sl#*I,*8-H)Kr<-\2-W^5qX -qeq*,/x!cP~Ё¨gA/%2gN~JHt?sy'+ŖS@:|7WܶvȄ/&뤔Y -x"2Ke䝯"\z_Y._ ywVv!eiN C[?D(ӶZA|c_BE{y@Eß/Bs.q/f>c,`^AUO { :gw`F,[BV`\Qr<ѮPzra4IKAB̂i>? YA&9CUdBI|F]heHlϰhO}R ; :G%X)*F%Q!{!Hfge{K0'?}2be5ȘCl5Yi¯ Ai!_emat8Lfi;&,#Cu1wMVgcDm;I<RuA󟂂Y -q#ӓk&Jˤ&=^Ʊ.sA5PH, J啔OKDzP@u&O_\P2 HRHruu0g yස ޽bzQH$'++LHQL/{s4{1>7P*'?Kۣ^k*z&J_O]ivÌ\5Q{p~np2_Mp KY͕K2kfol2X}y`"I +ْ@˨n&~wSց;OKc~ŗvJ&{_$\C[)[4Jm'xEe g&Wݐ($RgIgf` 'ҲjEfUNFVVc|U˒?>)O kDB \2ό $ ]Q]=ExlK#mϷ$H 4$G5<(TV>ͺlj"𶰺^#D$l kjrGIٞH`~{,+`JfYm9YemU[y9˹SfF9N+٭W:N]>uDö _!-Irw|LUQvh,ҿ>`xtɗ\psg#R%սO Ɂ1SQ4EIi0L >dIʁSl%Л䗴rVUd2 [ ns]:I&sbu#NB(!+!"Njz[&HFJ n1!KMPbg,%vi yU9U C:~.3-²5=f'5昇D"=X? V}ɧ"s:U`DB4 9W~(r ~cba o#T} @0B_]YW)ѧu)0 9'ٖ8dƬKTm KhzL_rq8L(Zi%+%v Mz@ ^5,7^dd%: zPCW%viW[tIEN+ &M{bR& BldM >GADh>( Aա*s2ޜc~ D>ۓYꬱ&p J!xCkODP/-S@ҝCfi'ي jv˳(z2ѣKp `؜ JS aIѮ2gQ& t a{aECjV85Z$/zvW3Iii6H+bɬ+R.yV>NRւS:Gwj-b(n}6r >]j:c h>z DЭv]z;? !U++햜 0 HOc)kY=ELϓ䙺XOcX& R7sBl0T $(OfgU(PRæ[wPU;fhO0%D9GsY1j7A}җB?aDi56LxSi=AyT)$>YG IYƫG/DOڶpQQ$oITac5# AⰂ2Y erVt@fC?nl:; b 'h@=6C'(E Pqh0w^O9PKle$T|~L H6z"BXW3=RԑR[ƽ#к-Y0U gۆ Z+#;#~連쇶[UYJ9nW}$طQE)7o89=< r ;)U֕bL^ IltUc$B0PD E |2sMCLե7tv08qjS2ߜyWn O&hޒr)Y5uʽX=J(hM'6zX=)VpEFH o_ˆb -,$mPa$rVY%y_u:NrWU!"ҫ`G.R8*nu{Rl@'ņs傢Mp#LlGX<|ILsТQ7A9$Gߢc#0fO#ƐLv67yς "Սzvqnl`8?}e&_޸^Xdl6LI'WG-0[/@z]-D%4y=%VCi;s9߇߉7^b Tst,1OJ^r}?H:>` ݫ'Q,HKe->$6aaf8,`iHK |hKjwVDV(Iuأ7=99NO|XjjXKOzUf`i11bcD 5+R8X$:%$w430L@@E&n]g7vN$ա7 &%"# )9FZBʮFEp6om6ŜLKL)|b[jlIAtXI —&џr-_r-SDp}(:0)Kkr-rM^$4k1*5kt>ZY$54 K&?(yT kP'&&dE0H3M*#HDĽȞ1[#urvɀ&oul#$VDo$d_JO^w`gg0tJTp|@ydLnTsxvZԮ?~(mYΙCS_!PJ)GKF:V`[[&yAS-._%[:J S>HsAͤE:'2VUa:pHHVɤ!qv8!`rJdKNm9u&U9݊\) 0jD8@P-9 ӬiyXGvk;ނ8r3 6ncB+pvF`AZTFC=sԘLN2/s U:Kn*rcHZZR+ǹDʦƝ:VPoWkRgjB;,К̪ZzUM3rjBL!*/+;[ Un!L˚,wF<JbBPLVSKz`S:kY|Swk -L^ylγ;E q]sm?%0[cRI1'mzVbWjj:2to\`)"՟=%ح^p-oHso:$ :UeSQpvs5µ/JdV "†mAfil"8jfDzj:fWv%ijxȂb(PP HNa,~Z9o\jS! & < !!UR pSh/_iA,}*  S4(}R,}\1szfH\Rܑy0]sbKV_Q}*?#ק.mr8UKy94[ZGΏ+8`y*2k<~2t bC%eWҘ\@1ڨ'/;}KP(b/r@BuFY򥥳6qZHlbEyۓXTDI\T#dm(}ٯ:i֣J&-C#Uw)W e),)o:8 #cKe)DMVbʈ40uao% |̘JBh^;4ќ]`ܖΔh/2x O/9J85b U^_: /cr%]1S1m̪f.DysWV2vFXfEJGXXu3dVq"> DS=IRtr N0BFgo s'kNYScO:V1HRo*2lEA3)pw^xF2/u dʂ6vPGOjd4 )K[ҿe Ѥnդgʇa,[P"Ӥ70=OM Ӕ;7u}+cNz6ՎgW/FR.Faw(|IElw$ J ªI!Ϙh\V2`|-jdē [2ˁū{*$.Fڌjyyy;S(]~ߓAchL/Q29eUH+MRT;ތJjifakZ)O$雗;}l1A!F$I٣PDW~~eVk}ưׯzB4.Iy&'aĥ?w^8m{ZqZ6)@;CdhJ >{xfRCJÒlme\il5ت^f[L3%z!dtGuXLru?.KeȮCWАa{ .B e:Ibk߭d6Dz0JVM"">MS+| &r{T͜xmȷVP 1v Yi_*sC2P/Lc{a$:IGh0*Bյ$PW٭Dzvau W}N h+#Q2/eEG,o`rڿi~*丩T}4][n0e|+ =>GW#28Oʷ6"]g^)d=l!>)N&N XG:nㄖ#Sdcca+d'a=# *ET_!rMaz${+ tj‹G(ħ"20{G6TJ vL;7@t] dcb;X)8*ORo*DQ\VU:]nB2{Apkݰa\qtۦT7xq7(.N5.iimXt6* itB%݈5K^K6č~ )Ac`gN!h29&>:/4!. E@ZnO_ܾa.vm#H" $>HL@%>/A9b \$N )󶿾ughY4@!1ضWgB@ + /[_nzkɬZX9c}/aG?cVG;j{<ӈ"%h@ 91f5ʍ$.E7_A`Gd(}}5OBW/Fz $WEDdn(֛+ʵ?_]‘y걋2v9jڮcsg^Ozu>>jXUq& j%VT οRfC9fIy&u6eF :Jʁs.هLFPZȓ@ZVBJИjVW02 ˫%i+ZJOӡ݅q1K/CQb`zg9R+;=`X>r%bL\z"9GKdrTdYuHL`Wqә]=WpeVq)̥h@B=C }*QDZ(|gڒb'lnϷxY} zr$Ƹ`ykA8b!Tf{å7Nnh#'u8g+8 0iZ'J[3xi;~zX?ΡQa` ]6b(bO-m"JH-je+3zZU3n0#+fʐ$dLvzC>׉&nb5MbDi[V`&{?7f2okʏ| eڏF G mc\BzAjvJ6" y\d2&yhE*h{d?T*-W6DԬ;ՅچRx{\cK"MP䘃LNLlsRm &YY9yټ /~'}y`)`%0G(MV$V뙌ؿPaA,|Zl;_YO†ڡ_[1[KxR hQ>Ld?U~d4?|5^QOFk"߄}v~5Z7ŐZv@g ++"~HVCyj'ps1|& B@BQv'HmfJ28F19i"\WMfI'r5ΔMK厫t&$b{>zWÚXd+ɲP]f*"2KP|*=aǩ,GiEI+{fI=5`ns|@nEoPj5qixHfx@,iu*a AξEp|ͤ}-A76q1ؕZԠʓdǰSBRkeHdC -Q깗\'k%DqJBißԒdIHqY&oaɣTj;=\Q];4 XL\3b%[LWMX$qqkD\Mb9’q$˻l7:_mۋԎWZ&Dalzc.s6J´wh%>PHdP|y{p=*& $(1 RkPXiN6ABD]Y 4ոcYPj; 608A"bhfL܆YZ5y':_TX!{IDtDV+=V)KXj"ĕYlnΒļ.3PuسG+y[ ujΰ +Tbr3 }ČG5v FHRkG0uo'[Iju B;*$&]T͝[w6ɝкW2Gi䔡|653wNO09)+rj㶜Pc*k2k%=G4;r.)PN:*85D7ÒYEn۠F UYV+6O-D,"_X%+hOŰzwA1qdV@`!F}@I_m1[gцA1m'7Mwhw!t5|[=}D2[ )9ZץFȽ(e#yy`h}1r9b I2ldYDzBrn4&)ɬ- aգ1.-5.x+@,=szujKT&\=L]KpnZ>`f:M ̝O-dN3+DE:ʾ!V#A ˸7 )R3*Dnj^ߨjL30t5.|M2_&mKo\Ο\b!Z%Y_ ȬxLfhseisk{aUoNf׶oIiΔl!a$>,G#||支5G&H -.%!12*Ow!Yq[O␓m~D÷QHjyLkZO-/;`J957e8F_$ռ5} H揕 ("rÿ>'Ǔ}̽ݷ޽\+?CkD,G|B RhEf[8Rɬ$ Z qeis3'i0TM@ @m)+ r xO&xeϖS-xQAdw~" ~u q U|:2mǍ7"JX*U|C>ULUgƻg8 wF`܋gZ&$:2+8y,+VI=UQ8Ok dr)QJLU[Z"%f"r#XYk˜@'9pL &:Z6٢ $$f X]Xg̚+n/@!!nnS:KRA2(?&$򳧩21)//#غ:75!< -IP`G:EqȓTM>(yֺؤE5UX]I֞ȧZԸ4LmEjؑZw|" R+z?OdmgdRUpCB @[C{Ke>h䵒'ɤ#l4)4Vn3%+4&j =B"k"ǧnd #If#vL `icª -H:z^(]&LOlՔ4Rɺ0 ?LAǧJD9 \c{j!;k g";.p\4>~<~^xC u Nk{xe!f-+]_6vi,uȞtUSxx2ct5aR`TbVeq KCeU$}ha(,X\Ls/8>y5QL^2|Ac/n08 ^а2!<lmeCD 2k*,5[ٵNaCI5#siφj1*,eW1Sr=Յ?=^ZX8 0\PxSt/ +ǑzBa5bh%&ìP4nƳ*i/< D>2ˇ *>foªE%&M(F1-+2y\c8(Zꕈқpr"WJYcذhg7[*%:\8T2k]R:M?3hF{z@~&&7Q]ݗmωٖ3r0\0vz1J -_Pc3_g+6־ fT!L*68kЗe]c}oj2UUT3\S^VTn>u񀍇Hh)|\aDr2[jRacu墇*vaƱS< zY.i^$^!sؿ1D#c:?TlX'C4L'H -`:ײηom5ΕHx} :I-E"&i.0㲊 [ Wh"CC|*"D[uSDÖdW9Y\pVp!d:ZyЃDfh0\R~"{qAxBѲd`QzWG\-KE11)ѨJp?Z#)kFRg޺خPXo?lX'u~7 "]TDdk<uCtγߛju-:kƱѱ1kے7tG ::F 8$V7{qWGL--Z=ӒF;{qԐKT'=$ڢt{Ay"yh1)e2 DR>1Amyֆva:;\ i9X0C105*3q x`/gWW~,`O_m s7q0a͝RԪ^e:Z+ʢBV} o$wҭr-,F)ɴmh}ɬfߟ孰 ,6b%bC 㳤V }8h+ XcpBkisqPs+,W^H!$yHOq!S䄑*;;X*ۼ'FھR=Z_FyZBJ$ҧZe'# BD`=a_&]c̋ ȫXg ˗%İ??kðOX(*Q0,F 7Ђʡ,+Yz۴xHf@%AjM9V` 6HIE@jE4AtO91x:+MlsaPO nRۂ*wkpzO &v/`6:;g?ѪP&hMf*v-?M0n-P)qc32ֶK /"XYH-NGnH-B'h""ZuyBZv]: 1CYf1`yDonNHfbT#(D+ W#%y=Q:sLCUY :^g W"jQ38qdlʫe "7mQ*<oa`fD^k~^h975U-!_ZmKhO>U@a eHٶ&|ؼɆ˜ Deqop8XXT a^z,ٻ4H[;؞au'q6;Х1% =BLtFo`%6)w46 hNTFp]_Z,sv9WAoFXf]Ӝ?}֟9s'{iS _jM  }s<}@p# Aɬ+p%ιmfS.o:Q#(gi IDAT0:-`c+櫉}]O Ir4gܚR܉LwU)ucfխ;-D.yZ8">B^`6T JFe׶I!& )DDr9R\`}ym"#$,v̊z[Jŗd'TZS,Tg X]6 >%mId}8?5rPmpʉk1@&]9NǔNf-9uvdAԦw~VߥzP]̐ZÝ_X .OAjђx\?.E1%Hnu:H$"HY3$$U|k?DyxT&nr<_,Dv3V61F:U\LteEZNsADV v9!v_ ˓ӥXHFM[yk=M gC4|,nKIW ZY>j^?H.W'ґa- eAjuOoeH1( HD,rdVESӑ?^]ܜΚFsiJK:V G RU+bQkE.qR0U4 )`pd =s\F Ќ\#ڰ\G~8X}/˸ҚfUQ bқvv4DYF6q>Ōճ_ ߺLjU,-yyz?K%E1sӻyUkc4k Y4^vd9DNGbpym] |(]5+ -LT2NʞSJ$ղ2-J !Y(pNr& Vd֜1y+20IPo%gֲUf@ΖYfibH*NAF4OA`/"onxiP*C[Vm8'5)Ѳ{HfMcIi/%sin2 zTVB *]q>zTOFv֡sV^BhbAYJEHҕWy/f]$p29.hm Njm/ =CUZ j5䚦6),%e: BQ g YYH28UY3gd@&øX'3P~!PJYdL n$M+lB(&ȃ%uC2k󃍑pq4?*W,ݒPqoۢnH-R/م_f!gO$x)6g-K VtOOb{6i0'PIkJpj2+FM9OLfozdk-RȾH6gY=2H^ј=礡Ew7Bdx;&: u" !/J[6A.AI!oڑYVL%6Iˬvzb)eLǒ6i&~u3]eK |`inecEl 嗈gH-(^V%嘠]qpQr}TANBfFUy]\2#RGJGSJGM=XRԢ&-YW})2cwbV4 ۓZ.&ҟ Rߺs >v[ZqnO9uW*3 9Y4,hlk5<"d OΕR&UEjYD޶x[ssAC^,{nx")x@d p[Ԋt+k*һ5tXXsĔQZ?Zt*!$F 3cw$eHV Ȱ.I}{َM |lGX6WwOR0e+tv[k;dր%Aچ,TKrp+ E܂!+"6rhk.磠ޖ H)YYi41ao?Rs)@J?R}K]=sUSZ#JaJX12ų0=c\GCIjKI-ٮ1r {KA؆V%b:n r5 YNe*2˒{PȬZ~XS-KX "ē|NʱYA)۪=Dz'Z/3ɵ3ф(|:Y9'"1`m!:O-E$vQzT80GjEȳ1fV1, ѵn#2ghgF%K^E{ёYl$[D?\AXbZ[׭C$[ğ"riprEɖr?qwVU0 u %JhiBQ 3PZZ4+rY5tO'B--c8^M4IdRO(UJYVi^ymI,\j :~@\Q= N-]:j)ҩO26pXBRRm!#\3/Q$ցନd.*-^Dr-^ZRDpZ5S45]vˎC->U'ѳ:c9T2Y2U\sԬΘ$mND`fwQJyuK"k2kj*FI4^h.!n\y>VYC/ԉwnNҀsC6mZdG KL\Z5DSkc%zHXuLd?nA݃Lz"9 % hFj*|+T""ҡAl:0~j%%|6DhMfpJ|ghZ4m}ıZvIHN^akj ͉,a /<+ZUS%Z)\[X2aI7&ld,t''K|)+M;77 U l< RE=D.;{^8?0@1Za(ad%ZYjvZ\WgԲ+_k!8bZg5`{i;t-1ChDy)-,}&{*٘9&S딤SC\QKЪeYc׿p 4VcdV0FR1w[?`9к ("djjc*gyszWKj1Q%](9 'R>Ӓ4$:+l%$F .Ǻi+-6I㛉pٞoauaU/S$Rd'k'PB Xq1bhLUlΝΖđ-bwVj$GJD=܎mnx=;_}2]9'-E:&u -Ky K@4Α%Э*ݘ ČE>pn@@JmY8tzGWy!Pk^/no|\ǵ֑֗)$\ WD }g|\a6-UdXVG 2ˇ6)y^6Ƨ%(M$$SzFt.ir2˷B/ᗓj=1\s UIb"Fxw_ɩG?;B\~,rD [ϯ +LJ6abXVht|0AfZ`Y(<$|pdT6`NDfztS@0FoUtYBC%J>WH-Yyhy'cu"Fb~Eq` h)hAaW GhJ2ˏi!Y>eN"DPglv<@=B* KLEMVD*95'pZOl Ο8ϯ|RdVEtBË ZVX C{h S*{j<$pԎK)%S\T@YJjI E/aui4RPy z+ę'f$Ñ1 BC0P[k$su!JAHy8OB2jtZ܉pG}#к?/\gnM" /2#cQ QSxnCk<d)q2DŽ@)_W*"Rj\/Ѥ'9* +E0SEʜ+p4tvVFjt]Ō)"m+zVX--7+^c*~s dYaZԤM7OGjjdTry~櫿 2kDVG|oVpξw67`ĹI'OWo?|^k< WI)I-0i%z"u܄:Yê^k hixjauȜ kZut %Ef5Ghřӄ|V3#.YI*zˢ5Vae3\/Gʡ$42z4{:HyF45dUHj\U6 } 4FDc~4}<`՗5yk~x6 :yH3o ޮ_ D6?qg߻g߻МǭKX ;kx|eGj=^%8{r򺀉H|D+ WFf!J9x3`;[5H-ZZO'7 sY~GBK!:$h"_ Zlz&OjJ=` ^Zɞ244d2 N׽?ƯY)*9Փԥ+`I*E'@+ǭu:){青|g<#>/UIpt q5VR'xowןg(i^:"R}vgZl>O'N97kդ +F 44Q擈ʙZ 1p1cYYÐ;`Ҟ>񷬄: cKe  䣺%mnT{ Ȃ̊PMIeFEZ-oe|[$IB%8{q8{qx}[==-y,㞉QVk${ G?4JV|n"wD_}qEָ !ϬaSk8k_2% oі:4X5X텯} ^^?"||hQ<`+&~5lvuO#O2#Lc>$Rdlns3NHhд4oFfEq^3e^h8}??zYXpՋُпmDIbz83%E 8x#H4ֻ ~a|#|(ܴym@^Ɗ`ՠKL9ښ(8$2kB#/ݎȺogogHZqxk>~u׋{wtB*B^5]#"DDQ\pYlxmo0T'p1.>Ej،o(]y0p8?<}-X%8^?ߑZ>)=+aŠ4켏Nb#$sko$RLey1Z%S%3q0M_(mMH`~Sg?zg?<# ُGOgO5PsvmΟ2JnU~H\P>~W8L6]bZ_o(ϓZ:yۻRAФxO鰥:,YÈZ>9ZTʎɬUY֟~_I-J",_^ S4~ڎKc 6f l5 ,=(Hcx/<^?g;;#.y:R1n5a!6Cil~>>1t%>GNg6C=`"#as( -;k@ Q o\Pøl }Mkh6O5wUrsONw68~p7<#cW*-_!MQ2֟Ya*pŅXi$-Q.Tm.'[_d/ (3# xHf7?4=6?E`ޟtJ٭ɬ'6ŶVswsmW?Ϧ %` d_<(=)9Տz#H;U011›Ҧ ck%u=bp.dQR7V @a&ג_ACuarC6Yh-m&c Ab .b{{zz-WU|wުsN|E&F.Ȥ Oqʰfm+c)FXyW~>[xZ8:9 [+S| n܅xˣKtRb(ņ3A_n3d4Z!(d"3$2(d'+"\UbImuU 6_c`W۸u&y2?UrkӜ8ZҶZ;YL00>8bv5Yp =]9z`>'Z>wɬ_"XЄ,xFX`x Q!ؙn!!4/bkkrsd`$*,+چ3Vo*vp6 To8JZfmՓ^\6&j_ 7dʔW$RMkHIH<6 \,k3L6\`}s㍃{&|͏/c8DZc/Lh-R5 GRpLVL= d k㙍͈<~e /DZ0wW28'pppBeS $(ܭ^̓VR+r.6ͼ!MF1$ PaT"H=1w>g-.McޜWyhmNK]d#Ty}!vUx+ WfvC[9_HZP7>0r_'N,,omĖC)bWvɭ(D$#:T-dO50VZ+W 0,|kC,86`ؽ*gpx{?tC67_sy劭 woܨY!èY%zBdWg:??K{zͿ̉#$%85[Ҧc9q_<_qc>n%'Cu7˨ 6d2@jL)JVٌ_ܲIWyV5qf<ɄZNFm9'w C!ßS*zBfiAK̊d`<;hH_8w4,m|<WS` mFmc6ۙ煘'$XD`uu^h!:D)pZ2S^g'J*ARP"m #tތ(fK)>$.YazxCgWo~h O7jzR6"?~sovZh1p.2fFnGqm\3n5/*Dϓ͘sVuMB{JOd*in3 pc??o?۸eJ)g:-YDUwc/UK(-ȢO5TvOnzͩ;\6=g!䛉lJ73Mt2'!ēm$K u"zeHdgbw{Om۠`Vh)aѣiC~z%Q,\O ǎM,U|n#na64fSt=|5&;[c@<@PocD1Gkebc6_*%`6ap8f8}xA"dnMfT&,5R#ETPzup=6 l bȷz lo=ܿO, KB66k-'+3n0N4"26%Y٦7HK}tY[*10x V*=33`*D‡8ؒBtap 08=0g?<7&e1NH絸⪱P =?K5L\FR_e liM֜ U_N, -Mz\dJKqHKVhy;۔码)Q& [5-bK_,Jg$9+:S}O|w KK88caww>f}0vnb6;,AnP`pFn"|@L]~lm=JdJnד,q!Y27ŧ_HܿWg1dΐPVCoߩ76 :.x:FvCCF#lRIJ/#x?J"ҫˍk#̲z|Gv^QFAsIKtE4PgmPa)M1”ap0.`ao-o?xo>h6ZKyFWLeuMԐZ`a#a%$_!Y=|GL Cܷ,")dJcRRRK/E RCepޗPReVlg^5Xk n,}\ {O׿o׿S,-boUܼ2^{m8Y6l[3d>7@ߕig,)m)-Y%Dguy+_ǀ3a؀!;,-Lr|Sl:ăIP?rGdž*1qaCbuia"X [0̀> `` xu|o`xoCoxA%Ci1Wn74f3 Ȳce[rYF rdN>p$K, B3MHfm؀aa/r 1N`ix?Gp}|߹ K,!+/Fe7K4&z ]u鈵4BKt fVSz+M|Y#4E4E`.չ t;b ošoP\s]%_Y/ 1=f >0m_t,cȲ YP-"4dԜ?h6#͏6?_..x&GWwX[` 2!tX<u!MHh ߟZzj~ ]Ѓn-~pe;"!/|]܅1'{ғs6_ɀi6t6nco^{U+XXX.!/C?:06ql8O"'繦YvC@s |k,-lϦFSps |p2VV2ji6 XPa&T^00:%V<У WfjFYm#^Y]dc2k}avm9=U²؎E'BO߉=|y VW0.6nΟBͦame"O͐e"AAZ3$]] 8qdz`,,q.2%ޭZLWHV]]]Pp_% b!Pr<`P. qq<} 8v8q.&[a>.$ıpso_8'x- I9B*2ҡ<-JԒچx"Ijl!Ib8M2^JrIhI `H[뫴9Id jH-~ZC+.A>J6Q`RUk2D--xq+y,uU(sG6[yq [ 3,-MQ~,?3|k~AxGbZ\̰?9t%Q۫|bcsS?^_=20¥c,[‰'qze,c8`vv+_~ zck5$'G (Mbo~CrceSd+lj.dKl*H&LSI0>qKZưZղ<);،SZO. pyom R!.TΥ$R*bH]M &ylcjW8ӟ8]=ZXȟJ 0v -"f `T+[~WkXIjyCD<rU&2SgCnjҍLх@g3|Wxa1 pS-cp-lksWG "_9>9t~V_@[w0Px*sp=zp- ?nnbO>oɖS0 00\`?]Xba!aIj-[piV_<"faoo/W_훷-SZ̰UV.ZJ (/@hK=y Cד;*e9lI>=l O}uWO`,`' d_Ɩ0_V1c<ZYV^ω-f`,5i MhE9J۔vl +ݰ@*>ӆхQM1g-pntm؛l b~ s|= `4a|(AG{\Bg_&:Wo:=m\ nz9,;R$[!e.ie@$%%"tڗK'0XI|pqX}_\Z2dux 1dgf8`&: Hޒ"A2Uo:8t1ӫO7TdYQYsv( af;ŭ  bNfô _7o|._KWdmޔ5Q/2G$o 9lj#).p}hmi.ZъbV12CDkdVV1 Ylav?!q8b6bz8Ev{Fgގwp})ﴘ]ȫν]:?W*1x97&B/бO5b,..+$@Nh3[#^T>_#:*Bc`4ِ.D˜lA %.]N~ [z=Er6;dؘ2BMM1zŊn;ɰK !Nn _Y@^8Y핢1 +6l {ru943rBw}k+cul~l =Y\Hjז B>|[ovNfW<ʭݥ `o''_#OVl-LRX;O7"MkH:6pk+}2O^[>$#9c↜FBL= m! "Jo~ޟ0p`!Y!0;ֿ "0<`Mf> ArT 7NmT+*l~}ђ7>r$̗2٠yL܆?(fE,_ Uߊ}0}(u"0HJu..hƒYnD .k2a..e^9vo7 ~ ~-|!5'lA"U[Fdz3ϸ%A Dft5,HQ:k퉵Fc|mV?l!djcG\|ͅy~6P(Wg&61JI^ج+hşRwٳue^ew~#UO?oeauv?Y[<\l(Tr"Ӽ V@)~=dڿ8<<n0p񱋸ݗVP}V8˫qjCvd~\r8R~Hږ9޺d2pJ@$&F[e?)ԮKY$^z ά!E ߡF6m6TBdF(BGf?˿Ӎ{G_o;4Q`+ _&gP24rrb.FNOtD y2=}t5@u73юv e-[1 ΆϏ[VC!MY"'Mef#[/w 3ŃKHސ4ϏjFXlm _!1D͹YMF饟}{ٳf"ƥne+Ƙ o_dOiK0 NN1۟7仟ĥk>8)1ٝxڒY'7yj:7+]JQ6ORX|(fLe; \a /Ϳ;zPu{E}`y fVWT1ٞ+s`"]d zZH7.Lv--GSUZQNrrYEB2Ǧ79bkF Q 1>^5xk}FmAG&C~T)mtA w-$ϧxd/%9BW6]t C;# rox .\¥ßlY*m0.o_ṕmQF"d"S?3Wk+6˿ &UYcH>wzR1 1? ! vm(VcqYWcW[|uAqxⰢʚ2V.ZP@ " T|ː*~q}ظ%#6kIf`nlau\JCS~IONڷPZ\ʪtHs|+ QVWm.z]m߈$k Dl{G<6E{/"1Z%bWɮPhPL2 ֫"vK( FF5~~qp*]G+Z߻i>H.û0}#_Uo3}cX+M{t /\s;/o]ƥ3~+x2|sb0HNʦ.<Iٻpg ydGwٳ|,`cϯm"ęOnNԄfI 2*v} \zJ!U1wo/^(]D! E^O#:/+bZp5VGIjDRKx+(17H$1[`oME&ם9mߣY#шqxpqOOQd1Y-^`3]Q`u@Qԡ$lWf= -98/kZ@jrh@VwvH}!=ŒYA,+}],@A\%% FQ:k|8Fz:Q%5Y[tBb0 K\G15zd#*IjUVOZ<}Yeh)WNl2=ZUiPZ&vZVI=4~6җR$oJ7e|If0v r&; B},$OZg_9^IggW_8|cb_NfW 89#5X{b"ϏBMF^E*/~u\:L_9a$xrJ33ԫs"qqnuUzbso1Nagr(SD쥟}eTJEr(Im*.c]E=N_ 1L"]%;^U%*Ыܨ<]\ӫOc&./j2j_萦#$_: Ec5c H懻8N)kZA\cd,HMIȚq*-#wYOy.pQ17"lEsdBkw׮Z¤GF[~= SۤL ;nS";s⡍֟X2`cuM?7n櫲M[ y,-cC$D6qK2{px?ɉ(O$.o]Vj=4FÑq!Od#m*fy+$zAbD$ yd>^ .04Ѩ0#GVft잸ږ-}1OӪ$ vװyjOThݵ|n.|=NLq" ᔆ #&bC"(:@( Y2W vԮ^0L1#R^a9~*#pdbmr- ~%A^,VBy wɬ~SZn+ۣ`R 3hȌaOctaTTϏqC10¨Zq>b8po24m1U"!Ec9Aǯ=MlI. ԫOa8h"lsV*Ka'+UX+KTs YjObK84 N+Th@י ']˧LlU[$]۟7ױ~sZU]UmE~Ln(`WiI.*6h nA$ Pزڟ: "%u9%gZ(DMRzaA` ʐe&ڙ uBKOy9d!cuyB6Z>.'c+KfEN_9_m166t'$I6?6'1y!.Dw g?H -lC< \],¤=1ld1>o@ s,ǼWgV/jm=7"AT5~>1)7='W\bT eglAM\&hkFAftDf"&79)ԇdD$_E _j}\H66][)kdvTic_-l3ҹprD0̱Sa`guIɕXWZ|8dl/WGHjZֿs<&x򣿤2YEz.N#xH:ןXHrE_ehYo4o-_Mkx^ .'֫WAZ#|7>4.2\n.o]N CNC,ķ9!@+41ɷUS mB> ~(g%X'hC$2`t~~j'd:Vnq E8ntRy`6lWi,Q9 IY6&Z樱5e po qy0T$XNliHFXŊB0@J Fj̣D4}X :boD^,rw2+ߵm&&\uRa"؊^Lj 1 kFO'7pՊwJ _CPY:HFC_#M?r~Hl+%zDfKG~õ!%̡UL5:(Nj"zzI #(%zjΞY%li泌WQ2ϦZNdoZ5[͠ 2&өaKIo4W15/旸=u VcU81I-I]*? S<۴İ!F ;}'2yTm}]Y2ݎ+pom{׍ML}~;3;J1AJuY%&D)קr9qOO0"z,A'-%کp[Clٱv|B8 z?jp)/aCE/?'b pLVu26k&+l ?q^ )Ū4F4!3k2e«VW4W"SCJ0Nxԫsi}Vz&ۓm2 2\&wpH :%fS|F%C;^H;Vd+Vs2둑u1uԯq7F,xʫe ,ȫO=nO\H f,cX=yQgcj!(mfOɬ}j协AodߣYv]Pn)[O(jEB7<?0[jX&Fz[utT7 Sv9K>eݠE&,h&:O'dՠJwOo]tLh7>iiZPQp'Y|JRo8m2 S"bQe_9ȇ4Oh5v)3 +g5,ר`y(ڃ!]%bb !8x V5[Y]2ݱI۲ y贴a >v$[n|"~vG"4X]6K &0*n!Yz 6v.tr "KD\Ȭ'j8qjװ݁iUL$=)VWa-zRF\AA"T{_Զ+Mߨ)2Qc璖Pr 2Gagp!i ]2^f(&b>|ewa d݆,nGO oϺۏ|uGi\?.*#>(mĒ q5! ͭ)X.@o'tAf񠦷DU4`%^&eL@D)zHqZ lɅLdMB߾LPu;ROWr2J?i> ߎJ[a#SnOWM0.68ςdNKNza-(jIR| D͡䆚##TEbY]YgUU[4D| bsku#Nq"cNReƽ2_M ^gLeJ36Ńzu&(22} }$Pcŏ-16ɬ qItes0 S.BǧS1 IDAT6Q59 ]eLh1h3f9GeXIw2%§8- UEljxÄxAs(0 'jZg΄F2yWdڢ$X*%&[1Tc4V a-J*+E#|C>"@d#[?R]2]lWbNkAd1S"+"Uo|m?}W#>꧆Xed@l<{# AmԖA46G8(j0&##b+bVwdVPeHuҫ \q%1E(9g}PxyI6sn&deXf);4S8^)\jUG&TG8PņVsͷjC,۩rMoHO*OE(2j" OH"Q/0ɘj=ZJzw2MQ] 5G)RY"Z]YY6mGW;E!!'UyHPwylPKD<)j 4L2kTellM W,Hy3WȬɍI`6xAFtvS;"Ş:DV- wX+8l^[J lԑo1>:kyLl`h^ TV_fC/̆:ɮXfn6V- ekϜui{> &;f!%$Ѹ AN W5SĤ&\<$|7Nv&A\kJ䤐2ֲVAV):#%e⹤vjD= dH x&D4HDJL96K$ei{B:$t:UɳDV>G#YNuɃ*RsUS.Ą2,H+& O{'@Sdw/rhB%_=v5Y= (ܗ)3_H[gJ-G^ p%gmmR[8}f%o/+M<@GUGv2Յ`7 6Ǵ}z]knV2uROzσ2tYfUy_"8b-.F"}xRi) ƨZЦU(L6a>!mÀ>dzښ ]N@H "Ǥ3b'v pT4m n`j eLbXQ\ 6l?}苽P$:>XmqA+K1_ 2xDz݆=m11ҢEV\pya}!V, ]$@L| OORIE+IٽLCD=NZdƐs;8ĉqlQ}5S,UG>b6 O>CAA[=r5Qs S&2R'!u2/d@0`9 ƀm3Qd? U^h5[~jzU+!E o(l2&tsZ$ա6kmrEE:٠06GFOڳL' 􅊷!X@IU]0#S^}#fz+[;[\≑@Xzx}Z%ZՄQujF!l!EӴ hze 92t,,-YQ^]DLdOZ†V\ħ:~C\ciN[J9ɣ ig&DȬW< iQM-]}N'g_b(xhe89e´o94P:r&>C!Sj0APDSԝe]>\ TQGҗRp-,HN:o+#zjcj4v(Y$1mospiv: 3n-AyⵍO;tHN^CfZuge+n^KI+'h4:Qt vr$52m?qK7~Ä %}%uT /c5בm[ThNvI_)^2HJW-b@PRݵ:Cq,MgDYHz0櫟,H-:-Fm0=ķc#քM22Gut I 6/p*J'=A 䍉1D&>LZFtE@rJT,_,ԇԐ&Z9#IOs7CHb3^sW4pm ]eV''$ݹʤŤ> Sx9Z K-ځF&HH3b] $#]u5Qi;b˯䒾G̊IF$Z'biCF(Re3I -|$"ai^Jxf @+Jˈf0QROPxPjl/I.]6D`!h>2(:-XMg^=j3?8 !j>>V`B3,Jr *'1+#JYAN=VjWY&@e"u5t6쒊OV!]k&wDZ|×U}(RdE2,bwu D(+?]RCHoIE˛H&v=(u^JdױQ%XTz'7%ύ} -8BKXYH0W' k\o;'LP! ^ Z ⾲,-/'TnI;/: m 6Eڬf5UQdgҮm& tQ.vN h?m/WYU%ip$D3A6gHO2".G ے'͘,u <@Akض\6i 5Vk+k-] !WEX vto:4Y|Y+ +By޾!sH[7B $eʱXEjD8:RTh47\I-و6j`_r6 Rw8!ƒ&NNm2vm fbLb.>2Ag d _5"K dNVK un` ,&)@CL:x c4}.9qFKAarsKy&leL KDɡΑπ,,h#L%1ׅdAG>(Ct¹ j9 +BKLn{{fsCc2 Qܤ$WUdJ!UW]2+dVpt:Yӝ:h .Lxm7S}4hlˌE0 qIR'!>dS Fh.[2k$ _Wwx0+U+\`:jxRˤF2wHU],uzrҥlDs\lԂ6H[HkkcC^ۃ6 ]c"la> $!@P%T)| ~+]КId _jeP2`RղAu3'4"ijT!uRV@0PcŝED#%p' 1Y =75EUf\M9a2]\m2mn] hbs.tj~& ܐ?5d6ʠ ʯ0i 6K6YPх t eSWYm{>uFeѸ(]]{I愃TAfup9px~̉U[i9 Fwv ͂®_g!ն5A9] !ۜl" )^bI}k!ƖHvW[!d*+]^W:c Pfk2Kk;.G#gA:TpSr 9=T M8ȫ5E7N6ʖrlx.:&}V(/ B#Y-:hQv)K4*W^o6bE8n6GX]V, 8й%-[z#p)ʇ?L.v b.}I0FDL4coAmJ/؁)ϲbkKOh%b <%Y*>6kހFP#* lRhP82ǔG&;=>G '/~n"85`ɡJ#YjkGj.exܚ=G$2+("-HX:Pm362 %InnPa!BkuY =hԱ/.VkW?? [ХV,8{?RJ|~KD5ȡ>j}'Q"BZNFU"J1^g25 uTB:"lYq~0ok#[+JbY2=%ߞ-ư!O*GZr<&׭3 7mhܖE.;ZX׫2*7©%E#΄,䨋 } P*'^wy]%Gn&|(|CfBY|.j.cVISfl+|,6=KWƋˡ˝Dou=6<"3d=2$ %Kn@hW*qoMXk)-R|kSZt^lHq)%2V*U5)wKL /Ie7En1k3^X# | ucKFecEf<9&$]er@~{j"2CkE|-y!児V^[Y=mxjcp֒/җx2x!ȊRBI*I)Y?H*aHGQhJ9Mu ںV'(C_m S"ݎmZlL$flWj8 ]&fPBzPnEZ0ɠ>h#e|[U+$J@IbI6Im.\#Hgh1wVZH#*:h/Ke_vY>JRaue5܀M*m\C荱/-tzB !Ky-$Аiɇ6t4'6E@Ԓg^VFf#Lɺ *GiikaO8mJ3l2~B)Ǻʏ-h%hBG >Flרt:r#l:#F:*K+GfZ:/S!aFX7 ghI 5$|,.D-FFE8UPVim#Ⱦ50uWVhkܷ(ENIGUPX[Z@m՗8wmB6>B`B_vM결K [)^} MSLREqC']D-oĢ˔fWdV_ms=PZڂhoZC&ӇAV}^iPCoOPX-nmCh<*\ c\dw!2!S.n1|W-wD8IghBZ樝f4NV-u6K1ɷ=_dFC6d*"ۦh:HpU\*Yi]ėʎdw:s3v5(u;mcu [ӭZ{M~)҈\j IJU"* \(;=6y%ŘdwpOH-Ev~Jt&|gU|Xae#_(FtJꢫQ!ubT+YwQ ꥳT533ܧpXXPxB$z$;V?j`b~)dJ&:8Wh8pem+e`a%!XCaix[i '69.4/Sv1'UouAcꠚ49%Qjp@dY-<")4g\1X;5 =AзAhH4"ДC0W颁T`"*ʏ*fsB6ֱeݶAf0>X=_2 Ey1NA:bnr ^EI~%'0eww HsuL\Mst*#ʟLY9"+T7Q: t0=mm5ţmAJ;3^h +B_U 0.wc=1t!ј [&FZэHEU_i>I,0Xdo Gzg"q2zx*γΘܲhTARPވB3RZ%ymY%B BܣʜmmQPKyJYmk_Vhi`7H;9ZΜZ[``&OjiugKE(YB4͵,IjB:>'hR8;+%ץڄm/*1W^'^HCS>_#CfY/mRh ##?\WcB8Իڐʙ(bВXOtԓ?khңBlڦgo2KLKN ʤd([=\H*+kZ0BVI mj&^Ԭ%lYF,9%j07;kEL| zqszBԃWU^^7vLO(Yi(Q j(E-%( %de?Ճ_1V ׊iIo:lUjN#4|jŀiArٝ 6(CzVWh=}G C])wHdH*}je T& O q0zT0FӃ6:|7:5l6%7pJv`꺥—&4&e&DA}'k}u[nlU+(WicR֔whLe6&;(O`O|hE ]Oդ$Z"R2KQ?N6#Lo'NYmgcZl̀Ϟu#?z޺4C[ϙg$ 7aNjcմo2eA(cM}\]z+?;5&\ܽ:C@c$M[y#Yam8jc]Aswv1Ϸr!)AJR()_4vWI>['VF駭2b\òvW{ +$2Γ~7TYG'c#_[?eǏK=f}RϸMGO5?1,tܟ`jQIb]3`'!''[OwN?ܣedY%If/^%R~&ߕ0L?-$agh4 ރ;grx5:{u|zwjxuӎGpzv:vr?pD~EcX;%w \|رkE峮}bښ (Y=o߽(bwO*Cjٿz@znۣ#2 JOob.eMO3ץ1Gpj-Hx&N A.ջx{9l 5@(ewoira)Ix$ *22W@ӈrUj,z O,cGը57zmѠHxp".wh9bkr`dM2 G"_9I嬕|ZqzW;?^ BR=;WW# _Okx-w({aIRec,Ҵ6^{kNQP1VI~IrJkYW +jӓiGgZS .^%arkK2y 6]+( (ھȱq%E{kð 5m׹nA}wV[,LSZ~;^WL9( Ud F1h2IxyjPIN<\&jGh(;φ.CSnn{WH`0holTx5}@vC١ÎtA{7~Ůff$G ) -"Ͳ &8F y`xiA'-:,]zFEV0 mY_UgSYpCq I-9m::ԂYu \ޯXw y^W{p}TQGY^ *@hПv}(WFy`$9 B|#Qc,aZN ]]qyѥP82d{8y`!r;?/:+tGA_w5:cJ Ei@R'oL^^0Vvym\fǖ-D)Bw'|Z qV)bM!t4<) r`+)Xy!>$O>tҁұQ?XJR.(v^?T,C R@Q75{Y+# JՖ)J't^^vb@o~ޣB>9r%+_pDFS/le4@P6{$[ BAwB[y=yϾ=BV G~:~[,{ABQ5&H9PDž=|AXnI~ 2hHcR Ck UJO4UtPo+J >#~*Z6Ti5ȫJx<ˌ/]|$I =\lQ:SKELx~ :Y-;\s"a)a_WsOQܟֵ9ε:"ʖ)w:moxbWCSšV-1H,/N䳚hf'}I }ؓBC%^QurS޳{=uByr3 !ũ%"nDU%pYCDE2Lx0l;I>})ٖvZ6]ɛ*j` $^C1C\?p ],0V9J-)b:Uq8\SƁXkr4G d\k3 }~x;LS.U#F\g$+\cdž+xgQi_/։;pT wmיWnyYйk`HH]9 '^^@ hm[7 c0s&;Icd;ߒ˱n4p5:k7»nO>d$p|JcgO=@=߫z8uM=..IUxiI?]XB=w`% h,>{h1Se_9Ku|A $0sh)?al]dJ'..GdoF }p'x6(L s%3ǤV뵊Hר/j.=Wd _1,8_lӆq' "\LaI楕tK &&FΜMw>$SUsv^BhqsRߊgO8έwx%!^4aQ84!TW | o.[^#/q;*K n9hE:;X5m%L.:gkBw:pPȮ҉.hJ [;DNuc/=y&Xْf-cat=v #@λ|뉚/]ZÚK֡<%pĶDӳhd/̿t^NJ &VE!:#.X"Sы/Iv{2ůG@7XhS fXlKNIeAN56K +7 }#Ծؙu V,@kw^)΁Tp5+A~0TZ_æ)eJ&'%n#5`K+aQ>垁._ o:P{szߡEE0F]SbpXIs9QLO(r"_$ nop: :@9nѲ'K|ķ5v!:?ڰj>'̒Bw,m3qXƢ XAE+7~{t:}+(?8T$j¿-SpE?j&2z6zQ/Ļ iQX8Eyɲ'Kp)s8$g^r h)[ WdYy=vhO+ULGX-:z_y'6cYT|j}jP+Q j1[6m Җ%τpqvC+N7(<`k@ؓg`H'P; c/zjyT{'U#c{o-t7Fk8]Z222gȤ: b&r~pՒW)/fԙ ClZER*?>KGs@/n-t u0 uU#tP]C6L^ 9-\*ЗYo0w6Y`6"`ԏݽVG9}΃׫k0u|!t0AI 1+(9.0h$?1i"*2F%!Kvp,JnњxjZ]n! {)WYkC󅛣i/vt$/xSbVZDYٶ'<BHJ]ve,!><q]&F *3%>ӳ$W x>Rrx"p얨p({M .||ˏҡ!"mZ}M)6jJd_ѯQ럌 4Oӯ,Z@[ǂc?){ԀC= L9[v!=CIhJg г |* D'ZEˋhJY7 =uq&+ o`NOOa[^/~j:)f,[.u Y_-xa$Ig\Wn>&ry-0&zyo/$M-frܹ2-$Iq Y6CX._e86i)l=˄kO[q8F̴#aH0̺H4^Qvchr1O/8Nj#L%!6q*RϪ{a ?./ *¼-EGAfk={'A˳])-hG l]Ԍ_{[Vk$msv'l 4z*1E DF)茎,D<eai.!BΨHp XƉ9|UQ{˓?XH2L,\ߥ4uء$0Z܇" ґJqDضEr%UGNvof-sA5q\ɂ5,3tH:`ˑ)wK8$t*KN& IS'snN|dh-HёQ*V1t%غ7{՞|ջ^GB:; ҩ6leGֽVBAqLA5˲MBTݓ䊐eR#/Aǔ}xL*+eﮍ]ǃ( QE:PYg PzZ$e潹/h>w t.o1=QZVLi$H֪ËZ=Yu(3U/+̀}(D U .FebX .4];ҰUt:2J^B:Fy u1Iy'PۗHwUbPpo[UiPdu[ ұ<5ATon 8@V6/5#Ō H,΁pA _#Sn?1z_h,@@LZ$=@ Ug6؅KS\n+4AՊR?~XqnEf() tS6;:s,P A>&먱Ȅ1rXn* NsKX]z)ZH~YPd6[k枿c|^Y0dK{޹?럺dV]̀՛Wy_ώUt0|3NR}_?t]ej3}٬uy5g_qםJpySFMQcO{QTur*dۜ{AwvvhY\{.&SyY !Eq]`zGG QU ^ aZiw;~eBL Wa*l/_*$^p~ﳪ%([ . gRtnOoLY\a~òwCKU.@˒)jbYr5>ʲ@._x3G7;5ij[v9n6[,k_3WܣXGk;@tUAaXqׁ>T.,`$,עv|.Ȭ#;ZM-mvoGOבƆvv$y෇Q:|mEw6)A,s6/ S_IЎ@la̬9@VNT:/.3׀O֐i'w;?:da_LJYó Xp}5f cGJ-躔<en?Pԛmoʿ8')L Xn>S91ż'v"9(Y-[C1@x w~Y`Ak&H[Nz/QDZ֍>*9ւ|:r肬=? L5QRGSpJ̒?eޡKَZد۽f-=zAz\ZAtk&ڣz\ߋ?~W{6!w^[0M8wb!gT4a6:1WZ}IrEAg]084fu) nA'dY& ̄o1)A)(UzZ>B 8 nz ߴY>8bK gSq@s ~(}5W-4쎟@[ njnGr6Mw-Tm^*V/."kAW@{V??xΦ=,J˓RRӸo9r/JϜ.=J.Һ!+ǘ11Эm ސ ]N Ϙ¯tL#3Pٚvy'c=뼧zy@ȴnX܉h#*-_@ʖ `՛^xMVaPQG90!M:i9 ;ء ^&E1r,頫tT޴<:Bo->ɇ!Y+hoCn-CWa<@QFH`pSbY#ZyP`VGm&W!mH: GΑNb*$+g,bhRn,|7ȒpHoa޹Y%e뭓ٞ# @/ޝڰ+0v԰lQ r瘟F>-o~З:/Q^9kD_#sYhU t'۷DK7n཯>rx{DN8rI:G=1 Gs%'yċ%?/,R%#,N ֝4%C$ܴ xT;(Ώ6=c^5:&oۃtdx7!`Ə ՛׬) ]^`m*̈́MUXI!R q|EYpl)MLe.Mr Hl%`OFG c^9wƯ=4(pjk.@xŜ,~j3f]ԉbH9;oS`3M*Q, 7Ko.>,?G{9Yzֹ;B˿ߺ||pnk:ҫ9{d9bw88Vꗾri4 Oc\ nk(` A|4,ؚQ`cgEwhU:Q_T}U T.]t^4;u5Q g+Zx}ӡyYlh6[:^?wʠчKjL$V?$;'[C2Pz =Wʺ&AjXFNvݎ5n{SWg K;X>4ު!,JY5\)`i$+iz+ӄ3]ΖlKւXQbx̉G\.)d0򃻏^3K)6 m\[c_Č݄ƑxV)G {"s%7- {)ZČDݡ#U#t _uQcm[RΗI8a6Avwϓo= ?r~{{bsC-X}P+#όА'*JCt+ohQ8^zXcrgr~=[P}75`sAkˋyۭS=g] kY+8̴V̪N0( b@(SB}r.2IǼJ(#]>̵ߖt1/yBgLJ::Ɗ☧ķ8Dw9K|D[eRu,,~Y3bcἠLPBQP1=xfʝp#@RSwFŎZH TGϕ\$#ݕ$mvr|[V\Pi̓BF}xGW3D eZ".'jD9 } 7 N%%A9g7qx ޹!<<{tsݻU E8jQ拲ZbM%% | $1#%,G*#wVFK0:RSY^:8iT}q) CO_JЪ{G<4)3)3`LJDh0ˡ[jt6l,PM/ˤlL䉍18Y}N `- }9 a$:Ї8)]9QyK!'sZ ͤQ;>R1ixjGf:OS&YȬdn>JA3 IDATQp29&wzoҹb_z8]n7G` d(%$pWSl-J!DUNkC-/;ܡ! HR$'cjZ`d]}R ߊ Uti`^=^S,#َ`ur.L;hąJlwVyNZErA}#ʺ_. "ΑBϥ"},/hҴ}BFLy=Hx9'Irַ0}3K30Zi?uQhyEqvlW +~sgaD[^:a9T-$t>|&(//K)K^iIR:^fC 0_sd뽽xB`©_L_H =J%/S<TJT."`u8檘2M0M3OYEhhuIeK퀡=|db9'OvSESis`Na/AWK..}76%ž 䀬AG賿8.&\Q⥒;䀀 G̙)+ڲ `C#?}L %5}>>?v=cDG*ѻi>sxpzY,SYʨLQ]h bv@>"7I}}x}&C$eȒp_Vi VA`L^@HE98\8 }"[7Xi fJYp*!'}_QNtA2Z+n3+.;?qtfi*IdD#?ѿKL ؃7S Ty%'K0P׿|O N_<B<^;S l $11q"W & PۇJ|2AѕTwI>ZmHvf D?2}2?pyFɳWV*Yq>WGZ5~vpˢ FIZѠęY=W"7"cO'B^`\]Bk03 f ߥ_`V0VD2Ħ ۃ8$BeP_uWW8utW0m K և !C[孁s6Fxx3g.;Ml R!szQ;)ezSNCy Nt]l.iU-|peѫmzG.CoعυZ}{v+pWж] )6JD$"H?'U;$jtn+ {vҟs5Rn/='/9=A'^=Ǫ;oFe(TqӚ_ɱ,t;UՙQg;=$P3ҚМ2Y_*1?s dQnot=m`oYTT Y/^рH JSg?9V[tIJO0K_4(N]? k9ne,Jf6>eE>_u)bULnJZ֤S>LxC9'Hl8tՔ,W);8Y\v )- hK]Ɨ+4xEX<DuB j-sJ[|=Ssh>BzdOEgZ$7+PCk:l:_s-#R, (@$h>]O~yvAh:&x#e؛n/~X:8V^ ܃X`r,̀,u.d.F#<<+=N<*-:M"d(ʜdB\5$T5qZ*Џ)%>% b)z%ؒ|֞ai1< q4'Æ:# ?|ѩF]&3Mfܡ8Z@$|Za3QSOnM)j?/VVE5P nfS]dl"M? ljl}vۢxr4f< ֽyhx8$uGƸgͳ1`/om= AVե֮Q\ڞsn_z^T!uiXkl. V.wwRYf*eH+ؑP9N&@B[~rId5TDnV)R6UXQ#r9e]3!T`wʏ<؞pZOoʔ.R}F @fZz*#U=겷 _iXʒI$sZo]3)篝əuN 3քR8#OZI6^!H&aYeJh/;8 Zm)ICx7wGԠNXغHi.^DpN/՗ v!~}l[`⣱Ȧ]zQl]$x{Z :kz$Nwdޙ( 9w M H,dkQ;|bo zwReR42KTXC_AfYjjA[A: Z,iT&poSt3>e*֮q|rہWQlCs6èK9#iKż4L)C7H9o~@wi9V T| B/l{7CгKIAD,QKdZ nnkTw :N #":;+8X9}#9!Bla.5)Wᆲn%̌C7owpV׀tt$}:_x/y>)N`G[H;DSրiAބe8nM4e|Mvv78cŵ㐃s`1Ω_:0[wCk=Pvj=6t~Mu@^[5Ny,s5w?ƀ7dpJ~;ʷ&;: d-y3{Oy 1t:ea</M)xdEJGEpKuxYO)CDu45$2c1M`Jz՘uQź]RD&C?AΞJ2X Q"VƢ2Z&-RYN|fDvW Z$g щyFlix Uu ?U|^OL'μt]nuCF8/r2Ïkٝк~ `K\S ?jDźp%%1b>r Sc^|D7zgBォ+֓eм{'c90va`Qo9t;ɪ H(63KL]'ogU6Luͤ/E|kY8ҞE.+_ߖT’YSKB$<^$-Re~4KfbI)& `uxt!|2Vl?Qiι_a j5=qmߘI'zȏ7LR\29Uhx&wB7(O%WpEt3l̪1L@n;z@Cv99nݩu&N[z_~?Ob5pN?I=y3g^<A]t~A~Xڃ&Wgph|7쨃;`:0|e=ʒղG]hȴX E%NyUd$S5KBPķ׏nGYZX.ЗdtGZs54ŷT}aJ~s%IVXq#7 62k0jX%V)B_ Of>Cr3l\V%͍N7/f7R'ޒ&mzīKi/ΰ 96 jy{jK4#a'xD_j*1<`篟\ΰҷ$Iim7&cPm_@Q [=wno:l=&J.:tCg::=rx54l vե7Nә?Ɍ2RT"V^[2SX|߹ t.,} eaf&ʇ(3|tZ.^\&EGU*"ʾ )<&@[! aĽ=w|ˎrH}shw kNK5l@S@o?Ξ6o);,`|L _gp(O=Go!;:84P SlQABƀ_6FE._oT/_ĝee-'TT_jG15   raa),dd~ob;mtάgML_9Q`N*s^x"1A!@J6e➫n^S *wv o?м gA*wZ)}@)`1^ї?k$@N3oq6~ ZD~{\}Z?GzT+CD[ƭ㗣 ]Qձ߷zCk xD5l#Or3#΁ ֐ztp3cr^ tK?uvs9:},\nt;v8{NSaho>=T Իdj!{CSOE ,+T' WAPط*yo.3`l>K9 X*Ob WKRzKVC=U~ rj} KhܩnY:xrZ?A@6p3t>PLX(kPA0c|TbK;B/PK|u wXs^:aQA7 IDATCt&¦#khG`2_ˉV!@ҧ;Z)bΤa 8A+uY5Yq)wȔRT]B#>7!ސ[,OЧ#ꣁN. 3K~+VccQ g˅6Ŏ0ָ݀}bȺ&8*es0KP)l'`Ye);2Ȣxۇ_ucdK@v/ 8:WZѳ{K3F ]1z&hցnyꅎI>7ZQoKdŒ5 #q]B(ngo;.lwt<̿aR5.;M%LٱCE?Ŗ\_;k[ʇxbX/2>vO)2qCF.HbPH4;J!Nn}(W1/L5}sPH'V\$O⮬Q@:ddKxZ-IG[uㇳfE[.7jKy1t`Yֱ0WNtYV'-D͐Kd3ǪN&v!bzfa/9C  I_1ϮK"Nƣv&!{נXqZpvD =to ꨹;%K67?%!5[ FO>r8΃`tz!Y=SocmfіPHS۞D>j0+_s1bCO3F,YfryJ1<4Bx kutuL "'WY؋oU,oX«MJzְElmKQ R\I_ E82:3[edxA5ʆvmR{9 ӿ׮166` bwVQGO7{h/6=jqe hl_tKeW⿳\H׌euuWdPz{t0 S2>Hб`9ЊO#eR@o}S.S7FOnKHA!}՘C.1AzWYc 9}[sB19yZuo񺅹.\Xr|~w߆2t/iZëi`pxa)ǥኽDn6tqMQJHwNx IF|2GsavWӜV=GázCLɱm4QZCSߴ=Zo^F~Jo-!/&#٬Nt5N3xFc멅9|;]DNYmSD&wʵFuΚd90짞|uUR( 46cTR[OIM\>[E Nb5ES}|CDgL +@T,I1x"d h|p_y]>Gf4l iX1y K9,Z- dY gv(YA!mu= BM}i{>|X|ujL"opNhe⩁S*KO/hyl" U 9EƭǓ`"!R[ܩra.h|leˤDѭEz bgus(™+779;u[&~@v ojoj%;,dZǠbo5eu ">4W$g!y,ޢ >yPUЋǬvk.:Wy\ Vc}1re*֓o<&-7{1&溊  $Mb]BUv̑0 ?^DI$K&mꝯyg2kl5Q=&{ͯN65FwJ#d &'pD3d  UNg""LJ]Ǯ%jSLUfXeBlGXָ)@vB1mxRM]:^D8pd<1=`tka"2,$|6t_ky1MnwNu85{x'ɱyN "SގgYDJޘC)(^8a{Uu6hh6x?=70e&ViX'Le;OX,'M^ TƂʔDĺeiIb { 'a&\IƸйT晘-G9 iMkEifS춥|"4?)&%:C֔Sϭ(5[bz9~Mx޳=[ecwh\qtgV,/PdCXsbN+0=GZ 1tQ[5Aӑ=qwӏV=uMs'iL_AaSChK gq:T PeZF!,KHʝ2JTZ)7ZOKͫnr0b'6H8CKܜ+֘۳Z_,YB?د}V#SS7τ{sN^iz{T6ڧ§ۧV4䵊^Z+@g-jaa/ecH-MEyI d'0!syh梧'D6']!%o_y.o'T?ʢ1!6Eg til}!vjƖ&P[eDmcO+7i^N G'kOnd^u.cUlJ]?'=)k@+ `&h]o]`f8k$W%޺i' Kے\f[-~ޚjdԷW>*c>hN`q3{ ̊$Zɰ=B95="_[$%.&EdغHkD=Q٭i bhK`(jZ tlGF"%K%d7WP3BtkIao&Y}Yjky~H+ n>y.qQכХwPo2¿IK6SgAm-K{|ݨ;&8}a_85U-Nc1ce;Vb*雩c$ &}GF/t`qJSe>Yތ'?.cw-XErrؾ@>C/ZV1Mq.V2INGK텚c/,"L%R$&$(7D~pك<;'1 kfY?N+:03>$UMr9t'[+dMo"ddҩ|Gɼ|҅#fNNUSI;Fd( z'`KFEϏxɀ-}=ZD=n &P*@8f 9KէQ/d;dҝNNaz򪤿ylQnҩ}" m( 4xGQz;jZ̙(btN.epe=iȏ"ԽW-)@'x*8VIN4cadXzE% TXʰ$˯7Z.DK^!+9eZA[ w??F>M}-Qŧ' M*SK'd Q'8L#D)؅Ef,T=J 0{ bJ%#-f%.9ـ/%Vxa%(#iHT4(IcM(cB֒>S^IRm^${А&(9vX 'L[p0eе*CBաDj~ V B軽I.>c(]*3YħL#xjdFi sJ+*J+ ^^de>괙W8$'ήZdb9ܥS#ŧ\_hE%RFǪ2E; ֝S֜&qt.GK:Y9g?+4&T@oY3! Cn#ۋe|mQ}.q޼]䭇Uk"SUج3<$bn4g8OxQ@焷@ 4@NHa{ Xޣ7`r ~-hpF"NiDGϚ1 mG\8 z E2yM~߸;qTYIvnQfvd^5Ilkl~I1fN*T4!ٻ)LFqh %SOqc1+uQ"0V$ɣ+XV 1ۼ vAi-4̻dGdjwVkzh:֩CZo]N7qD%m؇%P@b{mj}5"Fbk5CΦK|w5C`ء5j'U.Sm$Yjtr o՗ޏ'^&#ߑt f}t 7I㳒@Gmnaͭ .j0˺+KT|ᧈ G~̻NKY B/\_< @rR W6wPQ&lK3b$KZ;ʗee 9'}tT .U 93嫜)M 0ך }wo!s U!H^SEy,mȾS^Bkewpa>bX&Dst2.-T-_&쵳5, V%1*9[fvNC']c)ƨP(s0!@<Ԟp喱WmS;8n^ t/޹;e ƀ[7MeW/d$/.GM-A JEJ7U`h|Ybw+` [=iBpP>_|6p{֏>3t3o"TYr229]&Wns@ghZb_M`AOJ!of _u|tl?tu/3@^>K6|Bǡ{#OQe wALR{&W:ß|Su_Bk1 wkǠ .b菏ѲG[5uܝ|xMWx \jV IDATh1o6d@4 %rء%m-B](JߖyZcl#fe-óD$(񫡕߀8\=_j|F~MidzOK)z<ɭ]=a &}E.V2l V0˿896A !A]Yy×0"f+qt>Tpr'%!$U CtRQ"ɢ: jQ&E1Ty'=?x¡^6b& ^n -eʁ]:_"A9]w.AGykyL[5x }z}$PHvEa=z? C RR{~fQA@.`0BmU%R`yϰd||βa cA-zAq":vأNz 8fO:id_yHH^$w1Y%A.ל!dEF/CWU;[vLR}]6Ui`],7~5%:SŐh]6L:7 Fd tk@[ #djH[ ׌kWnF˂o7fem;|;T$,}yӡ9͈oi׌qJ^qP +[,IoJ9ċ\)3±C HJz>23iE|!K'>"jiw1B1&:ɿ|8];uzHУ3\z{'OW,H=@]W]qw9uh`UDH})3H4 ЃWpaх/-:sܺ"LB}x=BER᜽\mO[![Ma;&ܘ2J6KT :vq!AGDhjv-\GSynHEhgg@_.Dk:d h]u0M\`j7ʓ؋9U4^{` E1 qb32 䀺X)4yG$2ϸ0݀ TrZ^Z|z$]K=k??J1zñ,4M=Z p{= 3;a=919:[X@$>"k w11'StANxHJd>_vk @m2ժ3f͛"5YR^Z>baOG2 ;!*:aJbؖJ-&`L  HJ_&jqVY)*a)(_*za*t'M]OB$t5Ap 9<$^͙=xQ$ۮYz@bе= {YylG+4%* .-hYlsvxu$Pg(tl Wցx*0bbQա 4`mSG#F^,F;^J{wKv9'uc!.~Et͸ @>;>c '<(g7j!ͯ<|GM$<*Sk @V*S0gsH1VSHoA Y}_w8~`Ő.o]^OYeG++Ij,w Pf)Avp f=gGK߉?zGf%{@ĩ-R'JF bjsd^dMsLGE~ys m+; NAPǑuӘ5whA}'StCkP;ºNƖY1cX6+:y~~;bs&G4o)7]춾Am@˲cV w pJDQ\/7Xsp W[}29D[j;l {jyiCc@?10V4qOx![,e靘.ujי~ԸnN1iA`/ܓ7^OړNm%uӺkZC\X0wj .-B/t^<8Xg5^k5T[xps3Pߛn$VڑF0E@9O2U_%sp:k*ǹWVte9J0'N12W=Ű ́2/3eMXR|u兓GxH@XՐ}70J:08__}GEފE9 )yꘐKcttq򹢃! :ںx9EvAqq϶J@>{j__ =R`[}Y<5e{P`^r1|U9  [ ^a˼&3Il+/1_ &<0h=`Z? vP@/O6p-VYy(z^%#ߖO3 +/qK¥X$$>){Y+|Ӎ '_eXM]xuZ10"|z!?~ o$8BcXp2Ss#+[ /+xH2n;@Տ2MޘHy0]<;Z|vю_{R!vCͫZx_1x #ۿn3 [3=IR/tޚ#!#J:5Α_:L z_zڪxE-Hc s)dˡѱ͍X:H(hMWZȢlͶ|PJ`*Y$ ѣ24k\c"v}2aA.E>}^azfZ af7?H}@ j j4W0=]' z8qq~~+`$h"uMo6S!84y.<ف~AZg#@6gm-;,[t"E"-ތn01vD +d{Dq {VfCKތY'l(RҔ6C@f7I 9̬8^߽UYYuTeNVi:@! AZ0[ (أXpGS1y2Lv'lw*9HuH7rU9lZ5:BcH&(1`){d*JTo 2TsnH(8ܺ"v?4 =Wf,ld\R+A>†}Aq к{4M} XV9&Amw$ dwlbdtu4M`fn%iɦ 38NR~VWSbJMX[^C@ʱ&QVE,( 9\R `I,r`W@ ?+UAzn=ANXY8_Ck6m fw ~78Mܹ{q8c`AK3֪dL*A%NuNIs)E'3l;5۹S_g &`J &(-1Hk=Iuj|^W$ФVvZVD;l&̓N3O&3D^,N|CO]}T0ʭ&L8O׹֢RK8uPqmXYnKr>"̥-ODl`V{r*Á}W&kهqAgFst]W4'<¢7_חVBޝdp;L-!do[j+m C ^oV#gPMTVO됢J˱*+7L3l78wa`~aB3Y$ woT$uBq/}PPآo?Eh3 MQ_uUZNYn,ʮsx /L$^b`z Yw`5xlC,JLo1{!CP@y@܌ꘗ3\pK&HZ[ɂt9S!d!\S?< dn-o^qrPxU (GnժTR` m/[zYo!Y?Wo m6[hA5 z r7gM 7 Ie<IT19*9/I:4RR/CUzX?vk+L)[{yB4H6@ 37L?'c`<,M0Z QE@`錹Z{^Ճ{ Y @pU1x4o`bԟ_}ϕAT*C^G4޽|´Q}~{r'12,J–0Ԑ-H%UoO2e5@vM9e%=L1SjS탮z_' &зvU㝝o;tS pPlatr~J{[oN C3QuDg3 RK=Rސ8LD*Q U/t?%(\ʔV$e`)c=6%#Knb/y&}VV $: fX#HސC㝍'ˡ3XbB**yb%m"bZfQ|,:҇a-JŒ ~e}xLfڈgi+i)SF %dQB JčK5,evپ> AIbv:hJoWhv8q! ŒYt4L4~*nb}$m4$=ݗ}Br >Po"%d OQgI&7.cЛ\GK"U9ES ==em3+A~I&?Eg2 Z[P2׶fsZ7ۈ,{  .@@$w";g&|S/IkgN`-go+}hB0yv!U@f(*7z`&N\TqO_|Oj5^gj_,$߆ @ap6YLT09Zڮ bE fH2nT2yF`tҷNȅtLOty_E:zת\N qޝ|lS`YzsS6hdU>Y^9:Q1;rmd=g+:6D ի4 u͆6GZ]w!5f w؄MrP8t.I/Ǘؽ6) UjdQȶR;5WO-Jȝ{O~P-J߸Qv0*%Z'$jA؄REttQy@`,^y,0'@wٷiX}}pɞ)ѱ` 0\?}SvMF+9YVx |iIs)V{ 등>FtY0j@څ䓲cR5unlf(,>=t_>`HBz F_PU-}YPJB9ui}Mԯ2sm7 8|6|a0Dc q[M 1RŸؿh8qLֱ;lVTGgGEFԘ 9[dTO-`GMS˱c:dGElQ¥RMn2꾰<. ˬǁm,5sh Qs%2΂3X?bb+XOod4^ IDAT prq[&˶i~\Z]I@ΧbL?QcVD/#$?r}tnrhA4oIzHD#W ]k!̪ M&is7@co{Z&$ZKP P u6:kP F`UI۞ L$3LOO΢VZ֛N.<2r4Bq$iG"^*= v#Fa8) dҤBrv=cP@քyA9/e:"Utie`/:jɩù%%dd? m+f.[8be谮Z 2%…"&cx:Y_6gdEW"O>Eه)Vbc \H<8SLSil,?ᵊR K(WwIfWBI *CQ6bU@ue[<ݨ.,@X'n0#qEbu'j5ZҲ0̑ÞG^A5ݭ yTtPzm0#-#3H×Z5 _e rQTV=-R[TN7_J~ԃH."~" Se"KFK -⑼ 8א߄B} !P7}uXd9?LmlDi2px*Ė?r A@ԘE3Y_iCჂgv=5CٟI{X1( ȓ`@/'*- I 2xOR^J _2ŶRyݍAn729 h8 Gaüp)RQ57WԅyhP+*LQEN(1V&eE~a0AHALװ-ߛ u w3TT(8ЩL|Z&# s,䳳_kzۡ`[NEh*rLvlsz}HG|'2O2)9g{S\ږrlMX:<, uq4c ',"VN`ug3\AM?{0| Cu>8KGͧ4RQD0ʳS%E/ uZx#mM-K>Y3Z_wapuo6l m#{}NC^b|I:GdMdC9Z}'!1-&"4 ](2OWR׳`u4ؓʞ@i ]8tU9-AFCSDnY 1yC|ҸbnĎ0ZDe&~ 9aVWnڶ=qB/\tQȂ~CfErLZ'ﶀs _|QڝmқOK((-utNY4u0=FkUXbv2O-ZJ]Ɛ?B%ݨJÐtiӨuf;carAy&\Mf[3:?Q0k}kP N7׶H1O}o؋[A;=C ygY11G5q=LÛ[lMvt9(?+E WwǥsjP*Z?vDHK"}ly[(ïgg4;uWZ7 { k}n;e@ZIN2OLܓȔeK[MTkUI/FnmA|2IIw|(^*x1y+Zw$o墳 ,-[>VClRv}3 `,3 v*Ia~w'z 5EP.GEeDc'#w-"p pbGs=mz$@8jꖫ,&DeدMm#x,l:y|고: (E#@/.iޝd,aH1/%+IveҵnrȻpyz4ߐ#wIfY{r *nI*5Ik/w9BKDxMIHDg6YDT>͗ l7XvhKm"@ ٽ'Nn&hgni p$M9 zv2h:؝pM,=qd0ePTі}J(!Vt]kR&_KGPY.2k8tlQ"v`{[ K G6fPr"KWGa܏nn o;̀B7ZS׎2(>ȠvpךJ*M@OP\zP,i]JX'"2@8]14LYODgգR݂Hc_kbFsx,y1i@;ö{n;`)|qa31z~@{29 б~&foᅪ㼦I.>~QhA^o#de/}d[ε-GUV1c,FtWO+",5M ^mq].`.|>Cb4k쟚9ĘH0 cy-bMWrkA qy ?XdH2kGdlab4#[pf;_!y"#!G;I)fbLbN%m6lL!_i׋@hL.Ig{) h8μ qac 8}LJKq[b"S[y:Rvrd~죾H`o@;~O &emZ7RvvY3#VX*A)TWQ[ g%󨕩EM]fO4!:k'#5~l%ͭ=YS9O(ȫa~ F rsr5l[Mt5i+2/`lXa6N'_F^ 8)ת32^j_GT?hv8d4>oI' }]?<2Xx\O%nEb;AE4%@ցLwzѶſ@nC!W А9̪3 ܘ!TqH)RYL%e,Mw) XĈڧrefg;8/\$ɎVѦVTMdn"T P<:+[E`a x0 80 !ivdoE#^wE|>yC1_ؾ0+`SŸOo&>[qǏ9LHR$eǥ&5 !cZ4NBOH-zW^-iM6-gTaj('eoKީ,%; v(#щ'x>i~9\a>砠EɕfKoRծgij 2DKnbC* &9 ۂƮyBa"J,Ip$l- x aI1?_~_*X\['A-D|B5=ϵ9= _z OIdb/05aW;VISJI EfvNnB>fk5"I]Ւ]Ri h<ghqB(;q&)Qg> n.y(t&9&>NbiRUȹp:Ml|ܟj: Օ+5Iե1tzQ+V^hG5g?!KgTZ}LMYd05c#QׂZ;5݄#l_;@LQ`H O=7}SZ {Zu.⪱@-p``W3Dž%t~ZC~oKgOP( we2YĿ4Z}=yvzU6ZL0,i3dVهEBW+j"uKxP#@ExǏjBL ieDEi`NI\8bY#k|T\MBzI-%ל&S1B:_niybrT!An$$?v"2î*rZ%0"ϩxpog$|zj*no ni !zL6 oIHy~`Zo⢘~F>ݤ[-8@& я9ijW[G Xµ1Bͧ(8@kus5S ( WQbtLD=^S"vH^wVܲ2j9fKWKSL3nN^ ӴF$: {.)PWP,H0 [ghyA2#i;4nVR>\|0XQc]Ƞ. EC5 =iyUO -B2MS)^)%rrǩeSdyDn-Wnbm:7"d_!x5$h,2{1朦4/I&:Jv‹HKfj%9KKeB)i$_gцHCzB)8S u^gcʐpKK<YNޘn$*+Q&d?Dzz{!m9Q h$y8,bNԖaGd~-V(ص$niv$P XKKv47' ʺK hݽ}>rqƉȲ3(-Ci Z#<^ēz>Wrr)O0o" shΉԀ^Զ~=SZt<̬&XX3fhYbu8*(I0EP3",x(H 9ԏE"y]-./fA8caK 灊09w7a T8wvLxw6A$T~%_/ޖ|9ztgJo(ZKK)꟣΋Ȯ%SS%bűR9K=? `[ohY64DU`Z #bBZ뫈RY}">{]wvYcbsb{CB'uCi,+-:F>q1LE9~F"ӡvSd>Ѩpgp jРs` P®yђ4mG'Xgc` j+4BJ7 (t.qoM88_DPK3no.,k J]-,%Z3yyka3\McUZ~bYi֝ZZZ=9*4d P.: VRcz%7c;m 2(\lP몐?}F]g/&HwK˯EטD)-"zu>[+w"@^PM<@䳘@7fl>,}vؾ[X׶5N:eU6K&K gϨstMD/6W_X) DP1Tsa@d';S686\KG ^JT>Z ǒX0p+n+l 7"gheao9͇S.RR'45;n_ݗr IDAT')uoDTRȂ}TP:JҨh0ucŋʅ5 PpM,`XU be# ɐ*9p&!`F_lO1)I6kM`*UKnIGE2^\ vƊ~|JY՗Sp[ Z݁z\-zr{!A_Z^:z A~5wf,:qn!l(anVv~HFbd Լ%fNPJ v MKئZu.!rRR=ׂ<`2z1QXs 鮯m?uU7%S#b"y!AOi t!;u8D2(҅bxeO>v: =?in(U L3/yϐ&!FgTiC뇌Muc|)}>[ѶB7, ᛦꎅoXHA޲x Yz#FJfl ֜1}hߪ"&֧^ S,EFE8"l"E@|)Bi UjaoFL#ui)>'~0mB!Sxb-im  c KkoX1)+BO푲)|]t$y)OW1r/86#:V!X4բ,DmrEJKMf6t ggV{8<UOܹV#xX_`@w47#gJp78Hl{{ $"dDVUH֊ʦO5>Y(>l*3GhJZ EdiDXv r"q[43&?p@d .kc$-2Bho D%N疩%u8*䕡ϯK<*6H%.]TJI-ZF:l`㺀` g{Y22AP'+֧«,SK]Ye v>=J]'[ gCy#h1E@Ԃv@çg0 Mmrb*4JdN 9 PYX :tuNV@oueV˜,qc7\=֐4 ' Oy~dAMk1xٖ/w#Rxߕv?P+CNԽjUR`:QkMqhUpx肵`8݉j7}}||XM 򍡬S_xK0|ց6pl/:i*t@#?I%DL.Mdiv_9|!^2niߴfEIK!ǿ~Gdn퓏"vVPPgJepJ$\ˢ`JR9@ J}t:ƤSTMt|Oh[ }VCЏj|.p$I%:n7c wX`3o/kmho UτPɶ u>TS*4ҡ*zQ/y|B:A WטB"rd]x]%%3׏Rb*(!R$remխ!N|9= 4oR诠z)u|#Э@DQ0|mzssʸΡj/Dy 6 Z\ A5}D؉vٸl1qkƊYLo..:uD n_b @8M5N"T=P%e V9_Cn F1K̟hi28(D7?1aZDa2NoPZ'Q{*m9d)F~q>?2 3-&|2#UԐ2 JkbHYXRA-@SGO54Iئ}706 8y87v QZ>Eo=I*[{>;3ֿ-o+n<ܠihP**i)mR]+YS m8@RY8\ZRtta1%z_.V$6S\-mPybFd4}rG{InᗿZe׶Glcҷ_i&-"8[ufkaMl]oL,AkLmaj1O*=kXPAҭ2vvVOhݽ4&ģ6vE}u.lȖ^(q1"œBXsPz6,ėD+S͉M?hݡYz[EM JZkϣ>Im6'u(" %1$ôDYK fRh_L}y\3ߵ_]׿@NXم%L#[d5ܶə&!g-VAr9f"r6q!Z_xXՌX lash0+̒Ey8U^ft \u_#Vo ͉F$ @\PZ֜HԲ1&‡Y/w2@{FWA ɢCj .ƐE_$*Hx0m;<䜖GY 5}*ʸI#Ew |`,_)QtONVM<\7!iOR\ZR) rT,3zb橪T\ FFZw_; QZ #ï&H .,* ]9) ăWqv6j>fl*``QT$FYFYNISRI"v)xe*<[SfȬ P)kL>[ QC nҢ\C_+~SizsQkB:zTja3DY"aRZ _[ *T[g^ojtZ+kaKM&Ħ0D۸?hPk.Kf sQmysyţ.%\I2$ZC F ' 71]J:6d&,%X( HV/My4ckpx6)h8??KU] j;$<اS#{e(E4w["A,⨴߳0kim!eKPp>w0y|O hAp`$J+܄HP.FcV^SI9qQX.gr"^s-64 j 븴~YMSr+ "p14*5 R^!2NP" c,Y>98c0m"f ]DrJiYo$R!TdƸ~)Ҳ3ܹsɜ"]=ixQ᧋=z}:-M(r6+tM= ޾3X(DiYq\Gg!Y腞#P0;*/˺ݱc*P Ci+ZƤW󺔒49e] /"ҖIKdp8 I)wDί°@-ƴo9b0XV^I4n9b]?=~yRhIq2|ZZjLE9El;PY毹i+@kF:q8DhH--V2zPS"~)ԛ2yJjwN}j2G+rI:$C6-?ZP_J}//^a5 $|"Yg-b7*>rM@,`-LE> _GJG$\@!εIA'Ա񊦡뀍O-[jPzꟃVbɲ%+#ɇр֝wsF,>hI#))ɤ/:L#<[^r0]d57p&a.)4{zJkiN] J:g߉@xV(K7-pKf)L_QQruY$&r {$eW.%Il[ȕZżi튗Rk8KBc)P$iݝ)Yhn+s`%ǭKdY)2|#'NFK$h}v$Jk b(y|F[f`V2hu Z]"_KJcN딳d*2RNTJ)P%. VVPN| 4QJ]?n? wRi̒@*-t\6r3Hrcq6^iZ T(sj}uЇ9V$x/p?Kُ[Aa ~a \vnwR8"s.L=U)At\6Js@]PZTn i헅a+`eSPi'r*"Ji*M-l4VP〫jBo=_I7R x3[NTc@чGxF2AVpi415h6 RTP2RcX/vC hܹJ fQ3yZ6ea$&4MŊeL/ˌnɐ?B,$o,'].N;F)h}Vh ْ'R-MNiʱpHv$GyTT0列k5ud\OTS NFjo$}֍p rU/B}t֗~RoIIo8d گ RH;6rA3.Rk>Y)bS˔tM76nMк{nD5 eYTCr).?W ddu8m>$L@=|~(AA"sݳВ|sM>=j`ڭ׉jZ?ljhyU$p_bޡ>Vn&m4A6-P=k[ynh6sLlywO>>)".ͣmi X'UM zTsRv3s]7RmseԢ>8 hyxVG6dA[nf㜬E@/7bOTEZ1yA=HOt w2h1 @TG)dѺHdЖQ;_k^n9S0`R3YF% @qB7hn$tɹ؁=Uo\;O(g}x4i)) w"TlΧj&68a mʇJ"Yк{5Di5.WFD,W/ 7y{[!ڹU9_l)EВ9ky%:c'6!vMYtXR"]xj(ő4zb GtQ(-&b9|BHHe JXtv Vb|ge+B؍+h s(HfM[OR-S}} pvV{׋S?>()Wfl.9i~^c], hy>J?X7-SBO 1At `4'q9Ά #DڡW.(@zIlAғ|.T:ym%V`Z&ghIi?/W1ɻ4iDK9)'[2Se5h+Nc)V|K(>C+Oy~V'~Q"g:Y {u0 ?lv@LџI?7:reYygVG :q8WC,JܿnĖj5G&^>QZ1 (xdcڑ5Sۋ@`M)lYLtRTĸDNmJq8{0٠irJ\8vD&Ij\,o 84"%PȜmW*HضGGgpf/Sm }@VO|IE2{p{)`Z\`/Ի ^|Eх~׾Dia - ݬxCZ㧊(8^HXǵU(JޠyTo=ܶm [RmKٷ־2x7VyMK*S)20~yQܦDz-r;2nbT:{M&{zˡXvb%H9?4qt {YkDo8,5.#ʡ< |Y8J}TQ)]1: Zv!@4Jiz5Cmt`'vo;$윺B^( `DqidQ#M;kX[nS,2pvH-s AU*T{׉`"q , #Go Ғ joWlza-BIڦ3zҒr(3)kl&ӿL.˥[7Jrn7 I5&EJn7̸:sQsdugDUE(}s/\̪3: Z$Bz.U$XAܲ΅{gmQ} ݋Xp;dZڂf!ZK*o(-}A33V~Z)f_o1}E>Ms\ȵܙ( gNy}փ{*9)=ԗ-+vEE#i^~'r&ٽn8g|{?Kب\+ Z`?vDY]9Gs_Vmص#RP_8*RI~yBZw^Fi`y B<+&f#BW USl~1{"xi6)?*XCS&M>rW?*#:Ch]p.J!:z~`)xSwD7LJeYҘ6ȤH綠ZѨ#ȧ#I>x90zQ j9tqrZ\xYV%]FB~.%mӌ|NlWQ1Y h𴯿|q, hݽ}>8 r6:Өo=޲kiƲYTk*H Rɰ?@-'*`;n`Ipi)M=XaT2JQh%PE{.-oڴkQ|bsMJo-5Duo}Fv |^W[<,|dmWG[>6%[䖺)%eS٤+KiF0bb YsBZïAEiu{w0ՅoCtŴϖdcDt% c"8o*fg@F&3xXT'{D)_}*>)S$hݣ.헂V*/ZhiEoڻ5,NⷿhϢzl"Y9۹#,sa$yQQx3Zw_UDiulROV[~b57PIGb^u V;OViiY)rډ{6ǶJO'TT >̈^-Itr6a: y7 o;JY7>=V2sE@x/FRj7h͵q +0xK)YXW-\z6iusO~8t` 4`4VPr4M dtL HuY7EI B4twԀ/ѓcpLwrvb)un/:J^Eio#Nf2W() DR7S Hrv1Ip4VLSB7-_T҉fEE H;!s4y?mxK^1p,*)z$ΈDnDmImՄ0o+jFtuS){OwaueʛQL۸&<:HN5> 9 7җB*/ /'<}L^~d@.2P\KK6H7|+O4 %bȒs:OitYDz.p-Rkk>Mo+7yv'!Ϧq0)e2&&iv{bq{"Ӊ8~ 5 KlWj5Զűn%cQ(0z}xxyPkJ]q@N>KݰX$=}z\*;S~ySќh2AbH}M[ tٶt>J F઱ay,D ! r<5 SsĬ45@Ys[ܭBm>Kx4@:m¤SS->"k}$~Dt׵/kt%޾ hV'(ӎϏtը-sL$eEC$"&SI=MZ69LXppĂ:B+)L2IdB O60:kĶ'O­%k9Pir/ƶ A"[bX"=*ho b]u2>9o3d"ya> oI`h}] mfKJ#edMHB+ɀ>VK4 1f.*>L(WW`YW#;Jk8 cե%jYiLs 3$*EΞc'`&Kr.XtB"ښutupB\cQ]΂PHB~͊05Q."Y)" [5n;|-۟ݒ1RJ@-wA$ǰ A""l"ՒG(I4&+}JoKDb)sp+Pj׋pʭtVjsVC>6w^f0 Z+8좴0'ܲ@.{vڃcز3#FGV}_+O|TY*ze ص`/FKl6%RcNlۇ`AOBfiYtmMD_f8yT|6g7$mã Irmsj,8k˾s[7aZ?؂,N!mֆt>>egE){+3%MH6JQчRs*.4:KOe+@ݗ<Fo?l,4@(hZQN.87sKRj,5Ocr7,ԵkշІ,tq꾘oڿBbm#1s_1k5 LI%!CFܓjH_.JB>^2QSztjFn^ʩ˸9*2"=ΩU|}vf2o{$!=ZbaI3T8aCkrZ!T%=X L%e涀zf\r@ jIfokΎGi+ځVJ)̙f2Dg"b46eQš,YRc)9e܏=SoҾqycrXa97va+VBҮFR@di܆FOt·r=/֒ }rFr4и[DI&5DL >5>@C"9y /An7P&Iʑu2_̔GoT,ևE{L:gEk+M[R|umw0AN1BB/TP&W;x!#Me08xλs͋ ~~njo7Y#nȃ1F&nX)>uJzQȔwAҋEZXs kokozh_z^j$O]:i[3<"jqS˒uNJr@%˾χ*ISRTv8rRP|8e(2dufP.e'>Yf" ٠_DA߇+6`>vltVp=@}d` rHn@@xƷE}FQ IgC%k S]0]dzIID?'*:yxt-,Ȳ`, vyI[WWS|>(0j4(SZN}KnRE) Bz+ 'j-h/&ҡ%񔔲<;-]5/kRfMgU,JJՂ R`V[$R!}$}K 'O92 Ծ5d4 iI3ĸV$m40늘Gt->_qKBWQZnl5mXWe=qaAasDi>4_NeU7eP'HZvV~֧br1ʼFBQZ Z2ۿmͨVVzI>t>XɳX.A?]B(W vzõ l \_^'Zo-LQsN?R r6vVhK~rg0r] c=ύR)on x4גJ,Zv\Sj톹톱A3ge/"_T^:ɖ]JV.q7_NѮϭ,:ҝYi,VIk;>i2ƧTI&atwT6E'ix1X*uhQU U)}VE%c;@VEhB㵤[U'۲%ýij_q-z |i%}Z{qy%YZgmB,4I O+|>CK<%NKP fQgǴ AJrF!m s) q0/4"I7*Hθh-7{<)8 TYm7T@]za!p79 4sYXI,B6K>JO i[hi 4ۇ y]ol{f3H: Շh=j4GgG흵BvrT|JrJUxXDW`[ l%9Ȏ5;+!|%遳8yYb:m\W5Z^/Ei> ˋK $3qH˧T!>E_/E< {H?|o@a %bpY:}| 1 wՏQoL?drH&Zڡ`/?̙beh7&7ֈ>E xЩ#vir" IDATK̊ɚzZ^KWY]EhYFiuro ft&|B,T0+<“0M]z(mv̚Q鈪o;,u/OTZݴ%=thaGpObei!_o(K'nY.Joܟݿ Oܿ'>.7#R @XY{<o o_ߺ!~̏C{ataJzuؗ ͨ t`?0KcC:"(])E,Wv4yz͈v"vvlY\tVO^MT|q*Bˢ1J]|B΍YZ[m4V7QZ @}@cp_^q8a:!3 /SbB͐ :9JGg_)Q%5 aIeT>_[B['8va9k(dl7JF4F`m'i[=Eht&+Pgo"27_Vx2=[mT W^{^y߷"^wk?pO]x}CEF^"'?bQ4,-CVOh|.Z,j\|#6GEőەKA}:]G-Z7 NIFFE:: j#>?Om]ϫpKwjf8ZesG `Z.Gq}?cgPfF%FO5Ơ;8T,˻fɲhiNY%{S1n؟:",49b՚]tJK\j,M>&ooB6>oS?Jho:=$J+ȾG p@{~֗fnÝޅ[ yw^wX:6#i~NvY!؃BHkWʌm0+q ڗ .IWP0T*GPZv3n. *|~;!x5M~Á0OkH*{ A-jj x]4H!Ro>G괤- ?92F"ġU$O@ Fg)A ggqPYʾ!=<>0ԓ>-Q< eK>,^ )@/3H 9 IoƏ!f+.@@h}PkJx҇/.0kp&-ӿp ?¼ yXYD޿G?"R>35K} OẢ(b%6K*<L*[kݩJ*z*:+@ /Ǝ1 kd@-vkS!RPĩ-1xTD닜d?g&EE*-j^ 0JE8mzcL"~4}Jٴ:T3gv.EVj''s:Po)K#94B?rFuYz_k oDnR =2>[29 ?_BHϥ?665Z~QU4k'vG:6 xWzXq9S(>N'&S2 :(L;_̲EoS"$[ZmP*:+@ Ս;t3cV_J"ē[w@<Ǝ!@Nql'rВlaPMKhRxc_ Rf27y ̢)eQz]E Z}U>Qh`^14?^V48|{H,d';L07,H̐"tVC-?y$@Ά%01V>ɔ 7_3z'jYR=ko<T91~袳>wEEPx,xVW9>03ZbGD2I\LINL&6i~*4Ek훒|6µZYё,KI4(I8~:\Y"š5B j#F{;̦^\14]l7` WK4xS9`D1JQӘ~i\N>el+ ~cU R7/_0a|JR^]V[ebLE5:#͘&Nj ',mc$U`1!ip,YPp%LdK dfrm+a[-TӦԧH({ˡK"oK/,?^񪯭ҶY+o1򌝆KwHq MKu݌q$l[7^I9|;!_q.PI#L@-EeUm,7$)SI%3 7nfiKxI4%t `A;'࢓q+@cLkoEp/AÁ kL%~#\ p+JľZ$i@*66mX,S췛E$EJ#L?]zsmPWkCGSmZJ᷿VrqpO9gӧi/lcrTY$p~pAukqf!0rRtΘTqҺg>ǧVR3smvpDƭd\>+V^1JYZ1_' 6ESOs }7cUt}.?D8A0'np4^5X4%^QUpfcZ%'96,MRJ4u{^A$؞V])b:Go}%H{w5Y_z=k+,!pj@f ;mуdm)wLd#bX{DRưTiN@i\M͹zhK<ȕU. Pq"-0z1oBāJ\좃Z)tfOiڄtST^$ѣJzѵ&D.ҭ^M巁_#Ԣp% oxyˈ"~}| 7=HYO?:K/6[ fa,+п_-ٌ;{d瓹t_$qYiY,I-'vb m f5|}h wӺ+qi9R b 3InVr#(T2cv!˟T2Bb@c?vcx‹@ʿI v{`F/}2Or$,`Nlw+#)A6;A#2<%o8l#OC7h/LM8ێ,cͥSr?,:՟jtd!e-3 e߳"qw11x=%u[kqNj+/u 6c~T/B?=HQ!ք i d6dvOm&_9̅TC6TV)dn2(ݚ} P1,;Ki ~ ^I|Gq&Z+u,!`O0!/MlG`&P6fnМ:9RzPh.:Y3~7W?s=p5J̷_|⎆Ɉ C acDFy@L-cusdOx(e.Y.n W /í>w^& ݫ(YtV#_1쁬u 0gg#po24QyJ-. 9,ۜ`0kh,*źe&Q_f3n7fc̚NS=Mf8>MVkL,5,*GKw*^L/ |*Ɓ)^XD;3J{CۧX*) wsb&y+Ϗ՛FN8ʈ.m:H&X=6Ɣ~I!6`eR?Y,94E(mJVʥR%=p_o[$  |_' ٣K7_zDyї -`ֵÅ{.<$%1p`eHV$דBlibO$yɝعwŅbX G YR`N-'t.QӲn`/0pȓVltmEE!]8VZ,@c'Y%Ua1z`}?(VZfh __W |iM D ڷ'}݌IZAe,w qe{mlè^dF|fMo\)47W2T-] &!gx^-U' sKQ$dI_Q/M/AØ4.\-;=T!@R)!SzrK zކmxORr'+ $@/C}O ?f ~`RH;y윻c2o8i,`gH,:Щf8)ǴWefpf?٬-&S \2 V0 OJ,N.ʿ>~ByZr8~ 4=Op7GK%=ߥf0˨hS^g2}[_*6ѩdz)hRZ0~yh׎#港3OBL{ZDixBsyf衘%n\` 9+Z牯܀dpi7''-A?RˁNFw|U0+/om9g? 9}CySo~Q>q>?:|S/?onO?ł]uyLιR蚤x ƒV9sx`E<쟥Bmr[b{8Y<@} euBy Qka!KRq6:H3}->3{85sGB0/Q EM6*yXYƁSά8slʂ=S;)fi5ЌW+uة܈E<.xOˑpYV܎u8 x~W| aֲx Z%2/XXA-<|aăTB.?%6Ο%OAO|p3= r{_?'=(6Y}y5' ^$鞸xE[OM[:},g9!3!̬0|AC ˸wezvO~&MfO {pYJ,!]sGWљ8Zt<į9Y^;3)m^A9a,Zg>EO$z<=~٬]v8ôZg/`O@[ `'/|IKB̢eHN W@"['wNS_L:W_8k2r[Jh`a|f ՚Uhu8jΤ5`VDX>c~<-ĕ~Z5P|| ¸_ Yå 6ZXYh`0M@6o *b&Qv=8t9``l( (-om}k]8C(_ɴ|zY0+/cNBpjy7Y3;'"V,//CZ% SkusEntՑ荊}YU5ii$f1@VC6 fc7o i!XQt\z9=Ԝo u}#lJ`b `}Ѷ  mm QORѳNY@Z5AhU;3?5ѴRט8]TI?/f \Y?u<Ie/x=?sϧi>0-hG|=2),5 IDAT?H?yWYXq >K P~VZ 渻6>;0 Bikt,!YwT-!*Gi\%ɲwˍoMC\~徾0i~ލƤ{x)9nM:YJ|8]k[:Z#KhŽy;TїQ yxzyftp۴#ic!2ϕ?~7,W ;4UMS֩g%e}L,pҺ>xU]9|Y+cnIn7r]޻4!e^//OᒀFbh~vEO19|NDq+PI΍bc8fj0ʣJNlrYh*Е'%u3߅og{'+x˞E; ьB5c@)({r}3hc3Ƹn e*iF=iuBcK="Ch?a$N揥=4{u?PLQ~!H6S/_| ?XWCN`1ZEprZp[zܻLDdGɰ󻄇?ң#Yfgơ~1a5(N3|+h6UBC[۶RSۍ(iKemϘ}hUmہ@W~ YM\ۋ{cpw}:fiz0IV@Ll7nő ՀKQM%re i3VWms)Ս]l1ӣd {Hc ,!xhB=6h8߳֌]_4@j=@fߥ7i=xGPG 52fK Ȭh:w:@{.\^~~Ï'W)'>uį}ԧʐvpx^K8wwY4 NV^ xEǰs/rK$Ic}aR$`뀲lKz+FkK㔹T`_`7~"=]|EYhU3'Qg&z,#Si ^XکqӼ&9P3P ʬmo<̚ڗ` +p6:Ű  Г:2Gn6*gJ&8WܰYC'h~.ÛjS&H JHd2\\|gUя*O~ ݺٗ~'>u׿ߡ_7@>]p]>d",Sd{ ^R& ;?Jb,{LַYTG}~VSeZxߦgҗ=u!!qi%K c`Oʦ[H#J´ЪD_vxMjG9ũ<4= LT{`7{!bA//  dM5Ht:PSD{ G:rFN6 +٩r( YZ%?'t#S~<\<@N<&xz$"U0ܹ;B,@,q_d^_Q~|vRF&A". 冾$!CǍB<Ŭ`hu)Qzqڧ,lkaJ kij6ZfgRơd3)!ZJo, >򓁹rqiܘRҎYL,0s2BZHEc`Aӓ4AwoW{:̧:Guщ /Oԕf!m( BUdەGt!o'kZ3%ÞŖyJ-K J?}^Wۯwo ]wuhU ̍@߈+]!S3R>:ÁΓ\-Sr<դQ'!ةh~0)WFs5~;(\qflL[4UjcF1Lͅ!ip%;LMF~xsr}+Rh#II3M޺; tS?_y;|kf>2o(vT]{\"֯=P<\48Ap: f5Fl" fyPfg1Z"@j D%p󰾹ϗ-\9T E2<&Ȍ9aJq}KvQ7'c+=r /;xgB 5:09b<N+ Hԑg\m@K}%Iݺob)@_bh֜rS]-uEyFJN{{1 %Ŗٵo7/X=Sb)-%d`koK)o{ꠖj;H TG?g?z8'V?; ɖN5B/W3VfZ}W?ql!ZW+o|yZ>Ȋo|kUm`@+G[F#iT+Wky0k"=282HdV`ABᱞ1%siefqg?O9_~ЧL_.Φ6*lOgjmYZ4=WEF_d3MV@ i/-KԠ0a>58<7_zONXG|r0 ysjtzY%|pN듄XJ<#T7=K6Dâ"@) aajhyN֐/-VW:~}hYn8-DEx&jjŁ'jE):IOs7*uf``79L8ʉ)qŲ`0 yoHk.eιZC,!,h. 3z`@+J>A2@+z$PK[v8޴#\,krjV]g׏?SR V}6B6Yf=;_"|/|IK_?m04*'!ftk(r-RiF|YKkA#b0+b;QGsfrRL{΀ fX o(Et#MqTe1^qPsV5?suO ei&GK5']L}څntc> Wl慟U3yS $(pWIB MRmT\f_ ao>aD2<쌼Y6m8VOTV~'Z:n&#Х`2 3iV47;Z~i0 C1B` LA.8|bC :^$ jC.o4}vzp`op%X6gaEiQzP7+#"tM&n*"bnH5xfױ?kRrM feaT؇w/4mہLW*l uŗYL;)ѽellR6ŏF9A`7\#VUڨ b%ԇR=..d$>Дz~p:Q|AL{O*`tťZd1 @GzT R%j{?cA Q\`| ^ ^zwA}*e~_|\ ECڢ#48׃(2a _Qng omnJ }ojL~c6t+WwjZCA3JC&ǹdݬOa2,eVrJ:(pqٺTW)ݓ@ oο|lѽ뢉uW>Ԑl2FՀYbw ~oO8?O=I`@3Cky&.}i6Ӏ__Ӆ^2'AR9K0k g>cmjL>ڨj=6P=zSr1"5=Gyh*b3 CLɛ}ضmnΤMYũ3lx'd\V%C;a=FƝ=_֧1n%yJMb|3tl//dB!.&U+> ]̰m$Pz ()2ё Ks$&5Pyb*˟v!V?=(Jn`jb9s;X00 r|v>҂4Iܻ{6 /խ53m[ Z5_KG5*!c%KRlBXYS[x0kS,9}_~/=LKBAx|8,y,ME脅KSM%2sC[ Fl ,`6klqJe.SC20ˬj]#h¾;~Xs~P&)kػ i=8951N:P*I*uw=1?L:\ "K9?cbs~F:o]^e/XvLۈF̼ub~uXFPg8JUQbly$1`G+:r$e&ҖʠYS,6T+ oVG¢j4?V%)|h 0mp,9=q]:š`GҼKo3Vofs=bGC5jjW {4rX{.pgTɸGDO|ǜ UZYߜ:kßfIg-آon`L4cjż>/c)XL##ȁZ7^'J=@DQjuk3|˒`?^V~қ2Wo=^Sc;EqH3=G3:fҙ[!#M4 0#?Q}$RTE3O<l X@OK=0Œ!c3@,n$vz5Qzʅ{w6ua&"D"IO%]dO@Xַy~R -c<f*RT szWj3!NiZW:EUx9df:[Mhm% Ż,$3HHĤy8h"qV9ug,A\I!ѥTnjY!~GЪTY5gh> ?]g 3m 94`PA*'#O=3^/z|i=G9!uB"Shj<.>L&-S:0f.jU/O;S.XYxϬfvJ9|Lw~* N֚^*gZ&Sr}C,U.͸i~DuɁYw+xg5(Y6-虏=$, @Z$nʁT&df)̠7Q+/짩A-{Fo?*HMEcy+i. g*#˚ED#C1|l=4`2p{sWo3| 'Y1%=V.74y4h ٙY&ȑq0E *`c*+(_Y1=*\-!_{r1!D=wmy4ѓ#9YJ.I~]\88`ՠ 26SoѝFiXW+$>R.@/|'.~(o 9Q0rՐD"pZaonMHc F:{L/\UM*cE|CHݵ ]{DƬ IDATmCmyNpe,itHD:q߆v,*ґ6H۠h[KG/33EH*{p4FiMh ʿJeo*3AFsTȽ(-uШdڴZ[~W`p~zA,Ed$k/I &gj&k:ݧqƖ~RYjƺJ/Tʃ̍eyOx'(zbcº9[ːwE` K'4Iq'Tbgdǔy,:%<+/\tƌݓBrGby\wcwEفׅ_nHν)_΅N"ŕQɝc6owXR>i΄%9Ӡp/7LoA%|m(,7̴k&Y6}Vլ,Yn# >O?'[)PpRòp˴Z[g>L oi KGT=$RCrW!aSJ BUBamjvNm@:]' c).r9fiBݹ +=#\銡pz~M)4*¹ Di""ROіU^ &Ub^)0BJ ;P{7Gj'Q,Izn~-P$MRŬL :a)O;2ZdabsN)n7WE#[#qHMxa},R jYrCݣ,elk59 zV7W}#;Ȟ4;4c}Zt7G.I:@vABShm/#ᎌBٻ`ܘU9f1 BU܈5XkD&mR[ON ږ@1gП@`A#5%xJȷCdR`Ǽq#p26AGʒ[LwBE4]L#w:+8K1HHy<BZ7;+n*Y[ԛ)^n(>Τb ^pPDl%RPnSMt#j1'ls1e,8 mZ-Տ]0MԛVo{[fiI9 uM rES4YwUgiկN04~ƛltr sGU` `׏}X\sC,k) ^` U]`:@dpJyLw"Ln^/g|WK3"``D񔨔vԒ[D^.sBY!ãԜb֌gw=m8sn$0+q/~齶J8?Ҹ'wC}x/EJ1g0sX@g. y^Mz) 2ê.})5,@5,GX9h̀?#sE5%B~dRISA "X2h_hzO -ԉm5%UzqJ?}̴P稞zK[:v2ףPuCْmyys਼gҖc&;E$ĔEņʓkzZ8Qz-;[0˅eyy m"nθᤐ'# }9Q'6"$75VTP֪p"_"Ac" ehLq MC'wNzYDU$=y[)C,nu)␭_Ъ_ $-X{ڒ荛oRQ=aMea_К-3fDx2Z6GNX8lۖ6Kiyt|B,W%taEШ*-My[ԏp@(io\pIj)co;-o淾u4~(| #}"16Ztag#G*PZF^ɑ).Z|tsGpT p6=_2doD {wBEre[3 Wx,RpIrL9# `) !Owr纈ᒹXo3.:dY^Q AA0Y[<˖ c^6eP,GMJW XLB0adi/ygb%SFyQT?hT9{L)ƍhfFxaw\W>9V$.~ }8UhFLl.7z=9B=6e[3 eyuST_i+Ķtǜjx=PǾIy5?j^.:wSǵ{ؗg^ځa<@_:|AhJseB@ʎH#JL wWNJ4T ORYDO: bႠէG%&E[p6nicQkwvNV*{}@@{57O.sinuS̒&b`LifHC4N#Mm慀L4䶰9;)a7+ZP=YlX? U:=QPYdAyPkrP*]({Ak(EkOF̆ǣ60Q"[B J}%(Qh.A#8)|r0kb;*9؈z(h§[TQ8@l&<b 3=Vhha!4},NyǑ<ŮM%y 2.]ϵ ͱnYRX{gB m@kt+i,7ɍ4$}}.o1QhQ%?chk|[Tm"u:*/m K|,i| {qx(JT@-̛ yQ6᐀N; Sc_t3x8C "$uV[I`\o齆\!:6? J2-חR9O"9%j].s+]Vy-}ObM`5{d̅Z7۞%ʹA`՟:@BК)^:v!&#譯{c'3= ȩBK8iBAcZ7MXT@6[Ҕ}VnkyfB WQ Az%Py0l'!S< /)00 W}ϕ@Ŷ o'heʼnR{L11HMUECrlZC:1y|֏~9r|#n~ըmPίR<䛢]Ο@k-=A Et:s b7dY&5e6:9w@#ZޚT `\^Ҫ-,_|99Yއ8d}>R>Im e)259:;c 5;Q+y[\6 CRxO6 X !aLs|/c@x,x͸rqGhQanRy6VP$I!n1㴏I@UJʗڵ/#HKNߒTJiڪFF1)A_Eeb o|9}9Zs,$w/'7Qg6~^8%HyVj~Mԋ#vvϫ i#~#N:Zy)k6aa;yX0 f7h qc[+z/lznO/3u༼}9 I VId8B}<@ B٤eLsi,PF#>BWQ QE %dEBlSC4{m|h͜/_|,(zM\Q {61V6f1ΫřsLSo旽@u!5~(tDU`ޖo||oJH{#=\([E p i^OGM2x9 >M NoI (8WX ?b Cݦ&y(椞#Z/^(";8xYЧvr/GRSB u !Zz*I BA*Yb?ft׿dC -זAӰLp_}:5?VoIf_*n6\| } A+hV^(A4%2JD0hϜ 7iHof;DRĺ01ДL;CXEʋrC➤ҮX $I~Śu/Ou.,5=~$PRxu}>=I%p_zk9!??ԲWNjp>L*A TRv ~5I}T^#OyGk(D}iOS'V'>uZ6W͕_(`sC1[>MuL@,TF;irHRޖ3asm"^Hu՞%nSr>Y[*;ܖ .o.60YBh4% 4Qspo):et6VKEB޹M>FqF6`3V4giYm'&njEyUL%*6~rkfd za^2SnxA|B8YU0SπweXCB\X@yҾEX{Ȝ$-[ (莁m8of="+U}!.+:V**R>N1םa:6 rE;s-R]\MMb9~pupО_\.ik`& ~3җC0!6:}#փ,vξ ?lfH u *騢8%p rNV f}9k|vTsm9e1e]jԆhPEYr`[V! q MC([sw22}σZ[ 3.OӒ'suYl)A-{|^RTloL-|dHJ28p3U@\ytfdn9o NagSyy!fB,c}uYnR}H7_ZyX4Ԓ߷F Lި?SY31 bMӠY,cKMeW m@CS;|A 6h e5|cŽn$vd2 \9kYUfk27EW_ɝcވ*L,]t5.r{!,8>F:!0"@ٗ+AT'42{wD5vY{`? sfUn6ToVa6ޠF0ˢ)Ufy& SPqqouc=~uiN)=]Y[Wכ  IDAT3wb)+vFFhblȿ`1oL>e~4jepJ"R\rޫZyu3:LϘqw9>w}&G̠;q%4"ՂNw8߽ݐc?ԾbM2CTӻN!{h/Zc5`TNr>=$i^r="V53Z<:%ܓA -Hq 硑OfRLV5JkDܔ%)&Цbe:Х-yz3Hǐ&U:xT.UxbsaJĤPf (Ix6`4I&x#WYJA[_SvX>Z:߹}0@K681eO;K̻wQX?]]h @]'+iLli* z傳z/fY2`3Ì`-y}O:j>./<f:DWlƧq_I۹fЈk3I,46/8 ex#-#6܏ U7"&; !"LQ9m#1~3~ rĺ [I.n*Y O:rr$?~aO =O+# V( !eei! Um{Cx) aG>W 1׫/ַr6f,>6Qee~:yv[h:2X\#лAryB@y:B`P}ȶb̃M;[BVd:L]NwV3hBmhVijg$OS4Kl8GJ<%1%xK0q`uQ/44{;Thfg-(RM_OC ې,]"s^W$5(.ˡP]oUj N1zWR,ðd`t [_2 =,ӓ.Q&)Q?4@!pE ågi`\ nXqS0K80Q'r?@8 OY|v.16McHE_Տ\wX42C ՟ ў7\ɋ@ޜpS Y:ճƖSɾTՈ&qtWœSo< IC?ѓE)/hn'V#ڶ1_x^R4߯&efUm)J&i4;3 )rjwigI4fHF Qof1^͘A)Nb_V6;{} +hu}WOD5߀b`j/`@=Y.u85u\fUZ3H]iA.Kڗqrqak绐jiHb"g{eհ昭͵0aidѶJ~`_LfU} O+֙4=uu"_G" [,6h-Z.5U\!74Y %8l~q$"?&:fUʸ?]e1}SH":) @1}E ` >a,+^X=:Tnlz\;1] Au.E)h`X Ti$]9h2۪oHuQRBx+h`Ma"W,%zgf:Xj#=U=,Y|Mz1粦1ܷk2)HmT_+rj~Bg@ ~?-cLBZn 0iW<"+ Sf j!:Muk*bSxbBCPƇt83с,˓l~2 th> KAoA&:u0g,Zfz@ zEtq` -5 ,* A$eaޅX41x)?Z J̥P($O*rU +Շ.a"]H/f'% O_Ҧ,$8^upT#Xz Pl*K CE`JTb6AКğ8ٲqgl XήC@|E6wﲃ*IcOmJ EpYڰ*FCM 9]UPͣlq›lQ0kQ^FȺ(4g@-V)bD(f`S'3h+>dK<*%Ŋ%T:`4U* Ϯ]S`"E(iBPF+qȥFbimݜOeR,Z!#URT$?1=qoz$`Y;9Ć-YiX(&OW14^2F hxYxu5e!S1p0gFi| M%*sP3@_}wPa0!Q}iO'e|[+gD"1EahwL,6 Jzݼ|A{\hdS(|Z->9]\؟! ^> +27->]W2߁ĄțTb[Vx|8LLRm{<֓4LkI}tbJ78%T2WBq !Y۠9U97Jm}ѫ˾Yw-]D/Q`@H;|Pq\اnh#m>6{4h;e PgYW>ni`c9/7J>n&ƑQ!`D_7A2/1X4F p(8Q1 ؽwdb Ex/܋2̦WXſ#P+,Lc}ȸ(&=ۀ]]f14feuϛn6LjS`ַL,G<fźf]ØHMFpOe@.8jg 1aąkSNlfAZvenK@~@I\ĿipJu2:kY+ۥvnX-YTK6Tn ^c`mr Ḅs(˖z.]9!tZ3 ꗙzsX@Š)CD=]诟X~-3 @CY. d7~-1İ}{/-4aǴS3|efgQl]+U³m3XRRy~LQNU`.&ϊ,tF KAsfzyӬ*aTf͆ Z]_ٗ~#1ɭnx@jL3dsvaAB‡T{dfG(I}G7WўB,N:Y&ousO(arvB4CܵWS%Vl)N!o7]8( {ux71޻13- !wy$Sj`HnjsL=^+'Ԯdug[k?IGƀYC䲺H81!ivDլ]J1ZGG_݌Xu1V)?S Ye]J/G| έkmۗҤMIήICn`V?kШR+f!Nz ${ ,ר%LXfdFM0K>ԣ|zD' ybe`lQQ|[ҖE BA,qI+RY SIlavP1XtKY#M†\/ {uc`ިby{2e-SWvtyKZ.elAת`bǑaP= $_ɯ* [i+IX,^}爳{wq(M讗wn1ٱo婝Ƈa/:Lь,07+ zf$w?lWjO1F0kYW%+QCihyi`y 5@3K[u'SW >P.whш!=C̹gD1w 7,/^&^HeĖ@L<%_f 2v#Y+#}`,//-ܻo/iܖYY90P2\n>iF?jRNyfgMIxREm^bAB ; fgaVQp<:˴Z ?l8aA-r*DI] pFz A~MGt M²WI2;@=uLXJe`ˀ(K]&(jP@$UnCȟHvH aR~Zj' %GyL ~_F *( IDATktrElY=}68y,iO0ie9]KoB V47'3Q,i܄7UR*=;>lکXA0 Z*,pI_c!Qܐ-BFYodRFao~vʻaȸ4; Rs?c|Sg?ȾE <?NbP+!O;C d455plSD u?ş̓\W舌`遗^H KIQ@lM"Aq ZTt~8'5:3g8޻ ,z0b#M|!x?H(sDȷYHJp:6:-xdE@ ĵ2wbA3 "D6=ErYo .3% jROqW%ۑszԛ|fg>v)gXmh=ʔYXPxB eZ$jH@-H&ti{`Ԅugmrۢ9x1 MCiHA}4M1CK_.=]\A1 +PD@%) ÐZꉌ xv^/+uZΥzƭޙx2X$#3Cd{>Z?DtvD:IC8"HNoyiR뢗)Ք'w2+qN7x=y,;iQӢPa]rK*nZZ K=z@ZVb'K(9^B\=HC~ChD97L#MY9-f-h-SI|G@-m>'p*M f3V41ciQ,9 f6b+6$rJL6{~mЍ"\'݈3QI/%&Aj V&|if71(d~ F,JD~ PXsl_E%s(e=y|˓c+_s} u)x&%@f:a9_xXZz9Mƽ&Ʒkzڔ T4;k@  6 F:ڿ zcLɁY8z(`B/+?x%JqM!˥61"k-RZ]_]6d<< [Sp 2 ɚxcf cw*xټR9ߝKT#[+9L(qÉ>`9i>sV~*x ¦X}YLhZ{g)~Jwb5#΅>>L ̵j5ԙ'4g 2o*戯WVY!Xeu5rfkŚv1@Yj6&[b!,2Z 35~${ nhJQZ_dЇoD73W\fё/,AT(,A62CIsDer2L9c;K'YaUYvۃ())9bkfrD^Oک6J,Θ I*7*ö[$ߌm`@%[Y1k|cmqÒ*`֞g89zhKw(Յ78&=(-qk`n' 0KiQv0 1,\.dTLC*giyt޸ =3ۿZe3N0/{]'*Zv#n21 ]%Γلtf\Y>v Y/q<,#sSY }%0Ƈ@OMNێcm@CX]w 5ffa~NO> s9Bw+-B"Ve PKһ]EF#m.tp/=l ",_pV6c,h$eGM;{y%\T?N]TG" Dhi_md\>eǩȳY5Vt԰ 9dVB_HNbH'8<#s YH$aWu4M.YnG4RnaNLlQ헀( -$[IECqքP&gcBe~7}яn~ZśeN9$*,TYQ Y2ƕ&C\6ܤ-Knrą@a^3Fomǎ$ܖd quy(M"TT vWI%a0?}@`~B~4[j=X5/Jky]xAsT/G75~O_FۏK!a (|hCzMG$1j%/XiR:E]tV^ g=9KHs=E*T-267h`Zח$8)TRV h[YMА"p6-#3DeoQvr҉tgq<>{DMGQQ|Osxk0h!·;k+*:p>7G1ɞ.uLzL*UͲ|~ɬ1r(=!#9vœFJ`$E1JȑCɬxEY$RyNc7#(Ae#p{Z55:b"7kz S|2haA?"&rQr[lqqžXcuϡzf8!_-;-puuk=oBoV>YSw|YM[9Ne"}2',#M &"B֥;߇ByNDS"WPߓD1W(<#1kƤlLҵcjXx5ՖK#$J2 .yQÂZ.s#ֽXp/R?ޑ M.N*pAswxߊɬlU;CAKm>5w `qZ ?`+c}pV9 QI xϾj.*̮L >/tW^DI OI3te<+.((}-TΜ!Oé9^G31=]퍆X߹o-Ū~uYx+7ˌf-}cb7..RbN,H,K$k,V4u0Ǜ)Q-| 8o7sd@Dȕ{5|;_HQ0FՠE9Uz㼏C _7a4E\Yn`yXz*_v=;13>/HX([ 1b@ދP>CtVJOqpB^pDr9E [hul#1]v?2} L3YMᓃY*X Ϟ?WxEL~,$%@?m-]u}7':Z#c%v5 Qa_8EYO4dDWU>}vI,G&R'GT e;+/e-Ie~E5[ޗi>[ tW]nU%o7>Y",%zćA,*ht(jMM%te]Z]E:6Rn:ťXz[\;e5Z!őY5R%d퍆%-C/H-lB.5(;t?-#d@4[E9̪@ȸ*2kRrƯ?z*WXu=TՁ<= v+(х4,4E>ۓUDyj Gzb{>En,Y|y)?pa ')Ǯs8{~cFB8?Vd$V-.p 7q ƨqAQ ~$N6%Rts,[Kd>ٽzV$w}Vc2KNFfVZj\_R־xwr!Toj{/q|Tm4 ZiM^ԒY `EYc: rCR 彌i+ij>1 ҋi"SzH &?[K6ɭ[4΍žy/o㄰Rq3#ӳTo|#[L\ 2=ADڝ=8 px?rfiLvLU|@PͥMdH(ER4"ToJRiݕme5#hEfi)uhd34,ZExYʌFG"4J.uy_nuʨ0vasj'W&PVc"0wAVi 1܍㋦T+&LN$zC765n6 뀘wÛK XL@ð0i# zWvKϡ(1^_ ȮKDΗlf6Ld&{Tv*~?72,CbehE=n󰽱xSt_wHTN.(JoNrA۵7HTJeFB'Mˑ wtfLMJ-b Ў6,w__()(V낾`I1Ѡ%m`u&~7VA!VT ?kS).AnpHHMO%`">O"SӤ6;+-_ܗ<֯9dR T=bACR%Dd%y]f"{{WFf" q +z~Z~w?O /Z}Q~ >ݻ7DedG5>QO'd `.@N(ѷn6dVs@𱨃v.b8H Խ0q.3Wt"@2^_\kB$2/זAE gW!Q:G%FT^ԁ.ooߒ yr/G<%.doB Ģ& t8޾k&7*Rs"dMQ8dXsGdVT.j(FkCaAҠ]NfEoİR֎*ύ /jLfJeFh;9 2W@<8||'Z-I"]c[W!߸MIk#v*64ZǴM-$BKWg|bjd" ZMdI \nHR+ԝ\|n3ãg~Yx~|Ä3ՓO?ZS7ʁ2>bw< %zEӏj?cF]miI,FE:\DH$f47$fRD_JE݂.!9gIfTO$>g5NvMDC:矝eh # 9@'6z6E>J{{ktXt(->r ǒlgtDea=Bś|e#r\YD_F4#/țcyϫBKl呾 rihC t[h%s4{F%'Sm*K+iNbZM$+.xD!Yd+PAݮN/~/? 㴳>r KMGqqFCÇ|2vn;'=|ĥ>q990cƧ9"jgSAqj@r59hE|NL9 s泰qʢ$X-m\,%Ԗ3x)cDfE"%EM`>aC m%ÓUzKM:d޷ׁYˍeX FhVtOaZ6I_ NNj|X|S[/JCpqhO 2kɗD,$!Lneb`HxaDhp@ o:,J2D.˵tr:_OUH*}L.>>J%%iIFE. 72rkNmEo-"o߿e|Xcob9^5'Lh# .*%Q&.f#cX[d0ރхbgw_" X77ߒSgva*cQDh5 ("2a{kIr" seCJ(S J}N-&s4qk{5V]н*LS'b*qJGjQT" IDAT똳XN~Ls[ Hm$1Dm(.ޞ6,^![%-\_V`q'y\mr 2MIY`Vw.SHw4QfV9:lhZo5EqzVʞ.x\ɕYQp=()+b^"FE&i ) anj=^jv/=YC2H+p#(i1|0GG%Lztq#H')Ic1@xO5 2ECC^<9Bi@ @d_΀|˅7Ț+#ENͺ4P;&T=83{'w.2l# & BR:h*%us/ 2`6ó ^UX2G ;25R#F-dxjΎ"qc\V{)TNpmdV\Kgm@Ӵ#|eeж:ľ&thR\X<4#Ahfɏٔ ֜8~e(R\>>fKydRB,N˯e;Sle:-_Z~_61yJT.vno44l # "#jVር]߅Q{m5ɬ;'\>>}2ZBKOfiVYmjjNDjMH4Q>JFĔ@dm:i=1vnbHQI} )fʼnyՂ/_. 7F eb gXJ)"P"nOl/Sn5,3Xbn3Bkj{!Ė&Ju[0ݵu22pb#Mqu pgey|>%pWKY35nP>&0BYYLW 2`3XhDݜS%zKլ+=Nd9>˺ڗt0`?{Q>byzNo]PQ|lr2&>Ԉ#P(ՙӃbQ<qW#pIO$]&i!g#I\fΏdY@g9~Qɞ(Vxr`6&}8jUj-W?g_ᗸ?Wi_2Fh6G5,8VM6/o] dT0Wxb*cVPТJus̈n'!#7U]ﰅ(0ahNX$M B9R<8Fl!L FL-960$(c(5x.qRMjRf DSLYɜʽS1 4+Ҙ kwtMJZ |(ZcR2^,"Fi} ]z|G $Y^2-I0D/xp_qo)jXx;;|UbVH@QSN "3<:IΜ%eW2F@S$#(R=c`6aoI>2NF y%T!æ28!#1aldjx`!"'~HH@=̎f]zΑRM]0!c AzA%Jtﻨ|r"ˈQYR=Ɓ ӈ.:>~h11u~j4~4ӗ3~ImL]!'BmhtVc_IE&QODr"90nC,4(Bd6P-|hY~mZYgdᴰM '˿ _ADɮ=sAMR#$ e7/S^I|8%5T v4̀udnldc*'ҔePYD.)/U @hoqL`ٸۼ~dЌ]4?o:ё"&̄mh5q@K$d>ɱÞTr,DL0ҩ xq=zǧ_ oDHXgvp BֻU6Ɖߺwݶf8Ǽ=*=3y*#J v:.>32pZXᤸQA:kD厷QFTcN ]JQ[oeujo)GCZ0:mw]"PMYGd"it7sl]_aH\Zb3%j,J {fe ,B˰ \|;SK J~E1TQA+tҨ${тT)5憛 źlHdWQZCMfuG~}/"rŎBJ:_WQ|vWy͸w5Go${CQE}ZX1kœ\l䃿~1q^a" щ5oN 5i9?IϤn8_}|3'l8?fqqi8[! hUK{I C:D**gZ"ˌ?MdT^D#RBf$nPCddTD nImR23")=}l,Ehv-#`_L[DB#ҚK툋Ti跉8$2R,FCݔxdU^&X$|d_{QQ 0fA!-$]QD38v#uԢdP_+ x2׋(By\ɖR I,\3ԩX*b<X$[Z,)SДE NU)^Efx~%QTm]JȬY;# C1Ղ@΂ػO nnAh:@ T_Ӷ$$4 1;C !x 2kG7"e9hlCyȄUq R Mtb:uHn"ΔKy x " 8ITcH-^;`\FEdOItR lsi{p>I T z ?;g2ȡawP=~^}ͯ?_!GCE%jlA2RS]Om)mDP,#3H_ClvYHfqn OٸToF>?}{r>(={Ozd'#=>*s߃I$U>|4~8%¶€}Jo^ڍ|(M?ʥz6\(x6'j'L!fJ&d23?<4ѭ>if?͛25h10vfAyz|%(!kp (_Y Y`da-nFj5hpD|})cG(}}dYpEi$ԟTs-eB=$cEwfm-;%= w͐aB J牑Y;2t :ErlcISs2K*c2,tﺘ(Ӊl[Lf1ٯ 2+Kt3qĶ2I Ǐx$RM>b8`T&2+.k!U4E68{) 14I%焩-Qĺ˕Cx 3Ep,bﭷ>zr1];Rmf_fR>'ˑ? % *%rw5p)* >21F|!eYtL.Q1 2X`Yh .rl&_^ЅFhh| p)#f${씋B<ꙊkRB5LBizAr]-rOw0tVEJt {G⺕Lȭ,vK2+Ͷh02pO`ACj5^϶{'y,%/5!"d YLO$H&В,R8YHfQKS@feH<#H-/#)HΪAʧ^lXyS4'Gf%dJȞj徰Z&TH, w9\5S`'2ID֒ ȩgR M}N%s=  R4SD2hI/ J2 pS#rŪ:depT_\_IplD hȒK Ad9Ӥ!HzIbv8Jd+ H,vM;K5xAqlCH]5bJiRIg-SiXp. mM2KKy$s4HF6S1V71 !{TÀVDt5$DJpZ]ԕ,XK b2zd>`QZHEևNfZ6H}ۂ̪52p`bjt7{?B)'9FmY%0;rV$ Q.FTFH"Ɛ#p)TYaJ8*Ǹ VHINL.g(^Nb#xQ/E~-))dpz9C?9Խ?ك3\'!#ka3%"ZPZdb32oNhAZG!mp_cS, 2e89HwАxtfVCPIꐜ0RBܐ>%&>G"KǖKDj,L&r T?lmt&>ml|%XxV`ЪT bMAle9ēZӗ(-4oLӑNeKb09bdWF/YIlzKr< U;ߝ R/%Ff 42- ̽ku.ň"dq2BA/%82kL#]&6_@fxC*!;>./Pj0Fh>8RkNbu# VVkw-O%^Z(bVTd; 5dJ%2(HF jzS ' M,cQz5/5JL^܀?)Q4 T/lVvj" KY)y ɿr[)I5]"Bdj>f"x*Q>l/e2K*,ɏdg%96GSN?%7;>W?^BMmXc݂ڒ&h"2K8?Zxp2]b4/3~\5=j7HU񴊼ܿܡ!on۱ HCw34֊*֩F1zc؁̀[d5f}{# exjP{\`gr}\Dhq#uBI%8Wupxtcl"eI4! Y zB, D9K/7*5Cr[0@ws#'ag[eOw(*סH .E8*ӅRp@r{yVE庈-LUWU1Wn>'"ǯ8<84qUc!VkMm@J i $9 ½ؖ>6EFQDz2ZwJfIec3paZ{?RH5nË}U4ݻF F|ԸԞxl=DI" IDAT2."_w_:ա+-1$ŅY}-ݜ'7u+'ZRoN OI77O-$ÞQ%Dfr:9)p.c?4wǨxō%N8( w"Lf: 8Z,CuR\('h;YH?PkãC> "V^Q,9,Bp/?BQ-h]Taj\~li ڍҍ3Y3ue0YRWrqr*i"DO(DkMD-!F^ig@\=| 8A=>3>>bjQG [ n:8/$Wwq+? nv&P>!2|h-)RkDEerH%~m*-K?Kؚ5Q":2kQJd2B Ht0# NHW3PrxXD&`P{2Z +p^^I"MGbiH <ƥ8ZST wmkY%BjY*AEo`%ID7Gi1v*=[)?jdo%J3@B0Ѷp&i MU?$OG61~WS#윅I9%(8ϿHnwՌlwm>V7m{%*]\| zP; S CՌ[?aoCAV{?K _wUɬ>/t odCEh>XdZep $TdNifY’mfC9Vqr|21IHo/sTUgP.Aт@'yxV0 fV!1Dx]'EXȩ {^G7vF}E=EM^mCITwA͘|yFwֲ1(f~]'jV.p<]/b~GO2|0BA%Z>U[jxo\S҄A%ń#snD@henrl VIdJ *2kǻgHE.fn{Уdq]j $-s y>['FH\EbktG $t KjqӅ%R+Nei{8*MIuҩvKs$үIR*BXV&-Kҵm +cYZOj 7"eV%4Q>zƔ}"E>hYn=8-H :T0cK@#YaXL lrƙRv(9B(I4gDͳuPE dbR cQԄVѯo6FdE}E4FТX Z"qj%V$-0H@Z#XNyzɬ02`X # x: Y7\WZE+rhLhqE@<%U$F<1LQk2+)p@ (*+9Q2@QRpe{bKC_0Q~(H4ϫ٣"BkJ@˜e ZCy)@-$t*%ɝ^dedV],.02` `0\5\wQluCR5|LdOc["Vӂ\p  'J"MM] .LGHGӪO vƪ(:)b&>V5dN0z k׵׸RL<UWfK2id" '^NAW[|s BХB ɗ2bG0u)תO>8)/Y4h@d*Hۈ\`" *GXIR dKrTrPnX3P"-Ң¢~KAE>` olDd$3MdGxbmNjk%kLSY . s#Eh .}W?_+.~$/`|EFX^l 2j#Zd &ER5Ef,vnb6W<g4d~E%D: Im1( ! H=+M7K(K#Up^ X}Km׋nl"R DlSb!Aq,:w[\ nllqRkY~tedZo_T_@X w755ej}CnY{-/bBҏѢ# lQJ,,H4iG ȨAVSzh9AN998hB>>?G]>|N D?ed79`u-+ЄKiqz*5>Dld[SzmҽGWp  ȡ_<㙶~óy2(Ec "@2NJǢS!dyL9DgO(q+qvOŠ P\g!>,pVd&BL 2N# \3AXU [;jjOXo#,-ID+|8%\bx%ls=DB7w$WCk,3Q^ȯBi*% ǣb,y#a\]FRibJ0dKe!U#-Zh5>bnOΥ)4Yi^_55TiGYG# G x˗ş -Z#gnu{z$+ӒBb!}PaFhI -EY. q. |N: !"*p-sZctupxx22 OBk%~!P8w~c@BI_)ӸGCI+RCh1-i/e z^ i˒0{ddvUKjYL>Ei6794[_=]׈t6jGZ}@'wrGqpxe>F05D$rH̢)!(*2Kr*|1hϑJ`rbDD08r053ibᒵtbNd-EEҤsq5BC{R j*%V7dV|h5dV{8~Ff `ZCCo@D.j>{ChIQ'bQb8~o|Ζg"0TFÉ:$))%]4w7ɣdKv-ӆv ZNh 6G*-tLeU"FhQ$C,*-i;`Xp>ԚR$RDlɢjd+?VI/EZ+ZY4WAhZN~gi$k`i}(2˃mn0l {ˡ5\p >1y WWenH=UQ:ldbrBXbEBt״Uъ~\Bo7Em@XHo#ʰHsfM~fˠo<$^<Կ1*;%`ƷkVfKg pxt02`e0l| _ظآ.ڼAV`Z"YB6HQ=YC/e1>T5^ot졅O'eJujnpxx&ƚƈK2:"$Fj-̙GĦoR6-ʾ*L4V*6tvdo+CT)@M<"Tnu))OY%e]p " q 7WpSc_N.5.JX*AE-bGµo׽}U⯿3FvC6cfh>:uߑZ t#Um[9Ƽ="dV,6LcjO\)5 CjG~D[MREfNP]HfqhYe0e03xիwklX YR xduVP{usJD|н;2e(I}")a:QOSM\Z$`hJ#b 4GCHT #|ŵ B IDATrq_\uo+=APaKr?^7?P'K!\]+$k VgaTVvY~YéaZ qo?{R \f/}Ofq%+).ʪXc\*yVmg}ݾm(k>6BBJ*B4~rPGoPR8O f>Yk/ԒYj6+^$=AFfe ZÉS7W悎\3cdd[*p$h پݸH& 1Qb '>!"9) x<% v%J^GMRRxۀ8bg#,5kp ucFDU%|Qیh9ErWT%qΏrei6[Df"W,~s#aMe0ߺO7 RkkdUuVX͒)"}u +:<:uR"oKtq{ ӂc)͒cFeպ1΃ֱ* w=6%24:^Vy=ה\JK DeFg&nټhQt?-(e'x\I,=v:u}&D;xU0-r1Qe7}FLIfAZ&r _22|D+J߬S k &SazVt*ۇ )zR?E"LFB >roJFLz "m%2hULRorgZނ( ު(0~Y>aC|Kxy {$@()\[yp}݌lCXY3PK-2$f#d.E1zQ [\$ܸxLzR;p"3[HZA?nho=EuܞC#Hłm$>dY?@-0#(B 6 $OmBY@xO$cB*h7i)FcZ!IvuclJGc3{jj0TYCaG bW+{Tlc1&)PD7$P*NjBkJgnI,¿r!)КS-d"M -"7̟0q%d#U(*+ ֑YoR0iG{pG`pG/ዿbN؀jfж U%ze&.KKJАD$Bh}* %b.Z?/-`XJ[w{ã3h`om9?H| -9H2QeMZQdDD1Z$1WAhI#^ou՟awF&GFϦhjpۗp;e `pg/,hg;"fhSUBh1KՄK3H&! t,DhE-YF8J[HRRiβUZ6yBq{K`7,*PQ ʉ?Т %_VTVGhP%%DFHuٯ&:\=7;"*+M/WpEY!pRe0A:\G1 q_,%dFf wFh w/J`gzZ}.:PE)S" K F%%ER *Ed" -RBẸZtB "Zs6Q&"aQdB-O-#8LD(ɬz2Z0T+:=}!F K8$papoϏ ֜k;&6j"P\Қ"u"`ȢVT Gkc0R aVV(-bL ӡxIЦ(-X-Cws$J'RW ƚyʀ)bL̿HlpR*h%vpxp`^),N.Bdbz<_/c*8&ER[пKĺҁ6u`8<: ^aZ=__ RUĖp:E&'{[ub[5p2/l[G0Q4U$D =JȬ^RkzCw{DӹP3(>4:KZQ?/۞XO2 `*|濚e2(kGdV_xz e0_Xpm?Y*ohȪV*#tQZx>tp$\PQbLc QxEJ߁,sѳZdɓ8.H}8lTUAtVd2U +d:~W ׊,ZU&Si훞`ۖO&aK/$HfJsx[Ow;a0v21.y׿ Ob"UV7Ǜ.:*zr{0]%HOělpx^+x_PH)65հm|ŵڟC966YK4EK`*2 텲}+nky־|̿=LJjHf>Oz2?>]e0|-˯^O&,Vwi.on?ΛRR}{097FiR =an#d{J?~gjW ݆ZlKf`Y~׽qCWH8)H2B+,#6&JcNtW!B*&FR  –zc=[&֒EY'c J[0,FF_9 ?o+ YhL?='Eg$K%$]Fv|{5NAfQSVG t-7 Fh  ^~/3xfM !"%U(%QZ B+º (TB+B}:؛I_(,wCdfa!⢴->7Z9Rx{3tQU0a*{DCSV%tH>A\݄EشwQ@$CG ": #ؠ3;*4: OT#M*:k#[XJ+d$W rO`0B`@AncM9"OU(刢BU"ʎ賜Eiet.orD@s$ ͱPFh2pQAZYSTZ1Ǐ} )ۗH.yPC^}]%D<1fQY;AlJ11:I8vrPJf~Qd^f~tY a=IN$9ªJYq)7Ņހ|6~7>de0|} /~á8ݓK::p{U*[)b 4&HzZ${78UVǒZT&*QZ:q\Pjӂ1>:GɋJo7h#tdVKF'E_5I - BVRpY B%XtEf*I!m!VrC{?dZT`Fh Yĸ-9\2X#c8 DHh.VЊ!Bb%fVSr}bPɀ!d,"%FjAB3ȪjbPPAq77U(#O.QX Bkit2*AyЌp7<~l8 nTEMdr%|+  Fh YV q]Z¾_iYwG١Y|QZ 8J O-9*J)U#'5e0D`V"UZ\r te9]/C -˯^OOf(pn*؇TٰtՍ k,E"DQ_'I-Т!J#NY'$4nns`:.TLnƔJS4BqHn)/@,^zKXqD[=S$'ij?m2Y*2K"pck"k͠Բ,2 ECk<[;J.ΆYҒFC7;ZTG AS0/HRB!IPJV.CIՒrK=E9/P0A˓,2ҭ$1!ij*7oSXzyFLj_צ?_,e0*J];ڃ)#qʈ)t)qܤ {&1DEaQhD$^Ÿ]3Զm.rI^j~0/ C#o0GxnਯGw{Ã/ېZ λ|H-$,#Pf,@4%:R#+$[*\b0(rkBW|OmrEd璞n;8KH Af,ϴΐ@IA"iH3?:cH@|AٍM"LdQsRR"wQb$*9<x' A# êhՌ`f=<v- |6!h#OV*5 2 W/KN6b=ud--aWF-%whwB!p23$7'pv*_)R+V8-s-Ko&9b0N++Z3|=!!#=ȴ9$GIGT2+YytDa ,TOx KJ6tgrP5F] hY,/O?TsK+`0l# fxK~1'ЪE֣M#T|ɃY5Xq#M$W@e@haG;t EZ%QEEVDF%iƉݬj.ԄbS=}Ua{A涃COd|#ɬ.2K$P6E}ץdb5^[w9VJb *{<_V*5 re06dz ^}?ˤ7=Uc`.dHjH.*FRZT8w"b+FcG V)n_rbx+񜌩514<&:+"(" Yy Q4#h/be"HeDJOk^pF#Vw1ezpB(@ 7"su;Z$xKx{b뮓Z[-ZnI--!7lW-L[ӐZ EjQ/hLg*RKʣȫY8+x@?+&hO,NUozGyȅ UY2 1:Rb2+9X̊)fGtD#D)]RaTER`X# Io}~j7'To.HsRKK;gPDj9с8xJZ$B,c> iĖ7l^٦UKdʼn'GsL& #hYqT`1`,Pލ"lFf՘XsUtj"k`2 '˯^9W2*>DPJS4m>-!3LBbjH-E\'AIRk.l\.S@l,[1D犏fro>oH$FTv$Ph SJd)D`7;Ef,ʭ22+}l&JdSw,5Q7De٦aO0B`0/~^{ƙZ-v[H]%d>*V5\UFLO-dUn8r_Y2kt4uF- G'#Z_^7f6VD;ށ -@C?%"*"\jn_j)yB!xO2@ָ%^~xJKtZr 菰H}~5;5j蹕ąTm?& |Dy; "a0EjۜɒHJ)Z%$%QY KLƣ6L>5\%lH5b*2kw> &B@ԖIVDg+)ЋtdTŶH?yREREa]Xx*㥊ڗY0Y'r*ŕZ"5WEu'R9(Q,^lNfEkb1%K#23JFԜ|>ͯ62KS)|SlÈ,<Pw Y:wi#ȶB%wGԚmhBz$| /Muǀ$+DҤ@d|[MYRU-eP5Ҝv\#B:C:|>:ڦP"HHvY_|E-? ,t:YSͦM5&նdiJˬM&g*'5PYcDT'"km]ݲhB ~٣ü`8DOOb)£;ww% ;7ZcY%o.$8 ȭa-/_#D)=^etİV GdBQcm0ׂ̚ %,|c *UXfUtUيTjaz!`р,gw+47eEl-l2VnyvGD! ;K,[]ҵɈDV֦ k\bJUaE7oL*Ɉ59L,pٞBXdɋ<^H ļ &zU#j,7cSel@,;I0#RL䛼bb@ʲR>NF~GNңeS"2n+;,ϻYg iyeR'wnô3-0uRKK!zl*1#Z雦|$)^7:[U'jK@@0:ȱ,4w3eUUĬ\"&8 |^2 OUʓEX{|ĔbxxenZ7Q_ʨ,U+^R"[fQI1X JP%(d@YH.gYD3Y͵&m_BBXXuy78>I"^' 4)sz5:?fNKjMNJr9䍒Tl>|m$fQ,'a_Uƫ&l k~ӗr~AӺ&M&<ذYӊ}Rz_"x2KܦFsB#DaZHZU7ȗnw-9B#Xe敛ȓXx 4VnAxK-bX†ҫ(QN=ԒJ ent tSe M"ΧzŎn-srQ%.%,ԣJ^}Eʵ?[/Z*>\:)[+jvƵ7\*0yQja5dNZS4FgA&ʫܝ @!FNJHd)'uN1dL?PLqأ!6uVBEӶC7 -g2HNf9Ua& MmL%gK*dDhQ@k+a)a 9'7,N$ё@hyDr;Ȋ^#O8u?/酲>V/eVUPAdӐK7N5(Yw1d6Xփ4|E\d|TZV8`X↖18Nb2; MZ_5H$=/[VdEY)vrX/d'50]+%ݨ(pY?%DVզ0,ZSIi~3 Di%my)jfo[)Ė;*~<d=m+X*V]OT\eRITitD"R)<*z<2l~2Ku57V|~l~oo#D;ޡ6 LC;|+pL`jNОE4MO(ZK"PR$R1x0N; KN5Ռc-EӍ9I-*[e䍘EF}KqB3*Y"* dVWWC0mG'뷯m#;8St>-8ZY1c8PwHAn7OK*9PڻS_)%t6Xl):ft'-teWܦ**Z]N[i'˭Ȓ,ʬUECYD=Ǔ0Nfj?.r pI:w3yS,(9[I)jG)KYqMDjs]ҿ,R!Ag"͇,3e:abڛ$6OHa.ijJ._vDewϲñYizwi%kKE!M2DV,"@LsŖPCQ2oJ6MʣXj֊-x<Diǡ}^iL͑F2ijƓ0).qXڒ )=I'Z=rlx+AD2-aV_lRJ'@he ~.qBDq` ǏQLjMzrhA7e0E,0SF]Sie'L'/,'(=MiaH"ʂ;(_1tIn#t4I:1H_YA3v~zY+>Eg6](ֵ.s#)kର6`&/EpNݙnDoƄӔ>0UVd ˴LeT-tiM"=[~`E]4@TbMnGF0Dk B ÐTr&E)T02^/.T!ѣGq)>n2+3neC#y~XΌOv JB =?J^#RLlKf D!%wV]/L5ךd$@d~ޥc?qlyZκABkOMOqi:G fM+6PZJQYI~E",WQrͤ(K" @h- {bR˰>PD2S-ŖDj [MTU5""'hh'"D.ui DqMKeuv5NiD FVKӸRUEV&F>Ь7# H\Yi`ݏ9@h!lř1" "hmVh f+RK[yZs$1OgVVzif0:-տoFD*0G?b6h%4S93 Ed%Wyw3 $z+ r+pJ2M(qlwYP-ʱ|pi1|.?RiRE(%ԍVBVq6rKQDDݡ"L=c&sKJ)w\RO6]C)q2C>OH<'YgC+q[q\2mY-("ޚ{ohWՈ-OV[,G#IX:]hfRN[pZ"7ͼdvd MpŤL Yf:~+C8ι w)F**K:D Zޓ~k6QB*D)i~Ua=DfEMC|֥WclaE0C8"KZi 5&*NWӍ]S7}R}"j-,p8Gav?eQ =:FR0bKa|%FIXg,jImydCN,f%n3$ǕuFZʦ^z,'T\3Mά<Jӂ]4P¨fX̺Y|ƲSXj:>JypU`oTjm|arPd@h@tv܈-%VX-FԐr5{_TX0"cȾVr uF#Z_ydp5Q8Bn͘tD??0|(N7'"ZFGqQ_J3f4[2-S;MASڨ:k۴m.~KS&R UufSCfĖ"GKlK-ܺPƩkzKڰ.dPIXG'#Z?][Y,eFBECRT{GW.nh{Ծ֊,yVW%LQT菉d&OO׶i畝B *B ?;Ij5OR)}/r"+bKdAu+7>ZJBy&}+~MQ?wvc]lab_a<Лʬec 7ȉ5e ND4)qOFCza%uHѓhDk>Y,TM6Y/lҝWX -Z0a?/"ٍNF ا0ifKU!Nӷ>mþ !nŕm;*Y*QYn"ӤՉp̆+eڷ?R$c4IPkIP#rHGdq"W~8M~ߤ i# )1Jo5il!?-#ϻ7am`Ut FWQ!f`GKh>+&c4dO<51I||{ :_a W:ϓk%cֈ2B+5^Ɍ*fSea(NH) +g" cC[e }Z >UIs&yDS %通&oXsB jBa<["*<[Ԃ>b~ b֬fr."{/_7. LS<1ǘ/%L#)R?ԊrqrHbZH,nF Bu7KV.)j=}~f4^YU<)7;$Oi`mj5!&@h@͸Ӵ}IDAT=ḘF_%l?ҥWl29U&^d2Qa:cT*8ot<6Z"-JUd~c1>S#Z ,՚=+*P5m*tdzNfʮǠwoe5S%zYa~ۿCwo5{ңyD +phZ.參eK5Ys[gsyo-mv{Ffe)kw_b9C =1je"x.[t@]{̥~eCIV`bF,޲ccn^IMA(-9؊J EhE3DY:md4T\;; "U諯FgO.vSb*QI4U_VT<$턓XB =e-r|'Ba 4Պn8e͉AJJq>1끤/r4V2%(+xC4m(a\OvV%\9}  ,0'=>u~DɴH_ `>\-ĖR(%JJ((+ujcX4WvFyE \Bz"K/$"u6PH"vf+=vMݦ֦Av?ܥxR!E~a,$-2wpң艆F%MyF\Lqt;A2P.EeY'c,}^yJ,|QϹ=57O lDV8ig6Z.uvIDPYH.OJB͸@"#:%DV_iCmJ˾Ots,%{6FGq0&(0Ἦ=j_jG #Ő2*;fum6_@46 Oޠް7a,B"c*2KgYd!"0=K0>{zښ|IW+W(őë\ξIEeǢY$"OViYR8fQ캐?ӝW 7r mL;ǑT~Ss=?.|]e>kED\vRi2Oib]QMaHfZܤ.R0(UtSV|K{TQeEc|Xuڹh,8#@hCk @˱@7ں i}TVqjb#L9x4Wa}yeXp3Jq>u XL XArE\XLol]Ou\;a9.m:z|:6+oڮsgy8զelEV;5gEDuuڭ6m]r4]Ěoyy,:ZRtvhz- 4Ա'%*W=!юA+Jۏ5[ɋ -O!q*WQyyѤ!?+{GKY $scڭ6rcH@HI:tjt^ʊ8_)($ȯUx+PqSOe'|/3*U^ꏬ3)&upiRاݏvj;iXEu"ZtENW873H_%KxY2. ӤɈ֗gUY?W %C2:|?,=aqwj-~Zɭ'Z\"BU-?`~V6?ܷ,Dz\j>{(1cן1@湰Ku"Ki~HBE %D!Ab( -RI:QHsb jfk]Tp 7OѪ1(:SsiþE|cE0g9ŢLH)#v^١Z @@hHn~Kf;g$|h"ETH~S#X*ؗ,٣|kܟcfϋe^j%Wid_1B#k6G U7tAgI( tBH,UrRrQ-cBlhk 4Ѝt_N$eؾE3ʛ^FZHA̫DxVqP ̕ްGߧ^]i FsU|_1VO"a\XkBXRCː)4 9-7Q؏Vie=ї̾z1ǁV?>*ynywHV<`&kC\t>L'i> cP\nO/M 9hCJ .s]Tͅ&utMںE׶ (- A$:7H-'&fcU*|x9\a=GW.LЮFS h:p*v^q8P< ,ݽ.=ht)x0bK׶l}zZ.{aQaoEQv?p(Kq/èЬb =PPlA)jߨO}ʘFHDqqZk-[ȇ`!{O/>.Dڸ1@ #md-v{䥖&80gK3RQM^wΥ l8}^f*jGEWm<"媬P+g{EɃ֤?.DW.\Zv-^{4ip0 "J"^S\K.XfL/Cs tⳓj֫I2{*ʁ_Ȓ/5%A;? aN ,Qjfk&8@hS{]{YꩍTQ^e* C΅ Kd`@?v $$ttp!{Ͷ3$Tch}eI[Zsd}`^ v?Эoݢ+[X-IwK_S?_x9\d*j;72RBqOQ= KlkscUw-ٗ>~W~\B7$B-^gD7^AoM NڸA6uy/=M(b|"K6̄'$ҝ;%~0GN@Yʶ5>f|qSpDw]zw,-!^HbBvE@2knj:chR٦Vٹ3B 3N/ScA|}矧Z3 Nj,7hRSَsE#l(;ȴ"2htAjYWH&_F'#Z_v#J(O4m0: ݆BB-!j,7 DDqaE_NA|||ˏY~owt1k+^{5 ) DDqq#%FF'#z*M$..""DNEUvly( 5V'&O>$uJDDGak P~|/[ IDEL<>xL7.߈{eh;ٖ*i)Le&S陇YutrDfs3}O۷iYLvm:|nVVhiioVϭRsI~A\&54:Dשnf)sxQQs%c?/>V6Ҡ{D-آg'DDt<;BZ%v*B QR^GK-yKzn5%%ONՋGOg,|FaCM߿}b?bzIENDB`hkl-5.0.0.2449/Documentation/figures/s1-11.dat0000644000175000017500000000352613237020467020636 0ustar00piccapicca00000000000000#h k l mu komega kappa kphi delta gamma 0.000000 0.000000 1.000000 -0.519320200000000 40.795148837723552 134.088340521547394 -55.578087980042497 -0.022336900000000 14.824478552849410 0.000000 0.000000 1.454545 -0.519320200000000 44.201599434245637 134.083376378454716 -55.519563773052468 -0.022336900000000 21.631027973353795 0.000000 0.000000 1.909091 -0.519320200000000 47.666702676883226 134.047872377601266 -55.491623810964121 -0.022336900000000 28.515821952429473 0.000000 0.000000 2.363636 -0.519320200000000 51.193503814689336 133.999474227299658 -55.474311463553704 -0.022336900000000 35.507536435635025 0.000000 0.000000 2.818182 -0.519320200000000 54.794302405697458 133.944457950934918 -55.460498051704882 -0.022336900000000 42.638809731916680 0.000000 0.000000 3.272727 -0.519320200000000 58.093602764046082 134.499318209431692 125.081129455412878 -0.022336900000000 49.947952253487962 0.000000 0.000000 3.727273 -0.519320200000000 61.900019148789468 134.437430134023458 125.143771202766871 -0.022336900000000 57.481389853279474 0.000000 0.000000 4.181818 -0.519320200000000 66.240375744790057 133.761531517821481 -55.410516764503754 -0.022336900000000 65.297336836290114 0.000000 0.000000 4.636364 -0.519320200000000 69.977235341480124 134.309331274499868 125.259489975141051 -0.022336900000000 73.471599899498145 0.000000 0.000000 5.090909 -0.519320200000000 74.727450326601485 133.632870811920895 -55.349173123619963 -0.022336900000000 82.107358281876429 0.000000 0.000000 5.545455 -0.519320200000000 79.002012473641372 134.177964675433685 125.347569522109112 -0.022336900000000 91.352902201654246 0.000000 0.000000 6.000000 -0.519320200000000 84.086619565424471 134.111566204855734 125.373711397867524 -0.022336900000000 101.437135873662697hkl-5.0.0.2449/Documentation/figures/sirius-s.svg0000644000175000017500000011532513237020476021702 0ustar00piccapicca00000000000000 Gnuplot Produced by GNUPLOT 5.2 patchlevel 2 -60 -40 -20 0 20 40 60 80 100 120 140 1 2 3 4 5 6 kphi l [0,0,1] -> [0,0,6] s1/s2 (starting point) 10/100 (steps) s1-10 s1-10 s2-10 s2-10 s1-100 s1-100 s2-100 s2-100 hkl-5.0.0.2449/Documentation/figures/3S+1D.asy0000644000175000017500000000205012710332472020631 0ustar00piccapicca00000000000000import diffractometer; currentprojection=orthographic(-1,1,1); currentlight=White; size(12cm); // orthonormal coordinates draw(Label("$\vec{x}$", 1), (-40*X)--(40*X), gray, Arrow3()); draw(Label("$\vec{y}$", 1), (-30*Y)--(30*Y), gray, Arrow3()); draw(Label("$\vec{z}$", 1), (-30*Z)--(30*Z), gray, Arrow3()); void diffractometer(real tth, real omega, real chi, real phi) { real hight = 3*10; real detector_arm_support_radius= 2*10; real detector_arm_length = 3*10; real diffractometer_support_radius = 1.5*10; // tpp draw(tpp(hight, diffractometer_support_radius), gray); // support draw(support_e4cv(hight, detector_arm_support_radius, diffractometer_support_radius), gray); // detector part draw(rotate(-tth, Y) * detector_arm(detector_arm_length, detector_arm_support_radius, 1), red); // sample part draw(rotate(-omega, Y) * chi_circle(diffractometer_support_radius, 1), cyan); draw(rotate(-omega, Y) * rotate(chi, X) * rotate(-phi, Y) * sample_holder(diffractometer_support_radius, 1), yellow); } diffractometer(0, 0, 0, 0); hkl-5.0.0.2449/Documentation/figures/e2k_2.asy0000644000175000017500000000052312710332472021011 0ustar00piccapicca00000000000000import eulerians; currentprojection=orthographic(-1,1,1); currentlight=White; size(12cm); // orthonormal coordinates draw(Label("$\vec{x}$", 1), (-40*X)--(40*X), gray, Arrow3()); draw(Label("$\vec{y}$", 1), (-30*Y)--(30*Y), gray, Arrow3()); draw(Label("$\vec{z}$", 1), (-30*Z)--(30*Z), gray, Arrow3()); eulerians(0, 0, 0, solution=0); hkl-5.0.0.2449/Documentation/figures/traj_n.svg0000644000175000017500000005612113237020477021400 0ustar00piccapicca00000000000000 Gnuplot Produced by GNUPLOT 5.2 patchlevel 2 0 20 40 60 80 100 120 140 160 180 200 0 20 40 60 80 100 120 range n steps [0,0,1] -> [0,0,6] 1 -> 100 (steps) kphi range kphi range hkl-5.0.0.2449/Documentation/figures/med2_3_slits.png0000644000175000017500000017200613237020356022374 0ustar00piccapicca00000000000000PNG  IHDRTFk 2iCCPdefault_rgb.iccHgPY<@BPC*%Z(ҫ@PEl+4EE\"kE t,ʺqQAYp?{ossp e{bRɎ(tջ{i常r)teJOYLgWX\2XyKο,]~ )sT8بlOrTzV $G&D~SGfDnr&AltL:5204_gK!FgE_zs zt@WOm|:3z @(U t08|A $`(E`8@-hM<.L@ށA2@F 7 Bh( ʀrPT UAuP t݄84 }aXև0v}p4 ^O6< "@]p$BV)GVC!Bd h(&JerFTVT1 uՁECDh2Z@Ёht]nDѓw aa0Θ Lf3sӆL`X VkaӱJI%vG)p`\.Wk] p xq:o—;IA"X| q B+aH$͉^XvbqD%iRi/82! L ے&US{1O,BlXXؐ+ NP6Pr(3;Yq8WJ)Hq"HJ IKIJGJJIKa8y"Ֆ͒="{MvV.g)Ǘ+;-Hז,L_~NAQI!ER¬"CV1NLMZ)VL $L`V0{"eyeg :JJU*[5JLGU殖֢HVQ?ާ>حѩ1͒fX9֘&YF3U^FuX6m]}G1Չ93 |UҪU$]nnCM/OS~~>&   .y݆i񍪍&v\mu:ƑGLMv|253Θ՘lOv19|y-Եl^Zä́UUКij}ZhlfSoV6¶vʼn伲3صs-[{'BCSGhGfhgWΣ<lqu%V>svu.֪MZ26,b&*4r**4j:*@LMLyl,7*us\m|GD\bh$jR|Robrv`NJA0"`H*hL֧uӗ? ͌]֙ՙdKd'eo޴gTcOQ{rswol m ڳMu[NO [A^i۝;OrR V (m? Yrˆ[EEE[?Xި%%Ga%oDDiNe̲²7Yn\^{p(㐰­Rr_bULp]u[|͞iU-x4:zccǞ77Q'z̚KZ!'lsWnk]8q/v=s}ٚvZ{aԱC) _}ABEKr.]N<{%DƞWzuW8}nX8[[Mowf[@;]wv8d3tyoy02*|`a׏2-<>+|"ߵ~o /ۏ?yx??'󟓟O)M5MMqb݋ɗ)/f 櫳/ M^̛oy=}na>|ZZ.V|R?B, bKGD pHYs,K,K=tEXtSoftwareGPL Ghostscript 9.22_ IDATxo}.@.A HYcJI̅r3wmS*)ʾ5VyI\%^ٮ\ wimIizDĒXJ̓No~f;ӳؿmooo T'i1 @T*_Z|$KIU{/p2#mTz @@l0aemɶھX1A{pYl6ێ?t%lmRJD@HC~[ۅ}C=y%EPV;5Ώ5 irtTi ]Æ Zyę*U ´CSeZ`ZB U]PS{>iAkTro P>V,hNm"(Dos?1 W-Ɋդޟ&0)TSxEvbBN`R1U c[,f\ՌHĢ+=uɸO&*0z@5=E'aتWM7^z]kkkҗD #B LAQct Xxx矗$-Rb@T `vm@5*+rm\c`~~^Dt#PR,( X!`&vUBk}}}c\|Yh PRRioj܎xb빮6;wy4@sWl"PW2)uYT.~H51, Um W ۰T UU u/`"DELPϝ. EXiY=7JBaWGĉ0@BtZ,ETRÕVηfU{N_ڮO;+9g*# S~xO&L'd]B1i^iI:]K9f7^Z"+U3`~^ʫJ?wf˄=._ﵵ5}K_j| ZMjZH+R`&0$.P \au1Y]Y oښWN۪(ĠU Z"FTz۷8q0ƈ@ RMkemTؙ:"l@uDS77p&X-6dYK(RcTz0z$ 3T>I Hvr>M\wvϜvf֪$pN<'Oj}}]Z4 0:PBj 7Va*Bw~j">b[sV Vkiɫ& Vթc`@jUSZ׵˗/@Lhz0GMZ t~]? v2;nT,z]Z S#hLɓ'C'O˗u T -@Jk6%8@9Ta軵\J厡qtwv9?.5 1Gn͕_VCy*>?z5(!톴駟h&e>*f%fu:Txv cZ U}sg娬 9jZREKxꢼNyT=8^+,"LhT6`Z֖J ,J΃ FxaΘ`gZ 4?u۶;vEz-OT/$IK(TQo_f]S YTy݂O|b3s"7`pڥ:ugFj٪MM j~9 Sմ4ogUp3VM; ֈ[0K_a*$*2+LEj_h""@,Pm׊oeCm Mks|ҠNYs٪sumZ^!M3l[Zڛ{  Tf"˛- 2KNcZ[]Yf9~qlםV1+忖W^k8?UF<7˗ S TfgALrjagn+D5TۚRyy:7{<9ZοUW] }@HlxzkD u[F5]5"`hp/lE6 oN c ULz+[Xv3RL&LW\B:-8+p;(mKv0S} @R eSH<*FϝmX|CF@q:/k}}WU.o V*kUu{˗/+@T1Q*o+Y:U(ܘ 8xpܧtQ;URjSFV\<۩"mo\PpCTWEjՐLz y8qvL'D©ry#dٝGt <۵vjfVc;6o/oXj贖TQ==pTJ˗ue턥ES PEmK bT H Žm{vJﺭ\wlq4,Wn7帟ڬTM$+k}}]z}Wթ+T*~I*ob`Rs@{Fuvmq8ajw޵ڹZuiiI'NO?}f @;nUNPnӆjUdz/v*Nߦ{݆+ײZ-;8SJ-XqјԾZ^kmmvdć@~e0iS[mvV5˧zk}}},U@T ~TniʴkUmЪJ%j~V@JMk{?9#u۶G Vg_f@d]]}Ҵ=;UGKRA dD&@wiTLV4#PEbnߒeIF'`xUj4>/SXQR"J]+$+9FEI7EUH8UĊS@vn{ DA׽!F8??JOU*0ɂsQ?(םmVz6Q CץuR1\{%iRYzujCTF'XJ AԪ;:xpܧ8wv[l:PmP(TuGoըpêՊV뱞@cJRiT$5TJ*T44xZsԐTd7_vU`K4G!&*F_jY[*7b=dP0t]%@5cn:s]a> X [{rY9k PHR SJX9N~YIMY8hmU/vVxJ/UDS] !jU W [MK.ԩS{"Rx nZɆ}>oIW Y3PT>oU@<T R14+:p]rU'%} sQn!F*3$8F%I0NZ0Lez *q]W\-rmuڎmdCʃOu++^BmU*1d *og:jW}4Յ䟝;D1Iӷ,@5(lH17|S=tLܞByU ST1z]T0rSleUOHz@9IڐOBN*|offf'У>:0>3q҇_. V@՜{$$}(oD IU/MtՋ/S$wmhy5Օ U`DPE_- 7b=wubs aIHQN?ж:24vP($8ɓz衇ueگZf*IϫRoC*Bc^*=op$W:$n%@EPsZ1Uhffr)۷O{o3ZXVW U J)ϼԌ0R[1>8{n뮤jq;f:/z!MMMijjJӺtN:WT$U$UU bybڟ-AjUcj)'K+T)UG1\ݿfff45S.罼{U<%IyIyBU*:?͐LH:pV}͗LNTj''Fj5۷O妔4==~[??t[j4f U "h0uD& "Dͼo^9zD%MK驭[I Wš^u۷O33řy睞-s~DK*9NP"D¡B Q sguBaI兪)u~mmJPԏuV(5˿>Çȑ#:v_>O''u/4[7TW1+PA*vNsgw jU[BuTov:[Hr e4jNUh߾}ijjJ}W33455?섪 T x >$C S P^JeiߩV݆*RM:#)\FeJ҇"PmT}fp$fn7о}30ți}kTg$yժT.oȲ.KKTFBKtM WUOSMZS?_j_]ss4=텪-MOO5+T{^m?ryC3Zּu fG Ռ#L-W)鲤$,/LR+LZa궤G T3UrjxUNժ8;^N\ezzJS?ӐwL_mK׉`BU$Y[#P@5VjY[@ߎےޒ WI)iyr5@Y5GTN8PԔwӺUw[ T3t0\&LM,Ν^"8mIh[m1$j3\%|;z?P.'\N33r׾RU< $ T3ƄR+LE9\m\Fe_I://Le!UBQ0U>o>s񢶷%)iM5+X}>BՑTZu@?;Re?L-nX T-1۶uTҵ6ﳚߖ%}q'a_՝;M}[og.]Է~q}GwZ/_'N:m?k9y2"Wת_dWWI嶷0y mt Z^yJ\}^?^9?ʤsu~z֭O;ӧ?/| }G$I++o}jy$'Fη0HZ305\k?wZ*R S1&mT*z[ym[#;lr]WSSSԔ#_n;&I[o陯]'^y3R5Lem?`~0H &r_(z ieZ۶r^&ﶮE%/Pޙ#)׬P~?OC$I֙T9~&TMS*O|5v05f녨eSd;wV.W)}/BgjUt}tjvvVw8|P{kssS^~KwWz@{05aLu* fo(׶嶩~,y_s4;{^{;ܜ=)ݼyKoC]kUV+՞U坊NU`/ D `(z,q:p{Ձt}>vDS}}ݺuKё#G?'nz{AgeYgT.n3qE `(/ظi3?uJRnTYXicc{նY`u'X'$IKͶT(lV;׽Ju sR B `h&PNPjQץ\3==NM|j VKe/L5j[(|YdYϔVR.Ғz>dM"yr }p A _fffo>WOV.7?P[[[C\W(ʵkyl9~q5ՄU1)0?,MEh5?H$  L#.$-s<9ߦs IZYyØP5QT++v:[ ~=3TS^: iDݿvLf$/ *v朚,=8ryClێX^թ SVڭ4@PM)1p]orlB`5\/ LZ8njRײϝmΒ\׻ng&o%I򯷂J2NdmͫLdYP"LNAyڠ1L0T׻ 123I-Pn^>a6Il[ŕ$qכoTڐPi|P ." a[%fI";jԪLm,t{m,Wm/n# L||'T]0$ujf9z=!@6Q"#BE*e>pՙqXojwdAmoPhUV*8L?F0սkāryCq5ZX IDAT/S@iߪXcY]}l2"){Y֖e*S溭m楲d=HBv ^AbV3|H"~15ǫV\ވRdT3W <0լF@5a*"`Z RVׂ}!q. cĤX|FT= Ofiչ]cϩ,Ovu؉&j)6^TNBujPZVTj-˼xi'= 3c@T0Q]0 3?uۤVV֮P5~S'\>Vzo7C@,/JP-,[LՓm{fߡZ.-1d~jJץ\{YXhöc㶻u 8 "PMV!a*2EujG j8TjG4\/T ɶBᆤT_]{p~^Z]m-Z\~0jR|޻?{>}@}h17I[*n|6&CujWNJU:.WX!םU1sh࿗t <ͬwef~ 8n6̅AAT&D+LJX'fEԹq N v5T{̊gYXe@!OcKLmݜnAf\3";?G(nvcjk;9.–t Uԩx/]sg&Mryª^TUVN0LT[h*A ׽cVNڭ_;Ȳ}@FZaj7 R%r9sȥ:Z4I!>rޫf]9jo jg;m{Dzs?wvsͿjdT TM}-b KKեH:mۄ.qE`\T' ận:xR(b-[Z֙hn@"ڶdYޓ#"~TSJԵ5/H4sSY[udÌ&𿽟6Af8"P0{^*DթgF5?Մْ?m?V8lFhTy/]]޿Vv9ͳ~.ΒvQO5qF|UDBFpNi'c*yb"sT.v^?Nڿ{窺h%ΚdaK_3U2@50̔Cx*.T &c[w^;1A=󭹪UzuTG-Z! %h@^NTvn} 8 #P`&o,@4SC)10vEXs 9p`WG;Our(`n~j޹2*sݎ<煅U> T aoSC1~O`k FJ.WU.橎 *|cmᬹ?2@uLLq-"Lmfº*'Z ~[}ױM2\媊"iDTGRv%o E;1TX\<{[x-?2l&Ȃ`S `t\SGԠN5gulו&(R[_гZX!U]߉Px/{bRki Qs6vS}@[0@,,@5jaG ݁iP5G$.E}U>N+H=siiI'i.@>*[ [u|w%02@uKSĂ 3?U>뎳zj*汯9ќmժ$ BBUWh 42@uajD &22z'l"sWy7Wtm5G׎G'3PmrE5ARX I@,3BTP &m< j*2MzgBW{q~&r*̡BuNBa*8TLԠbhGl jώ徂~u3bDebF'3n;@ 槎e:'>PLĈ Ո}%T* +0թZ1n}lGX9rdOŸOTdPe.Lu]oafOqdc{dzu{0Oa T#RPe_jR0H6YFzqtؖN蛯~O_vۘ%y-|^JEycFz57TvUhev*5w]Ww~>?__|;BYVm{ۼ"/T]XX**XFR.3:Tkf*H&5J?bru@ww﹮cاu?o~z?zĶ|vq4UIy./X]y;!N|^jZ E \(RڵkqB^r}:xQ_Nܳ߯~JG~Ǵu^[[_.~sz$ɶr r bkUP%)Q `T:KU"@R9ͯUFSqB(]Wo}ZWtf]g߯CܩSzIݺ~]zUァO}NXl ߿dY[ZhwBҒ`T:JTۮrk\+:x'5{[W7^wfej -/ׂZ($I넪Ǝ@u@&L-nLnU@[7]WuaSiGL}XGYst[}33z`߬ؿ_:|Qm߯+7~޺{Ww _Q_j/Bjêve}ƍ@u4Rx#s)R J[ Ws&e9, mvύ@6' ElQ]iCrzpzZWa蝿ڸuKܽ>Sb Tּ.fJ `TTdhnj%HJҭWCU-fc Z7 x|mRPQC5Gsz_r9?=fft`fFs?rD?<=|X߼| S77Go$aQ*mx CJz>@7}ץ%olMR6n^5>U]f"^9,l*V]tP*\տu[O>ЁiӁ}G?ǎiwѵ˗u榮߽>W:c}UƬy粟?TFb*HJŻ蹩:8mTÄ1Z˝1UͶdIu{th~:p@zHO''?}t%z%wm}:3TjQ;?aF `$TC?&~n*^Vu]TQ5OnU͖-s;wt!|=\T,ڴ/-I j sS,ſ[ Wrn^2=χ`jm ,փ WhuݺsGܽMIJ6KKwKkk*Sih:t?zgTa߫фf{YȞ``Aj8I7fmI$=U:?IǿtH~7C,ե=+ @S2jkn̼QIiV&k[֙1[9boK_oofzM;v:.j ϯi~MFF>?!녩z{3EQK +PV*UX$|oOYJnBSs!UnuYjtR]2߶[S]w~'XWWKTLt]2}^R;YےA[~)sw*TLlET@[K˴[FͭK:]⛗z:-v^j$( wE˄y4USayZe^jYFOuj]~]G]ZtzBW,"83+tϳ Q%:A-vS!TM/ٟ'tLk4^exiֳUf>ETRSajDHX =oCiG{䅩PTħKW|MUaSTICȊ Tթ@:LueRmuOvW&g5t8\L0թ~)q/ P]B?&:0u]t !bu>6A#"h,1 USquEYOߌgjKpCށ*LTjGJXcԉuӍ>pT nVzuuqS{k^FUG`Uo$V]gFO؄h4<B-j^7?š@TZVrQٶr>t5JT2/5<∎oBNJDẒxaej>gB#Q"LZmoɲh TD#FQv1e+Rc]Fͭp. U cZ5aŶ@b*h@T$:oRB#^oKYF5 B\9I*bћj9hBե%TKSBI ɴb~j'1h7/uLjg%e;PmT1 T 7N\ѲpuF SGΫL>I0v+;/zRW^`aaBMUS5?T?B KZB=Lnr*TzKuNƅTYFu)s TjUǖ SK;S蟩Rk9U LTT"N\2T?BՈU^?/5zkU%8ҒũHT"7]vD,YF7/R)B/. TcNued!F{U7Z 2/u)1???կ ȔTVVRBUd5*)թtTg9jUjn{-bg3os&P][#T5UR2#jTHqJR b`0?UC1L-וU=}ɲcdZ;UffI*]dm|4.i2#ujԃG{ǮUJTeCԸ,[?r0u+-{˧^Zql4^bgBe ;{~_0Uyi~ϲVi@5٩?%IrPx Q3qW*iTc˿'H祺>m} T14@* k IDAT* T:t?a*D?F,9.UzUb髉^>+jgeYgvݮ:T@*P:u2*DmyWue3/uP+;'B*~>dy~|ERTW>jS1Kx TNZZvb+0zN(eTc9gхqݝY(+3]'\-kJ`}a}vj*5\/Le`e*,ؘvq/:U(F=!{RZձ=+^ Kع,`[j4fUF_NF&)0"6+mTeTNE'n5=.^Tao+9l^ԋJE*Jv~r7TR]@ LT{nazaD Qa$L槚Qv[l\Wd*ZT[eY}V,UT`%>P׽9ڒm^붖PSA?7'/P2LSݾu]18:V{k/ϩh\ xT%QNSSΉ 8Y:UpC֡F TzyAnDxTMuȪS)KZX`Q]}Y+G*ܽF I' ,侨itJA*3'E#n0jB!ԞRΉa6׼eu[&{Nm=)W/HzGԞsiD65f0@m&ZbUujT@XiCԋ#:Bql˚&y]m_}{N0l`N[gP1j*3muQ<-jDSREbQ,ԠI>-g }$S>j.E2[;fIa>Î<J@uiɻUu*a*pyuuMq]$lm0LV秺5/EV[(x˩THT'g>ʌd0թQO5RJRk^jaj'7-7 XJTI0 4ՙQ-cJQ>~DosT/7&D2TV!Lu0Ke=V,Fq:CIc^jZTiTYoUua*6$YUSy*BUtEQ0SYF5gٱK JSm}Yv /|Yׯ_Yn7ar˨L *m T˨"RÕ,[J@+MaTrv3/5)ajpK3/OO\dŬ2L*P{VJL:eT+-Ẃ;.&N[|:eTIꗖ@K=T֙ov׽S[0}D.R&B"zI˨LHV(J B2%,Bz TyAIT?mR]F%~~hssT$&PB!jVH6S6PlĴ%{Nml?MRmpMqUQ@5eTfn$%mɓdvi7R*ܧyiJ5Q]vqUnnޑ4dI4 ٩-M-%7@r$3׼ t)9:IjSy]Gz_D`vB3iUz~ICQ][XH+TMGTS sSч$W!Lujv4I3/u 6/eS̓IPh&FjeT*'an*BQ0˨nux%{N/NôP1f׸+sZiWU bm7[Du%?a*BJZX;ռTzPc)'NKY}c*5R]F%eɥ߷moV0e*zf@A-T$wynUZ>lGSjLѪo6gݿV{Vu&܁noG2.SaY[j?Ea╤aNv]oԅR2*R_䅩R4թYk7թqV9t{Iu SᏅHrN{ۜeI>%7y/}B#22fu/Zj_T쉭ߴOܼwIyo*R"LǚfUR+m>XdYFeSǽ>nIN bP5˨L\?FJC # ̘,sKS0U{Nyf$Vzȑbf8李x*ԋBTs[:UȬ+0Lu,[?#qUpk? R߉,g:5P=zhۛv,g%:Fcv, 9bP5O 0~3?R<ܧ0UnvjMS { cP5t NhGNW 8O#q<`Zߑ&z^j!,Mq/XBմ:c6g;թ0yꜤ_\,MTiPo4^@ZIN ˌ.26dXz}ҜeŢZD6R׆^X59U^vmMujV"*I*@ ]f_\1yNl,~qUp? }Ceh^jPׯ_z[3?5Iٲ'81xHXըS7#lERYRMEg̩5/5a!,S5;_wJś@ XqLA,°,[?r^L5 WJ6-Yԭ:WkFmy$T:D Ho~0;ÚlϙQVpkVfm^ߴuf@uܛd- 2O Ȏq+-WBq"B ăv tܪJkLQUpw$H!] ST:$ZZ㡺n V:p & @|XFAu SBE_Օ05-~ZIh4=޾QTK:pz`MQA왗NNujԁ6S!+KR9,ʲΤ汚o TGr.FoKN]zcOEN{Mؓ=Q? }C5祾ّo,-25-aXPXU@N;quiG_Nzד8TeJ^S>Nu8条no~a$* #_JeulF|NEXsNJ-~)LeI/}ɳ8B8Wz&Pe$* #PZc ^\2gl @ZN_vJ0v2Lui0,*|&cB?Z#TMB?pSFyATnZ{D?3EJj 5F/ITQ!"QΆd:] YטVpIymI/DzVg0lyB.qQijB/2Ɲy~ի>ѝ%ӻrzdvtdf\$t0P ;ȁ$ H!߂&h6$Pfwu?߳g{{@yzWi?Q}U*r#YRW .Q"dG2nwx^*UÙ թk[X`*C۶U[-5NPJxgaꈦ&,u]tIS^)B5cEim-WIv*>槢Z|VpOesI,#$թvUr;dm/B}1¾)S[jS풆sa*gzZ?LJ[ng^&jS6b[+۹NP.#!LENED-av$I~O 3¼LOPYşKRaQyicS ՍZ=_zJ;B\vMj${zO1a&NI*fu1Vڮ^TPu14:DR3g-IH_hA_?)g~@/?/Ģ^³a(XUca\bd^j78SUp[Dҟ$v♤:՘]I*dXVK˿mu˨K4L!}A/ՙy ,,jտ^iz;88 ɴK]H/Oqթi ! ꢟ~.%{B`1-I|7dmvR>&}LbaȧUo3C(1?b S}#9oWp[ISmxQ'V"2P.eV<װQ,o9~{{'0UT`vjwuj8L#FieT-IҵkRe?/ǙlX _FpT*ZqSەS{'vS?#+}iU8ӕcN-Z护̈́m;1tșXfI뷹[ VpЂ?&VJ:NuݥFcYR07h́__L~[i:T *T[wTI-hژ3-"O>TM9c:2AkxVF5+ g"mc ihs9-w TZ~q6xf^*aj4$-ޘ{ \" TmvJ ˨/yaTgy;>M x(ȗRIԃ8:ޫnK-5{R S7NjLKRq"M} D?P\PSEdPhPZ`?qv&Vc̼ԔPufVwcZ3Z Pڷ:bK-L:jNg6Ѭ~w׮]\QsS+۴qH%@Vj/dǟ6f[S S'!=kZR:n}"^m{|:75KT*>Ev[.Hsϣſ]ݬk~lZ߳*apsE3M7V]%17@yDZUS1Z/<'1FK4?iK&:5ljFyn7TI\ Tm g6GzZN* cN[ſQg+%9@ŋj 050* 3Ȝ?m4h/0;/5S/eجC-5]˨Aw{/_L0cKzPt/S,`0&EHu*F1{V^*j7jh\Rm$=4'ix*#,Z_NNb; EAu*FļԼn hi=Y>-]ڗ+7c p@4&T3SN L-W05˨fMt^S>_cӢ?թC?\a>XB5:;c@L&}?~?# -<70@M\H gvf%rP3+*J}ZGjrVcN[HTf]yKHC-P@H$*0,ZiFJWtE_]BE -ŗ0X>mw^jթLsթ'c7W4Sۉ5T ,JȅҼ󃃣41 L-܇`U1ZZ}/SyOJQ^Cl$թ7Wb эiFR=suic3@.]jWC slyqnؼTCU;;s謳jV &62Ruj UUaj؁-w/U@u TZjUIK :5Vf'05Tc]z@|m>v@ IDAT<Ԃ{kJk>?Wj[%iXS'թRpOg05k+rgT1V Tկ"> B[eryִnNc^jթٓԻLMQ cBuvB!L-oORG Qz?< Sw+TTI:jKq^VS{ֱD+0*Tץ[ɲ-(R9ga^jWd:_v0*TD[U@.aiiiv;>eOYN6LTVV0?5h/R٩NH/OK:;/]=G2l /{Jua$M9T T?_=0JjlulQ=ۗYN'L7R)+ZրJi9?-y?Z>T*1?5kluFu S^T g6\Bijv]F5`Aߙn~'ٱi1YN$# xyd@ vfjTm?$N62S%\g,&LtFϋx T]0s BKEXQF 7}Q-55ۮڼnG{i!YN5LEZ0KE<_<=Z]<;uִt :ڭ):5[R:J:kz05kl*@nt D@Uhv^pH/2?/ۑL٨N5Le^j+bcCZXH0"5Rq\SKGfgv}ο?׺H[k{ l<,ʎ,Ta4O`B -i1TTeTܥr'L&L:5;IzsZթBP5 1/zbBjvΚVVNl?nO[QJ?l:焩YgU^r0R*`cN]FUj yvlZgNS80y9$Pm/NK-6F{a**c4#wk;JN[Fa*-9bHz 8PZ@C)2*I~K7f_jߙ\tԼtS SyMW :PE><Έ(SCferFujv@3aTZsU@aR12wߓhA{sruvm}tu0at嶦w;&rOq{,NH-GjJpsFǛZJ`eT}q9LʼhϥoU'0*2*=+uE{K{|;w*թ`SO>Kcfξc}=:(*RA?SV~"q3 VgT&5;u0ys.PTBx{mj+*$mlWľ60)԰Jh́ߗOU})9< V/9RvlZg@թԙajQQ@!Pe~jhGo5ޙ}#u3#ϻUSLsN&Lſ` F U S1- }ߨhuUգ潴Pz:50MZ''S |*E?Rv~lZV庮/3WJujS])}9ao@kb>f_PLW, VKET{}͆ ~ֲVzm%~8+ETwuq:Sѫ'1IlT UƆyZPVmv*˨^Dgu]U0uʙtNox |b#LEʺjTJU+͊USLT Sg 9sq?b-{z@?͆<;4UQV~}0uNҧꄩӕۚ?sM) TEN]])T2t=Saǡv4]ӽ"mBJ嫸Q: ˨PU?X%PMNտW:(zPMѷ\WC6VeTGݗmqN}@>fwuBUթ/O'zέ2XeU"^kt$}aLm0 @5#U1jҚ "X?=wۗG|6L·@f*FA g̟IcXETRS{K-/ci]i@LT3PzZip' G ViO]Deuj8L}_A:]M閴QĄ@5U1ѩFL˨RbS]uj8L}3MWDtȵO &C{{1SʴR9u<88,?Ot > Sl:K$iͶ/.y 1.o=PICnN|y:# V'ߟ']=3Q"O}TȘ-j/4 Fg*}GUeEZj[qwn#-jN{zEEn>ԬiiQi l1wu7BXb{ujaTju9^pwET86-nu=&XM]DQe9I*SJ-q*OSi (o,3!{~H(H[@5NVzw~h4FƘXCƲ'=ϴZ? V紧z۹:$ϺnkyTFZV0ƲNnET0u/[5{% ji~XE[i =/ut]uWn7Z:(Z+qc"T-oWSjÈ"/;6-n.xΨZmGz'C ŋwmL 3T ,ƅiQϵh`:SY>͚nx[ggRAjfSS7Y睝0U>ϔ즛虢yC>˧ޖn4iִ> .dQxy[:jK侞iAϴm=к>֭HnkhChCZ?}{_@}?]IGү3ISg@ˌ|kU^z5#YylZv $uWUەTJi!I?ӂ>^d\G]zJI$]s{DGCK_u*I׮]KJ}ZI5ݺ%}l:5ZǦzU3 MÌPߒCI-t$X%=g=WJf[? uv^jTdۍv~3FrĖޞtT|ji_b2o9S'Ԏʱips%c#-w ؊UkNz[L.I_SsTSRqOcdQ5C3ag>>S>P0C/b"@y|^g| Nac9a.e2L+VHz%ol-_+w@IW0V)Dթ TfJ@&]*"t"963uThC{:BWV/JcISz[|1td oKrB*^pg@Ayr'wlZfu.ad܄3ג W UO$=onr}Pa*_u*r-P=88릁I:?yH#{Vꄩ/$/_K~[?P"?.N:;,nn >Bi9?5?yn/RN)ʴTߐFi_HAꔤz_un9SYӒ{vAm@Vb z"bPQ*̼a<ӂ>ўkQP:`5sIRO$I3s>4cv%YҬguyThGO?k2?5 iNͣ2K}Ŵ0uU^R0%}-駒NQN$ߧB(Ճ#*X3eTɡ8e^^*-O;:RRȾP"v7V.,~4y:(0|yP5hO˨c祖P:=]3 BO$I9a}a*0Q@uqqSȳuic2d?X[úf:5캂ERҿ"P뵴laU2hرiչ҇v94׾iG1?4FʓbvjrXFۑUyatmުSeTizHcIDՃ(΃&-V^:jKkUY\WPOU9z[U`vYǦżZ?(IUܖ$yV'IիW>Ba"E3i2qlZkӰ}t]{^A3}??wՔ3P#Ǵ,dvZG(q_=88c=/S>v?~o~r+Rj]j]hLL P'z[umCpKT{UzGRTA,SFPO$mo/|8/Ԕ[O(Zs-#-VJZǺgZ'Ӝnuius-.T eYFeMT׽Ji ټ"@3TQgzG_JTߕձiչ܅R^~oҋ޷w;&NrVp%L}EG(Y꜖kr\@)eT1yS3$ih8/ղ-m/L}:ZZ6/_Lt=Nw6P:4fj2xޕ(ς0;5o~C4LIA^Tӂ8sS% UkAU/6t-[uD73kZhߙw6P]_`r!jK.R;ApU\Ǧ#o+-aϴxT*" @>եHn+O^d-_:U:;7@(+LYynvU?fv M-cj?eA:lթgmmF?f[O,Λzj Sy[ S%S]:Fgʙ'PEbn4IvS> z}.hB lܷ̇ǡ{0 ʂ0:88X$=f3Pe~*R*-/|Io*',:6҄t?"3WPVp7j1 l05j٩/Ov,, 2RymUzSh''^]8/[U;/ a#\( \|0&;;uETR1 Tme7@O,ߛzߐ*L-CacPR1T/6|aƀaNSYDe84;[xT5٩s~C,-nfD@YR78j6ɘVBьghp-6Pm6P oʜ7ǦoVJ3?uPE]=:we0Nw"U(wojgH$7Q$</|Aԫv+Rips0UO N-㒪I+m*T3QYLue4lct^7d& SK\tW\`E6[Zu>hgd4,oҪT(nf~5==עiQwH*E7_RM?"G?APMaj_TaeTǦoVS{ݢGjX鞤 TJJUpWw*&TD{[_}myv*-HBFbx+2>nkk&npm\?Qat,:gRL IDAT>M0r TifX>^"P-rPq;+/"VfZ$TdY> d)}1L* @UK#Ly[HT+Otİ " T퓏~*?HOu[+acYG{i% no7s|yzf0?v$NO ;/zSتRKEZ3la{5>~0" T/Eѕ}vj-ayheR S$UcZZ]ףbsҬDμ{|v|Ć")g>acyHMRn;Tk2΢fMK7λFqqzH7Tu*C3/W⏴%3RiTRķyA6M(-#jfDQWV"-aY ylZfu0JoRͯAc˒=[GE?QTxVaW0NԤeusE?2!Rͷ~cfMtn!+g@ `xՍ1n*,_@gR6S::H fӬiJA@{QJu*q\o*樦,o\}x5g*P=6-"SҪvݛrڣR-qZ/zeq*:!eXFe[ SlU7WS)iYƴR;Xja!P"\c@3G5TAC<0;m}ZX̽0/YfjT} jٹ[N0t҃tgzG_}7_yȪ,,lJNdiQIO0sTtu՛zjvui9ZYiH*<,r]7#dRcYxsS{c0F1BU"P͉VyYf+ dUV*%^icznE2*gCߠ Tm+S>\f+ac0mȷۑMN0c nE6Po\}¢2-ȅ,ŋ/>BEUf0;m*TTT0ՙO6-y[(RTS`Na92*Qtrrr2Go#]\notSIv'tr5QB?hr;WSVW$IS;1F+˚hߙnAKF|}^lURuTEzU }]G Dy[ "a$U*lޓm#/STSDm USr:䇮^ry((+ӒvjY*TS%S統>ʖ{ YjfCeplZfu0٩*ے$lfD#0Tq/P \'9I:88J>QnKEJիW>B,fMK&n6#{>CղQŁW_\QM Z"Hs)uڵYRڎh:@ƫP:eL75SI@lJTJ}xIH*@0iva*թ0~*fii TE?mƘƲ$iߙOtnDu*dLg,#]gUQ(",BʂPE@u*wo&/N3 . C/ ?ѡJeC+2*cZi#:@&T+uiGPiMYQ\luթM8RY*m()f U+YN5Dv[nn:@Ң T`U7S5St7tL9 T676Pm6Er{O:zZw.ݺE?0SƲ'iTÿ́6O7 MK]5MvY S%u]yfr[=yޖ,,SIjw~)վu U3]v1F7rW(K>B_+Z.u#`vyj}]QyEkkZmlU(;*U1Sۉ҆ ~zGoNjף=<5^$و,TuyT3ȘS& US4djߟ+Tʂ`^*aj5^0UblVd=L5fF,bv*H&PGψlʤ˩3Q5癚5iuuE3J<ٌz*u Ȓ!TٿJlʽ҄KN|,؞VivfTcflL T$..vRTH9T?,Uvb5*'R}Z0U꼠"*Yl*u%'T+ZʼKjdTET.@UNN*U+J:]M\ו~jٹ"O@qs_EoK"L]CJOCՙڎw>FzߧB5(Uѱg,tjSb c:3/5b"4*"Ol?U`t*U*U8f5]12!pԴ[fѩT'"*y@*U`2;}fj;yM/ӡjUEf{)$< FETIM73."[jLgz̟ײUR}є0@\:999IInigشt1$uZnu5znog3N޵.5Y~\^sC1F;q ?kZtwssh-ߟ*||D*T%L4 Sah4$IZ];r]LQ agϚ6W4?I 2fV@u}z_.fI;Tn60rlթ{~ S0/mݪ;#UFņr;wթoK"L/ T76:]_TɤN9󅙗j(EǠ`4SRc4Lݭi{AV^4At@^d/PigWټ"cf;PDIſHatgu`_ZV8U?l-inmG9٢@α-jWZPyWTⰡj+5ʹaٞZqq0V^t8ҧ"T[ܵ[ȳUJs}3Tror#N!0=? "0džRM/sYG=OQTZ]6UIz(ug,U J3S| yv=yAaisZ{yi[Ϝ%k(nx[^>e..vӮ%UT"TRs0ӊѨ]\cb5mkC^[˺Ѽ')˧hP TB箾@TxLv J0թvlCSzJd=ķaO;\>f[hoTa!*iJ8Lm-a6kţ TmEgumoR WX i;RyoPueu:L wM~*uӍ3UT a^j7(l[|Uj5W_F,vޔ̫nǾ3Sa(|gT޽TNWn?܌J;PUTÕY_dJu~am_[@1#P:tJV4@. Ugj;rq\jѨT G^h4#N.zퟏIT.Ou*O*Aəpj`Dk~_ӕے2K-TWM5uM ƘZi {{ҥKU{™є{ `\ו}#c 1/2lp]5}V ۏjRLTyOӊղx=@BY@|SɆ3?U6խ;+aYN%Jx՟0@&P,tWk؏+k le1Os(RV( Fe:' TGzon68أ쒭,U*sSAUTx<Ҩ凙j5 y9z>}GL26N75ZW!RKn VTOP#dQVl :ޖn4IsSNPd TʘR^2#@)TՑ+\]wAޖf'ڎ܂.vsS%(BK.]ޢ$T@4kmiisE;~aիWS8]sS,s(UjaAzX[SyEWi PR{ֵkג:Zl lIZ|X c-x[ە_Icea9sBq͚6W$IμV Sʨxt=K:hsw\ټ'ǙW~?3ȍU*Ej˧UO+tv/^HXbn** UkoO{ ZТK=Oh,'z,xϚVVNgvN(%='D h}B*I~RcLn~[-({{{zj5b> j+|"TvpU,c|̋G}17@:PE 쇉q!y)Ӏ7&hw5;~>vU˗?O8Len**l:<= إ=>-qT!H+P}Z3vUj.IRnΰ m!(,iҮRuߧV'z}fdR'Q%TQ@u-&dq~e+?ӮR T*U5 㸉VFmYRa*KP׭Tn|/; *Z.qOJz=Ԩ@5UF NNNN>D.]g^ (lzTPVWW$I;) *~]ו1j6eG, [jT]g"@6九a*N]ʱnmG4?Fh@o7¤KҵkRcfBFfpT흟s;󒤥Hy 3Yn4I wg2HcfN_<|(xQ0jJgdwr[UN]l_6 UEʊ6+Fh +9:4v.\0ZFT qёb3w"M$e()(H# >5e]/OU}>~}~WⵇG`{;oRO|Te7P{_;൝h_y/#">~N'L),|҉ T* `ܹ?PߨlԫY IDAT+z>hfS p3ۃ7T64xq_UUQ*e}?N]z.k6=89ҐqjĠ*ꝷ4T{""*Q}vwv^T+PR5.TXewBUUq GqL@␪'T_tܽFD\JU 0YՒC>|E 𱍍sg2T_e_JU 0y HC"l{ +Rⵝk_W'/txET!P4*˽ #U*ޅx7{w}7.Z*L%ߜT|>FZTl/b|w~C:ƗUs?R!L%TRlޝ/Ʒ? LAT1/ R'`4T̖e_^vxŻw߈0/xF<`666潄Q S߽1NUTSfO:!y~P5bo}0`Se UIA@uzjzTNhz yxux/^{"y{.׻~0VE.aCG^𐪋zu^>,T1y9:^+^Jx7&vwދÞ*K]gU홭 ` T>|BWߊW}#^U(A7PF}7{w}#yGZ*RajՊnJ`Fj^*oD/?"/`wDpKIa޽F ى^惕Y u766N[ SZfS 0v1>X}{_JH,ǣGqF SZyUL@uNf&UjUXnR=UVᾞT~9d~)Lm6#틇v;:*U)QEtgF V fI@5caz4R0=k^*Vkye&;o(yGT`ݻwnԢ4|jRajĠJ/Bz_ SU%P*08ToS\74?>u?`*VhzObB;cSS6^kp_; TC>oc{1paՊ)oSTf1h%\I*ƅb%D S~dY[[ U HZAynGt ~P^q+(哆OE yth6U$P,fWW;*T4ǩ@`q T+j"\ezzq޽^h [WC_jqT T[ Tɸp@`?=ڏ~gכGu^UwEil!PXtΗCՇ_|Z 6gGrÝ0n~?50Yk^y Tye){_w}MDeܹ<"U' S#"fTj^'2.U#"҅/?nuFU!ea/|AoGD qw KLq:NDLRyjW$P]`y>v_W}XUe0+?c|j 腧󵿿ݻ*_JގT#PaUOW#P]YjQ XOۢ?b*|^DDuTGR/^jݎNJKݎ=R8O(ZUWlPvج4~WW%F-|/dH7TrάCSt~̫}=٘^ð,UU?EZp*KR|QzOU^´B󶺟oΥW^KzQ Tҥ竘vAUj1,ߏ^B:JKʛ੪;88@uɥvD{[ yfPy%bu@uMw {'O5-ੲl<[W^o3\/y/cbFR醩U{N"-Bz&EQe S{A+ 'opɲAVDÇKs],bUZ 0];;Çh6Tx<%666?|3Ǖw/uުTDZ:^jDΎPu/ZZԈ~?+?CݎLYR e T]jUE :=).7iXlV*jDDۍ $rBXJժ65ZѾ~Stƹ=k{۱JX^R P@Sjު/sY3bQq~ܹqgUPVY* ѿK/R/.PU p6*ʲ TKʴPJAjDěo>1H_egݦ~{O䱽2,fJUJV}𕕫VeuzaPzxwTxhІQXyuzOʅzjRmL^1Lsgcl:_/r#Olg2TOʥjfy UO",<{:UӵRܿ88?;v;cTqmRU*2eSͿ a0UƷ@vt:hZBk`e TY8y>8Y${weMe}T1~US%jĠ5f,ˢV2[@5ځ5,TYhhqO V-R58yfDT/[@U*,enI:4ܷZzTzpp0VUFRVT,Sގ_ZTT&iݎG^l>2FH?m)| ,v{Vnlkٸ-zQv;* =W\*`B!D2* ۡG+Wm߽;h P50u>qD!]OwRk: 5mPNk KwuU̝u:-i*T=Q U'P JY"UVt:l6#[@,Nv{_ߟ̓XÜp-CV'ǣG3޶"j5eYn7fynwi'n0m*TaRؖWzx'˲a/T [<۽ _OsP8ԩ2gIMiQј:Q?UPx^*W ^`4(Mqq^,BV5^F>[aE]$?x-LdtyR vNgfa~B2f1V`qO>*P.x(S;6^X Z-"L_t)XM)XM//NVk+X]O`B.E V/{s}}> E)XmtBkt:}/՟^ǤpeN{]|O`><677jJ%Xjl6/WZekXUHuɸ0my=t2iMF#ͦ- #-W`2@FӪ&Dž.~k`]`Tee0XMU $,Nv[7Vkuy(Ny08ΗMfYvtڳ֥;@y*TBuuUb5*Scoo^G^o4n!t)PH093˲U1D 'M{{:~O>>zP0`VETe oGk86[ Ie 5M'W%P1fYn7Sl T)ܝNg UGkUq}9GO-eloo_x0MU8eY5Mg,ˆեUΛeى@sY! ADlnDVT^6P߿wNt}Cb2 qÑκ=o{{[O*Py`JJU VStOUb}}}ڵkqڵ~]oo^L!hh5YhHZ =[9ZY}k{e )n{bxՊNNsummmڵkqƍůM?Nk{1P 4G^-ş5Sy>컚&c*0TѸ`uoo/zlooGӉ<ϼv|g/Bܸq#n߾n݊ׯ7nč7ڵk+XٳgxYeq?mi?=-Wezppzt:h6=`?a@c@ՍH[ӷ[tN''>ԧ͛O|"n޼7oތ7n ӧɓxIq<}tly~_qU}>qȲl`TR )x(,šRa?~a?gϞG}4~DP!bL}0hM߯õ%z=j3U0TBB 4.bZ>'ޕ/'7O={v몲Zft \U&ob]BUF T"I<4l6߯'ҔtPiZp0v{س} XuUlA@\mLjY[LqX֐.?moZnDq͏>:U`R΃*Wh4&u/y?g/h;5ގ,n?v"j OՈW/.J=777JS܍Vu-v߉w}7^RK[ [Rm[-,]w,VVeVtRTL*s.L77ⳟl\~=~,f@m߭hD8+VG;nڧɤy?̓@JSf?^7oތF׮]/D׋y/[޹xH-IB_4XMF+mf䪁jµl.lgR_*~;`޸q#nܸׯ_뱶g̟__Yovwwcoo/"2'3{vՃ>gm?h+x+ӒylnnF*T8<<7oƍ73Lk׮Z\vm{oKylyO? sUӬF-cbVco/bw73#Lx@?SG?7n͛7s00qƉp5}'?W^ye޿в<0 Pe%?OqOׯOl?K}.UBϤy~tmT VPz<χm@puRNC+K*qGpnVUַa|[n ?n߾n)PMr]8>xi<}4>>徭ӠҌI,w:8>jx 0)U$ n)w)H,~?"nlmmM%ַ?OO}*n߾oߎ7nDV^[[ZO<'O xY<}4}Ϟ=yfܺuRgtG4 Bk>(W~WW~W7ވwL Z6?y5Hlo7b{{`nt: VvlnnF"2Oʅӳq-~=d\ZݎZND_XVG}4oUm1@5ΫfY6R󼒁;LZz1_ [&CʅJmzSjN|tUڵkqڵk(V&V=XMUvDpYU.$UZ^VcUjlT TG}뭷qoj YS/9V ;.fUb*>@?K[,SrEF䣁V!&?O8ݿwߏ/ɓxq|,^.,ڊVY S/i{Y4Yw_vn m@yg%*TSvSO6c>FAWg՝uN֠b5ގ~csf?{gY6 aU(LNxދ<ϣn$XN3SS[[[KzUO[?ZӷzҶߌ[6=F.,nD߈>gt:?>=坐`Yy~ K9J4?.j^2***nZTxJ==\DnZ*efG'LDG9`Un~#""ZAZyf4MU,ܙg\SR E4Zp0.Hu0*XG+ey~8xmaj nV3cv@eQj#~Flm5""ӉJXMB!Ψ͈;w}BZ!Z-jڰ,u{{[:AV]Ղ|[& tZRW @BҋnNDr~;B(P*LkVfsrsss",888pVTj1UyyLVz,Wuc5"XeOZ1eىmytXާWBR@:* "oyR5jNQTQboWڈ|f^,b:znӺ\޵y/eYvBn TY ^hEj4nGۍ+V#ՈF#zŪVYpti9 7|y +hDƘE4vB_\Aݎͱn1V@uIXYDfs<;AhDeL1uxJw+X?t:yßutVTK* 58XR&_}<"ˆ~v'Z P]VvwwըFa;?E;3`GV و__)&"S[֩ջ vNe;2[9Sq[W eݍP?#̞yHjh#3ߋ/Ea\v-c}}=֢Vŝ;w_,v=|9o~qr7}~^l-)'$ vCVZ_<85T2Sv^̊UQWKY,R ſWJ[[o޼9RuVܸq#nܸkkkտybt_H=UPV@kgb0 X.O}S/0͛o޼^/zЈ6n YV@KoPO YDY6,Oĭ[w#+BN5 XUz2w*~T(~y~7*P=_'Obmm-'*U?øyf<~8Tjz ޞRXbV+:Ny>LuXeU*2oXW8Oߏ~BE7,<| 6}ч2穲TaQ=y$?~<\qF\v-nݺ?>(>}_ߏMct4S>XU4F.ï/󼲁"lFшF1EQIUkeUNy>ROksj.qCsH Woݺ'?O8<<>r[~ETY:)3<7JV<TZPjRJ #67#ϋwiYY[[ׯ_T\0t7ï $B0,<jb@n<5#R>oHbss={~a|D@$ճ]Q U`NϋZ+'ͬz OYT3h6o_@5˲ i }ܤw6w%4*0XUdbo6K5XLq^GX3xެGwBZ cυ0;Uq=YG?/Vy\'Vy`EU5**ϟ:M<-<(zdY fv|fBiU-8=\L7MSߏ80szk[< JU^=߲EB K}"~sx8^իua׿gϞ ?v j-#NU1.jUo`P4N5ғkl)ҝFcLn|֭''ՈUR[a[b*TeTTrt6~.L=hhbZ6U*";ΉSY+$+ju~{{{'W cc?9LZtpppf:uتv~_8S^}Y<}4cmm-fZh6x T *bez:YyGߏ 6~ܞ`PTa 4SMUGz8_?NZDNWZZ\vmovگZjj{mt."Zףl=T=PTY +Z^ _ORjlNglUhpzV?+7ߌ//(><] 楊Żuy<(nT88xqj'y?tӡBUe,ˆ6yZ}㪏ŐsxL:}j} O? n޼/_Ӧahzv~NUoe2V$'VZwizU6PM)D=88yNRZLƳgN|<}4>}}Q|GïG?>|_'?7 Szlmm S12gm+;::zEvl_W6H*c  @S"S)eg?YDD3ś޵RhRp:X6E !Pefyi|?ZǓPX(K h.Xl^'<TUǶ+)no,z}.HXWΟz^i2 LuYIwesϗz]TT*WjTRqY Na]dKUmzVdvhTHj?T@JXY\y{g  IDATm+3}VwӋ<,Ӊ7_^EGT`LaT!˲8>>>XLǃJՋ>,'?@{,Z}^?QIENDB`hkl-5.0.0.2449/Documentation/figures/Makefile.am0000644000175000017500000000502513236600666021436 0ustar00piccapicca00000000000000.asy.png: -@ASY@ -config "" -render=4 -f png -o $@ $< .asy.pdf: -@ASY@ -config "" -render=0 -f pdf -noprc -o $@ $< .gnuplot.svg: -@GNUPLOT@ $< AM_CPPFLAGS = -Wextra -D_DEFAULT_SOURCE \ -I$(top_srcdir) \ -I$(top_srcdir)/hkl \ $(GLIB_CFLAGS) \ $(GOBJECT_CFLAGS) \ $(GSL_CFLAGS) # wee need access to the private part until the trajectory is done. AM_LDFLAGS = -Wl,--whole-archive,$(top_builddir)/hkl/.libs/libhkl.a,--no-whole-archive LDADD = \ $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(GLIB_LIBS) \ $(GOBJECT_LIBS) \ $(GSL_LIBS) noinst_PROGRAMS = sirius SIRIUSFILES=s1-11.dat s2-11.dat s1-101.dat s2-101.dat m1-11.dat m2-11.dat m1-101.dat m2-101.dat traj_n.dat SVGFILES=sirius-s.svg sirius-m.svg sirius-m-zoom.svg traj_n.svg $(SVGFILES): $(SIRIUSFILES) sirius-stamp: sirius @rm -f sirius-temp @touch sirius-temp cd $(builddir) && ./sirius @mv -f sirius-temp $@ $(SIRIUSFILES): sirius-stamp ## Recover from the removal of $@ @if test -f $@; then :; else \ trap 'rm -rf sirius.lock sirius.stamp' 1 2 13 15; \ ## mkdir is a portable test-and-set if mkdir sirius.lock 2>/dev/null; then \ ## This code is being executed by the first process. rm -f sirius.stamp; \ $(MAKE) $(AM_MAKEFLAGS) sirius.stamp; \ else \ ## This code is being executed by the follower processes. ## Wait until the first process is done. while test -d sirius.lock; do sleep 1; done; \ ## Succeed if and only if the first process succeeded. test -f sirius.stamp; exit $$?; \ fi; \ fi dist_noinst_DATA = \ 3S+1D.png \ B_b3_y.png \ B_a.png \ B_b.png \ crystal.png \ 4S+2D.png \ 4S+2D_reciprocal.png \ 4S+2D_reciprocal2.png \ 4S+2D_reciprocal3.png \ 4S+2D_reciprocal4.png \ k4cv.png \ k6c.png \ med2_3_slits.png \ zaxis.png \ e2k_1.png \ e2k_2.png \ e2k_3.png \ e2k_4.png \ qper_qpar.png \ $(SIRIUSFILES) \ $(SVGFILES) CLEANFILES = $(SIRIUSFILES) $(SVGFILES) sirius-stamp MAINTAINERCLEANFILES = $(dist_noinst_DATA) EXTRA_DIST = \ 3S+1D.asy \ B_b3_y.asy \ B_a.asy \ B_b.asy \ crystal.asy \ 4S+2D.asy \ 4S+2D_reciprocal.asy \ 4S+2D_reciprocal2.asy \ 4S+2D_reciprocal3.asy \ 4S+2D_reciprocal4.asy \ k4cv.asy \ k6c.asy \ med2_3_slits.asy \ diffractometer.asy \ zaxis.asy \ eulerians.asy \ e2k_1.asy \ e2k_2.asy \ e2k_3.asy \ e2k_4.asy \ qper_qpar.asy \ sirius-s.gnuplot \ sirius-m.gnuplot \ sirius-m-zoom.gnuplot \ traj_n.gnuplot # Support for GNU Flymake, in Emacs. check-syntax: AM_CFLAGS += -fsyntax-only -pipe check-syntax: test -z "$(CHK_SOURCES)" || $(COMPILE) $(CHK_SOURCES) hkl-5.0.0.2449/Documentation/figures/4S+2D.png0000644000175000017500000052120213237020242020622 0ustar00piccapicca00000000000000PNG  IHDRH 2iCCPdefault_rgb.iccHgPY<@BPC*%Z(ҫ@PEl+4EE\"kE t,ʺqQAYp?{ossp e{bRɎ(tջ{i常r)teJOYLgWX\2XyKο,]~ )sT8بlOrTzV $G&D~SGfDnr&AltL:5204_gK!FgE_zs zt@WOm|:3z @(U t08|A $`(E`8@-hM<.L@ށA2@F 7 Bh( ʀrPT UAuP t݄84 }aXև0v}p4 ^O6< "@]p$BV)GVC!Bd h(&JerFTVT1 uՁECDh2Z@Ёht]nDѓw aa0Θ Lf3sӆL`X VkaӱJI%vG)p`\.Wk] p xq:o—;IA"X| q B+aH$͉^XvbqD%iRi/82! L ے&US{1O,BlXXؐ+ NP6Pr(3;Yq8WJ)Hq"HJ IKIJGJJIKa8y"Ֆ͒="{MvV.g)Ǘ+;-Hז,L_~NAQI!ER¬"CV1NLMZ)VL $L`V0{"eyeg :JJU*[5JLGU殖֢HVQ?ާ>حѩ1͒fX9֘&YF3U^FuX6m]}G1Չ93 |UҪU$]nnCM/OS~~>&   .y݆i񍪍&v\mu:ƑGLMv|253Θ՘lOv19|y-Եl^Zä́UUКij}ZhlfSoV6¶vʼn伲3صs-[{'BCSGhGfhgWΣ<lqu%V>svu.֪MZ26,b&*4r**4j:*@LMLyl,7*us\m|GD\bh$jR|Robrv`NJA0"`H*hL֧uӗ? ͌]֙ՙdKd'eo޴gTcOQ{rswol m ڳMu[NO [A^i۝;OrR V (m? Yrˆ[EEE[?Xި%%Ga%oDDiNe̲²7Yn\^{p(㐰­Rr_bULp]u[|͞iU-x4:zccǞ77Q'z̚KZ!'lsWnk]8q/v=s}ٚvZ{aԱC) _}ABEKr.]N<{%DƞWzuW8}nX8[[Mowf[@;]wv8d3tyoy02*|`a׏2-<>+|"ߵ~o /ۏ?yx??'󟓟O)M5MMqb݋ɗ)/f 櫳/ M^̛oy=}na>|ZZ.V|R?B, bKGD pHYs,K,K=tEXtSoftwareGPL Ghostscript 9.22_ IDATx|cw}9GG 0Đʄ&Xrt>nn>4l{wo(Ji-RZmwv˶ۅ@IH 3d2ЄoK:!YH$K:=_vȣw>1<d2rGǏ(] ad q> @W!hIIR: ]@ M@JN>9A@uOB˾}RbB VQĄ@OX1)¨<:vؖ>)=s0 `Rt6 d2[LNNjbb0 :=eqt*i$-4@ GgIem79=w;Ng)Rw6\*$fg5*Е] #ssaQ&dVӧԻW/ЬL&3g|ӧOkaaA8@*{18:T"Ѳ0J2N%:I aM9sFL/,,hzzC']LHB+EO;&&&U0e2ҭ2" jRӒTWDo@w2<WۉF*9@uRdOTP/(H.ȞfƇFm'YS0 `mэ=QbFPz'YS{W&8Z@ W/L&3ghbb0 EWJzwqbEfɤN%{.L:VaT&)uL`{RM&u0BՈTJ' CLKJ3QgΜ{u"mqt2'T"8T4FQqB.'= z[NLL& N>MOOHԉ@ $QMJjKR!K3̖ggg;sH T58:H}79=dR19jM:T;v(!"jL:MT𧝪?~\5?0 qLHJj?8d2ۖ;t_ʿ1Rz@0@ 0zE*)؃GgЭvT^v#c4` { 1u/WH )Wɺt!裴#ssLK  ¸gd $I+w$Y_̫/ybaF ! ʰ2b2}@J+e^`ݎ1" z^ WH"O>މu R)yѩD"cTz^5^J˘C1uUUɝ:(-3Jd @Ov6 jTXDT+Ja^w}Kt0X][|icc]3|+s)h0hh{NDT-O ӳ~;S)CyOTX\nXl>o||-RP!=Qu0Kk|LW+Gn^lVlVC>v@ ED/ zy=c3yXƚ?fm`;RDI'*~0ZԗeIڶC#B 543<iz=mqBe=@?3&:a ڻ/5Ju]ԏ井R^>**wܮ'0! 'TyR'ռ:!Uɼx^֥ Ae&5L.*oA_㲬,R$QzCCw~xǃ>.@#Z󎣳d& ;x*R¸m$}i:w^u{ X=@ @(wH̸rY'-ՍRTJӊwQX+*a2bD!ظG eT7^# 󎣓R2PLCtEiae>(w@GiSNS=@ @OSDh ;*k(L{;rOhL:] Лd((x) L:]-H9~OT KHDCD R(IDRaZ_ E>T38:H}2bLDSNyK>NK̥Rw$)R' =ŝ:5>RxNK̥Rw$)1!.󎣓x(Î>x0 ;uX#=QZ"NT"8;`B .a:H(1;VbB @MD0KͥRK@ &T*裴9}Aܩ}04k|R!b`+)%a퉲' 1 mM&u*zD./w䞠2t5>H{<( ~)^E Qz^؂(! cG0)`) zA7/=(aA@o#zR@ 0Dv(7qjO_ [$hxhVBeŘP76ظ+e^ Ai~fX!„2z^(z4 R ,Bbqt*-eX4wܩ2/uBiTJ󎣙dRqU>Øz0(~)~)˘z=QP R@' ~)@/!zȼah. (-cdfSDh)s(j]G>Q;+$I.]T39=dRqU>LHmD)' j_ ~LHm@O9LH!(R+yN>KVbB h0DC1zAظG eRZ( 8LH!(MHUEW_:~)[LH֞(k(h_ R@&:Hf=XKTXdi0 [ 4=AgIͥRAXC/ceAideyY.Tzdn5>P&:ya ̡샇 ae>5>I5>NDm= ~)vm'J=QЅ~w}K5!TAOTˋBBPv!KMNOk&_ 0! cOaGozèz/5> )(lSQ9c5DŽ rƕ2/]y~NJjU>4)ySDh)kƺ,*ҩ@5>` =i>x((-ae>s؛ž48:53Sx ;x ra\㛜ֻ 3žs2 $0;.vTQxc}rG (-Iu0t>)gS)0Me_4 ̡"㔖捍ra@H!G'e ł> KR聠2 1:j[EzvTP(RJRۡ_ &Z7uE5 {;_ )W+hRH!TQ:Lv(@KS;rRH!4N&ftr~TzR`*NT"=@ p21T!OF{6LKh7? @ =mq^* Bƃ>9}AcܩábA u6əwx!5<-DD0EO ha~ymZff4亂fJY0]G>Q;+>JKW.˼tA՗>J$fg5*] )KSiP+yKSQQ"*#\Hg\r}Q&fW _*,k|X Q;i*+ЮU>sp(XC"Jkje0MNOS )t(0-e4>-xy_Վ#,/w䞠2tZ' Cg PLHE2(>g* &2!Uɼx^֥ Amx` ńӧd>Zl3|*jLR}˫DhPR :s Tl |MuhVdx@/,T&.S3BHMOOKV(T v^tEntMT&ՄS`LLL9:꒓[^EnaGFW;~i$K&RLFgΜiZ+ ݪb:\J￿̴T۱gQǚ:`B A`B>a[㓤fص(zFu|+ 7| E H5&lT'?x[2v@ZXX A(vR۾^S91h@H!R_j㜗㜗dq.(vM |J_x|8R<~GCg]z:d\, ]B ;+z{OH!R c0_2iIROKT;d.hNϕ-*/)YR^=H\1չ`i)(7H!R5>I}cZ+8N& *\q9MUM\%?O@1(N!Q'A H/ԂjA9Yp4-]eV|sToyi0^E0U9ȘL(WH!Rkk|MׇWvTOnzCZTe8U«sl]󛞞P<~ɿ[>]H9L&S*( 8$m>t0DN_0 =RT{W.+AszG[ݶQ^Ryj'j W ]y*LOe+~J&N He29sF4==]z&''E'{2I&(aЃ~~X LyV2 ʃj*_߿:_=!SZ!W3reSGX LT*%IRM8ZXXTNŠly܎`jk|m+28L()@3Zи>W/ ?x=|j͔Rz*C&5ϩ5AUPtyMOV+q6ècǎ tue2]~]z׻499)I׿zj򖷴hgוBu"*[癶Ș +fW ؃̑ro,}*o􀴶*cm#sAgam,O?U jN \-[v|ͭ+塔`YZXXR: IDATTsON3ozMOOJtTXVBӯgF卍+#G ֐ZwI0$4nfaT^FW$JZq[++[V7^塕LE% (+%gddB)[ZqI+UNx\LtX1**1K۵,Tz;Rd)28\n㍍+{K˿n.?V+/߼m"7_ߪJp]OW~[?*_óTXU7>KT*R_drFU~^^@*N8_IORRdޝ>Ve2j7vzEGFe@Or= ҅6K5׺?9T_||ͲLY 筊p*y+]n,|>/Nm>vkeAmhk0<*%END?&L|5f@u4*jO9siGd`עuظcr\ni05Hu;󦕻H$RٶߒiZ,>*<DT;x{s-+nr|V!UyT^Ry8U+*TU2BNt{JҚ+iꟛ(yI$CAIR23^-~رcR=9_*v׈\۽GWC^wi߯Q<Ð,(I~doQ[}}W__T%ˊȲ̊N(8T>m|Zo"򏅀|>\.':qU2@lmQ&jUSWJ&uOknEͽ(U}7u8[Vfgg< waT)`0 /)@;"ZИ>IW 6',ːmGקѨlV__eY%Tiͨ2)^5eOm-=/ϟ*|,M\@!U6ڪVWWl$9~Ud?RqZ+~˻*ʯjzr_֣>gV{UJ^f-ګR;B[y%Z$k|+Z/5+zXOS}ʲ O) hOѨ]Z]ryml{5J o['~PUR'TJeUFDhTͮkuu춢B`Y͠'UWymRIN W5;;dr~7/h}}]}Z[(Y^6n"'.uRTtzz)tD[SOuLL5:-Us cB A`BW.+Mq}uN-ݦ! o +p~ϻ7P䑿UʜfdnN,Se*1˂̀cO%nN|Jښٍf@W^eNMU]ާ^zkjmm]Z]]zqJ֤TBW6 @kuՄTtDy+WwS(UNKUQ]ظGlz5z9}5$8Y巄P|˹eW'BUSW))i34%ێovP.vYC?Te2M[؀ۯ\.b8P~1/@)͐Wyaxʎy^V$bUtr6\[[ɗQZJ$RssT<h=)45&^ B۴7@TXsZ{7>)I׳D? Dm^/MKaSf:IQMEMߧ/K*-xt$FNi󟿤R@U] "KѨU $- ihh\7lvCkkZYY򒖗e::5SaoCi3*SS)#W>XY3~\GpJ&H@7@j9s|qtz@=a^W.7/5_~AόB`0=uM>IQݧ&&|]߿ފuw;ζ8NSiܹy}dۖ@"mS[l789-R<Jm)IJ&d-uURG>}Zt [|qѲsr%u<a! !v/7u=}|}1rO KT T '1;dqKJm[RWh4R ]S~HeY\w]kk+Z\\Rᶶ\.''¤e<**S?IE *d*sK`6/vJjeeM++k\r~(UO/^yI)RG)qNMk):رcuiYP]u?syG@ A f#ssɋ9} /f] kp8=eC)W*qe9ekPƍZ][>;P<,A7jxxJ 4# ^l6 juuM++f T>H|Mw|7j.ule238nz5eۄQ!F MNOk&l8P<~GmGJ",*uJY%4KRy2Q}oaaY]ӿ#@:H}_/Mz׻Uzӟ߯Ǐoz[63>O멧bU.8{˿`k=W="@ HCJRh2&1wߔ~ު_i]uߐaD%E亦<ϔeE544X,aK*\[ -kHWz@B|1|^dY"HT4eVY(W% ²[499q{$mYKӚ(O*tIe2-,,HaT]p}df /eٶ =) [Tk|;I/'|䯴#D\YVt3VVt]zEˋf+*R2ͱRiF+S$'/+5ht@lpÍVVVʊ=I~:ZjdJMLL(\7==-I^uoկo>HV_ݮv0T U(`#Be.fbJj_0%IcWO>P*IZ ]vU׮]R1',Ie*oL3ZJ C͢a ԚY)CI@u4f_O?O.ˊ(>V(_T3ynxd0 $)@jo c0L;KyQi` "˲Dֵ|C׮]ѵkW˂)Cw@`*MIU lYVlO=H0-!HU6CVW״nT fgH]mnF U'V몯OHD7ȑu]=8cvğRި*:j$"P@ A ڛ¶'7N_illX##}FsDric#VW״el(*B)Oss3_Ѷ`T'{D>E-W$Yw}D{.8>\7{wL5:-5<2&0 @)@jo [05>_:=/l;H$H$|~U}Cfͩ)[-R[_P)ܧayںVtbPʔ/RlP@ U?g~3fDlvT%ӴWé̀\>"ӑ#?#Gϰ1MI+SOKJ}Mێ*F9 R¸79=w;N[C+?U##v125v+QRLoKT4:T\ߋip0Xq67^VtnWiV{H /}N+++2Mx9Y{K0eLL.+[-F=G44OwúoUs-ꗊQ#P@ q"O>1Zk|Rab~\.\Q,fn*éHR~@OKEF758Or9J---E-/icS>o4==&y >eIF)*",Ka&L0d}mޝw}_Cezp$R')0 6)T $=275>I:w.''򨪯}Rom*)ak` u-e9eWkyyM٬'5I@'H  ]zE7dak{V5>07[~z衟OQ׊╞&}"vT#QA H+_ _$0ޠzn$:1e)?i` }/+NJeuƢ^zr1rR>o(Tg #Ƶo߈ Ô99eڜ"f>H{v+zBߖ=} Uwܑ߫{(-Iu*6RIIڐ.ix[-+JZuWy+痴vMW^e]]66gi`V4<ܯHDDur =t:NmjTj_GMT=@KTXdi0 mC,S)2d zReʐj5]uW-ju/ki7~k׾mC i߾! +(Ri(϶gHo~~~C##S4r]N߿ b?_)=g:`i)mG @Oƕ=QZf.x\-iJenf8e~8U-|Zրj´Ԋ\wYk[B_ҍ/ƍey k߾!S,6HDm?zYb~^@T RT,O>(u?ٰ?M$zĚ *5LEB:C׊`0 mQ@,^<͡Բ6é+P*_--@?իlvQ>7(6x2 Ccrgl"j]wݩwg4<PLi<nïU,6noɔXի'R U{L B(R]{;&e4dY,+HPmUa+}~0R+U/KrEe״]{A׮_48-R#ڷoPѨJJ$Ǯ~NVR zmpLaHCC-oߠСH=8oTMS`{wxs#cB n# p3~E"}DlE"Tl۪NmP7ߖ$- 7׽˺qvv]]E"FGillD##C+RRϵ7$+lC3a=ZZZU6h_#+fY=eIҫ_=Wz\wC{[Gɿ ʹyIQM^oq500X-J.Ǎ3GbFbr/ʽqЃqS%I՗>Mkdi;F''5:9>'%Y2 iFdL.~dL($(<6 CIʫ9-r rf׋W^߯aY%Ð ytҊ/dTx`F.\ի7hWhԖfd~߿' }ҥƃ]S;RQ;}N.)@ ⍍= X[ 8vmaA_;s`uM;<ϔ*,r2HE@)V~@eFYHe*OaTVLyǬ\p썍b(e˶mI~(ˊjr +oFfg]O>v~|8411Ǐwu} 1VSLKQqBf#A{PW~!er}! $+e^)IJj}_axśn/y2Mlʓ繒 W\7//>nWC򼈤 #*a 0400WhWiW+._^W'{9?]_~C}=O;t:-IV<o)7/Kx V񍍌/wYRɼx^֥ Am;͛N?_)PnE(um3?0ʿ\וzB|&''K!T:V:d$Գtpv0~Qv==/e\}9k|Z㛜|V10*FU tY%)"ӴeͲ,Y)ɕiKi]{!)+]VWH$nmXշ$ϓ񛯶 R-Կ+=CWd2[&,ǷG:ibÊU\ń:%k|z|qY}K7T} TniZjs-MN? ___#eyyW<41庶 |2~__[n]2ƍ{lP @ %2Μ9#ImxtTSR:͸rY'-Uo$%BS*k,*ߺgnE8喺\WQ(67l1R12nD/ܯHdL##;e1-,+W R]Rr=tTgU@H!R^ڎ㜗<+?J-B+teYĔTYU>PSnT7$!<r@o|cLg޿5R]ZXX$;vlWk|o)2ߪ`URU=-B H!hW5drWT-J0VUI #W r*e%&$׍( 0F^!--ٺ =%P/.֊~=5` IDAT_~0k|}vTYBR^jd/$-_KT*C„i\S>oFdY$iު|XzH~F8zEZǻnS?zZ@ A B7R88_-BI2 F1akdo?;zHR[u7~a)tKsUJadT}4zR=nITjs vzo+FYzRUX=4@G/Юk?nvZj@ Hۅ1Jʌ񉠏hWm}񸾹ê^'^(C HWmO韑D}.HLd2ӥ[J&qM0>Z#رcI-hJoW2yol dRR)&w ;uX٣fZJֿ: J&50!()3!b󱡘Ɔb -ƄƸrY 2QZfAyMOF佊o H2LHQizoF~(K)%R<)9w>@=8T*mH`Ju>?0 wyc}P(-)I2iG)|`cOQ"NJK@*W֫|܎5j_H@}z_jAS5}DMbާO[JITn:q#k| zR 9=P ݧa~?*/ry^eրx\( ׷{6[HGU_{H h^0bAD%$GړQʫ+&0H6/AD/ !E(B'v4nJ-1E) ,)qȩ:VWQk1o, 8xU4X.0[¬I_)j#CBZԊ5cHH\H͏a~dz]Z dCBN7^0/bQ*RTcπ/,@U񹐘"PS~ \!ƥIMn:%ދ))1~l׬<ƫXЫ(4XoF@PM fK_3 6> 6;$ŔՎڙ4琐"񝳘,LsV`FU]Sn 8m!Ϟl.ܩyv|' }{>zws=T빚UđS0C(9U$9ak_|I"bSBByan;^hmFK[HHd~dxf06JU]HJLuZ Kۤ[ 8vUS+gXPGiǫ&,גW)S9SQў{j  >SGcǼN RvA )"nG:s1GuG:BʥbޜVqU JQ墊UY/\&8KjDU5نʞZ"9al{~in  $[]tEĀ@Bӳ脿m',sf!< ETZ .Wp,Y \@5q+xN(2*Xv z̬Ma6?KO]I.tɧ{=X|) 6$;a*ף, Ǐ HHUCM`RHHYFc;1URg+Լv"N@>T-UU+kgEU{hɩ7e/l{-8~ūz/30{q _)_ b !gXǫ-wb cTEĀ@Bh{pbW@BEr*kKIS"OWNEDEɛjk {K˯%;]]8$W4qC9s$M)#$TrS"^!ʫIG\Xst'g 6p%.MK(ԣGiKps%ʗ"gHHGblk7l0R QĮw)|!eԟe/_W>5+nX?\xX?]!8Ӡ1M(uh\i4C4pנk:8IZm*LX۶a ¶ïRGZUȣ`+^EU:bj|lWò-bBB1bZRy{ w>) _1 D"_9r\e\,ʎ& +\\AH0FjtL\kᾮqFT KN-FvI0ơ1θQ\uh@"D*FH8"J)c9`ܯ( m4K0JK%̢ZLض˲ )ĖzV&jI*|095*̩ Xb(YEGI)ρmK 63ǎ 7Lb *n{7QuAUH3[DcUBRQ7$m|r9[E0F d D #d"T2 MI8ULN ()0̡Z'la U*<< la+1J*)0qW$UOA)e ,3 5::?pd-,XKXlEsbbbE[ڰ`B \yfw4c81_DHH_?Ilv3T!EBBjs3?:*Jbj\:У604eR"q;zDf8wmÖ6!n?L[2hA  VA&AU - R BB< <",*+v )WNUk+S09TT \JJR*Cڀ--XJwpٺdSA Բ<2( b{0:Iikf=hZ11qpS9ƙN,cF !2Jڡ$ɜ;&GH 0TC$~H*U16VNqp5D"HL 9 9 y(%%τzH[x-w a;H]be \eATzʃVd(@BI))B?m8>S90!pԓpu]'tk^4h08,FXtTk(sJN mCXplrJw-)e`1l82ʶlFN"J OH0sJ)z?x]t6Raٰm-5#S64 =WFqU٥6 , ,8G]߻/䖭lXӽN,bW(CX6{CB 2");Q9hC/UwGȊp g|!O;2ʂ`Bf50[jMϾkxju@"B65L2 ONiTR8b kJNPPUS­NT0;ڨ=e@O#i@OHHHRHfRHSʌLۄiP(+!B)KZA`y5|+HHn[輦rD"iٹX*b+w^ٽOmS5T3d1M)DSX;yO*¬սc <75(24ZSС.籺rk(J&óem\4sh FB(WLJ+!LH'!e0 *P#_XGnc b4aTcy{ w?7!О{j(\ ~Zzۮ&;jH"& E ,owNuAɗ vG|)/`l?ps^?"V_ x+7M""gk:42,#.#ϩv>ۂm?< ӠfMնgٰM˓r²y, ɌfKqՌ}!) &¶Eo٥o+MK2_z= 69T!CnB^}PuACUH Z4sS+(/V^!uqLjzX)p?ln5ȉאx~Ylي8,UKiBfkK6rX^^<,tZl` `4fΠ#rN^LLFҀ%mX]FI֐/$`R`w=u#fW7raC/BR硇›o|3 A$zɹ9jn4V ~ptNTt l#kS_t"U~{ΌERxg,w-b2=9SQKKX^r"9bʓSƗU^2J%H'ʤU_&T6 $L]FiÑRm$JRIG8l BRDp̙Mȑ#8J/AT?)^z!fG1IQA C7t*Ƣ5`/8#5\+_㋲QS Azo ~4y泣xVӹq\,O@g` ΑNg1G:X_tdYJK)!l†jj&>)~)-09j>0ضuZ̀l㋸L>@n إEB ?xa޽ܻhΜ9{ /كO~K)AT*z>\ ) \}tODբ۠Phr8t_#YeT#Kx~Y_Yҡ[:.^x/򼪌𫤂nŔ>8TF2D:fˤ"34` 5^@2 ( :w+$p𩃽6DR.gΜ|MٳG%E !N{خ7a$/&7o?A Į8rO/4y;TSH5{aoKLI HN<4^NcAt̿~Rr:))H'$fc$T6 %YDnc kQEPR?2g潻~eHLE'؞w",{=3^pnQeAG'pb^,Mܩ=BL5ͮfڋk6zj6>|jf+1@2<}/׿s9r^˳"=R򩖌 .Җ6 -´a,ئu6mX 4aңY$48j>ư $)Ł^'!"pԓSZBC"N"N"M#=Fft T4Q47/氲%X?6,H)qm?ҋ6G @yT!e(zTzkgvw@Aљ քꐌگjqUUuRVRu5orVXNY1bj`«N I) evҒ:l[b0KL fɂY,)157Ti`67ּfN|[.bv*-[ao 1Dḇc7SzQԞGAufsUTo_( ey}{[I)I urBI-siw&figΗj| Yaq11g0^Yjz R` IDATK%߆@.;#,˂mjV>gٶ-H!L&qMYbѮ]x!ϥIg Ռ %|tRsssxᇱ#G;D' Z̵޾f RA ԲUQ."_ je/9:nϻMRbf}w\w <$$Rː~Ty^rـj3%4$$R#iG3@flZRCC*sK(",_=l FLrs2V*e)l@s Rʊq47R E,Bm8ʗR XWNӞ )!%$/ʃσYRz21t$GRȌ ;:H,2Y 6ֱ_ƥELS7 5_z=ء(5j#CBTk׫Em|v= RF H`nBHժv\uM7qgOicf}'Rv‘cpP.rU=peTJRʪ)WL-|3 ,ɠgu$G)d'XXҺR9kݓR',/[>OzH) !%ÿ^ӌ*_/_Wh* R!zwTHH NRm|h>͗z+jJ!$NTjJH; a0 ;:[0:5Spi}﮾J$IKuʉ"BR]d #'U^mZyݵ`Ϟ0 V &M{RѮfTKm|)uUG:fpbn'_Jϼ⿄'F_Ujy#eq_CIR(_(' zUHufȭK01)j;NNٓ$EB{̏N₩W6RZ*qbZ$%P<=X8B"-0? KP)<\E%)e>OP9SBR@ ʝЄ ,2 ZFCv/ۂː`p ,ǥEd w=MyR@Rr !%Rh6_ꧩ]o;v9?ǾvBoE (j( x_c6AT6>VP)r 0ln '6^+䡪)Pl9SPI2 )wŔKl)HL$1mۦ0{:/-`LaRT k_/(' R]<8?S8@-{}OHL;*HLD$HHu(-z175R7pr\*kʧ~ w*a[9xy݊(.W!?_=sSi?J\1J)ِJ))ų ކm{vsx{ʉ"E>kBN;ǎ1cXL̎"QTX^qJ{P=w@;C7`5jxldT+:5!^fc/qFj8##?vfkMذo/eJO?)3fק0{i EuǼxI.**$T 9gC$Xe}Nl7ekg_Ե'#Ö/wߙ3g(gHHujBʥb`v]o`|) {hSuCJ]1Ֆ2RW6>2_`=j[06J4 O.HQIɛr @00唥^#p+2qݣjrή~:.MU6v`AB<~@}ԉ|&fxBQAT@B*>GԮuEL+bR`8_ l|jRwDxQSc˖g֧pb󉋘7Iu"ZVzf*XZ6dZoqh[5g>y,D4QL/C"T )xqj*uת)" xp[=1 UH;1UV-%li)%j`fm /Z-s󩋘Ic x9 TyT&o{D%DSsss8vj#ATNӪnt(KzC KDRSE/ ˗6؅7or̐KU%_J:b TmMϬ9S1Z狪J0,%-.)a3= ?|-v';6͎SCU-U/g|h Rz]oY>SPʗ6>bCB=ZQAZ 脘ˬfkAS//%6r"|}fbXq~yOY6G(' R/>XZQ Gbؤj8dTaSq6H6(,F|mVvxc|)=%VK/7ںmfu NL-]~^#VO|l^{$bWzD5sCTM.oFJMFH "ٓ'}1kh@yQQa.kRLڔѮœcBL1]Dc3qq*dX24 -[ބW=oĕrfQ-x?/gY)Oݎjp"st䖭0?vPK1#z8A c2U1HZV{$JJ]wT$!ȧ?#~7pxDAdW&Tߣ$JN3 CLHl"]=\\,WP憳SOKiOS^_ʼnݯT-5!|)mb ;UE@-{#Y oU>jP1FM^x ~QSuǗ{ZRkuM/ep MsDQA%WPTΗb'[lϋ>:|exvZDM/lHHu|[R$2_} ڤ* /_.jpEB'gqgK5s.fGN@6ar sZjSǑߨryz8;GK qKQNAAHHu 0w]1Պ*]-~@ln +5 IRD;'Y]}%ʡɗzf8cwR%Uu#1gT417@g0MY/j#qrS~~'~1C-|CܲK|s0#}rk##bС]΍he[nڶM[z &&/Em|DdNT r^3U` \j>$_Ŋ m71{pӛic L_yՠ=HHufG)\SP|̌.͌GRD M䃟ҁ+0:^EQK)TG/jT 57/kk-؜9*Yق{J sOm&bQ.p/AD4HHu##c?^؆hj%ƱIʐ"b'$h^Dà2ʥmq3boYf#5obWlJD_) շs~_þ>4QA֎ T6n[Ǒ謘r#ybQFʇ0O€RM_D_Q޽+מIRADmHH H2UQժib"n_JLZ㷓" _ۡQ陘XӯkeM1RS\ঢ়rם=A ')EAD 1 %C&1Yى`A2~"`V7} vMC;dfw+/+>WFb=RJZR luk#!/lZqsqdAjOW`ANXtB* |7.   5a66ԧ.!!j{TSuDoWR =doDt ȣ#v!UL୼]^DW7TjFǯC7&^#o=Ԟr+M p$3 zJѽA Բ3U^L)kKFR/xm|/)ƜVힻ:+>1mje-|^CRNTc6#C2[h`NW̐*[η.+7g ?B*f~jǴ|+TMReIMGFD;;P+Ϋz;("6[{^z%|Gqr>%?hZuMv5Xlj6"hĚGUUPU-O/N_?}MuB f!!3OﮔQUT>w OTo "KK <%8j˨ $T6ڋK;< B@/{tKlRBrL3;#53k Y!&p牫;BB f!!#RCɗU%u]f[Ᾱ$9 =@RNbKyXFՕ( DF󥺝K$1_j˃ vyܧq=MO@$t#KJJ5/( y>~."Yhaqed !d ħͪWm>HF};㾘ZLm|}ϞnĽ_^cힻ6W!3չRhqFgҬz➽<RԄxN#e"* sVb+Lf L9 BB0  .%d`RcL0OT1MV BJ @Ѝ$t= cՈ3DUJ!b{#X |'^AfT00p+*$U8Ԕ!|#Z%Tv뗻QOLm|!)_/xw+qꅗfccadu%J1դR/k]LIZ^ok͉r)e0I={+U>E%2VLx"ʓO(Ɣ3B 0Q)I*|(KfU†UA;*w5y9}aGlžck} ?+V >T871궰&! #t*|+X.%7bž= <{2,oα+{Z6'e :XX-^|E+}&y]S ֝]%X-5hUQn ^^|(Ue3+*re[RBxՕS2PAUeP(A0LNe|sР=9jMy )E09W7=W<82c+W /v*"I౯YWS*KXγ8O?}dTힻ{]Ao[ʨz1nm0*f_f7_o&_~ 7y:dmFf dv5=S~GdtMC-횦נq<Բ5蜫sr 1h31hP73*!_XťsVQ2wVfW`='/{T畷*(o[׎3;)A18PT(q~ '̶P _}/ZToX ""ʗP{^^x _c!;ZQN36Rrʗj?Oqd"j"v,a"Y…ݻ6S R9Sv1զg &%dms2>6O:7qnz#_X֗I!rq IDAT/3XH2D!غ^wa¶Ul6] HH??{!S-ʥS8cJGʗ ʩ N?>b8|C"?wO0\UOTS-ʞvZZfZykQ͇̿q;`J0I3% 1?WJ*m}j` T0NT`\U }/?0N$S휨 |*k-/'?wHJAlh+'53s2\)%*S*[TnƔpoYWJMj{JK}v`4Ku.?OS;TDYLrJ_#rEQH]`[J)qLihE\3vTΈ6҃?1{iOeLͲǜJ(Ɲ8r+de|*%#j5b m![1e?RAL)oc@XUfJ2nAfTh!ԭrb!)l:wxM1A+oZ౯STnGp7닎vZ"U ˎ>'"e,"UK/> -V UN7[TD_%ó+lJJ* *̺QnKLRʩ/TzT)ڏڿGi*" 6>Y㷾ۿCR b!!#*?J8Li K)U=U/*J΍M 6|;ZcodM4jGjKjsȅP>VOs^&Ǫ\nUC-_D.}zI>hsfs+/UT,0K,k㰅3[_|^+R^ՔwD>\aS=*1ffZ)WI!^~WwHHA 3$bs[pr))á*s* S)$êNr=X/žx6—DTq7q>U ="ZRKT3t**rFFF67vRek8r ȯӺ׫(;w)IrX WJ N 'rd^}LHV/U5ĔT*_XiI"'zX(˓rU=sXzRApBB*FT˞~oS1ȧ` ux@RWSR/Uj?^?(V.Pj}PV^_ZL+EfKG(_4{N)Z~LNVKK7ZGeKb ],a _9p=E- 8w<)腫*NIx}U̽7t/Řgf6b*)/R߀ojF!^~lI ;Vm?~GNAR1ZT©b|[#\Q A=sJ;)bBRsӍ+aeeNW!ʩWN룾k\>\{l9UVk6[#2@V3b?o f"\&60 )acal ˁ}4&͋آ^D<.Uy" 8w29UQ9L(T.\%yO0dJɀ mh/үJ"'VX0>JETp{VQ 7/l_㷽ۿMRA 4P`۲9g RaY0x<1xRnKQNTS.DS톗ʘhnxkz- ƑF[Jr#0ɀ ʆ*=W)_B >#1NT2Tڛ'܅w>qUĝ*z^5{YfJ8QB.gVGR@HJ ϕSYTR鱞WKqs[a>6 ,,WO߱W06eJA $bDI}1칹Rjs=ocNAlf6M/E9Qͭj$;7Ui҆ z-{om\J$rcc0@U }rGxHK#c8Y؇x[8J ȮC^Γtp>[1K&5yگ$Onsf}Bfs kIeR[;5B["y2yZm`e<3)/,~ۿ~RAC 4 t T;fSI}fMC}ir8  ]7K}{r&ɗ?y8$:!"K'ܪ'ڹ.H)uR2؄_fȏTmstH$.eGqsؗ{bʝ12Qe0%| p+rx8_ L|RGȗ iEt[0z§+t Ǹol{AD@B*F )w=j=\U*?VMq*" 6M/Ey-0fT[R~S}\-.x.DT*_@ fggk8/GJQpץΜ8i{prd7&_Ç|`EjlS291 J2tZ/\)-_ju"G葔ˡ1Dk"rqǷ(O b !#~^**\-WY칯U) WMIٛhd9_Dp?Q-Xjo0jޘj1m|[[.]f* ;㌃*_10pp9S۝XW{))1Bmn>&TʦdCq)A|+X ;]Ω.K)|L 9Ob*P-> sU5VLI/<غK5*V."E&=mi䙦r(WU 3  HHHy^u9=¡Ta)ED}|V|Gy}2Ռ't8_iUOLZ-͕/ccgJ81ơs5hC -g%TTPLp[BXg6la{϶m6lWRT+s䔦T&\Zƾ9q<)rI38 2TKONTv>M^ŔLp+.W)J`UB~Ye}f͠{*w4ўWt%N^(O b!!#7JAHVIJ* "5X̽~cw.ׯR7Jz=֛Yؘ8NՓM:tM04Atc^j(xUQSJ@9"ʲ-ed[!9@~Nv`UK-/#&g?H@u`"\%%%Pr-;vS,}$w|^T6>`Y%)ŊmLq6Gm󏗁cի/IJA 0$bDP]**,J&7;o WRM=~1XC}Gygp?oD8_jx71-й䓮un 0t4pj !CB@BIC J= f fkl %͂i0medY0]9%q2 0802SC^?FC=1TG Qn[_V>vrg$,ksU|~y"*~SU끔%X{~+==sWgue$ z QR,/WKr*\1˧p˞/jE =K|)QKHFmlkN5V"7`t*Ng`M]Ř#FB=kJcL ! i۲gY-aCB= jc94] @SUW1p:04d MG2aھ$\sǥ-Wd .[R˟˥b˞Y8qU @^[eU 9̥ ~~WyQUWYT}f\JIWMRsޗK)/ޡZnϫ#ܥ;V𵏽DR b@!!#n˞_VU9#_eyyco ~͗?;;XУ|2GFKt]FaNۦ5JI$ %<%OrdU*(*G Y֕rսm{ɡb\=CK$ hF0uz*#>qXH QM@ѶK \݃ط,_`UNaMnp N&c  #5%Bf V;ye}*;sP"*}̗*d_Z[}]Rx92}&(wpn2m_Ʈ'-AmHHň鰙x.ߘqT?[*Ce_Vԟ+L̩r>1U;UneS L8_nz|̛fTPTzT_vJyrꉨ _؋h[$  f |CƂ-{β/Pe]w+p΃R$".z/EyɰگJjq,m|wk3(R@FK4w6&ݏ6$jcҶ!6 07 07(Q̫+J|F2}e[ ʶRUT>8t0]Dz& =@OgJPГiqh15 `(Z,!bNԖCq= E?~^7J ޟK dZ(C9>o_ ߟ l N_nKZY)1}1HJJۄ],X,[G1*6VP̯,a6 Y,A p |*q>$wnN$QZ[J)@OeCbJOaH%8@c8JmAA2f+m~\, حګuTa o /Z\'FN]zޭrYh{8ʭ @*q*O9k둔bWfDP.|実߾g<^ǐ .@B*FtB͙#Y,X-ń gd )ٓJD9R*|)ʉ^;[Q,褘uT|)3(nʨVl.%i*B5X_*6Waar7dim.uH珹+xr ?U,m@na`&МJ)ͫ 12Dvzv+)1hdY7ؾ ly\{>ګcUo.g2<_;n(ϐ KBwvکb{0GN,9 Y/%%UFaXdX;>QDQ.\yoO`;'E1mۧ;K*I8QBX L+VFLVKUR*R}j)ʉ 桰2UEh1Ց6uГ|u;/VH˂B! k(.cc}UyՊ'6"YrQruvWUwqD$DD M]+lygg3.Ez=Z;ij<~#ٲf3Lg,ےah!" 4><"ʬʪǗ,Y~! E( p~–e?lPCcUU\U V3 GDbbq oPBʬYA1RvMtA`^LPQ`J/ h!ܟ0>Y<3pð]ˀi簋 ) K iL- Y**aEh("ZHheڋn!Ji!̏Să3_:X:XxG( xu\Pyp.w=vNXWzSnzmlpZ%TUKrKݭ?'YjWrXر8xo9uK'ÖH$ITzb{s\pNyrLY"{|+Hچ9K~~'jg>W/wl5->70Ico~VϩQ{o}(ְz2ʬBgas^%;'B|R=_9nz1ݟT%\ GpQP. A\t[L4<+ (%!N° L/ A$)TY.B"BPEr 7)6}f~)G]bS~)4/dy֓rީ"t1!D(G{Rn ߀"Tsք(kŁk{XcH$IT!|sCrn5߂[/,Ƣ2CI%Hv#-U/%{6'']p(S喲֍gq&+}jzZީGR/*$3'QX[E9=ςW~ީJ?_R¡U/T1-2#a>qIu''^MO__xWH$I/T!@TX[0."|[J/TebۮD"7}IOF1ʡQT:Mʉs]s38є0U-%гKu49TASRC,/̡ =fPErɦ]ŨR|J"ߊ1FP_(B7]ˊbRcjx;71PL1a Wc9kˣXY*pEee_ X`Y.VY^3t0D4'@){LDEă߭;>%&1ǃكU_ڢOCRz._ה}M[nLcXqz IDATB8Y\MA:ӷZruaЗ*Hlf~Cx~sssɓ'177C ?>102j`qK:y}})[1Ծ[*J<(,DJa,s墈&v>`0}q󠉔o]/# ӈ"u|YBf AUUbM ǬdCga%r?+sQλ}\y 5ۉ)l%<[Z4bCe{ >/ ˢ~]oo&VI9,&A R]~{oBD)*67& /hQsD"=G{}K ѡCNyG)=<<}:Ť'"[o}BTRQ/:O^Q3aS;T R0 : ڶzlcvdI %HZGFB(8LKo}c1n"1E=ORsdPL9\'*N|Ibnn333Rڀ8w`|qj#n7~)Ѿ\k.ؚ"o L ,{iuV/%4h"gv'=a '$ I k썵RX<>ˣ`jf#KUggbDt>U.RA~n<":jfҭD"HtHu(BB9n.>v[oxfuЗ*l)Ә#5ᶩT 333'O1T*T*p_cֿXA|?ػwN\K=Ws}!FU~V> :np|"k(:`3IM)bl'2Rp?83k#|\8(L(8Bb䝘.B-6u|Kd1i'JUSHԫ@}O庣\7<>{9<{{:Х.  {*!!v#leanO; i鐒H$".S\Y9f9þ[m;WX ؚ$~qGIӘK9%,V@C'61j埠p54R!Df),%>*≀-JqsE)ese>j TS x1L^@ +M_y|0WAH?sI9n(7k(DGW}oɓ'eԐ?s!عCaT/!Ph\bZZ>k+ȼ2*L"7p3Lm0'T=Z`J-b*Sle/̂nǔ%D)3yTRbxg閮)I K ! B\aLzQsf-7wQTm{PnR-?A4 QHf]N- W7.^!)D*R2Bs{J梾88}TtN@`,\]5J$o<[R)wyrknajc|Qo{%L J%B1DY B_[> LasP^ᛊ1dT(h;\!qK[|nv:hj*p )*w[6Uq!,1wA5B1!@(F{B>ѻ7Mu{P j><ۺ`κ"F JZ)q!ٮdyOD"i)Hui>\+Ko,mOce Q"|/6.tZK )'ξw} S Kͻ `fJbДr9칓8ȭ [jAj,"J Ij`KIYIUE \PsWx!P5 *8pkY6/9" Ay?!rRAQ"U[*]嫕` NڟPg=A Zt:)81.{=@ RU ʭ~t׉ovn0ˋ0 %ٸzJ?C_Rτj4iR/=_'5-L5/,~.FbOXjA+F).EwbkvDxRUWv@(9`>t'?m<MC#7T@>~?,l"{rbWu;UVDZ$J57K3 Jo8ѽ.󂶳7F&^=@ RU M X}׹V*}&d խvpb|0%0{ʊ #HLkLXHPX K1j~-x(L͕p9kLJ)r"J qFB S xQ,E !49뻢FH'(n]A/(ɫb+2y';^`{TfvU;2"ޔ.n#)D*R+ι7 !ʽ!SrQ^_DEOT~ryUM=Ya@On߰T/m:TS̍ʱ(bM9RVp9 S#@qW-Z b=9,p*>j(T=J3#y폡' RΗ>xj \6G <:o/׬ ֢+^M Q^2"0/]RD RU ] x_>K99* A]DuOTRX% *OQ SAΥ&Hw> SQ))FrLkԼw)gx /J1&\4n|N)[rB 7`IY&ӭ_l0}ފKJL--Pζ ~Q&|B-T+D('jEr.#)D*R݂souw){EYk7->WNZ$n:nvIH+R2;AM S K_S/Ũx՞{#,{H*b [#{A=ΫD)(*U`{`qN0]<7' N?k&5NկaGUFOOl8BWBe[JRA,HQEV-8w׷!F9^4>I} %HZ)3$a ܞ3{gB@)B)BAEOgdz7}zL9?Ex^i_XջdAF4z=pͿ^dh\bԮ ">+:& eTerUk0rk0r@ B"D%!GiL(뻤Ķ!v]E,گb_Tmʺ*U**TEqEQ(ukb}TU; !^iy3b߹uEcD"4!+8ǒ rꛎ~ŗO$ 'j]QHRnϙOKuΉ3ϞvFs!)o3/J$[k/|Wj5RV}j-ccJyл~\I뼍_Ԙ ubhdOZTN.f+ yBFvzfV>X9BBݘ'Z0 ˍ NA "J)nQOqIUK_Sn'E1/Dk +]:D"HA R=dòL0"F1˄e;֋I$[# [" N?'N zXC}gΣ\OzbPWb| SoDc|u+1V/bW>Fz<ml(PP*i^P*%zfzv V"%P0?Z80 n1C+ZQkW؝D}~Q5[r(_OxD8R.)Xrܙ?z%D; c&8˴(S,RE)dD=/ z(C/uQ_'R'N_v SM 8owK5',՟qTz%Fԏsm݌XI9t1X\R*(3YfE* yX,|V1V*2θĠ0Q.0 *X;'c7@BH@/U*n)RHEz(VDRDGdTmkߛ4W~yJZ8|G. ~[']/u-/szد,}eeTh1j2hrJrl- u<(Vʸفe0C"e_e=SDQ.) >)-9,̸Wb(MhnH觰{o=+*_#y33_XS-Э]RvH9D(V(i/DyNq&Km/ CJ"tHox=LaU唲lb r`{|uI9أy&333ߓO>b|Ǿ-;'JgT;Q_n_bdy3@'޶J" D i.]+` Yxbq]R??Dd -X31 J@8ׯ&ܠ_*(֧PgFD$vI;u!J KJNT H$@:g ^@h=։ԛ_STt, IOU4$`,Ũ?Gt|`;r ΍2K<|T/p D( ~~pЗUC6[¥Ku3P"_rtDXX,kG:yw#fD"qTq+]cc"Jyz<)^).DI)JI6>'j0<Û_s8ZzүHjfzbP.Hjp,js_UQ%a/_6vScј"TOxhpIiT̸{au~=P.cV!~Ƌ3|.zRUVBTMѻM)JI$IOTx"X,8b:sfYnٹrS[J R;_P,N b|ǏԱ|veTЌ=n3oeF”*\ KM S]vSid3GJ1jpH?2@|vh1 }QܪʎKX* 3@p)4 icJ%WfpZ!ƋxG}bTB?ʧPx߯5\;^;B(@ueZD"H.Լpfs/%ID<7^p^#ws]9y9dc1}0~3G}|ff0??y!J!^o'Âu s- }RtXq{/ b`(Yj>*5@4Y*,`Zb=˪4BQT@Q@Uj( ), SF Hi2y<H/b)1 IDATe T"B+^RqFWPҊ {H\Wv7RH#=͆,5H$"R}dD\2uΩJizRAeadbrЗ%=QCL~oiU~_4ڿ_7mbԑCrf`#H؍P2 P32t\e0(`K !ศmw6X֑-/p ($+1퐢'(/=QTQ(b߮G"HR#9鐲)-eٯD*[/e(%8=Q211٪0Tfj-k__z!F}=~awu4؎PG ZPlg̶WP.erf: V{0,,dprjŵH'=G 藪o|]RvlzxSԽ;}.D"*^Iډ_8oJ!'WM^* 8H2HZ$JСCH8y$1;;t:=t1:VIs^npκCm6|Q>#)hjft(/]X~+o##{3 =e!;E^(u`X8=ETM,%d =ٔY{51lV b|#;D[ȇAWw"{~7W,Xk۫Ȟ[i' UۈBxG Zױ=D*!g&q{^q>8)3e_$)SX.yt:G77777؁yxqGu Uv:t+c3YtcXvY'x(#v>`xLXr h# "f۳L0C7zf$fۣC%pLp.K8wn%g΁˿Q"P"R۵s 3qIyqE^;/@Q!帤^x\D"l~ 5'?ae{1j} fZ%}I9_jWΆד_+_]뿞G0t46GBR!.q. MÞyR Vn PP}| 熸_˗(MyphU\Re=<҃喳{r3Rxc|nN~s╳8 p+ѱfc|"¹ڋzRFjEaY1{1RQFa"{`1Xpŵsp?i!*E4P55 A GATD`q3_zr B0Ǒ͚(M*!F?jgFHc1}udR1\vI'w@9'5ppv 2'HZE R"{i[pbĄ*Rk+*V鉚[GK0qTN /Մ֋~)M !^<1alw&G1??/ ZZ\a%n %HZEF̿=^UL)eFu/wjЗ#٢Ȟ=+"dg}jc3jR1*ڱ$ڵ38uq,n8lvILgS׾Hm߉hj$ hؑs׳b{RA,S*~UssEJɵ!^~aȞz;wاni'+>Q_t"$d3"G oyG2n)^aJWܻHQJO>(>v}A QR'NNrǟF&JzcYgK%G;qcG./5$d2xٯca,LSPbe)W+1$&&F@UM̰9`pw6 p,E2C!$PmavMǵk:J% 雿x%$XMOpED*7Gl{rVkD"&wcG3{wLyf UǮS0HR>r2'"NC={"L{M 5a}؄[:w y]ZUq_ҘW^;=l]"T,G}y8R;MB "gQJu%a:;`u7oFp8˞0rݹ`.kz/u?UGN*@ucwa`'H$ )H o?w aɳ3AU^7<• r$#xD҈t:v5w峘}l"y]Qajseܓ6j\e[bё #F9 ''?H9w(܊#T)]J%(Z&wb$95Q59LQ؞Q˰JEoʂB.򺮌a4m7E/TD)΃#{u"YH!Q ՍQHE)=t\U/eiW(H$ )H -o{vrOUR^-LyzLvY(>G{TDIZ!L=?<(Ze6RT_J c|AeœjaH?(/9(c|}يQA JPDW.`qmRw"<2 T,tpb{:rfZGde+=b㒺kϞ~ޛӞ]UDcz^mD'PQR,+$d3!!WaY3W|˶@ ]GtB"i'J$/u/ޑ(zV6\Tc3fRLv߲~Q^{W_b9!T5px##Hv`lL,;LNb|J${KD30t;gwI, s(=.H#DQds_qKj$ I_ ܉y5?kUl-H$@$׿? J8c g2{c1 cg*ۨ(pM',.6L9=*QK',fggqQ4u/񿰻8LAA" R~޹ٖ?oXZV=#0Ϻuy߼Ǫ~{euWz&FyySk'OO}AgSp1JQaD"H$&"!" qx %uHoHr k( -N iU(, lQJ/ ('@YPڻn4o= ؖ<GYkĶGGq#Hgύ)\ݹd+طЪ~Yt]D"l 5Dxx߿(Sl) f2)'Ǥ %iH=1J Q^K8q033t:pcQȼSQZPi$L*q#,Xq(xν׷4Ve[ּ\7czGw]Qss<~= M.7]QA4D"1G i4pBU)TUcnE|S#'FQVUX*e L2a:iXE͑ &s]mcPտ F ۳O/nr~w$v؋kT%'D)k 5}Sb>c`&H$ )H «?!߂p N(UlqsqpED(@\Q@*PTU:G{TF$}cff333x'4~O|iWhiVUΠjQӡ,L5rOZ>Wkc 8gTo&59RIhZP+ލ/?8R} S_p6$ŹP(DbvB4:MSׯX̣\0 Ą(  @t;| cq5 JȱXE2(LA?OgL!X]6ρ3P(m WnYU\t;gGb:f$IGrPuPny,nDRCG-qc`WpL? ] %!{$_R~RRH75]7߃>g,cĖ~-spx{{~D"#,7p8se?/_u,//"[D>UW~X 1 (MeLKu1_k##ر#WrNTQ:nOT-N‰/"^> ؝pWjCw^ KNiE}RYK~}e%J$ɆGZi|p{P Nr#|V(Sh\7X%yafggC!NؗV"`C/qsaZo@84-x;"FyR!QnLNNX[[M,-D6 rb@4 Rؽݸa`45x" 5Qo[ "(&iʕ}y,[l_jݕ\pr;pB#Q!Gz''w{ֳU|b|~ƵƚF*!j_J/"]Qln&M\~kk(#a@ӀÈkX\]ƁmHmC8>"UМ9=!PMk(e#(T5;!/#t_ޏfڋU %,\/q}.,QEHuWTPy@TվQĭ-:˔H$ 1G+7B3(D ^MJ,و8<)FI7/la\f[O6c|uu0 8wj-XXʠbFNpb|yCP"fգRضm,bii.X[ˁ1UTUn5X$\D0:6H,j;wsf yﰶƱX]+FS֝ؿbRuex^-DJ#O}q=0ܵKWvFb7W)U>s6}DԐsQ|uE)Or~ZtX& %<%HirsXLR:ߦ-R/Q az]GT2P$` b0`|pl>З$(ɆK1On=Q[]AuBM\C .c|ퟫ1>M #5v6؈%歲xS134x| ,n\F&Sirs &&&sM״Lf3F0C(UP1_d}{Ν{y KKE\3g%$q;qk}cϣT(cx{鮝=X&w?Fl|(ﺵ[DyH$ 6q﬈RtĢb2aHMjSt},{$~ߢVhFi$Toڙ(0W}F̹l;R9FRn FyR6e,.")\\1JӀxؽ9wML. %F"5HlDN1 _|\DŻ; Q<q~}ccS"Pj`E wˀ4yũ:=QsBbU%'؞D"6 ?&S, rD)9aKzE dOdp_m hqPPZ_*h=CTr|GעzuFN٪R28( am-,⌊F d r x\HB ؜UEbxسg,KpF/^簸A*ݗA<;{PRO#s!L ѵ[bXd:xH$I{ȿA7(q|߃[ReBL,cÖt ca7'l+f +~kh*rO{¹Z+\g,1NO~|C2"88 d(3kW(@,0- Z(P8 хDtϳS/D(tڵ"qD .^3g!gHcEu& c 1pα=H"(w]DŽP\~$d#! ́!c8p0,UK.)0`2kÖtuGeOdS1s /=}c~&N ERToQ^sp(UT24!FE"@$BΪWb#@ G@UL C`y1_Db `(e5_sK7fT;/N 1y|{8c=||Fl" fѫ:H ^q(HHAjAD)[Y&rLKR~7eWr?Y1}+ػ~RƵk8][];{J1z]#? g0VB(^;)E+BQ[K_$ɆD R_R1>S/U-RBnC'J$/ٗ^鎨l7B߃h p4༭#ŨجR"nYMӄe;U됢mY @ܴo IDATB t,106 瞝P0r9 X^.ʕ%- 鮽/).wDzq=g&k{DՍ Q8/~1l$IHAjr`fg>1i(a(d^=Q-nDjRձϿjV W\Z(Xm*_ڳޙ9CUMT,"R:nCXG(=Et%SJl[HccXXؽ{/lQai)XXr"0v5AѼNoW(7,l=|ڊVVj*Hrg7D"s;Os.)f< Sμ7}Q[Y<ɦO_O_}+L@S{:u5q,u0b|.Q7}6Eor,KS W4hTm!P,9 *8ʗ{sVYlvJK8|Rqp b,Y`C4D"i)o1R cfV`e9أ)FI;}vCL=D/5q:v_*56x蛺rI-yC_c8G\nPT Z(EQ<­/Lr՘1> 2{ eܼG&4U]ﵶEZ0PWt^x+LAH%C:$k!)NNcȮ-KQL9]_<ɖn&SD7"l\߃d(6KTpi@u( -D gn38ý,XPZYكd:^Q,˙dXY)Pд5D"}vB9m;뜺D9P5=Q<9p]2| %l yc|ʮJQ8=Q}KD20ӝ։x/*0kh xbq"7jeZ0LRE9!wb.>_mM`=\{ 9L?yFF:tϐх&bz~:A#o##4hkkc%GHxD^aҪԐ RG$g3 ї!dʬ[fuUWʬviSqOq+;tW?Q'e1vא~_8.LkWQ;YQC S3u]@JC]Ia0ڴErcxP@4=hssbX*z#R"X>=clQ.+[}2 qRLHH뿎pڭqOijEHiBB Ku/v)#W~c 2S?_jRs]CP'}n6wqzf3xuٔʋFX|ģ=|6SBJ U9趫RB{FNCi@K]q7i(DU%FDlw&>EQK} #:y*s:; _,ŨIbb|CshϠѸ'|Ǐ.faɹ=c;e\L1'*bb!*?~G|_uxaXtHVAxa?~v H+I><,.Y5ax^2y>ǃ8h]\Z=|~Rbw/d>w= BH P"}5oxp@9~[X}=B&DwXQY_!=E*/U5ΥkE/%e}/\e T}^?ϟv D)fǹs˸R<C{yh&N&X$ )2_O_oc=`_ůw(Bꗿ)tul/QTƸQ_CQĜ}eE_bT2Rpmx}BIwz.艔n?CG AT.hԹssA%M< (qÇ>\xdOEBTf?{:tE{z'DSplgϞZ-/tHfB߲PH< Gs]}ۃ~obz2N(rmHC:R>RL tHYy2W'>>_jCԿԾ~FiyYλX_M/%.|uxn :y"*ZK^P8~YC(qnQTOuG Phoљ.(?^]O9|Ϗn&[Ckk6w=X}W|S)u3ȶE~Χpۼ:J}z @F?;VZTL2W_2n긧30'P"-AD0pp ci~v[M6|n^ZFwHy.(!w݅q_B>w WT Jmn`Ӈxge|G"B& R40a/ +?E? KI-S4N=< F=W_2޹s)߇=7P/vpim8N,HQXZrqdA4(/!Lt))@LcJSJw7M|] >o.V=BH NIF곿6o~M>\PV*fy~UDf\CQ,W՛z0o##J=:_?=5Ksm|2𦾺^0%;s\]9`=f^'O:#HRS3*gD,He8"W^lb|N): B+K2Lґf_ co淾=V"d\Ub0xLaМQyDt/zqajԂr \  Ũ} R>|f,'S sIZ8G-j)Qn?m'|(A*bQGQbɈED92(>;JA Ops3! RPYy2VpO)nll୿Q;O/q[ӑRaKr .(_/1G& zw/aц R!hⓈFXN;a!8.){{M5,t}e8\׏d,OOiAu'_x=QsGg\|dPna%A1i+P%U/x"d?%*e[1 gT_ϫjΡ(/R"ae]il='Љ*<υ ZcQ*zs!Do?vq)WqpRf#U;۫~JG?Ӧv;\Mm{<7*K1=(^ BXC*.b~ĉ5qqvIoY HN`u>?%=Q*HP"d6 E!twҀ1>~C ' r 9N/\dΨ7(ǹ }'u !X}?z$#{C(jhB,,eprIo`n `v*D]Q7rۇХ3J//(?ᖒ/tOx!dv E!Twԫu+voc t3_* wEaTthq@ S,6 (B)B!r(xK`n2 1&\ 1O>!Ri=߉kN˭j8vlqd#hx ol/)AiTl}4)iS1*R!)B!+h6@RV*9-$l t_~k-CqE>%KOjTy1 ( Q01V2e 4W*lwTx mB88z MJ@9bIvF PAt/`Cc{;&,euBd]b9! )B!_`NJSg_˼ 'XdNx^yY2p$UW<ρm[0 uT 1&:<ިyE`T~{l{ ;;V;TQa}H%|B㹁Kï/pkk=E}U &>Z-1K#pFPBz5?~JGB%|]u$?B9d(HB)+;} *eK 7;!z|@C@{ʨTZ\n{ܾ.*8~m4XV,Rct! Ũ0`# # 0gӰ(!Ũ@r1??[hrHūN QR';!FOTTpvNŎ(=G!?(HB)?RN^RMز 㥸#eJqQ?~&07”hJџT5><7pHɨ? I10 C 7!CYX]R3~AJ_AOx^쐊PߔBJ O[ip=łScB! )B!|x05R [EŽą(ӿTA(EGy cZpź@aSuB.<*H) 3 z.a_Q)R] H'/&g";dG~KQmu~ݐwۧ{Wًq!9 1h=ZN 4͝.U&-N&W>ë-$ƒz [אoctQ]B.6IO]7o{x^_Rĝ;;97PX=\C3tU8@0}XZyxL R=4Yq=Q?.Sq ?tȳ%rT E!o6^|/i0ʨc|=z [c|jK^*/qX]]ZscccO?o_ >ai<^sB6!T\"LBsħg-bZO|_RaqO:ܹFG*pi??Yq=!=KC!nP"7/QEDK/_vaO>677O?B%G-\~=oKy+Kq>p׃PJZa^J Q?Jc 4F0tǀmԩ8wnݻx`DQss ðPɳ81a޽m{h60 D:w4N8S'[y ! RBbŗ=%*#J2:UOQvm_/%\#0uʕBCzOa*W_*ʡ kq==gf{p]@&T% Ӵaj8sN:ðp]ܺ6vww.*U.O\. +OG?4yB9P"W?NqlQe{~!"EQ/fʕ+Qo͛7/5{]__=zZzf JY`~8_a*- /5}dawԳPRi|:Y񼣸r?iOV_[J@Xf*"?J`xzXm4w8k&'!Jߚ!,(HBOH(( Hp_`ok]xE4׋$wG'w{З_#><=e;]R=C4a ӂ0Lx_T*gPL~nXmcqz? B!AABH./D#S$c|@{GOHKqO,rb4z/5!yG'V=}kǍ)g_y>NRe@&Q| Ĭ O| E!(HBeㅗZ0aˍ~~"Kg^cԘ,I .Wb'[1! WKX2@20M{l>+:!~ E!$]CtR<%vewxG|)ITN lC ôI6}@KG%zB+37¸ ò zr6R(!StHB )B!d SKMr/W\-Xz g=duGC^Q,ӞdfELpW8jET'`ZIi0mÀ'}x]ܘ7Sg0KB!G RB2{HX`Z^ y:)X^puQiק&F6n5捭fw@Rl}(%Da&Bsú2CB RB2|YZWa&/&VG/+wR(8Qih{(O1BV}${a\OsGAD z"\aO&!9b!Uy0CB!G RB:~?GXIL0 Q91svٗ5~$R9n3Pd~uGed4FFBtO"tAJ[[ ӄDXh^yp/p ␢;B P" /ia V'}|ZJ$qάy{O Rۧ9aQiG#D7[HFrc?'i)QVeY0 i%<!A E!ioa_<S*S9n.="L;*TRJOTwXͻwTQP+I?pG;*!Habi s.>}l6㐪~g6?B!G RB\'wbHJ^]`_*OJ lK_"L;*5_*E'jdv ;R1> z#{@eCJV F`mUNݢztHB RBl||LPzl"(cd5l]JTz< [ʂREʞ(33*|@$z LC=Roz=e-zs:5B!G RBl~N vHU|#dK1df"ڗ.&HwT_05+15' ̻nu9us^ZUl6Ϗ(30 ҇xn_~o,ZcS/LsE!e E!(HB J;b|ᱹ1>uk)-603^8"EwTdU,Z.c /04G_BT ; /d\c!*A(QVu"g_ߛ~3^XhN!d0(HBRIMB0Ψ~uV##@Qb4)B!AABHF\/M(="Pef?T8~"Ψ2u`xEggLRKBp񖶺^N %:W׳@<߇纁%{I.kq{Wh{X4!d1=B!'7@f\fD8>Ņ?Jqy'~D"c?K/[q؄?~A1B&:!z-ZeN֝VY.s~)ARO?A*ogw0^2(]JȞiW L\ׁ|pq?Yn)RK,\#c! )B!%-Zڞ~)= wj|EuwT**2x^9ERv_1 uwΨT9`a\O/4! u`o}ESG}P~7wI)!:a]GE!d E!3աQYdǐܥ:R/!RpFq=jFF/Jƚ6ʸ }S_*ؗwm=z]Ÿ^~)h_jkk ׯ_'aEiƭ>] z*3eBa R0LxhBX>WO%=؄#WTiQZ]BdAABfQYt֕\/96#Ƨ\iak~}D/m^XBi xjAɋ|bOxy@dezT4 rG!ꎪT!:mxlkt^_o^;N 4F S! )Ba6FJSBO(YcN{GOwRtG_0cOh>Z-%4wL¸aq={/;z_'U-: Ja>WFm,Ό{B4(HB ^jy? !L:w9 Dveq{.Re+j}}=:=QsoO>a!HeH w8R{ޑ!R،#J QIT̅R4j(FBAABCrEb|!]lז?"U.~)b_y!.Ƹ'@!C__g5fM:>,kT\(|B! R2ґRB2RN!;PTz[ߥ9k:g={qׯGE{֢~~1>񮁸g S2="pGya(n ae ӂ'}-wtuan)5^m:~+M yO;BHP"c{/RS'+_ʎ //#TUf^2&7~)cT>&~!JZAD &`Q\ϰ,a\O s]P SKTJ!)B1;JLSTQRBPPң.AkT(Dyc3barڵH02/ƻzD )b W;J$ұpe=:Jk^}ʝu^TX5^GS;:):0E!2 E!3F:7[*1eޫA0Ude=qAP1:Ex^瞋_K ?04أ?F׋Q'X IDAT 2a|F!j_"ٕ #ƧwwWLMb}aHdtHB) R2cluRLnSj;-`RkԀsy" 5.RMlmm1{&<"|?b *mô+sayn <uYVT;/_2B!BABf4S} OKW^TuwbTWF5,*~Mx k)ד2 öaW2VA{lCSyA]xT-}YT q=B!eAABfxc*>RN@u~Rj?]; `y7I[._jc|oD( usK!tGy( rGAnہl;wێƄt,o~^+}Odbh:Ǹ! E!NfCTL[*@HY/<6P9uvKewT6tzL6WpK2sVjebvGف;RiUKV 2վBBx 'WT.Kf/m ! )B!~e-<\R)1'*Ɨzh|ˡ"^xQZnVxOΠ,7uG %e_Y6 :ax;JP^<A?_m1 RBʃ!]]OS y(Tv0aK>3e5,/u㎭9NH;JiΨ&*\]OX6 ˆU¶}v v vw;CKKWۧkj X/k&2!a{D- Uq]vA7]J"R& ~Jm;z~ DQ\r/ 01މk>"%̬Rzweð+Aa}uȃ.}+n]s<:^$?e&5-RcS{اE1B:!dF|᥎}=]Oc<798tTReSEi[R1tԤˍ;; { SZYO8=;*LۆUӂlg EPbzBʆ!/5lO=1`&f!j_~v_^8qiiqǎ7zFBOTTn\τaq=ӲzZ:]`po_*՞(!2 E!37BT74 R`BT_”iRRT70;BeKvE; I;0BPM굤;ʴ+Tv44'kl}c_B"[Tώ.;zlR;ArG3~#/ƝJO8g Ebu=ܪT>:vAYC<>o^cҞ/>>_g9*Hό{ )B~elbc|,~ҹg9KQ5,G_vEKR=M.?>~ׯG$nlW{>)ZQd}B1 f F;0M8frg;%eGYUTA^k!Q@ABforb{Xasldr~gXJ Q(VVVsu&|cя`Q=0gT oZwTPf^̥\ QZ͜{ SGbήX^xm1>5>ae_e\qO2aP"Y@BvF"LM|T*78c엪}`\o yGqŸICK 7775ߍ( _=u}vevtGvq`p[D=YR1 ;?z,.(HB E!SI05LFI ZK<5EQ:To޸[M 4\'6 wTxfQ]eWPp-b)s#2wܻ[h<nayS L !dDTg Hjq7Mq=D./u\_uBwT(>f F)wT() 0(î<>]ic qiZG1HZ]]ŕ+W(FM_juupMccckX߰ hAoۺ;JxTQ>̼R]h5p |hVqk"=VBt[ڗw?x^Ϡ"Y|!d?]B_O"Z)=Ɨbo1>`Q'hb|~7#ucAdZk'#uJam߃ÉzsC;rs_*=o!a]` >3)B& R2D'Dg SY1>~8ظL0U9sa3wTVOyGw wya~čB2(E +a(RE:n64AgdNҢX)=**yV/4ywK[X%4!)BbWD2 SJJH*-~0U{c_>((DM*W_{ԶD/n! èLme D@`yťKpZzT0UOnP"P")/$?O;rϕ b|#_/8k.]] .4ׅ(iC SYKc; ek(*^]O1ZTOX,VNhēWЉ&.kivu}jxw! E!SLDgDm~|1Qn:ߣY$$v3pG B[*xV+s0M V} W`qPqK Kg S"=.VI|c L!dpA)TH~Xf ;J2mq=D6K]l _w;02;4Ӏ0-*9H߇j}tGnRf6N]NczەSgP"2!dJ߯aTVTn2c|iꗚ^:Wt5r4R.Yx.@jmˊØ^RJx2(ӲL˂jY?>Qj_N/%hv/:?"?w!(HB"t SYRb|@mCtuۅQKMC\okk ׯ_#@gzȳzԾmv+tG;*ܝBw XiêT#wnu4.]z(?4a*gؓ(zB!L)`$ Vi3Rbz\/+7 kd6PR׮]͛7!+.bkFehQ=#/!CJAQaVTaY6v }x=sKpC]FT/U޼K.{X\e_nayS L!dJۗ :@RT2/)Lm(+CJ {H\rW~.VjsRA3)-ZzyzẉwXb.eWa(լtGez 8J.{tʸ@(HBȔ+;tTZ%/v uX~"q=xj )Da?}r+;Xt"YQvĨY +s0-;XYo^#tGԾ\  ƧNBw9dnaps  R2dGe/5_p@1>SXEQw3\fΞ(R9Uoڙq$Ξĵ1>%4;tGE+BaFRF莲*UTZ:{5x[o멟rZe-ẊGռ,3a 8qOc" E(HBԒfJ/:b|jڧsb|-UuX'ov$%llbc{7pK9-׊QpGc|CD>yV.>RF/UuV@(Fc xo{*2P")_G]J/KKM0U!!8E`a'wDkoʱ*,R^(DY w$d%\.Z@Qi^֘P\\*iկ;jzuo{1CABֽK:{yRNa*!RR/'JMC*x)կyG(l[0uѳXY8 l.6QF|eZ;ʮ10L4[Mo$QX;^ML7Umi<Ũyc xo3G!!!d DZUJѻ_JvR2R'?6ytFQ"EDG~v֖/b X{]l5;J"sӄlX`ejuU?s8M}É5j_9 KC; @c?8v~0HB(HB4"DWA*Kq|u4\tKreD1G`>K Ah;ت78+]VoF;Q*UT@c^Jw s BZUj8Ceótc|!!d :PI:?EO>i1Vx(R&kwtœxKUoOq[ʱ*VUyw Qamê̡Rs4h^ Qj8c{YcD4tTΰڣB(FGK}?-,{ 1CABoPԏ b|Hw [K):RqE_ ;rG'Gt!$KTbaiN+,2󭦃?xVϜq>'q=´`q! -4@6iUImERc{,q uZj)Zm{ 1CAB^QڑHT%1"WʊEٌ_[JW:G:.Q"կ#-htaj~mEb 0! ߼W7cq:cx*9N}8}mwWcVJuXp=/%j~E`y_qOR!d B⎐} )aWI\rtG&TyF/5LT1>׮]cO9WS< Se;ʄ0M޷N[SǰRRޖ^l j٬n΢p" aJ:;7.N+@w蘵~3$1iB)BB a$śT/^JK*@F/U{0U9s!#=QX W9RR Kռ\]o ~Y2P"dJ E!Sgd~) ]ʎeKe:~)%D /U$W_2/Ǟ(2.o]Dxcٱ F Àcw R 2:jul9#cXJm[M\{BXWgpG}t?lw=G)qn#@8V*7m-,nv>sB R2(D/iGu83t'UV|/_*)LeԱG_(OuYaO~B94~"GL%F ӌER]C2˲Ь`w^[nr+JmWly]t SQe:von^qEQ1GMaaH|J R(HBȔ!a9~ĈВ(_*k#/U?*'6? zynb.` ;JK!U,vuveչ9xNz?{o$I=GKfVfUWo5p"Is M2`:Hf2ht3<Ѹ $.""$FՒΠg0ꪬ*wu%=<"@fGfU{߿<ɀߥ=޾T n5ެ Ɨ7?/@T4ƗY5O_jub|_$Qop!%pPJApA,8!J+,?:FԲBJ'_>JO |!%pqXj\JZFMJ-̋K+@?UTrzRG}>.WC2'=QY_)?E#k}h"ʴBUNGQRʈ E 36ݭ IDAT>NA8}*}ZKcKE*>b*+g9 uר#,LG~7Z(Al"BJ?'T4%5˓S$RVΤf'V/NEԢʟ o}Ezsnp*Ynrq2`:JNG)#Yϴawhz4̙ZbjqTsEkYGKIl/ ?rBJ B)A FX1i8"·<_|NAr<_뿜3|1o7`*bB] 4  [͠ۦn1gzZLe_t ~ZUR{f/^c`/3&/y~p֧#0R x=k&zTNMTb"ioJ*+ғO'z1>_>&O6ۏ%'~5Y3Q=EU(bM"G`B*2^'.>G"|1E* JǙョ8 ue^.isG*?\K p!%pHڨx).)?cO~SKA/:2z?WDD w3wHY:DL(0LBѤP(b(;t*(]²̢Iݤj0uIߡ?Ji1^zZ*_j6}G#3Uf2=<Ξ_Jq'  C͘TtSywS2t݌P$׎MO5Xc<%^'<||Nz7ODF 熯7;.dLЊzN3^ѤP,R,vW~*Xv0e[AMyQ;m Z$ oo_K+3ι8Ղ8=Iw|ճ>A@&A.*, Ne9L/Ya>뗊''Rc b&w~_ ^i굫+yAX;;%h2ʲ"sU,R(MbDL&z *0m;YBNIyȤg&ȟ`:*ƗdnRG7X{:PfU]tDA8OA`@+?vR-Qt;z+ wLɨlo>+K]Ux~T^*oYO*2J8\(SyyLDQAy LLӢ (#,.c;%la4oAy<bѱÇfT6ߝ=~֞]lϽze騋K p!%p0 0JfvKK< 2Gė/5O*K.|y*~~T^)5;-_XRHtp 8OV0@dTӳV(W0-l'Q%05TmV.b)2Ke~Rijza(Q-=#R d7Tj涨_J_sJtJŝS Nzٞ{<]2ZvBJ7b?-;4g"E,,(h?YoB U(Q2MACyϱ*szj2koSONK]+;)?s?dE?qF_JgLH \0 5;>Q%/JNNc|qTrjsd:0NFb|SEѽUKE17.s#=o)1r<~Ek3MTѤhXe9xTmQv !V>z2i)'N/+\+ۼV"ƗJQRڂ b{fz!/vOz%SY!BJaLү9*E8iHw3kCȨE4'* X27 (m+mAyVU8Ui>g $\sŗyRt/q9V3#'֖jriԯ.yIb| ,¨^yHpAJh&z"15Weӵ~;p*/s]_*oʽRo!|Th#BJ :BH5ILsP]ׄ؉OSJGR7TǃT)Rb*% ĴTDfN/HdO8[L~L ]*zUeP`<1@Hi0Kؖh0<{FF+5g2爢LKER6ᄇۛ5ެ利y?dZ3^,LUqZd:J8)%<\1/Ax!%p 2*4xJ~tsJ s))?^ sT3J7oǽħd>ߋdTZPEb*_?p|uՋ8:؃R8eaX6Sx^˴'Ɠ C=aATPz^Agoq ><14o:jiԱ?~JZL}xR5mָVc|#فdhB Ky43>3ADH \ a` hV>%闚3<Lj=1"vK*g^N]H'[/}T^Eku/2=<>DR^HR CJ)ENQq_HIEyFSR~s25E5ˋe'R"_SDH ώ;Աm +`Qia:%njV0 '2(v8Dƃ~`SD+5 1g/^YNHzªhx/BB R T8!s92jSQSTNT6Hι(<:Η&;AT)y1\1NHd=9" V@RnvAv)썲(GFR, !q0+Q0c0j}Dbx!%<'|oOɭNP2ׅ'6ʲVרV8vdp4;h(DIO`~N 9b6ZԲq=AR ?o֑Q s|qɩTzt/Iz*/읶_j:]x_x~Բ{³ǟ[,SJ̽ ʉ(QQoP.(? &(0-R(lfi:إOP2q`%k{"ʊ|I4XL%a^{wvfPMS/ 2% 5"A.AdOLIJa~nRQ/L)#|HSSGKȋ ~)]oK?w~wP3sہdTmM*ne(z.~``2F+EѴqJ.T!=3wQ%;- 3-wnǗ5:XxD/N Z",__|TRfUYAR iyRJ%|Z+|?[*E_JԠ' gΓS~B'.N:~t,B/3HLkm(6.{Tju76U( =:^hD&Su+t>~q$yR9_<~K$ (A" BJLH )Ѿ|B@2-҉p2bǟH\i@~)t84 Ly|rciqT灯?zrE JYFYmcTu66Xo`avGۦ1L0bVp]RtZ4v{*XcAotT7"; 6Ʒ_WK%tXLG ?"A.AJRc"ɥ|*Z Ko١/|"10b9$;)u~yR)_*OPKY?"QS=-1ct {;zNU*UX&eh4iz c0 ,ˡzxn%VG?'s1uTԑE TTr+v~)wEj+t pA`F!=DS"闊v "}iI5_*!e:⩪L/~lT2?gnTTz-ߋ/%⛿oN@Q6> dT(J5]s+ΠOӤ Ja2(%&ͽ0QRxOMO1_jV̟:j:*Z#?'uߵͻlr7.=/zAAX"A.FxԐ+xj~MKeRf~oc*/5sKCO%Sc*!R%. b|3/%w?9dTOB}PF9Xr(ܼBZG^FIӦ7EӦ\v 1]3hc/Ek󧈂>*L,_nw|RRvY>FfbjZzDTzJ*=AU &T5h[LJ)5}N|R9_J6N;NQ-xBePY*Uk_bk)(vaEݢ3>IRjxe48xtc0bSD ><1e` g_*zuzeqZ;JA8OA`(0_Dt~KȗJjb*=%:;_TZP/ ]%?ތcfG RŠy޿q6!y1f# vSu/]fk7) :.ndQ(R*Q^BQ)ڍݣd*,7E48sqDU8y}OOEL%%Xf-zۗ\+Ëv@yA"A..{ DTj=T^%|^uBLE/LCEBxRy>fRtΤI竓H7g֏2 ˦p+56.mqU.mlbt} h[ #Qqx^W*5~XRk\9'_L ;M(R B 0`H/Qq'c|:Y'35F Kة-OtQEn /rBYRS;ꙡZ\²,CGCP2]v<~@]FxIY)S 6OL͈%˭.H):\C>;2VA BJū[*R(R)㵠=_*(#g|)i/39/5ޥ/Ta_DOMT.%ɩhtH Ӆ9F&\/R*{U76|E.]8 CZ v9l (ljT%Ĥp!08C*yX]tM}%PfjrFֵW?Oxz"\1NuAA8kDH \0~=G㇓EAPDzZf>%z:Yv)ߏ~DZ/Ry>"d)ANQɩ8E;*)2 zR{FDtOtv0*N(r%6_\*18l59yH,sTeh>f{;ັPFW7E'fc|ԉb|ڂFLeX[{ jzOҎT^ R  ^?*> P4M eP+,>'|6OQiK9STIʼGNiK&BJXw~W3.*OԐ+ہr+dT)Q*zre2yrAN(˦VU븎h=a6ݝGhQ9G@)< hZ*:l/yG28nԂiWS@[?QTVe%T:OT_,yX 'q_[~|A)A F0!eѵPNJ<2E"*V.Reٯ 2;%|Su~)GcFN~H_x?)˙~3M B7nW} +O{feSVX e TF=awVxQ/T/YvJfG :~u6)c*_*rZNAkH IDAT|}+'3P@ ;l0 VC"[1=NFM&dTRs+t޻mƭ&k4+=b*36׎/s/n?7@oǼ\|W̫{h! "BJDSC$T鹟e/'R}s|;JHM I|JKO RנR[N~&F!oke8uUvce:%%\~/ƾadhQU dیesv[@[?EN tfbcZ,K lCb0wg@Ĕ pAD=F>:E'둈p*))x;_uCeBE<FJHw目 V#KNFsR3SȊ|SX2rDd/Tji! o}ew>k|W~mzgPnw& U_\/QTFudTUԩUL5ؽ{Z es%ylLq1T2b*y?:qDUnjY+Or[q͂K g)A 2 (!~lZTz>G(EE8>;ZRn;bS TJXd%iS1g>뼓QsDt{O`G=FV *5666ں-t2IJF1ɨj8t޻ޝO톓QVy,#5D+AKQ1q)c=tT(W5<޴ R ™"BJfOv3j*fR*+H7/_z+=-Iv{yj z@UM;)r70 QRG⼞^T/S)AJF$'S ³@ ED}MOԽ)'qy闊R~Lߔ(_kcAqpQV&M]OJJԼ~O}&bDTn/Ow?O?;OZHFإ2j 67Fe`N1di{7dTp*YaZ>,/#R;x,Xz"RA6"A.(JBF%:7OF%Ĕ3戨Ұǥ!d:-U n~PER |?Gfo>yGʩD/1EF όw?NFe/, .Tkklllq:];2꠱O5iUjUBaa-voȨ5e'0+N4-uՐṭBL=~@~9QEd()Ai!BJ2R_\jR*!cKB2~aΠzw]YJON|c) RJK-JtKA^OqHNMʕgk>c\\Q?LF=, SR2RS:>Cv9hZc[6[^S) '޿ޭ7RQdMpOW@eITR@=~)w}e9H !%pAQƴ7IkHBER{QTӡʣZk.bիhψ ;R _*-qީSI*?+Z[;ߢYm~ȩ(j W.eSlJGxE˦q!±^ze T#vbÃ@FϓYg/r{19bJ][~:4E'%/OHOAX "A.(Ob*LET_9R*DfI> p49+)ґ<_) ?G^Ta$0é(2"jQϏ ϓ;A'Mx?+$uv,eYmW^`cc Jnm4m4h GC CX%*J)}?dܹɰȨ15OK< hZ*:lozn} _*{żIOA85"A.0R~K%c|i S>?#~ f*DyQSG1bٔRx—虂yPyq>R)͉-Fpӟg 孯,|/ ye˨z}1QV~NxaUZNv}gM|ʨuQ/i2멻+ꗚ[\Jb!ѺU5TZtӊ-"EbM;I pDH \TRaMTx&OLOn`XZ{SAi?,Z 2)<6J(#Q>JvGMŖ+ 5S>^/[jf:ʏ̓[ziR'QIčX6TkAoecVU]b}fe}`2yHa2S();0Wlٌ]e n3n5Q(!6(Yq+2DzST3sV /+2?)wi8'R i!%pAymޏW3RkIȩ"#- L|/zΨ=ߠpQ d?cFDBc\(Nzf]*UoP):%1N!^)MܒKRUq&Nwx L:-v 5yRIK ,23_JA8-"A.(Wa4J5 .R1>)q}9uΥWU^'&H˧tOR+vK |Y5_H3k*DJ"y6_Glѝ6r̠)TmzU Mo8n}Q >ZeYx%/QQ`i{o'?~ںLFDMt'?#_jx)ԼR]­_=rdTAN)A L aSRKi7q} @]Z`)wIvrt8B9STRAujuԟ#_;|BNM~)苲lT1Q%ףZS_۠^[Uhi6iv CX6[^S-W08`6;۟~xE]eFɦMeb|9>x;*dYG!R I!%p *y!7GL)~x ^cI{%1E'wd:4~)B _JLIzC*_X:%&v%ޡO8QxwK'·ޯ~>"O3s &%ܾDkq_2-Lۡzjk6p.au9l5i4iwڌF# pBF)c>]vbM:>;aqc|D9ʝ[}\8Q뗒 )A L]B0K\[? iƕ@0NL酚 PRD#|}eeS8e䊨)TSRdvKNIvK)dBhQ.U+5ʦdУ!Oopp]0S1W>-zl9R+#D\Vze9QE46v_fT$' "A.4W͜c W6~Q0SSa }aIh?|PTM,(Dp~T R >[$y~_?~?XM }QD S.Ujjk*h iu4[MZkL+rPdO?qoQc, ㅫyH>-zK;B1U3,[D/eqOAR 2;eT:'BȲ"*Q/xJNQL>((-SQQ_e㔣֩em4-&npBaNUS-{d6;7h=øDUki! KvhM!M锰˨$QOA!%py}(Ź1f3絿Tx)# "_~H__*HnyEy<fc|T*8-%\|NϛG, C3r%´`'^5n,z.CrZe T5}vwһ^:I/ˉ;=tV㛷i`:y-b^ɴ g R +h?̰'. &1LMKPRE(B$U2\0vH)|1t⵩sGDwJ~~|7(˦`ZXC٫2jrJvN|:@F-/`Jej^zk;0a-vo}=衮*%&uV&=~?~r51vJ.W3%/-1>A"A.8?6*4⋺˽)B,/Il ǠO*|}_*E*S>E*-8NQ1gGH\ ʷ*!7[_Y{ ˳x^\Gѽ.\2١rJx^jm-r+(Ӥ?u^pE&nɣ^Qj-IOc!;w>eM{;bgOficK"ƗwO-E+:|Tyg^ OR ۷oo} ae΋o0l;EdTkX|1wT@D1/~*җݡOSQ AN0EPQ^HT/ r{b˘ّ/-%\,~~qe" {_qzc`YLEeS,WQSֱ.Q?vhuZtF=:rPdi;wnиX&\E_*%21s/5i)rpk,;ٻpQK}/%p!%p}6ׯ_g{{z7OT;Uz{_ .蕚)JM0ʗّ/^^ #5ST~X&|0DH]V{_qPB$Dn7^˨eSmJ`'Zm R8Qt{=Z6v^x<`-XQ-y>f͠ۦKs_>x1pii_~*Nx}~瑨_*I F K~~FFeT,r %rX~ )_)TRJŻٝovLy<"wNuX(p(lo^0 ^}2ظИWt{/@EѲlR٣RQ #zft=Zn}ESwsdB{7苺){]/Je¸s|-/U۸*HꝖ('R R ׯAOԫo͵k_7?h*b* eV; 'R$Urj ؞֠|TFDEEF$UIPRJT0(D^@P(5͹| kך&*QSu+TujBHo4t G`6nɣU{Uʖd8(cKr989DpFbjQ/u b|y縂x_ި2?ߛ/HO!BJ9&QIXx5wBj#b|SfH/5'7[pFR٢(OMS(N[ѽ@i"N;>4@DE1  E(Q:};VvJ.aZS*yUJRtJLA8c e`6[UUlv6Ã]ied&TbjeRDN,'z~>rp+a'tTQ/ꗊb|"ADH S,)9%rWZv)hs;۟zxQ z' cSX}L_j|{1pFC0~g~Q s)Ad<8"*~㏷1O9 /)Gi헚{1KEOfb}9K l4g;ASb:*QE²,ƴlDO?}Q&E.p]ϫVjeU,{]2-ܒK <!o}QOwۨuK7]4s7oK.W[*xxfo%uљ*H )A焣zk1tJJ+) DUĴ*-r'11~d/(MJ ##.~)?8;¨TDgB9Ko|ΚeER9#aL2emcYN[p1>q ^F "za0tz]z±mGūR+W(6^'ٻ;=F/e%.\/xY IDAT䏝(w_mΞ@LpV,'cw'Q@ADH sٟ=/h*e"lYAr'闊c|)_*Hc{0NK1>Տ|߿^[~kx!$J0 2PD2*9r0Vp]\ko2v+mz}.~?P((%i)AR {D=QGjL@L%T3Rӌ:[$RhSMR =>Z WpWmZQJmAy4!uFʨmRs+x^׭P.&hW[ؾ[a˨DXFF#֘E)S*SƘLh{w?N 7hGgdqfhQ/Z's<~Ӵ&E+y:M=Ax!%p}ݕ$>)5(JvKH,H<'xqZL%H`/+_JRCOc{\BՂY5 fƄf$x(Aw i؎erًeV)8JZεkІA8;u LAD6^5Eϵl&>{ޝ?Qͭ'dQK,.ŇyJ1?r>I)b|9Qvk| .>ފl}>5&-?OMAA 9|[Nu͗ѭ@##oQT 2?bNHԜ~%Cɖ~雝 R抨hJs?+QFQ*2ee;XNP\n;A_UxU<@Hil`@ߧwa8Cōvѫ`{wn2E\7C$dQbj1NX3m9O!µZ}seQWF,>B>Q/j'_J"BJʞZ3'$QDT2 #psb|d2BbAuDT2ȨzZKݢ_BPhlo~ gU$QQtF2v(q*U*^5QˋHFM&>~OӢ3@Y4)9enZg)hMpݻEmCp W˨$ߝb*;A-rTxg ׏K@z6/%p!%pƬ'({O#eJOD%TAE 3&{Z=QG3(fx1W#zK c|ѱrceRK|ymל_v)N;ٓ9 /DL "AٞgϛǛW.uxC gJ>dT@M{iE1sTuδ$b~~BnPN)RHTX7ƫ%)FOTmàQv&zhQlR x^5Q5*F&tESQn(:TxȨ$rNɴу>]vfm:3n5޵/!N)μ_;iT3j={S_焨_*b^fTxDL <+- <QI|y?|mJk6IRY.@fc|y_* R>`D*`>=Z,ROKrlTkP*ie@FSQ.N٥RRQ㖽Ϭ t^nCc4SQ'cOzU?`-l}?.m6N>$RGr$O*E/Pg M2reu;~HonWxU>>5A )Ay:??ʯ}al0B)cTT,teēQ藊Fd_l/<K1>RHgB Oq"g[H=x^?,PQNFmRr=`1k/vcVk|mm8$gO&X\O" K: B@!E!]%ۉꄷ>^|%OzCJ*V|`Ie{ RJJHS!Kj_Tpyx/!#~J߉~_ceD GqU=:IONȑc8v8m|>zER&ʕ-Ty.VD5@f,x+XcwcZJIRR=u߁X5ɣb? g1s7j(Kz(>k|RrH;Qpܹ\(Çv'iqCW>,_BY ϣ #z_T)}أI\5 P^/7e_jJ4yql=b>6ȨJ:56>q)> )eRVwY&ʛFuPyuׅۊ(G"*QP>Ky'5R=:6:n6DdS;nKԟ㋬BHPHB!NT';w!n;Q{Чii+|~þTp)&8qhG5--TX ^W+3ޜjWKA=i;>IO{`r*Q#S9zGQLO`|| Mlnm`kk2\uEOh)?NRx(ݓ<:D/}D>`cl5=p*^nԠr]KxI]! )B9Y?> JO=wqsVa"bR ǒQᾔ~xtHËн6ڗҩ*@>'uT/Rv^<Õٳr(z8~ (@btr33!uGfA(;;;\6PUYD핆jQ1 {P?d!/glLO̴wH}bEٗe8ܗ"CB!E!NI'i=I@@%(zѾBAVإȥKN\ ; R-RԆRz哟TE Ξź'O1NN9zǏcp\MK#VZFm]Pwu~}"EBǞBL-,R◴:[}QCq_B!Du‡b[QQr51 dPT)S-/Eb &_6KT/N^{˟fNK{' Щg/~4p6`l rtSZF?q 'Ov;ީ`{{ۯRBͩut*ʫTABU~PҿQABJ8~/VJmZ*I5ݤRKV"(!d?(!dA؉=?}`?*HI)}ޮ)Dޟ Fϕ)]|R{$5LO"COK{' RQG^7>96#8qv RZ(WFeʶحհS݆8=-$.T4NDiz$=SBK0 }^ǧ[o?$Mݨay_ Ncu\*yȃ !d"&u'>V $/`[ D>PT(1%RRqEi?·ݙվTp2_HPH,DVIEKWLNAM`Iv,o\)\)RقSuv|UDz xCՃۃtU:k@mHߨj|@~ǧa;Q2Ĺ(K꺖Rӧq}^UvJ!$sPHBH@7;Qy>!IIYq;O>X$D0r;OEpk {T$/S_^w|;^NoX6ׁ 'q)>3g8[تl\B?Q~ϫ~ B $_r&A@FU^T2SA2gM8})cS(}6"{÷W%!Ġ" =ô `F$dpI |ۥWy_*Qb*9GLP+|]/~;j?L(X v:;~' %nz[-lU6Qف {z \xu-$`L& Uw|jxAyM"*xߕ ݊W 9ɔ -wE,KMM.{=sO?-q^(k|@!Ejq'>w曑 ~T#e6=$>ۗDzA PRd ^,)XIRBA6K5bRi_ M'5҇;ڗ(899Wʉ#zޞ(@oFUwP83;f=fGF(omuj'RNcmQs'Cڋ䌐@fb}ܗJƇKVc }'#ÇMM R!d蠐" Nyw❳g!L-/MA*h$U٦&ո/(Iߖ`_ @ oF}B69QQ7þ}[qoN>u8;;;U!~sUw\ʭ=.GRX,-̯K#9_5{kۗڣƧǶeczlkGy_/E&(!wϟ֯߂v'ZNd<N1Ve_AJ5 p[*NCu @iSIu`>,ZNۍ5oz8sxxW]ބ[^UvB!@ :PNīǒP^> e >,.*l}Id@#7R삍d(̾[Z!dt;Q?/(h1kwN )n~%;dBD '(aLdz/\M;pwWwjU*T(I[x $B贓wSc5,H~WRrj|@T.B2lDf~/E(!w=w߁'^DLjILX*aܼ=B4ִ/eN T "Xp[ _*x,(SSɾo^Csvdי2lʛJ%GV?{lo-oߩ߮@mWjHF}"C b1w:j .f0Mؗ:@ddt{;|?# A* *TGR |{ԧ~c?&blmڮ`al\}{mmڄRu JÒB&'Eq`z[$Ob*R:Sm(20lnJ|ܗ" >R .fggqt/hx,Ͻտ Ő ِjE ݗD͆|JxOH!) xOۗ$nlm%= IDAT???ǟ TD(ԔREPk1o#%uI}Aj*IdۗR0E>t bI8mϛsrj*Q!N uND2]&P^T(Y`"Y`-V%aN {~n{1ULN',ߗ2oܗ" R\Qp9>??_R t-NIȧhw"hJE$UX2ۗBT_{ͧOZTHNTR'G:mvy!kSWLPFRAB;?sv_s.GB ?H#%2)T9]a{JR(eKI%d/JP@ON/ej|8R?$j{iD%)^){ Ң"C!!$7bii wgY|+C̠d!%|9'p D TS0)+{f_QJ})TdîZݓͷ5Nԕfr,/ey9%(Ȱs횅 &/E#RÝ}>s:ad<7L )/!1|",#Vl7H'TL*LD5但DXSOP!co=sO'CҬ]C)uoY{_Gc<_|_߷" )BHY\\NTF~)" &HRA"&'VX J'H:)iN c +'Ĕq%u m)HAV|gZFPк JFjЙ7>P IJ$&}w[Z.%/VĄHBSB!$p'*G?? |?I#Rc}/>JgRfGQ*ʊ9e)_ʦTjؓBkrJ 嫦s]3ɟ~NZ+wIfpV(u*.RQ?}2OR2ʿo]p"~/!ل;B2ENy7܍ _k1O|}_1$;1/L:Ix$b'#2Y6H))!U |*hkGdk QSGHa4TRb*) *HOe_J*-s2"szիRA!E܉/?YW!Bd6T0#kv2ռx**=NJGiBa%ei)%Z>q UN~֧4V餢7bʤ$>v=)"p_(!߉b=/|c_P n"C))=P2ѾTJIQ0JQ)%~f*<}O'e"6|Zԉą|c:;|{ԧ~'oʝw7T ʛ 3.Ƭ"RCEKB !$55X|cϵR0#|(%b)%T {ZP*|M 'K=مhܼ#%brJ(-B{<%D{>'G^ :%1.z:S{}~qP:QO(-?":RQ2?{7)a:ի5>BHPHBy\~A/:9NA@*#! *PI'E Ry ITSJf<&1%Ė޶RB5Vo6W9>~:n%,֧`cH4Jb?*̋)MgTZi^ʨ7Ծ~R!$-(!}YD;w"jAT3KdOS`JK@0ITCm)a%}DUR&q\I?/_, 1z^ridTfk|#T,M%T|y,=~"_XKRJI=8{8{vEˆmp=cz!LCe;*QF-X# )BHbGv)e{{h7e0,'#D z" S":yR*Iow"lYRRXo^P=u,SiyNA}i{'=2nm_5XZZ^$a ?^0/Un_ʏNS"R>9//$Dms%IeV~ӾT(`䔾鑑܊V, Ê^K%Qs:aR@&(׮YI|=U})BH"PHB wAYxxÿ ;/%})4ćXOPyn Qa_oNR5TZO|2HMk=#Xv Ãҫ}S`U%,5>(!IB!E9܉"e w ? !-|!1e<40$|?v[lTphڋMIKR6P^ K)L+%eH:-e)5H^1h5^EQ#k|ܗ" )BȁNI}7C)ZfARJ|I*%uZAJ)E>iY'EHXM=y yus)9ؗi識(]p})BHw BHGp'}7|3 (gi5>- > )#N3ɜHdCO)aZϪmJ*^5> {bjk|$RtT/N>;zۗ%n|& B^)2p'}O~Q~Ԕ>O!|k{m6)n{Ks R-)c-ˎxg?#ǫOI5ڻ/^urR)S\eH8]AG{Qp$&[={|2\|wD_he̾K/ٸxqׯ69|Ƈ{Ä!dWX#kmLKit:JJ&;#8no@V)T/QHTuJƥgWy?"RF„T(n/ʼnĿR&!!瑬~P>eukt/4JNT|_*#%㟧SW''z.Ʊ^3ߣi׾aRqr_s_@di_=2k2\ߋι/uxS=)z}h 1HEr RcRqNv@5>&?R 9瑼?ʮ5HHE C9edR\P%Tm*{ߩ{x^K K/7mQPHuO;!eSRVR(HX|y/(1/_ Tk[ӵ= BA 3p.n3JAI=TP #d.b`I}^x^xJ>mO¸ q{ꞡz_N딺_A;}NIi_fe!ׯ/ k|ځ!B;QdY^qe`]r2/$0/Ep[R*HF >P‡"xS"ORRʗ 2vpU2E#H) nO;:V<%%NOuL2w6-g/_ºoܯQu/ߗm.^ŋ:sfm!$_PHsEG}װǀgX>\lG{w/oB!R@1EH"$Gp' * IC7GϽ6bJE )4$ RD>!Jo[~m (KRs(_B ЧƄ )BrydWB^Qx@ތSߛ7 "ʓg䔔 5>!v ߽;155~ֽ@1Ez T[HN(Rd(2hZŋT-j?Ӷ -պ/Ւ 01e>VnRp)Ko/꠰GzT! ̈́d )B2 #dPHB9~WRi)#%ZGuZnAt"Cʏ^ K/p*]Du I ISH Ԅd )Bzħ?9/#0?}E:P=ڋy}e/NR@K%%2/F=H 񑤠,)"k|d )Bz>p3(Km]ă_=װGN HwPyR Rͩ $J@ v^u~R)xDTgPs?wx$TdIHRoX*O{yS5` Hr B!=YRKM(IO~3m1::;vv&pmGq`=kx':P w]E}KQq9}w^k/%#9eِ)<X)_4]'r_BR2*Y#B{* ܗ"$[PHkO?1v8rD˨SmloW]ٳkXcG RUS6hVZK-EK@!=YRK (Io~[FGP,03s'Oɓczz`{J vv*x衟?G04>$0x"gADSbINY" c3i<T %/+( ^'p_tTEHo%$ PH%ZF6FG122Gԩ33(F]FRe:}o~qwtLӾTTS (LPJԽ8k[CL `/+"* ɓ24(Rt7-|Cq>}'N \ ޶PUy|COۅjaDTopk|@T\Nb^SH#ZF}SwᮻA4[^*2\mIE)eR TH ju?gy8&M"{`|BEZčO5nK)*0:2U2NL-{]~Gk;}㖍q+Ԝ!難fM<%`277χbjee#(9G);vssoę3p^}ell|ey]H)>uSCVM!"4^"jkP)9~W2ŇQAO)n juNf#Q,(lTۨ8U4XTVi71ROjktXԩ~@}* D*[ubbĔRKKKܗ"PHr@Ο-<̳8yvoѣ'[^CRF^y[u].ժp]SC!Nbi("0,,TP B]b\ۭ`ҽ#c 6*`|1իT{u,nRԸU-QˋSAô//BB!Ǘq,btt 7n[nqjr]^wTV oӟȀXRDSfub 0Lbj{uMϔ2i)j1>`Z*x}?U DBv9Yv/Eh IDATcQFLܹsLK%5'C>{~loWp˨TPQC858N-Q^V_~')?+2H$2p'*yyyx42x)\`g4K>O7]sBPP~i_F&`oy}ԼVWW%Rt?9ٟ}o{97^@@E{PZ [8p]ERz\Jwx׻މO|bBzCODyśy~׮bJ(J:EvF @RbDIZL%|xQVvt^PL R3 B`RSϟOz#R÷mKVƍQqjUTۨVw:}J)H)O|B]Ļ@O  LEoV'Y-P^s ڎ?O+-dFLVEYȼ2 z5B{IHq!B=xoS]?~ ǎvvQjuZ-P>>BJIDzJDSQ<Ӕ&5 %LDJpz ȧq{o_ֽ)31{OڗAzT toyy9Sܗ"3(Ǐ&*MxwBJ#|?Bv'8-{KMJ*σ[1ex1? C5B{UH/E"Dž qqj8N"_\D^><69<BJ)zule_ R3Bߗbݡ"qwC)d/Y-ϐzkvL(>nhڗ25>;R*N(:\;FLťx?/z G{ jR 8#6=Q@~G˷\0 `Y$0IsgBER$iHO5>[6&E<5C?/o(Bk|4B!E2E `<#=!/"*2u8"~$dUn;&m2NӾTPX)ª0z^:p_*PHup_V(H))e"n@" @ZQEBBX*BGPJܗRC!?ܗ"$b8d$~C Y(I&:Z `+xQUP( J*Q:5.X*B9pYo#|K4T?L2HS'/Ei$ZYY"C Rd2EHD|*NEY" *h%m Vт%ëz,C7=yENTa/0!=LH KaB Q$UDu+ʌOAt*B*Zl -lz 3s7#3RCET.RC!u85Y?> "OPHaqq7 $SUD-FAEOHQy:%NE)a2Q>PRq1S}Z}%ؗߊɴ|_6 6(!]D.`:UBS**8Ad=a@D2*AF-a4o]8@5XPLe S !$H*" ^& zEQB HȨIQa. RQ F)(Kxp=HWP,ӾQ k|ـB{(Rd"HMDq/ %FE %u2hAt=ό|BTdT FQp5\rr6]aO}%T/9894dZ*E(B*y/E )177GOr5<XYIa({QA7 - ddA2JT@ 6Fd~oK:r 7S|ő⯠(MJHT/9 )_zPHuT})2(PHԉj7U,--y^\!mIUD5V*zdTTB8Qz3d.Tjp58[5UlX( ~ ł]"'*(BG )*FFv".\~̿) ba( 2jz|^,[Bu: P‡/ CvJPF`) :r r VU'xe84}&5ƭ_L2H^p_PHuT<3/ /FF&L o¤פecE& #FnE+z !:%l %OS‡eb[Qm je'&*QG_@2*)R=/"u [/E #<er ) a2j7VVV(H&H]DQHh!4X**艢NF  ~ Fc 2T-85%nlPiTx_.1 ES'/Ei`aa X\\ VVV(H"`dRo`OY @GU Iw ymx:5hD!HE=ap/*JFG&0ZemU=T+pʵdE[vFpw?|A1[*3pi_ 9k&Op_}GrIԜxڏ:%IN!o2EUǠKd%! "؊+ Iz~ 8FK)uF nEK'RY2ʁԵOgc(/UX#=aMW/E /E2;ZQBu=P3"% T, S,ˊdTi#(FmTe9IoӁ*.p\' q1e{Q}IKX7Y#p_ )w·8QHL=ȯ*AWBtH)!l QE" .(F0:2((ʭt"jR|fTTbˀ{7 oaj 'q 7Hjk|SIF1suRA*x܏"Iz? tEo :$z(%}@FQB ؅"JFJcHi'Q-WZ^ ZFշ]8TP [EqP˩%GC (bbY#BdS3)~I yQ[ЛQǡeHFYB )Sѳ(iRQ)- %m}8FcP5jy5#6Q3zz6h9ejx'rgR.Bvy.QLBBfggq/ 9R$GIyɨ2{Q2* +HFu2J 0<#BQK(J(G1625zG7mP[tԁo$uVy?}I/|5KBYXXB(.\})*R$'S-5'`nnX]] 㠆Y;w62d_,蜗lFe QAbJI(h% (V Pp65uY# &oǻg7}9 `LΟ?B!E2CHDv05<pቴ/cf/KFmof3*.,z]dHQȨB ^n:p7]o9po9P)`,J!s.aM=8}9 `i|.\i$sss ҩ膗g{+ʐ7mF(g$>I*,zvUmZst)!$oɛxJ>!$daasssZYYs A!EReyy9LBJ|dTBJW98Fe!v-PD%-D!LGV jG˨zمᢾV[u*'I!$ bb~9IEʕ+{ty'%>Y`36<]1'NFيRR !`,w<2BKx޺2-E)ZZZb@(2KR#jf`K*0~ZF aUU} ;B2ٗbYp"􍁐Q5b"(*"Q󸬊ϋɨVB!aj|})`Ν;Ӿ,0R( UWQ-.NLp7ʜnԎïx}(B!u5>BHR.\A!E9ߋ2TT=%BJԎ6!#/Ei &!=a Nҋ'! t!sXzMC@$ GRk>0C!d8!/ej|KKK&!3q6dCt &FPzU>TUD=B!u k&QBtoaaXYY 籰"$( C3Q(ސ2ʤԆN! =i_!$#ʞSV!12i_xษꅻQveŒQQ; Ȩ?B!-kfk|o+K d05sC!EI(۶:U^PQE4ʦx:Д2?R]+sB!Ke4>ǯa:*nM>2tp_*_G隼(p]Oې&eT z&eQ>PпǶjLGB6Ot/})ǯoUNxw5>sO*CȰ}|!+$Ï+ t/՜DU=% *-_-B!$ɛxm=]lQ6;W}BHΝ;YƗ1(!fa)|Gَ4boNٻHL߉Kx'&$ۭ2Zv[0.nc{wg=yavi`y]^,i^۶ֽtb5d{QIE]JU8p0NFF&3& rU zDD#:1}Q>ugK5[n}XRD49|ôc4Vd50* N|$Pf (̞^ʕ+x/+_*e o/ Vd2s]dK[Fk|'Q"s@>FDk| vy]{,8'ʐׯ?+50"x啟}U=@9Q(xPQU ԡ&:^'2qu({b ED=s-QY>s@tgtGɺ@c@L5=QQ6_*] 'Fz%bo.@HPSQG*{StOԞhxSRD~tW":TQ@{ucp7Z giA> Ah-3u/^f#`hRgE^~b EDMMo]!TeNG%ϸgLGXdNDDS]oQn~)GG\2' l0*gQ(=2&Q QDDDyL IDATcr_GaQ_ׯ7o7|/"_)"j3Uaੀ (lz( <ɨ:hοΒKDru\r${u4Q _ !TДu e5 ""1ڝ;s"#~` ED-^~gix-z&vF=}ڧu=""1cQ_j88~7?L0+oeyfZ;FXX }D4IR#NHi rVfCH:JTXQ>T"""Jɝ!ѐ\~5>0""Ϧ/7u(QISPzQZkk{DSu_Go|W^(@A6z:t2'(娉NIMx+~HM;)oQI ):yv&T(EDDDb~:~buuo&^y0"RSF;cN( a/؉({ؙ{7 k|f) /O᚞2u~ͳtyaKDDD=K@h MN%QnR,3'""RDCS)Ly( ,9H^Ӓ¨xy"""J)"V F~T5~ ue {h1""Sws*̓$@*8%EDӈє`o{P yIQN!h` h1"څj_o>B󤾨^,4'""(RD4 фco ȜD⡔CMHQ&}DDc@hmll7 `1:5HIQFoKhD4occ nQiN6Pjϙ ׸NPT(DDDٴz[,-z2FBDфY_[nc{/}8)څJgV̋H&=2nPR + `w: FED4:hBlll[n|DiWPQ&~}ϮGDD}|kKs'clD967N/e6T5_q4muNRDDDmwڮ~]h0"ʱ-A-Myo/N'W@hҺ^= :@(8sz_>"PC#Nn `kpDY>U=iD{xv=""|Hi:5-ܸq>")DqUPg+(AnF.Ϯ0)2vМDy]RnR/2"ʟۋ('z⸪ 5U U zҸ6 @(?zGK)2Q%D%! PaT'zy2'̏;7~9%uZꝾ)__mOk}8DtF4ٺDqUo0JOGa,c;{&m/yNHM]k|PQlllamfǞ8݅ fFY˄J T^h*~ ~/q D4~eH/=QI`*D[p '!;M<%]/퉈^㛴~FzRD2mܸ[Wi{P:^a˹V} DDDk>ԇR?ya&}(nȈ_ R{z]ϋtyDaTk %H(, 5_>S^[MODD#d[Tcwzmg9ϭ[vRD)gC) ]y7C "aK5>vwk}Djϗuh^x&F\#:QD%@j;|;De!2ÜREp :]D4Tw]콜aYՋa%5sƍ銊֙CkQU=!+|9hM0>6O"""|>dz?/玎۫4"^[[9E4&5=Q\ϋRs:*xf=ܬ^K I* z^'|޼j;/E4RD=ͱQϬ\hRS4}rZlN=R񈈈HKZ9ʞ^{RDa)d T2xwusJR愔Dy:(s"""ʯ*`i)JƲ5,.|쟗RDa EOD8 M@ 0ά2\>yh2C)͡G)"""]+0 ݱn/ _k:O'\#JFOT鞎]]T|f0BKu8ޣ%a=zIk{bA} @ϣ/Et:NH^3q:j;|$T/z@P·ZVzI)""<4P9%eҿ[p)LQZگ}De溞2sl{f*ӛ[pQ-ֵ#e)""""iuIřk| "\٣F3B%=tjG& })o/M%R@k~_/CiLqHa ESkcc+=QI8>THЩܼ R&bB3%RIy؜hJdy[/EVNS(K=Q-})ڇJQ*H.3W>Q:昏Pc%R] Z3M hlo_ꝴ#h1$,37'+ MGyP 1p`~\?6ԔT Q?Fr1""dP;1^{մhGS!=QI;=DgԋU?u:JzGgusnR苀"""l >ɓכ[\㣩@&Z{:B%)C(H ΁TUӱXjNmD=%2/8(]yz~66B:Yqe&RzQvzfNGU11Q0 mi Z't=͇ *@5>K$M۸q#]QItH%8j<_Hͅov9%_3C&([82y|n}(D#@&z^\GŜJ.4o@ P M-M,hk\ܼ.)-&"""˹ Kb E(@GRsMGzPR)Kڃ*@Ȑ#/EfRh 'RP)K|]Sy|:J5 gxcZ=PE8(l>Eoh GKѤR{(ɇP I?J.z̽::f#[j}u/KJG`bNBHDD{|h,Gy@recc+=QI8kyf$OGRM2 NY*tsJ*'_݋Vׁ/k{qzW(&m=/nR^P銞:-2; %fj(eV|og\0t ,@}눈(=%}çW )ʼ_͛Wjs(Y]/i: PIK(t)W*PP (\D6x MI~ޭ/Ey=ʬu5~:at eARIQH>^hNw]2 `Y]"\٣MKOT'\;:a[?#31fowDDDi}5> R-ݜN8!8|?^u b& J9h%M'R @DDDok3ttP6pejZ{:Wf";[3N>t փ=LF,bG@6S{z;2>Ǯp8/hqBR/Ei46qtvEQ'z\F0 GFQ=Ӂg`j)>%Մ*=דRJkz]'S$Mn/v3C)@FNDMz^ܴ = 4qO gMJ,bFVp)&{@bս"/Ѩq:*UVh~)7p=·nQ0LQT*GFֲYPѷʃ6Zӥ+h_+br&ɈQQw8Ѩ1cNH@BtOIgq Gk@  뱅Gkwz=O@)ѷ /hHn{VW}/Eą *DQoP )t^Z>o?iQIOI>y=K*o/hp (t05>R4[ (H+{Ik{@Jc|'OP(%+y pEmioR vۄLe2{smKqe΄ya")wgE֕=@RO>hq:*38APhHָGgN! @P ̹@]"8 Zt(@3'4tDDDd`){{KX]M(R4,\٣qMQcyҚ]Rso3Jʻ$"sYW h]}R[{`"ꓲEM*e 7~):+R3Dh2![DTVb-jBMIMiK`vtC y1;BpJKDDDD't?\٣S'L'۸q]Q3yt6tp} 呄.=k*X]QOhOR<кAIDDDq&Ncxʹr%=Q\>kzx>ceG骘Z͏'K .Zp*,'J5Ѿhfo3t)^/E j hEm'IR=M/'ʤMIRyvņDt(JO}R!""h _a`O &tU?c6<dS¯BDuTہo{""": (r엢$|mE)0 -t[j)@C }>)@\l퓲Ivx]9)+!""ʩ~i4NxKQ)ƞt4NDP@sǧy >PV^QX,rI&=3L%R^x BDDd;>44x/Kƕ)<Ρb3<5!U]{# rV|ٕ9{52&^^)_,m%""2q](k|ӋԔY[jeIghIP0*>K;% QmM`ĎL3H_8?B9 @A[ ^:P4'DDD_!:^ctŔy ([:]LBuOP)h.6PX,0[e[!T-Ëg Pm=/LS\. &{(dmt{GfPRCh2r<3`VB@XJ4M~Jz}ÏHBB RjR /~DDD^cT1ʩۜ7zFuo ƽk":^|/i=u?8s^v=~)erPuJSV:w4GDD4I8E46엚 \0&G^~m=vbUmBiV"V\X!¯9 :5t7=&""$rr#eTNlllam&(E'MDo딣ϿTbr֎̙OИk`E̟_BTB)`* dSBx" p h ߵ!>t`T>qe/E8|_ %5b뷝J dPHZder+Xxj eGU _u$W='li+^UfPGcڈzD~|Tƍ7FN~ϴ)]SoRp?*LꞄm4fX +(²hRJwJUË2&NVĢs""/ XRe_o bOMX(O(q} y޻}RB+T"PaK_ IDATE,_<م9خa{ R5$Rŧ`(F>k| +{<Tkyx:?yZ5h:ߜJc?AJ=]'a[,xMCB3A gg(D@5a kk\ͣiB) W&?=T jG< jQ$|b2,aöla?ԡ OѼvBsk|>O#dEӥX'fy%D~la DtӁ1'yJ`b!sw\Xԗ>>:CqWq,T.qUvؒBTTLIOR"Y/s < h\$`E4.{N6Py(l2CT<2w\}-~CP? _x{g^Bq1G?>'%ui%H ƫ k.\~YFF!"i10R~t1#D))^^xϵdިOGM-MD%C{YPҔT)V@a®9(غO|2U\lǁzBPJS2,=' L! `j~f_yK3(+(*mPʂЛ7rMHkaOE_jc%ƕ`OQ/t#eO6Z˄},i԰(Dq/{?=ɿ 矽br#KvaT'D2+B D]OL^kP8KDDWB X| h*5>K![_͉()"]n@$M۔>Vs8Sޛѥ 5l_|R r>;h4=?B{x)R@B)B%|iɓJ|5B  .2'JPZCODDg G(cEI-RC zW:/[Jnv=$ܮ>ܿ\sieIBT4/~Xx\>f/qX;󗾌'JQ*iV󚐞l <^'߸$#TNN K6* "m 躚@Y s0@a(eUlL'HRw|7Ù ΈyԿHi:aN(SP\3C*@ {!< {84uB⃣}X.=wr R޿Ã}x&|/&K $#p*=X.)8Ѫ^|J 꿌ZH ^k(eAWMtWb `9F5` 5 QD&B 3[-V1B?uj.->Y|Z>>wWp#Gh4yd#P tly·P=:{a7UbBv *|NLAX5)Pʘ ΛPԳ10r\c0u6/r7prf%pBJ< 59儷nFxǸ1a:Z}'ca|UtrH co6 nPϮ}ǥ'8,!pKSg-ڶJy2 eHA)%d !m;pGm‚AQ-} ?0"".W4G $wPܻw?Pj@ |{1y(2٣=kC U<HB2Bf'aGX^9 @*\@'o.n>z?* ˲8.,!a02?!%.JM1è?P7 hp['} @[?g,-3S,}(؅J~r:ȼކJjsjJ*1k ̂N#wQlQ¢>=JyO= fg,a<B)Q`Ip2*8 I(% :.,>X aY PJ O˂ϑB:%?} _Rtv[¥K>\` uu6h(T U)cD#1f eu5 ê&zTnǕ==%5H eE3~r}/>s/\(.dyR@i0E8@(Bp]/ZST8llj@VT8)> %`0FaEDDSzd춯??/%HP5>Sa mܸqA $N&k{Z|)-~޹Cj=g^EQB2]T>gq˘[@ɭfaLK$d ̅j0 2}%ԫ|\V^ölX zLI6;DD/0 w8bToHŰ'F) JP!)=(3t2txeGhpbfa' a\+G}~rN>|.=sΣ\) T<锒Z |7&W*2[NG ˂m[jM 9'$"",aW/7LmHh~^"0 '! \+PGk^3ϴgRfށJmفnUg +{n(g?Ý{ǓO>Y 3(8TGֳILA )% WNTX. lˁ,X}/y}ρϒ&NAXf!)%%s>,X[ɉ(TCuI ڙ^t"o©Y-ׇeB0bc\Ujpa җ<^Ӄx}Tfg '+el5u@S6UѹPiB"VГQRF pUvGM-ܸq/EګiN&@o0RG`2:&Q@/2v1o !#~*1`Fv1LMT[_)>;lwMm  z6Q\C18>8CpPrK-aaf 3(%(@HfR h"D [{!> ‹/~Κ (+~0))ǸNIRs >~ Ÿ+SQb7\So%J2} ,}8ș ICK*t`MciK- @MG5<^8->F^CeSlAX,acHMe5d'<{DD9WJ`I4-ODpmܺuNmTR ([`W8@ʜ :!כk{ .|{YBT{ozO.2}9|tO;cܹ7<Sߓ \ۆDلy͠P,:R:!@)82lcM4֕kʔI"dSSHfa9e VK!zb'h]ӡħlGo|xsa0&ݓt=5*>\؞P > nN?vKH_Bx“&^tizh6͠<[} 4:|xY}Q6rKgTX#r]MkR b ,XPO攔MOCk{)*=#yp 5|)Em+{G=9xű;} u߂ $d K =NL·*75*7l45]C-<̕` }uV@Yjr` %i".t]MpFnb)Q@0XPߏ @IarWz0@*^g>ޛP~@ZRJH'SO' @ 2JGBz># =ZM4y̔` mh5 h&`""8[(3-SQBSRc2s"2&}o" ri=:9Yn %V)?/rr!왮Y;FϢ%x^ݛ:a~ 0w]ًuuM/ie/~窟ǸWhˁ(SV H )YpmOj/ %@z}ρsrJnju~\WjZ10+j}M@9_e,9'"JU*hN_jQ?KDirH'&18%e = m!|z xpW2u'Oa_(UǗҒn! -=('TdNSA) @6~ٔ.`* .l՚WkШ5tqs+87ol~ǍC4:@mQ*fY8S'TRse۾U=":_^Mpy5o0&H;S<$ᒇh/iKyhݧg;N8){'[ky|70xUDis]@d.;K\8Eµ]8 .,jBcTy$!Ga`GQ G{xM.+,m# "_&I Mb-)/[dt+\C`Czڞ/2 @N TIPS-!d]BD]Yk`cԫ5,]\ v-<:~L=OFdQ+di+{?(#Ɨ~)!Sk;mNDD^D_Vr:j*BKeԈJQtcgٳYY,ֳngk=:CkUL;ġJA2*蜒/&RV 6$G`B(`UY3|.>G1A x7hr:p-7 ?tnk)2i-X]}/գ!5QD:/?w>DzMRԎ+ T`, 5)U ?6't% }q/OHoo^mBJ&NJ>8so;J&÷D EZZ*+II)|֡&H;o !f s\$.\y޹qUDDtfp1.$" oB!MHq:*O8!ḘebBABJ13b RVM=bsjA٣gߟ T7a}/Nc"βmB*>QAe\{r:'ȥ)% @ X +N@M۷ RMM55cؿ˿ >sFv>)"3sZ.F|>K (/ht*x&C,!!_CPOIє, )=%uJ6/@S},oO.ӄTS )?uB>񉪓I)C*>osAGWIu@ VT) +Pg+ ^,/?uRDDpRSOHvaLHR8!E)+k|R hu$ϥuh&Hy* С.,,R洔@FeQq7糯A(W@J@`O=ObJ@ I@4'`5, QS} =l<`],h7jre]k$Ե=A hL}eyD<p.ȠKb7 zD=66 T;U}n;'w^ܢ\u[k].HXޕ32ն>NVckdž UxxZ~ʆ|M=3 ty}"s"#ͤ7@jm&(>LruR~<^{^|:J PkI`yg39IN=,{-j|2Z`O2% / *3?,ςgm Xd(EDTV`(>ҟ.=6mnn/e㓬Ƌ/~aѩ`(L (d&jJׇ-'O^}f0_S5:%4RZ4kІ^P IDATX | Qf< >DraQ{ Q^_v\8Oh`j}}|J# 66fWQ_H%!CM?ORbHG_,^o%( q%cegLM}e'yV~_%g&"":W.̎v:ܔܾ0&ʭ[jhccE#YcOYG)A=HhJJO;5*g^V ᥿i x7~Q2ԶC׾g~tzKμ!KXrpx쟝򇉈Φbbƞ{(U?z(~cogcOQgeO}qgY@ e JaֳJ?!A^;¾pwgًΞ7Yt6*aoY?îx4WFn=o^t%βwr>ϲW{)/Yy/׆wVE4L> [e-uIBI)suOOPhb,+{{wK__#!"":͂Fs`e8-:Lj1_p1bsS1 _́n'h#IfRg3tҝQEA:Ϣ*L|E~m{HD$Kr.=:pE'P_~-! nF eRwH'h>p>Ȥ m@*l@I:`'*?3?p~'_S׶tRu!4lGx[;}(\=Q?)]'E?2抝l1nvBʶ߃|jE)Jz`u]7c"Ku`OQ6nYFkh/0zD!U_~O^z?F<~O574Gg3jK +صn9\#";.*=4DSŃ,{r*ۿ7""Κk|BJ)ָG4tHE `(ՙy5D}RTU꒪o.JYTf9 7@ (}}uZq3JNRj]! 5X>R=kwK`FDDq peuwNB׍CJ^l? Fi/C(Mf2"vIu#@ ׽v:#:^3W}̀PI,kWe^Ѽ N Su$y,u-W? GY`p1ռN2l_eED4B[%\JRʇEDq vIu\,FTpnO*)J2C) |Bm{O|нWJG)xd%?2|N""L99zŔӾ&5ߜsPEe\E2 M)ʸtISD ȼF۾]&ԤT @Q(e^~/9Ƚ?nyiSfr0β7[h.7&z|eADD] 1Vd,{g19QDY(qOk9˞ZAEjJT7R Tp pݙΤ=sJJRy^A㓧^;m~ 5=},v::ƩW<&@Q?à3TDtP(ann%Ҭcqq W\Q .Fc8N)*2輺gR~x),Ώ3=e\3&_xG_?}sh*8WR\:ATVϢ0j$ZKD)mssK(sGU:M"ΡX. ¥:Z'B&RqeQ#/=!"A92"PlP]l}Nо.2sB*{ad` EI=QxbR"{o)פGձxW߿ב*1/!ܐ*!{C/G34,u?}&XEHɱE'd)BCmΰtzXCJh )KJlARSUJyl2oeͭ#sxk?YéOB"H@8T1v+y7r'(O>BF6焧' Rá@G<~AJ }*ARK{7Q^yw9%-74N=Xĕ>BBN~rWeOF_D𨛗Pِae!d>QKR)P8@RD\Com+7qM $hTC^3xK0-7?rvͶ!4a?7XX{$#{pRus (gJ(g8p,b'quP|?CbԾUԾ+K‹b_2Ȳx@1EGд堧 NNYC6#nW@^7+ttWJu2*tұ%t+J;_GquWoɆ"{>y[KNopxjZ:pf2)&#V֡j*eT""o(! $_@2dG9:{ptr܆!J)H*J)o%,)"h_ŝ\ŕ_L)5Mɐپ~;nAߜ8tZBm !cDU2qs`DwP?$4PF911!}0S23H#zӈ :eeqR)),:ۥ.t[R~ +s⇮#{-iި;:Φy3wk:t]G1 5OQNBCT%HU ʱjgd_wz:$BT*3qe1Q!eLpeLw.v|!N Xq''f|0*P }_J=8gloF ˨ܭ uJS54N;2" U%G@{BJ8#{ο̋/nM~:dBՏ@_jww1>BAt NDE@T$(JŃ^Eʨ)gb4"äD#P!ezJIzU4";; ;w Ipt:+YRT-4c%K)[a kM)^*{yNOnSgJh,6.RNBeQͷ_KopFZ4\D7s!%|UzDD#B `)2[re&}=$@;h4OjXtOaaRQU͞R{J5vzЪrGȞsáoLSWsh)ɏSGFϩʳ K~h#, dsοZ=u=W٫|eTr >c ABFyNFHYy`IFF@ׁ*@$ *4S9gz C%Ĕu 0NEE\>Ʉy<-u|& @O@uƢ uILAEȴ#KF$, RY44.9?@@$^vsaQR/E7wPSJwV>ӧ@Bajf2ŔuӠA%}bj7\GۋOe#{75*{{)e!?V =2#t]G/y6E'd{KdtsS1h1Ѹs̅I!&<'B+,_L#kk^iEyzѽQ4`s @$|~*{O9!$bJ ] 18vFHH(7h"&(Ѭ\@CeҕQDT*ieY!eR$HTI*!C)U'\3PoZMڥԠ_Ra?_D|X}do {کbqoNһqwaCiVOgts $%v[Om$t>xLd(64'Q#<'"/,_Iq1 ֞E,ÇqtlvtWJnxW+coTaXX 1:;`,g)s|zPD-?w[+(=Q ,+HAOsFHYkk{w=HRYRJa{].]Db|BTa[BY0Tg_)n[Sם\.N}^#{a+ o-넀98 #Op_{*ɧ6~by|UQ3,˾(0 }1uB h/ ZR()r^c},H&?£GP*ؚ[W6g+tK);VK-?37:V/F ®&xa\9J*tV<|=]}R'J/&QQA†$LK~LH&St2c|$HP,^ tQT*u\ >dr*4MQU6{)CNYR PK)ulq˛XXxvzQE7yko^h_͋ɡy~mݳm&4)"ԼvJ I >v+)ȴT ) c|$tr&C:}Zs25X]d2xdlvR"{NbU)BȦ);'0g XxϽӱ5 ҀMo*{#0f2e dmEMc C|$DfOT?fBHYERf)*,NoTb }\O! JhPֲ}\+B!:+l-?+bR]eoްWٛzUĉy gԹd2 y8T&bXP*g>sg>drױRhU.TK8J)Bh::#|y_`Z_tz@Uu*c[ͦ/m*{;@GmQyc]sY67 cSԈڼg*{ (}MI;BE=; x3/ \TI@6cJq9:wp]A29TC#uk>pl!9{L!j ]ۼ)H7aQE3R6,14|$=rYvqrR9\Hw& T*P 9TAKFYBJɐG7V5@)SO}sH&PTo|NR'epX@.MJ9)5!)]_ #7`\"0^jVDݥ"!(JBLzC!@>|~bL\.uR^Fy cm'fF*|J)*R_gk>TUvzK)v4`3=ŔoA#XzY@= Bȴ2(w/&8#5%|5̜LYVNgF_|za%L!Lhh=2$ <|ibҾZmcKkXm144up ++gɤ!Iա*t]7TK! xKJ}[ 5^L-ߕ5Q M|:PaI:lot%k{u(uذ\"={榪hmn&Y!&7i ḯpk x?Iv<#4Uvm+7AЕ2,Kk_d0dTxa(5>?(d2Y"L(VTHoEE"QF_^QjYZ*M*+ryH]Wͪ'{ŕEQ`TJ=Zzk`\;AR**+`Vt|WNf88TӌrQs\|VHYp})A^WH^{ G4XE'* O}AOLk׮_%o}-6K&(AOL ժd_!չYHYBS )CJ5HT(@15*C>UܽBW !WPdR몀d\w!Ey,-"C 1ջZu>Y@Զ}}4Mk .I(7d\-ժRSSjyGN;`>9^:}ƆeaSmv\~%Tg+ =]!5cNI;]&zJc;eW}"N/C;\J2=㱶ʨa%R1{՝ɟL VƬYu,1t-*i5Lo-f?} =mcs~WD[#_]c.5bW !59WBs!<ֹ9G9w+z̸XG)4<61e.w.9Ծ}h]!:-:oΣJv,jƽ5?xſ^!`hiKSǻYۛmkgz:9qC߈äèpC^4{75w'Ʋ$ J)/uw( VW/`eҰzG麎z= X{Ov1eZ7KHY% ˒:6)j  7(>\“ۗP|.28`W)KRU%MǎTrQs1>0GF.Wަ"^P-OH nj$%T*WhX__/^Ǹw:>lo?!%ټ{F/I!KBQRRǍdrddtB(Uj*NNJ8>.X,VEG+~Ͻkƺ{#Z1^qzLȞ}s)*FHT*d2tzd&P5P6prRQETv)%&H/"gm )WTʈ$fSHB%$E!5y!%OZH?-*kP_!^cM )qN:Eؐe tOQtX[HO{&),|Rbotvw=|\26Gx8Y>;.BȐt]u V-eH*WkrJYJ`+S1QQ*hQQPP1?L2#ii 'Oj[ s_G,Xvk /鍎KIF{mwO)H$11L4"I= )lkȞ}$[XJ;u$¨HL!RjsU-`SqF|ψH#2n3Px1ei)DnAl1\y IdO{xu?5EnF톍5gzXdza(\v_ )ƅfwNR7of&MLGh XRJ(+AӴP1*)#O*v10J!DlJr_YR (888Jj5] Yԙ@܅2w! PHBj2B"fAH/Cx(HHPJz n270 yN*,(Rk!e>dRSE&BhøRfnXRjU=){{#tC@7CP 7bXT*3fPOao:j5@|+e.䦜U\A!m!!kMEHe LAE[H}+_c"j<66`=[[FEBGH ܸ1]R*{S'|~uuY-ժj5[SN),t]˰)CJ!Z !MX>&HRR ӹ(|RȐP(H8d$+X5[0瞠D#TBbc㛬r ΃R$hBJbQ'TNtOrJ7e I$ZnuyE>c]PBJRJ}VirigpyӋ8:*aww:Ojk)FBs)(ȐOL&Y$X5PD'>Qf8t )!e$p|,O) BE{]Nu$SBt*٬24M1"Vo*K(T nOH;ӛ} TH>D!Bj4~> )eCD=BH&f~(B̧>Q~^}[AO#PLM?VԴ )k) *[VII2׊5P j9mRt]fTV1E*u< cU&R9~;RmԨF6!5s/'CVA(r3 GR=KO*rID#BʂbUIM8>,-oъiMe +$ zBS TQ>j* I,B.wgQe1B `o\vww^ݛ )>[[ U&MhH̔T=+(F9WHҸBJ߿nA(Z(fGHLyzK> &mEF:G,=&.^=%}cckS%,NHY06|`EfCHY?j)B:I}(Rfd߶iRne$&AiJőNziΊbT/0i91Bʂb=/]~5!67e "'-@$M!I4sIH6 W@q^egVzф"=׮]׃LYܻ9!eonܔ'}ZI+Ϡ\~ʥq\b,6YD(tVEٙ!Ũ^`<='3!,_W_Vӈ$/=>43)P"+*B*]cT/0YՏR/s%f[HFo۷%ZȒU^eLc(]V2U^Q fMHQFT*CY9A!K1rtG-N9$2#̛r3`qc{H:tssqqe4K= /繇" {(Q`z0R}VX-E!Iy,UHQFYVNgF$ah@mbB!IHǻy. ᠐S i}b11B>6oߖq6c|Bt:֌PHY)Dᡐ)0螷Bx! FUT x^ 6RrEPHc|㱻_8>ƍ婫rsZ>8p6KB!=\Œt0R?cʨ>Qa<=R.rKy΃Bc2!B'V:yTqO:,2A'j<66F5Rc{_*xnXB!egWHYo B!^WKkԬG(<0 RA1 O>Te#wV !BZ}[<=Gʨ`rϵkW15PHyc|R'K89Iy.IDB 0TSBȌ asF!5^^?>Q@!ׯ~+iD b17W"_!5)!eHx睴B!'DT/ E!4OM' ExOPHc|ao ܺi!egSHYwqNB~issm_!4-!E5ysD&c|.,boRxBʸݾfr'B!QV\ E!e߇2jȲt:4" DM Rao<|ãGHVHM:)wߝC`B!Q%iXȞ1[|0<RC159n^A@RpB/%cs3Bo!(QSH9 ݣT"%T@{ wTJFJHYǂRƲ)!b1 "W0Bi>׌B;!SYܻ:B!dt eONcRQza~~0TȡrKÍOQH^ )ky{{BdRC,QR^ W)"j<66F("c|a)o)R|Hz/ !BH&5RnD!奐>QтB*bll|R.a)(Sٹ:!eg8c1!B(EG2zI6ewPD} Ta=yGƒC%%.q ;;P,:Bl(I]$E_HBg_>QцB*\~I(\NawwBjBBvtBRBrdYC2ـ]B^)ʨ>RSK1>oݽju.p!egj-k=|,徯!2m$u$,EH9#(ƇQ (fcwwR.߿Z-C!`Tv]ױrB+ǫZ|r]He2Qn`(07[PHSabd/DB+x\BI#@QگG!qgRQ>QM(fS iDZmRF:.`H!xH,VB<^AYD!>_BlvIf b=/5ZO3R!e99|- !7HRX 0G" mN )ʨ`(\v_z$@(fƃ^ϠT:F#cz'o?@Gp Յ/*!IA ,w(AHQF ya~+K!dVQcHRTk8Rz=(!57A&繇}RđoZ%/5F''z*cQR$)jP,>BzBQ!uk^KH9'zdNPD}H?(HOsc|hdQ*]eT }X|i닎3!A*$QH_1D!']!SQF YQHaI X]2jT"%4H"CRao0UhZBjb=RחhPNBH0$T|dROBH=SO_T?sDQ"#ROvB>e!ZET*wBB$@Y.SPHu;^Bi|x!!VW?r>,+HAO#0GB!E\Ra?:ZӬjNty%ϗU5U\!`1$TT,nRp>Qa2!_PEsS~tQH sRm"=E _'ySJHHBs%tA!1M[QH? TUQvsD0A!EB7 zb!.A.RR ).B9QiBBi`qUQvR EK#aBrc|vK+EIH LRRNۭ)]!=ONcRRcc,-*ʂ> .Dq]pc;l#-7 ؼ-Z Z\" FUT: zڵϾT )23{k!ϛ1WHQH_o$!hy2TcQHu#QDEu(R2bԐPH+_F]2TpBjqn`a(0G!`q` I᭐U(& Bj.O ZL!E!5y! E'j(iG zWի0d2*2vw=@P8t!FE'j#VHŔ{kaH3p[!5R(THYi;Xf+J`i=>Qv*664 %"āij>  ݙ؁!V]<σB!%M(072 )Bz`_g_Q5Ti|KBQDQD( )BRav `tPJBt˷Fh`<=Eh!#B1jGӖipWc)}}C=8_X-RNc!R˷(lPD}q!.`o<_M[.>RR~B!Tr؄%Ԥ!n0"d<(oW4" KuP38]H '(0OPH?4-SHQH.oSD٠"d|(_7i4)(&sz>!hy2Bjy6VV`<=EwPH!d%S4)j!^QH-aT2`!IՁ,+HAO#0GPH1/Q$ )o|()(\++d -sE!A!EO{(Q$jASR֝(hQRR*ΜLP`<=( Sa)V%TTuFM̩IDATRcB!8ӴL!5MB*=F6{3g"j<66FEH"$d0CJ8:R@!nsps> IB{!uNSF0"$PHR66j)h){wǕqx) VlfW2 N`j`:&ڻi40ٶgƢ-ɶ6 %⇺ߪSycʤ,uZ,JW^?h:ykZzZkm>Kۧ?%DŹ&HAj>D| ě\ςTiAgW:K,''DAR#f|fG>-ՠ_o駟I,H_V}|ROj7O4Ý8<'A zH3k]駅 %Hf26ԓ'N\j;QT3! zJ3[,i6;tv.KE徶W}k~ ROvvi4`g'HSqKm:;{fsAJk|uogAN|-BTxj?kk H@zӷM֥ 3lt}ς*AjggFEWvŹ#HSqKtz6Ny*IZgR_WMgAKAo^]7 Q$H@Ź/tzH AQ%Us_T` yF7oOeN WU}Z*}|^ S?a~b'H5MOwxZkoyF7>N $3:~I_׋$H 3lt} RmD>yqD RGaLrF S W}k~Zj 5_䷹P 2>'H7/g=__|S''W_>Ǧߧ {s?h6=z6F1ϋRܗ*R]>}m/gKuo~*DKtƃ5d| }832\trrNNί}GZϬ3+&sAj4c͝8! X ,}8a_ O'RJBT]DmVŹ/ŗxõ{}JR|O2<%y^;Q:RZTs r_U]U_T ;6>hBnml\) UB 9ww'D R@vK StݧpO\Nϯ}EjmG6>?t;Qqy@WR@'/gGx㵿K^H''wAzpa>w|NTt t_0w X[s]۾_tO`as'*<"A $a*Ό>q'*n^f|AKЦikk;k<#A hy^ RqM|(D}'HTD QPR`/'L wAq_*Ό'DC%HdXlv5w!A͝x/U~JόȌ`@>SqKUOU=>c@?Źp;A TR DŹp?A f|/P&8w#H,a:=LA(Re|(D=}EV`gmyqDNf|A@llDD Q T08<Rq_*Ό*w'5X P 3zf#:8< R܉ Qz/n8kbN@R="LŹ/MRU~ $H_=KM3ϋs' )ܗ DN@ R=geN0RQU}Z*})`Yv(x>k?~@383>>yqD 0@aLrF)s <}83>8! A j`x܉3A Ru0'D9A ?p_*Nr'*<R}83>wTU__=ّOKAX  Sqf|P!z&DA -4~ yqD*A SqKAQqD%HbWRy^;Q%HPtz&ܯQ$ !wh @#`}܉If|AgcAE2 s_*Όe'D&A ָ/'LA} <&H:`uD Q ڸ/'Lg RRqf|p;wꩪgBk'H_b1Oq׀N0ϋ3 'A 83>LRU~ N ;3zf#3>2ϋs' ,a*})@s' 43zܗDyqDP A "Li29Er_ln>( @Q28!  R Stƃ5d@)T'Ds_*N"w A p_*Όup'*No)z}8a6g@_ RRqf|4ŝz@o R_b1OqנPyqy  Sqf|BRU~ X A 0g6;2NyqD0D#LŹ/焨z܉`)ˌ/})R2ϫÝ(N`OK/5LBT;QpIdWpŹ$H5aLrF~|(DM}83~1ϋn}8alv(y| _T_y܉`y,}8a Dřj)XRqf|NTxj?k@q)0g6;i0ϋ3z)A3G QP  0[,i6;aN4G SqKKs' 'H@q_YyqD@{)h0T}BT=D@)h_R1yqDzR&UܧܗZƃ5d%Hřw(A :})w)(2s'*nwꩪgB eXlvlWy 'L\\|^74^ܯd&Hf|j܉ Rs' `eԗE$LM;QRn'HN,A Xtz&ܯ]. Q@ TA:) l( PK 1HM Ԑ4M7RCRy@[)}/ UUτ(5Ъu[[RU~ ` )`m4Kr' A֮aAʝ( A Ȧ_Aʝ( 7A Ȯi;Q@WR@'6+)Ht ttz&ܯE)<)~_AJL:R@uTׂDѥR] Ry@i)8]/Յ 5索P3A<( -WOza3u)w>^YWZWr' #A uRD}&Hfj3H ^36;QPR`T>-d2F_AJJi:=LAn2L-z_*(A }Uy'UK-(),s_j ep;A ݗ/H{|5 Rkw[2X A QKVa!H:A _s@VPIENDB`hkl-5.0.0.2449/Documentation/figures/B_a.png0000644000175000017500000004517113237020216020563 0ustar00piccapicca00000000000000PNG  IHDRXLF 2iCCPdefault_rgb.iccHgPY<@BPC*%Z(ҫ@PEl+4EE\"kE t,ʺqQAYp?{ossp e{bRɎ(tջ{i常r)teJOYLgWX\2XyKο,]~ )sT8بlOrTzV $G&D~SGfDnr&AltL:5204_gK!FgE_zs zt@WOm|:3z @(U t08|A $`(E`8@-hM<.L@ށA2@F 7 Bh( ʀrPT UAuP t݄84 }aXև0v}p4 ^O6< "@]p$BV)GVC!Bd h(&JerFTVT1 uՁECDh2Z@Ёht]nDѓw aa0Θ Lf3sӆL`X VkaӱJI%vG)p`\.Wk] p xq:o—;IA"X| q B+aH$͉^XvbqD%iRi/82! L ے&US{1O,BlXXؐ+ NP6Pr(3;Yq8WJ)Hq"HJ IKIJGJJIKa8y"Ֆ͒="{MvV.g)Ǘ+;-Hז,L_~NAQI!ER¬"CV1NLMZ)VL $L`V0{"eyeg :JJU*[5JLGU殖֢HVQ?ާ>حѩ1͒fX9֘&YF3U^FuX6m]}G1Չ93 |UҪU$]nnCM/OS~~>&   .y݆i񍪍&v\mu:ƑGLMv|253Θ՘lOv19|y-Եl^Zä́UUКij}ZhlfSoV6¶vʼn伲3صs-[{'BCSGhGfhgWΣ<lqu%V>svu.֪MZ26,b&*4r**4j:*@LMLyl,7*us\m|GD\bh$jR|Robrv`NJA0"`H*hL֧uӗ? ͌]֙ՙdKd'eo޴gTcOQ{rswol m ڳMu[NO [A^i۝;OrR V (m? Yrˆ[EEE[?Xި%%Ga%oDDiNe̲²7Yn\^{p(㐰­Rr_bULp]u[|͞iU-x4:zccǞ77Q'z̚KZ!'lsWnk]8q/v=s}ٚvZ{aԱC) _}ABEKr.]N<{%DƞWzuW8}nX8[[Mowf[@;]wv8d3tyoy02*|`a׏2-<>+|"ߵ~o /ۏ?yx??'󟓟O)M5MMqb݋ɗ)/f 櫳/ M^̛oy=}na>|ZZ.V|R?B, bKGD pHYs,K,K=tEXtSoftwareGPL Ghostscript 9.22_ IDATxy$w}OQwݺQeRc.cQ>xvv@t1~άy"16CU63ǃ ~~$h!2)[VuGddFf~OUVFfZ_XB,cdvMQ/1(R@VLe2IR>v!`VLe2MMMI] h`199s&כLhG+"a+[`TF ޒzh]0\eYjbP(ɓ'kg VL]` @X!#`E9cT(=vnnnc@80"BAgΜQ>rx4 UB|>l6˙cOMM5TfkP `uQf) [>}K/.3l2LC п$+⅍FP(jW@z x,C X=p@E#$Im9"~b++Bs@a+"++BPk#Gv*W #.j'\.@"c$̙3ߊ/V6@hK$ISSS}U("@(X]D[}еvu ~hv_0G533-K `u1FBaۡvc$}dj X!E2@X!#`2@X!#`2@X!#`2@X=|wK{@ARD")I,q6!1E˒PeYaWZ V8rj,kll\JL&UD-NzhD"A !`{GrjA_2nqep}_ʲ U,ueY-uD’dmxD& >XZ__Ufgh\*'B]7K^VRа-d2D"d2Y6R'N;UU* WH$ս"r]PTlp%/dOEy]ՃUcjZZ"h3Xt%Jņ+o*UJ(Hvxg xSRT6on{^`r~@RI[;[0H駟O?cǎرcDCu]ol`g{1F|^lVmGZ!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`2@X!#`{&&؛dG@ yINԋU؛͉v!)#dncou^X2j H{U,zl`@ˊwGtȫD9,_hƖ-/I+z Xˊ+z+L [E2@hvQgt+6T43㬮 t-Ž3UWm#/dM+*Xe&i-0/FcW> kDzvQ٦ X WL|[g9;Qb=tݴ<'g)n[`io;= SFZn>ks0Bռ݂sv^y]Yj~ܗa#`uL;g;V{w|Y1/=ULCZq;@'beA=m>Оo8eնsX cV} iyC{l*!b~*KQ[9+60-[Yej@5--Z@ \@ `2f. ޼_լf0K}tQkC@Et#G ZЬfkd'El9r6G{  @#`hpeT.kX_@!`]F  2.ztW0X@mU7d6# +##KVLVN9Yh)@Lzٳ}5%#iM+\22rԮU8iBĐ庮"PZڿ_%GNR[†J%IYe Y3TzŋJ9Q/!jI4\Ijx^y |ӎ\W,pAWYe[d'`@zҒJyW*|n' 6V+@ `?\-`mB]+Ń?$G<ѕ+R2sXaedjaZӵHExߨX,kh(! ^p fg!!+lT Tz}Y7Ϙc+8~ 3#ƀ^k_3 {v k:NnÕ3ݷUuJjl1fΊY,>fz}^X%=lmT̖]:>*3%/d%o]@f}7-BS5 E\M$^zu!Z~ CD?SGp^簾 7@*9?s]_@DhFliI*"2oSn˪i^ `Jj:Q>S=W GoJɖ-7gV+iM(DsVUɤ8{j.9r^B#G8~"d@"47hm~`{eq8eBVN9ٲk3Sơ{ WAi@"tꔩ_}m»9q6^N9VrC45_.]?mfg51!ImhȻR֤[w 2rNy}VT`EnjR^g~sX-#r=DSWm\[d춍`;D毂; ]vyoXTXyzkp]RM g&J^#`@w"ojFVӦEoէ5]DTdn'\@qa1(+ʶpyDk1vߺDfBF d,BF d,BF z 9D @X@׌?2-G쨗 oj9?D@RQ/i|n&"F #}_km|Mo:ƨ hy!K|uJn?K;^ b, ̴tAҵ5'SPR^T%^^KZ[Y:Q/ЃX@F[ Zƥ?4JTRQ%E@{9`f+orJ>c?Uf*E]r,$쨗 Q, h_#RDu,-Қd`G\@"`I҂YtmZZTm. "9+e>_~W_zd6o| $*X@MN9I^p++nVZB ٴ5@XxӚ}kV0h :Ek)^Bߣ5V"`uA@'0ph :Cki, Zn `a`t   [X~jV.0X{֠#' }o BB_ lt  } *,-ZЗh DBߡ5 }U+@TX+啧5 }(A@X@kKX=Z^CBb [آ5U,A@/#`!v֠D ЛX?T-h!څbo f5Y,F5hd] `!6h ₀X5zA@h ↀfdh b6iIBB+VqCBO53zA@sh ⎀BkX)~k 8"`gYR =!z;zA@?!`!rH#Vm Z~EB$h  5g,tA@#`h  ]Ek0XU ~k~FBW-D:54,tA "`h  Ck0XZAFBG 2BGk0XAXAXgZAGB(r` zEkBQ^yZT'֠_`'~,+Xh[5H :BkZl`{, ;#`% Fk!`aWh {, Av5, !`a[~; G– A@–5- "`aSh `oX؀ {CBZ 5 5 h &jAa `\B+?*KkX5hd] }5h  |ddS>k+Ztk8rjá5@gzm.A5@h Ak!` ZtkX} Gc >Ekm{7A4aV罛1}Z@%ljz@[ǡ5 z VRQ/ͿMow祼mK&GkZX| [- V,uݨ1G}# :H,B FhF,͊pD_|]=)˩P(l8+b-nu--,o~f/5t^/n TYc,goY3ϐ$efIW@ۋ,W@$Uc6`+kK@sV++QΜ99H"`wdf$;/=`w%tܜΜ99sFBALa\ 931j=~B¶Z/ SSSd2`V!S$edtpRD'ZzV^ VLMkZ&k$?c'Onjl4a8E2lۄmN:h/[}-W%ɓ`-nc WR`.bɓ]Vg[7WU555lHʫP<TM̅ m d]zoP ;g;̥E%Ϳn}Y1GRN,n:Ȗլƙ~ IDATU8 UZz|Ty,FFyUV sW@Ԛ^@+&啿9*@z cLu/Io&nmP(Ԯ9sX]7O>ӧӣ>d'Tt-zo(:ӕ%w?y/)7*oG/ ,0 ~T'NܦnUQ/i}tIc5?2̶9=ԧ>ӧU2V*>RK78Q.UO>;WϾ??ܵHY7qG^W _i}Ltm{o+ۚ_ -g2Z`L`V4[|!̼_dRdJDE[zW*e}3/ſ./}A1%-KIו5QV!YgI_+K'tcbhb@%YUI#|]#|\ Ww=z$f@}=3wKJRJ&SJ%Uzt\WDqM_sx⸦^n|_b juuUX %׵>󙻕HX,8q\~[WW>߶z%k2s=ӧӋ/D"oEzzo^Sӧӧ!Iɟ ]s՚'d!Ne5o—L$$+!+QM8TR'ݧݧjB׏TrY?__+ Jcv/X ?S$WձvU+9됀aLcǼ>9 K*Ӻ֛%I7tA4?+A\%%5캒[[)˕VTSHH&d%I j|lBѧ5Loox~\ۏ߮=|B6ENƪz亮顆-W+Jezu_^/YH$u]T*J??#w2ڃ-P>WffpyItZ?2OC$yop%I6CCLH:hYDq .˒\ ^R-m*Wt("irlBνo446 hoPJdզ1 J.W6مs9 OKf=d1]$]ޭRbt|nIg?{um:qⶶֻv 1iuJ"`u?eF477'ZnEDBTZjllLJEǿo~$<WcɔeI_$ҩ!%,3DBI+w`cé㮤t2DB+x%M$/٫RJR: yܜ2m+pSf437GB߸j'tz% i%Z LillL##Ku522d2'R)JEeYVj+ZEΫPJ/[U*eCQ\j8ҥ˚ܯ5J%%}O…Kz;셅(@(&~uڙH`Ȩ %IR2Uq+˪U)U.ܵ5G?RINl^he oevCeK47'I /3U)I+J{g'SJ&+jrU.庮tʒ.kyyI?uMSzޮw{I`a _l7:WSɲ,JE-/_pcsdqq2(RI\.ҥ_%806UW+H*iaʫd%z]b+R.-T.U)U*R\Wq}]km1Տtzil=,k^sK_LA˲jrIbQkZ\Uy-/_겖5yNxnu[whevPhn.>w\GvY 9s9dJnxd&qÛߤ'?T)ɭTV*T*KrKje~TR\R\Zo:T7kX ۟Eh{Z__ڪJRm~ P^Z__Sj'R5=7FǏw/PZjgJ"`u?U(d4;=|N:?rÇ6= J[wIӒf%9]k;C'xZBT\[.RT\_VRѺ[uwܡl[o2(ܙ3OzmX\Wr\y{{ޥR'һ#sy^}J$ ̙g޸׷ ??~ER^Rz6}{<|+I*JbnW*$]Ig>U\/FWͺ[^EM=^ X%=q̃ͩeY[uxHδW_H1/ 6n驿kJU*I6 ;z1\S_co׋-0._T URY7rt7wu* KeJ^VlC.CtHmujŽBl\{:oQE [U6 NכA*rͫ[@DuLJ~_Iiy6n׿?uҝw6^6<9Yа W7c|c@ľ7%I6XJV5oyO5foڮ}o)hfl%)Wd͟޵z*^~j_|V!%uZ݌sj͟c$-T?_5tv'?MOo} m۵|>g1fCjl6fӢRB!ea+?D5 S;W }|m bmE{633S Yr[>ɓnuJb2fr^m:\(dtݛVPdGwfpoav6x-3336nŰš9ې V4AgΜ}, Lvq]]wضpd2VBf$gǦ'  S c61,wY@.j,`O]k=(" _ )e2Y~S777#k%f2gj-L&BP7DsUrv{/  N[w#&377W;k?n;FVQ Q=\eUQ8HdjJzj555phc5cmwel2&BbgUQ Qc2wf4;[/Mڶ=xaDžVc5+/ɒ:逾8Yq^_j\汞VȨŶ4=]҅mg$ej7` 9xfuhaݶ롫y_W@LMMٛ[SSS EÕ/]HUmQ Y06 ]&iqnL&m? VW>–ߓ{#Y@:{ ɓ\-dgn!6.\5Y&fW-YV8 @LFff u< V Wjm;+{y7x- d>W>[GKTN)\ZEk$\ْ[Y@p%bg?] <,ڶ;0eԸMLCjv kWRkߋgg;QUB5 h_;|b [^Ȋ50jf͊ H@ڂz2jf9" "ܔ-ծ5i8-*Y-UKlygfso"`"\͈jU*[=E5 $BgD5 0>`"\u-Y՗4O_:|naҏv-/\S/-*`o>iG45uVҳgxn~\5ʋ+t#%oMi|RJEz9XT:ITs:3*W*FF1ilL&&q1[T+aJ[ ]tA==ej52)?TWcظ<GTe!=rV.WỏX.Ug&}}}>cʾꕲ_۱E5 ;X;:rJWtɿSR*VJKH{kbқoz-GTz{H&51>wZ,:,;腬ao=IoQI,-?+]aD5 'mWl6!zz5K)`r7vox~mۋfv4[b,EM?cf>X@5iHIvj>/! [T5`9~~XԊ82?B5 ޶ˑs"'glU$*z2Z$ 8ޖ-B[f'I9WVtF 'ř0P6`j 1Nmr9 $[T`mX+R6Omo"1!`9jH_Zdj ܜ:R>gD@'@] d3Vc5+UvC6> <Ϩ1Ũ~avV}]<9[Y 0Hly,[^ʩ~C;%±6 .hZD ՛[Ro*7-*Ys =[_r`K/lچ V#Y.g, k7ixytQJ8Mw?hZx;E5 bhӳxN!,3lC{GBf=fڒKH-4~in7y#hOլ_>dSgNJH^HS^z2jl:h]bj֯۳J)v;;v6eڪަUNkeE *GY>noPJ)ԃҥ`\u0w`o>i;sq[ $**J*>;վK~!`u#{TУ ЪTQyotȖ m8#z%Iy0^|e''5fUޟJ*LXoEh/,ْ\IYNڗگqkB) UVRiTB7ߎxX@{Mxn&]s]:>C#5PZJ+,}Ө }!,#o*xɝy\{誾S"zyMŗKRqQ닺򲖊X%Uߚߎzk] X6H&>W= )9R"x1]^]E-]s~AEZ׺nެ7_b+խOdw_/ W4>6}ܷ_#cZ_[ɣHzDéiWҺz^U Iz4>dw @;"ۦ@g3W:Ј5o&ĤV˺˗ti/_W//iJZӚ;nQ vX@>&WЈ&'511}wR]څ˗tae._PIEiM[;%  Cy@Oz*Vj^ 462:t?(+ie]Z^ҹgKZs״uo;9<'*䟑%/lCuA8xHV*Ktn%[zQ/^y^^~Z++Ր[`WXYpSz:J(e4:4:r*<|Dtq^_<.}OŋZӪ`_Q59Ys(S#?yPGd.>wK/We_ ,zʜUɝRJkbtRG\N%p{? z7}쀀_JA kt 7htY|\zR׽~s#Q/z 3CHib^XV[, sym6S}mt @.`Հ1|f ,ݷ]iQcXro7e;m `VڝOkc5ʭL `>;nc6uy>l Z; ǘ[Nmttlqs|l7QhC㎼4t}W `IDAT @D H~񃖳ɱX*[}s,V=\MwĠ;0m3P7#oX~p%m/--B˨B@П6*\"ZQkJ= T,DpTDIENDB`hkl-5.0.0.2449/Documentation/figures/m1-11.dat0000644000175000017500000000353013237020466020622 0ustar00piccapicca00000000000000#h k l mu komega kappa kphi delta gamma 0.000000 0.000000 1.000000 -0.519320200000000 40.795148837723552 134.088340521547394 -55.578087980042497 -0.022336900000000 14.824478552849410 0.000000 0.000000 1.454545 -0.519320200000000 43.806822757215407 134.699173262003058 124.898718475162639 -0.022336900000000 21.631027888318709 0.000000 0.000000 1.909091 -0.519320200000000 47.272270521383987 134.663292943082951 124.916656492736763 -0.022336900000000 28.515821774043257 0.000000 0.000000 2.363636 -0.519320200000000 50.799541156706113 134.614380653440122 124.961695704616673 -0.022336900000000 35.507536366647059 0.000000 0.000000 2.818182 -0.519320200000000 54.400871058610306 134.558783263226246 125.018919292316852 -0.022336900000000 42.638809595919270 0.000000 0.000000 3.272727 -0.519320200000000 58.486466730581547 133.885612866783788 -55.446989013663412 -0.022336900000000 49.947951730547082 0.000000 0.000000 3.727273 -0.519320200000000 61.900019187608201 134.437430128115551 125.143770189795163 -0.022336900000000 57.481389921508409 0.000000 0.000000 4.181818 -0.519320200000000 66.240375731726161 133.761531531134239 -55.410317546243355 -0.022336900000000 65.297336845715279 0.000000 0.000000 4.636364 -0.519320200000000 69.977235278457528 134.309331314804496 125.259816130711542 -0.022336900000000 73.471599845445795 0.000000 0.000000 5.090909 -0.519320200000000 74.727450269522620 133.632870840991842 -55.349454108023657 -0.022336900000000 82.107358205505179 0.000000 0.000000 5.545455 -0.519320200000000 79.002012485552598 134.177964670421204 125.347572178779672 -0.022336900000000 91.352902210421746 0.000000 0.000000 6.000000 -0.519320200000000 84.475827513796219 133.501851715647120 -55.246517777093253 -0.022336900000000 101.437135910962581hkl-5.0.0.2449/Documentation/figures/4S+2D_reciprocal.asy0000644000175000017500000000324112710332472023041 0ustar00piccapicca00000000000000import three; triple a = (1,0,0); triple b = (.31,.95,0); triple c = (.4,.5,0.76); currentprojection=orthographic(2 * (-0.5*X+Y+.5*Z)+ 3*Z + Y, target=3*Z+Y); currentlight=White; size(12cm); // orthonormal coordinates draw(Label("$\vec{x}$", 1), (-3*X)--(X), gray, Arrow3()); draw(Label("$\vec{y}$", 1), (-Y)--(Y), gray, Arrow3()); draw(Label("$\vec{z}$", 1), (-2*Z)--(2*Z), gray, Arrow3()); // La construction d'Ewald void ewald(triple ki, real gamma, real delta, real alpha, real phi) { real k = length(ki); triple kf = rotate(gamma, Z) * rotate(-delta, Y) * ki; triple Q = kf-ki; triple Qyz = Q.y*Y+Q.z*Z; triple Qxy = Q.x*X+Q.y*Y; triple C = -ki; // Vecteurs incident et diffract draw(Label("$\vec{k_i}$", .5, S), shift(-ki)*(O--ki), blue, Arrow3()); draw(Label("$\vec{k_f}$"), shift(-ki)*(O--kf), green, Arrow3()); // Vecteur de diffraction draw(Label("$\vec{Q}$", 1), O--Q, red, Arrow3()); // angle vartheta draw(Label("$\theta$"), arc(O, Qyz, Q), red, Arrow3()); // angle vartheta draw(Label("$\vartheta$"), arc(O, Y, Qyz), red, Arrow3()); draw(O--Qyz, gray, Arrow3()); draw(O--Qxy, gray+dashed); draw(C--Qxy, gray, Arrow3()); draw(Label("$2\theta$", align=W), arc(C, C/2, Q), red, Arrow3()); draw(Label("$\gamma$", align=SW), arc(C, C/2, Qxy), red, Arrow3()); draw(Label("$\delta$"), arc(C, C+(Qxy-C)/2, Q), red, Arrow3()); // projections draw(Q--Qyz, gray+dashed); draw(Q--Qxy, gray+dashed); // Ewalds sphere surface Ewalds = shift(-ki) * rotate(90, Y) * scale3(k) * unithemisphere; draw(Ewalds, green+opacity(0.3), render(compression=Zero,merge=true)); dot(Label("C"), C); } ewald(2*X, -30, 40, 60, -60); hkl-5.0.0.2449/Documentation/figures/4S+2D_reciprocal2.png0000644000175000017500000103404713237020270023117 0ustar00piccapicca00000000000000PNG  IHDR8T5Q 2iCCPdefault_rgb.iccHgPY<@BPC*%Z(ҫ@PEl+4EE\"kE t,ʺqQAYp?{ossp e{bRɎ(tջ{i常r)teJOYLgWX\2XyKο,]~ )sT8بlOrTzV $G&D~SGfDnr&AltL:5204_gK!FgE_zs zt@WOm|:3z @(U t08|A $`(E`8@-hM<.L@ށA2@F 7 Bh( ʀrPT UAuP t݄84 }aXև0v}p4 ^O6< "@]p$BV)GVC!Bd h(&JerFTVT1 uՁECDh2Z@Ёht]nDѓw aa0Θ Lf3sӆL`X VkaӱJI%vG)p`\.Wk] p xq:o—;IA"X| q B+aH$͉^XvbqD%iRi/82! L ے&US{1O,BlXXؐ+ NP6Pr(3;Yq8WJ)Hq"HJ IKIJGJJIKa8y"Ֆ͒="{MvV.g)Ǘ+;-Hז,L_~NAQI!ER¬"CV1NLMZ)VL $L`V0{"eyeg :JJU*[5JLGU殖֢HVQ?ާ>حѩ1͒fX9֘&YF3U^FuX6m]}G1Չ93 |UҪU$]nnCM/OS~~>&   .y݆i񍪍&v\mu:ƑGLMv|253Θ՘lOv19|y-Եl^Zä́UUКij}ZhlfSoV6¶vʼn伲3صs-[{'BCSGhGfhgWΣ<lqu%V>svu.֪MZ26,b&*4r**4j:*@LMLyl,7*us\m|GD\bh$jR|Robrv`NJA0"`H*hL֧uӗ? ͌]֙ՙdKd'eo޴gTcOQ{rswol m ڳMu[NO [A^i۝;OrR V (m? Yrˆ[EEE[?Xި%%Ga%oDDiNe̲²7Yn\^{p(㐰­Rr_bULp]u[|͞iU-x4:zccǞ77Q'z̚KZ!'lsWnk]8q/v=s}ٚvZ{aԱC) _}ABEKr.]N<{%DƞWzuW8}nX8[[Mowf[@;]wv8d3tyoy02*|`a׏2-<>+|"ߵ~o /ۏ?yx??'󟓟O)M5MMqb݋ɗ)/f 櫳/ M^̛oy=}na>|ZZ.V|R?B, bKGD pHYs,K,K=tEXtSoftwareGPL Ghostscript 9.22_ IDATx[$}kPM [d75<k.H76VOލ0Vnl?OױKä6@ 6j J 5QH G̠@LUd~#tWp *q%9|jSh&NxlQG4h<x8@p#G4h<x84'>񩪧84FPF_UO@ ph˗%n'UO@ ph˗/WՊg8ދ/~[]q][ޓ/zJjf @Aq,GG}9:w@}Oܾ#WoV=%5C\uߕi˿^P#jREDuE@~+:!Pk^ uEdpA3P'j 8 mO/3R Z`qtԗ~PZkUM@p󷧄+8\?#y_lOq FH(rtԗj& V8η""Td1~EH+_ f N8x *#}8p!xX*I*GrJwP+j2𧤀#/}$TLOH5!VkP/Tp_ pAUr`J??#gtwv*E6TF?vtt$233#ss߯n*E6)/ӈGrtԗ=GDDwX ~8ƿBD$EEePїq]W8[uBV\yE~ND$ɨ!g$iI?>?|򓟐O|2==#g~푪 84lllꪜ?#G4h<x8@p#G4h<x8@p#G4h<x񦪞e)^wVG3m^[}lGb{<# "`"HR]YK+wondgevp'ܟwCۼ9 3BΡ#-lGvwM~.jt;P%$Qxdg/XT:*D3:s9/nXn8.&XDN C\2!@PSm #jmU "ʍ8+.B1O6L[|m3&CcJf7פ3ۑk;פ= ! 88X(NZ@U YaB0?7|HxN4)ڇ$k BjOǑ{$|/}8p%V]dAނ96Ytg,:sS|S~ml<Ǥ1sh Bh?<?MAX}24gHKosH$(iۉ7/-eDAK*IcDp}{"?C=$َ,YTꄀ0ve_`~/*wAb85,"f "^ U\ա#uT|Κ/^~JP% Z-T[KZ"33? LFTeΡ#9N@&׳PskόBhh_[Dׇ)a]?zk50zd ACtJ l'ނđ is>&3iJE ZF*X)K K-o)<nʕW/ppTze(]5<3f r9c2#hd1HbU៷EDdan!q^ZPmߖ"=@8ʌ薓" 服@+giֶ5d{R mَ,PxllmCz{˚?ޕw;مP  3?X$1ETy㘃0!:~絻kNyDvdan!ld/Biߖ[o"@#՚t:Zor-345|ڱEK7Hf f0F"I5Oq1 p9ЖHD|g/ë\fm%IXpe.kfg 45٬R)T_ޭ^,d9Wi\_?}ܻ%ҙ^1[_rݰcxA(Vc{NO.uYD:;Dޭ|aOvlmÐryR9pDZ kZ"u0}P2fF~==YY6^pr~wO6q|!ؤWur.sW)PrCPGɯIbFJ?äBf9͆É&Kӕw|Xp:p` c&*3ZVbB7P#ϊT()Uk-ZHc4szr+r=tB(;M'?:~1xA{{=&)׺wi3ӑ|BkЫ< L#UJI{k DnĂ4-I^`+>^ZgwJG-gGFҖmۑtCU2 (:ߔi]sBZduYPD&Οc}}pTnMB_ zZ`9wJxTȏܳIbqd^CT[*'hZBБ"W߻*Kw7YPѡՌԣqޠ҄I8a}]䡇sHK¡H`CBt[PTFv< U4ztϺeg{~8O/uc,o)|sI+9Ϙ7ƕWA=81ͫ 46KﯡSQ4*= 7t9=uXC~=me):Gj)TՐTSSaEjxmE1h^? !Gp"c<6o `-I`Cgi5ƎZ-2c Vld )[czN/D T A|NrAEC"Ѱ76eյ/Ը}m*Rdm_W"ƴ$&fFm K kE7ƫ2=5RE}Nj5'q4Ѫ j />%X{uM^4 ~#W AGvwCOϗz"Zh (Rs9(zmTXc䤽/:)rrT I cuutn5Y_i +BycS>pFT;rGMHN1Tb0[hۨ:\Hg#;_{#?f,߾ka# (r^[S+;#i@zNOQ!`Q%Jh uYWk'X /&! g_Íj*knT#c2?k$Umy;VUsUi[ՎCж.*s6m~"&EZyE?,#ÏMº7FGU?96OhUT\: 1 z*`Ts>{&)5ctbL9T'ϵk9o J4X[K|ޭ&}"3"%5 7\crxӮnDOoyAOC>fn̚198Ĕk3>!9v{ZcξSN5E*OULw"n;/;"(܋5ߺ,۽ć>xᆅ]}GejtDWB[Fz"dʍh5ܷF '-s--m-uOQcs\4ثZgc 8ҙ 0^Q}ycG2~6{S1<&0W(Xυym*uxatak.쪇DFA=$6 ,Ÿ+/Tu 7d ;`*P%Ҟm窌b Y}v" IDATn,-(ZY`H5GU?:8y&X*8Dak_ʚn," >֫H JN7l)aKCޖJJh?u,<_?Gyzg<ڒReECc1Jlsʋ1o;ҽѕ/N?2Dh3;FͿ_E"kAlm^$y5 6tCFH݄sjYWo^5W3֝N1~&#+QD)"6tACYƹLFUbx}Rn5L\aXR/at*ilIbï)IvÏ;dd|ݶ- m }2"'4 r.pXKwn ]qq!8Tmؔ /\/\{kFh-A;{;6 5V/خPF {g =gs"27owս޼.9w~|8:c GOPN~6ǵW乿xN(ԓ熢\Gv$y:}8e^_"Q^{5~~oXҙw?Ps>)PVPD-rU4Θ=DE[#m,I{堂^(&cR%i϶3I6BOMG vDD[eHBQTԹø4y%OMÍ$(iX"mG ]UbKo9DFO=2vaE%mTpk}=͏/ZMvvGGbMApzhYY=H;Fs}ڥUD?7* qHܒ,1h ziWi+9NZ?UT\qE<`C8S> rc"qE&u&B(cNyۦ^~CZhQy԰"#g>k!{fg_5qj?8 'MqA.n\,SLZ"ލt17t Z(b8vFZt#P9F4ШJ31 7~i*Ҍt|^1*`P'[3f鮥ٺ_q 9R9F{/k]pEvaFڢpe%1y${cyYܪ֛a@BtKj_*  iښzm.Ixe"o;ۉMGӚ>WUqoqo[VƵe-9HkגOzun0P5 n_YTo,/y-G{#O.=SOlm ~nHePanEYw0k8"ٻϪÍ^ab IQt*cp 7,}M4Pk7{߾t4?<֖V7- I7}'H2j^iECÊ맏C%yg̰09 Bqפ&(_7e5GI_~HGjɫظqQ^z9݊ "D1Vs#dWWGD Ų5q[afڣF%T:6ER/}=5loqkxҨ`m$/AMI~=TePm):[r  YEڬB vMlSE!cGpl^ߔl({:DgOV"9EsQUG$4J7g_j,Ni >:"n >Rrζ\c Ec107UF!Q٪22QgEyG |mA U5 >F5:@CdϙG!؜/m\i/ qO|{ǴJ7|ϫ  +.˅CpB6oǾ:N,F9p 4-iZYZ^>5Q-uߌ%HwsKz?}?AZew6Vt\TDƲ4BϘBXACs-iwU1<tnJvb4%gC$vŔw ֎hWWtǵ ##y}5kBMZk0Mn D Y>6qog k (1m 3XZs;.vQ׻ҙȰ"CMvޞ!ޔvf; ˣ 疶u~oRyaΡga]eZz~貵UED]geaz!{)qrmUQյutPQ'n"+ݔ0 4Zߋ$\pmk[ǞyL7vvF hH`4V-.iJY^L^!p~v|Y>E{gWRU:zFr2Xh/Đûd_1U^8Ea0'`#Th#C5iުB2m^ߔ |ag#-C#,܆>ZSw1Ԋ7yGtXutiEQG̫=z$(I#_D5cpb3(ܯc9ԯ80eߘJʈ&2:"/X񛄀z?<)bj'TQ֖ VEQu ފ9jJ, u~H >&C[?Im`tfi<>2F姮!H r9\WdUIx}^tƕ0v@?{N{1}-^pˇ5޶ŦRQΞ3sư!\#MrIY|HV5tGXl|/UE1خBrqU| 9|qvvj'PmG5{?7leI |Ӯ)cYihtfh1x֛pzOc^ՙw?PT,V4dJ1,s19F2 ]WdXwX4ԢVA|ɳvЖ$\p[ꡑ5FVEFaU$Z?˨Ԉ<5oO&4u]g=1 pll=lY2Fik#CDvvm/ɽ%&,/n~pYޚS!/rqX\&;,XTz|qxQ`ў(T8.8̟~S#E_q"be XTڡγ3ݑz@Ի7 q{1"פ-_e/O ӅTZ*$":p1זW!jSU>dZY(TUܼ}Ski>.=cc;fz; \YU}nw'+$~>) B )oۃ b)u< kN!RIk[T[G(RQj %U0QE%Gk\_q%Bjh3J??Żii8J)y}S{1yʋxPbw,sʾñCъ΁R[?g&m&#j-UAÆs_"ƱU=׎^H웑>Ici(j1}:"ϩE4!и%-oJ#ᲙW,7" ؼ68_}wbMlHy?_x@O[*7[ޘzaw4 luZeRmQ8r\{njzqq5NH>Us0PWxygV{0G^׈=G-ob 9-{215%#Y_}rZd|]yoV^~IF``|u__TJI~H̻K|nmECqܖҙ 0Ta™GVN[VjP}MTmh!_ڹO~Q0^{pp}wMO zm蛪_&-WP˾dͷdbjZqΏ-:w99=Ƀ)~Wz)k6 F5(L‚B{=Tֱy[4t'd91%+f)tdHptX=y]VJ\Zcd# Vyvs'ۼ>EdtԫJpC$0괔&CΡc}kǍ7/<-VKffVPf&["޼-ퟸC߾!ݽ̭w9tbACcV¦='vSʦz]^k/L_< yC\>oXwǎφrm%^W;78Xk ]n蜄b5!ڌ7_wpczVuEo Ϲ-""2Hwk|@hzIE/~ 7{Jk:% yl;Wh{Y9ܫ UTAg6庀p>Sv1?,Vs88hkW׆FF0|P5bQ}cCO˴ CqH榧 U #ޓ)]/B ҙ IDATk}6_cɽHc c wSK>4P&r)!y}2e_y^Fsގ{Q0IA@E6vv6z;)oTR8NޢͤOj5GϿ SҒ9jdߗVK?#?~SDDwh/v/K!GѰ&-k`"$VUV!Lp(z*_3 )m/da>a{1(0 vӾʮ2 4Ҝ*įڸ };d+ 3 I.,sT$]onɔLNO;1!{Ci+'+ҿ}(dhBf9o&;P|7W}r.&l5Lؘ^6~JCɯ EVu;IVRc J$]a¼{%ۻcX 6̯(s;I !.yOzlD*-JwE:o q2F[8tx7o+LԴLLNёerbBڳ2to|gE\ή2q<9fg5f uyj/_tk՞k[96@ud鑹*yNL)M_UQsT.w?(sNnj⃅vgTgOFD#u'ۼ)c֒(Pt [8 T}|+ŧeF7XdՒi3?]бHPoH%I[xnn+Ttv(0:Pc 󭭬*őCymkSpc;PRl߮!s TM(QVm2clGqsd92Y"^z%GEDdljWg.)RV7p2-70SS215%Q_]W&Z2;3#ȧ~!qVr8 rd^#jvȑRau]^}_D 9CD?XcIfiAmesqW8c2cCG<X?!exMv &ZڳE1pZ?*jӓ ߼ _{k~ʍEn/X~ʞw㷿)ciA/Gí)ӓS273'fcC@n8iwFf9CySm.e/TlvBe* 6V4FPJgeazA&MTrXe<4 Zf!φOYI篦~EQ 9)UM7HzWDF5BGF޳DL(wՑcqDB Oɭa3Q?ܘ#9<>V%̉{|$w|Cc9t(-wB&A?wV޺<鯋Ū`7N Pj0֨[,(/6*;ϖTfAQ\ʊ2B^VKG*JzW9 Uȅo^lIq㡅C_z X]u~Z^)vX1L7DĄёd%ӓS233#yrȹTX(Cq\i- 9qgdْɑvP*&j{@RasOLW-+ֶqV98)[+LPrȑ넔$-Zay?}gOd<҄~P,vuʞ.=Zc%-#խFWQ )iML+SS&ZAs|gSDd:0?WH{ëtdڝl9[cz;.F~U~$B,KK#a]WdbbT1=9)GJ\?)_yʨcMh?تrЗA_xBH{Aq$aQ爳rֱfoWj'ÔwCWhPn)4Kݪ9F묄FaNgL;(ɡFt+^KQUW(^TILZ`#14PI H ͻILJVV6nH%u[S%SSS23=#FsѠ nnߕ~_}9;ý}yh t~P繶gۃ jMKE9uk%Ÿ-YGT4^kmJ`4F>kN8)޹ ѿv*«2aؠ;0 J\GGLw[Am^۔'djCD9%%q"5<ʭ!&>+Оm][ĠĤZ?>`kL3S2=9%{|\h΅_cA_hPH\Gd#G3 ?VRi!_ߢ'y۹g0 YIj%) 7:k[S !խ*1m ѾƆm_䤴&&rx|,cq;yuezrZu]920%28<8}ln\p`p?[78}1n(8{Nb0ĂSnH@#&Ruqw= XB5}\Ntr %FG&ݫ ` .|\|bc1^F2(W]Fc_?r,"c9:lMq%-y=/~|bS"޽Eo[; vE~7M#G`Ӟk~ַ45fֶBfQ5ɫu :}j2326K섕LAPQy2Z,p$?f%D6v7ɴ%nJ`y-J0*F4r59f`>G?,'F=qS2==ؚ+{r}+ʡӶ3~dupǣ)}òr~eP6%͠XfL-Jg^t[{K{Fd&~3:ӛG}TyF%ɑG{qpPkrҽ֍'0YxO|\O[K*Opy+KϿ $?O[ ;59)ӳ299)r'N-2?3}㧇>e4![A`"^FP]fޭ5TG~'Du;ME1='j2j8+cjea#KwK[ب)R5ʞZ:Ƽթ̈=*a;?n\%|`KJ*tHPi%aP6#oCs ""rSde_X[)OM #_wE9sQK[2"6Ž'*5:-„+xf1>#ߐ{c[PVY,/PWq8Ni0"'"b)AZ#`i&~OpߏuJ,*ؾQd}Gt=Ir0)Z}LX7B g!;{;?ߊ9|~؇5MrC+G$(LJ%:vQݜפtq8`kȫp>"V ~|5_c(p&hK2bzc1ƭ*Z@#ZљnkJf%k^qauEǫ2+9Bih֥REF/𮏇+R/ oViRQr|;pJ'!M֖1Ixk7);~߆8p OZ'8شUngA^VMEu\CB[$Hj^뾦S &~FnvhUZn&[Pi GDx99\Pc1UuBX@䞙G[͸⽑sOMT!8o^U:90U-';V=4zb(Cr\^kȱ0`V)3蟕<ӪZjTW^Sr GSA!?mi* ҽiSHh϶<Бn`;C@fф畹m}4HZ{7*ЩGv9νHQ{UV^E9۷yi!2 PP4p lТs?{'1spC{ ըE$Wm<^eF-(*$>~rKZ @+[cO?67Z{s 6;=UI JVH_>';[ѾG*n\Zd;UTӿ7e-Rޝ)}7,?` 5= eC&fsx<[Jc^SB#̪iZwћ=Nͷ7N;f^=#\ 7Ǫ뜃p5ֶK#bU jzuⰢBsL9C%gW5K0(nnȩ7~XotѼ׍+ =.^kPx>+W2|nw1aPmEɿ%-i{ ~-)WQUt >JxFCYYX涔7y*2Iy~W}p9VG -v[B=ooW6ҷO`39mzγ-C%z[OJ[]lW"rVrnlT1r*Az jjjC[QL Vk{).|cp|X|ޯ}EᑰáSSv'Uq,t^ylj==4_W<ת2c䭌Lwr*.2|^ +*E!"0}^x(lPPWuOl7d716!HUf(l)}p7pM)mt`BE_i}‘5ZxC*9R t'V몳cX⽮~i%`}N+0R#a :Lǵ9~yդs"Z)yn0f^}B7@Um  \jơ%3v:hB\֎>O]EJx ϓ&4 ow=@&x÷/gTqr،M$  sIؾQ_gP2Թoq@=+j2,b/xZUnK60$fcH:]Z^!gVf#tC ?ޒJ9ՒFj MeP+8ҩ&x7xTtʋ.K갟ahK6dȪ}<hŨo2u2gN{FK0".Xq!c2V}C&$B$kc "GD TMޚ2tkcӇox !g \ʙ11n\H17&#@*LIfNI"I=F'TBPq|FrMp;@(M:#^uX-:ΊY(Hꔃ9m;m!LDT콮tH CM&!@ Y~ηaTh&7 dlnJ ¡*ʣ)  Mq1b˱DŽ]PUCIr=Qy1ЊӵkS5f;οIx4m@D Z$u g-ws!{s| eE6/+pwL Yh`íh o{OM͌ǘC@ <8Ρ:t?H4ڴar*sĄ@+ӟ%aC)Tʓ5Ʈ'4EG@&($ET{{gGA⺺zzm~@9aTc@DDA'AB:@ 8@3Tc-(ˋ_X Lh⎉Fo?_@ x$7 XN3p״aq177F''mhJSc(U<<"cW:сp#}*C':=+T47C<8AE_\6Č>y]E44SXHpECA!,8fKpvq֒ˋ3/ATkxZgl83_ZRFZ?ݞvo}ύRG%{rC%a(Frf^TGC(8YA@u3{A8) T{4s -Rh"WUDi OVPp*7RQs d+j IDAT0cRJM?dta*Bp@L9ڛH A6_ߍeΪ.4%a}_6džP1_iv9WJ)+\>$>. RՂ>ORޑFXC9pmGb41A#FnO=a*-<ʹkW)4ϯTj(>6'Bp@/~phXKS"0 6b#|`tMhJbe !17E0ȘTuC.+!ɍV?On%)Lr$͓1 yԌ*sTs.pBQu[cWSGn]9*u~y:mwc!@ j~PH J+%Ǎat̒yc4ˏG(L{m.XKhJ`lAr?(e}}ۦ(*R*Ď˾~B^Dqa"g 77vvHcvoDK"E`by30!8@T:ZMJ' 1"J9) ?]Z.+ 16thJ6$|N;gШDP)5}n8[s` JNVl*⸽ E*:;kCnb|^"ZI0zD'!9Swn MZ I ,08C?Š_$bs"cckZ?DF25rg;3况9}gZmRE:U"s|\•[Vpm=n@ v%m_ K Ґc,8Sܘ/JY7DBrXFԨ9Nh%aH:N>: M! T]!EEO-G9.'cS@Gsw7è8m<.GQU(KqBI*qej m( b  AP 3\# 󟼆a")+l31GA8 /ݡG.!8@T;-`H~ (puNur$dz?ٔ}+B8lcǥ3s_`Ts@Bq'D4}R4mT%M&MC—/%28əya6ⵝIKY_}Vu%7pʍkOa['1!+' M/7F>߆p:VĠ<$l:T>C%P$P\7LS̹M’asKPcD{c zK"DGo'1],/ur +\K1Q'3?;CNU c'ΨЀy%a1Bm0I*4U, sݵ/lH LKD9| 7B)$఩bL&rGcNϥ|PJA/NՒ)n,vcܨ|m{!) GnlJnF3fV oɛ!8@peqVV(/K;GxlO.#uU^k%a? 4:6 a<}8Xr[芢F9ehUMyQ F_n=ho)lg[q%u.1}R|6QcՔ,$pd/%&ͭI:_ƇZ#7)pj MSF4Ly0#nϑ~!@  TڑnżAv֧'_h]nT/ M`0믷4G .KSd ;IXNaUBŖ*RM7m`|>H=17S*6Rz{VB!'ʍ%LɅ@ p|X~続L-r#4& ('^)O9ՋI UlmI}K`hJOMQѰ8@.@'?Cgx/M9ê~yTiIJMvd$1I!>$K`m.RR ({R{yswkW{UHL<rvC|CCj\\ihJg)䀙L̙ɏE$H8=*%k͢(F{lDɶu+<3ņ r X,!@ % iUXUQLOkEAMjwIXPSzҏq =ZGJELiaAX+W{_0Cp7%77 m eƸqJuލ\)x#@qǬڷ#}nzn'nrczmV5%‡!}y9c 9*j0a)8Fu&fψ#9<!+C$C ;jp~:3Ud M$?^Ґ`:9C~Z56PUdxHUɯ >l8."C+j1$y ly??:3lۤ~@;NnzyG!8@0 4ʍeJ៎w 7))BA:ry>s}]+_%a ͱm"K|;eQq䄏BuM]σ[|Sp=@?A%9F͕!#bl+$&hŃ8?: mNMzϛ>YC FX &N&ܜF6 SSME_O!&C#"1T@=w.p4\cL $E31LtH`U^ ? oEٜhF7,{[hS@n$Ma*Bp`0;^OԴ ۠znNBe-10r: c׿fyKR<y9'qn[ŁYi)9Q,`_  &T>&͌*TטUyR Oh؉Fݡ)>* .[j@ x&p|X~:ZgDG?CYr'4{ClC-BkWIX<EVb8{)VUqhtGaW,!bݦ-]cT[0$J [ǔsD9@jXTB*pLҐdޠշ{N\'6A*ci^f'@ zGCntЄۨ0(&psBǑq&Hb7 WpLj\vTHǵ _D( ]'5;5&ar66U;igbh!K Na2AuCg'9j*QAw5G B̻Snt,TR7x"!8@+yKn7&rmJYhܜ`yKMsߔmBS|}t*`Oz\+ĒKz8 CLTJU/Vb| ١DJ4<\v40wQ^56"fL%AH'$L|#mD*4jj^܍O᳅Ao/ۇVZ 7\leR@.kt:' %a1)&y )yʱSz_.Hg=VqUq)3uoYDh(7Ǖ#h/@URp()Rmp9z&9j-cBTmQsVh4Ag hu,#ƓoS[য়<02A/8woޔdh⛎,,6h )'p* ˊ&̢rL&|60LcU+$bIdƒV2'֡+8^Iky1)LCϭ|AZ~xN? u{Z}6gLx^<o9BHUД@y׻k_chɡdЈ <}Dܘ(=dŧɳ.!8wnv =hBSLcPxZ)9J¶|;~$Ќ@ ^l0aŧiɢv %\ANJbPd MiÎzniqҁ:x)%9\%]F}VyWo9[C,Wg}!R(XD]lA46rtlrr(O~'AV4䆚$J Ȩn9xiMIg^+ }(hsozfBD@9W|!dPXAuƒGpsv3)1tXH (SeE"2^"}SG-!H*Ͼf.MHf}|hã @U.V@ dCKn )0mēc 29zIXthN*]rN`<\Iפ6F0ER,7ir 8c08G7b^V5f"]Lj W K]Qwq-MX9ߠꆫ`f(t&=n}م88KRoF8׆/nrBp :2'D\I zIX/LG7b9.UtCκy,3wx|zLnOʬF*~?Hb4f瀳m@R 5I}#Ǚ0 NUkX)Gݭ]Զ bD Mn%5ɔC  Hq?ًP&hfG!̒GFIVWNKB-GbsU[4CMN k'+&ҁz^5$p0vk& I 2ζ 6kbF$!~(֝m-j h^T?*!8@ 8eα^YKB<2r#dA+ oIxUVSH~[5&ibP6*Nmk!\ՓRMT\~Ͻ `hs,BU 9&tT%պG4Vc 0c;S. co'y6>jҾ?F˻!7&C W rE"RTe(L#ӟ=QBetHv0NcN8}\+40q4Rܴ #fO.^*uKC=A\pH/rU)FBpI Fυ%j?5`wNg76/kcc} M1%"cqLgq)@ \a)A2);L!!bQrЎ gqrmI!3L2!|'+!ƶGAR2 % BU)5Dщ VMD4nbq\В,nNQX!#qP< K =WiUSְ3.a9T " [DT}i=xoIXM 2ȝbdB4aE'Ȗ{c@v\y>0R=n'Q#tq**}OcFY/m3MȱI&j )؜V)* LKB%@ W9tn26a,?{s R!@ hz M;8TU_JnN3X6 6$_%Gs_** %\$Eő;Aja/aPq>{Lj.k:GLǕ|=+^度Mݛ .}!(;VHrC2pELq29#3UV0 zD)=H<8sqpyl6>ID&Pצjv=8]eh .v{^Oe9w&Bi-1[ggQY+c0' ?$C@ 18_+7b =&%./Kal\q/$@&L8K*FrZ@g T+4eĺL(u"ݰ4#djdTQ6 Z郟4u[)1A(ȭyb !ۯu7Rk!6#L)P]H曷靓NhCEܐ(<Zqr/TghW1#7xiQo4*c,J\$Gjɑ*w)Am&~x"ހp?{xG  G}PzY 3J!6\|bǧ)zIg_KNJNXyɔXRpBrUvb=E &U(>N_x |]J& &Ɯlb,JVeb1YuB 6i6>D|Y.㯙0A1Bm(T>M{!@ 8:@ 51*H,"Ж]M\l' Aos6^g x IDAT[BG]d(+@Ҥ|\jM*U$X*}苄r0TEy mtIRhP.%UTq6}ꔋSl\yBOSoMTj*Bpo{' r#&/0x=Kc) R?M$|a( Ң^Xh[  , V 8rWH!*+fJ;^5GJE+FRtD|spMm]Ce*;%aa 7` n$h/F&<׫\&=Ǔ`bQ.Όf3&'MҗٖdqPz7V7Qm_UwqHGD\mEI||ť@ fXJ#t]LTZeo7/l@7\62aC0OĘ")0B7~Nm~oBuFd1%.L}b| :xՖ !$q_ r%kZ{#kA^_;F9Wu%+4enq'@ @X E&h5mC q%a~n1 )j8T9Q>),IR2k^ٵ_ENiWs aZ_RT0]\J߃vt1U)m5U>}A'hgg =TT 'ϣC Zrr~_VmR`h#P&H$ &zI'b|lء\7TF9kjD(~[|\.axMV(eaTOf3XD =pf0P[9/#~k:E]kέ1|;; #ŷO6T(8@G}d)7VW =<Wy: P'ՓrhK~&$,PsJ| 9.HP~J#cQiݶWRJM]yuLO(8@oClZnڹ~b~1?>VwP)?#> _Kvt#F> \Dmw nq?6hUr_}LdQClP1ّ$/brT 9$VRIF޲qs kUH*zq~y#R&V ޱ,q*7Di#Ɯu%7t2X'4Mލҍ bHr 5)#qERCm;ҝ,lB@2TۋSAC"ӎڶ2/enZdȥr.\S pXmLz*D@@ t mN#T&6G;WRtBR:C~綡Ҝ뱣96+`X1IP Uє5 Rd,@ͱ8[t h׻JL@XK_$LjOɶ&)L gq9s_2!MXR[(q(wCkS^B$WL)nB \ր.TqUU4hd_RE4Fs!^I νIh8p 2ɠhS>yB;۝u8 !+^>=2s( r('bU@+>۱J J niq]ҼBC q@`R~!FLϖpX1rG~ʦ=›޶1$LUE mF4 ޷*1bTȧՓ5"+q}5 e7lgD AXT&js>7Ҍ;d kB۳8%P-%;~;C@ xѐ69+0QAΥ6HAyQfWSS*W唾m'mUĩ8\dEs<}+ Vj+~i}}P'`'C*%36:?'[ ^ۦ@4 *86c%)WME@ xF+7PVn(!v&ȴel'|)T? D[#$/4EG<%ɨT9IcҺD$8UFЮdMnxp* K%>N#8c2XJs alaQqQphi3{>P o{pv_Gepb7ǛC AxR(R!r)>RlaB''"$lge2"cbE$87J&"Xp|4wOsY|bm$ h{LΦS LmJrի3ήh4tB1i&{!>@ _œ bLVvUƱBB2lI*7Ǝ۳TLx>#*J n Yg?`b9ںrdZⴛbOɝl IGq ^$T}gL7h̷4QK!8@{݊)@@yQdoHU.Ooٝuh $lY J#$O4=U"bs^`ЏR9%>arC~H )3 [n#ъNG_6T jp,xyߗ痴ַ`'s9!8cu7 )^TA)*2!qCaC/ MM@lQIJDrK=EvNAB@*$"UkR_D(1Hd]4i{{sdOdr?rKmz9T WMbbm7ĚJBtJ)rI[f*ϙ !,rUwjCDL%1XB$l&RVA&*Z?)}ÑŒN{ZN0/q8MG3wxMBQ>`M;t2öo) 56USW\!91Vp`:^gQ\۳`Nm?S<u.*yD>W%a]]}*n$zI̍&v3<4eZT]@.|;6BZgl @ I,RhƏ\* /CdE3$(wBjn?qk83Hz[h.C sN&42TEEaJv8.*P\eK # 7ڨ8}3o_I7ǤSU';-]ASB6Le $ n=8nYPI\D fyF!U- Tv5cR!?~`80Ha*~1S !OFr萟| RJI -WGNI; MIU^[teFGR@GBn4xޛd$Nl(Nv@=|C-PW09 B"16 HL`=i,+im3I|(0L+:?::PjuS(\iK¢ssD#s-V>W>8^AHN7.'@Lx0˳BrHVUr8bۥ۟_ , !Wv//KJyYW)nQDKȦR uL!o${- kc "9)7o\D ._eQq(\8۸(rUv>pQ2(1H 9^sm}ed#YQUɱ|hdvZlIءQ^uFLښl 1\[]Ł1(( )C(8HJcFc )"gUT廡uF TH !g@_W`{czqL*P_Θ>Bp{M*A  ?X7*f{EsGz M- k!C>5g.|j r+ r ΀*0AŁB (9XF o;C^GIʔHF^K¶}د dE 97= !&1{"Z h?uw!!*@LR(.x8r堆܈.:Ӎ\S^]#VSضH*bSU– =s 5tPv}0SřY 6DbhC'2 Jx!8/BKLL" B15mM? rI>h3n|(&.tHTq`Uq"F 7PJ06 VNRT@6z@=" Лb9md"'Jɇ6+rWXQEkw˓3X师6vEܵ!@ \o'ĉA |Fu叿e.8ZX5oS@^5t}I\(ஜ‘{c s YFrP| A%/'/UTO`Vv;*J966Bei'RKƀ@0r?V>~\| "aPRlh%aC( 'Q#)g5AK&kvhMb05Ǽ4HM-ӚXyrqsoReITHe4JkPIA$ɑ(A]AL>6bT*#De[`r/uL9lC F +h7HI-$͡WAIPI؆6|$^}ߤ:{FTƿ*GlʕSDkKC"!"zZDu*#rYlHra8DC=v#qqi਺u#4 DZTQI]gdBHUuL奄S&h,H cۤ"fN$@:TUam҂-DZRe9Q pM.҃F:hPMy/EѥyWNF‘ &9F۟fO*gN#'q6l}{k瀚mGX|w9_-!*@, 㷄\3CQЦ7EHa‫$>NĜ. 5n2, " (y|8y1ޤToĆpK('Ntov9sc"Aм 9`J/]DCqN(j3*M|C Fv,I?ԈH[#GmpU) MQ\B:*)_œQ!DEQRl8u|\v}򼔦VqlϽ@O{C'5x9ț+Fr>8 Uy78:Z/yd#Xo0xGCT ^8 жk.#Sܩ8sC Fr~pDrxMrG#@  _fo &`N6&&+NÞ0Rĝ o, [l!%0%]s@[ET{dCs-~`0'? h^GhPW4hp,J!6Yw]vWy7zE=WNTvNgߩ@`wPP(0FKlư_rވ@^Ehpn2o>XJP]q9UBYrSH$A*D}RnnY|a5UA贳mf,,yC.$DE $Dq @Ѫ}_0zl Ƨn;'jvgw_2M4|f#iR>rU`p(6\~V6q)!sGso$Wx쌄e7- /11VH=[GeRj=uG]LҨTECؼvx6i}AC F߹ns\!z&BI5LG[7bGօ_KŽB):1 KHܱQ4dwkGnv&AsM?uP{|ۦnR]kHSރhPuxĬT6j"f"Q.,#+BLTy1ʻN.ۈ1}U5'b78Krb`ùv I{^s=rS}a`cq?@M \[p 17Nwi]lHR`.v xw R􍞱J: qΡzλJub{r<](/(h*8)Ƅ.| M9[vae#QN1Kh ,`0T*zRUQLkG2lSQRaI젨7"O'`#ҟv'*d'fkl6AZ;}vT*=ZIRNsQ ~w!Ci@0wnD Mu$9r0=yYK*_'06[֫Z qt`@K1]]&F{|{ǸOˣxqX@9m3$9NwXᵙ0x6Gܠrn$HvJ)U4JJ}}~UzA\kK QG7zFΊ&X(>ƾJU)'Ie\ ' x\>*|b 3;ɶ H@BIPqt/i/ ݮW# 48Jv",NH6 wnsUF^k3E UK͎qo7ʘPx,/QG펾ŶCFhDL Q! ΉyZ|vS]Mpc k'0fc7GQUb!?GvcY8&*r5CsE&8褨A Atd&9g^ TUh8N AbJ#dK`$-}~;OAE.!=SG?uUMqq/7$J8_4V!\$,Em`IzFPPn\B%8AkKwE :RehFt%I /y-פ +`V?:&%pPx3ޤȎ~&t46C"(CES+@TmjJȶs "/2;Zo(FS6rU!AJ-p(@pOR<; Q"so'ͻu.# kS56 ƿ,/*}r86RaW{T;)ɁɃ$nQbyb_Z *{ 4Xn3l Go@_>@9\ JU[pђFHDyQ1DB0 lK~V+ 1IUonZ2sIBrd$N;pQs@fNEfZgne@윅 ;ìUM=_@@ mIX&8Gރo:v 7yVZ[$)5\DCc'|T\VYp Kφr9_'ӠKTqd*&ED*{M.LdbZJ<42A p`#9XC$ckC؁!/$:AUq0t.o;a#!і y/* :"֓4ƁL n,1kې?ʗCS0?4U}oEqP{;{jogDjiSXsb3(jooIjm*csqTJ.7jYC8s/Ǎ0(WFRH9LO3~~!QaSJD(2Ӱs:['$ݓ*D{:7o~"!*@0MpsB80א7zSeĀallN}fGj hZh7F[BB"`C|a2_/n!8 ÷/%Zc0ĘZ(ōbCT0, hN` } c5M13*Lsj0&rʀC?ehq,ʆ>pX9-!ELlzz^{ * !pCZAh \7 e&(n.sY TbOc>%L!(rCJX8".m 7FHr_8COeq|l%R#@TkdzN)TqE I@TtpC !hK:9ި\OǮ0<sZABhk* %5Q^7&YȏruUӍn/1!-ĭ.,h4kpz[EJN@Gb$ @s\z@-m$Gw^>P>nqPO]eSB֧HQqQ >-"`btT!7.f|ϾY%%&i'!U_]s:ABf%( ekRטNTtoG:Jg'79gLS"'L"3\/j}RI>jJ#c"Sq1lC>!do3S/j0*!{]pp"6hoȤIWq b$tqC@ `ķ[jY? XN\-eM) Z bYf*:1(r+#ቢ ,bnPu3:* 8 צjzĘBÁ}=c/pMiVFBr$0ݙ gK~0FPu;T@m`0:ރ@KG~rB@ `cwPJJOtl&*ФEMIS%c9QKv; }LKSʽўSlBc4_ uTqQWN#'9\!3`EE '#<1FR6r V?1Y{4]$0= ySq^'L;*)TC y(.BFF[S:䄒cέt $ltwL!`4l6ߵȢNp\㉏fSqNDz# 49}bhߥ9գ"o41j6ñ1t  }}mصw RF?xh"p>u۞V~gBZ!8fՔl pClcJh uΧȵ`) jpkBP1`vуtU }XrN$Rډő]@0C^HFo^I9A$UDߔqY̒&Ai.z[gsyxaVg`l}<n$K9NPJ9su`D@USr`Eَ;ki[hk$l04EIPpuV$C HxTK ڐ)*g`^[*Xq_z@ZYsGcV Ő$7kyLD`P>vن90|ݭBlu֭T1;Hc4gvx٫RJ~bW1!@ $JL A1KTI໶:.0+OzF+9cmyg(;R 3:IXdZ!qWCAGЪ vHnl"n!1z;#3yp|* s:}}7T"z(2dUr<j brk P7l B=ި8>J)yKv`HU!cDGfU$aC̵34쟹zm< i*}*h%phbfONXǸL&)cg*N]!8:ypҒPyX1|9$TEPȐ!<./Ei4zI/3F丑& cz\B䜇f;:yirqwRJMTiUJՓӔW1k#3'Z$H n{4a7v6MRF1 n >PW8J)u~q5MTVm}6?n$fYI o <0M?}n;'jv. ˚dZX \+'矤@EJդЕ!{׹8ܶӆS1K8sF$bpgɇ1d !Q@cvIAb$HN4S2jBU0tQ q~q6щ5QqkV"GH*{!{ .˙\4"O̾zIX,˹Y\Av^臰1/ 4I䱁 OmVTQʣ0[b6mSHr#3N݂^u*>XaNac|Üj1u1΍cg+Pq+T5'áܯC hBS\ցӿ'jCn8 `lw :k:1Jn{}P13.ڌ iǑT= _JiXI#wVz&:jFbONJfO־5='*LsVJ۩Gk"$㗏K5QNi[ aQq To >0CI"ahʶ~z{ $9n-9>WQx\$U5t8z"+`:98 *uWVT1bM !8D] }:%'rD=''mhތ 9;'u<`) ʚEpY˰6 oNF09&&vMcT)9vŦܪJƨ0mɑҟ󺈵Ё{ $ɑ<176.!& ˲\v@z0 zJBWSۺE9sw(䨺;7[sk&@?؟C@ @zmZ(%8ōrՐ50KuLO=S&`؞#&`ӒH2 2Dv`ވ8\Ұk1:GeA۠6F;ȨJsOwH{]sJglhnb7&I69U6J_W+!iMԪѝϤW6j@:jIl9m .r1ph@XNx 'YEtf$G 9bm Ir$=uؠ Ii7KzU@?(6 ?&a,2KrTk1t= !8*,R# ~]rcisJ}HT$VhDMO1y7s [(t/nNsUuNeJ81DMT,2֦uB,7czEie8sN9Txߐ:1eNdZ9͞f!qRH;9?my,Η8\P5b0V)RzQh`BUomeWṔ͍F6u/5Z=$Rp&'ŚJhe4۝sX0U841k0F+t6c8 &G/7ȌFѓM awZLS 0$&IN(@I I\_@7֮z**k,P6ӾDmrd73à!¹. Kq IDAT߉+ D7 dt]cfyUK? ˜&#kCʛwRJM8)r44"DN0/KQ16;ļ8k`6mB(HŁ%jLs`۪=sglN@jn6I0!@ 8Єln%n쎓|ix'TH$:MUKj$%.4z;fIX|\ǓIIsH&6tPfdT6 7=,&Pilhj 9=s\k=`D'dd( "7 ~־#&9^ֱoo8H;1ldTj"'C8ӌ5PwA@ GԃO`89'Vy7 $gS:GoḬ&Ezx90btR~6IhMriLTq'yPI@kbd$G,NIQ&+:TRGp8ڹ̕+U9/:k-@ xq6f%{7ݞ} Uۦ6)dTn\uؒ B`v){H &:R=Crz&JO6m=.9W0$lEjҼǢക/X&6><$PIGT;Tq8&t"c ~8!q6$#PBpgGVO,A v!6|C27y?? Q3\걩`os8iV4q2^6pŵM9s3qnZ85En0"T  v$G$ݘT@2=aWUr:3v@@CBU< 64{hoCbX|f ;9F}pVs%"$9 C oNDGܔҍ =0rjT+NS5n+ZǯD 0"}1VkyF4ѓ* T`L5Xy.\ҎX#رJĀˮ&E';Vg]CAHp: _Ll_L!83꽟׾'4gdMRJDQK¶::ģiQ#oDb2ȡ1Xrjpo0>v~gITe%Db_?[Xc ҡ}i%90]b쿴nŅX!qҖ~CCLFۆTjg{W{ߐ*Vm݃Z'{OUnTJ@ QVIz8vѷe_}K/p?&9J- ˕G"hD_CIfב>\#R|I$QHq8&67RJ}|3iP3j >JRJ` g?T1*yc=,b\s[UݭhoC*p!83ݓwNAJ$ޮo#;uLv$T-c! MiQK \O5I4GN ;W)YeP\DmW3&#q}P혹7Lp8@D_]h__:v;^kJrTS䰅j_!9B6*xn6XuU$Љ1\DCA0bm 9 7r4xF#{RrcDKyx~qvvvX=Z0nd IvF܄DWWIPxx+I t#-om ?$8:ݳrBWxuJ5?@L}p0Tպ prN C-} Quxk.\?KsމٚX,b"5@DрU~C8ӄWs뱓\VN(yznHtnDZZ{TMnJMRggv%(83#y\,(ETZޣq")oȍ 1^sqLWVxƥQNJYzR Dh*51T>*EFKpz`xTbjrN ~SkOrC`66۱9IG؎1w˞01zK+hmj$[#YC8kIc\ˇ] Q 'F7>p&- 읒_in6$9.1{0H 'yApI!BĜ %#2$b%ȮmǛ8>+(†YQE۳Mtxf3VNrcRie+C;;u_za MkjͱyyV .8T*%hm6sms{8 Ģ?!EFΛ)SXj&_ 6%aX= k.Lw?CnI>C*j:)Irdr^Ъ-%<$N1!L "tdsؖŖM}k|.Ωhx`>+L\`Bs*I!:@!^N!ܷryU0dbn^TVc`$`˳Bph#JA{ 9L)э!_4CAeS ,K{;_Ć \Iq󚌰%qb{%[;3[KYDHl LLLYUY=|CtWeU]oFa>M+ɘT^[RžH-@A~5 i^P1ɗnHG8DcJ00T2li$C#R>$9J/)E]k $>gb !s#+ё %!Gطia2)%%;$-Jrj152,'8<<<o f9߀*lc<](xؘeɢ4}/Or3aLDRr DUC"ԹwJM7c:}4y?rϾe Sqf_珞ǥC˩}_x{&Z6j ?D k569kW\~ϖ}0.#lH 66[q`ST$A]- "XI m}!/l"*c)q%6p)| 6e|ZlGuۤ5KAERT+U%TyT IHq9=J͖-$!L:!L ".j 7|%ĞjCd׎Ǟe\_mnrzR""L ݿ,j *b YYm ” Ij?;K +kO+ث$+, 0$aӿh}[ 2gWD%%-P$߀J lA˥Rz&VP-.+~#Zm5$6O_>"3xCi˄Vuvv ({Q)Q &(7\Z2[y>)J[7;y-"EmT^[_p'_¾V95*%LH;G^(/r Ж_$Q0f)W[ŋHMÓ&Yâ^suUy۶}-u"y S~_Hj yx&W߾&A\bP(+4$G}w$G$Opxxx9xE K I Ղ\pECh IDATQ~M$df<'0q>,Z.26d v:9EХ>/IJXxWda!ˇ`1foO4?u &Z|.#N"(DUaa9nRIrd{HXH; $b ޅ=qF 9Pqoug{\$ΆQqGwsPGNrD6 Isv$DiBSC͈:9c/b7{=2^$W+ B#["CjHt.Ha C歷'8<<~`C dQ;G FhJtfĞHvSFmYpQ4[\ N bqd8ߺ~i<2/GWA T(rlfȷwg3i7Uq*rysgFďז99!9=W0q>iZ!Zp ߲}*lF'm[ghä屲rM\S+OJ\Ss^HqErDrt23qy +[7myѡ"9 ~N&GmNC֧ $G0SɡGdT%/28Ű0F4A&"Xg] 4A#m `Ѫ7htOrw4!D"QA%9BM1)NTJOpxxxZF%, 'rl4Lo Mt0A?16n(L dWsk !7bGj?JJ#ld"kIc/ bzbvB!vBkF!P!t1 >ڵi0rgqArl[࢙t mϷA*r8umDbekȍ"׏# 3ibA%0aLl#9T)QV̊B! :&966AOpxxxJ_/*O%E!duZm  xBhobԹ`0AO!R\?; vM%ϸ]2]r1+ \֕8\&pk.(o&P3}@Ũ-q' w1z iF.HCkO*P7I Ά'8<<9K>OwO!ñ0**)\AEŽΙ3T]UdŒt5S9Q(Tɑ"9(xcWaRH:ք*{NVtw ϗZ7kO_`bsʉP&5`ͬ7k^c"RaPB5zAMuI<fA$GyԆ4AM 1=]aF$ObD'0 Gs-YIbAr'8<<Y3ce&jc_+kF:ό}0C5dKJ6Q)^],ҳ&9кPX5To RG&82`(_r.BE2C!q7t rzZdo:b$;ɡs0hsso_:E0(S:#!I {grMvT-DN [w.([a*"=YЊ_5rLSvvEPex.U*5!3D ':̙ { ^&6Ov\HTnrdD07nmӲT@,/ B@`'kJj[zww{Mi \t^1ɍ$Xb\qCn8Hs#46gHpS#@?f>u3VPȝ68L9x=?1q8P^Y.&VhQ4P.I epQ&ZПq72!IDAiıמK)op @.lU b9C%0a}! /dAGev CjX*NJOpxxx =/ͧBOCRuPFx+D*Gԙ]숍!* &u%ɍG'7 Աp -i 9J1.Zk(:NMrH&J$jlL&JL]y>X[O@?r>ɶ˰ wB6nnu^͍Vlmm(zYBkDhCbXKr+E #JImTM!у'8<<<ח{30Qfd"4$pDn.l_pڽD>N!mgPN +rM}/ +\Fz+ܪIv̏C !Q 9LnqNAV-!rAMw .pXӪ8V3(lW^~:vݶWlxؠ-1J5'")7%5ʣFƃQh&1َù9MzG7M" .jxlR|HZ!"/L%?rO| '07*\bqHݬ&_Zr1r:]OsO"WvdLv> REwɡQD0QP`[z{J_OOnݝdTA+4bf\Gh~«.;DP&^Ӂ6<)5t=Q*[! nRGozW^tz132=/<v*5ƞUR˾U5+}Ӎ8jI6.+}Y-"ABHHZ5yQܓ\ ?Qa(/SӒ~ׯe4 ~^Br47 *C01' '*Jb!>V2OrH u-d /%3 RvۂcyM̴AA *WV0W)ul!aakGX(Zq4DylM횴kv20/&(LNrdj{ҟ2#sF,i *TyxrcPMU.@pP\}Į؇s= IDAT#;4AWzR QoAެ*z3Ę)sJM|48%g1 b纫I6.RLra:C AjAaiw=cA;k\"&~ t/0]q *E_r* ѷ{>mzǠG}"9 IfqW{4aBr|$"kCs{GX3D ms"> Ʈ)2"CJNА,*Ե ) Kqb s@4IyPRHTA*+Exa1PioP] d%7"<^..?vݮ@ z"gZh`z"v;a v3Ꮧ|&&l2B#yT.Nv8]o:V nóu|JWwF3SD1!(,Jn|V޲-FMt &RbT޾(| Mؼ(xcH28.DcB8b7ӦgQ:۽UAf2\+Z xqJsV4ka`CF1Kh! '(g d$- |Q.';4yC>KɖH&5 v1qS“v%D84vu]m2B(1Wu!1!RP޻ZL< ]JQWP;\+߬!+do֥"]E\#{Oٚr/+I/DUu*Bw0i>qKqC_qM -)kG!/0o# g|,'OƮ)tUzLLU6]a8oBr8#|e 15aӂ(4})>\;ʆž c׻eTQ-d$N a.7Fc@Lz$)IWr1Tr(H#B[!72xc co ?jm7H]UL.m5L0ꍌ͸撶qalVfabͬ9 ;.b(XGr=ǐ"bj~Rq$du:\^aGN,~P6R ‡h5B2,0d)ELONi·SfZ.z.TSdl7Cٱy\`&-3aQp%iqȠ lJ1!935RqA*caXS4T䅳vJ1CErz q$OpxxxϿ<6%lJ; ;$,&I .wWǛ]0lmNedMٓr'@>;Xi!ܮTyIr~C㙒n栯p[(m+>w0Tr`Hr]n0j B>Ya袵!vQ,>H0\ǑIMLC!@Gr(*me ٘4 7M4biD3]UMa2i7XwQƑ$ C 74ZS.t1 `n 84#jA3olo])j1 ,\6y~.tH ~!9Tqhcw#ˣMR=8 ⎸TqVlwVACr,f$m}9E(xJjC~.CFt&Rj7Xo-L\YA ZGpg?.mOCq:%?qeb4BpވC%D:zr!FRԒ= `k,nԪiՊ0. 9lUIC ZJ`/Ov1!ܞ*xf:''9^lGEdyw'gc`B36Mȋ1E1'{Qqpݸ!z W~Fk9J #Oq;"vf Roj+;ʀ<ёLG5q9̆d6$96QԢ}*vJtr<Y&;Mv5x#ɡڣPЅ)MYkBgWH6xã/Sd?$G(fV=bpbK/zM݂^ǟc5o7e;/gRw<)iL !:J䚑.d~svk$ X tj~1d]ӟ$F~TvU+cCǤ%ۋP/3rR )rDOpxxxW/ !I"P=ҥ5]U[X$5O,!Pe|a@o:`%;\LU$eeN~mI E{1IZ޶"LBLvm*G"E_SĹhDa% Rxxx աbFMvn/f hf.twEr'8<<< $ #̸v%A-F)YF(0qe3__ 4ͦ&I7 y%ͨNIQfQ栞#lجCCGÔs"2A.AeAe^y$=^f$K]* b`x5*-daS\Ö,im"E(9\VCnW^*0HsP!tt|aϦcuE@r̋yo9tu"=dԞA_A$)$GNg#?Fd o/abҗb#s,ACF<<<,`nWbƖnĸ,)dOrȭHA\.f̔?D9rz:$pOvx܁ RAGL8"9DR=蠦rxã0R Ѣ'W?2&Y]T!X~ @:jd2=&./m[ pHG,]l6g.f$^IrTCDx8TM$2̋A^|yx8@U2щ!le)/hR)Ȑ8SFC y҉INdX kkk5@;m!!(Qb=CJrA#h iqgi; cܟ#»j:_W+UגNfj_0h.`c8Ν,$VceArpJ ;wSTEn Y-nM]E_eVqlK RRظ$Qdt0۽K/-&''q؂`rhŧ h ?+E%3ǫs{KaHUg({J§(`(t:NN8UՊ»ZfwWf;E;O8TpچQ;u-7{eu}stOa`8Q?̓ͦC5Qm$0q09\!z$xRyߗ 'D8T9~{&A+lѽ&KK/a}}sir pdNr15dx.hQðOvȎWcl1HԥJ&jw$GQ)uO)}&9o-(tS~ *Kw]NՋ#ʅ0t9 qdm4FA+4$ĘJ} 瘿4N ˣ;0!\Tu =E('J[ q!4@l ~+g)2LOsIq#[aX__1771g8YN\m`aaXYpv/R eYjTT" R14Vf)&[ƩSe6%8>FRa5,]캤|8RoEI r0q=%lU7;|~0y UŚ&KKWuWbmP%\wV0,aaqX,'O`v/ Cۡp,6#Lwg;BTGl8 E` &./}\_4kwxܛHI]LP VWW199ǎ]R1 *j Vt˴;D!tP)(^h_Hr}#/MU.Ca'\B,O}G`{CRV=& IDATuϠ(e\9Op bYsOM?M6Z+YWH.!Nk|>zokicMoB93vW?p ߏ(&U 肋1yA H-$xwP-\6۝6c%;[J`ˠlxkjo|&\׶bNI6x:r^+uW5 Y4G jN!3Gy:6"cI]5qin4SdAEsǖ~z.<|:#9B&1\3hՉ ݊ ybh*~ST+Bݝaqc '8<<ȏc}򑃨Tf|>: ,VV%=Ve`dl䙁X˜Bn2o<1~duY0e([D@r2ɚ7hFHvaee%!pI1iRFr0}vфFYb Iy®Ky UOZ# /2djA q} i@`\Bpi5"Tq صh;.b-WA" ]kC(K&-l˦onIãFјIܸ_y_|#-F}ӭWE`qdAo(BڑotgMb|IByPSĻir#o  ĶM 8y?;%m#+LkP͏'ٽ$0K 1sZ#‪ %Qצr -j䛢[!Pne:؂yb{cXk3)8`αdqy^ڢoO<<8d͍:xMQCF3P?#GHm)zx /OroGGf MloE:Q!"X]L=e^R/{J [8#)^Ubvnv2FX*f-(W8t[ Yb~7@욲qN,yݎR}e%v+ᣏTh+k_#em*vbY] ?akU;5m6 ^$n-'+<>xzc1qyі:jkxOs:"snO`~}=ՄP /;}=WU+~̙3g ᱧtu݃i۷p(0WqﱛI`j.wuX_]:/.݅%,..&q=VVVZ?Lo^sܑFt c!í6M"%@[5r`D:FGXõO}7>c²műhw}Ws(1Q^ZZ199GXnB#Gnعcܮ I6is*Ӗ͆0m߁a2NvlŰɡ=m6rڤwwF;yw';^Ce{&Yä(VC/<3isWw =Lp47sf'3z7ɑ<x}5 cD[%m/?yG^g97oas1LLTQ=#G>CAV0l~ `e 8 ,~8)-z c(=~o'JV)9.m, Z}+8tU{67 KQWQ!e'q K(]g2W:2+K* ḭ/bnvVRc#4PlhF5<AGuF-e} 㺱qц 䰼OLAGujS5Ԧ$~ycmY뇊1*GcSQW}CMr.r8&IO~|Q=aT*UtVk?et:ۘ={w}67h7V t]TN g9, >s˰Q-2^Ak%&7LR8ؖO#ʊh60]3pJ"FFl\*H g _XrCY(6Q$u+Y[[EED 猥#vQDgZ1(]D4 @IwmQ40;\GdJ-AGuWR3  ~6n߾NgAt:[lV!Jbk庾'`ɧ0lR;mmzWhw(fnbi"&''177˺dPJM?OW ^6Vnp+"u|+f YHR$t4 d*;m&ExJT+ByɅa#'>* wapNzAǴdhn6Q=@jghmP9hܐ4bs$Gw& C^ETwl~Mt:۸uksw}&&06Vxƻ 1 gpQBz̭>߫ssNOL۽!ы Aa?l];)4v_,9żGmLY67TaLEO%1e-⥥IOWo~Jet: qWXǭ[;t:V;H< gycIjލ'=AJ="VtĈc3$[M W{Klh~d~7?LT=ŃKN\ q6g$u6> ʊ(LƏ~gX}=@ ]" "^D-F3W"=EfEU~{A&(OCpaN1L⠡iHߡ@A O^1`X "9& (p*FFFP*ƭ[pmI>[ul?w(5ȿ E|vV1׋| γ麤]Sd\aU#6TÑ/~pS\SDu'q1ҭ f 5\8+ҫ}֬JLJg+0YQ HtԨo]dF[e(0CCK;@70vOSʨ ӯƅ.CEIBJNnxRHY+*򃵎-v4?xUTn<ڡq۱ʭ[;Asv >Gםenes ̮nO*bo\@/@ʮd>gY0V?qy%qto00Bq,2V[A?VWWɩI̾w &xUމHEM~YQ$$peYÅ[t1 WGʎ*'mYOTAtOrէ>UK6E~O0dUsut53 }xaw ~OCGw4ć3MF߿oNnuO// b̝IEIXI,)p ,ĉ52OS>34ɈbӨ\[)F;i?]Y?j3lvG7/ vuB_B"myT tq ?ɍcf` $B$9>&)[ fE{,.8II:o2pS"wC H bƕĘx(jR*Ecre+7G nw'a/^:aY`(1mFk,Pzc~GQꃸUOpxxpx_z{1}nTJV 8p`??}֭[7_c(VWWqAw]Bx|.N|.18a+RSחvzf["rB.d@XFKRe]/а+dTEL*4_fʬg҂!$*75,u:2%x#6DuW)_HѶ!rIͨ-H!:$_0j dg#z5Tv\~zC?{qo;~Y8GTE:MvUb6ӝM8I?< {ױo_q%*7oz)&$ʠ'>r8BRu&Ey 5ԿWǍ ܨp)sNE@tQ`&AzQiޥ? EtJN?r9vMng~hII.B$6<90_3 5ӡiI,nzoH.Au]~{\i<̠Q!ȷQ;BZKr$$E(nc/xxv>6FnoN?={lBb׀BaO xפ(UJ(UMdzavvssܤ!|!R kA70EM WyYE8 ,/¢dsD)E0Ao^7pqi [HvJFinwQMr08LRYevtlj7C] DE5 cӶRyǙ>8+[Y9#-CpSOgvحdngn8I혖们"|3cP-KnLA [F(fH>[NctA̔?˳?jS5P|]x\$A:Zyll̸/cc5 flqmRxn;0Pc26f*dW_ H;7ޱ'STͼmo_fM\plv]ՐMpX5;?Z-tv:MhB}&az2^Gx/~=c!#`eeΝ~bo̮zڢ,AԃxLWWWQ{o G<F&qbCp>JF[t4`Q-qMi}W_1.tڈY?&"SM5qYgފ\Id}PuKM0R T@>Ɩͱ˕{M Q^G^uS+u1%+Vc tʒfVD%^6æ`uJrq@["A+)F~2)%}Ѣ[>{*$wT| {4C~w ~1Vo|m $62ְubvnV_ɤ47@F&x q IDAT#@HȬnQ3.!~g P.e8ՐU+JuaMQ6P?`VxV K38\b(Y8ƈL a7Esd|aӆHgK1yەH ܹsɢc xE0&SL[; E*3y$)܍FFn|^ᅏ>q'I~u~`Lǎǎ=pwFWވMum 0HTA{ 7@B\F)fMA /,zq0ыX__c?Y3݆-M^%(V m)0/ĕAq`~7z9F\[Rn?Ev=Tmp >Ǿpm{g*ap!QtiNT$Fp{MGro&ժf` 8{,VWWq *WPc% V(ѺC}Um rC* Y\J@6Ö"^]A;=%Z2q?!qHdi(usuW}â*c 'ۮ?q*M0 Z|)j-=V(9bQ+8 qqq׾؛83ۇrx v;ۇ p·Vrٳl${ ws'B"y~c̼ԣ >Pw< ғJj(E_m=7X!`xw֩M110 9M0Uztiyݔ d mP.myi>mC6T o]>p=T> P. (xjm;)J9U$ǹ }:qpsddSdS~8 IQ/ ׌J`}ޒ~}|WҮ_b(Gy Oh 8'zǧiFnXn5X xča:"`1;̐?(- |>%'2s.0H…j64%# YwlިmrCVb$AB!EV/&\\\(qXkgd{F0<9Ko# W _7KqWrE6Qb!,o5 3^DǡNZlC[S{(Laav [նPafWm$B94٦|8"eOiw~[,EmG+pW11I.=ڎThS{ \btb^l48j ZfYJRzwдm|Tȍ_)σ>?C PȢˠV-qCZ'Wm̌xO&i[[ҷ '| ^r=T?t:L&X,X,+CP?!3Q76++&5:]8x dNh\û1<9!!YÓ#BEP7%Q<.m…RFqAIalTiF<.f-c+=n4Wmȫжړ;F37M4RmlS%8Vd6mG6'G)%/?1Zw j  x3xP4z{= ÂT E8+5 E1Vqo'KYŔ9 *. zB3fOf6\aSΡ,E2ffC+Oixj){g5wSi%Z5;:*L~UޒeGE+vo &mжE*(8.\X,um|ps->~ĢFPVQ(BQ.ɧucim .gH0r̈řMe Oҙ4ٜlӞQk l='}w~H6]!Y8BH(D ̨70XO"TmV!S]k|ڂziSiP*FL[A ~?vAHcI* N1jq>_QVuKEb~Q+,ThCjOZ!fr^FvC%ZHXlO=Ⱦѽi&\l.j; vټFbShG{m-cT%C07wI4lud>RެmRp W?g#rA( VJmV5! W_[)kЍJ䭤朒s+ +J HԩdKbG™%9vGIo9|4b`ܲR% |y O!mXA^%9 & ZRt " U!g UVL/wQfX=|rk^ ǖPD=%/h^59fE}v>fCmi'!10H,;Mkjƾ1-C .j?͠I;zmlsͿm^ {%-xXT*77,cm5m[ z& JԗW? )xjYF>P@ģZ.}|(xcpA*9H$ldh]<4l+FfZ)-=OcxhX |Y@e C!7h,/G}JÁC>:;cps]1tH.);FJR_p׾(Օ!O8x^0E0A(/gp3< ̭4n_Qz :R$>x}A896<&/T +tv G[OT@hbp6 ǩ E} v;VwjCbזͶL+n}f1| F[h↺-xz*)+G+j v~¿Up0-Ѯo;Mק [ttDr4=g ?YWp-J=t3҅9pj ~˅h$X e(9 ς0iqrT2#=TR6'LqBE`C+[RrƯPwMM-I1|tJ8'FV?OjVQH36K.g G&G1,ۘvD:"06v3e1a* LSdžEFVt+CȌ!8|IĦxRnlCf1I9R80Ө1F[Տ-mb@G3t]6mc\=?abmp9*ʹl,#w~?UkFp$I/HzͩCWkҏ8]A>wŭٖ.ùK4ۘ8! QԩodF9_$Q,!buqy rJ}F_g1e=tA1E:F*D&P6w4u*ig-FHb`jFukzaBI@@&26rw0l h)صɶL$#5i/avY'i[ng/O{ɫOnJEsvlXۭ uv!#:87ق9 4ݶ0*ÒH&8s9ǏcvvV-777#2-Μ?>nyĈ{K$w^T҃lÄQh #D:ˏ xKi3K ypT| ۘ8-H%-ܾV+d rMD.D(=|Е; L7 *G *-1q{4q8|QpjT6}pb7vl9l ʹv5 lIF :ftE|v׈N\^]nIR+MJ &}@K` k_^QkO0??!=ЕxqV"8G<ʪN(9֖/O,Nz|Y+!7_r 6HR3SgARR3ۢ*9Z{* Bn3K:'N f[B=F]@Avo}\0B(*)l4J,n&Rޱ e~e-ڵV)R!x|%um_# ޺bۮI1g\}HðcaZ@tX-d+ٲDO VA:p_^]6l+&Ƕ@ߢm ڦE|WnsøWv%tNrH o~󛖮%# k9U[,ꗤW=[T%U'.)Ԭ)6NzͲ'yj5ڦx3 rp"Ӻ*gfӪB bEP=ʙ ~뼔r% :ko*z6@R7H #|X\X@6A,á! L/g-XX1@%4* * TzTJĆYǢ<eX7:.}e P30/mChO?J_R=etQʱݑ7I=v w6Ɵ4L<,1wֲYjj< X(K zMJ5Cm67-N$> >(LqA3heǏ﹧HIǟn8A"ӧgΜA2l[[.KΠC3l/zpsq님W 6(x.)FrX£_£_WU7^G(}8 +EpB 8pȤ3~ +7b8!=ƀNSGGGHY&ԵT25:DH%@U=pXIy`ѢI%XU J6jI&_σڄ첥WǐሶĽFn& pZ,9Քh/b(:ؘv\PUZn59J;$oO5%ٽg-Z%fh$ۅ1gٶ͏)zdGmD- @2e} oگXp~~^N`M$xXBpl3($Ǚ3gp̙,-Y 8jbivCC+(mX5 J'7b\PDn>~>?5UՕTtHIOkKōEΤ8zt9E١;I Za 1 b9e~baJ1M"v3R2{owbX"EK۶AaH9+ea/],u?-j9]{z(FMsذV!a'>{婗*1rnc6Qlo/Ƥ0oô}Zm>zC:m)zoUHJ:Ȉ7(?4_X5hNq}n)~{%//! kQR,b-~ !mSR]3LKnՄ$f/HxiPB0Ͳ)y[!k\rQMEK3`0jL$b01GӾ+-U1 }AӶJ$7H.?<`yq@>H.InFfiCCnF,N~ohA =Ij[Bl&8v:T*˫& ,lwS;ݦ6hp 8x-<6J3 18?tΎq˘=t( dLT*d2f\ivnd| ]e@LF/axhrz0.>xR/cfB˃wZZu3W+QoLt"ƛ ~ڃؽry[iY[iW"r^`6Ab-Kdfǫ!kK$Zot "f, ɦ+/V+g0rgQ%fҥzN6AC+IАVg3]iB%'/|ZcS( R3k /G~KUrD9N=s￁)|g T2JOcyRbbX)m x 0{đ`w+Uq+UjW 7lMet98ze cP;83.@(pb ""O#ua#! h$~f4ЕL . Ih~ntMinu fh@rt\ *)YK 1]Лœ< pŎQ}E-~(X}p=[5L&~t]O:~xD/UJ*ZZZbsJDM}M~_nx<˗n63 ~0\+}Gu=#$Ur#ןcXQ*U֣onV!5jqQʫhد7ãH g٭MK033d20 eOYI~Τ`˯W,bkQ]j+ EQcSGuL'." o#|y O>R C!7jQ"t&_s29D1L@!PE?pf ܹP*ŻjYX\X!ڳ23ô.+$2T ]5'T~ _ >[@Tga/^6Ғj*/=gUYOF&86͡£"*}n<.܁5){Y^%7,X^wu ŻP[o:Plb!O!Jn.D!+8l[ԛpbn[tB̨BƅV҅miP{}kSe Vq' RpeVaxxOx<xrdBrq}Ø{Ȥ綺'mE#$w. \Kph Y3rc9D)aE%CN<w`rG>7_$v%l!Txv)a9)}|U]jh! p>j|';<ŴȎ%xRY;8?$>tc _?6UBHX݆`4=#3PJbJzנZrg?/9g}`ۘdcd}heM2–/Īt?YDZ{J}iv-t6w"YFC*&~gjIw-Jо{ё\S؃-UM+禥׈ G2ą [cnn`uL&1??=tO<(X_`I~x<^nY!nj-brrرk v$x>8/=lc,IX,fz,gߓ' b@wRXВ}|W (/[7kS f!u{WJI},h\gP Ps7 43 J-qcڠ.,Zrþጒ5WQ.;{d8V&2qG!Ciפf]!:IaRv@Kzdng4ۼ0U ؽ)hM_ŷ}2InȎNzMl  &)UFגaL|Pags.1N}g]Kp?t /cvvW_}T H$3gh̙efxW0;;뤇-?A౶]#svrViݧ7BAy;8 $A+8w짡~JD֣Ӕ}2_v84BY&цԞ//P qydU]!8 wF ySX̩zAJWwS4wEqAs;Bl/:[շ1zM-cڎIs`C"q@X$iW2ٌ!!DGboHU y9TkUdA`6&N5 ;a),AkiR%^$HHZЗmub6imlùv&3E}hHn9gtcnIǕ9sCH!Z\aaag||S\~zpJ65[orh4i)`sw!^:i# @ Yr+D=ifZtJ#%Wb(o#:л`6N $]DrI Y({c({cT| SXA> )Nږ7-uq124Y9;? : d,Ghp.ۊ @;>}t%)ڍm7Pe@p;vyC<ר/~VM,Ia~~OH 8|>S2~& EH܏p>P._/.9UfG2D:F2L H]EئwKY4dG֚0|"9d2Y';p;0!7 ;c#b_W *Ò[GVƃ`|n4~8t u>랈vA"Sŵ_AiŻgb@wae?%3Ҥ_9iqXVŢ}vN7ֱ\< OuuQ5ւ1{Z2(OM?yq ѱ<3)SX<)YD$=6x' -)_uJW_n4ph<Ζ=m dUq6 ? =o4KGp-dB[Xwf>yϮ{ye!pႪ򗿬.ݻW %Ba cxx 0?2l(dԹRT=ңKpߠ8w霭woAp,^BY`al S Xj9d|2LJmKu )݊v1I#\ NQ;t(VڵkG1>OW5X7ڹT{ܨ4:Dkoc`m*J%4;҂H: JĂx/;ZŏYPH`BNn9 A,;)| ]H.C]ǑLSl `<[NcCΆrYxi:l8]'+g+KJ\$lmB,N P\dL NZ++$F,V v0Vŏ9C,uw`?. evVbmq QŹ9G_ 4ɤm˚ ,.^+ܺuz}2{啗(#Ln+x\[rO!99ďߓ /;>}4rKFCw<^-XneI߯s}}5%\I^>uT:~; % %P)j Y…GN䚲O)|ߖ6o/Ԭ$ j`J ~EP1PcR " Z"hbOdVAtnd70ҵa־eT P:N @?a0fAm䠲+9>ZgП-"v˄B9d&ncb~|ؿq0q5Iy hE44koQF6.V{yo72&' BCR4vny<6N[vRVn`bsL}{WךE;şW ,/?s-oS!=dF=M 0z*8H( ,|xK%т' $u4kK!8k~z}oj? ?<{NfrDBn\>c+_yr NMrCA&FRVz)6i BDV:8w~; akmѡ};y?oa)LwbH;"9DO X䱩1``g%U_!ljA?`+Kȯ$o8<@h<'x>װ8 ~7o E2봄 NShֆ!zVޡvڍ&8;uO.==]Uvn{h Iش4qLj:Fş/?cq]C׿Վ?77=ңxqV 0zfPHspT$×y@0Nff V[ɤpҋ.cbrq-sxWR"-mEN/a •PW\S4EY_,R`AAj~VYbbS싕" +jȎ|t/ ZqY! |^`BFR/xp9\cv&a#{#_y}tɊ>Lޕó6ڐ;#{B09n0}_D.o+lc>־v[iv&h']3vM'9=(@Opw*ޡ8rA9 .]z /fGۧzC.ǏmH2"H8# Hﮢgx*f* r`.\};T @ԟ 1zCN&7K_^B J-,|)O%p{m]k\R8o#i(8ZpU2]~XP\XFSYXQir֨PNDno3v#7 (jLPS R鱑^PlԖ}6_>}}[)dSX{gLjá9Kr)(QdqvL y;+rÎkT:&4h{@$1lz[d_Ϩ-d!EdY 9\cmu-8ɥ'qv,^zO%-T}:wG,-p/%hҕg}6lӻt=Zdj˼!ظ =tTt+`P2GAa)GŅEI1`Mr|Y0!> , '+{f~uDH8lhO{Cko IV'Oƾo|Ըr::i;XXXurb'JB0],r IvW1Ÿ\X (D??|O5C^R\}@(^Ч~"D ,4K\KxۆerC^>sڸpKגx/^& ?"$,-_wpg1k̚7fvy,ҞO#9-Y̦6RՁo'$hĕ޶d谕$G;@~4eJ0OY>| gb좵C#>';-=r1/C7-Kt=cGz4מzÀ_,XNr,.U(-4rÄ #D 4$YD2IDI^@b6]},( B!4,K4A-1ɻ%m #jsz $7C7|l/f~Gt, wp+.N^zjIS?CXA"4tߩfa@AΆMÄ#R"Fc>9TfqE $$r#E 6DȈ@g7FeA>DSFn uPu&L@3[y5E-$G"FtpR ]Eq1vYF& IDATpi%hώq"|>;k85&@#81hYn[zGVXKR +9ޏ]ZM l&1M7'O 8Ld{os;8OFc{>(Q2+E E)#A"(gInɔP@KnVj8q{돺6J:FXRc,:S~Upa5&\By['^=A A]G1\hیG+3bJtW*KʮpQ֏ʝz;xBܑBHj"AaN|*CDG+[jl-";/'JuEre ι. :htzyض*gpBr F ;vuc1U>;I,Z o }O$b ?ɏPUoj sx-$#F掺 8X4TɓXIՍEߔ⚒?0:'m172L4#PN0~ 뷐It40Rw{Gpq"\ }؄ pq59.;S& *{~Ba 9ؓ#>^`lBIOim 28.5v?@'84|҆]08VLH\ 1Fo[ω L 9\c~يtx/'*t*}L&v0rMh[jN/5Eµy @-[Cr܏4z Rv;.s` SU,]A:CmH%#2ˆ&* *Be?91`sj, n.\4ɓ$78@X4rBbkHrX-_L&LTZ taOkX) YQڊIՑ }}(ksqq.M*}5οU ~ꟛb.Cڡ!>!P( C/)gǃ?` a ŷQZMclH|dtj `8s 8,j'e@-j7[ȶ%&F[Ўr< jqeGa{c33j4Pcg+1m!7O'ߡ&)u|Mn*uF#8A!=h[-鑜^?F,Znb8a,^\D&.cZu0Ȯ™sBYz2`iŦp;4',-&NI)g1*EɶB.jɍ+_yRJXQ4.E=8 >1N0bvcWTK+w=j6usuIG }*Q- PI]k}khxABFvU^!7*J9Ziؽ`DY`c} ߿B;p!Ar(YU`RFKKVE_}% 6tԷI; cq4هH?#}| n$EGqe "3ݵW׬}5bIȹI:֭1 Z>߽<)ٟ׃` Ϗp(pp}糸~CllF6GZÿyQ۽Sa'"0 סCnCezح@$ tsXmU,9]G4 뎅|VWGpgnVG/bf>#3‚9qzEgDC&0#"V@ B<4)aa#N x6(9>,5eL6Ia"hԸ"&$GZ R:%R?;gToZMo7uqJJ >wB>7n/j}.PEm%?CaE[Ѐ9 Bb}uNd +88,xzD ǡR.!s62;f2sJe@o} }[ſ<׃B K?_m{ 1tFA`s*v)l,G~/Lۭh4ߛ߮[mc#yhJ`0=8tfǖdn#84ٕY˒*czzoMK%qıOt4# 2G>P]O ؎W1 d`d H.)r]aXŲw}B꽾|)V@ d ɍ˄P $wE+j*](6ɹ!%dyCCp-J߻In "}6t"="C͉"IJD_!`0H( ϋ&BB\\GTFus`Jn)점[1ֹP*/;g 7!RX6@Uph_M,Z(F% \;g/LQa Ԋン$ !ն ]Eh݃u昒CpBzvrŜs$Aϩ~¨,3ES> z9~׵15ERP0]߻Z'}ϴDndCG~ e"677O}Y ՀQd(L,X,Ah=ɕ"$eҶJMD*qqȗ{\z݈=%l\(Q#ɰ?kUCp88]BD~I^wިa2|>T*"sw>B>|>XDRA\(p7Oc`O–};VCFy7uO)yO'X-IaӦhg: bExZ{;8 ؂?mYgZJlPA ctah"DkȉGp!=[6sˆkùK IGCqɱ(AՕD =`BS )z*ƿ)HPdƐ4R9o{r{(eUar0V԰CWM\ x]jY5鵼) wqWhЋXȇׇ͛(6F>L=.հq@NRq3KgcO ?ex "\1T}GxA(@$b\ZD,"! 1` >{\JDScpO9!=4#mrQiA5FB-{UK,-:v;M;mULlʁX m-w8\S;>ݠC!CC5G*R.wER1#5#H`=5@*&KS4IaoN`}s}Ew#O~iNFcR Gzc 7tĆJ#@I!KzYC+R D+~FM] $y}-+7ZɎPjU꫁Ԑȕ y z1b^ȯF`N/8 ^B߭#"YB$kNE^~o$OvH| P*PVQTQV!D) <$rC( R|mtP | /)Qobp*9zC_Wi E $GKPq`v19ѱar4_$Dv¼zh;[XMz8 z9sܥs(9)cw/# b e (`@1%7RI1?|V-[ϠBaB8}6,l>i?8RI5L<@"Wo‹8hܠ91hlCz/TKkE&_G&PݔYQYC`~(2vNԽpfIU Ds.,: KBlҺdW!bUlV7qE?v_S*7w^+sXg)$..wKDƊLfsI5V ˜*Z;zib~wMrشѲ:h}ގ{zxCU˶ oTi2&L]z;덡s6 $JPJ 5R #0FLɍbLsJnNHlP qD~xʪER-ˏ[E1_kW%7ʏ^G U 7E**/g`'hbJ^E8M.N+)p"8h)5Q$| ڝlm)Mk\\bq yE[ϧ \~PaP͏v-גܰaU'oqp8F?lkTAcY6@( 2nL y9Ar^S7_3!2dNTmMՏ/Cmg3bQDTKi Yl <9oaucY٦$~N'l6cwǪˉq6qt*[s`1V=U.!.ý`Ntp̣={ s_C2~sU'q.ùl3%98pt !0==X,FgA]q{N1iE"86#O`$>!hɍyC͚6ஐ@ BZ=I"b(: Jj TNQQ\;!eX׸0*h5uXqJ}6yFݸО|n1@Q7F,Zu"6  %FvC8o >v~ƄX{z׀ ÍmUOt*:;p\xc2ңGt=Km>/y3m=\$_f}cTaX,XXX`d`@@D&7 %R w!*rA4% h U#WW r$@`@5pL>"P t퀟 1Au91-{ <%_mKCWGDHlD-oP ]v`4)hX ZMa5)`hqFaݎÃ-͆6E{Yn+g`("C94mD[<1DmcJzX+(}pF^6 sqmc<|gbq0 (`qc9N\-]=G;_62IvJo|H ToHUT𑙏 ס+"xad n/ BV2(68URƨC%4ӣ؇ ;NzH]M$?U]/C$/u d.,Tل7hV3+1Ŏn= wVst̲f߫}JMY%ؠ{l! ެ%G[lDa;}w:4rn{iC N:G<=G;㶊TzC؞#r~)X\tLtHF@SVZj+gNR RD/ŷh xX |oB3p!)M,PwSAm(VK}Z"nQϢڌ!U@(}U}OCGۋ\nUHRD23 Vh{_ԕ|b~S 'LKPqOHvL`a*%eLv8EAv"8FJv%O/pt"\?[Gp31mN'=6ltXX(f%^*@H9 6uWѐRRc]EiEyU` +L'FK| *1==5+'C$7l@ *anyÁs&!xC#2ۋBto}l%jL{( T>A!1 dI!\ 1ρq6XBQ-i w~؅2iǑ K Sn0[ˈ"LIEӖ.Sɧp6q/'^\F.$::h hݰC0#=dG7dpQ3r{h7uw!$"Ru%^yEP T {1<U]9٬|:T*}7RܕxB-M٭D ,i7%&GZָ X,֤t"xA^H魯d@<FENchlau;Em{dmakȼZBGGSkX9SOמ@snvZ5ٌY귌aD88¥إΨ8H_BT1y 0=t5z18zؙxqHۊjղ bJˠb@ C,]ʮfyX ک}!H d60{a<dYDQ9P'LvJmmV$/VJ@ DRJ*?bN((:_g04J nPpq2:ʺ҈®!O<6Ip6{ 9LKtUweU@5 x0%S&%M5ecҬv=={رaq7dl{Lnjbm%F$JA&C  @tWU?z̗Gee5 ]}/aD6!i&L4ta|$G2e$P"ϝ^?g8@6k^Pm IDAT>e#SЈE4vcs#G>S`3 n  =| ;O|a ;h4pE݄Wo˯b6fgfP94lj ;;cx3>~/銄F/>TPe}/۸YI *Pe8p"#G=_:h`t|n8,.CcITQx HQpPjK#YQq?$|ʼnOrwqeΗtIksE ]"*A2& wŠK@6$zz'8.=ɪ>cayh qXMzak-$*kaK|qEnFt'OŋEC@PC%%mliՎN q➯}prXdž" ~7BT !!@o|>vo3uwiQA?UM9Jc 27drʏ0v>iir#e-~EMP %ȘitXRp=аV!MItQG:,.ső4{Q4ľ>{Aw@lP5aRY9",GzX[$=h(-c* /a!~CZţ>Ex0jR8us8PۚAz HN/a PB0lG' . 2.^Xƪc6!yHz+70<9:(<:??WaŋP:;ju- Ҁpl@&6w1"98$ :/X[rtSU ՓF'i8V2M8Sf.`0ұH/6( Ql(J@p蓯eNr,/˯ Mkq ! ܩntQ_2YO~㹂#G=i Iz& A5usܠp٥נnxy I FԔ#S6P?8|Yܸ2`Ghi +$l 7`1א>piF.<$?JE.V),])dz3./컃Qo>As:X`M 39iB +#mDS#GM#jQsMHqR2n&"Md\#)/DE}qQȐL!NXgLђ2sMD[G'zڌ"=^e#r ;667r!=~QzT )%,(f<(c)TBX$12MU/ DG䄵@ zs#C|' Kɋ(LҎj+=^z0)# #b}B ab|"b \ݺHrI:t2MT2/0d,Zۋ߭AwO=DrG>v0M,l ah`ccWVQ'I1'wּ>5{xaꆂöV1QfqM474_bi { (;pVU[13c4 l4ؤpxHZؑ&'!a<-e xa^`\ n5oa=Rzlll%V T|XJ g[ʖ}ԩSx $9ԎpTC#P6My8(16'v.JvvVr'uZ(W}!IhDX!8aL2H,%п#&:-@2c8"M9"fN¹Ή% xhJtXJ82;k;/mpWK)҃,)( ~~*(,B.A\q/=A v*UB$/.'2X$ ϓ9@ IL B8|MST$L]4SJX$xylGrE~))! Mv4kSLHl̶%7nm$<$uP TBBhRG;B_g/TY(Ah YCb Jy 4BVמwϖ#G&$p)#ʙ'{ݚK$DדEpg̓Fo7nѴ\cY,VoKM kXZF}j grQ\V|\?BQ( /{P *.D s$|i.B%=[< PTB@d`[Ay2_όᵓ)R$~&KQd$@7S 3ey>t!׹D&qI_RL6?8N4N󋦊,sгG$x]p&U~^*Ҩ۬#gU~xaLVٛ#G=+7v ɇVzHΩeÄh*P XYY cccľ jSu̎m3M1a\yuW^ꑏڍ7^ĕW+my3aʲca(b @flr,~N6#M4 9 BOHM/Ž#+$"@ȶ ))2> lΒKNp;87iayG;19md`=%[[CQ<(3 \*Ce9, ۽5]^YUw%̡^o^oKKLj`{)Yހ(d3~s7gSmRκ̺- 2K(0R MDQU,'c +*6TcyP)H6ZYxS.) "Bʃ24Hu~j,=ʽi~Kъj($/%L'/5MDنDTY7fNc2VqDo7 1}MbfY[w$'~${s&V}x R1G~g/~ OV=>};s8?2s/M0 6D4ԶRToB3fD :W/* 4!I0$ &-ߦW!JbRGnT? 9e81VN0&b4@Ic&-4 4 v:Z[c3tVd6&G_j+nM̐)|3 N Qg)qTͱJu\ ]> xf6ش^_v ãrdg P`zSd]i&76ϼ4#BT>(6>}έҰ>[M-ϹEdMFD|T!α<(SlI:&eu֯cpXM4!mH 2 S OYMh[eΎ]I04o`oցdC0Rs Oi2;s@8[oC3zKS+e $18KŒAY8*qQBXX$jSE^4L":y 4kLǩ]>8hp\Evw~^q HL9# ɉ?r',S$ɗ%iEB&ċ(QKAZĀVPn1Ae>5PBmrn;<%"fcjA8pccS7Ɏ e EgDp* a6sUraAꘙDm$D$(&JD=2uz2> yDMB(Z9IA`Fr@cc%Wa!k9#6I = oL<\-#il*}kמ,BNT5Ubi@9,%HBܠA;!UG"M#"| Oػmÿf @mv+8k'066Je5<&V^[76X$!OKH%cMrj-,MX+$eA; _#kkˊs$8^QrXE-3%H2Y^U$ GFZ]Sq@q!3 [W.G(XGG$H'hYg7AʎVYXgIfS*";W/}Ð*uȅ䂌Ҿ_0Eerg]mpX޼(݆C6n+ N]=e< T(^0_cx|fZG2ٱ!&CtALZ\gޯV}2Lvz)H?*$ NPU- 3`-^@`8+Dl? JKDHw=1RoF?-=(_t}q$qO/(dʴ&Ⱦco].>M 9co7IXxC^:njdD~ F1qTǪ8<.O.C.!hŝ"v4p+*y?xMX *v{EDC #5<< }{p]1KnH MZ$MN&ƆF46)J!-"78D Ƃ4+;.ʦ3]N)KBk{ 8cL8!!bÔ-kĽIQLY$HW"$q8|z>/~>BfIa,H2&6^A&J~=B(r{9c NwFR$zh9h(En , ҀD PBk: 軷"||4`bbAhZkP4vQ>V05~;ik[^KhmۤGVȄA8p')o= t1RHwt7DŽ1 ,hrEU"0c+Ba+T*[i!芦E#aGLr!Jˌ$A&"eFX {"]".B+8,$Q'$GD!<: q\HUC# dOca@TyCF}@#G# ZYFB^y]iq/  bee/_ѓ kQ9!b t Yָ<A Y ĭ[m(J)j8>fDL) $ Z[?.ch'އ=XZ:7^)[_vq7?y 5ܸQn|0?G'E",G$64Q Ij':f2x{T . IDAT!BEݴc_T:5c ̪Bi)nm!qZUM񹧺Xiܼ1Ek XRyA _YZx FfoEcSYuA}0v|\ 5兞巗/GyA;*QRcI@,..bcc8y0UI'a]]G(dEGrd(z12:J>Xx 7pY#uO|T4jłVN>2.?9Abjj?<0׷ ǭA&Uܸ`x|#\A267$RpFjAHSQ`}">"Al$vňdPp1B192 3L4(nwҼOiVDVoѽ/&u~(&1vDJ`dGH90n{v?IIp09nr#G O&3=Roa"NaaDn(nЩ'֘p}1bG$+?bAXT*A|Icw8($ۣTh$}&&A`7E )9aQKJXJ?}.^9I&0)>NjEX&ʎ y$) cLC\2 ҈jB&5XD}(JD$2M۸ȎްS]:HH11ȋCϽ `^zֶl[_1en{x᪑C@)=%LrZw:OIŷtVX-}%fE9xPorkׇ*'Ev!lR 9ҚT@a=U~Wq$#Es{P*ɱ49#G7(m%Zs",^666P8yrjեg{5vncL#猴h#fZGcC2 AVz0wv\&&Q5H`MqeeciHKz w߫bdbemah`r"Dr2",BkT,#6"ik&:$S!Bz)|Z%; )6)%[09<.&1bד$>ݱ`ܧsx_}̒H%b u}1&&=:1@9CNpsǙ';bp4*\mgձ1̢Z,VpL'!Pw]oc9tAr`۷ςi9IPX>"7X0|qG&=>f0IZ:noS-z /ZY$3\3i6.PM鬳 J,+:2 S',ݚ-3 !B!rCrZTd\%KmI 1ړE@Lٕx8~\QݫqLNsn7{Qnx7 tqc$'8r7u 4 0a2TZ{Q <Rccc?NLXPlucQA+JF8WMO,r2L[>-c kXZn\Zo}eEz4Gq^"0`"qUc% ~I# ?ڄyϼ+kE?) RsFErؕ "vо@,rcnbT9+$G7n"g/@Av0$\S'.A#>RGdDa_#GA!,/~P,]89w(I鄔U.FQEnԎ7H:?+.KP;!*8&"ZE|ֈ ڮ_ #"Wuv\u["yE"7Z&b Tu>5Ƨ6)1,-· |Uܸ|7._tߧ蛶Kodb%߯Ltb?r TAv_.$ן)Я=_f9=йUu1[G=y6Mko_To$$QN2|y#gWy&V9ã'o67t}s \ObeK Q{8WpГ4SY^.oyP7yx,3 mck \,\t]Y^ 'OZBaeM륒#MTirF/)GTLOMsk?u܉}H[ӏw{\)RM>C?5K* &\i/b]"G#G#NX(.z@j8w"! In`vvƨڛ z2*-%NcEMwTҤsQ$I+ar5nwQ,R D(bq]8xFT7ci^Bs}cjY,i䛺 VWk] LJx!{=tuA؎ L?,320 *XQ!m_$F?j3q>3xoOͶĚ,O$2>:z!%eQ#.\vdž_ <Yf'BNp_d!Dl8`;4e 2.,^ #tfi-\&( # mvBPюDiiR* IAbdGAq 6)LSJOy?8\ ~crTaru距l? !eGE B~楂ky_&l9 iCn$Ն$ BD 9{#ĸٕx8y&*fbty~ʂ,7`]i\i>K>..'8rc(Cxryzmų (X4ɍ1κZkW,EҖyY(!<%I\TϱPnRVq #!SD$IlmabxXr!D~N%BqN Cz\nH:^`:Őeb> AØ$ QdG S H|"7pّ{!*ɡ>.,"f@n,&YDHAE?GW)~2^^\" ޵h]L%@NpȱWA%SFE@2m:uʓZ <@pum yn1.W=.6GF`gu@5ɒ)re=\䆫N9!H ae8Zh% cIdMzyU8mAWObF%˼_[VPF}KA>jU\ 0w sk513&7W9ma(|N b%d1J%ƨꅽkr'IBHUDB  #Uc/7t_(u i]tjA0 #d iYDۘP{H&4&% CA[$eb.$adϢ,&mkep܈&[* AoRa z0Nm@j$мe K '&p蠒p;.Qzu=a5_1dFE\d[|Hi5Ggqi4A"^0Ao"cH{/ *B3HUq'wBSLʥ}n@q^ {'YI[Mn̟&7ȂM4 ES:+\%sh`thy.9@|Rw4&üÂ5&rU5NTƇ1K_]8_ W~WsOp ^I]‹  \~cάl?#U&.X>tB-.GŒR,:&zr*!oGi[nsU"pHdbN#QMn\_s}vͳX^= xf%Dz&?!vGaЏ+8r#!Jn,^XĎ@ iAZeH'=caG. GSA-ZIӔ0V(l3 *LQ?r # _ͰȆ?\f' no c0^s׍ss/&;GPQ U'YEkNt1d؈#gC)v>J\*G!E Xm;\u,)&AvwLGUpĭ'('1wm]ŶٕwU/T+~N߳r_wQǽN m)WpO,<dJQsS)<4Wmv u?RPo!p!懰:קps&Vq/o^͕x'%Y EllloCi+(: 1j[8e-/*.*hQSl*QDMakmw-ܽ eQCSHbHsg&= "T耶40a(!l>4[A.]Nj?>xq v}Su,\ajۥ8rO |s;_^"* t'r+} $6oartҝbb@H]PrtLB`IcUIVUݲQj%SXV}3>HC9@/}p菣 Nd"WpȱGpsX4ȍ1{v&Z.لb̊"AvvY$aU;Kґ:zȝm\*\r1I&5 UZ-Fq" 8nLDxi(b1>Q[(Ь}$lx'WϞZo>RƁA5,-K?O{ O>Kx'^ްYkٟomL8*A+ 1uO`_$AS4%>I)uT']}GtsJa K_-$Q3^e{WFH!8rGƙ'{݂FŋFر1̟:e?7MAYf(?ڊA|VFH|bCrr}EE셰$ťBPXiǨ0{&d!I$@,^1t#N0 fkP*4l9 бjk6XX]V{ KK'[.KK'07"v<k?De>d-ՖRJd0<0uXB"d@JLOnn Y5#OjDJҎV#\?q|]] IDAT^ Ircff u[].ʦR#F;!B !#2i.Nа Q [䏫(ãT򄂷j}rz|v C୍0HK?݇%cW_K?עW'RvEL^BAwSOzD$I$@=@%rB$ }[$W !RF_;YAȑe^YY z>n$Ņ&*Rť Br942]'_ F RQӾ!Ƙ|(rYA%sugB1|"H-X Kb  Rj;g1xu[)nG mUUC^{^juFY с8$枀!$R1 [TAFlZbcџ@5Gr9r܉\ /^\ HEL&*VzKsrQvwK1?{o8hǢ溲 #Ɖg.m!!.d[CNJ!"J;>~,ly Y#RJI|o|[3|!juٻ1кKgW_s 5ѥ[HlN(EzajSA$3FˣyD~{dm8k!vۓP$ĞUCX~l+~ȕbLVs9̜u 2s/}4 Dc{\F]5_J\u'Ǒ$ !y$ ˿\(dAxn1nH0 ?MM8*,7qO줔.lXktfԚAw١bbd"DQP*GH{n܀K?ݏCj4yk{py彘[; 74q>+V5!PLq2zX^b+=CF*nJ @>ǩ;I\3))bF΢{**(ST8O#|m#󑃇X^0Ξe+b"Fۘ$/1,)nSӜ2O6"*ЯX 3ܰ@Bc#:\ﻻa QdGg[n(Dvm#e 6 n2~n*k.֛7wVc򝓨N]FyϜ{!O/Q: l%M*|"N$sadw2噑>ҿsճx89 >76b?" jn#';G{#RNp?XG78 8ya7ࡶI &)$騐M?fvlmT}٧|?YCSU<pMrHgw廸N\CZpKj^X.F} #Ke@wj!":3]qI\_Ax޼d85|$V5H"p(.6F.OލNas0ZatM d=,ĝXp?Ȱ#,߂/> :qY7r9ra,^\s/< 78yf2~!57_FY3lBE !#7|j5 c\H,Q(吤lP-*+zP8k7~}~ǶP?k__WxMF`oKbJѮ&w(,2ya}FR)yH>2/T"tHp_Tz3N]!2r?|>8=`峣T(.ȏItБ|Mgmܯ`~p?놏0uc'a8zJ`NSxAR\_*d,e|}نQp,N;,h7﬷SYVtR '8r3<do/ $ell 'td.F$q缡pyR&#`ga9d/HMGk,nŰBۙ)`DJ!vhӈ ,$bͩ`m޳ 8 㘲ď= -ڛ07"_0HZN>A#L qArL!b!7B2І1R[[,/ ތi/D3n0u/'8rrTUap^zc腟e# Ks umg] %[Q* qInt2/ 1g CC6ɱiaFyZ!xE;1r#ꂉD7_Dؐ$2|먲ؤGeLMՙǙǮ 0E$Gf"-t;dONpݼn'"v^{Lt^~^D!*,@#G?b|[I,"EnPڊaG`8ho^$Gk)P46^kmXsӲjsA̕uhlr}UǗ?V,_((C"@Ot@ Uw|xpa&9?8x!覲ٝFƵ.?QcBھ(<׀勣HGYDF|`$8ދ(p398|oU&),-&˓Bڕ0xwz+?ZҮs>~T`BEDu A ?s0Czv WV7UJ!o& 2Rw s,uGEi><٤tu3˿G(Tqt0bsGB`?Y󰐌H*ܓ,rC $B(Rh\R\*Cܾ:<^r~'`--8$DO(6 A| D}q(_T, 0e& Y!sho#G!'8Ocee3338s fgg!C,Sx^Djw%6}Buv&ˆC9%rs'H C]Uqd)K(`'^HAA;1}f%'ŜfD^9G" PT[z/P#23Ƕ0sl[YUwTFu)(9!obGpj2 # ss8a8#$Q:sz\HOnP&|x茒̨*PhTj;\dP?wyҾ.m[ G8(-ӏ]c`f(=n=N^;bz5|ʿq8i,>1I\fC-`*JPe슧y£+JtGW?)\i,eueEH\#G`yy .r¹W31*1"Ȯ7|IAhMKZLjuD|3F+aHAª'ʶjᵩ"WuDi8$%銶!^j[32ea*H-2R?tǟ<Ǯ*~GZT+wOwe-y_3G71{l+VY~=\ \/4+>v=N|77mʦWĞ4O!X0Uc8B$*DDBV',K[`*hC5hǑ9gz݂@۠U ̑Ax$@0'RE#0‰QMz _GDӏ]>f[~V^㇀kگ^1H?4xmI ( =0uz 5B#(hyKgl1c٫gx3 }iy@O/Aƴ[&*q"=կﶬgr9!Ο?Mn@\f{H ɕUvuU?b@Q<:d ":%F45 t5AIMNҢ;m!:`D` #Bd0 Cm+2ֶnabx2T~"M.IrKGpF1{l˭M Xk _ZG,G1߫$h]fFD cF?-{ +mv{#1"I{"V!gKŠGz݂O󘙙O`2j?t I_vXU4|Dƣ")w#G v&e3 S NGQq`EPo {)R𶡴U~(yfG؟]{: cAJR?KAh8| iCXB`%.q,3TN;JfxגU3 5mp5EHK: LD܀ EU [{"8wjjO-ȋom WAzۃ.cdb#LYܑ>B#iG5H{9RqB*zzpDURlQۙ)="Wp,/_ p ̓nMl,//caa+++8}4Μ9[ ғyU8i^$1BTMqE1 |bQ&|jGsHT9w̐?Iχz4)*}\!B@Tk6wƃQM @7U*7?8U1#<&(q!_\ՌhG)Q5Jٌ 1][fm6-/0pyu.9̽o#c'ʈf 5gG*ij\2\B\'=+ewLSH}'#+8rz݂߆r!"b}vMY2cw8H;VGChHX``mawg O΅ oJ7R5GnEM!$1{:-:܎K$lOI(Wa`2aѡk!S" ¶CPA@F&[?t ,cvv0iȄ,IsGqT,Pg-Oi2':ᵻic&ƴyGߠ dJNpȑ2pH6xPvbyBdLKFSqEV||lpIc(JvE^`5E<) 6:E$DiAQL?'. IDATsDʽ;u0$ :%7d2lF<%Vs~@*HW|sL,' 8`\",Ya=,%ְ v;4-"fR2uBs.ɖ4KDG"ȑ#E$oܫ*6#CT(Amn.bC Ⱦч-eS(Yu4OYL #i"e22p P&d<A.FWem!x[:v_[bJ4<˳gOӉi mH?L=OH Jυ/ճV7/ꤐ !i#u4aLMFΛ9rĝh( NFҬAU.vR(RE!M\FB6Em>J,d?NO"^xJX~<\Н|1ҀFY)jej<F #B,px2E]v?3&['ھ cm#&{k_&=g|I)IE ͈cb890ɑ!V}QSY3Q[*Zm"kzdE0O}sDDNp丳gQTo\/`I oTQQ.RJ >W.)!/OaLBŲ!JE5MgFjm!7ZLOeDB$!6,hr#HaMHá ]w!СCm#̀>rӐF$Pf.p NP=Ǝ>}|ٖŎYrv5 &@\r,N,F ǘı2Em?*em`; ; ALI/k(7͖o7?Ǜ @a[aJK*^bxwjLg&<}R[6d{gv]N6 2nȞ}ll߮qV>k{z-ӝll\LMg~V ͗&ƶ|+C8pHrP]o}_CWGz>HcM"cee|w+kx?Ϡlpxw3=&LI^8ucѝJ;;űiҽ*~e@t~[vFlIT`²"uc7S)8lO=EhT7v ~H(F:tB52VX%DT>mcnG_m6E{oWi:ˠl\댷a?O/M0g߼r6WfҒ;X}yw =+;D*zSxؑ/ |["px@vyy+=nJⷧU˷]s0)tƓkYGl*T&cȌuVZdp|x~9hf*rctuQ=y챟3`}IJ(R3om q5#S=8jzt^[ nqiK|LDF "Wp3J /ZC5):J!!oD.xSTvEfE*`[;Rxgξ|c+*+9$hGA~eQ!d 4;Tȯ f0)%}ڃ%EoAueO [7pkA`8$6De7۟Uްolc .4=,i;we!m\;ՕW^g&7Daap:{8{X7FqwxΈW+qqe7n^_hG.}Պb7"̾MMfT␐`I)Z@BKI8b*:IᅡYE&sͼd &JMS , fDf|A[0Ӯ'jc2 MVGX&"֣bO? D >Qb@MB?U3QUFp$#IFǔr(W.V+Xfl@3AvZ"ב q91!iGtH2H\ ?<G?}F!,QSW]6ׯcZ4.O?9#- q ay\U,AFID3=pa9$)qke*މEﵛy]F I}Ͷ -`8ܹsXZZJe h2y-E41nmbjzJBDų˅C6(ئT0uUcc!kӴmf)\6PhLbxM~3NM v51/Hhn]hb( 8(jT 1avѭXe,/jDfGX3x#8BcSﳔ4&^S 9# =9QDGh A``QTAg -CWd$EW{0I(cswSCM6{ej|8|j Z1;,4%7&80=3T7#J]84Wf09(,Ԟ|&B$c"OpChYcZ78LH /pGW^H{Jԅ3 eC*#|}$h8$*fEW_{o9d[=%ôGѺ-Po7 @ 4};JrP/ދ,tEZ>a"!7DvG8=:,MUCpLR EI]l DrHIyQZsqWp h JEd*s jtd\kQi,H&Bn@u 6ؠ%8Z0D LuFKblۑSU!!`CWaACD"oq dn)*C k 6wb2bFۇY1aƒ%: IzXmD5;FYBTdJGb B;jm wQ}w@r(-GN{ʨ/ ȑGdLj·-u5JtUu,2}Z,LE6eaj{5뮡R3m (Ah -FX]]mK <ZGFݸ$(P0g ;c$Ӭ[uⰅ_0uQ䱪Y؄rp,tfU2Pq="`U̹WR!`&Ǔ&GD`i:ɳRCDn$G5"=Jңth 8$=VqHUk{^&:ǿ4IhѢd4.݄D*̍ވj%qW+4@Nvvi J1(||sRR.RL> ďiC,(k6aKِ]D$,]JMn[>^;z)uY:,]e${J>u7bZȱK-*LK?!=~_]IIMl]H~~K$HzXۜŅVq|n85q\>jWܿLjL2-ZH0qܹƺ <ő`;@(!>$CRO+-0X9sψ3,["J5 »-yI(3KBx 2'j\x(th?I&=1Qq;8xPd61R(D,XsP(iM*VѢEIh| $ʂ2S< AEuE2!Bx1FV_W 4xw%3,x+Ф@?zBH((968nKy\MM͈1 L\Fr)l q'zE'EDŽ BzoD-׺X萑ij%=nKp ˨C¢r*%FTl.)s$9$m>-Z8!7N>qZ!wg&;$18dHȏl` V #7LH'akw@ب湗/8!7T1Y'v`,Q\TYY6bgy9mr|=*JʵVL$Vz눣Lo5t;PLO"˟RFfM.H,.]gSȍ|J3(S`36䨂IwyJ:K}9"!=ֱ~}2Y(!=VV ~e@$8Ǥ+ J'+OPT(eܛ ΃nJ 9K-Bn,--Mao $0}gہ;'A 57:}Ov??r!w 0!7 υmE5+y➽<68ە"g7$i{T9-6蚭i-,PreYZE+sl*ީsQy/JD.5- /_}3A?{n/c"pvI&*齎!7fNz\V@wjFyE ]V9„\!&HP vGy]z= !/IgӶhrfALS bHDvDAAZq 1?;vmؖ2Fq9l0X-:Gm<J4СNwnA'Yי{N*\8!)[==OPq̗*#=RҢE~/6fgt055n^`7?;yDMz{Y;P"IYɶxqA $)`EUIV4|V*&X2OnmcaFS 2P룆Hȟ|)ƝYAA^] h 》A<١5!]\T,5 Yt]&pBGz6A*s=妫Nwnd~ɳp.(4|⌐8Y\<onkJe=Dt0㺇eeMKpx|3g>9t:7.zYt}loockk_~'O=oC jNم(N$j Boε%0&)"K\Ud57\6AQDJ7ή"-?dM S o6{Js)-^e/vbQIFvg)i&.oߺXg1V3!%reW^ң.Vq(1 x30Ns"!0| .x"#8q <ǒ:Jk :Y&xZK_r25Lfg0bggcln^oou])M }AGMn3H\Rm?՛`gp73) IDAT9]ĂZ#7hM'FM\UDe\TU 2dɒ"G_I4)Ȑ}n,EoMUxby-cK'\h'y'e.*46SGB& yHh }` >O_b4U1,>yO?t]Søx"xˏ L;@2v{ 6ju Zd`42qM!q7لln:i~TgEn6_]n('_ѧ2OdC~L{Ǿ Cqo7|m⺒!]n* h( AD(ɢ81DcTܕmbhMnXLyo{f?jd5&*}Vv, iMx֝E֮al-Z2֓(<~mףÕ`yyg w/?*"k7МHIƻcz,>.0v)50ѥRʜPܺrԿe 9=Eb{^ *uB'RX>} zo&H 9gI :4d,J;o4%.xcZø5Յf| e=E=Dm{,g`RC4A0f$im*H= o*ٮ&E_J%8p01L֭[]x{ o7CMT;DiҤLf9¡Auxm~* "XCaG '?әZ[f28ȢwMqFJx'JLI;s#Im%{ кP|_A7`0߄}a}vww 0=݅yabwwq n\f/0F%QRP2.(Kl@'N!*.+zW>SOɨ"S^dW ]1nμXѵf)'Z(fhà?PCQ9 WNo-A٠?n;ƙ{?zi!ɤX8)STƵQ9mĥQ`N}p_\x0VVa4Z›_o{qov2o>0%x=)q'O"JIԭnw:S(;*#jڽ=h-&oX[{aߟLйu~v/׮5:5cXOQLr> 2&ԙ^ؐ);t_~L;QY3@N-S6^BCImuo٬)~DD;DACLnK $7"CmNS:^QȤ< wu)]@osu6-D*bx oJs$W[*k NRB( ,qavAHr,r 4_ -o9Ngׯ_thbccc oq `>}?ٳO}Notœ[<5E`' @JpnLDy==@E*+Bl4Ra6zz͟jbbE|&VqެsY!j\委h[?mw]#;5]*;-`+P {@GpS܍FWYL2|3Eo5tyV*P6ޒGm_ ;x˫IӭׁFeKW +=Ogɉ3B3)JLRBCi U]ZU*K*@W~fffp:yLMup-nܸ7obkkajj ~ԯ3T݇JBfw̒,(*Z'UM&\?&]abo n2w7sĞ0#9XwJ3 su{]TZDK_z `0]_4O}SS|򓟨F I %A& y_T~x:%OtdU wNTﮂvʲd/vY&'grôM2H[:Fq s`#Ǻ U,fUZ2qNxr7"?{HBt|w [M!9BY&gA*5Ea<>t7X~'`[w=4wp^OpXŠP1 ITT4ƶ^pMh=h E<@M%y1m 0 -@Y:&;az"1琹mD{]@]WLhlގd>8fܐ M:T%7lMKs nBȍn"i[hJ;ֱ 8̢6k !5LI x֩h0TrC+ &qh ֱ~}N0|sߘ%uUk#HhĶ - e0>_()O$+lw76od[`#TxdM)Rcɔn2󹫰V̦.`M6n6Lȍ`+-]D-68$=,}! zND͠J*+;4uMRA62w\ "ז#嗗q]wC\~rjHBiH5 [ǩ1ipyLuQiqbѺ-h&,Xیڃk (9L1 0޶Lmp;xFTDcVToY0o2E]Z䪉(A^6{` k6-DRdTޒp"u9UA04(QfCn)F JRr@U;A(Bʣ.?ypMܼW^;8% Pңf&'7> id'PQJhb/B*m*9BOpu6vo`zS=;R!#ת?J },!5k7kjb;9;ilSKeMYn"A0rD! RE%czSzX~Xrc!Cұ5x >x wwsDǕW+W裏G VVV\rԩp g"MR"4Șc(6EIXwF֝b|kLm ћj/r0ɨbOeb7rѸYЦy e`2qDƩhUH24;c:hw)ɶĸtPL2(V% | Rm} ͜\Wz,5"<ւ5,K\QE 4@yo 5oǺϛJq0=\x.Wĵh_[7{/|{t`JLy̏&). !=(˵ң!(=h-Z۾̓rCՖZ_kC5%AhdڼKxw,7L̦p?"cV+l 68^FHPCCK`{J%=Ŵ-Q(*7BF\>[ icOHݗ:rc- ͫQQz{|Lk8t Р1y<tޏ3Qq9z[S[c8b8b4@x酗·_ ~!~>/g)= /-kL~v0(=h-*h4SO=x6^. ]t&o NеA٤!Zћ}MV0ǡ>"'ݖBM /taRqͩI%Q׮@٠lџcƔt gR8o<)ZG7X5k es,fBf_4 C8QEq@}-DMPf<'6\ŐX*6*̾ '1|I<8q |I-!j`8SRJ $LglQ} {V#dk=Da _hQ+>V[tFn4>ݶbr5+OwiF"@d >h~غ~Z"$PNt3Fנ-P@ȍVBdEHm/Od_(!:l`r ^x`wo^y9&; I/OT {KÉ]-ƌFS.*-&quu5!;Z6hR:BnXJ,Ns3!Xl{ Pnf> nr2uF 2!1N߄aFD3wQ7nAMnIX1uL S4!qJPƊ ]/{<3.+Dѱtl &mv)#Ru\]bZ(S_|wU|#I92%[~W?Ji9 d4 oBM?*,/ Hb/b4&&FVWWuU)gYvvN2Ny3ĆIDJtD))=r>(6g.166" hp)G c|w>9m.Ep'8T `HRMZ "h/ kBpX;e> S$G1dCf ٘PsvB!8t Z0ZHU%n5=t"$JN_{ϟ1X4Fd0KKI4ʎ`F4p>ޏ0߿tß~? n-<&Hs(Dlm4Jøg+6G c<z*a@AX4y,$U9VRdaKevPWHf$Unu2O'aZ|IBBrǻSj _FzH$VG>$uF4Yy<ʂ 4- ԕԅW-!%r[q C$>qp@5 ?XM9vSQzr77@3Hi9dhൖ@3PpSha.%ΝK)oIWfUnPW׮av%lk[t1s731Ҳzr#KG{btٔSQ+i;-&h*'`x)v./L>4$|VYQ1Ѵ6^BII , IDAT,X&DDT!uG Qm'}'9<8yI&ӊ-VGz$]J"r}=!>FD\%oݩ!\՚8 MI1`'|5,~4e#}T͙bf + sr^ Y\tp5/lBb/ KQ BJhbc_yC17qI  JCFz2?i24Y1I$++bn~|xQkh(ĭ%7*T`(0Kv6TXl)l1T{;3}E՟.INDZlp^+f)|h f>[!Y<|av 㒻Do7-Fʄ dn꼏KKRbM62 Wdp%Se܆ ;*ӱsN%(XuW\y<釣⅄(᳴00<܍SNSwη߉s-?·_ ~_/_rG Gզ)hymh1`XHf”">N)c"7Ȧh^k;dݓޘdW)TOPS2f0AlafK? @9pf%]g'V#! 3}x|\PH-M%;MPt! bJX{l3Puwe_Φ,ˌq^x>qɮr8&e3(h7(=4M#LJr2-ѢBKpڦyOr m(NGFeI huU,/--w{m .+'8>ciؖ&6!+PEEp*5%8د)gɔ0l_R$0"8r^djƍ0CtE$J)CckXcq,ޱŷjdu%V{{h:Q] _4!M''lj\xBy8DMdSlqw/E%8ZPd@NrhXӢࠐ. losn1T_fWV4w-% (K"ːhwäSyȭvck g"|3F76cC.%E\^ZAD/RޠW$0OoW^Ů#LA##oE[veV#тBWu$Of£h` >s 4sKӮ؞d3i@KphFQa8_G_dNA=Wqx0!B0A/4W(M<4x'߽Ep,eˊ#bdHqxWu 6 zHteE m$y2ef !8B~P ӍѰ^D<g_L#5l|9`);0g8a䰬oжF;!p1v:'9Hdsңt9& J!#h=9pJM-FX]]M>}+++F!Ν;צ- ZJՑ.B8Dk!y Ici wd۩6E*ؗ[+VJ>]pwSSezCA^!(3aAbψLek2iYS&DG'F &9"$J /XfEiM< *uP.^kv[AS&IX&0wOe4-$FIjWBj|ǹs@KrFSO=}s" >-lfNo#-@oTxjaW-,+{oz?ZBSJz6 RdVrBr!G86Z-{ʅ^63mA;U"\fqTGSKǿCi<B^IWKHB"0*]%0h B CiZsi p|^ZZrk\͍`: L鉒^Ce gz"4T|KX=KuVIrhU pqdHGLj'?Дu48<@A`;@fݰ:Bldbt"^bU/'i(O_&EHW# 4˱v{pFh|5M.K$+'=(&\ ƨ#*/AKpk_VWWHbrn-{Js=Mj0#%Q~*oW0iFOQJN=!;^יRv+%CƭB[$FtllIC<3~- &e F蠉2FgnV[iʵPFPuh*bVdjb4mQ QYXn@ ;`:RS 9LeC>tϓlCYZ 6@nTHm,LIV&:JMc#loVByӻUdof5 r!{5jV`D c9VוPWX0Z[^+L{5IDHsT{eL‰Qeg j\\PWW[lYU\IBt\AcIMfG 0 $*BKpT{d!$,BH]eZH/^S·Ѳ?Mj2pmueʍwƙ:o*abbHṶ%:ry5l/"5f1bcgNC|W+.DJ q-HIq *FMnؒA7<'T/-L``k^PQ,̚. #"E-r=98r|ukGMQHPfzXh`4e@tTA!0|Ku`Z6'&\qۗoz7Q = A #ocL읚le\!DDR$UD1#Aw ׍`_ eIQm(Eȍ"%[HhdlDW`FyEcr '1`~N3IvԷTb4BT&A CeUChX ɚ .J%=*%K:Er]hXVߨ6qEŗXy;n+]7 =ɂ5rQ!9$** "zS]#CٔQHl|'7*}2`$HQhcG -QDM8 a]8j'ea'[t= eR/|5gBhPϚ]t?\I?-т(k Ѻ4ņ܈@PI< Iu/LT PmU@*C=3Io[7z?H ToeH#3UP8u+ȠR&fK!p"Γ<>.CU ,M%9HېOOإIY5 ^$<$Qq9 \oUx҃$sK׉p갧huOZްrʄl,"?} z"?u;IxQN;S?J2QJj[7`уT7ْi H30?%:Jr#жIDtJhۥ!y#ag:NY0:8c 3p5?V㛢Pl_o9˪]/hBIڷ[-uu Rsh-ah.Ûյj(Nٺ]x;J!8D,*P0~Fl'!ELADa ۗ'Ъ8X-y6^(H~uھݼ)V0 jcng"iDvZA/AČKxhʃ; h,!Zh=EzTHtݬ6NHFhAc XS+SRk.?U\3K}$P`f[ӏˇ7^ǛI+FVWφ $XgX aP dROa?+duP7Lo`OVi*$_`j+RQ9r_5=l $B'ІHv1&Þ:2Oz1v.QdCƑĒ{9QpĤj95EKpPuOi6>ȋ!AR逢cv- &٢y;?"77:ݙ vU벎B^B٬",z;jg#-lԵ'ylu$+K@ S7n6?FZtc*F#q0AoV31;Z9JxѷUƖ;Eh *T11bl* qai CIp@%% ͅbxcVb tt%vJ`sw/- qMFL aa`QT=6t u||]3,n?7!%I Asf೵dтZr "֥*NلO3 _V يqDxI$5&PeQH>s`2,~\ñUkwUG x¦|RCCBwFKjwAImA&)$ө1-О9(9: Ş]lp{FaHA[pf]A}M[*%JN4GrlSf SĺYI;ڦĹ7,ڴ@PSD!!orU;{?%>˯XuEzu[AKp'8VVVgk#foIJVP>aC(H(n؇B@%" ZJXX-#@La*:hPrة̈́U?`Ⱥuz@ Bo/C!Ss{v_q$d FUMkZ8Բ2Co^b$ 'tY!Dum n/֌&Bn-o8ãG#>&kJe 9J G G#Cn yb!q8d_NV I1!T>D1@tM>hF; Z%6FYS8"ÁRߒ?JEyml;cH0_!wݲVI<2]U ќ+!,DG Y uyеa rlhChZ1 \)pC!UJzTt{)-ѢXYYaߨ2Y$,cR: |l>d*T RdȔM~<׍,Jve aw ,&7k Qo' K=[چ|}(Ru$$`hRG8cHR`L]I AtXt(C%DJ2ӖdQa?NhƽCNoj~ Geem`7! EI % @.kh B7}k{J&"/̔bRPACC7`%C !ʲ䒒LB=F@E |o'%6D0'd4jdL@ P6ψ&HV3Q-^wv IH%! ^DM%]4-F{;sEVuO'"_0Q QaYr{@Hr%6R;]A0q0ԟ7D7 AoA 9fa_R'Q[O?% qIkI-=МwI"yL[ Qb#4Q&j-t ӧOWhM{?}tJ퓥MړͣA@E3)\2a(RqOv$lˑ-WY,i&T][=<4w(!?}„`0Pv K2ض#5GZ7إ` LC ۈzCz8g!Qe@SuOwaQւ$i ڣoj!ΚAl2/#P58"^ D< gmiEZ?I΄X)M GKpb8&* "E`Ź! K[Ƭ#A,*BB ^6!h,Fvty,Ueܶ`QK B+K2` VDc0Ӈ$1ǂ&9YbQ"k~.gu"Sۓo-ȎA0m!J^ra,n 62f# 6X86ܠ`\zzW׉*U&0!|斛oD?1ΟΑUZ(q9eL =͞Y) C>9i!ׇJuTa U6߱{"$TfjAvgRvEj[0o+0UeLYҠ37 ǓAI6~@Y R Fjcu TCzhP#G8-jut [m6BbBf9^6~Ǡ7[* jw aY:*:Ĉ0F[ulD`'@OD7c7DtBrÌ) QZMbh!;XPM 弔쨞,b.bCcL- :*)|tj- VXXȏx=qx7h!SPA<5N|pټᔙq r`g-3>(!ϴp*7P9Xź&D)oŐyZD㗭]I1u`QÑ~2!7ڍu3פ+#Uig030Q7LU IDAT]b,l&FpMqH{-c _, "9!Fun43"D 'gα-mёclVQh ӧOniaxgLšA0,rBS̓. A2!;0KFa)%xwJEuN۰&7͡flo)[#Vť?ݯHc2_[T:NH8o+mŪ$ۭj!j308 x\[ bP?0QxZ xU,)4Mr< b*_%ZEOΨ8aoii +++-Q3>t0>q>~Rɦ٪{( ;>vqÓ n"+]Cmkxpq7xNêafa(ܐPPBp N JfA~9 8ǣS Ϙ[w^ƶ*ٱg6m YE: E 5. A2 XP;ӍEjw5*fz`v٤7NplLN3FaLxLFL%r yhʘד2פGKph1xg9zP+ 8CطfBXJ ;H}3xPo2+ie쑠^TJW`VW(]#P,s8#QC7hDF$8FL K VCX $n.ޱ(rDn$oM.d^Y|:!<&M&&̖F+=&?ph4*h -&xqK^kH>قCDpPy-o}sTbz6#13b6UT/D!jT!WȠ^fvR4]J&TIKIhK#-#QW 6QPp.%)X'(HQx&}VoaCaq&[Mo  ۟_! A 1 [E GRr2q-MU_ʣFX9$GM**5Y3%^.šyJ ݧ4π`Vt}K+@p?b5*"8xIJD6SCJ E{Nܶj=@H*|^{W8]ePq T;uDtFz6]qㅺICDzG]~~7lc,d\ I!ܞuSYbuD2n*qZW҃lO!Qp[Э"L0-ܸ>݃Dl̐CUXl; 7b~S0%lg 0.UGtXEvFY*n[m}WmziRv:;Mӿ CA`ib[pNPn Di|,iHzm Äe9`H0T *8~3ꨨ 6k8=(p J˒~MЛiI [dEÑD%8<=$bHBD}X({Ǻܶ^M:2ݠZeۘݧq׌*#.riAEz8!,mwNh?bq҃(8s-jG)7Rޡ[W۳wLbQ` %MrAGXIy#&df8x BCxw,,i$M 4A J3i:Oned$`;2l'ס-R@۞ɋ#gM֮%NO1ku8rj0^,PϿln4`H瓳޼kϭrU@ЁK U 6h -FF eŠkśVVjpo%.c)Ѿ`1!9Ct2Md.{ǻzU{vN0(!Q ܰɫh%v˫>;f,]nTdELVu,uX.'ڲר}mTj1opj[ "Em%j0}6k@n[tB>W*Q5G{ˇjchqcHą(;"%Gηk1 $PEއAt%"(/_wg9܅$׎z\3!CҺ9I{!q2w7kuH ^.{ -Ѣ^%7A7KoPv/MUdDH~آUCnaBV$vı& IijM 316^^  ՋQD$,f e;r~ech6=PG\9DNr[֐Vׁt[v`xtav$copй !QR|_`dݎn؅ՐZU^s[c-p|Η̋/h+`#@x"3G,MZ[RYj"kvPdSG{_n AgwI<8bF^r*6{LV4JIY ~{*HaV dYZlAxbȡ:D'zM>OrV9PC\!p$Qiky&yɡ#ה[)ic7|++Ddܸ:K)!B>W=QPkyq#WnL%w) ϓ-MAl #:l`h -4@d˺A\%d$$!?>]kD!BlŘ"I<)<UR~ˊD#B-WfrE{%eLH.G~( :AS/Wo&Z?,5X8_"ھ?_˺(]kv} ectd{pǣ£ KM\ D WrFH>lJG{ Y\6b&K$b!UqV26+lIiVV9+,PX)"q16!TG,Yb^XY-] %yPčv9Io"{MAZN<߰n_֟`X.;>ϑH[J UVvԬ}5}X6[=yOeY]P; `HW ;@ zĤhPa8֡abEEগ"Uܜ<;6J6lFMdlѻ/;@˖˛B{%y/!(@#8/t$$R ;KZU%Pl㗪NDfSE5GuX}BLq$<}oaa> ~Hd@4q-hZpeH[ʪr2X@.!<#Е'M0kDf'瘘$9\/Шf7nOt<׏ρlDGJxTNj!<)gɆڨ!/8 ^d {_BQFp44|a:(TEw(_NNHPi<\~tOQ . iQ&8BdCrR=.3q6 {\,5--KXX.}8`IAg\^Hj:&keM+gN53Vi==N&PK*pq.㹱m" nu3фp(Xe:(b#).`'+S{ D '6\,D8Fz"2hI0B%܈A>TN< J:@R8/ReD IBk8<1qU##)g%mR8\Cuu|ܑ8bʙa gd`jnی4p ˺kNvbu[/9 GO~ IY&-PxFc9 D*5/-"үdzx2]#8jA^5@&M?;ED"W҄a#,X) /fERi^Ѓuo,$(4Cn+Xfb^rQgӘTV;3H'V঻XDM̓q;Y R RI!E|s :<'b_TDŽ>tJUvPFW_/ip &EmI~fe[[p ]Ursaf+YPX(I qRIUȍ$EDGesOOXLp蔄PVA{8%d!7ݍ|egqz%ɩە$^^ɨ">DXF';ƛx㦿ALNΌA%&X΁mŒFp44V`*g)CCp5e0!Z^;,I)H.SM]W wʊ'_Y H? eD4Q1q>*úĂg[*H@t:ojLK&V7#\ U'ÆVqבQ9/kne ,;w"_ 6<yR5D+xuoMυOvܼ?/޼$4;E٫!)l'0&tu/z2vN)J6Nr,gmQ'ݒ@utsy]xN?GFH-:"C_(C m_K+"&]F`cNG+_bBEqӏ$(FIhc,B9*PhǂqѠeK;'z6>LpHOTz Dd4k:6ťX^nM,#6s~8sp.B z7|FH]}KvDdG%5˒\*e=ϊAp\+K\Lt;zӠ _쯝,!)ۥ[ -@?^~]G^R*X$+-yp[DY쌟e Dz IDATZIuJ9&$r O*ZSsNVz!~lMxr}ĩ5qvFfja8 2^?[BCXpq^֥Kغ6XT>ӿ,lL" _ S4EWoӥl\陇qw×Fp446]i֟/HsB:Hd|iim-"9ƒU"@M͊"K{ӗ(ux3a' >gBb$&+vg`y*/%an[~J*k l_?%eY퐌F^Q՜~} Q촯гmQkfM1nLx͑ f.-pP$9݀ȗQyǯxD2y,yw|?b)J`a%SGX^-ckcB2/| %.{%s*mB8T!Ժ+ihso_΋ɞ G/^TD#8^~spQʸ.-I "H"O,c;&SFt~zK c1GK`bk"o2&gܶ AWT;PX9I/{503}&N NJt$u/]7 Zk(sFb ȎBomKqd}[Dx%UU i|x*+^޵WpΉFp44B?uN`%:PNVV$Op ZROVh~gkLX/gXQrPR~cx>Aɍa$=G^'+FId$z]:*"2;h8>jf#̛f&:)x$jl')컛pn>sa3M1 N7?AdLqngW3նDx;vE}Uwrf aD#8^!d/{qr@`TIu Q iirmJl*(OyOE?nЊ& Z޸f> ȗ4:MU)K!TgFY.Ws>C+tlB60>ˎ' V}ܒzhhx%t=7HrlH`yAϘ#pHUr?0C$HtQ_[H,Adq݅+O]ta&vwDw=[^B]uCvN@Wdt>1oMkܒ/G_'3~MXA)3S/dGLunN2c[Py!TuOFkƪ#EgQ373[~:6'{ζ c;L^r@#8^%>_U@ EE?zE}wI60%(uj٩^h#EpTj-/a;{Y(Ilɚ-d=~&fSL0vbjRV:3S%z UGR>ZZR)Qn*(lX fks< ِrԆ31ZGCC÷np5pNr4tMO`[:9c c,rMS.#JLӴ ].[JCfi"< hU*H,-m1񡘬y,7A\90]](s Z.\Rb2QG gz6tr]NB A:,:Fj<s9t%v=# }"8w`W}\\hn@!@uĒLJcH N#]XnЩ'Įɵ߆غ}7&wX`tJ3eUݐ9&b) -&j[NT3ȋ;-I`юȖhɉz"@(8<8;޿@sd*i&Jl d݈[5׿˷۪U Go4o[YEÀiT&CỪP]?1y,uf=m3Cd 6d 1 e Ml OS'Q N*I<ȣ|7%i8 A­[,3*obf]Cj6wtOa^`LV?*!oa3%P@SJ' {3#B•jk`:69y76&DiQ}/_ȌYE+7#I""Oy' ((`ɠprXe&yc脸}I;Q 6!2'0p#Lşy5|:tD2v $@{s~zZ0EhhɎ;EM;HnX9qF !+c:63 d^`+lGCCóO:iLJ47'͑k%\r&#%:Z/q Cxz"a!ll`u (c}O'$#]& +qrQc) 7ݼ#aá/zB%`2u(u$$J$?|ؾrcCvɆdفKVra[[{7~APV593^{SUb^z Fp44Z?u@F }iN:}V8g=xϥnx!'6N5'. 5$]tQ_3[\7Oz-fx߿'R8#e[Ц";gOI>VHYO@p7(V-[QdڲErnV.@Z~t'a58zO Wқn3-A?ھg_"+Ifx4m$¥0K T^;׫]YOUC*a |%?bU;y̍KwV`qs sBră[ΫJWG)ŁJ&KIdv/.TADxaEWBGs΂՝:g!:􊪘y^D`خӘpA֪dm+LyH8rȩRY.zz*Toֶj)v_ˑ!Ϗwv£`"i"($9@;\?TYp Kz87 6'TBo%@#8^=~oF4a_".IYf XmN&ĖhE2DHd2JXOt8pSp?dgKw#Y۴c!]Vd.=J =9w/2y3 bH!SDx8`KtYTS%囬stI<UV2GnԐ"I8"/঻0a:%ZrxC-\Dݩ SDNNJRґgHlsOBﷂFp44r3US-ONj DtNx$:S]w@;۲Jo IDATHTXǷ 3A.pGGx ڊZ.'1݉ 0&LoHqxP6QF`v-fݡr!_D+Go=G/{8G3q魦 Ehʠ(DC+l;8͕AW|zx)pnvz-L|=%ꢬ0!!:pޣ99NDtU,LfWʯ밓*KR~S3 >ӯ %_cqR~!9HEeu g'9|-1gf 5`&9 \wkW,8ńhi=|pAƅ,[~,)v4 \trSDds}'wA/Fxb8>qAp@&"./!BVEJX!Z\CϜsؑ:uaъ"g>;*_7.WSD%Dm:It>)kl eyF##>*-hh~ɬ/vo]D%9>廌λmEnd)]cdI{4w7LȷFIOW%e|f{epu']Ғ%#E/eg \ۮ*-T`XwF z3a$|* nZHݰJp) %H\tTdqc6 կA YGudTmyH_>(\3{ pH~[ ;-$vbݮ.$:j~ Oq <_q5-3&-TFN#8VJIj=\3&ԅ(De$me+8j0j*%Sxc+'_VCq σ[_gJ jNʗ01J.ZbL7E }iJ%c1'vVh^:I9~knBDzU[Pxj {Tx`Ww~踗r-)Rtbz] tNvv5a,FuLm1 b(tLvdםcpq(ѝ$uwDڂ/JUX΍>gC:{{Wa%TL!pX6$cKȲ>vv@6OrͷN KγLtx̻89 //#>at;b'҈fvѺOIzzxZv9y#N" m'j#"BÍG$nprbRgAĆyjbR9N30Q[RWQ9 7Yw}ނ[(o_+ɱٹ DkC{콱BOX8^< ^sOu)CH+EaDx8u+FLpA-τh`m{p>!$=~V Fp44|7F@0Ya9pr-O;Tt'ϓ) Y⨉$IE )Q`zSB~5u%vJ/DHh8(!j%6V8.*Sɞ?ib ǃVԚu2]Q]@פ 68w5Q^F8ٲ0&S⣼G9+emL@t YQ-sDzv]ݾ[;rK=^ԻO!y%MW*|==B- ( n@Xa97OLtDrxc%~ybp$s.pQ>̢܄/RbtHz[Gʜ\5@DFtPF؉%F=n+ZҺq(6-OƵ ڷ;䐃ј52k!Ïz.欠.:[ԏHkG-#Y旇|,i|O6i[hhh&+?'<8cv6RCZ]S@D1 _]ZRP,ݴ'*sɹ8`x#B}ɪK8O$T I$AU^eQS ;ܸ%K6pմyoJ0% ~B<“+Ȏ/+#{ ": IwV;`r97(=/hhh&y'ӏ$GrnVa=>\sF뭙х0m$GVdSR!ۈQ;%'>͇iy qux3r|НQlヅQlTc+ar _9f~lr4N"[cGޠ MT>- ¶H-jkڃAQ@nsI#Zs@#8+~Ok5 /1< $2?p4??'Y4;9\,gG{NNʘXnK^_oNr(M&'K 9*`UUx6GV c a-FXNzgFlQ )8pr2!iqw^Θ-Q@B컛6DGRa Ԃ{jS`*ւ@'G>߳s7/r@#8?$9)e*!"N,I\uKË ECr†RX<.`]61̝cEQ`ס+Nn=ze6A+鈑@V<T QOYvP(FKWXOn){AR#gmUI50ԫE!X@~lE3+ :ҋjxZOtHM޳jSC!TD2*c)8w?|V}[ ]?HXR.KKuNH9DrVAuqURi[!l(/uXl(<= p.?Fx̜a^2=xԆcB&R9Zr@Fzx, WV1y?Ⲅ0)jXz$e Q:/l-bc6 ay~wh) bٱ]r*AȲY;O _=)x;CZ_W`YْrsUznޞ?[G#83Nv9AmŪ@Kx u N)_|>D3&<?IX%"ZSߢ﷿Qn"dҖ͂i{In-&_{<'E1bي(P ; {pL1Wʽ1ಿJweYP熊 }6HI_dv!թD)Q=RF>"tRS}C!VϟzƖƏ3S?khhhLٳje Juv, .Â@xdr9q×z095Չ%GlGd^3 Q작Q[ɏƲFp44|#~0p+B޼KKu#Ur$rRPicwoQHrz9n&3R> /qmt$(kC3'EH[J퉓&6;`Y兩)uoкtöi%ԝ{g9.p6K)ֽMfwJjXcnJ6OJRpf) rDGHv2qBoch4rݕ:Ed`Q⒘ 34Je5hGCw M o!:W u,[.]yCr +L %e^Du )ڕKkU1R!V/))w9x4J]Nq=wvV(ߖpxA~;\ز wҝMQF8aN:HrFE(-ԕCNQXHXZdx>CؔOp a.%^R5mGCC)ɨ1)nX-Qyn#dwµDNJo'uU`9GtƝE/E6drWZOv0UcFŤ_ƈ{F[.9^R8|RfDڡty>qZ-GbϫQ Q'W<+y2/r,kXog"De1[EH[ TFuD)Em4S^ RSg[ֲH*y@#8[=dQ5@<Ad+Kő$U4t-ä)8&i"n%Ha .3]UMzU9N+' B${n ҢA<%3׿TyK$[H/ئ#ضsMK1pR1׻kHOvd"AI km>m'A̖pAt:]:)t "+ 7VŢXDo4aKv'L'ՉGq;` n՗F,Ѧ GtBf~HPs=< _YK(+<:ix u >5< )Ic;0Q8%ݜ2vY?'QPqi2p|4 UB##X:IѱIpw鶮p@.,'9bòxyϛ9\PFp444|#8(`c"cS!1:.-|ȉ5$3uA:4*d/̴q Ā8g;`ՔɼDJn-U:|3\ϷKgϵX#9Boc5alw%aSsλ4\*eufEz?֚nyh jU]mZ(쨴[[rٶ7e:[?_YPOv=8XhRfee1 cP6iGHxGaTQO#8^>?-¡5 /רS=SzQhD_LKEG/L[g'e[Z< K\uo,>?7_ {IlWжTTX)@2~zY5D?͗0<&%%AS"% _[GCC+/~9;grԒ@qR)E6qyO&%#pJg#ԓ/69@Oܘ 7`tXI=)F.('cK.:o) he /Ug8~|]\QG4+6:H߿q4A fPbҤ#.%,/BrSN -11ܬங}xFČÝ).@I8qr1}(gu߼<'#j|Nãz $(uaВ}M~FD8(GN"PިKHdʘ(.^<.bG#&`; :zbOJ.~IX3LsK1󼛁't}vLeDmz9} "cgpcDmd^確n-Y1dFY;KL^"w [R/-j]ёWE1a(q4,>qH ]l\D]#Z#u׼{Eo4GT!HdmE}I3Mܸ,% !>Ta Q tLu99iҌCmwPHx[ 6-MI5wzUH3Orr}Dx̷' "}r}ʼ|ٜ`v뒜+SSU%~J,HIrWl2OCfԌ eIc9%?n\\ױK ScnR~,aK,ӣ IDATQcɕuɖ`Q_(Z+8۫K6wm~zvOhGCC`)Dz$Z#[2B2T(O%r+({D!t`>9*"@0[а~E{jRNw@eO܊k+E2%BR,Qr{o@́3|go͝AWj:Q?$kdƪ( v']2ROW9*#&1uָ*P/e]gUh2 b \yǗC%@[y fSTAlזa=#@-W wUm\ʠ>fQN`ihfl1" ' eTT,q9J7d!\҂GWzt4Kws2X߼3,SW֟ctY#Y_VxG9!D{/SUAS4rfĶ zn9̍f/}}cYJ^9Lꨈ6: p2_c@#8000jÜPp>>1a4r&dmM O\HNvbcK̛MsOLaEPÃ-Ē?w0x*h# 8fsG=6"bW"]¦!uӳ{lMʕ/ISHjp6Mwj6:$;'QOȂ2= ZOb_>S̖qtIx8d&E8[+$9LQlud Fp444AdX;*37нwtȱȖ`VfYyar94DRh K&P8rqCtjnZfT2%.k5Z2쳂cQ1w01ߥ}x TDNz:7AMz+9N3N ERVsQ(@R=ݝF7Yn*~MF-`%[2}:K}ؖu5UuҰ=vEF9TUO/(@#8rFjl%1 T^pPin$9"I>u !ΕѓuوA՞VDF*M\L>ܥuD6Gs.xy\A=9×yA{eZqiI&̈ kgoQvl0S{s u0Q=~JTz#<.?*WC;C8d;Np|e5B|T]dks=7D2R&dCQ:n>}b>Xh\e7 `ۜ(te Fp444LÇs˲sKpBZ]AJPvKKz%+S +d,-7 ˧WԹTHi+1F@>D\m=Ot,d~S-rkyIspn@ pLwd+x^ԑCh,sZ ︋I)ٷ 0 :>j\U;Fbͮ$zD.5(@#8&|c4PkSİ RY,wH[|~:|B;jr ?3ϒ-kbHZd*9!4(~΅I2Cr;,꒎(vUVU7T]Z;׶dXK Ð_7 e4a%OvqyvYKнwHT$Ò3w->t%yZqzwmz-XggUpgjEq)o`JKjo wE0Eݬ+Z|&Wjʤ;oI%-U }8RW(&hGCCÄ>6%,F'cH^!Ʌ8Ż$9Nه@F0ˬb6p:'PM-%64ϝ>&Wj c$ _t\y`.qsp4͓QJ*ㄛxi@u2^,gNVg]Y>jX`E^LF$="C2DhXQh쐃yiF.مv'VY&i<ё<]V8y@t%1f Fp444LRFNr~$Iˊ':Dt T('`9bcYMDhKY9e't_Lj~|fZh9@K(Dx y%4jaՊ_|n.a!L  :˰UτңaRe 9AFiAKk0z`nr:3I u vW pa}}x$7ʒC{^s@#8>@2ˑǡ8v?'LFULJc#Fm u%8l ܬeʊ)tRU?=+!h+Čf۟ІIDD%#ny5Hk';!q >`ۚ_a~.7錓ށ ) Ϫq/:n}90u}~ `?AW#deL8Ck -Mn(Hl#Àփr־IdR{ Q{ Faq%yIE'ЖRWNrdW"acjJ MԓcTux& b/23̋]oV>~n-dLv,q"NMsym2)-VXh0$$VM9a':]˗Ԝ)d( 2_Ru9:H'`sj#\r):Uö~ [0m4 zdmR$]Ü,w)Fz)M .Go0XdJMUjQ˫-C#8f8<ƿSXwծ+V=/ Fbtϓ:j~G]bxF>HI"8ɴowT=>ّM-Lku|TK5'lP`bq?"Ry$w_7t4[tD.Xlo֦5B""6bxU+=0D.[D'pC~a8)/;ӟutʥ|Q4*YQeQ*լ['d Fp444$pa'N*܀, .WZZ-ٲ$O(|cZxZRQݛ$!4LS6˞$ouJ^A%2Jo7oMDzڤz,i56-V챚<A 4gH*M[TM%M ^(ZԨDtu!}CXڇ^"ΗOum'VpQ%.TVl$ikO0 Er@<*F(˕Q|*zU^ q|u3hFO7OKAN:ujB$AB6*밨3dB(vk]d\ON4(IDٛcebNê5 X7&5ʺnFzHR|-Jo"'hGCCC?|@K8עe)Li lM2_j@MZt! i]Rb)]!K5|dR:[a@&$5%{0p7/ -G.wtD|'EWL#tORJ./HQ"J&"[(:bmRww|K=pfxbJ@W@@EXBXv!/CFD,jo&^@DDӈx= |lÁ }xxҀ 0u< >  KrVL Nħs1dL5څ6;Rw TA: N][UO(e Eѫs{hGCCC_׳묞h4_Ru_y+8bє"+#+tWhI<ӂQg%".dr EM"6]IX,͙e!A]wӆD컡$>?|:Rs~đ*62hwT~h^_ فö0D*=.ʜTWl<7.%p@mT8+±StGWעo#75bsY"ɨY?' >>E2L%/&G^m[c[=R';J>íy pOfWd\v*0ӥ8$ 0BQ M=Z ʺ\9c ܭ&z4!YVssѵ:IX[B粛M\#< G3)qKx꺦y<%}]ۗ#e6FtD@;ԆhWb=)~b fעqM:QoKO#:6_/6']V^C=3o۞ڠstґ{–OU1kb}Z|IǬ:\ Lw#ъc$&\Exݮ["oQZd S4u;rHvG _ˉ%!P}zSDM4h"Be;GKBru,!8FGwS"zu%P4n!-ȫGsˁ?`ab:dH#:".y$=L%ɢnOa)PrOy>[T% _nhhh@n{B|nI;prȊ٣9B|zb M' $)Y'o剭I#{&Ќs]Zco~ \^"ywWvfNGw>*2ڱ%(?3!=їOK[Wůʵwu^?ogiY + f,,j=*$S":Ĥ95}FJLv ʑ/?> .`D o)emG t_u5 ҅&!rY.K? )-r/XDyBN1K%2RrPUG`s(b%i[a&U;l};QJu\!ʍ]5p ZrԘ:Z:~r\8+UG:yw{9IJņfd}5mBqe9RJMNOHcpAhV5C%fМ>r6< ~9.;$d_ա[kGLX@iϱLR_H}y2Kz˿7;Ckƒ#ёLF7Şه# O|>o؟B2 9'.GP[)"JT~?ƗunDDVUDbyW)?G;3aIt,Pˬ `:|~ o}遴˄Ov0cK% N`,Q\9#ʱƅgAlbR@<Ťn 4ALHk&$حdW`RRtdi|'Eu2!+&&#PM@ïI'_21[׎O9sa%ݮAڝ%eNW2. :Ƕyp;cO~!vruDǵn;Wחt)-GD~5 Ak٢5wq&=mcNP [5L$8QяvH-tY9~+&4bY +ALN{Z=``(ޢ7㻏r D5*-grV;E,ؑ$Cb^|.=WEL6yEbp fIp[8a};LVO?'Dtrj$kfu9w"]Zm9ţ݈'Z YQټl`~(Mq/Q"˛W ?k!a~[l(5T*ո~6 ;hYjG jʚ9 )?a Fi:eA4z%,NBo#8/pvzX8h8KUjaHGt,yOɁuw!l a4 6}Okxnܭ/"GvOpeg3*iBt$LJgE":J0.C7.'45 &l|ZXY;wgvن~5/dkT)k˳KI}EFꊆ}A rxq) IDAT;Bӥ.0N(A'&k9KGX&^ "J%xM5ɵ*4AhTqLt_$|UrSF#~iϩaXMB2*[:C{#q[tOrH$L$ES2Oi#2PpABR!}v R#$7!9(0SH9GG\ -2稈PIdؘ#ԫ?<41'$4lɠe97D1G/`燗SBD&M*XRȌcn7D%[gs(:U$9.;#%|)𖒃C(7 ݷ?"4N4ů? (.1!p[}l@'6,6/^gR2#HIh͘ԛ1bvt_nru4ۺR:rx^2JfGnPtJ2'q|pM_HTx5F0h)߈W`߬Èp@%SxL+_]gE>DvŮ^zu,ӳSK /2R#bX8xjOzz=EzbAA}1^Hg˪ZԍU&9Jp @іN#e_[-n[]Mj\Ml1z zꛀs`yߨfI"H8~tW= CAaY»46/R`r?NmRW2Nd 첚WGʣhåC=ESGM"pg1/2#誙!H<;_ z ;jRrhЬ֓T T<a,b:Y6Y$x&!G>Hm\Y*$K#1 e"DrCP]6|7РwA$wu0,1;2l[>iF=n8_ýz7 stuY@i'ZGHQDuOxN:8Qkٓ\XDQ"#bGE9n-qfr*r\#T8i}%/[st:IeAO7mC>QF}}樄ːDPE,:޾sTTȧ$=ϭ~GZX4^Hgunv xVqie.(W?r*zu~\0ڪ9{4į?pey,n!Ɏ~i)#XBl f=] QS.6-T;x@\]I?j[d)OgU?'Mfds<Dr]vK> 5,ϦPﶢsƢ:Y)TFQPv:C9IEIdcÍ5hJ1iUJ66xd&BE. D3S˝+J IBBqo #Hɶ/baJ4*ZYw\%]%bqykW<+|-Q'd ׸Kiw'%j*15;_?[&^]wT'9;z`a4A0Q:- =hЪʙr`$ZfWtؿ?$:hG{Vb)s6|mbuF@)bIL.2pU2cÐ^'j9Ba}OYTh@ CVgY:7/ 8]X3!?>s24P#|cOM~@Mt0mfpuҨ8Gna9\,zN3WNC:_;f;Xf\0| ->`uíf$7eU-C̈b9B':n.#s? R?IEzXoQ?f;,v$ Ӈ|wn$= YohhhhϿ‡>*Q8r;us&% V'h wzNHSt~;.WߴƠ< r0m8PwZ\//q O(3;,sgc<{|<<8-Q֩_'b.'P嘿pL[i.k*² JV%qnQS ܴvOX}nu(p!Ɣ%eLYl7 MdCϲB 4g`_a!kIpG!oۊLc$d\߂.5M>>ﶒILXl9sYCQ+˯ B|`6I$SnIf*K FhUu;XX=m :XqI=lz1>97n mo|q o5@F 0iv\~%1.a.vL"ej dP|~ a ʍ%Ќ Nf=~P?#%>H,r&Sa4w_| EA}r`hh85b*YBqBn:)Go4wwEd`/|!AE2ǯr4P6ej)aFc:/uQOȰM5Oto: #1<WSdR/cg>q2N?)9!x~Qw|_KJt8>'k%ðhA? bLLd_ȳJ)`×ìOC/<={|F4Thzl)qr/ui\Z@n1.?JQY0G{ ȴ匤"w@Wxy2aIu@D#ҕ|5")Rm@Nxȡhhh0o8м\MNHag}ɍ@ تpIh"ׯz!wȳ$2kraKO /'*&AtVۈt| S أ#J^^^U[ DA+t uUɊ2"pԺ=CJ/o<5)K j6!AR#~,= 9g4p*=̏и+;#0L{3KS3?4B^\x0cmHι`;;җݟ~K8A c`t'蓠=q-M۫5/7U %pWwՐQ::~*eԻ>q]i'ԧpJRtEv*ʽ4ԏя\Jќ`wRpY$ةBOycN:,n(DStDbW$.?_MA}H!AmFhhhƯ3vw|px8dM-*-+ mfID;ݪ7o`nΈzHf8}nT JYYl|O'')֑O:yRuBv`MI`FʷgL)݄8E:%ŐnP.Pn;]!i2S|0ϕj:Ԇ6@0WaO6>Ee[`.ǠuO%|9ۙrj v.ȯui4Ǟ7ܞaxz_"'T\jZwwݗd>EӢOy2-\Ya|[̉y:Dj.Rhţ\X-/O akJ)pJ Gȣ二V<#/ >{c\%7#naOs1~J_<T?%+3a O3bV!Um?~{ԂÄOelV)x#GR˭{u33I԰[1t䦒4t,).vt+{${rM|J/ޘ>nHT ca8:GCCC5T0СZ8ԭ&A{q0lf=?# 7dZa+t.^U^s*F ?D. z Ah[J-@c6uݯ=H<)_>?YR8w*찂gje#ϼ(5qnQ$?"Z ::(4yUy^fRi.Ll&c&8S\' 'VWV`< OCpԢnk\P)FMU>:pq8>9YƉ>ίHqxR}eoW~C'U^UŭHH^YYdߠ 6ЃWqDG[Hmx>x<>vE'RYVOe&_@pnKgϼw䆩l4(XsEcѶFa tQ4ozC)Np1i ?C=$DaIgDRh} =קOAp-0 ~BCLB,Y^+f/{=+y,Vջe,1'=T< m(0<;ENvFy KNzz~g#no6ہua?v}x:+}!b4nJe}K3 ZnAɏCG@^,G%%鿜y˜7L>QEstaJ Ao妤j`q8A1#@ѧT)~r)БoOɽ]#@ŜCX%J$47Wrł)vDx@["Ўa lY5=@ҕ@-0 yMqƒ_ҩY!$dʠ6u*8 EiL$6fʎ(j:z-18&/>N:xcIE#B#e͕aUUohG^N޼`~~X(w( x[YxW 6dž8]EY]s =Ad ,~H QuLKR{8EV)G˶; Y*Q*"$ř|^va{JHih%PB(+YE_0*3^>2+$LecQDRR䛏ܨsx*M2B Adb; xWB۞B qv`ziZxF^$b G!~=pblM>ۥvn|2`0٧7g̎A72]'xU^;JVrCB~?|[Lv0V yEǃ F"+%xD˩) znKO-;~)LHR.ɔ G$'[2tj,@W[ !(&С0n*216 : "ӣ_,I30;' )H "ޠhD]{fK}OPEV01d 4)q ȉXݡR>BLJ^XvLI^Q˥lQ>g:6m=)60ZYO P+4ѩ^!Ȃ9%I$Tˋhr+HǚR;flJꧮ٠.VZ[O y`vVttA-EH*L9}u?bl(A&3޾RfyI[j6ZzMޙOvi=_}>hhhh OP-=& =3_.q-vtR./WSmQMcHI!dK=?`ǠT4Y1n 'QqÁ{JjH?lPVKEx눍;691+drr`k&ShH?~ҾrQVI(IS_Տػ4Z!=%Ȥ+D_52^  iAC_Ŗrs&BtWh誶(/1p{"E$A'ӵQi Q Q|H2wdbKU(y/F$VĀʞ+lC+O'[/!+Y܉t,[jݮ@Gwt tHN g ARv5rTIDxt2?&őmr%rp$u!4 4GSItnrˑZ(20-kz mxi[[+;ܾW r ΈSjpE8#'}tjkˉjzoZƔ`l-0>rĉγR%1` g_6Bn`ÙdG52sF&[qd=6-I$ nsٟ:M_HN#oxқz :iɕꐆ_6.%yl,8JF D=\6`O+Mw48@@؟bBR(0LD-UQ3Y q vو.|PdǮS^-~%#MKj( s3ϘaҜжhO"M=Mx[٢/hkzGOˡgĒ|㯐72iJ˫kD}Z-RgD =/A:FG=pp:<:^Z_ӨD c1y:u!E#Wq^r&PGņNs2FL?[J G,(0X^ oR?0l.A+NaF:ReyDׯ _#^|+0EX&ͣcRoJ-{*/`wT l/ԇSM%뀺.]7m&HrmD F5)`osvygU(|NY41b>2** Ee>Ey$*֡[Z "8 zsdG~: Vz.fKcq kzxYJJ%NcrASGʬ#}(}[n ɜig8nvLZ^JD w '!J,9JftRJndw!tMvMCjpw{|L^ (%Έq{Ja83Wڤ8|GCCìG؟p d - A t\Swca̷[8?TTb4,uژ[YO?*b $[UNsx0_+lFwJuBxJ{_j00ꀊ Rf}Vl 6̂}Mc;)+Vʛ(qJTL@_RNkDMғWb?ɟ#T#;:6 )et]ZR-a0/tyA~g+ȡrpVY2+0le$W|]1^S[e=x~m(sT>=hhh?10Ǔ`C}=pVOVUn+6ҦtCG-&ʡSTz}/3!'̳/ }{q9P33*9aHg0TIè <gl@׌ C0~Z_967U=x3X)}mD+EZyCN*Nyqz7 ݆E9bs%<76U7ܞ2Up&e_ _guțD ƂC#!T[{j+wmF -0;8$>"%y@rQJ`DŽz|Cjlgh4QQxA[r; 5_* oW(ƚ7= Z)4*<ؓ \a[\&HCHzXXyoܰhmVwі'o !CtxEZnΟ-?y4x7s0U;>Fq 5j( .Rsd$)Ҩ@r|k;A%6*oæj{d|9r޷JWP2Zav|g_tzVW1姉(P"lneBPr"8г(vtmy IL-b#NS%s6Q9fԋ:#:܅ g)z軳`*Cm; 3 `GF'{kWë4"sw %݌ iAwӗ5@HS;UPoblkOPxqJt*]C!f^a> a:Cۙ{_CslzZr uTԊDQ\R/}kx9 CS{EeӨh$%@/Jm|Kqx6 >/; X+I*O]u:0\ΕriQ<RҠY`B[m i4V=.H<*TPuG̺FK)?܈z5rx&!$PE*_/wàT YG""5",@!W|Ĭi"Q܋t1D~TwKW.]#gydŴg;7H:$h+뭠phþf)ve\!m; MN1ڧԦPt4F^jrrV,a՝+4m`9:A+;|9.;;=%hhhx5|ge0E1\AhKJīz4rb.|iZ2Ǐfv7WCi;'`mdO^ky>=@q$dj?^ƉȐC5Ȓ^WC% Hp:0^ѠPt"TZ=6z=$.6:N{ۼxz7`}Ed44IU:ƶO{9rN<1vɾ\]ѩA(y]c65O& iEuhVv<NHmV(|M z1>eGXm.6Sp:WIggD3\Nkʹ]n`Y9v'4C`HPC=:s"¯W(Q\fؠUtzeʧ}K?8_rkۺSCU&46ۺ:jiZ7O+efe*-=q/mkX)|m{JZU6ڟȃuQ?|1끿R[s!9G_ѭ޸[9=aN<3/<"Z)n풤iuWUp>T4i_wV pug\N8E0U#мyގz)wr;e!(?+u-Ziv3EMiIZ=A.\kER;+;zkMm{JZ'x8H8v#`^!zNz-R'' 1p|?*83:R@Bb\rbS\'Rϗ:E(2o+Z6&j |pq@hyyGBsa5%t/: |8Nںh(X- L3*ڑS,^q;(m]g7(2yu\Y sdgO>pϯD`enRTjS~xo֒/AKe=^t<9.p\MuL=xpjLd۞Rhhhx|0ij+y/R1eJ-Jgmؙ1UlX'壔>ܨ: V Jl[:_+|D(W]䰊kzh?LAOvX}xz;C5UWN +HC=̴׶LC p444 >} >НǑ¯gxlŰ;hZV!<B5 \3û` aAFFc. IbW[MCݜ?=,j+-tz ;z%0^^(!/ZBXIEzN<ˣ y\t eЯSeѧʘϋsP;j8@cş@QcGJ(qTS.,?1L&cN4h6ѯV.; -҈U_:un|%8fڶLC p444p| b ː S$WW">c <mALxf1IWLѲD?a_rBW[jx:i!Y Oi\{W gd`bfvf9@t -+9[+<"2,B_ƌe$5']8ܜBh*L6΀ȊK04Q<3V5 V4A5T/ÈN"ϒY\82KV S1N]bj5edyj95$RkOLϪTf~ae;'kKLlӿow=eZt%(^M٠NMz*VC Qd.V5/ajZW<㣵&9p8 iS~^=o[Hݪ^ Pt?rj{HR,ٺ~v&7(LE䯂56zG'_4~8ϡ=?ҡY]4o-jxYév2+Pک,8AX^nݒ ') ?U|*qi`WY?YTzMSE WoLZkm{TGCCÛO4s|wjnS?0&;.u▃bi|enpj̘0&vqPſ%%s a 1Ǫ`w  ݟuLjy @JYn ׈{WdO|-F^xsTɅXҗ<7 }9 UJr(yeǟ-'1Oi TH\uW4x 8%MHDXP:/%C[pw=Ȼ,b^ ^\JUTs(;#3n55o 5dL/ ) oϿ[ ?^cpC/Zٟǫs#&c*ڽDV]\|,%bw&@8Bg9_0yX?MFjf5% h4$S%7 ־i4 osDZXMUH or@\G玎)mb<*Η3Na5}@a~ntA霕eL\"bl>RH$~WafƟCÚ#/CRȯvU7OGHNYТ7󯮫FkhټdY Д^ &&J8ϕbQ[e$SL@J:anBv=uh7pe,sœ#=уFGݫ&}33L7%_U0)Fq/IyTw+x' ,Kk䤨D񱜮{c/vH ~|#$oyI\ƥk*ɪ$` =Ů-Uf4Iv0rF(O\ PcL"0]|5YEDŽon֊DfGxmyxf_1CB_Rb!%VJptW x?Ya=$J rOw?hhϿ : :;`ťkX/か\x:=՗nn6 .dE 9k-,7X!D>}BJL'12=BZ[vVVx 3h1*,+ORW)+$V"\ok87 ͇n4Aoܷ9I` IJ?2ĝ@UL{c\q0sH*̴lBD+ jdf@1띬2S0Me9$8>*Kpͼ?cJT)ף8 >} zGDp#PQWB4uA 孙GhLg^[G'|[ f"Z`91LUxg+4|:B//AZ iY&knxt|@4ê_*%r&JZ,o o[㪦~Q_6rط>Bʅ}2c϶l.9Y2S}+1Ԅ5 b,A7aQY-bBtq=l }MezI&M`1/y9ޛWNmr=zGCCW|&V?VDTg6ˊohj# D?C>seڢcAl(R?p9.M,,#qE|XR.n\|u[`HJn8);xYJRޗ?sEW&1J&0E@NF+{{CYȒ М9OOǧ科Lp}DE+p,5EST1RˁijOSԟT\7#KUG̙Zw߿qF 0R$0˰i䃧S];|TTջ7vmG#\rj[Ӊ!ʺWX5&  \$.֫4ww7Wo.mO-U ^R}[~Rrf|ty(s3nnn6񁑖o }IMH%,gXj w ܞ)1́@:}B|jaz&}f>ҍnWkpm9Б^1bXSF;Az=b6o={}TSJ0&tϲ G)]ĸ hy*g%~;zwz]>Z̕Yh`ׇ g,&'ؕә-1ZB p\m:P;4[!B$3ڽ*+(ٰgUe mrprI|Cxڏ2m.n]X tqRz, HPIW|̧ADQ[SB"KS+<wsIn-9C!S:"[JӌߪUuҤ9'ؿ@VV:zC魼9yQad):%/]aJGPJfW2@ U4iSA:Y^m{ʜh?@0_&ͪ~J#s CyvI/B36lbo݅6~n C69žlJDV3䱜 `):,9?-V p_MVb)PɜnWZ/֐-+F80\m[d%@d^!8]QF2eER~苳77▎ꬪ'gmat/Chk=+F_NÓ1G$=Owӭ+Wq*wmD [x /JDniG$LelkSC p444|uUQ4CR< X6/+y$ SXhޮ|~fa ;ehP; HD29@"2Jٮ 1:V596M) }N!LJӜOi)2kh;ݶ9Gr-g1q.#%"0GgUF EAwPU]1`uZ`e % 4|~QK7>*R7=Zuz{Rbԕ=Vv0e~mO-O*slG("O5j]ZZCuz>t!M>5 n'azGIH<>CcPZd$XgkVY t8[4@D\4vQ _Gg8wI0?-sr2 zorv 4'H7M}.RuТ KcO +:pc޶q[0; koWL-z)蓺rƻB?{h?),c?ʎkA}s =y U< ȋ70շO'fpNnf؟[-8/0ps ' n}ЕG`F8ryR_z:Y^08mїRoB cqRCk؄O^Wvh+<^+t^)L8Z@^ől(BPrjJW+9^eWd<.v!cr`[ƵGuucܪ. 1qyMS?!QY_+g`G0~n(H`ж%y!~TVa|uo$ Ĭ^Gk_;ZXގW,{r,sg2ggRR=7ޫ$e_#Qzԣ0A-d)2|]72dyc0t4Yf_CBiA[My|~n1׽V:pp whhhfK% /-(OY}$th//l?*(YlKf Yʰ|H|\GE_bXU5$SA kU fb9%I^MH|FTe~мA?3wq#=H{^KM%Łf[ߟlEQA7311س v!1\y~ҦCr~𨘅"TbqSy^H˫ taϷf͢Nwx)꒸AA\Pȧ̼< eGdA|>H`J)8&߁ƇRF>m4(j/UXז{Aq[ҼqE=~=enGCC7|Ǥ?u[\sekP8PUk FIMpKG &'dSR\a_)PJHV7t$ds-uG.ԑ {X20=KK'4?H2^!L 5y ڡÐHz/Ơ+cl 5H+JZWQw'fǧ)1m]p>@N)RZ 3S;"g]Ss'Eީ&5˘XTD$_KU<ϱ_(䆷TݯWLC-M!8Ei9,:1~1 :Cc E9 ހ[zݰ3n3Hk^qYkV%'Ԫ׃42J$0$aSuID(K풛K-\k֖W  BBC3ݫJ*J?67z@2Ŝs*)Sfbt)m\|) .|u?J*z:[ * ٕ+NZuզ WVgmokuDжZ|o?`/#~ԷnR[jf};}!'FNڻd0#wq3G͠7W}6P4ɓ\(g 6Mj.w!"\zGF'pLjvs)؝v]YpM!;ukc A)6B" 1'R3H+Bln&2i'9/JӦ+bMgT}juaצ_C)KPCAHs?` xtZGhhh0lSˀQYp)/x}}dAنO܀ |GeeExQ LH)zhI}Eǹs&+g'9}`UG @#9pT+kl&hp=:=)7<)hhh&7pR|i*^+}+9nN> IDATx" Eonp< Mx.pbA6De+|Ek*=F86 .1kvuQ"m5Cs tC| ;x24 9Y7l'69V#a'(WGj>U&qe^5W;f x`G[zhoyǰ@8RJڜ<|U%2?(Ȩ{:? epc%}tJrշDU%ORdZ(M趿Ps[gXnG.q:U&Aw\P;xiׅ:,sF>RsKj/-v#۟v*H ;.1G(sCCvMJt#6LMfM̎ª Vpܞ31u:h  Ꮛ20u7&cu +fB||{2~hWD p444|럆t҉UՋ5pO !0drFK gV%%@8mW?*eJ9ἧ7Kx@.б\6IiX BXs9'? #Jꥵ$ }bϔ?H[̞SĐߴRФ}okw *ԩsFd2kxK!'B'@қAqqK?)فvG-aE5Ѐq vzp 壝暂3x]GCC7O/.iL*^H9PZU!k7BV~8z ^9ϧqU2To@ gݾ-87J Nݟ,TNgT"|S1,6t{Rヒ@Z,{:XkNv6DVY,!;YE4[~y_>eDLEoYQ F-S Ժ$1W QUR"m *r~A;6&K }bx|(mtKcnuGHZHa2 ׿[C-M#tUj|+:+_UNh5W rH50iQ_F~k^F5p&-- GEVe=)2!}㕶\^Ӵ\9kJGv_F:/'48:6\ 1t8Uno MԘ"6gĸùWNH3TJȸA|Ptmb)%-&5Y/,Lkddy=:<wiw;dcU|{25 ߗYTi 4N X+W&`qǯV@"S7剎|$F9(Qܤ$@V@-!CM@<0G$AXc!ϑ>]\!Vh(<[De9N:*5eJxKBJ:uQUEjSM,|gU ʧwa8E4Fч<7g5A9]9"H,}u)є^TWb]z 4>} >#6^:eP{ ,3誮IwhaR\!d45:Ʋ.ͼ 5:*}73:&LB[Fo /=#wXf{j V4(ڹ,TUi8ǟ$4?8*x\ʼn=~S+2_J!<|/3Q8Wz ^1OkDoz\~HjꙌþhhh?ӄbZLx1]rTN(СfUEeq+Y+M1%;z_N7 Q0BJ*e +© 1|,$g;Tjh&^|H+x>JWNG_UNeżX>CD<'Y(v6XG#gފNOg Gdt: %e"ER5Oh|֘^V'A5 YLUĄ׿.!hhhO41ڐq8Hr1pAV"HMhd@ObܠȇuR`4Kη&) UǗW MY#B ϗׁ9Q)wi \ ,jY*Bs }X +[*A+`ˑ4 '7}(<1[.`4fϱ+tuB$K')CI"-˱=8M8^*< sTWtDgF3Ko 9&`8YTe[8ꁡlbדL,r-AVݒf^RBK?K rh;D1Q+]u>GЙ? q5*LlJ_C?7kX߬I n8c\wU .[OAh={GI^c^Wt|5xoG,b͇WHmOy;GCCOZPg{p /;Gl7ap[Yz=38A#3|>Z,2ѤbT\"=?dT>˛xyZqT \ -*`Prj|ʌTU޺|>> ]nWͷmCQ{ؿ FsGyV*8O *cDoc.pi~W䰟@S٧ԙaAITx ʵW<ǠexSdʴez@.h8H+Fm3GÔZlD *  Y,au(g+={ 1 [LpCFuKX+[_D~93gAfW՘<QM r$E]_(GbSw+NXk:U2 ߱@$ެOmZJoD_ceNK4_x4Y :]Sh7zVmOy[GCCO ?95 ѣ82zJ.VxNg ޥCKx>JgI_wG`%>/8V?M=eņ x @׃>?D~-3c&ѡu(jׅas5:]VRAwR^H{&I%I2ay2ȑW?G@]]NiIsfu-+l?:\[k@k;ohhhĉx39dk{@grt>qXё?8pqWqY#Ԝ0Asjxslv],1g>(Ym:Us<isE'WNe'g6Nݵ;\-Cu"Pjf`@\hG p444O?33S871믵a_I%4 ph|4+h7KX,x>U [VRnW@,[@סKc>`If<0!#xVŹ蟑: !PU;&USC'&W^2vnat[WĘ(9̂&2qм*kjP"axaQ~XM"(%Լr qMH̯)Jhɼf ȁWZvFE-D^a].{ .k!LaۊulPRoy wXH.q:PŠ IVwKX|ϰx,{$X,F'2I3x>۫9p*AafNOM#^Q977QJ6* V!V&xkaaUlHh?*5mpFV*=RxS,sdn=WFvV'Œ#%T!rWR8冀( 1&vA p444d~_n/_KQ+/!_^HcLHXsٲxgY=,݂loUw X~+?ٖп (@K&RX>.24ȑXy75q8`r)ȑY삁<*+2Øo%Gِ^pߧ#$i1"Asѝa]g<{ClC?:̹sމ 4^ٴfJ^wGhhh//O4oJ* #S8xq~I~ bdDb[{w.367 NV"3ܒ>M H]̂""1ZIs҅e˛Ř w?; &nϡAC*iϾ篎ӷ(/w8v;mEQa%G*;J4_\jn~HB){x9L9h:3Ït$gL}-0xwvh- v9j>SHC# WyT?ڈ| p|GCCO7|x2< rI\>/ӳ4;|38* a͉N FoUb-; v$H[V"*oUk ȂcXYMGQ0M5emܮT@hʜ@J-AR!Vr\1O,'";5@^N^S]uy"Q v0)`8/ǟg\W0vuLHXEpⵆׄ]k#(h̶%E&Z'XT8b垔8pk#RB :0rhO/''drp8%vPCT1#ᰘߙ "ȡʐ@#ЂĤoA rhe-+ ګ9y@?{ Wr%oY;x/Ocsѷ{5@@$_5FU*1_Ln֫<% 8򮏤С<^"8꒰H^-_šޠWցެ=52wpy"3CDQF0/(֊veln6ٵwJ 8YT%UJ }~9PR$_7+dQoILPo[;[IAg%&YnFqaaDoCS/ W("(Q$1skU[5 ? |f] `^qg()Q'iViںqjF6F$utd* 2mX3.ōqШboN2yHr9 k57G*?AOmJAӸ9\J([VwֵgsdA*r݇s讎ԳBFQ':(^q_ nߡ;5NU ZvE p444,?w_?a/7?ف=]:Bu`rsg)ZQҺŤ'ܟc0 /< [,.d5Ioʤ9IykNƥ.9Hݨ:%(7ٲb[ͱ.z(}s1|Rnf1I\( ,uY3 OȁPcJf p*_-?Sdlm%C* ZiuRJF` nW:3^NcYlSP=c^ v z'>*7!tcD'F[9Pm=4+ȑ$ANR螠{,禔7vͤ=Weyo| r>H"&JNl`ȹ[nR/ r\W44vU4~uEPyb<0m{G p444l'2)Oi8\Ce9\\+6u'U cpmۆϠ>tQa, Q9IPir:?, Vƒ ЖDA<#A"o9PJjA _o@OYl-af])zUm0#"z!/&򶷌]h.ٺbxx.LBxѾֵpo-?!|ńv>/g?UkASQ* b)Yg|F Aynke-B =3jQCVxዔRqO)p἗sO!Y~@$SP)o3t(I*'DžI~Ÿ$>+yrN)_AÛ3539J aqn`”ZTȭ-%??$8w^roSAH{UbA\z#78o-‡Ç?ua:,7eƒ "5]:/(lH㿡?LYD94K Nz^;Uj0s;x_8$N OE40PN>#t;xI%}#v+{upPyk촛Z~ʸH_ .|͘TEEYN yފ*w+g234UEh IDAT{+v跁hhhC1Aa쾰WZ* A[@Xݬ2Xܢ]eXkA%ߒBdo=Iz><5!?N&PtP˨ ۟vE S(|^x|Y*VJo-<&9Vsod3.bEeN*ȣrGbRb݂6$lbTAFyK_XNj(It~nP=4 Q|XZc] rU#~V'yd}35GɊ.#oW \Tͺ vTQN&v@H0@<c5؞շT>'v跅hhhLkih`x /-+6wem2)Dߤ2ǩ! mRR.e =5^$1KUBsSӏ/$Rgp .t;K f ),CK|(a#alq{a/"qQa"4Q&9 fVsL:.|L'U@AHfPs[m8~| ":0Mz1ܤD-^ۦ+ N*jP2Yӏ/Fc) %}1W䤤:BVy㶟.Б`X@F/GTA=5y%邂7ۿ+"݂߼`4?g:">b'u_ݬWuPԠYnOy+Զo~[h58Jy=誀фWhc:ď,/]r- З TF!$XUQ 烗wxOE t0m#$1:-.6%XkN :,a9*ץ >Esυ2׆M+-6Y`pWeʋxd ݨ7neyxbJ9,f$Y3[L=o\id9.mvn:ie4=M2ɂ7Iv}WpD "tdzk;/.y_4>\_L-0/sehYk k^u_w颢>QA-aX *e>:RFѢ9*Px% gyhv?? Q[bbuaD`dzDzJx%E2]cZ~Ϲ78XY\J#^rZY:»hهO8,slV!xzz˹sAtI{HR/GY)2a^n"q* zB # ‹o\d ojq`bu+Q1+e{, ɩd#, ޲Jz3ɱ@tkף Mr4 -,@rԷ DŜ|jBdO ǻ?+GrD$*'? / Go|GGGoכ_ۑG"5?oX6J49DELyEwE];u=$Ep*7bƔ1U<-TݫJbh"4v-G}( 2"9vɁI8:ydEWmaVzdx V%jdM˷.൚5sqDy]6%1]zx;/?nn7/X{'Npttt|kqL( @Ű≐T@vRMrNQ%9 ?4Mdc3qQ1i\v-Rx;|7wgݷ\\6qwVȳ}nX/ ZxT#Cx]_\E'8::: \HrcOUX8SYQh;د8Û|Ҿ`"&[JqHc=3~2jF[Uya҉dG],q,S儗EVIJrUt.&9lurO:1]ԓSt1=m5,>uOY۶hdMUgQɎ=wtH(Y,5T mcGl]ai_Z0r2壾HբEwntE!@ +~d])ʹ.JX ÚFe մRM 3x4`8Ioc!i$ǘH!$R!ʃ1UhY\:^oycD:'|@͉ʭO?;#3ّۗ#^L>fR.x_GXWN"4%޼Hhsɢ_Q&x_mth&ȯZG@::֒2@AijjB%_$ 7X8D'T@ dɐF"LE3q($ $ zj*?~/]c{Dסu_y{ZKRE+9.قܾ?׉{;gpV?8l}et‡|_o~=-\iwBl]s6h~#v'2T <9*Xq XֳUYnEL:Y\.#%HrHl˘hڗej1ǖzYhy>DGq"i=ʟI %;|Vb9[v& uW;xmZKi_2 T971c#6ȃFVcԂK%ڤ}<6y Zz=LC5j930 -Br A#Ep=/ug mΉ;+(5]lY82诮 Lvԣ:R!7܉E4t<7㈶;|GGGW_mcoar5}Pyo ΖgLw .qP| 7K a2`ks7+#i $9,x%c£/DzFrd NjHF1k8M%բl#-/B栈gղi?jUq=7 8^=m͇}+-㕻ydr$q1-O}z'Npttt|?sJAOjHP_2ao1^Rcc0ڳfq?=R-Z-Jp?2ݴ~[8mBḢSFmREXΕzy΋stcZ ,ȉA<Ɓۧ6sU$}3إtm)}sjApk 8wOǏlvqzko?ϣ;!<ְ>:/85SiH^6#nk|۞1(ol\P8,,-źGJ@!J.=g6 v94}̆(xE3$N`(Mő kdLfg?Dтf𺣸X]K{(AT 苋~GGGW1at86?Ui(P\]_ru7en KҶ: | JU)߫݅@>":X͒bz)+OPH z> d'9YAhru:bHϥSS<.?sBz|&"~nw+[&HFh`??Է%O;5O]8llUtm% xM\Qߣ7>taQ7b|?n(,RH~xRX~ g8*f {ޕ 1…8 b" w\`'BthGrLIHgI%g_1k2N"9"NJh ?+U)^`ؓZ.AX":j荭x %WŖ[gekaZG?_}7qKXL继ԴDDĬJ$+3Ekj;>C:Y9J$G(XJا`JddFbZQL|26 x#PpLtA "Ձ1< Jn A_5Ѕni%Q[)%w]Q}^yVէmuE9́h%4Bf,PxyQ E@mJxw$R%yyjGukaeU׬Qw⢟:5N4,/ZWKQ5zcE͒rkQ ͩNLjcV B?a;m]Dx~?=mjC@uj:rvHHn>7 ={wћ̖ F%n]NɜSB!\,;Dqk32#z_h#&DJnVU^oET\h>j=B'8::::@YpHKs &s/VKĎ4##bd<@`E\kYSLk,S,9 XnV+CHgP 诖z,GBF"CDi*cEGmڙeaCe̵A8yrC p7lChDgI)m6eE#9?|[^^NrX5E;%NNsjXhOFSW:7_V9ǏrHn!m%Q|7ms(7_9-yVOE- c#^÷WD%ش;:Ea,x8TK.>gvSJ !jcgb@JhQUCr?X5/jHakMZ"5a蒻̡1N|Pw*eubhEqG'k+YYT r^8DG>!^$z#2c:~/v$%n91msuvu?wE~a?;t8VmتykXkh y]zGzun$=G~m2IǿaGm`I)1}]eur2ݫ]ِ$[,7d*D@dY*l)C.1Ŧ?4$9*i̓$'(d؆EҔxaF̀%wYyIsGms=xGqۣ8QAɡ׭_xz ?H2Q(ǵ%r$%.9q?sӣ7>Wt}o܁Qi~wPذ0A2v:ag Qqmqvrjj/F#6h^wRI_2qAH!uE!:xa!24]eg\NXbEG}E6nCx֯ ZctL(s #-:!kRٰUO~?a8ȄG 8 7: oᗧ[~բzNptttt(~{ `"=N;}`%*NJJzu# *e7M%BJ" ccD;dB:љZpCp?Fs<=rE"IIFC.ZӍݪk9D[J#P8 `P{8ư %߸c%$iʩX]LWJǏ:M$LnkH0LmZ(]hZ ,LF̃ݢwEsE'8:::: |͇($պi$(rݗm#.[02:lUږE`f.SE!=DDPG8tI1UE#ir:Re*՚g#dh$/<{uײxlyfq 3n`UDeuV#J܏IjwzQvAN9=kj3Emw[sS љA S@n 80#[ۣ7>ot^@_y}XWkD7F6|"t?=Rc}֡睒'zvQrC;fST?>W3Ƣіz4Or j4|5_쐶y!9w&Mm##@ Rb4dYX]pZUݣۜT^Rva ԇP%~,R%"wa&Y6<^nrq7oGo|GGGGݷel e'@C$CBO48hNZ/7+Ţ'+>Ll[9įz ~W IDAT}ST)+ Ă~y (*SfGr,*$AXD sPq-,e1FyȎ!dq"|A@_ď X$E!*֫a —sTX_)F:XO$u bp2HbD44_x\O6(ʴUh|y%<'}cW6(5qtόhȍ/=>VOI,_2.يh_|^^(v[*{?Ipk6wJEWL3k !:Z%6ZS c%$JIXvj?7yI?ۣ]O싥_:|o~ Wg/M.T TUwR~=Dw|JDygc4!:t<>?zGԦ 5Oh#_5w%$Bi|s"jcGBI)3j"8}ݣƬ'^ye{ k9ZvXV\:l$!d-muVM3*$!bEtO+fu (ohzY5ec=rJ=;/:IEKבoXifepSr2#Dzt@'8::::͇AҾDY?]E[(>'=D 6|t4n=Д{vrƔd b-8?-zRH@~;H@Dr䭊'9lޢumVa/ v+ kQ1f+K2:eP*lbuźƯRISd=xq $ε 谄fdgW0 Dߚry!z;vViǻw/ ^**:]ښm:CW`EscOkS .=ެ\]]Qj'$*}!LD^9Jrl۱.R%9 A5c +=R*ac:L=~)ݹ?≨V4GEq~*9rVvU[kPl'AuMRZq.IkkҞ3-^E8gyG/B"=ZLr **ObEɍ8ԾL"2x6 R e1F亦z2&F$h]5Dt2cw($%4vb!6B6Hpckp$,oEj4 $GL;EGqNDJzkZ\.lS4Ek!uLz͢?ʼnCr萴ñI][0^q߅CnT#+Lyw:D x\?#|'fhxwo _Zh`̕H>$II49fGz,ʢ mZGe71b9mrXO#a*T(DmzV˲+Y0Vc!HYWN ͑RDrhU{DJgu\MP,׬%"aVDGIkjN2)G"jGdTm6/VMw;{"zFھc8Ĉi,_;GdjK F\;B7DrlHAimʀ^k-`M;\mjo 73G) -q.*7'N~@brjͰ`Wե5IQ von^-:lHSwu-廔vnY[cEnzm=&9rN'4O4ע7tjFyA*1ju'0jORSSm%ho `*h4ux:=zB'8::::f ?(ZK$u`ِ6hI<ݫܰШPo}za(f/*2dcQ6mmgg]Cc:Ti5mQlea .) ' wV]/F?U9~4o\T)qNYvDĘ$FфDڵYy&TјXI~SX<̳@}kJ}WS^cfECTGo|yGGGGL|]Up|EGY$eוᐆD)WƯr)Rp1HPL q<O㶳}Ұ#`9QH#!6GvvK P) -Ĉ !4]@$JƅnQl.h-vmPjzYuN:>azԚAt+G~/xF궖Qr=Euu2"/9y$ͳ'd,dQSXTCl`q2 /蘉7sJpTڢ Id~*sC3Dddr3Dp$"El\FN㶳\Vbu_bV&"@r !JrNUa .+DSUY>߬_mGZuCw;љdLyϝ#{к&$9b.2%vLCuFuq]jc]/Y!4FwH%7PS"jOah{b!h2ٚXH:%7hJr rT9zΔsI?_1}eg\IȬوRy}'RfߟLWIr,G:]f2~eIr 9Mb};<,R``JjW]҈ 9IS'96 l[Bts I-P'*CҤ%I o VOngŊ E?UDZRJQ=nn6jZ.Μe7=/m\؃p,\X’~/~aXXt+C*E&X}@Vw,0)?mw[I^6rج([2+yXYӆ7O<<_YJsWuB5%qJtPJʘ@6e$DtrYHeNZD+))pOb43Tɍ;9#C|&7,FQZYut Z꒤m[pQфc;h5o\ 2`\PӰhr<:DP$As- Tm\>&D%5R/xS4GA" ¼#sK9~>udut?C#Cyaa"dOUvY3oخeg˛9nʡ-o);Z;MKnˮtrOLYI\F H d5%"]FjF~SjO{HdT 1a? ~}#AZMͻk #nt+zvhà; O|W8v(ޔŁGc)7n&Kr8pyL5c$iGsx嬼XU|Ű3@C5'SВRhkDcˬ}y: (|'hj3)m2^}a3HQ!":`$8?YRrg@)F.dlkfeH䆩xsP.h3 .:Sm_KpyVLvb5#U*-8R-~eGkPEC?Y8!$'՛J.Iiq y/s$0g:wr .*j: 4̣BeetɼX]-b%$G mJk&9g5 0fb t@WN/%}ӶO^oWf4%&"W=RMzzƗNptttt?ryG=?)k]<" E,*.H]35CtHH}0\)CDhQ!i:ι!4(a<4,ySNO\] CuNUL#d?{ H ḑwl6 /i &ýTCb5ƅAϧ\c/)ƵuZ)a}dJ ?0~-7e|:药x|IO|vԬ/}:RrQQ$#8ںwwT˨"bӰkecӓaO2ڢÇVoPZ6uDIP,>y1Qߺ6FJJr8}2Bԥ畧O9XJՅx{Εw:7 q\=(R UiQWmM:AL^Ckkpt ESsɄˑ^w.w273H0՞Uil-l}mPNE,~ΔfD$fNJ kï`GwȈNUq2UpOqI\SI')oLp#DqTT<9bc+hjp"6otn+$3#h X,Z,+)1)EY]ꖰ j2n~E o,?NH>ֳ8vѲ4Uz?z_L(Ljۋ;Fg6m\DR>~>C ɡ"eTR V S5[6boè[s^Kdwp:*F]Ǩ緿_ :͇鸺pn%%M-dG\p/yaX1p0%TF$Ū1T666zrf%}BѳOYE,1jOdRh(a8tPu,\u7'$6,%-Ϫ19JPwZ⮴E&7ʟHgb`H}Z%w`?EYtUUWs&5~ێH s!eRϼ~6h" s&:Q<%1ِ϶azO@R+P zᵬ:  .}EZpS-= xk=zB'8::::^c58SR 5 5OeQtHэ_J:h\fNzF˴m62*ugSu)~VfaM=YQe:L2D NpT)lG-o<\v[>#ۦXV+@dZ5yam7'jH=;Nm+bD$ŴB\+$ճ!GvԞF!r\[TErXHEWT1_:Jl=>'iʋ _m2 t=$K fSY34#$ GhЗPslB |3E^<64,ԑпAeʆ;斮>1"dqs;:U%Ghq2sgLURS.qI1V&@-s:H:hS@FOfhB:҇&jHNWzv߳ޜt vUV(K׻>kyIϘף7>tp>,:}Qgqsc LP⤜?hHhGKirS f}6^'WoVwYXl_4đɐ- QNE =Y0m;٬X_/ۿ̾{ErH舭"rk;AšTH6!9d3DO¶!6:>W朲 \"U<%Rc aOAQ`sR&U l2b?#2%[bX[RJp4#oI:Ҫb9N33~药xE|C: tg2S8s1XxN GG/!+Y! uK;r>mRzf dJXO&n.QgQ-@c[sX'PfI u CXjqpdJr*[gŵ'94ݸ޺94&&":Oo'UafC4Au&t}9B /Ba IDATLTEvgGrjGcumWf,D8ۥatq@z׉Nptttt2>|ucu:$OtsUT$S/%- 𧪰( zː͊ÁmG rv0¤|G@x 8Gr O`}#Fhn'轿j5 onk:6+'ƪQc,S/VOqiO9N4шYȌ5 < `AYȩ[$y I4xݨt_GߛRzlDj|Kh_\Ļﮍs3K҃j_/:ʸ~{ ‡5X^BC3lk6CNęޛEԬRvF_N_ծo:n3,!ZؽnnzWNptttt ~{ ߗگ Iɭ:z6rй4il:iV)HbJ RV%j TX朻Yn`X68>@y)qi;(@ܑbz*󷭱H]#,w̷*G$Q x9Bj]ܲHEK!zCqZ$9+u8ö1~DUP&4zI!AG5$$ٖgtgARfuaEtٙFũ֫ЧP#8=9SlIO 񦪰{b^ڈt ^H 9c_2N؅0GjS[fԯ$(hWUDW Q8`ƀHECԔiFZ<WܭNj ;fC!+OE|qTR,7B;gIS/:/_M&GykOج2"~~Ar/Sntg U$ 5(y{B%wu_Ȥ׃ʒ i3ڎ#1,t0E6X#i FkF[56h]E- 8噔cӍ|9O| 9=Di8LV5dʻg, % dZ#ڈ[Nd'*Ud)+N-8e^֪DK?|\&9Hڸ89XXغDdG`y_))zZRqEnf`jDG;>9'e4Gwf$0aX $jr8%$oydN%SWXq9M$ydr\Û2*9AJg_1CjqQ4.GB`xfǂ&9]0Dnqjj3Xq~yKc]jlG -SB뉝iGy,v@&r 0*SU-2%P i-i8yA{%mphUY]$ 4E(U:=a=|vYK2#9sP'ղBn]ݜPMip.r6\;g'<igi1(X".ܝ4L :{}nx֜u\f}H^;Q5xW4kҾ#Z$#|{zjTj^C; _0n)Q]𔒼+z$A<>?4ac6mF%w5^! +k~?%P(IF]k8,8>vCāQLrwFsr=[Mh51=tYxZÅkeTj5kDj:_" U':&7\SJ%/wI!вGGGG'|  V6ˍJrZN2G,ϖ8*NYȩ%"6hs1>#)%8:H"^/v n[ŽvQxk+P(xU/r]0=dzROBz+g[K7۾k6h!?$upJéxjMr] $z*Gc}K֣Է^!wӶ1юb@Ђ+YnEJMGOmpvyziG#Kb#%B8Yn@i=x KDlJBvh%r khHl}߳lҗ"vYT#섎ٻ$aFyyگ+dMrX-g<ܣ4˘cI@qn}Q\嘢gVS?O%?IWc}6˵$uԡQ%.\r3jvw#Og(HSsj,ʳaJ*nYyHhMq+C뭗GGF'8::::>!\(fD8ZZ݋]tyikAcLcG1`eyZgz9ecV_j$G";%>V8tXx1jֵz4mw3T#L}ّd;"u~*Keq<7X*&u0i ePy[nM'1EB?zsgZz̛Bt5tFݩ>VR/VH  p0z^^CMZ XIp&_.QFF'8::::>1zWQA$V?XYN2GG |P:M4BxGКAl*nNOެFu98&κBrl[XlHݻa2lw<]|S&>PʓsԏGVY:ܤvW\ֳ>Χ儠|QuVj0)_izJɲ IjT2)!KB]jqHn듩tqL$ӝ?EB 5WKnY}D' TFv z7T-SUHO" gs+vrT,!Pk6';BdNE=$)#; Z8NM;P=C/i,nBϻ Fbmw͠u|)5Ƒf;S}\9܅q f&ZowQnwWnzO,*] ?nkBFG2 IRAd~^vC?!9><][{^jSXy,jYA|'7:8: 1q=.^az>0µ8P~>Z̩*YՑ1^S) ɡ\%uԛ`%D*υmQ%̛W&:]i58ax_ &9c.C,{ؚ8S5*X6'~\-rp3Tթ+ )X5wOnN{;]f$ Ʃ-G98@.GG'8::::>Q\_@4n5k>"6'kfեД>Ke6d(Q ..ֱxm aH"eOVb ~|Ӟ4,^I:Y" L]_6aDVmڳe9M VȂ c)4msͤV0VX#KVX7 }4[kQT*d$gTj_Kf|V`Q7t;lSf *quvi Ykpݒxz~/dV[c$W7'^-6\bYR❆c"ѯթV*;7` q Xh fs0xq㆖=rt:Xa.Gg8'pKk_nwL'kNyw9R=PODF1%5 _{\x~}͆]OJP*K8.ͺs͓=5,Dk=l^.t ]hNײ*Mopu #> &c{s XXT 2\KGLpK’ m=Q8D]dUM" , 1zT5]#!ۧ]N %|:4F$կ,f$<%M["1B|ԫX@J?d9fXs촚)n|QNjڌ*f$(OMa~;z*×2 O܋5Mfb\`TO`~YHT@&}'mY@o1mْwϽdS[ꄇFNptttt|&ȋnV+C4F䃽NJL|,pJ!ɑe!9JNrm;=YfsQm :Z8.`9H2tՌ+jBn7(W YfF5b\`IQB$,;l%=;}P-iXp0E9;N+&^w :~\j##Mj2nfn+LŔrfz>CK4Pb<ӡ>J98%y2߮"ޗf3 i*ZD+顡:Gd„ShMJP'z&2˥h >m$ыH $'bX kBr>\:IA3fnZcJӤbcew&sdhSTj!y>XUKeLqg$X%onBcg8%IL[I)TH8rS*ZrGذ:d3x~=Y`m_"e\6E2B+zϛD',XO I f|LxJ訣~?ѭ:&AMJz\C#iifI2hK&|d$4#9H!|D}$)'J$v7,ꪂ ͱ!ֆQyXxB#qc)*GHjjU"VZ7DGxzɼ 7oSJghh5mCby!*6깄30l~|*M' z{HtMpVwMcԆ!"G~Q4\]ieRSYfxH~ ߓ[n(Npt _S=>3Uq ,7%[H9Ƃ@4: 2H$B*X~!$" VoV@ \2zXNvRIS۬;GMLtQS]ԁА*~Nh@=sGkY;O"`'~{B^:0N5rZIDGJ-1s˻AGe'ʓ Fan5tnZ_ Òq5K7Z^lvzVF6[)/[6l } ^cU\ur#Nptttt|~{MvV!.7rw6zX/Y"98HFrDHk VHR?)mOV囥&Pΰ_) idFFa_-/6\f[n5WCnמ[k {dLM ХF^)H噘DGsTr~?m֧|'Gk B9-PVnDfw_)ݾͧ)j }dq]9T_k(6ޝjF'8:"GGGGg(,@,:oasJ9FzNU?ʚ2/iNP&HeD7Nrl[`!'L$8]veíQku :F~,?giBаSJzjMz{fֆ|ȨU%z`X+G8f5iL1( fjTrJ]&;çkr/2&6_SCn&B=[pr5fY2EǣZFԿNnt ?·W g/bm1׆J*29JyV]# zh8'2Kb|Hcڵ(ez$++"hG^`UnBCOʬNިk]@6Vrcjҟ5(6g, nV^c]q:g@(*u|Y>h9N^}=IsnWPZ0<$HZ@׫!OwI-|èdT|ңGotD ?G]`£2A/\H?Ip]ӨL̢*ɡR!9DK>J]d+HMiS|496vSjaۓa/x=?u9yd[ƭrnsSXɾVưJOFnWDЯہXm5:ʡb=sHG)F+e\|"mR $ë;njM<f5^[)IEwؕO_@ESM4UρтNptttt|ï0-: `lLrO%܂gi~0&6u$9YVԙX|([ R h-CoW IDAT(jjjK!1` zcNWotz$ÏxsIW#K58r.uM!q<*EȐإi:首r(Ћ:O7!S z " {P_? 6$f7bo OO[$<[{ @;DN24)%RΕjz៛vtt k% ȡw4($6:_oDR`HN%O#9'k%N߬d-ҧ?( ˱CNa;dg!fw=)X?؀q3)bիoviWTQgsҷ{cw"l=LhVHW KqQ4>=idƊ.pQ%5f-<Rǻ;xa'uthGGGG;DY牁FC&=ԗX*Jax;Y)'ݟdOHDۧ!pe_IʹX 1gNa)gZ&~&| GVy\vp_]rQ/;% _ƻZXek1z8+Sm`;O*؏5Ц UU$ӦU bf2'E^Yα ڏOm'TR:Roox5-2-E߭}퍎9GGGG!vV!9!O6A8Kdٌy$ M*RIDe"9V'n~HJ1me%ŅJ~ɳFxOEd jYͼnfUeOca/{jH޳+~͏;}+wD EV-5PUjQ#;4<3 Șcd::tX¼iq ύˊÔ˳ZT|.L=;GotG'8::::@˯t&ѡ6J-10=xa#,cZcO#f6r 8KOdXx*=)7' kUð.駆ՈG;W ۻcXwiX"f|MMDGsc?"|"mQt`øFeHDTc1_wJK6֒\GotE'8::::@EG$Ǵ+K՜,,~-j718U((Y$GNrh$z:$G֑`JF'keN[v;%B4U-0d8GZcI`ޓI1*ںx{zr? TEɑ+͇tg%N)AFv9TiBeȄk"./j%/X#f$_k%RZBY+z3ץyg荎C /*#(6} jGUz!zfI?HMp7-R'97M%T[%M2xq j\tCTvlfoyDǴȜCc9'~؊3fW^S_<};qyzu8ɡ{i.FlR ]C5ބz]6'93ˉcm;0{҃B,2Bկ2j8IH}ѥr(T}BpEv07e ;F8q>|VW c @Q M$i.h@"9rEYd'l*JG/W%9m2JY/nU db'<3XS! b'X,NըYuRyR\ cA9zK7E6&A? JaÕā]roF:d{1o bڝASZR(5݋&]٬Z sJ4|"3XJҚl̛GotNptttt|8Y@dQJv"(!KmAS(J<,' $6? %=$Fsj2\d:FBhSP--=@<O,ëSkSeVC~y! -2׭o?Yw P ;I)}FNzR5Wy|nww4-nY3y'4#=\b*o=8]/)6Zg3᫦FL1&:Fof:::&t+շYn`sj ɡB#F$>g&yo ?0ЦV&o !Ƅ P6$,1$]+ ]j$GJ!1eם`sH7KeoƖTrk Z?]$6fx`;B8.(BtXYÖ9]+']9Szn.;z9{Ux'JWLvԞS} g}t1%fvM?D =7O<$UAEMj*=q{թ?5iLki3Got o߆Z~E驋"?,DN+kr8;t<cam?>AZ+19f~f!e t)ؽΏ`NgA9B5<-'3-`Cw갥-/rvU6HYu9 qj~?IDɎz +G j*^g9!pBj:)e 8StĊBg< n2L n[;, H荎c_~bXvZA~ezyܷІl1R;e1䗈 6]e*דCOOt*0;[qX UZ QZ,JNF = z;S9 _e?*%h _h42Ws g2)GuN^5,0He]}<# zU-<rubm }J3yaR(/BZNo9~=)_7Z[YNWgH0fFyMx,ݥ] ::Z o'#o{fP#9>l3or=#8%J:stӮ/AC zޜR)%Sݼ=x@ G;BrZuG ;\?BmNL^T:-t&R\ZҍGx~:L֪SV5NC[njZ/z+5*aX1KO >rq)ֶk}P/p9] z_xXwa-U߹K1+x)Vn]4-lDZ o7-b+X9C꼤'^:4?Mv8?9#R)<iM c@shaiH{ޝ?=IzS#m5- TDGR"w#]Wrw 9O~ _E"ty&E8,~NQͦp#DGԉL4p,QkE"u{[(‰$U):Y=\بx5|)M6'q^(786:7;dh$G !`d= )'DW:XLW˲AKM'(94R$rOϏX`efeB":ޟ8B$]eZ omWɼ)ݡTgYNYK)xl/M%En45Sf1Vu,REF,vV]D? 2llס[CR"G*sHx<գ2\ZY qt=S<]rz τF͂I]|x荎@'8::::r4m 9WkRlFH|DG:)};!#e ZR5LJ@meQaR+{s9&Ė"SEAhܿZ,KՈvNetoq3iK}L9P&u8*[vnn]rzhGąNn sBDwcv`ZCXnn.1gƅDY|Wu"SCjh;QNZ6j= ѣ7:^PI言EX> ~()}j5^S92] ^C$%  u:Yp$=5Dj+ۍ 5UO6ŁDY~ tdUŖV.Ԝr\I2DA'r YϙlK>NKEHgZO 7o*eZ0_"GGGGG $DŽ\tTŴEl"HvLnv?!sf#&$9$M!?·G2H[R+6hӼPiJb,`^*u;Hh~=l2L5wjiGsNX+#eₔ!¹]wK%k<'Z+Y:Y$HPSȧQ1Kٺrs)z_߷V=3B_I՛&ܘʚ;;Ͻ ޻E]:o RGGGGGDŽi$G>U"wR#4.`Z#"R)\s:R#T:CIm]7gnTr&-">iҥ|eԆ OoQQLlwe i =*;B%kDpumkeԦ]CzPI"+=DϙD[rX;7}6O]N-b+X^n/O7PT ThKϜ !'̑gIgk+~YGGGGGG},ȅBaaE WW19d\y#9d~8=G,[ڔҰ$#d .9g ^vD/?O;yMqzR]Q6ˍ^rͰ&J4A6\CKNέ;J2#(MwdHa+7VAjZVJuyS3.bַȧ>dCYz9E|KZ40dkrD 9(SN&bOF6zFNjo '#Ɂ[NkF e q٤H$TIrp֮a;YaPY1( k/Ĕ\>n;- tB~:ny7ɤ=*˿rҭ5另:+xN\CFsXn /'eAhEFyuH*Iy1?<ʽC"YU\.SI"F97e6IFd) Bߥ)Q#ā荎F'8:::::~j$G 19Y>!ieϧbP6;=7ɑOly Gx?L#R?rȦhˣ9뀜YSqʰ;!:h}zxZRO&%%RDgPwj"\Hj]~g5Dc7|Ÿekgҟ弚HI}4hMU(kT2aHPWRR]89k,ܲeєH˔f5bǍgf DȌ@U޸adC]Ã]]KS<U~.`WM# g@ԓWZ(BG ˢ`Oߑ_ wJ+F1aL 杼6K:FEIt)?uՖ7O%ZJN0(݂Z/ !;[Z污q_NT䃱eM^[wLPh [kyU "VMA88z?>p"!c^. EヾO(\(7__RYw9HyPp sZJθi=OМ/꽨%e^^1YGI*F(JF-3_[9ƌ"OGK]97cꉧ.;ގނ?z]N}!( 74/~;!zl <>LwwMUQX/%a63o*+EM me@)%Dyyn[CV 13dAGj晩B% Ci^[JkJ8D̨j=|s:?9gԵۈs#Ngu9 1.Z&,ȼguDjIʴ.vԿV ω1;?[=z5 ZEF1Z~t%AJilw٨Zۮv}PLg-gJ//U`@нѽlν&r8WVNx1q"Ǣ|1U"OUه1'YrGeKA/uY=B!~pNx1ڱB,Vd">HWϨHr/sE#qDC@X2.JA!Tzm4†vqm ߜu|lˬU+D;{9JM͖-pNpcϰ p} WQLPv7V3Zᨯ~r´d8qN7Ώq-%K5|@`<|BgU %CÉ~2ۅp@ L!MKVΏpH&^NWlssq0PL5ѳ9NZyw:WAe+$CZ]WQ^,WK*#nح}+&Yc IDAT5r@=r5)BGY=?[ʹ(#ޖ( 7x ^}r[yb.W(kՆV >!egiܱZN˲6m&9oԴ8/7 'هõȶT?ՒDĊriPj_Az.E;dg>.kBTDW#+7/tIBB n i*Y.rOQ9unӞ!eYKG "j)ZSԲ7ߖP;n[noW>ž^u\ϪV0[^rV9Iͼ`~ԗbUEOCW6]&G99:lLrm7w_Ve?!A Kmm%jeaH, 6 OHF-'WNsqEԂ.rȶRd;/lzk!yz./}+0!SvCPT9r0ؗTdn4:V~0L-)ﵝ&'tsO-f.)hɎ8DEd"}rtR+Õ:9:і숐{ލ0\-I[a_>6\`@ēO[F'r[|GAȗ]f.rrk~=?|zZʀW!QUM]rJP"UR5]E; >٬Q_3eno6QUcg A׊pD,u`fiL}b{#שׄ;.?*ܶuEN wsZP_C#Ѯх؀6myqeqx)f[blȼ}Do@21[OedA:cpx\1ېcv9J! Q)(f}%;nA8IvYmSE1});ӱ9u$%씭1՞LD8M᭡0+Bpf4ψk}q_P̶GG#M/Ͻ-iτHCd?u.AYDZMqtj]bGaOsxjQQ>5X.8}n0ZPI+o1$Hd=w o^mn[b Dom@-H/Ry !f9QhADJmUqAz?u^N!uu-hp0:U96!ht{{3M ebuDUBSPg!t;dꇟEyeψ2[N5JQ)͒g'w(XTP!}Uͮ!":i38{AUkvt">!лpA7"Q] W{״8&Z䐐͉n(AlS}j;/7*s!BK҅A[j^|r}0K˖yŵ5iˠZv:HV׬}fڪy8b4!=uhd8Ɓ."ۖF8S2kY|3bG˖C}55ԯ*WaV 3v(|zNS"Zk-;D|kK a$=t-_CKN'!m ʟ[R.E*7?71·ܚ꧞=__%Le|N عP>YcvBi3:9u;%q.ߖ{ZyN=PT-E^nzU8-,eZlJn?KFk=^ p_0.QmoQ$]FQ^-~ 6'D^\윙"GaJ/d:yO=}-BBGY椋nl]+gDK5Ue/B/ngnS̿4˸۶ BVw#W7[i]ڴo&!l"Ff.pū/g}ߖTrSeIAon'kTI=)rM"Qߢ櫨~zgsD"Jx&Jf{yl q?>DNW!F}X6;-*B{⦆BEAAQ&,|$ҠX5C-czk웕/a^ r9 ))BzŖ7&]tWO'SJQ֜zV:T%K%ަq׉ g5V[wX̥}GxΩ2A~De"RXl98 CHq4"#޻ߋiրqާ?)r+FrEh?r,MBaDyʊͮl)#m0a+{$3ٞSɶf^J$:PѭC";LZy݄"b֛(;ҳDD//2)jwکg]u >-G\FHɥeLMp\5lZ~o-ޔdSPVQ;LS#JuĢK@ uEySLsv䱜 gNjX91P"j;2>qcT^dR~$_w16D\r7DI/(2@"!2 SR9t,ۥ BWz|y}ў.*S9K~7`_^_K8uD$C\sbڄ(_J(=UQFoʎEqFt6A( :=:ni~P~NG>`[gpvPJEݙ,!Z[e,{~Ȗ3Z)6wU( VΖUh LyR{^NzɸeenQLssYB&(#2[͔^W.e|t>m,{ y߄'!u 1Z6wWDCbQU pt{{t)BIQu>>>b8bYW t1SE6]p/S0WZb1D'F/zWaѻj@[@Qާ'нѽlCtE>8=7CνLX(g-|^U<.ȥa lL"r =<UZm}i0edC~v5cpV-_qRq<@rV9юi k*=OH{Qoo۱qfs7jB=q,[|-@m@UtCš, 璙 杺EU:~L`oAq6Z_iC@VQG-HBG92BfO |y| [q@ee*;GYJ.M5*=DgT[Ҭ]ޠk~1gi7CQ{r]~7l*S?OkHyMB?x[ﬠw1V\Eɤ^/Ģ@uH"wъjf>m;?i\RZT5˂)*Dq#OY(m L)/-`g'uxUxjb@$路(|1\ m9'V (!mNpp ǷS,6 o\78/k#gy(v[\` _٣TPZ\_)RҋHDtu}eֱ\U6݈17f_V{W`rř:ږwv_ƾznDb 5ɄqkR lv@ M_,Ln6A5٪5f旟-Z>̖3>am~3F\↿am}`@Nr>}Ն9<Ԓsr,nNUtk;JZ{ާgvm.b)YWOb,cYǂ#b[Od@DՂiUE^^m 7Fȥu݈d)H̼ !S6LkrBds H5Ԍo=;?o ߂v:!rPLKK \`9ԥ[ZQO0e88͡ U86X% ‘"z2ͽ1 ) u|;X^/i$֞z[FbXJ6ֶrh#'!| sJL:_7=Ge<3}fŤұ1}?q"L1߮6rS׋2:?eS6q?)=:6۲ s$lQk rMWI ܟ4<TxKe)N{P)DZmϖ3)ay R0[|ۦ[65؅v!N^DP)LM "8t"byQm\LF5YODQOr;´ȕZPy![4adOg>eu>eG^:[up0`"DBY|?fc۫Xls؟3[V|ཌྷ3[SN%O(s_9ʰ7aLQzO\R9ddgqvDp)>GjM?6SU9 AIF eEdAd4g/@ǖ la͡$aQ2kA%gYL8SH~mȅ茆[84b]Ϋp~[GXƻ^C-[} VφA)Mg^Uve~!"\^Ft]lW?*gfE[QTFtE(OjJ>6Ӷُcvsx$"vA↥g51n}vgc۸+{3f_Advh%%^l^%˃1bշ(6GA,)%>irV9vj+]pdi:4d8LPKs*"ڌQeD=g2qL@iqT]MYt׳}V >_єtl9-":,SF1jR IDAT>k4ƅs[3ihqVKwPdqOj5qwyڔ EL aj #0ES,#[̤2jпm MP"=YSu[iU[Q-}Z''+LA98/B'5%Zjd{ܔ#q^Z[Y8><2z,WL6*3M%mV UgjMS^ +]N\3G ;ᗯ=+-nzVInWS]~Mߙ5Dn}tBʑ'Uߩ[,3U,uh'rRk.(t$ R/s}ufHzHT~}u뉝$Xi#4' ֏H]v'h" j#4rOlp4k:Z-7m5_SS!2:hL9O"_Z6D0-6N0)3o88kH,)#PhHKH$\XQ5/flbG^cb E U$ԲNXT-LE15#`x #"zY'PXH?zחDdN28(V]JݐwWS.3ίrm:B+-OUXM\pAՊ3u7"r5wiFEh[yv5rdL39Ed/׊%+xODARKКEV=5n8qc .V_?)?xv%_Ds'tNC ,*H4m KIѨ(]v-sVzɇM1ʴ3/{7Ӈ[h"1]ht49%"ԡI0zXLNSyDLM kǷpHÃ'@O+b0V?Mחt!J=I|2uڦv R2& XV*n869fZ[Me#۳RY;kYOSKaI\|GFG/n҇ț-n c:`7{"7>7gyFOi@y2&>PH4b@jR2[c܇U-[Zc> *'}taeS#3At[$[e'꟣M'+¦t)D X#x'}=t-`0Nh\a,+ƲnArmZom Kf?vƶuD.xԙ^SV^.kyKTȢ%<֐xuUTVG$H`J.WS9qÝAۣ=ǹ;dSEb7uf ܝcfb؎ 4˴̭TtPKZ4w7 pS@d:j/b_)+jKT4Ͷʉp4blڒڦ("PXGGm|GqvRJ.t̷A`;7mL/04p~i"zC"p@ +!cEo"]'s?]]tĆʣ1G9 \g#UVhGYdRD:> `勦8avF_Jz\*>{X,n_ܨ~ڭfh@u !q4Pc~=Ϧg՜K15'!J\48v k, C?qd냈us1J菾PǦGdQExV^noN):9VSSުV 4½\i?z j]ey9nG"9jbN97'qhVrK| A'Ӄ:Do~}E8n0=w_ :)y|vQ)qU};)č,rc{'"yp pOHy/Ȉv/RscP륷 3>S\*7A4~oJU%b[C&٨kIa yGCގҞ7,DDBG]1Aa2m]J6j=O~ZڪšMf`y\]ST_>EDQAN녴,RYv̲'o HH؃+ VSYOӼ?'6nSڦw願-آخM"iČ LABը*5]4, n*4҇?{NzȈ0LSX6%Oř@%^Pe5%EU'X=)/ΆgȻn4xyŠ!zQ`}^f9jxXZM)V{ Tn2ͬ?O]}]g) 7"z嗖nB֒i7)[’ OÇ ԍ'}jڊe,eEd72hDt\`ʟ e6Ұb1izJE |B} A4xSRRc2 +c)bP|"_lN\LԓHշxP*7ϣ\wsg$@0Ɵ&EbQJ9~w|oOm*ϛOKa9_1n"}7o{N$vmyEdC+FIX=BX?xitĆlw@ pєSV5(thGPeT+J,B,WZ_eN̚2zY_Es?Ix\b#?ht>:W5!tOڛt걋N [vI6*l0Vj* p LgWR}.~( _ h2^*v3nT'F=-D *KZoޥ`HGsRhȯw?#mՊvڈ$G"k~'$,8D)+9/YBD1Б*2:s ݽ=Q}Q)>TIFq:B97)}8ՈZ5ţwa$dH}z''w3jߕ'Yc*YϞmO/:>[QfG5[ҹ̗u%,4ōB_{sHlJk;]BcJv'˚7Ѐqczm+s bD s:I:Kbk@ω9-S-Q 0v|! EN r0-m69BV‰jgJ 7]jl+ IE`4o=~H#i+;r.] %O30vɁĕoY87VT D%SGBlm M;d lpk.۱g\ӨwC%aUGRQxh R;RpגCeRX!\zFzQ)\y϶ wȆaj q@d:?1.ͯT .s EhHP‰b=AO'Qē6Fg!JDǨyLU;PjtLA ?{mÃ!Qe-ۭKSгAKJ: #Rwp޷6TFd`$^/_)MWX{4$馝s88/QI9#r I=zF;Cz6gcu3'l(#ц"%?!+$7ߦòvJeS]@huIoңV/֎U`\O$@=ߺlȨ  aY]{kQj<l#p-!ni p{Qf #MKF'yةi!0(G(`t:} nyL,G$MR,Ҭ7|Ѷq6<@L^MWl]I]DP3:-CxEi.Žf8 OvyIЁWc9Xv?|T1AKؑjACF(D k: wAX;0Ny:̈Q0Ŏ2"9ň:]y;4: 5p Ap>Ussh̯>異\1dF}Y+&.W\ISjxsqPh$DBqApЗ:#-K&Hu). JjFpy8nXt9ӣYQ]Q\>"9g*3_7hYHƖ#_ 8Ew S]/EPdvDhԎ;@; MBjrpEj(rbGH2y0}x;t~I@-='[ $-:GRB1_UmONޞJXϥ F 7$\ݦtDp1eJL, J'M/g*㒓Ws8iFh}>5lxS8RL[y9Yіptnp+k]>A^Eٹ60J.[6N)^N>|B?4h=;F!ԱHr puA|ыW//%Z~M,vzDqDa_<%8̳_?gyF//i)39jʺnIú7U;tfmu>FbG!) f196wt!3(^>sz{t>jH#kQ]OǐG굂@dSzg6-ƢRgUN`q|7h ͏Gtqunl@_3?S]5k%w|o7űGw"D[싧q{ѻlx`MP,+ udž9C GU? -)_FvFŃ=/翁〸n2y5cu6)rʈ^D%km#횫4+wLQ}CFP$" H#Di7YXa"<o@5"4E%)r͓p;qcd 4:3O٨2)uZ96_%2]Nx IDATKC,6ZgjBO)],Doe{C>IjN#K[9,uG#ztmc7i\oEH<=;lg~F{˫/çl{ِM\Qktfª*vD\dOGP~n<~6j}@@ƙcz1}mhjIW6?mucqFHD=|ҳR{ּ#Y<}N#80E%mNJ[#V8@`3ŘS}|;۰i#vjK"GtyKUU p.7|=mtƿgBG"F[SV44=n|T ΅BS _SWz_.֓j,x<\W6](&F}8ᨃ>]tRșDD`:25 ;ޛ#Rpk]8nP2q:c/f`i-mA8 p:}<8 n@ΠDt8MKIa_CqRۆVŨ ;m]S n@N1y5/btuX;UݦmBL $7 p`'~J cIRZԩB ܤc~ ϶ @@NqMK1uT{om՗[ۚx@{,tG M[8 L="ö!rxo$7Y@1Řƿ 9F@u),mSUnzo ȷQ#ih:vjPD.pet!1) n.8tFГ&DeD+40:5spJ߭Ѷq </uEhR)59>xa =Szų #H&Ҵȡ8]%,OWyqP@biԙ-9Eގr]Q_[>6봍8@86rD<8}}yxOy/HCLt!&d&D H& Մ^\?Jogv\u"rtUw/@ <*)iBGA-6n9Ev%Ů)) pD2cݡ7Ď:BJHo}Үi`J 5:c=;os88Z6bO4TQh~=WjebGrLW(ᱵɈ Do@ 89S[2eZI9 p n:" @*8Z?=ɫ ],.(`ayϔ)rDK$m( I#67LI@(QNHi hL Qm ulwM8у; nj`?ӳFW:F(kc)rlbѹ]:H9ڨp*)f uڑ'd$+ӦUhs. ]h8gCDm\Lh^\PwD,-  M[aEG4e蚰A @;@#!rR~ ѽQL.&'YI%To|@BS`hk4Qn3 j#@84[986$tyNoU %)ڨ<Dm6bb\&(&$)tVb!OYp#+qG<~Dm6 DR7GG^%-,~#:?=OM:ẍl;bB/.^1#]͌FgThiy9vq9X^tt G"1_ixdy9$M(lMS:=j9?FVΆgG`O)|@S[$F=C{M:%Q] x1VF4[zD~;{sϗ-6] cr14tLQaDRo4G]nhF,t7ń^|&pzKrc6) @JƓ1lY -'^l!Bvٯ}ϟd8}q hPb4ly6x2yN_Bh< @"8@4/On6 xFlljBԀE pڌ'rJKA١6c# y(`Cz蓟Q&&07H:."5 l5&_~9t{ Mga6CnjǶk`ck|#B8H :8wO޿~skWS:=쀠q@{?&ݚ~gm0qϱ!&4 FR 9//ekg82] IENDB`hkl-5.0.0.2449/Documentation/figures/s2-101.dat0000644000175000017500000003535213237020467020721 0ustar00piccapicca00000000000000#h k l mu komega kappa kphi delta gamma 0.000000 0.000000 1.000000 -0.519320200000000 40.400329236644197 134.704182457760055 124.948883370711130 -0.022336900000000 14.824478351069212 0.000000 0.000000 1.049505 -0.519320200000000 40.768089313828689 134.706363470030624 124.937541549238986 -0.022336900000000 15.562801322318858 0.000000 0.000000 1.099010 -0.519320200000000 41.136741488093215 134.707662396950383 124.927675562141488 -0.022336900000000 16.301774926017963 0.000000 0.000000 1.148515 -0.519320200000000 41.506228657635631 134.708193308921466 124.918947112250379 -0.022336900000000 17.041431559417731 0.000000 0.000000 1.198020 -0.519320200000000 41.876505994038979 134.708051459082213 124.913938238052111 -0.022336900000000 17.781803977467231 0.000000 0.000000 1.247525 -0.519320200000000 42.247539047566683 134.707316699982414 124.908069222970838 -0.022336900000000 18.522925804457664 0.000000 0.000000 1.297030 -0.519320200000000 42.619300621451451 134.706057005330820 124.904023840220972 -0.022336900000000 19.264830026097581 0.000000 0.000000 1.346535 -0.519320200000000 42.991769806737750 134.704330650378608 124.901762472679493 -0.022336900000000 20.007549924876880 0.000000 0.000000 1.396040 -0.519320200000000 43.364932259891482 134.702186952100817 124.898473429758241 -0.022336900000000 20.751120004007358 0.000000 0.000000 1.445545 -0.519320200000000 43.738777532103441 134.699668951666581 124.898519173273243 -0.022336900000000 21.495574767045365 0.000000 0.000000 1.495050 -0.519320200000000 44.508050636848481 134.081044751669509 -55.516877723394508 -0.022336900000000 22.240948799484581 0.000000 0.000000 1.544554 -0.519320200000000 44.883214819177645 134.077917802435337 -55.512507387039477 -0.022336900000000 22.987277157465339 0.000000 0.000000 1.594059 -0.519320200000000 44.864359375639857 134.690218398640468 124.899778101103905 -0.022336900000000 23.734594446755704 0.000000 0.000000 1.643564 -0.519320200000000 45.635553197087624 134.070869619756735 -55.505654976704932 -0.022336900000000 24.482937746386941 0.000000 0.000000 1.693069 -0.519320200000000 45.618117923284352 134.682615593970553 124.903284827625825 -0.022336900000000 25.232342586583208 0.000000 0.000000 1.742574 -0.519320200000000 45.996020293935587 134.678490001125056 124.905540950751217 -0.022336900000000 25.982846405754906 0.000000 0.000000 1.792079 -0.519320200000000 46.374613645599659 134.674172485174097 124.908371796987140 -0.022336900000000 26.734485819263842 0.000000 0.000000 1.841584 -0.519320200000000 46.753906712998052 134.669678646041660 124.911741088615784 -0.022336900000000 27.487298390571937 0.000000 0.000000 1.891089 -0.519320200000000 47.133910466146610 134.665021955472099 124.915256835642964 -0.022336900000000 28.241323144518638 0.000000 0.000000 1.940594 -0.519320200000000 47.909036654283703 134.044829092365546 -55.490112462881854 -0.022336900000000 28.996597739053964 0.000000 0.000000 1.990099 -0.519320200000000 48.290447848316944 134.039935511307704 -55.487963231057556 -0.022336900000000 29.753161739697020 0.000000 0.000000 2.039604 -0.519320200000000 48.672604727495745 134.034914698942316 -55.485914324940218 -0.022336900000000 30.511054642329345 0.000000 0.000000 2.089109 -0.519320200000000 49.055522205808003 134.029775962704235 -55.484204595551489 -0.022336900000000 31.270318341267796 0.000000 0.000000 2.138614 -0.519320200000000 49.439215353637323 134.024526680744856 -55.482029121667544 -0.022336900000000 32.030991892300470 0.000000 0.000000 2.188119 -0.519320200000000 49.823699277836035 134.019175011714339 -55.480480570552210 -0.022336900000000 32.793116354213893 0.000000 0.000000 2.237624 -0.519320200000000 50.208991641636523 134.013728525351269 -55.478596775065419 -0.022336900000000 33.556737076159024 0.000000 0.000000 2.287129 -0.519320200000000 50.201062752953419 134.623191070707946 124.953071693430076 -0.022336900000000 34.321894713543266 0.000000 0.000000 2.336634 -0.519320200000000 50.588079163841591 134.617511877588214 124.958554653460141 -0.022336900000000 35.088633650004311 0.000000 0.000000 2.386139 -0.519320200000000 50.975958249678584 134.611753816354991 124.964402662090706 -0.022336900000000 35.856997067420266 0.000000 0.000000 2.435644 -0.519320200000000 51.364720471878293 134.605921415106508 124.970262772572568 -0.022336900000000 36.627031544314001 0.000000 0.000000 2.485149 -0.519320200000000 51.754385339767353 134.600019287199729 124.976546177216306 -0.022336900000000 37.398782090335644 0.000000 0.000000 2.534653 -0.519320200000000 52.144974173975129 134.594051555114135 124.982391428590333 -0.022336900000000 38.172296653760355 0.000000 0.000000 2.584158 -0.519320200000000 52.930218286419795 133.973391331007832 -55.467565210513740 -0.022336900000000 38.947621699979344 0.000000 0.000000 2.633663 -0.519320200000000 52.929008290404305 134.581934399184007 124.994741738655563 -0.022336900000000 39.724806426655654 0.000000 0.000000 2.683168 -0.519320200000000 53.322498281859986 134.575791697344130 125.001279138017480 -0.022336900000000 40.503899653809206 0.000000 0.000000 2.732673 -0.519320200000000 53.717001207955100 134.569597164399994 125.007609342236506 -0.022336900000000 41.284952621031444 0.000000 0.000000 2.782178 -0.519320200000000 54.112540731265156 134.563353450624447 125.014250419519584 -0.022336900000000 42.068015933734948 0.000000 0.000000 2.831683 -0.519320200000000 54.902556356724567 133.942755978121909 -55.460389907307459 -0.022336900000000 42.853142559471685 0.000000 0.000000 2.881188 -0.519320200000000 54.906828967180594 134.550729098324638 125.027303872269314 -0.022336900000000 43.640386311953293 0.000000 0.000000 2.930693 -0.519320200000000 55.305628417849121 134.544353225513476 125.034005066785838 -0.022336900000000 44.429800992701637 0.000000 0.000000 2.980198 -0.519320200000000 56.098799154756477 133.923829949388050 -55.455952833261385 -0.022336900000000 45.221443045780667 0.000000 0.000000 3.029703 -0.519320200000000 56.499842109179518 133.917444113187486 -55.454572202600190 -0.022336900000000 46.015369409543766 0.000000 0.000000 3.079208 -0.519320200000000 56.508970233971468 134.524995541924682 125.054133222406662 -0.022336900000000 46.811638885907371 0.000000 0.000000 3.128713 -0.519320200000000 56.912491732677502 134.518472971483845 125.061163794732011 -0.022336900000000 47.610310391405605 0.000000 0.000000 3.178218 -0.519320200000000 57.710249417661984 133.898080867410670 -55.449987354707062 -0.022336900000000 48.411444839851924 0.000000 0.000000 3.227723 -0.519320200000000 57.723321396337120 134.505331192152681 125.074760005580188 -0.022336900000000 49.215105531787046 0.000000 0.000000 3.277228 -0.519320200000000 58.130690459987242 134.498716045526692 125.081913605951229 -0.022336900000000 50.021355340433438 0.000000 0.000000 3.326733 -0.519320200000000 58.932201547766269 133.878442109073518 -55.445308344243912 -0.022336900000000 50.830261498171041 0.000000 0.000000 3.376238 -0.519320200000000 58.949499700958640 134.485401533909169 125.095377807118695 -0.022336900000000 51.641889633553212 0.000000 0.000000 3.425743 -0.519320200000000 59.361004681889817 134.478705646119124 125.102378162406723 -0.022336900000000 52.456308732982677 0.000000 0.000000 3.475248 -0.519320200000000 59.773957851412533 134.471983608803669 125.109090186797019 -0.022336900000000 53.273590213039242 0.000000 0.000000 3.524752 -0.519320200000000 60.188389895310415 134.465241280244840 125.115744125650451 -0.022336900000000 54.093805415127882 0.000000 0.000000 3.574257 -0.519320200000000 60.604341592227307 134.458475092350426 125.122795565095956 -0.022336900000000 54.917028966382084 0.000000 0.000000 3.623762 -0.519320200000000 61.414259764726772 133.838477035972318 -55.434504596911005 -0.022336900000000 55.743337131549374 0.000000 0.000000 3.673267 -0.519320200000000 61.833298659223807 133.831739003094782 -55.433102910631966 -0.022336900000000 56.572809074805598 0.000000 0.000000 3.722772 -0.519320200000000 62.253969767160058 133.824983286824306 -55.430772478709187 -0.022336900000000 57.405525057449005 0.000000 0.000000 3.772277 -0.519320200000000 62.676316254749956 133.818207847554532 -55.429068484729527 -0.022336900000000 58.241566977407253 0.000000 0.000000 3.821782 -0.519320200000000 62.708228806757639 134.424340518297697 125.156403255431385 -0.022336900000000 59.081021225676835 0.000000 0.000000 3.871287 -0.519320200000000 63.526205385790860 133.804602916262780 -55.424933837581918 -0.022336900000000 59.923974896071968 0.000000 0.000000 3.920792 -0.519320200000000 63.561813312125700 134.410560141708061 125.169971983776875 -0.022336900000000 60.770518232310508 0.000000 0.000000 3.970297 -0.519320200000000 63.991360029858178 134.403645535186627 125.176460085933030 -0.022336900000000 61.620744957112535 0.000000 0.000000 4.019802 -0.519320200000000 64.422805832604112 134.396715565564449 125.182921234631735 -0.022336900000000 62.474750593738769 0.000000 0.000000 4.069307 -0.519320200000000 64.856199659277422 134.389770940282062 125.189411264486978 -0.022336900000000 63.332633998811538 0.000000 0.000000 4.118812 -0.519320200000000 65.683350266156893 133.770315981111509 -55.413282617639624 -0.022336900000000 64.194497506714583 0.000000 0.000000 4.168317 -0.519320200000000 65.729036183539748 134.375839573248157 125.202367923623711 -0.022336900000000 65.060445855490414 0.000000 0.000000 4.217822 -0.519320200000000 66.560210941970496 133.756502257898632 -55.408394663624065 -0.022336900000000 65.930588664383237 0.000000 0.000000 4.267327 -0.519320200000000 66.610295648857843 134.361855559375670 125.214909441511438 -0.022336900000000 66.805037880336911 0.000000 0.000000 4.316832 -0.519320200000000 67.445717838121809 133.742638274249771 -55.403182850066308 -0.022336900000000 67.683909889203562 0.000000 0.000000 4.366337 -0.519320200000000 67.500432877656792 134.347822949155557 125.227374744182356 -0.022336900000000 68.567325052221491 0.000000 0.000000 4.415842 -0.519320200000000 67.948982030764896 134.340789167125763 125.233499083278431 -0.022336900000000 69.455407901924161 0.000000 0.000000 4.465347 -0.519320200000000 68.399935810173062 134.333745047248868 125.239495835372239 -0.022336900000000 70.348287392501248 0.000000 0.000000 4.514851 -0.519320200000000 68.853361496459186 134.326690111902735 125.245531750511319 -0.022336900000000 71.246097196980529 0.000000 0.000000 4.564356 -0.519320200000000 69.309327892917381 134.319625105469157 125.251252555484982 -0.022336900000000 72.148976012029337 0.000000 0.000000 4.613861 -0.519320200000000 69.767906715473458 134.312550271551828 125.257185436578567 -0.022336900000000 73.057067418408650 0.000000 0.000000 4.663366 -0.519320200000000 70.620199164338700 133.693768283561695 -55.382119594297386 -0.022336900000000 73.970521277363957 0.000000 0.000000 4.712871 -0.519320200000000 71.084162310146269 133.686748073249646 -55.378574891463451 -0.022336900000000 74.889492593661515 0.000000 0.000000 4.762376 -0.519320200000000 71.160077380440399 134.291270562758228 125.274084456210431 -0.022336900000000 75.814142585648227 0.000000 0.000000 4.811881 -0.519320200000000 71.629880754125352 134.284159935281451 125.279439785112075 -0.022336900000000 76.744639238620749 0.000000 0.000000 4.861386 -0.519320200000000 72.102700203132557 134.277041099154218 125.284871583264916 -0.022336900000000 77.681157994928441 0.000000 0.000000 4.910891 -0.519320200000000 72.578626286539901 134.269914364934664 125.290168385807078 -0.022336900000000 78.623880375727580 0.000000 0.000000 4.960396 -0.519320200000000 73.057754099935750 134.262779928244925 125.295354474306563 -0.022336900000000 79.572996826537747 0.000000 0.000000 5.009901 -0.519320200000000 73.930740053848638 133.644452240465910 -55.356313696774293 -0.022336900000000 80.528705404622642 0.000000 0.000000 5.059406 -0.519320200000000 74.026015253976922 134.248489283551777 125.305336694867506 -0.022336900000000 81.491214409687913 0.000000 0.000000 5.108911 -0.519320200000000 74.515360022209549 134.241333251611508 125.310174693603273 -0.022336900000000 82.460738460876641 0.000000 0.000000 5.158416 -0.519320200000000 75.008330280833221 134.234170747874515 125.314953887914996 -0.022336900000000 83.437505793691457 0.000000 0.000000 5.207921 -0.519320200000000 75.505044682959877 134.227001608814788 125.319736193755304 -0.022336900000000 84.421753344265753 0.000000 0.000000 5.257426 -0.519320200000000 76.395848360645658 133.609007764954839 -55.334403488815767 -0.022336900000000 85.413730175944494 0.000000 0.000000 5.306931 -0.519320200000000 76.510208437036184 134.212645688202826 125.328432132822982 -0.022336900000000 86.413697244680478 0.000000 0.000000 5.356436 -0.519320200000000 77.018926208817874 134.205457635082666 125.332825489141413 -0.022336900000000 87.421928785271419 0.000000 0.000000 5.405941 -0.519320200000000 77.921941944066660 133.587666951921790 -55.319678794762069 -0.022336900000000 88.438713462644870 0.000000 0.000000 5.455446 -0.519320200000000 78.049352173761676 134.191066259538275 125.340827360120443 -0.022336900000000 89.464354613722321 0.000000 0.000000 5.504950 -0.519320200000000 78.571372387484999 134.183862499383793 125.344550216033639 -0.022336900000000 90.499172383093352 0.000000 0.000000 5.554455 -0.519320200000000 79.487968707921169 133.566276553104103 -55.303732038464155 -0.022336900000000 91.543504157600523 0.000000 0.000000 5.603960 -0.519320200000000 79.629872477500768 134.169438287360549 125.351787652541503 -0.022336900000000 92.597706798839269 0.000000 0.000000 5.653465 -0.519320200000000 80.166716553818361 134.162220913655062 125.354990739926407 -0.022336900000000 93.662156865118817 0.000000 0.000000 5.702970 -0.519320200000000 81.098501603682195 133.544841256223151 -55.286319593537108 -0.022336900000000 94.737254195569150 0.000000 0.000000 5.752475 -0.519320200000000 81.646143766585595 133.537686924723317 -55.280078684277662 -0.022336900000000 95.823422467634970 0.000000 0.000000 5.801980 -0.519320200000000 81.810070771238657 134.140537304647665 125.364248638495610 -0.022336900000000 96.921112173118615 0.000000 0.000000 5.851485 -0.519320200000000 82.369545502108338 134.133300456739960 125.366713159046810 -0.022336900000000 98.030799921844178 0.000000 0.000000 5.900990 -0.519320200000000 83.324620529366513 133.516197921663377 -55.260511951680570 -0.022336900000000 99.152997574616805 0.000000 0.000000 5.950495 -0.519320200000000 83.507538634092583 134.118814664123505 125.371641748894390 -0.022336900000000 100.288248990944723 0.000000 0.000000 6.000000 -0.519320200000000 84.475827487142254 133.501851693551544 -55.246488273144521 -0.022336900000000 101.437135833363357hkl-5.0.0.2449/Documentation/figures/crystal.asy0000644000175000017500000000232312710332472021570 0ustar00piccapicca00000000000000import three; triple a = (1,0,0); triple b = (.31,.95,0); triple c = (.4,.5,0.76); surface atome(triple position, real radius) { return shift(position) * scale3(radius) * unitsphere; } surface atomes(triple a, triple b, triple c, real radius) { surface s; s.append( atome(O, radius) ); s.append( atome(a, radius) ); s.append( atome(b, radius) ); s.append( atome(c, radius) ); s.append( atome(a+b, radius) ); s.append( atome(a+c, radius) ); s.append( atome(b+c, radius) ); s.append( atome(a+b+c, radius) ); return s; } path3[] frames(triple a, triple b, triple c) { return O--a--a+b--b--O--c--c+a--c+a+b--c+b--c^^ a--a+c^^ a+b--a+b+c^^ b--b+c; } currentprojection=orthographic(1, 1, .2); currentlight=White; size(12cm); // orthonormal coordinates without x to not be disturbed for the a vector draw(Label("$\vec{x}$", 1), O--(2*X), gray, Arrow3()); draw(Label("$\vec{y}$", 1), O--(2*Y), gray, Arrow3()); draw(Label("$\vec{z}$", 1), O--(Z), gray, Arrow3()); draw(atomes(a, b, c, .05), blue); draw(frames(a, b, c), gray); // real space draw(Label("$\vec{a}$", 1), O--a, blue, Arrow3()); draw(Label("$\vec{b}$", 1), O--b, red, Arrow3()); draw(Label("$\vec{c}$", 1), O--c, green, Arrow3()); hkl-5.0.0.2449/Documentation/figures/s1-101.dat0000644000175000017500000003531313237020467020715 0ustar00piccapicca00000000000000#h k l mu komega kappa kphi delta gamma 0.000000 0.000000 1.000000 -0.519320200000000 40.795148837723552 134.088340521547394 -55.578087980042497 -0.022336900000000 14.824478552849410 0.000000 0.000000 1.049505 -0.519320200000000 41.162930235995610 134.090497816304008 -55.567338357726918 -0.022336900000000 15.562801336307878 0.000000 0.000000 1.099010 -0.519320200000000 41.531595365406638 134.091782359245343 -55.558677847218348 -0.022336900000000 16.301774976660209 0.000000 0.000000 1.148515 -0.519320200000000 41.506228636503572 134.708193307272097 124.919430433494568 -0.022336900000000 17.041431506604862 0.000000 0.000000 1.198020 -0.519320200000000 41.876506235401941 134.708051255797898 124.913611853652085 -0.022336900000000 17.781804143572447 0.000000 0.000000 1.247525 -0.519320200000000 42.642390631082485 134.091438769299089 -55.540641977741075 -0.022336900000000 18.522925913040577 0.000000 0.000000 1.297030 -0.519320200000000 43.014139709206276 134.090193192651753 -55.534384935388822 -0.022336900000000 19.264830400984177 0.000000 0.000000 1.346535 -0.519320200000000 43.386593304043338 134.088483261020315 -55.529046246398160 -0.022336900000000 20.007550148416467 0.000000 0.000000 1.396040 -0.519320200000000 43.759735178321314 134.086361956176830 -55.525137445393355 -0.022336900000000 20.751120125948109 0.000000 0.000000 1.445545 -0.519320200000000 44.133557575642094 134.083868662041397 -55.520128537913166 -0.022336900000000 21.495574822081419 0.000000 0.000000 1.495050 -0.519320200000000 44.508050484586931 134.081045016141957 -55.515621840315191 -0.022336900000000 22.240948896338008 0.000000 0.000000 1.544554 -0.519320200000000 44.883214401959464 134.077918831582565 -55.512076356158488 -0.022336900000000 22.987277620814297 0.000000 0.000000 1.594059 -0.519320200000000 44.864359450881892 134.690218295458692 124.899701025551735 -0.022336900000000 23.734594441029198 0.000000 0.000000 1.643564 -0.519320200000000 45.635553091791920 134.070869713471836 -55.505736643739446 -0.022336900000000 24.482937713279135 0.000000 0.000000 1.693069 -0.519320200000000 46.012732868177707 134.066994920384190 -55.501746861696006 -0.022336900000000 25.232342879096553 0.000000 0.000000 1.742574 -0.519320200000000 46.390596439900563 134.062912450633462 -55.499571281696589 -0.022336900000000 25.982846077756516 0.000000 0.000000 1.792079 -0.519320200000000 46.769147618866540 134.058640206088967 -55.496803513742478 -0.022336900000000 26.734486098443337 0.000000 0.000000 1.841584 -0.519320200000000 47.148399155214591 134.054193100248852 -55.494870797521152 -0.022336900000000 27.487298963477279 0.000000 0.000000 1.891089 -0.519320200000000 47.528358716291493 134.049584626053871 -55.492610004798856 -0.022336900000000 28.241323612566362 0.000000 0.000000 1.940594 -0.519320200000000 47.514635532971845 134.660215238199498 124.919178478115725 -0.022336900000000 28.996598013086256 0.000000 0.000000 1.990099 -0.519320200000000 47.896093787386526 134.655270135930067 124.923296323063937 -0.022336900000000 29.753161896631969 0.000000 0.000000 2.039604 -0.519320200000000 48.278299449327079 134.650196038547023 124.927702055012418 -0.022336900000000 30.511054927748233 0.000000 0.000000 2.089109 -0.519320200000000 48.661266716160696 134.645002583555680 124.932370114911549 -0.022336900000000 31.270318126865533 0.000000 0.000000 2.138614 -0.519320200000000 49.045010890956213 134.639697954524792 124.937134937352369 -0.022336900000000 32.030992542296673 0.000000 0.000000 2.188119 -0.519320200000000 49.429546188071377 134.634290216604541 124.942333281899451 -0.022336900000000 32.793117180157687 0.000000 0.000000 2.237624 -0.519320200000000 50.208991509296396 134.013728575099805 -55.478648564136506 -0.022336900000000 33.556736874607275 0.000000 0.000000 2.287129 -0.519320200000000 50.595109568243728 134.008192481585155 -55.476885295668453 -0.022336900000000 34.321894555778279 0.000000 0.000000 2.336634 -0.519320200000000 50.982071342612095 134.002572823097353 -55.475247708735019 -0.022336900000000 35.088633080541165 0.000000 0.000000 2.386139 -0.519320200000000 51.369895648155321 133.996874907374377 -55.473657505564411 -0.022336900000000 35.856996923928648 0.000000 0.000000 2.435644 -0.519320200000000 51.758602610218745 133.991103201387659 -55.471992861776826 -0.022336900000000 36.627031910037395 0.000000 0.000000 2.485149 -0.519320200000000 52.148211567829804 133.985262583924367 -55.470715233849390 -0.022336900000000 37.398783129161352 0.000000 0.000000 2.534653 -0.519320200000000 52.144974165348280 134.594051559031698 124.982374133813266 -0.022336900000000 38.172296645194052 0.000000 0.000000 2.584158 -0.519320200000000 52.930218691289994 133.973390058411212 -55.467665400016720 -0.022336900000000 38.947621043374163 0.000000 0.000000 2.633663 -0.519320200000000 53.322660652064378 133.967367399815259 -55.466289159353316 -0.022336900000000 39.724806109070755 0.000000 0.000000 2.683168 -0.519320200000000 53.716091996864002 133.961288763510453 -55.464667362500634 -0.022336900000000 40.503899681209525 0.000000 0.000000 2.732673 -0.519320200000000 54.110535521010917 133.955158946997955 -55.463364702671200 -0.022336900000000 41.284952173243404 0.000000 0.000000 2.782178 -0.519320200000000 54.112541007277343 134.563353416572369 125.014002526100342 -0.022336900000000 42.068016421386055 0.000000 0.000000 2.831683 -0.519320200000000 54.902556012481782 133.942756078632300 -55.460740971569628 -0.022336900000000 42.853142027486605 0.000000 0.000000 2.881188 -0.519320200000000 55.300183195680290 133.936487879112349 -55.458952028653080 -0.022336900000000 43.640385992473057 0.000000 0.000000 2.930693 -0.519320200000000 55.305628311501174 134.544353221876577 125.034279601274662 -0.022336900000000 44.429800772750291 0.000000 0.000000 2.980198 -0.519320200000000 56.098799049187200 133.923829950065539 -55.456080051783523 -0.022336900000000 45.221442829408282 0.000000 0.000000 3.029703 -0.519320200000000 56.499842139750463 133.917444077824427 -55.454523517610184 -0.022336900000000 46.015369412709063 0.000000 0.000000 3.079208 -0.519320200000000 56.902078912621803 133.911022842067865 -55.453026229224164 -0.022336900000000 46.811638577485510 0.000000 0.000000 3.128713 -0.519320200000000 56.912491412708732 134.518472813835217 125.060774461522797 -0.022336900000000 47.610310188125055 0.000000 0.000000 3.178218 -0.519320200000000 57.710249257272707 133.898080882362137 -55.450338155497526 -0.022336900000000 48.411444549626765 0.000000 0.000000 3.227723 -0.519320200000000 58.116242714745951 133.891563343720406 -55.448627653413340 -0.022336900000000 49.215105234536487 0.000000 0.000000 3.277228 -0.519320200000000 58.130691130449073 134.498715605270689 125.081664667175843 -0.022336900000000 50.021355877843689 0.000000 0.000000 3.326733 -0.519320200000000 58.932201493399688 133.878442304927489 -55.445120200728134 -0.022336900000000 50.830261677354322 0.000000 0.000000 3.376238 -0.519320200000000 59.342231453509825 133.871841080262783 -55.443648345267071 -0.022336900000000 51.641889604080340 0.000000 0.000000 3.425743 -0.519320200000000 59.361004902514857 134.478705521023016 125.102152470212104 -0.022336900000000 52.456308953161695 0.000000 0.000000 3.475248 -0.519320200000000 60.166561168310515 133.858563583256910 -55.440117375277204 -0.022336900000000 53.273590297247331 0.000000 0.000000 3.524752 -0.519320200000000 60.188388825450268 134.465241133419283 125.115270034451697 -0.022336900000000 54.093805349638124 0.000000 0.000000 3.574257 -0.519320200000000 60.996817357961042 133.845194596624964 -55.436468451480273 -0.022336900000000 54.917029175214651 0.000000 0.000000 3.623762 -0.519320200000000 61.021849322031471 134.451687525953133 125.129460246102596 -0.022336900000000 55.743337604034473 0.000000 0.000000 3.673267 -0.519320200000000 61.440950970254782 134.444880977459746 125.136444422431865 -0.022336900000000 56.572809338526412 0.000000 0.000000 3.722772 -0.519320200000000 62.253969686444414 133.824983279873607 -55.430972979481702 -0.022336900000000 57.405524891411368 0.000000 0.000000 3.772277 -0.519320200000000 62.284099626528160 134.431205279721610 125.149826665073959 -0.022336900000000 58.241566976812464 0.000000 0.000000 3.821782 -0.519320200000000 63.100380131853363 133.811414432121353 -55.426918005275240 -0.022336900000000 59.081021133834092 0.000000 0.000000 3.871287 -0.519320200000000 63.526204508546655 133.804603876504018 -55.424934911812819 -0.022336900000000 59.923974748890579 0.000000 0.000000 3.920792 -0.519320200000000 63.953834139811860 133.797776781662577 -55.422743361737098 -0.022336900000000 60.770518377880464 0.000000 0.000000 3.970297 -0.519320200000000 64.383315138963511 133.790933904699500 -55.420586951641084 -0.022336900000000 61.620744958831729 0.000000 0.000000 4.019802 -0.519320200000000 64.814695671546644 133.784075253085433 -55.418021655208449 -0.022336900000000 62.474750774740663 0.000000 0.000000 4.069307 -0.519320200000000 65.248023312308803 133.777202912612893 -55.415930927798527 -0.022336900000000 63.332633975468063 0.000000 0.000000 4.118812 -0.519320200000000 65.683350115858843 133.770316052702299 -55.413528515484138 -0.022336900000000 64.194497290329011 0.000000 0.000000 4.168317 -0.519320200000000 66.120727921339068 133.763415655236969 -55.411252667963552 -0.022336900000000 65.060445841871370 0.000000 0.000000 4.217822 -0.519320200000000 66.168585988640672 134.368853306688038 125.208877184229650 -0.022336900000000 65.930588492570905 0.000000 0.000000 4.267327 -0.519320200000000 66.610295571188374 134.361855648603637 125.214908492219351 -0.022336900000000 66.805037859691851 0.000000 0.000000 4.316832 -0.519320200000000 67.445717813944057 133.742638274526541 -55.403286804215234 -0.022336900000000 67.683909836896234 0.000000 0.000000 4.366337 -0.519320200000000 67.891859493936082 133.735688654659015 -55.400303960071561 -0.022336900000000 68.567325100229255 0.000000 0.000000 4.415842 -0.519320200000000 67.948981812268229 134.340789429694695 125.233490400739129 -0.022336900000000 69.455407886057799 0.000000 0.000000 4.465347 -0.519320200000000 68.399934746631473 134.333746201043482 125.239505390394029 -0.022336900000000 70.348287177779497 0.000000 0.000000 4.514851 -0.519320200000000 68.853361452627496 134.326690141282597 125.245503852503049 -0.022336900000000 71.246097161598257 0.000000 0.000000 4.564356 -0.519320200000000 69.309327561211092 134.319625384011857 125.251313755162940 -0.022336900000000 72.148976002173299 0.000000 0.000000 4.613861 -0.519320200000000 69.767906735205614 134.312550283078849 125.257064854310713 -0.022336900000000 73.057067585517188 0.000000 0.000000 4.663366 -0.519320200000000 70.620199035198340 133.693768439961104 -55.382361645180964 -0.022336900000000 73.970521215861680 0.000000 0.000000 4.712871 -0.519320200000000 71.084162312757897 133.686748047652372 -55.378728685042546 -0.022336900000000 74.889492557948117 0.000000 0.000000 4.762376 -0.519320200000000 71.550970147647391 133.679719048365058 -55.375376779755648 -0.022336900000000 75.814142528503027 0.000000 0.000000 4.811881 -0.519320200000000 71.629881621825021 134.284159791739995 125.279950343633530 -0.022336900000000 76.744639338183930 0.000000 0.000000 4.861386 -0.519320200000000 72.102700329200914 134.277040881307897 125.284927127047141 -0.022336900000000 77.681157945014249 0.000000 0.000000 4.910891 -0.519320200000000 72.969318371227970 133.658581860833863 -55.364204129624490 -0.022336900000000 78.623880472894129 0.000000 0.000000 4.960396 -0.519320200000000 73.448378609214018 133.651521223886192 -55.360209641514622 -0.022336900000000 79.572996875413310 0.000000 0.000000 5.009901 -0.519320200000000 73.930740036258456 133.644452780602819 -55.356114985401540 -0.022336900000000 80.528706053786109 0.000000 0.000000 5.059406 -0.519320200000000 74.026015199158721 134.248489151062728 125.305185031445944 -0.022336900000000 81.491214051280181 0.000000 0.000000 5.108911 -0.519320200000000 74.515360096454174 134.241333268007367 125.309934463707407 -0.022336900000000 82.460738637228403 0.000000 0.000000 5.158416 -0.519320200000000 75.398685764461632 133.623205364754142 -55.343381232835924 -0.022336900000000 83.437505562286759 0.000000 0.000000 5.207921 -0.519320200000000 75.895333004830121 133.616109809337843 -55.338726548787520 -0.022336900000000 84.421753674832786 0.000000 0.000000 5.257426 -0.519320200000000 76.005627900482708 134.219825786355131 125.324079866406493 -0.022336900000000 85.413730274710915 0.000000 0.000000 5.306931 -0.519320200000000 76.900362309529271 133.601900071487051 -55.329595253143701 -0.022336900000000 86.413697199895481 0.000000 0.000000 5.356436 -0.519320200000000 77.409012199842039 133.594786349638184 -55.324726808853669 -0.022336900000000 87.421928854299551 0.000000 0.000000 5.405941 -0.519320200000000 77.531923417415101 134.198264698425788 125.336817002046601 -0.022336900000000 88.438713432615558 0.000000 0.000000 5.455446 -0.519320200000000 78.439303246488208 133.580542070589615 -55.314472544657448 -0.022336900000000 89.464354673613116 0.000000 0.000000 5.504950 -0.519320200000000 78.961255935672980 133.573411882736792 -55.309192501231209 -0.022336900000000 90.499172370509669 0.000000 0.000000 5.554455 -0.519320200000000 79.487968714802875 133.566276551077095 -55.303699783696807 -0.022336900000000 91.543504168839149 0.000000 0.000000 5.603960 -0.519320200000000 80.019619746110038 133.559136126987113 -55.298136355430344 -0.022336900000000 92.597706459774429 0.000000 0.000000 5.653465 -0.519320200000000 80.556397541229614 133.551991074448978 -55.292150137672351 -0.022336900000000 93.662156856661127 0.000000 0.000000 5.702970 -0.519320200000000 80.708888469267862 134.154997383609128 125.358399886645429 -0.022336900000000 94.737254191554953 0.000000 0.000000 5.752475 -0.519320200000000 81.256597938838979 134.147769489169178 125.361262107847537 -0.022336900000000 95.823422504510631 0.000000 0.000000 5.801980 -0.519320200000000 81.810070608984134 134.140537107284928 125.364187146247104 -0.022336900000000 96.921111462925367 0.000000 0.000000 5.851485 -0.519320200000000 82.758956020026332 133.523364924492824 -55.267060356764972 -0.022336900000000 98.030799879183121 0.000000 0.000000 5.900990 -0.519320200000000 82.935277513756802 134.126059626281744 125.369350944640630 -0.022336900000000 99.152997644045172 0.000000 0.000000 5.950495 -0.519320200000000 83.896814236585655 133.509026635688684 -55.253613490231942 -0.022336900000000 100.288249044364804 0.000000 0.000000 6.000000 -0.519320200000000 84.086619565424471 134.111566204855734 125.373711397867524 -0.022336900000000 101.437135873662697hkl-5.0.0.2449/Documentation/figures/m2-11.dat0000644000175000017500000000353113237020466020624 0ustar00piccapicca00000000000000#h k l mu komega kappa kphi delta gamma 0.000000 0.000000 1.000000 -0.519320200000000 40.400329236644197 134.704182457760055 124.948883370711130 -0.022336900000000 14.824478351069212 0.000000 0.000000 1.454545 -0.519320200000000 43.806823181195078 134.699172673379707 124.898698419486905 -0.022336900000000 21.631027940224062 0.000000 0.000000 1.909091 -0.519320200000000 47.272270521411770 134.663292943025397 124.916656495771178 -0.022336900000000 28.515821774033888 0.000000 0.000000 2.363636 -0.519320200000000 50.799541156706340 134.614380653440065 124.961695709155549 -0.022336900000000 35.507536366647649 0.000000 0.000000 2.818182 -0.519320200000000 54.400871058606626 134.558783263228946 125.018919290059415 -0.022336900000000 42.638809595916634 0.000000 0.000000 3.272727 -0.519320200000000 58.486466730589271 133.885612866780122 -55.446989014044156 -0.022336900000000 49.947951730555722 0.000000 0.000000 3.727273 -0.519320200000000 61.900019187608748 134.437430128114784 125.143770187333516 -0.022336900000000 57.481389921508047 0.000000 0.000000 4.181818 -0.519320200000000 66.240375731739093 133.761531531130856 -55.410317580254272 -0.022336900000000 65.297336845733511 0.000000 0.000000 4.636364 -0.519320200000000 69.977235278479284 134.309331314767377 125.259816155740268 -0.022336900000000 73.471599845423640 0.000000 0.000000 5.090909 -0.519320200000000 74.727450269523302 133.632870840991785 -55.349454108434074 -0.022336900000000 82.107358205506344 0.000000 0.000000 5.545455 -0.519320200000000 79.002012485552456 134.177964670420948 125.347572178555652 -0.022336900000000 91.352902210420979 0.000000 0.000000 6.000000 -0.519320200000000 84.475827513800724 133.501851715633137 -55.246517777290137 -0.022336900000000 101.437135910950062hkl-5.0.0.2449/Documentation/figures/traj_n.dat0000644000175000017500000000234613237020474021346 0ustar00piccapicca00000000000000# x y 1 180.195371 2 180.813073 3 0.424843 4 180.590416 5 180.792872 6 180.868850 7 180.824758 8 180.851837 9 180.431954 10 180.889088 11 180.794561 12 180.815754 13 180.842793 14 180.858062 15 180.504292 16 180.880547 17 180.908082 18 180.909971 19 180.486832 20 180.913101 21 180.914589 22 180.490879 23 180.492126 24 0.474524 25 0.474049 26 0.474404 27 0.474810 28 0.474845 29 0.475107 30 0.475227 31 0.475243 32 0.475180 33 0.475246 34 0.475028 35 0.474779 36 0.474893 37 0.475082 38 0.475165 39 0.475251 40 0.475291 41 0.475288 42 0.475247 43 0.475172 44 0.475067 45 0.474936 46 0.474979 47 0.475110 48 0.475203 49 0.475262 50 0.475291 51 0.475293 52 0.475269 53 0.475223 54 0.475155 55 0.475070 56 0.475070 57 0.475160 58 0.475226 59 0.475269 60 0.475291 61 0.475375 62 0.475348 63 0.475307 64 0.475252 65 0.475184 66 0.475158 67 0.475219 68 0.475264 69 0.475292 70 0.475306 71 0.475307 72 0.475295 73 0.475270 74 0.475235 75 0.475189 76 0.475161 77 0.475181 78 0.475225 79 0.475255 80 0.475274 81 0.475282 82 0.475279 83 0.475266 84 0.475244 85 0.475213 86 0.475187 87 0.475229 88 0.475262 89 0.475285 90 0.475298 91 0.475303 92 0.475300 93 0.475289 94 0.475270 95 0.475245 96 0.475213 97 0.475247 98 0.475274 99 0.475292 100 0.475303 101 0.475307hkl-5.0.0.2449/Documentation/figures/4S+2D_reciprocal.png0000644000175000017500000105165313237020255023042 0ustar00piccapicca00000000000000PNG  IHDR8T5Q 2iCCPdefault_rgb.iccHgPY<@BPC*%Z(ҫ@PEl+4EE\"kE t,ʺqQAYp?{ossp e{bRɎ(tջ{i常r)teJOYLgWX\2XyKο,]~ )sT8بlOrTzV $G&D~SGfDnr&AltL:5204_gK!FgE_zs zt@WOm|:3z @(U t08|A $`(E`8@-hM<.L@ށA2@F 7 Bh( ʀrPT UAuP t݄84 }aXև0v}p4 ^O6< "@]p$BV)GVC!Bd h(&JerFTVT1 uՁECDh2Z@Ёht]nDѓw aa0Θ Lf3sӆL`X VkaӱJI%vG)p`\.Wk] p xq:o—;IA"X| q B+aH$͉^XvbqD%iRi/82! L ے&US{1O,BlXXؐ+ NP6Pr(3;Yq8WJ)Hq"HJ IKIJGJJIKa8y"Ֆ͒="{MvV.g)Ǘ+;-Hז,L_~NAQI!ER¬"CV1NLMZ)VL $L`V0{"eyeg :JJU*[5JLGU殖֢HVQ?ާ>حѩ1͒fX9֘&YF3U^FuX6m]}G1Չ93 |UҪU$]nnCM/OS~~>&   .y݆i񍪍&v\mu:ƑGLMv|253Θ՘lOv19|y-Եl^Zä́UUКij}ZhlfSoV6¶vʼn伲3صs-[{'BCSGhGfhgWΣ<lqu%V>svu.֪MZ26,b&*4r**4j:*@LMLyl,7*us\m|GD\bh$jR|Robrv`NJA0"`H*hL֧uӗ? ͌]֙ՙdKd'eo޴gTcOQ{rswol m ڳMu[NO [A^i۝;OrR V (m? Yrˆ[EEE[?Xި%%Ga%oDDiNe̲²7Yn\^{p(㐰­Rr_bULp]u[|͞iU-x4:zccǞ77Q'z̚KZ!'lsWnk]8q/v=s}ٚvZ{aԱC) _}ABEKr.]N<{%DƞWzuW8}nX8[[Mowf[@;]wv8d3tyoy02*|`a׏2-<>+|"ߵ~o /ۏ?yx??'󟓟O)M5MMqb݋ɗ)/f 櫳/ M^̛oy=}na>|ZZ.V|R?B, bKGD pHYs,K,K=tEXtSoftwareGPL Ghostscript 9.22_ IDATxkp\} Gl7UdUNh6y;S.٪Wɋ}1"׾Jlٲbgw"T|D<'wܩ)+ȶPЭ) [w}qt>}>} 8 i((=Pz8@p#GJ(=Pz8@p#GJ(=Pz8@p#GJ(=Pz8@p#GJ(=Pz8@p#GJ(=Pz8@p#GJ(=Pz8@p#GJ(=Pz8@p#GJ(=Pz8@p#GJ(=Pz8@p#GJ(=Pz8@p#GJ(=Pz8@p#GJ(=Pz8@p#GJ(=Pz8@pu]pa1w 5 mll=#Dல&I,v F0M,zTUoz'F`?>rKTLg/Ypw]YOhee*85nK@aF3 v zn=8@у(=zp;z]z].\(pp+z]T^דO>9t h47c%*Pak4pFCO<F`Q`lKR$kYdUt4 Iceew28 IV`w,㇀X l&ҫ԰niEJ N4P U7p{vA ~85 Qp["07A`nX!7ܸp.\JIVWWz|^Wj08^kssSO⬶XA_'Ê{&gOe.jGY6u:^T;/LMw:]z8G@AXx|>$h76g{,i39\?!N>$ ' Įi6~Ͷ~_XQ r⮺ 0 sg2<261!_/ߛ,5c0݀Ͼg}Tj@Ypx/&/~EkrDƖdmG)rW$y!<$KU>|τc޵}QfjZ_ >Zj=yjΙ?F+^ U\2t߬y?%kսv/p\PHKoi=ZZbHS‚ fF 72A{h*|YBL-:Ύ#!Q3p,};c9y_o 'dϱ91t5tFI= 5F5CSx4eH:fFaGfkK^²_C=Dq p w[?v6qp20Yӭ6Snc^0=FYѐ۽b=qS^ iLkԦkZZXJ(4I`>w:b!@.^|EUCMAIcmݡ#! 㹅I&IQ#Б ޷ F1ưT[Rm)yIcz -i 8~qnJ8ㅀ`Ν>2* W ;x{\30pO =J9^a"$t JΟSe0QE;--s7#s54ހ{:u_x s祍 ^[ڪS% !ɨ'Qz#i $@W+U?Kc2Q쯱03#7#"%w9QZ[͢G] 4"NjIY<޾NAM<7h~sN͝p@Zy1C8ԦkZ_:ifD=?¶~5_}|D0Jkkpc{lkwcGIS0FCF*R_Y ao/(zO͝JH\EfT+RmW1 'EqϏRtso14PdiGvs[/qEZvcrءs'%A!By1@cl )1nk;rFكkx&qMnn򛗵X]#}$8Q88J$PCRoy=~`G!Ra(p*z^d0Uq\f.EI %+i-j 6Xuk/}Kz住PQRq8B7zdHy%dq c-qEpzt?[R]-ݳ4E[JTuxipHG!{le2c/7.kqj2"cmHbcpn~ױ#6]I]/"&{#kkx]Q"TznDvs[sSsÁ8L!?YyI;[fdS1STC҈+ {)JMnB{!s&naFwև7؈2Ԡɋmf>^{`FX4fqb x,D JStp8pJrΘy,;\ݑt!_~!=.+ 5js5y 6p}~ܼ&dïf+>Ch c(pW{KÕ-x ؅#KZZH_-ΘtNkDx]zd㈀KPjs59 d:nxMLxc~ID:%GuF7ԦkZ:_6@YMGj׈{^PR{m7uqc s|uZ]8w.[Buɰ,`cwM0jըK$wL"j*\F&佛Ll'K'ⶳm <"ktD2 oxJ_DƆXln;{vǜ?w{PB}Gj-_cyi5N09VC_t X2Vᆓ҅(CEG!E׈Ҥuܻrㅀ ~haWhUg;7-죏vƖֿ>5\&Q%Y4Fds͘c_TmD8WR﵋\t"[UD~Hsy<*7^'8r )v0i9 Xֿk5 u~^[:6;\;dvϹ&I}'pC6kŵF%( z-}_;L{AQ,?*U+舻dcC2=B[7ޱ5)ft5MHv1 c024΢ڢpvcxz;ьe{w[ss/_I=쵑E@ܜX1~~Hd/}K(gK<=ۿ榴^$Ug;xqna 0`hrdPoCe:!GYzcqVUd. |bnn[tCůOE9ͣUa3@!tYOA,}Χ=D4ĘljcL1'ɹs9Fow{h۷u=sJyIԨ ot 1Ex)p8=!Bp8H2jsݠ]ƹ^9)U*{_n5 9͢G̒rWKRdQѫIrÏKZ->oj}2\4"$xZ:u;Ie A=8U֍-={Y=w^o=W1\hHNY63Hصd" yz0Y<"{5?}D$+p{{;׆3ĭE;yt(GOP7I:{vW7^nj{.w{<夶6[G5IRAF>EWR_<~}/k^{ks*tMp>[z³un6xJOxgG%G>ǗR5kʫzOU6W 62 W 綰y7ܴvMi;s.Qq+jqR eZiD;SwÍ"^LU~=?|wz%)9fqqY"r OZG$ƣ… І7믮_e߭)D@UcǚWBj U{1AvOh q sѕ Y? Gh$UqvzDӈ\"HV$Ud5GO*j!HуۣkvZ}^_YQߕeCҚvlRF]믮K'TkiQ:z|熗(zc>g<& s1;6Sۣ:USaHv(2܈L\J?wO>pl8\stMp^׉T穀sem}0Dڱ{9p7y^K^;̲Wл988<̧433'YR'nȱ!mnj^ԯh'rfRQ!V=js'5Jj!B&q &qÍBuߨ/-v.Oq+llºtbk^t,Y@X0Ԉu!M!GyI^癅޹A;\qUEMxzHCykϞ>?xU믮uIRmfmjnNzcD8y[KH##2;,i8MADV߻mdRtme!CzQgY5Gs/7.G9 DOe+pV{lnZAv鞷=[7뷮<>n85e#CKM[Kqk92(IWwQTTnJU"nSVA97R {xZ҄fff󻙳nZz|aiK%,kkVVVص.ֿH؛͠%]ghU\X^_oa7Jx4<]1~IMFc'~4gtĂvvnk-i66z:{Vj4#F字ŗ(IմM}e$Uz]5 nha9bqrs vs;֮>ӻ^D'9/IV; N) &;wE^aE`1NMH*, nbn*ojWqDGtKz饗nMNN4t=8ƆVZ66f7*}"Fmmxګ;܈CkGU+߰o\X<7@de:EE+p^%;d 7tUbTn7P#s(y`RUPHDSL{ESk5$-gD9XtCG!8"(zBSS:yLSwveƆdvRIaX1!Ο? .hccChl6SF}x%)f5RZrdy?!Y^Onit|81c3=>YznwC (ܰ H=banA;{#XzIq;/o9}q _vƉ58qRlܹ~a"+;ܻ4wOI!b~[8Y[P/bRJn-EyVWKPmy:/p#t5$ o~ ޶*scNs2g VRIx^FSdo|-eK\a7ʤ~{dqϜҏ#a] lllhssSL0G~\_7t=ie姵cenn^P"p^>yء;dl]?"p4E+̐\OfftKz{;lR̜^xSPqx!I?x+%8{-oϼvi ^<`hѨ[;]=㽳Ji'5#RPaL yIJk&O".9=7(2({ȑiQpX]@1z>xZJE'թSzjvv^ӳ 8Žg;D̆$Qőgņj#pمʰ&66 5$I \;ȴ"FnTnS.= n؊8IIz!=R^C}iJ9U'tttvA_E?&~vvH_{0lHіs'cWVv0!YʲasTplr{3>Gи53lpyTu6訕<4h؅R65bKo5ܬUQɸg 8QU<蛑o3xj_p#sq9F_^Pt5FFϳ׀3sM2{8sM` ?| 07~1Ɋf433 Z-IaLt[@ kk-eϝ967[F`Azu+'!Up`QgznlnZryД 徣I$f1q7<^ZQhPFVU> U#:pUxx}MK!D/,9^1]V<ÔQTf>^ 8cYGWʕjbbR$iKwev֮pn91g`aW$V$cyyYkkk ;35ɍ5󪌨XSG#/ASUgzCrװl^R"USQ5xznD*2\ODKKRI` PxX ۵#(܈2Is^)"#KUpz>O0 MLLjvvN3jj2 6:}z,êУhzw[Zgó{y"muTgUj4*g?L,-:e.i5/jZɮo]9d#N^nx?"_p,_3$$y]g!'= 7ꍫzd*+_^ cB̬gtppvI!4_! Vuz3ؐ_!yìdA=Kǝh.Yh$^!rv+C09Ns!7H|8$ lQxu$x2 "U1UB"y;ZM\* H7$irrRp0 ZGt:T*;9wa#i\pAFC# K^^yk7sq fn$z]wBxCcX5y䵛F.ͱw!4 ޶#Omyp#(mgP1% Yo_#iXE-Y1 7" 7ϓunF!҄&&MMMI::S d8{u8aHeΞYseAFF#Oc^pwLQ{9gs)BR9 )]NG(ϿS]7d7V?kv"Os5Oqq^>03Í]fky~W@zcbbB1JeJJET7H:EӰ{uД4'|n/z <ܡG[ _v'Ǥv#Aм\ ʊwcӱ4eyz,J&,~aUVDYNs=}̮D{N͔_\I4$F"ָ1CՒS%CÁ}=|wGǵNm> G pƆ677Z^c{ZO?$Cʔ4?Bܳn{KU'TnEMIm~ܡS߷>d 7]^&袚)2_ ;q{`<ߛ<۲(eq4w6kd\ _0 MLLRjE:}NXЉ TO/E/NvwٿyVuIRmݽ]'ٚvvk<’ aWΞߺln޼[nIP?'OԩS]\B%X8 hr^2U(u.<$8X&1. DZ}{['B*Oyǰ4K(enRIJ"/G OOgg3nX@1Z=wQo7xS[[oJ2499'Ǥ>3Yàſ}QW^2)FsЛ7oέɓ>}8op߽VfM~7̣jNwK2f;|דqS{M3EQ#IaqkլXw㍡?ĻL^]?ǭ(KTCJ>t_#zzC?u o{I}:Ξ>/p銽ej[SZ^^>9sFgΜrCtwoEPZcnGFfb5 ܔM(rW5k^o]pݡ?y3M7M魐&~vM%7?IS\52-4pë!_5B 7TMp$j8{,m5GFZ$m>va8 ۘg\^׾w޸CL$Vɀ7^x|㋀q:e3 :z|{ݚ@:C>7 xC|IIҭ[h47_ =z[]5 tڦCǘrIBIyi|^DKF ]9X!Gs_T㌡h#^y'ͣcPPE{mc+E0^$iuu؁`йs筠cuj_Nv p7ƜtF:[QRm6tg)Xcz p_ﵖ]>_^e9sF37ur:7IApF) Wx-!Bmvz܃pl# +l0 +`0Lw< &+/~꼞[)_СvQ>_;{y8&&gkgT5q }I|O?yu]g}{Lrnn{~HJTozWzqdHC2*KK;wbLGԏb#3qԸ3b#^X1;C XRtdcCΝBMkzs#ʫ_j-IO_ߢ'7ɿZ#ɋMT*jZ_qJ{OܺIf/T 8W{jưƽ翍aԀy MîS䲔T-u gf,'^de @"sG.U/fsj `n6C֬[%+ذ+9Νyȱu}?Ǥeސ>5[ʍMZ&'/j75QRPfS?lː/ؑC`cfZA$mt'+++T66<׮_%= ʊԿVX_|يKP"':2[ѽ;O>a25NG)jϩJH7Ss>~NIWHf9ĵga!6oUsuT{÷jR:lswt=-\7?dG2unkvjJ>`-Oqy}҄o`g_N [rdg($qOdwF"+B*$ͼg߫|C _.han!yE<l ~ڈdfqʠC}7GWq>b+'zZY3v$m\.\{_KƦn6ܗ?yQwh"irjJĄ[G2djfjJzs)&1g5g"5W:I8ȪsU_\Ɛ떅jS\ @eB,1aS?6b{03ehgvv3 6⟑r@KMΞwn>zῼ`{l*-JaVW_⾎)yz_yIo]vpD9l MJLibv[NGiv]㙛Ll:S력rtf|- %mby[IyD|CLfkظ[zIcJn*E?AHog/O9='F&Doz{?e/n *wEֳx勽CTnMJU=_u}Ov[-I-In157/czZ;~OC\1ɋܑebɊ:2tj]25Ynr{#5ux@fKLhʜ֌9o.^_Ke!c)F%hLUjӧNkaj!zM<>kxRtZl>D9CÌk#agC$IW3z(w$ [88w ;2HRpIT._c`+X{w ]pN.MHhh㳟ם}>AHmTKބiUrT祩)yIk}uLnT*Ą:mu2 CYN,̒i㎀sQP#&LǴ97Inzfj#ZFmHQ1[A7:{V2[׷̗ڐ$õKq"q#併?\u ݷudם!A CS MD4Tp:9c'N O\)-tx|< O'&Lɷ sCVXńk%x,>Naϵ0Q*) x MJ&p$9d6} AcUQt;\wՆUaDj8ప8 c ʿa !xuX׿q<|n>'ͷ+U92Qiu <=pf|OK3`r|gDH?.ن.DOR< ~ԃ710|^ y)<} >44c0vr 4ɟX 8 9H*?k #8<~w:̋avJ$&"䘐T'4Jd/M籐٭;ș_4W0x?lܰb* H=*"8"Wo7aKCppa-K}?\66FrC5iCWTv[#>Ӂ{w6tNsЙ,O!Iva+wakoLM{a5Όy}0ӧ04 "8 cao~?y(jc?89="=xcԞk,߇#1#{h!|qvx=OkGsb ׾m$:'Bm'YdR `Qy'|A^ȳp[?ec cXXXhԏ#UXXqg`llB {8PU _l'Q#W ω aRR Pm 2 B,r ؤJ  ch#\hQEdoz9L# a-tDԽG{0^9"P*āPvS1ɦ B o7&~Ju>¿2B j7x7Gۏ 8=D 3O{p'O?Ax(% ߃-s_3/+?c'OS.;/D~s*d^+ۿ#rYHF摓eMQ3P%7,ِ}0unx&ELaQ!#,}CuF&yPR _5:ʞufj L 8L @ 1(ڝ5X߀@ \Ri!ST6\0OmR.,+pc_e83GWgy4s'bH`A ,/[0}s6>qYɹ#Gӿp x1?qIR0ntqbtw,~xQi:9%?#tz1ŧcy~M5ǰ>{]}UL 0C@t GV2ACވσlIGc+76X\ jC:]|O7_taK6J@ CdvRo 'U$] r#N~`< BO6Q1cH Seم8/-\1?I֏S}_K3ųIx8HwkM\*:va:^OT| 8~)?Äi,y0?9M+wgWϯ*,+C~AMɿmcUŏCSjG;|R\WTx eݮ_;u%MĶuTJw[oG>^pAHcKۂn@ Crt&@]C#*ǽto<],/<6~oWBPߙo]#9H0:$OxBW~t: M.}*1RsŅW?\5(r]"4ڐ!'3Ur\QZVɓA kkpס{;ܰzc4WՓXĮڒ IBxRUi߁s/|s7ᛙbcEhJQuyB2՝!ϵ 4}, 7O*( {ԘÇHgx>dK5O/A7ГV?{ qRR1a"' | A{7>Dp1߰ĸv ׿~}Xluu4'x8Wܘ%% Lԋp7./ psoUSДs9~rq4 u*] Y=k4 -G^n{ rb Tvàt<]+1=1ml0~LO?.<*,mjsUCvMQ!@"HpTS!@ 2R#ז^ Ju7'W/ _K[ ڧL8mQq 0> / >mg^iؐ-#9Hڡ0 )wRhRAbxǦB,BBv~XMA!Bp%0 - ưIWh".6ƙ!(" -\ :*"8ᘡUE5W!җjmeƍ)"FLrM*SWzP-YG>԰R2&P\Iy7t-%Rv  UaѮHqH Ǝ˵!oO)Y;eo(-"827¡o|Cŷҗ y nd(rFlr! ALE"Y bт%a^Ms0Y[J@ĕ&y5$Jl 넜";*j 'SdGVG1ɵa()+FDAOB@ #E6A-5_{/RAiTRBD`!TVp۴a) 2AGq|zs`tW5`{ΕWj.d g _WCjbλ5 <C8D\^>{٪$S9{Q[Sg?X*9bT ,[8|%b%6P*M;@ <6,[sF IԚ&j†7粒R;6A",gn_77(3LՠHM ifBp,d1Լ(%hĪogcEn{}~vs66S<.i(O9Ʀ*N) пl#)EHLEO6J @8Fxm)=I ގꩲB\b#W` ϖY`SQѾ\'yuS!i=L''FZ_6vl*Yhު$ޣ>HZ@XUDp1ams zIlBe򤑙:nՌ% ˼O1a, ;vaYIϼi.g@!['3{C\GAv ZX\Wޖ7X.8|UIؐ\}B1BB1 i[JC`}?;:)!Q4l-A@ P 4$7H́Kh${','$5XKr^{f:@rQq?$R?QaPMOѹuCg[\֖=^!"*$R:D;Cbώ0R1-(UX PL0⎈7}kB@ #1PY4 &{y/!ɤ썵g8QDnMK-D59 W/*WޫVTab ?y7EN|Di~$]!>a=us!!f,+:<АhL4&y(R:lndEw[IPh ֐i[."8o )Vo$Lt!M_1Q*)7dp-Jjȉ rLT9r:^cgb>|{!$ɚԨ ƒW{例 WHC|߯F|Zu^Qu룎/FFjDLjyH@ XaO8'2.h <$lRBX-lCHTvxt9%82&M{rq4Ino5՞w[$>~-lx!C#Zţ0JA8uu[ Sۖ:pmwmA@ 4Y?_w$5,%D냜Kq~cˏGTU(Lr{E.#%4NxnAg{>Ϛ MfmDQRYv\F I(BFl`-ާ'NÚ;{<mME.=Ӧ.|WnQZUB4"QKZ%HN~j @ 0rbԈoT&DB,F0i322>vn2%a_p:aaAϧ[~C L"Nc^[~һ?uW-},s0*g&` .x<8aw>BSV(q%;5,~뮚b"\ a4Ai\# ſ98ё6? "G$!6J/t#pqo,T, )a'|>i&\)K윪9QI?"t͝ >/0*9SDB<kSD}\4EW%M MMB/ 2| ڑ3~a6Hkr^TmmUڸ[rg܈d;*5jC pq\o,h;Q#E؊υB(,s)  4ET>'aK@AR$M }ǒwN`jw/:6 - (*v, Uq;<6-kbqaGH*jmC]@-ʯqɆ ?"n[2lS"E֎U 9qWn,,Q2]"8MkkpЙT 8%+'rOEI04#6QxSq\G%(JzgghJ^Iab #G{ ZJǎm$d *R] Ӑ[x\X"8,!D6Trre^Jd/NM u+604}%aӯ m 8ta81 shC:a UEmG_dԎ許TċxQm 2$TċPqƩB!+J S!@  RF'#K2Y?'; \M+mHFH+0Wd*Ɠ)ZB_4D]Ϩ| l/l}^="R')Q7h,`;Hrx'^4m'*%(3DTHP(]sj|y]V䇐Brv>h&L@88 7^x'?9R#o#S7eeȈwl˟{ oϋK@Wi Bq<G@ Aw>:ھO7$>"OHvahXKCS=sG@y/9C--Z/ $ *%["lrQe=UDmUΛ/g#J`lSpF)’Ta[" @ J %q?MՋ7JgU§ׂ5DA[unvazmz';e`}åJiaAXϻ/$A a;-йT5V00hYdxV礨pTs%T& YH+-MKV@'EmD =_JYQEoE}XAnDf*QYYCh@@ Z O`mC(d?Ydff[d}ޢ$l` #ŵB,+UEQ ; pLme@T~Qec OwЙ['Ϻ+kӕ61Lr jb[FŽuN?pPQ"8ሡիW2r(&t7])- pͷ`w#ThJ.0YtYajR;[XŔ?)A*Xj1\iHM)nDZg6yD=;{;pAJF #f:Khk&;f "iN |Cz#sX-BSrr<ܐ!?`|#7GS +xS cҙӘs퍉 ݠ} 9y?LI(sAưI4*vN"N&ZPRm0&3҃o?UqA G9qذU.,3ܻ PTuE]OʑAQTM"W\q6cx )G ~ Q"UFpH_Ce3bU)l7D$&;͈,G _L,B@ !k׆f:qg';4daDZbP XL1 okaKš@Qi [o%[F<9HC82k-7EAN(1?>e"c2PR!U|* ?M E/kTCSTTVڧO]ʾdb"8`9\ IDATÔc\:t70̈~C(60ƞД†3НJ²PHv<xLc3Q8E< UqhXnFUM"iJNGGĻRm$CB1$9p$7k6HJ5 D8ѐưͽaNݮG6Z*Ca)GA G)FNnL7P ,K`ylIXlY;lQf̶*eIŁ\7je%RCa=XȎ,Y J#=9$䜛cR5Й J 3ǨFT *> y7Jpʍr*[~ #ÒcUĄPݿ9r@T&ϕťM>/ E<"*s:hbK., H)ÄP]_*?֭(dDŽ AXC] @x@0Tx/7"M%S[ϿYjűݩAۊ/ C kn/nbRnla"8aaaimWTCn6I㲦&`b@fKbBSxʓ+ʱf]l__ P* \3Rx\:3U AXhTYO+DbZ8WAJbCIjçfCXu,]/ƽ ظhDf hbu,#Ɠ_Ӫ#X3?A GQ[ kŤ'+TE_Ib:LXrr4, .e%a"\&Tm/*19ٷ #1R\C,)L\(PH,X峗mR܈ YQCœ  #]b\҄=(6ڠRg( [P-QfP,XL|Q8l`J~zQXĠmE<C2HFoaL4AR i1w~kr88KlĘ֗.X)=wI2 ?ؖA\ԄUo -#?|#~@@ @;9FR &7*DFD 󒰽+ {S`|/zBrrq%_`(,Ġ,0JĢ2BvbEa!d@C!'*+L13_w$}ڹJIؗ\+?jΫ!E rDpB@Bm%lSu N-ْT2X. ̓Wg#E$HQe!|N* aѮ B:[HF(I 5,oEE]" ~mT5V9\7.*l3^%=.={bc{vRo{a-"ȍ?\A Gm̿Q"791Dą8Q- е8>.i-%:2E!;&_ 7IPq-I[c6m$hm4fgb_DV &8SU!+yL25>6O&) d|?5AT@8"hS crYG[v, Fh K-$X\C/Ua)ĩ~Eᢰha9!C0ʉQ}#u1/+uf'4DdiU_i[ &mv7225q2!O*mI_952ͻ!MWEnԣ @ 9ږ%70d/l s93ceLp!_&hx, [C-U.ll@~ ɨ8<$ HSQ7f8{t `(r,BU $:<*I=Ѵöy)[=8mTy}r8?bQQ~2 r#*"8p+7d$ aX 1)u}` [OT Ȓ$Nǔ-a&!!ʦ\+x:֤NqS(8 =y1=?ޗz{ކs~êpo9X Ҏ$GQ[g?bܩӓ%N_dN^KDHrrxG@ 4vpFhMQx舑t<$^P9&Ԣ?IV ].db2A᷋mV \=TTa 1ZPu"ISjV9`vX_^Ϋ1:,>j j*CB} <1yzR?'>ta,UDp!z.T$I(-J BOr"Sy")0gmVHnÆ%a}GxJ{^  I$$&9W8j *E00c ֞k&|pvd+Zu[ 3ZH \(Jr[\MEL+MnUSe*'VYA rbc>TJFÅ*AXªz}i`Cvӓp*׊Cշ& gԈ.uA MX/Kr0l 1!Gʐ@YIX0sqx%$،r}ȓÐ@u`ft|ULn ʱC*C17Pk:߭m~FNJ)2̉SqA Mz5Tnخ&D&'M:KĈǕla\ ]iIX7E_{PT! Mi4'$,ׇ!a0ԦP$dhe!lk[e{yh5j5i05>%϶tSb{KP[>"@ )ʿv{ ~фd({ȇExunvK)Rr!d1!5RZHE 6 p-$0Uq MQ>X` qT9 h#QqpEPGM˔ 6dھ|reOd7{|?zDpBxڵMXryCv(*TQj*,rbxoˁv|1dh"4- a9qyJ<%VMA\D!$EL<=E8ђ&>+@@.Lj D{Tsz\>+ϽFsYEрRİM{Ԙ^ǕB !lJ} I~ҷ̸4HjcRK<޶wJA  kF>(2&:(Wm0 5*`X$ Ym(J¾P- [f'$'HmR[9A2Tw[E<OB$9H`k0$xG*W8APДClTB,BHrRrFFT^rcҔN~~r7T"WM@z>XoA$ ]]>ͭXtowGr|w`_jyIX$V񩸢>m+#$E"w[4N0f<ĈbU+xK^en7Wp?bj!+!qӱZS +nPd4Q( +|"@ jě׮V2oHy^񕕯@vNr ZDznw8!T <Ʒ~63U0 $:GT9WNU,k>Ʃ:vUea`6%"Z wb[T&]8+UUšjgϤ"LFkbb.h;F'mjs㢰ޮM a= g++7@*|^Br@=ꍥ.wo~|o3ؿ@6V7T a8^>$u )Gx?mƄ A1xM,ʓ?M^Wz?=9mf3O 7ikJ]jd[| lU$oLozN݂[n'2\® $>Ceo@8?UC#4RL)/|=ag<*-ݤɋ7 Ŝ ?~O\V22r'bZRaU_ +;7GƳAu>l(WIP 72=9 sPmAG8 sp1e|?Cpm#{/N⚪`%,4e?@ +_{Ǹm议FQGJBQ%-4 oۜ|u1\#tŖ돾\m ) )>lPqD8e:%\u`z-8j$*$(y+lڰ=ogWcWHb`mӓgi2#! 9ەʶg@gb4MEw 'ZBݳ?Q!Dp VVy5rƽ3 Iv ><+ IFO#[`EiS~ YQ&ԥpYkh+ 02\ټ7.ހ3E_.ږ$15!7L¶0jL]m0yBDf7"9ǯZ(kk[16p`&ɍ("ݡM"=|ouLh>< &3TW] Ͽ9IS*]bk~1#}vbn"!Wwl=ڂ !%3RI%aK$A.N>, ";2A8f fSRPq,܀GLq=G Qu6- Sq~Z\E@Pڵ"Ĥ KϼQD)D o:D p3ѱv{ }}[$0BѢESBInd Cdcw~XÈ'brB5!0V8.VBUj1:ܐ̈uHZT6_B@<9|.η@a U*GH2OS щqc_P5 x0J2J  8SakA͠'Q웞.cTT8f{LHrDl/J~zA~O3Qʶ$8|薑_:A Z`Hl,/TBA^vH1 //.?[^ne~5Po˻!MςTcu$m)[vWmmHxHp+8ǏTKA8 cI9˜WoB@8^ɋP׮EV2|s++Sc}}ݛr#>$rq"Sd 9bKªBSXS|!m#6 ҬDqVqhЪ|&ECqN!,)$:B5G)c< dz#lTaPqQpTUt%09h(3m0e')`Nj**ڵr%Wexիիڵk&Cի<zG eX |#* "P*D!|5Ogͬ$lieFUFFU.) IAn\+B(eHCFUo=ea55[DZDc VC*> lt&;6Nں7xm*3]Q6Nɡ9yފ+f'}D _O6`<[ &+ -ٓY'@Dn䇲\,$Btt2lI*7RQW̃7p sC7/J rC^ӝ+00N57*Ukzlڃa͘<+It5 /Mw8)'M<'GBTƵkê(FNp,,,XXVFXKOn\DŧcyRdH3| oCSJ†@H5{ k.o@uiR9E~@=ɍ5pJD2(#|h۽ذ۸cUB{g@+ ]yp4&]\NjJD?1/J!"3`[پ\0_VrXW䥶R˱ HEJx@IDjjVƔ(je&#(EJaxɒo{HBNtH֧>ǰܝ Zm摒: TR5G?l |PemZ rȊrϵ&BQB8,[Ivfޮ[&̝px6yQLo,gYHn^|)k)z\,Y+C,j8BLP>E|*.y8ŹPUT/e`rq 5AVʽ#T |Vnh@́Ɩmo'ϕa3p7}7n{? $ǭ{ĊQ[`;v%0~T%a&擅 F jcqqHnAFkY9XŨb&+ǡcfZ\5Wۂ@3+7*BS\k滛8wûWS1cAbaHu!~/HŁ 1"5pn- nxY <_Ɵm m$9\;ݸ-%a]iyIW*ssٟ\zn8_6SB c{w_])Xi;I["8HteH6Xd*h詀)![LM q#O ?Y"3sIXTž*lhe?rqdD)5dD7Ɔ$d;g->!>ݦKIc\u#GZ6ER?Q/W"*Ax# ;yűSzpA \G6(I,*Sh]>;$7MHr1~Jo0 U~9dɕiǧ B3%amCS\8xTJlq!PQڷqXCwd6%;DЪ=TC[F0UofBGX|(|@@*bc3HK yGQCS6 t61% S+DpvK&ڽ~QwBNpomwJ7 lMP.j]TM32t竦E+[]5MJl]* U$E.\N|2L|hIK`rT L4%q^ W帐!]!ykHVUB8l۹A;&%@ ,|lmwOn(^⽪H|:"Zt6uLC,O$k- 8_GJ`@TXL|%X罨8DN|$wmdG2HJE#jJ #Ņ/dv[_nUedMGgr,H$ M|$|^ P*؆dzgoq޶~ \A 8F6x`o䆂&DAR>2{z^loBŁVoX W6NaU ǃ5[, >j^bU mӅx *#ki[Τ{1X;~k +h|<=Yľ)!9, kCrcq M5ϿR÷C6^J5X?+$lsK|-\'Oջ] NV(?E?>)&4(۰sϒJEH@TT ֦HdV{F$*&<%'?È VC#ƣ5 @ WƐ8!),rcaaFSMϜ1 nb[@ ⩹2ҧ*BK ϑV!ӠCD0ŁB9Ls 4sLip\Q-lпWf)4YaCNXi;HrShOQ @8 rC|/|QdPVM4$QLCöp>MKš$nvx<穓m[F*c,;6QqI#*5-#)0(2@de 2߽(Sח1~L_Pɑb:שxe*Tht;;S)c/#J'k6i0' SJx@Dpf@ ,R؏ODTffbs[IM㒰u$eo3n|(&2\6EFWo6Bgb٨:{X@mj9T*֐|( "xYJ4J l"ǚW$U r\6vޮgP?buuFgg{/!@him"$nܿ..W>&vdA:$d}12ъlT,>B ?Ɂ9BW[LrX@ )>ro"2HпVEa#9B(>liڠBA'0P}j;Sx,TS"C*`8A h76΃;{Dŕ1GD$4vP$x,%JT$֐5&$bfrf&70jd & x ׵L B$bC{#$$B.kG7<[X3]wȊPIadeA :H F ۵[y1*)2ܡ,b2uL!l @@Dnߨ$aނY*X> ,ɠ+ Ն CIz6B& 8wEq",CGBXWb訪7#iWJhf$0 q~SfvKqq:jUHYC7H! Qq=Jgt(:1e{B  "7'QxCwa4űF$l䤅|>UdrC* )T7H0ٱZ<ĕ.*2e_9SG;^0m֤ 9B7 ڵ}eT,oTqwI9 BTB{qڐ r<}C@T ^b\3@QM=E">8sԸ!"OȰ%L*.A-qLONKNO1m<&/j 73٩}nV($ kc*C}ENh]HfrJtA@"7/_¼_Æj xBC1t|"–⒰ZOA\c# t ~+E|*UFP(Uu*JaH2߂ .IoE(Ö$/ܐ8'=Xx&{j%9l+ MJ*v[eAZlߔR0/ͻQ+2_}'P*0*hJKH:';Ω@/} &c1@P r<.€8#+\ 6:s$HhccW/4sIE@Vj 4N}Bۨ_e,,-Eo(D@ 4 ,hmr+t,^]z݇39 -Q&ԭs 7y7WDCL-b>c`]rQG L<g*kL !"YPp&4 cHTZ a"2CILsP$z{`yTxD3ё-c~Y=؆ST6lLn*iR~E&@ KnP9X#\:Ʊ!4DqnpCB$c{>.6PrWd05#+.++@'ajbmAA"4ӛ@< -A 5"7,? <|gόCvSMN(:My sB;C O2JQM.Hԗ]/3V*:b=O2ۈ1UU*XEhpHˮ] Ah^'&9.')lO%G(uJn.4Lrv@㻐6}D O7\<{ԝ%@mۻ##MA\K<^*R؍zJ:9 XYxkKo/wo~n߽ c'ٳӅd/"dR\cBdBbEh2&-Qb/)Q8!E@∆X@j`~*<Xg]9ECW.A_ڣMjlY {2[DgS!ߣ,+^لLeDp7Db6;׋pY#;yu obSOoy7ؒ6DEь|kM$xp]gݹ(T qs\VqroǗqss2zsP!0Z*6ߧmO$5|ƋnCiU EmqT]˓ D"VQsJ3;{e^h?!65>ڐ'}u"7 F풭N8gΞQ Yk["$:ׇQIX2 p0'אOLEPcp,"KAQ:>'?]zchXз@׆plh룟6bQê #{m(qwBHRn3͍&{}H9=BP؊)׮5͡wG)ٌ~}}2]Tiy?.D @ Q! Lf.l܅ [ h#' C<0PBDrFeu*&(K>֕Td$`ڲ>rb4Hr*Xóv; 'r@t<ㅾf%M)iV,QXGy}t, UnA ̰BIE/_0.ڨ)0D^%O(a| F^6BU!AJ+ :$䱤e_Ld`CF;ʭ,lYšmEX:c1aozjڮ>>/iYbF[*jԎy@wYE,f1 _VMmBsRnb8-i7F~ɾ%#Pn}`<nc Ar 5FAjp!n5ZmgQ$l$x,$9!;).E*p%9eT}jDžHvzv|@P3;q;UE+i39Q!2D,+ vOUD IDATJU ybރ"x0 @ qݰDQV0+/̣{PIG<-5cK x!/Um)w> IcJ^ǧ&B9 8ƐܠF(JV v%inbL,16'7~+֡)ſiJjx,^"Պ4yՅ!say5f:3 Xő@} b1>h7%l@D2BJTAq{ûMe& v/;y8aUJ yP18Dli- Ǔ$PJGzH!*70/K P;84aoU䆈dIS֦dQtEq hԍ+Ł8Kf#6xcҜͶm 9jô7Q!J O5351U5%%<m$վ.Gkcyn"/ +[t>zhQy≃Veam=2KaHQ^` %R nbF"s43),>OA+VČ[B|X]+ŁzJi'k= ?ߕp%BW|m8}[ږ7Æ "hOCNR$'84)*Z=ƾ5'@ q(FX\+J>H o[RY?m?+DLw^ ؒcE@>))IQ2a!d$D4YTq`>CâިMaﭲ4m 7fŎvjPp"ub&k+[ëCg07~(*)Hyn"8++Cr#M0gڇ߃'%ZmĘ!TFdO#%1ڒuO@C.*<hB̨0V>ɧm"7 |(~i@locQԔCi#ۼRXy0gO5}YHs-kDp9qΒT<|ƞ}똾&4čN5 KPB8sJ㽄J& 1Ux@2HP!B:HsqX>]Sh!MS*o[@rl1,BCak WkWKH2RE.8x"-0G7 Cb$»ȿ]|xs%:/ sQ%amhL$C1&OV cѬâ3pe;žSƐZšr "8Byh"UMW+3c$X"{՗lUfx!3d3?|V2> kL)RE 㕔ף$_*Њ1yNJ̐Aq~QǕD㉭ d0dr칋*2u<6FՐkٛj+!qp#6մ!Om]šKHΖ#ΏԸDp*ʻaWo9xٳgQ D*%KжM}"xlV%T%ah@ҵAoEnVq8*-_"!g>jmDp2ؒ#mwo~רϙ3gpJ?P',\UhbRÓ9T@q:70$l rW9roVq;^ЋW\ٳATEO2ҥt-ZX%aȞcv6J_HmN,zQ8[G*Z{Sq R0 n~N4Mr(8sjTT8&|a!hEr(:iI6}'l0S@K}pDUMh'k[o>jO a M{ฎL\R$ @j%mIMJ?X961KٱcY{vVƪLjk5cbAzۏ#,B![iAAU-|q+o̓yV<2sj@ϚF`ls~OÙZc}X)a;s}7'*NNo aӴ_ ÂMc^H֥tNh,K,och^"A}Tu,a)$9,o#E.K6٭Z'^8/qR@5PBM)6IJ K\IMm7͵"$ĶKk,I/wlAA9QJ9غ]DŁ7w+Cz@Poc4Ht(d(HaywFMr gtV[o:\vLCm '[2z{BW5%K/Պ6X d²T"CPAxZ";ߵ;A)a~qD 9 (iRM˸MCy}Dʇyh=T;_ޝiʪ{a1#lObx%Ɖm5av& W@W(FHXa)r5Pf0=9vmKT&Sh,lcs& #eM ʻ+zWύw ,l䉍侵jfL 5ɸnֆA95bިg9uRr]E:b D,yAC R1@ƌN,%(7`f]CQ1/5$GFmD1$'alvա:Q[LvllWEd$9,*|1/G>HHH#eM 욢{oU2PBdp`g$9%GXFWse9A9NRq}c[]'ie&J#[TH$#!APl$o !6pBq b_m:YagX2#FcaT@[F1G)wƲHAM%UXFd|U ƕ 6Nۊ/"9b}FB.>X ~t#m?~p& gDF~0f%ab#+E+2 ڲu$#!ADrM ʻ+;QՆ8c "91?3_ۆܕx?WWR6ԟFau,%佼&sly/77 N" pY0 .9d)m}E#ԄJ(jI8Ěmc?6i[~Z[ Hl 9@֣H_VPq􏕙W,:(F z5)b!5%K/D)ՆFZllldO2b%'I܎B a kPɰc"̣*gNZ*5 6pc.7sfNi[_+$@ތ׵7N$G1P[b$9jgۘkbVVw;Jе rJBVSh$h`F̕dG!v'{Dp$$8԰{18Gaǰ2Z9 qTT{]{`+*bkS$Ga9+z0@8k5,a!udlJb:1- 1  bcii؏x/zgTn1Yxk$  B:Ws$5ъ㢂Evסȧ"%,<93uC6uwĆ.l3䯏ij$H-G(FMpeG캝/UӦM ;>Od0  ac)MQ6YkN}lN0@P!.zf'l|K*aۢjnVY鮭!0uMr$#!~X4xALNLVo-?bQ6ȗsI3lAL5m]R7Ê/~;'.''-k UF\bCGË2sI.)FgmZY07,UBا$GT ccSuiYoj ͲG92n W"d{PRᠿǨLA&@aa);8apCHE5=k]9d{]h"ߗsC t7zJXV4pɤVÕ#ؐqmFa {b aC"5Y["ls(hB썈P\FFQ+|Kt4P78 ~uǘ䨂Zwa6~$(}pAF媺*i[8rq i& 41;X=1f$G(nAQMV0)T9F%)5Xf!FLt;nMrTaeJ]X]TqXP6aTrdКx"8W\8,^Xyw(7$6F\.0Pg&&5]9dP<|ڳgUEA;Z2fÐ]^\$`SJib}" ;Ld"/uPyb59POtONutfQ2=qODqh/ڍ5XFVE\<OɁfRۮoGGaE/bdfjZ-"]a!9D -a\h=ap`jba+U>wztDp$$ܯƋ/KXA-2&5тkCPoD8w?$"[S}VlQbe`v#,^nX6>s20obEL.b?uI(8!@(ɑȑx= 6BeD`hu-1: r%}+i4lHIZurbfM(ci,<宿oO/飳>'9 ( C8jAV!AU͓r`ѤkoozCV6Ca'ӊwT-Y1U"#"Cr@V fG!`DߛH- 3vՎ]/K#֖s@6SsG Pq bq,˰|tٯ{XD_;y*]04vF"XvB ]{]l_1D6e!$c,D6 *(SMی%#!~ijϖ&r?,7ܸr*T\Bk-hKOlZG?A4jXmH#Ɔs.ք5"3іUA1ˎMr'󏟯iXd @)E3tCEs$Q~#9|5Frmֹ* @6Rb [M R$ vM#A,*pA)-7^w vm< וPcAj֎G Շܐ]Sb`}s?/Q ͋sjlbEЅE!{n4CV@&G> 'OoWqXZ- ENDUXpaܝn9cʭQ"9\ .Qְ[mj"Z1J 䤇ALt.%_a0TAd4!,zH߰ \5 jFm"Ǎ5CTdDͽSH+)a9)+(a6 ρ㚎#Z&6;9Z>Y%vUqPHR8 /|r8AYgl20 ]}C IDATXa&96MPcpgm98< 96SJ1x%7H 3DJIEIMGBƒX4Kc=Wr@!#qUxpequp4BJऄf AkR f5( +\=.+(@k!%=.+ qG7O {SpV}G}ˣ('MAD`%wllc$Gibn2iN:h|#PŁTleM|Ka!H0NOML)AU!\'#!~BJ חNJmM>x065 9ăm^TCGV fԛx{ŢN-$ǨĊH$={j7Ɩwm ê\;C[Е$ȋ!߫=.ꋘjsm}V8$P wUq}U2ў&:.l`$΀s$&⪂! D%S`%JUo"assy u_QHd^7GkEl~m;~TmOJX/}1ӷ*.ؤ'| &P$|j = Z[ɟi5[[qT1{\1=q "P2BH6IkH*\fܠ:юmWvUҎvP`C\U8 &p?@N z寽l,Ԍ!ؽ^Il`7b Żw ,L R /9nr c ˎc&&臏'tR醺dx?t{@1iSpf4xbLTa#1dcHW#WwʢP?ƞp8Sa1%1\PҎP#p1Re759p}ɎޖJ~@.J8z!d&#!~pII)^Xyw7n!Mfm{BP)D:7%l.j#)A,jRHE n"DB4Ȯ6Ԉ5_YaGwOTG߀ }#3#eYq?q^ %9"AI:~ܯ$J‡܅(.80<;m 8$ ӕKS{A~P[m݈Pϰ9%S7kHGBGRoϮC'Z֑8Fccc;e\vFߣkS;5- k7]h.C%!Cf;Fi*Xު}]y#>r򵡔7 T0~[;=ha3o+UP{t6A=GYףB1~.L/UqJ L13S3|j2Arr$`[>X\ \Ѱ$bR|xM]v8H9XR݀d ( ҏ2D^RD*64P֫g wr:25k*96|HGB~Po\8n7P p6׮]R | ϸb=pGwKהǎڏX> $8In$hDd[4ۡcm1{a]Px=|L:m&a&+}CrX[1R>~y=nĀXwE%!a?B7^|qoX7W["zvDBY6 ZmJJ"nVjDz8  ]0{ڥH d{p />.(.Avh2t zFYn-l Gp瑱|tʜȍ1@,V-_ԣl5PΫ{da1T,b+W/nJ}/r^j<d˃M~z.֊ )F? r>53e/bP[D z GB;O4Xle yD+9J-tkڰfŪ-xvAJ%ߐA&#_E1Qle+՝Nds=->5%gX@8^)_lrD'9ڼU +bC x8A\<3s##]*,7nݧKvG= 7Q> :5g°>uDrpAdp-w>ąG s4YǤQg0Ɂز{"8F޸xl}G7QM0;Swo29dCI5)%3fl܈6l Jh"!d ɅO"pLA@܃޶D1/\TIp%:"ڰH!!:Ez*ވq?5H8 9Ȱ6}΃PNKGErxL\J ~oYc@XX.͘`o"J?}|FIG$m\k?tHUEnK] )6m Le} ?BXg|1D.(BUqt,1Ha(+3FSbn LvcMvLڻkHrȁv- kl^׶|Vapl>]vMJrTmAr`TRфa74 4>ryRy~k D@CEi25rdnɘ3oe^dۛ07=/U)k?7ff<Zls;<26zLؔs$ǐ<6HWT)kl ً`sRۋ1tYxc/ùokDh*8u|tޘ87AHNn1}`1k691h/vs Q|>{]8lTǑhv lLo ֎q4xjUqobY:h%0jfށٖ0)8 .O޸xTj䆀 XA 7M=%eK8~8]+ q)rfHއƪCsjJ؟*-%p_ Ӡ6F=6Ta w0QC"IU~02\\|bocUqhgX!p (†AxES0x , F Ģ eDst[6)p+9cz}Dp$$ S!ȍ_+42[T6O=J86w\ԆuSm;# ]S= jПgM4^0k.;j 6boF${>$w ~XQv{B#"n%Iq彞|BОtOq!oZ6_™wwʹؾ6xJ3+ԔJu~@"H&2@g6Վb!08E.:ͷ*h ^ȓDR/Ɂ#90"(dU+7W`nrLǏ;'\EDĆs) q9<_-%,+‡@W; c}u?-2& Ųf#gE>Jّw‚&'q>܆q8dA RgXu*sc[.("`Xh">DK9ڽO$yA|4?Ԭ!Q,6eWSNl8bgUDvHp晉!Aj )$8!9*%A @U6 Z\'#!a1). 7 mXI'x֍c OW{d+Dnw|7gI`mGw ? A(䎳*:J(I pH=;G]X5K"&N0g+SI8Ӏ_7$HL7KO}npQV8Hx$GALB"8PA^{5,> 9*w>'PA&Zh +[eirNn.| %,{+{R{nQwS*Uqnfȟ: 15F}Ș\pQPnƟ_>E`NIc1E#lGݶ6@ +,. tH%ƕp p=fHZ c6"T?zU{%9JF70zCKT񺪊o*9wֽAeh)M~$r߼I$H,_\S3XI)N^PFvykGH+|g׍yF @.RP0gV 8DBhd#㗐1~VjXhRqG&mDHYa#;J[L?&ٰ8|f;gהH`fv&Mb F V\a 81H7*C 4=.&'"v9!Ak"8VoȰ[34Nj`Eٹ(Q\tDrswRcsZw˸?E#V/8g6}n) 5/ ܄I IhrYZ Q&6l*+Z-0!qI,# ~w0ɡLrX 9\TJH:? Sb=V$P'9 N%lxHHG4ްKKeQJvH0 2) K )uU6677TpXТ5!\սU~@J O!}^슫QC^19Ɏ0!o6i=d~԰2k B_+R_;e\IO0LF M*9J^$GX hζў36WK5m^zo IGB8)gטӧKeƳk61Ri6fYtid8 \>͘=lV?{ - Yz!I힂I#Z?H HXDu`X#rkHikhn+(&98*.G 9X I-9?czrYH㠑q b>=H+T<¸xl_uEl\ RCǵr.fS6ѮHXY%FGpM:K3Ler&ufCqY˅Fb;iÝ zW6RdFlyvR][pQtU 6h ~0ODǥK- Wqњhk'oP,^ ~*[ V{TzzkRJOJ"|eW(cm5w"o1 qW1Ulqj`%CVf IDAT"iYpO  P? h:.FqࢁDZV̴gԭSѾ F+f?<\xy _s:G+'BK?϶Xxd &,l'Q %YAvHAZtۛJDp$$B"vKL2B'+lD, r ۦErBޞ˃LnnE\9%ܰ1=ǽU&ط6Ru[r77h8RH6pבKtq?6FQkC\NS]+AՒX!p]m=7oT}52R~xg 4 *廝!砛fimI" ɱ1p#iB! x)9./PPIU" '=O]oEG1mpܚhY75/3kC|PmDJ,&Konw^#ֺ+_7gyA]& >3wTHS53aDə+e`fчLn +#h/0tD~ 06 Jvbs)B>KrB[m'6Cx"`~LEE7ړm셜w˅t)cfk^RU. N)iZG>gO+ה($UhFB59wz$SٯZk*y}Co{"Z_me%ۉ5hVч`P>--Eiq/قYpYJa#m}]!g#7e8{ly>s:N~To~11bAת(pT69 ھR~T׊Uo/֗zde0u E_77ovDWPde'qMI?˗ 〦:iBp>uJ%7-UjdP8~8v^^ߠSn#V# MAVz)WWUʺI;0эD{ưíP\PF4BբvLOᅺJ6ڇ^A=(8ޭ>Ep<?~$Y^9 }.܀rs_?+q"7>E Fasnץ0I1sL%0kѠ^wA/J"8h4xѴ+t{ʈo*,J>APu= r(nn7"mDn^f* $<(}?tM"+n*Yٮҥ,Vj]jI@\{vA>2~gs'#FzHipmiOKF?N*}ύLp\? G+rܷl؎_.DJ|Tztv1٭`/iWIz-鄇A S)Wv,J 4MrllT9;B8#بz4bq4DrB_yrCjKxȄa ,!9 я7]@ߺHLGJ1iG[Vu26QHGB¨!Ha"jus mY7`/6z[i?ʾmM奿_Rž>ND&2&ZUtCh;H$Ѷ2y+>TXihoGf .j[&gsdTвO%)p8uTx&lATqGq?}V%,uєZ]a;Hv9q%9:CnTa0j`X _C/3XZ.}a5a˞BձG+@aBntKWWa5'O=օP6´pS]`…ՇQ u Dc4)Qlh!MuH F=A|g6eE3D$9tI(D^{?~C)5앳p3֘s0"G'9\̆˶|C+OH Er$ڝFHHH% XZbMزpp)80՚8sҵ'6B[\Ex~;dqq62ujсVєX;c2:5̓iP!ərfÂ6LX6#P.m=ƹoWU8IrP eAuXe<:gk8SPr(1JC . w7H%9(Ń@ƆQB7IߐS2!YՂ+eC%RIdi͏Z';|®@@&6X'0st;ݨOhdBpTjoس\"zd;;5KJ \ǔ7֭u$AfdstIJ7t@U17dՄȎ"֮7ĝn֮WRLqeưkI?~ujeX ~l䠕'9pFtk #(C&[ʰz> PF*Ę7o_/_H*!"MJ܀lb֠`K^#-ECo\-p䔰2!E 3%Ɔc^TX/P':1R" 5GW+O%' @]nP0TqVi[ST"8d;uA<λ3X\Xdw!Q8iy*R$#Pryk(9jcˬRW&9HE =IHHbrFX޽B$dFcvnVw{H Et CríĶW{/>)^@uY}BAh" 4٦Ś5&=$6=twᒰ ' (? 4az~-8l*5`^|uECRL1ĘƆK923Ž/P1Nr"8' fEUo\Ix=<.]*>7pgyő7./)u"{uȍd͠277n6|=g F+AH$bA23 gEJ럨V5By܈4I/m6͡C>lj-浴<9RCf`Gٳ saɞA{cճp %ƭ~%\x"v*a2\xY_/U1pMUZ1(Q:;Rn4U@:n) Xc}r J稦~Hㅶ$GiE͆#!az$)tE|\x晑7trummWthovnVyR[\ 7x86 Q7Ӿ ~܍)ak()|sVd`Pp@YL6| 2pO-X[l})|44d .D[Uy#`<$SNjT@dM6h0VDL?r\N@p9&YP1 :JAv%iVr# ( șS(C3W/ù)>1oXp)8ydI/y8_}[/qGb lX<Iu/EU,jYZ>XuBҁ蠧FdNvFG>H"qI0L*(ӧ˾1"7?s*nn$?w-=E2zlJ=iT ̲yq7 n !n ؤe0{SL6,c@!Q|U0 :Tt工ȷEXEc hX8x%1qܷK~ N:UfMr^ʫf6dHhZڄ}pkT]^[] KaDklQ]o>/r6%@"8iWnjHG\.W v߲m[ՓRC:"I!3bM`~ :yRǍCHO#x70PzC#wWh]-qvBUPvXڨ>E̸ڐE>%+5c\z 剴ͮV,.@?Wu ^9ks|&s2P8'牲iu[? Z C^$U|Y䴅N ^1Dp$$ dTE(bsw|{ ݜa{ckUڵkpm8~8]HVS * ^w`*/G@JJO&MZI7׭OEyoa}s}Pocz=zuh@'u_n+fDS:,1Im<ީ\asN2 ymq0Nbo0Y&|S,9a#]φ{QGFڠ6BAF5P Џ]GrPaazlCUc=t|Y075zg&<_%7okbNrhji켕<eyW3xnb띒4Y3*Dz1f?^7N6)*nćOr THGBBEy& ,-///*lGm$>666ЁCJn||eiy=d ؚQWY/3:о _o XdbY,*o">۸:6M&QGb2  S[w_;1$[wW ?%QQesh$0UH+4JK(1Vג >$Qćhj$:_& MC$r ިYUlFfm|*@MzpՋPxZd-S 5.n$ֆsN)`:7ȰMGG-_z}?rO^_?%<)8s3/TL -E,]}Os0*Xߋ!u$^eCU$aL++c'9Tp ѐ"7p`c$7Dp"E Wnd }M+ow{~o|qG<Ǧljۜ~Ynm1JJezoAa9(1r]$TbՅYYL-ES}N}Fݿ{}n]^dst + q|O$٫gc*ǩ<ȃ`T{KĆNS/3PBTP@fQwFS剅Gw%X-pROV{ATԊnGklk4W@f4h0I,O%'L67idOGe*!5BnѾ2H ?lkNvS4K<5ș(oۘmD{ӞPe佼zr} .Zw֗ë|/~޾ptOܽ oûwG: Y^җ8y-₇{Ш>@S!!FEcrVs\UMRrж(C9ʷJFvĢ(n$#!I$6@F7W"@+@2ap0 *st:Y] 17ȵ"s>..<_<%z>Y*NR$U7‡Zc1S>|߰B<̓$F\uI5MbN+H0 gњl3<#&9y<'+|ޡ x(voށ[=u3LeTqǞ _>7^9KUKghO_(4pM[zy;!OOt$ZI.zaiyI!OϪsss]8") C O')]S< ĦN]/0TnLa70,ʼn/b%p󐮓:HT G8˰"u]D{<')~$_|<ߟx^s;`Mw 9tv ۻ=|S'grCC r\S17O'o [!Na0H:F)Eq IDATL#cLr}sm>DP'#!)$]}My+l`OhrCE&a:ULLNL*)a+ㇷ.d{u+xkrANy2qqOj} o҉ 9E,I5&[}yªސ0yO<W| ;C}ݝ..l|$r | 2\9?o}N: mCBBB k!b؊Br8Y;10Q6 M!e[-ݎ eSlvdJr)a~p kcd.(~Zz2f6HyK#-MeʏG!!5y{CF!/7dP{ÇaA]xo܆.g1TΧX gN…//+g0dENXHLEaoV:W ɁDʦ,* M@<3n\7`G;\E&R?tc+ GXj{*pCV_T6sluC,AZ {;CX8ɍ񴎴-]91`| + ַa~tFU!PL=s⽓00鞢u}aeu 8Eh(s݅;wa <JFM* =Un;Fg==~&?UjZ_ٞh i=EY,x*I\!3_(UD -{JRo8QeN樿7!OgqݲΕ+p!K''&kmE<2%*t;`Dˤ+fmdӜߺ@;=h (CkKM(ԺAnI';B[KJH$__?`A\ R8x8{E;л'7"Ix{ڏ8s \xy0ŇCkg}c/gaD͵msS0~Ol*3<{u.t܁;aȋv`O<7vg˨b۔Q$K q#ٱ%AB(z)IF+9vJ "DjFDp$$ŋ{J .{ P|TjqN(8GvjFl[~ ˮ)z#X\Lⰵ?k+Ml6Cs} 1OLɸ!%Zk6r**arbrqLJ$L63 bBr&lH‡i5"2,1|xT"Ag*|>GU!ٿܽwE{P"@In{: )\Mb6!;y+lǂIj+9:PN# VpɑXHEٸ|Sz.n&Z:nc$8&'&=6F3BBY՗ɉIdoɔ>j~撙$oSl}ȏC:8 9=+AC/#1sA fП)|A~AJA(~S'~w.8U5l߷Hu2SrpH+n ZKEr&#!!{JRoX߼Y9j×9wsȪLl'NqVe p1"}er~G7џ7уcTnPAnCX-v2sфâSaf@WW9} %qJP*7\.,5/ac9 c5M.C:I` %"9y(N"8bҥDpXͷ jJLjg͌@]e{dk5m+.z{FoWv4E5GODϠ~}r\#+XxćN%9+%||UIm02CW.C[U7L='}/X$|,>u"7D7(JPVq]@ R08C{b['< l!]=p.%omM![IDp$$@rOaC7җRi^qd&y-ʅzZ2սƵ!o&=zӮanY$;#w#3(K=)@ }ӒJ;:0:廓IHdh !PGڨjC+53VnނW+&a׷ pI ~>KW۟:BpNf(Yx$l* 1 gNv6PQPRmh CDZSU]9^G&uZ\uUh_Y'Ə>K猁aK\Y4;@, ;9odS 1O9Ay +`*\Sqe!^gRpSy툊Ef~v^U4h06&ր:QJ2Ƕ9L2$c\ 0IXs߈i}?"gp>p>I#?Ur; v|h0~?!rB=#B&;:Q䰝(H’Z%pE@"8B$r =5 8CDN1\ʛn!oץL"۰73-_cN~_~LIJ7&Il>fͷLЯx #u(Ar :BGɡQ'۔T7BחԏIU:_-H 3mU]0J GӒJ~t{qEaᘡI _7ArDp$$ԅpODG./)(I( sƱprgl!ULJLVRw>j'N숹GqUUA4MrpVhujhƍhq=)֏F/ީak#{^!7QWQmrTfa!HBB?Pv+m jdk7?ah9G"8@}晑vcܱrs .AhQ2puu \%3p| X0}erJה׊8$$9]4Pdȱf#h .QBF"9(ڮ@@Tp֑bu%=߽Kr#^zu8F"<UYÅuKtNw&^.+ALGBB#XgW,^*&)}bd{(+=D\ʌOwMW ;FZW9y7ͲFH:Fc% ;Fm.Ql$zx "St{5H/N_|6@g#8Ǩaqu%$$x 1cu0N:U\] O$mFr q9HGBB$ fm%_]2އ(<< G~h_Y%RbR's81/Yi/@ G,d㑙3lAû!FzQ7>:6BCOQF W oLYKٜ P{;<qK6YGrȘ. * 206M/tx><6p5H)R䈢@CCБ߭FUjط VSDyDp$$B$tSJ*E[_U.0ՓyRʑ")XTdSnng!?o^2 Y2#IӋY!үˆA96OqDC#"H!9rJZ=;'2ݙ@cqvxgɍ:}kx U:\-ߞad~H4LBTqR oKn%O܆[͑= ="  t];A@vLL7C<<9xP@q.I)|[d+ה'[B>4HeVuhfYEtm \HEAWlFv R 1PP0S2Vr.S&38$∁Dv$< `٠,H|5]e|9)B$ !H),RlS+XUIL~U@ۯ6WH]Cv7~g}$Fq6thv &y䰙QQEzs8\HJrUŨU*1uAr()>R|1*R78"" F%Rhnļ-kss# !t7$FGC֧N8=_ EFJam^C+ȍg['m1DGp!µkx%P:Xťe}Wr8QCɁt#U)G#5X%$끛MAn3bTׇt;vc+{x:Nn%$F{`RTq3TQ(]\‰HHErOaA}*84j#TiK9@d#ˉa~߼ +pG'[!7y\F#@ac`rb666믗DZ`^ˊ]@iCqilS혒=> yVN\Qnqq|֜0_Lnx)Z=݆xw ,[.eXD k5.!AA3hc1P{ &#!!IAb=cq_#Oղ7޻?~(⺊;?eV2<6GgdRںe%Qs3tЈ 2 :\~uԂN`aq5lzI rDgRD܂H!ĵr{>_ $Goʰ'eeOq\?2+)hSdQ$P86k7_I*vL=Ӟ #73v v4Q~KXdV3>'#!){ZS0*nm$Bz{0p6*A,Wp1EC$ 褀 gspkm?=#ͻL;ׂ677&GEܸ&"$^/6<}wsuE" K&arjgaJtOܠڏM `][P86B TZ=3ˍuQ$C838|Tr\A1$ >E{KKfjX+\Tp{x#.FP{SD5d2yx/ۿ3U G܆tU*]׍ '`ss~i8q9զpQr(C\ׂκ_b!JH$^y$MZGZ% v_DڐLNOx# $4cqΓMn=FTt:i1 Bq 1gX3t ~8jvqvUANC;,r$G"8|8J 9eeٝj>'CB!*@;s*LNr;uj@5%8Cpuͪ``cc^wIyi3M1J܊㼊~Xhպ_RG\L%JI@H9{SLN%؉#1c՛&>bPeɍs{nA%873AꄧB-,%8 tW#&h_CK! =Q #94N )L",c% dڋ(l;)! ըV^"S)OjZ FzP9Qͼ/1XGn짧!]DGniBFet)a5Dzm@d @2oF"Ol#HȈ^$=&GXZY (7᫿I~6JpG')za,;HA]Eln(ȃ -DhmhUۨS$ HixJ(*P-dk vGaB`뤶$LEgP9İ W5%,F4jZݕjK&:shƈ_I$΅QkB$**j\ۈ&\B /)cӲ($:*FV)$Lw?3,E^"9TiMM5 gQ!&mx..Qi}XLC6g[6[{ 9R#E S)7 UiGnѢ.؈{J y/sPw%1b Їj>j;J 7a_i1¤hDV*(^2QYH\d$av9j ĉP[ #TrC V֨V =DZaڜx@;j/Vf1i8q'7+$ߦ8DD IIdDYZY`EH?*R01"9ԖR#E )xİĢ,aXPFЧߖ,pOUě|lvUAЯ0YԛuZ=ܡ$nvnH9Ft~e9gJed38|Cn4,? #6dE2K$ØPx0|sr0F GXS9GbblBy0D(ɍ6e`^"9vY誊#@Jvl6uUMQR)K $Hg%efG6o2w*.0vJpHa4<%Ұ,dYmmK P.8 pv3Bאz 2:F.v(zu[24EGbY"M^ֹeŢoz?Q(15"}L V>dI |Hyp{&H:5˾g]#΋>Z=%TkDҶ":vKű~AwH!Htmqmb͍ 2m*HKprHixJ(yY%=+¢VGQ(a!3FGG,C]k VN 01C1k-pzDɻ7yy7Baf_}d++dN!)SSpw_HϕWFZ>V1Ao8/vE+`+(9 Unٰk87>SUS$8,mڣO以⠄Jǐ)66p qg7UTARɑ)R7i2<`{\> 0 Ga}DpvX\rVj"wL!RJ[F;țД3K!LBaV#QG* ^tmmV?C?^) ۖ0PC0hA0:3薮W8&TEIGSX09FNp]O,"̭*8DH'$EM `ɏ]Sr bhI<{z,%8RCs4DCJ1LʐQL8: ,DBDS_ >`(ZfTgqV*!>)a0`6ȔpJ56kOrN2$9$99& ;Ą%$D++oh&gdS(`FB^sd;1k}C*2"[F`UQļXZ?dI)l^^g@rD9$'d [0)Ro4zuRBЪ*𢡄q{m;_i\.AgY,~8i"T2v,TeVx@%S9Q<J)aM/s#! @'X qsh5&F'`X|y>MjS\MnsՖ.J*(*4/0<:ZF L Cv,$p%<kVI )tHSBA 6<!̹OhFq 0{H,RK2 @PXZa##P\Nލ(jxa H%ɷAɍC3q ?78c <ƴnLw5C%%A"KKDܩЮ/5WU<֪+DDhz0 O3pɍ/7 !77Exv|Uq}3coh_BxnCǝFX0\В<|b Wc14!+ RRHBJp)RHF<]r)՚#}$SAm%`JEԛ*UXp v^3`֠F^vjI:ʫ5"-PA`^N ff'[ ǚU G![0qW@g$s_)ķH*pqѥ%mM? qi4hgtӱl#V(")"zC Z=EP=Gn8 9,hժ1vՓ2κkÝ<ă  ;b*vA%(1B`dĉ/1::066&m{<ƁYRǀTKpc62/< >efp^%D֯ #96`$;G“y#76 .,uD%@U,T6m"i{`T)RDCWk#GVPeRӀ C5,%8R _pM )tSb̯P~R7t9l]:O5IK`W%`en^vݺ-@"(4hX{juLC2A!WreIfcJ 9ğ`[$4Wv&]$9䉼3]6^Sg?6qwp])ڄV%I_X9ӏ>pe‚q X8 H!J%]S|xswUőstظY;R:IvJbX8EْWBHmʒ..;$GH )EJS<$~W/fլ6KTO!ۮ{8OCpQ!;G<؍HpHu,/)_R*fffyd &R$N S(*~T+}:Hti,) qBAN3D=@eDP6FH Idvp|.I)"JpD)8p)̏xU5d}8:͒! 6WOTjZO:)*L%gBzPr(1::Bx"PI|?9AQk60 Zҫa0B^A@G %ڝGdHD#yGJpH!M!Bx"nx /+a]SF^vqY-u^BSdFغɔTk'X6fb}"}`0b5mH5(Yf %5jɆ$퐺REvtMpm7݆|k'r utkrx>>a\R!{fĮMaDziT ^% tDV"zNhH$b&_tzgG RR!RHiyX-\'FT&KI0B;0 U dK+V)PFNK¶>dvC 'Vz@x:aM0fS.NQqx&9jB\;UZ$Sᾋ@rj 9d$){b|&')G!җK^1SvnJ ]sI_σ6AflJ\c38: &:u@UeKbJ;Q̚yg05$G1䋂G#G:9DAC /JJ]ͦ zDqAUe(EOU,$11+Fj} AG )q E^GZV i 6}JlN9X- %%hsP=B>pא}Xٿ7j{z @xKE\\X" Gq~03s I1UhDxMQVŊD֘iCyyr`UَHPq$հ,cL.@w/M>?[hGTs_NRQr]$9K&4񝧏}70*U4֯b@{Y OSbZo!jb|V;b<[Gi2Qczz077}aSIXxJU#;<0E ΄tH >rosK']rOmwPcW;Fw`uЭx en)]N"F$GDc!d]R 9 (q$ȟ-ySvNNMbrg`[Q$V%4^R?{{0o8?s~i.:p0K|=Nrx_xx p/m)`}[?*X]kb@lx*݂#순v""YЫ9?:ٵ*nȨfyHҊ-=vJDK9Gy#=R9aધ0{WW|rm'SqrNnВժ#;QMCRA\FZum2`sZswl_WnL&)蟘([ ١YP%6']3˟-p_^=X!ëh`;m_y{xSek`~p[4vܿxϣ6״ׇLV +:sۉxC8(9):sGߴCrys~0!AfȽ Kd>K-"$GR3kh_H)9a*r֒e^iq-7B~"B ʒp?9ONOiKŠOZbB /;ngQTPwm:$%7cu$FM1T:K5B$7ۄ@ɡ?4KCaV6x5!^LDs IDAT'#7› 䏽o`9ylpmK᭲]YYmm) vϤ|wQY"oxUnFe ZM[M4mp~}|!UI Mr+ -HɌkq,3F*%xa{㩧Ĺ?)"&ǷtJ?%ELekvK"gxw՝YJ~ Nj.$|Bq@smh=vggDϷ1;UJZu8; K5~: &O/kfWF*wTka>2!"0gK|!^A 9ع*sH@Qi,6K̒^>! qWl`iˍKRɑ\ڰ!}C!XFWf;Up\EnfBۿ]KRHRM*H&M1d['FSpLMMG)-"Zb d -X|E֔,n j& v=F8 ~hbtUqU( S sD`:0.ɑCJr{}txGSr#CZVÿ\[6,TRl I6 J055tZek'ip#oow?> $u.[I;)Vmn8HZ| 9Ͻ%!yTvc/ݎ!Yrʌh r6⍟062uC^(~uyblAEn0!+!V`pL?X[4'7/F*Q7)ڑ[%LC˟'I9fm] 9]?MAamCDBU0!86D"-;Hs}$J~$OD&9Ӭs{eNrtL"ŦUma@H8Zf0dDiy7DI@Za<%ojZkLY}ɻqVl>Q!%VbR " vgyysTQ>'T-"'TDuR ($BH YdUU s/zGc+( zÅyնXhލr9ű/F\d%$]2Fg&mX[sȍZ6~}prpl# 2Qq$D8Dz-H!Ga$? nnf5'9B[*)"EJpHQX DFeh eCL*b m/Mv0\f[Vlh aIHF'Dj(=s62 U!;B>߰Ӡler^`*5H,1@)lY2$kOVFUo@CDಱk֯:IQv[S$0tHqMhFľ?C.я!hм5m LT.!Dv\kǪ@4LUSC(@KpJ%?~O=?R$mwqv)R$hc"La}ŕprC,VBDn{cBF>$, ( ?M6ZTP4;QEH da(^Yɔ{\=BmCdRcQ'v!ǻqn~N="G^~ ]Hd0sSt0<$Mpg'K09iiϳĵkoZ Mʘq CqHyqtQ<(t%$7]N®Ŕp~!UH0yNXciu{}lTysݵLsP빹9JGQ#EMJpa78D՚S@ l G] 6FGG1(ZWmN$ͻRGn   ~HԴCbp̰申sH(!Z#M ".;wcZXCYX A'#9D\Z<"4 A'~zE]$ѶĆb %..+`^i[]xH03兦nxJRC,.aye EHo./'o > Y~9{C8(9GYڈ\B 4$%7%0dd wG3{AqaOQ.155b v_=6(XFY'U cUml`W+>Unݯޗƶi#e b$)- 19};uJžy쓂]]Fl`YX,bZnd2Z@E#ʈR%GMx_AE{wɪ-Д=Sx|;VK$GҶsz#1Icsq#6hn"#Hzڂ5A'qF B†6O(6~bM*qiV&8قSP O-jTiEf^"P/FTU=brOVC?l2ѻ~?v^S},Z}U9Gs\ZO,CKT %d5tNn`5"I1WX Zf@,$Nn\bE_C^*֐ϛsϖpۓ~xkn N&ڪ+sy71X0κv?7bCs<;]&wNjm #1ZV'7MD[HZGa&3Gn{!*Q Dpw+'/qWt{_v| f%o~~gHoDG$ְ[vGK.V\gé5,ΆJ֙ rf䆘UO[ud2޿|## ;T֨KA6/I%y-< UZ9S`ÛM˒~?'xQ tl Gӌ*!h%HQxĢ}JE,A!d46(NN(/[ gxk\ ߺw?1 S^ǩS{@Cg_y @>rm9E 'jR$2 $N脳Ixl_T!zsMKƪȍ|o9)wRe;vӌ%7XSSSW+)aFVG kI8!'7MH*x~h &.{KBdMT͂U)}q'$XVFҁ b ?z# OE%3Ҟ)㱨$%-|Mn,ahWp&0~r8(REk@# yIA<@/"P bLǘ(n7^}ƫTmX_A@!}6 ?04/Oz=%8*JP"#7$w:6Q!;P%oRTV Dxwr $> UۡAY};g{|Ѩcuu_Ze`YuѨlxVff x`\G bK"Ϳg^7$7cTcr8GDmQdF@Pq0Mh؄#7|zλIE!cClPr0(˘݁R !XmZM UXNۄ>LżԪ~E;9R !bOIš.Б i,'",ey-& |ΊP.49qV?+w]r#4s444e0VpP(j7J헸OI?}@Eۀ4><:peߛԡѓb3dؒ?Y%~4F #D6A1;{W?a̼v݄<`zu kk-բMZ-y=88$=l4uG&UBCICFTDnz˒V*ƦY9;_țp9lZwO& W6 ޷v]VgVxFEGvh:IIsF&3!9䠊$A\!Cn޶K& \^ 1ku8q%G |eo^&[CSYmH (I߀s'1L7pۻ`Gw5FKa>_ M0 Ү);m}GXRzll¿_wO;vއ;nvdwo(]իWNֱ~lXi %XFn07qgO;ĉy"lwD]* @xBޔ af~`&`CyXxĆT*/R]ȍ!xbMVUR]GvR`6Wj6YhjE<#PqUٰj*-9hHS,La+xƯ 5j|n.P$p_ǕCh#EUH"1ĘO*!tܷd$dؒQt.txJ7IB)D}bHpDɿq) !vφؚwW>Q]?~<8)JrCX?|݃]n¡Cþ}#:F<¶m:F ;z޺Oy^Rlb7P9-_Ⱥy:?i Ùa4k 3w)Y!baͯ5$79De((b8Jn6VRJcsmUy:†!iHJlvv_Y· #" qyjD|D6H nC'#PاʍP֛ж!oҶy =Sxssҁ MT#v:Lr; S6TqtʻOg^&>d$MAE$#eIrRWrn)1Ⅶ`Kc%\B_trOOgvx{Gw3-0igw\v#MlA(HO&ҡT*ajj {/9mx Jt;={Pbd$K.bq"?KXPJT %=S7(](IE5հ sP5-e5*rC7Zc ܠ ,155ii"Da~f}LOhȔ%k$0&NIFͪq|gќ0.1D$FstXPMr !FȌdb[L//1wŷ߿]?굯5kIPr%:\(1M")&'&shH** ;4҄ O.n;`tUqB}cӠӪIEĜæWl<һ#WY7Cp֣s3Þc>==94Hڷ ?޽o?2!=岗5%=z i 5nz"1=%{J~50165)qb{$GCS@~-%7:^2ԙC||J}L+dyl2V@3NLY48܆ua^;Oh) xㅫ8̽\&Z¾bHrƒBL{gzw#3_18[ -ޜ?B@Hgx񮻀W_u;w];tEL>"E/'sI@Po$t~qO3sԢKh*vmuBQ;5)zhb m‚YvT!YHe'9<Ķm&d84n3fϟ7-\x;088_N7t[Ȕ"Rң8~ÇPNñSpP'TPj (8S:aJ["//;ɎKVXQurAsaen'4LewVQ,F o {aFI#i?fˣf")95֍>ESk$v|x*|1.f<%`Fp\ , |KNrC|>\ 8nv;Zw)IGqIHNyXDl_O6<'2> A8G*|o~ԝ_%87]r]:[ 6** it %Q '9K}mL^sn~ܹƣ>oCpg;?Q7@dR2(W9ܛ2!&I j-!Uonh̾5{ -q.d! ,_vR€Ub ZGO̐GRA\FZU A-6V ,j07adրZ)h5040oT= =b x ꉄ1k(/(O j{Z\;x֊kI:&Q80G}xKt4O?(yt.@ZիX[[/|m,|myC3\b?0` $MJ}kVʉl$|ℓ\4)/tI):&|n[X1lr` x=Exl2G4D):t'OknMAt\Sң H %XiBZ,$¹q:AUTU(ghxWo0v*3%a$KȍZ}z EI2Q'0'ܐsl2]4 ڵg!up((H&zqe Ƙ**[l;MHC?_wo@@T*$MaC̙Z`Xx2cC"B?|na@GзBH(9sUGqڧ>79I~[H"&m4K_8g9DǑg0Q<~練DZsqE޵Z8ƶa#{sd_N,Aq8x:S_g]_FXiB)Q+7TkK/xIDX- YD~e[-{ ׍M`-WRrt>甄*xr1e2w/\\H ˈZ ~ H4zLFڈj tJ WFL`ר )#He̔br c;EF*Ot\gWdpDw:F6EvDR#Uş|5(+(Qˎr8s QISxC;N#o$`becjV c|c9!rϑϑA- ᇜKH,ނo_?z%9P,#ˎz㛅1일!8?IrDaDؤe\L0*cUD!`n 6]Z#АLqNW{wΘm)r[2'Œ󂹁Pr#7Tf#V+@YðFj:*qTkUr m!]|sʔ|86_5? aZo| TU~2QA#_6NU7 O1j|G =4qu?H(ŨfܥTq8;82."e.XM ]%c;`Fv(E`€jKDF6%Ow'HmWȉEuv\|]\IXINzz(iv%CARGrbtD$]K{*9W&*Hjk$I!jl3ɍ2 %:e2t(LE=HPR 鱥ROl4zC@QAQTW!b8fÎs8Ee!RS7.U/aǨeseK޲ǵ#'7:2r QT'B@;y5PD9+BJ3 9m#= S*& v*8rBɦo/H #"C$G,ǵ ĉEv0;w汶vUڽ\**yE{ރۥYDL!4Zj]$9hyw?yN"SUE&N\P͡/[ZYZ8ѱ)i I|m~nKOvǑ)lq҃)Xt+@ \5ra,섭"C~LOO %1rFN;%aߝ 0%Asxku|g;Q.OC;Csv hT$5s MMd$Na-m}FS6$mT113~8e!2 KEKlA(ǻ\¹3%\*'9%~&T%ssH)A] ):|VhH JHr˦"=zi.=rbhsp ad\.7j HmnoJ~_ <Ǚ Yoa~~ᓉGRcHΚɉlͼ [y@5$GŪb,#H*LF"(|j֑+>?ue܋JV1ŅK޶x+xbC20"=DõYkX<m=SC`Bal;o J- 1Sbll g0sܨL!WhO)K\'[CtIǐUqjIN8:s >To9t~) 8yѡ00H `RVGzlH/|7%88|6zDtF'lW%e1@#7\TFꬊ ='OQ,@$vCRܾfX%tv}FZM(Gppy54 X$ڜZ~R|67Kn\AI֖jU\2,p0ﭖ쐐F[o, |]hYoǰsb3oo#3>}HH$. 0y=s$9qpb ڼ&N`mS^UvЋ*0p[LEM}'I^V6mu #rǔGHJ)\˵e` UnZ+-Jy"»`A2V8y/4}䕄Fqfp1#@F܉7n;[nCH{g˸r b 1"^O&Gntr> aSpՍ3,9I/4#zj@]U%Ul/;Ǫ3!=}0E)h:k@En)BxCQT)#0!=tj#=J;u aSiȜJ"P!&kt5Bܨ&s繒jo_GZ06:M:so d Fհh'3jPU~IE-k!pެ*ҰDN KnDb6QWmAA?UY&|$'^bnFy841ޯAk67lHRZzCЇ?!wEyo- {>w@PZ0sIo$%mHpC3{~!,ĉvRGTj38`2jҎ&WsG:2#-bC!G`T Jj#7 qJer 翧OD20rc ǟ Pu(ӟ8!'JE蘓osrC 6t3*,Knj=ګK ̼'^-Β I@Gn†H䜴?:5/A f a/_ΘeSlb80O =r[R$(7e¿>ê+兽ʋ5I{J'mS5j|+ {aRB Ϸ`Ќ3HRT"!kp}Q[y׍] 2 'vX&Ff h02?_1N$E0|DEc!N2Y1qU{Qf;تQdqRS"9*P7 kٷމ{ bK+ 'S8 ]\atg$bG KQsqL8m9c6*BvN&wɍk3/D[|mhqG 顪(4:DZSr |#کYI6_s&B "=N !RXX A%AKDr%kuHdpDB$+ݚU_Q@lp1phª.dZYl`xlDk>;qw8{GqOdh)3*'V*y`=|+tVI펳m(Eg|ct6p G~{oe~4Nr#Gp{oioq73mDM0Fp؉hw<*=ӂ#ѷE b3r*{-;[؍ {c_)bM0:Sxl[R#$orPìOPִcH`- ˔ R8Zޅm)Bkuo%aihOnT=3^,R GWÅrDQ$JLHI"5@&)'K3ixcQ }b; .Ew[ K-Fb(p^^ǐ{qthM{d$qHsCcUo,V$PABg~{{+o`jS\l#a#z#|SqP:&H}g8>|`9 ?@Ф#[-Zg'Z{Z;kMe6ڳ[qTeۺ]gJ۽qXme&%4)h 1̀stowo==_`?U$fyO?Oc$(sFK(/qFa+`9@>iDB QaUsj[՝*.A1!H /Dg>Zݥy ܰ 1f>N5( {N{cOUFrs$aNy氻lT66nVw Fa4QJu(*2]g8*sl\h]xoQuߋQn3u`y<"8"nySRѸ)msciHH <HĈ>?_BuQ>eTT+*Ξ;b򘘘D>GjƛLXK ~$6gX$I$5aatErXI?=m?axd@C'42Pk*Kg=Bb8HpYYPS#gbWe[ACiϵD"M8# RgF >]HOb˖ %Rq 6l#!`/' (8FJV#'.m5w'B wDpD؝絿Mvcuc.7D>wH+ՊVTazëLt}}R8n%\A2VT;7gǍd%0J<$'!b̠ &ިA0%Låt.mQ4@gV&FY-q0Bb򆏆SAa*l'#78趛p `Cҏ ESֶGnء1\:s ז|m.I/MgJ6˛2`,ŒA Bp.-GhBE@cmc7H;эǩ2^vB-,OWQ'q (%]y*&@)߃[7G{Rӛ%)aoOf7"web>,[>.v/HnI)j}[s  1WԞ.[;H*F,{pp*jiq0LW7xFxPb6@-8Z6~ZaUүy#7M k9Y2Ϣ8106˟DShQϟoF[=6>mQPsh A!eawB' %G AH^Z_$=T䇷 eᨩ@y@K1ԬGI;4iAS*JMA Z,qOQuh䆖99o#=2'm)UA'=\xt݊Z1Hp en,6b~ A1zPj#5,< cS,OT?u5LuD,2*.=Ee"ε _Jz.%'eamK_ߊZ1; BJV| $i !G+ΈDnli Q̔u V,Z)*El3xEWG Ds=[Lt]2&?8vK?#]-HvdnLxTj.d=@#RpϴƽHHT<;;J2ީ!㷦=hiT*aqqVr"!,QlDjdҕܨTHQТa`}v&Nn [ח^@n`Kd5W)2Gn' \TꌏƼ$0(æ)8T'בun60U!^m4Ar 1p28p${&4\:q 8᱓\Ԏp[ ClAWCǍp3V0r| ?X}LiS߾AA݃ss~CNM~d;D#ʢzDG t^7jI,p#/u-RSQ^/##tE :2)aσnT*칳I1i{qp&/Ո'ժQ4 bvp(6lw:*|!-NF&AzȌ'p8 9`![2 t#H t%A`? RUbb'ѧ}2co4۟[YAHAH$l3<ꉸx# rdiE9H7Z\G#Z:nslz >VHٮ#"8">`h7piVkF;"NnHFPV9 @RJGiFlO C~7̔}-cR \'fOfwC2P?΅ e'0(.O85mm,C H(I1xYF2 J[ =PI&CR 'Țe(wڧ`Q} gNSao ,AH/c2N4Wm6CrZٸv\',Or"}zYKD3&N]hw50aُ##BA2RQj[Ra8 Y(Q9Y_ $ cUd­~ʼnQ3oa}}u#1ACIa{UZ'{V ƭkƱkpd &+3ua*{w&I$;fr9,./T|Cli:$9|fYpx13W>%3+K!)1278 .yxw?CRHM;(,SgiMu-v<Fl49nP} ,:xDG݋.WpyŞEz3x߀i!{zđ]E Gb4@8pdݸ1ߜCT,)$ s,Պ3CaaeAm“1jy7 nOh.%@\ f~H yCJt˒#UNᏩ՛*!^pW^3 2jZ!|6ۊC|C\]D>D~o=yS_~ g țK;S7Ή'.Qq@J;h`v+潛 ȏ`>#Da >011r FCy` <[E-a(5(r[` 1< ;C*zsk琟B>?d 5E抐Y ͖eV܅+7J .r#!S>[jWX-5G; KXS?uVi8:4>]lNoE0DN5Nb?ex;[Wp讟( i^]cӏhLM;66qMlSsF{MAonД02go<^<"-=`g2G v X)4`$ op)&7lPj S-BT4ɡB$`_vw!d% ,)a qa"rȍكvi1 6Io35$ ;唒NqkyAlD#Ü|3q<{ﮨpk=Aw 1V%FCzqڭ&7\\TlnT7|{2n+5={#$5g |~١,5ͻ|t[>9~[^  hX? Z͆h,?D{z?]h ]sM5CԛrU A}u\ lW]:o. LGRz0R7+fcFgC#5lGk54 Õū"9Pj]duהۇjA˘<~1.}bîҠcnrxuÙa3Ͻ=3~Zꍿ ZW7׹b[ZbZ]50]U/  G@Zy!IADU 'Ƕb(=H{a۠xlJ?^ f ?n1.j gqC'q%lp;g _!D%aC~3[0N|n=G z;E$GDpD] G , yAn6 CA >H|>MzhPM<ȰJMu,RRjMpz Q$t]>KqinR HC$y !OZB= 4!7F\ 䍟-b!З1#[ f򎼴rIۏuP(+e .0Bn>1{L7-TVe M "52>inb$;b^.20[/[qqhYI}O];,CqM,__ڦ?Nȍ0>GG,r7})7#M%dw%P݊(4Ao׭O5IF:0=v'vI0Qٮh%$* ]T*a&=Ì!arr.˰]Nb#+gYٴUNudF ڸ|] 4c}aܤʓjM'1nWoT`f}>R^BT.@z(PBnZx_dlo{ pqB1qsP irC|Z)_ږ;v$;9KU @ )~HR>L\pC;i*؞L&)Z8uL=mѭUX3ܰ?vHaORt[ퟣQ4:GUaw(8"ÂS?=7 19*k^2ȏ|"=t0a'7hH0(5qk'9pMy'Rs2FVEoֱRZAz12x$ɔb' \` s_Q86H7 5pAqP%E0) q)U$v61x DAnPÓk l*ĔA ;)7ѱ|}S'ڒR5Bsanw&1lgֻG5 mr(/ {ޞm<~FDpD]SFHZ{;4IR۷pGzP[&zJ];fD!SH 1_B.. GB 9IUkyǬ)UTCPݩb&Bt/B(nޡ8SѺw 0Bt5ӞǼ]T C "'ev|UƲ oѬ0!"@@ f>95kROHFyt`)A5n}cBl!l{&SAWOOiJ,$ J889i/-q7hKlT<HtF$Th-_.͜@ E:/Z`dRQ"Ҏ+{0t ܠ x,5E@E@E5\8Vg{n NnUًVLR,CkLc"7\a[XEj a#V,͠BZ}C V>D".*g'T&QctBUנֻU9_DpD=絿{ < SO 9!IMT*NiAxl(ɉIkRSQQ+胄GT|ЇPŁ P.QYמRQ)A|yLBL[#7X,ɩ`p=͂rC⟲& <۸x}4G]v>.$԰8ǧU&M$IRG˞"/qI!j#GSZ IDATc1Ιx/G 9~HReX٫szەm:(ۂ+6 qiCmŇQ$ftW@ cNWqI~qnC; m4?G?6K-zu31FGGo_^=}'TC!4âT*ǝ*R L3  P (BQ:;_>cpk6p&8d2yS?oZH>j!$cIorE< Jt8 ..w,sZjqbWim5O; QE`+~>D Y (+<p Lꂑ5OxGY9FqrQ&:i&i5g\#o·:ncf}&M8t* `֙ h8-SL:W&CF~B`~U5{f@\S&$o\|PTM:=EBgq/Q,6V%뗷soS'y;ƫLfWij99j&r&!Q/\6TFRwTѨC^Օfi "BrPnA.?e8D6XF~6cC3 ʶ$#e'TTۡ a@NDSQ+&QVb]8$+zzCp{,nA6m4!q8n^| m%L5K[7ʌyy>Ȩv6l.AWt`oPZDxd=\6W=]޽a _FCIGej=׎_DpD]2xBNj@yn*mf*Bct|(4ybfLIa-\8w8䜌FNbXz&a|ytx?ې:m_K^^Eܑք:m ຶACLⶶ*N{BƷdBPVˎn]h|2D>C>TN,pmIXSJPLCXA+6l|!8 !EG oO<a1 ¥ء1LB&1V66]6K% m' ;Bt8F$뮆untu`XK@AzDG݁( ȏЏdUsdz[Rvzr+Is22ӃH PjHSώ(c'0>8=Ay?d9dRF,C_ I;j_O?ݏd14sK ՊNjTE6 uw` L. LA j*Cr)ZD7S$1I(FV^c7 l F`ChSX4IXƽ& ~% ).!}-T,2H)J危 Oj0:z{N!E&3i$)bqi5,DGBA,1f^<\WðRUێI@8&Nr,$ABvm~R`Pz]_r  V/%Dj>^Nc$9| f԰ pUp}-454^k7wgqk) hB*6*=a4\׎dTk.RxCT/D  V6V:=Ҥ) $077 $8p|xz TCԺ @oԯ069={aϞirHGJeLf00 c`@xܼ{.{.{lr> Y,T:Q@A|;< =v&m8DA"& nz|O%R}wn&9D ^]Npa[Dr$G6Mԉ)emkGlƆ9ćʣK 81PztxC֒KTj93~zBE%j#ÂvŪaWr)Sj Rqv&K.,pWYC*D*B/Ĵx 2d]pH޾Z7|lAUנ*{^xɫx (a̜23& =Af(NS w67! P]tZ,gHi[./}c L(+e.9 V9 z4akG*#^G gw>Vx' vR"6AZa1SHA.`<v-=k@z3~XHқnb2.L>-h~Z5Тԛ,Q%Lxg}:i\׭=wz ҵiŽ BDpD8}#:)f&.8'-p3J%̝0q`^*.cMYC*<P qUܰ**8gs?ahhEYCFcj5ukȕ+)hW x|DEym >|{P(Q,00IH-kܐBڴHR9 ;>֫ Rjඪ@X t %RӆaeS5NuխH%R8:^Clf Ñ"Oeࢬ԰4Mt} ]4ooP۶Be|:Gpt~[| ܏cM Y=4E6,Ĉ5xxi%|q5*pǒj~6~ӆ ;Q pPDw7"#AAn7~r4hhEn(uE#,b)o2"C)P*Rh~\ߔ1`xx6d9U-ak.*TvQ8ZW1:S8nbkm ?|=(2HBoHF.#o tJHFl Kc X0h*Jr2R2!ABRT* ݡRS@l$ :RU  aBEDM"hD qǚ?[A/r&Ǵ&1ч"R_?X }bub;g 5elmb,@6S_*` "1DNo; i;@v%:Z| "7EG DGG-+ ;x]AHT@8Xq0@:o#Fpj:HœXǚ&)gSTM)"TrDsi<˘{RQuW~-cJ2@*R$z,2Y|p2s?Aa_ϿtNzP(ճP3\Fk8I| 6Jt[>7"8">; sbw]T+ZT1GtsssX__ǰ47}r֔5$)#d]2d$m"MnmP*$4ě702E*$8l>׌dlexL~ށs?h?~xqlmjj`ᬡkݴ;ѱN^{Xq! Nj]b|螡BnThF#T1YN)wm7mA"2#nHvpV_Æ\2wTXFVo1=R"{;޻e$Cꋡ/G_L?K}XUh|8\k7U™ԉ)jz̨!X>y`v-W DùUDѮ#C&9"v2m1B4(56;0619/criIXT%Q(b >:񜊧4EHBF*RS8pRSaHA?"Vg8vvDAC\ҩurI0:F +]A03sR{[tv:kTU 0TX6p s?rp/B) ZSc`TAt/$74>iqIB2Hm!7N{n0 1bU}ZZƹss\.#Gsò)cN &rrk I-K$kJ X 5Xd{%IxGd#pO )!WN$زH5ȋ16=eMDZyw&u޸wX gUzKpZk9G1:# /k[**[E@yzx,/(ffڇnSDGGAŁSNi/YRqbCK).oO☘䤣=.AeI3p%JMP*I*'w/n\Q!A ,ZVH'uWjxmOjW"o2αd H&׆13s8o!=,j/Uō(9€ޓ;J MnY=CZf|X}%f M>&s-Ne oE}@rl*?%c?$LeKتm\;wf?Z0!j͵M\>{D:)CxcFXG)dY8BncF. |D-"B/rIHnijLDpDpRSk r_" DZcpW=R9vN++q]Q꫺;KҖ!C8p;$'KF  I¶ń̾w\jEkeGXdWNu_;ɉ!`ePYk+]xRheǫMBn@2tՇᦤr9ˆ*JSJ!r=F*F7Sޠb6{f"id!q{}]\AoS6~';4Bkl*ƹn{2K-klW w^c`Nu@S{pszbC 4'x&011|>Hz{vLj|4xhბۈniQn ]ϻَJ83wq)\.” MnX^㭢 HRPj*hX=0Fh%cI;d lBnk9{:Q[$=♏&q՛(ۿa~HAqItSYɂ[р!cksoi 1:ިTm"91i!P!FVP60jrXˑӗ0yدwѵ KN=_#0%`Yoq\ "8AT/M/ n B{k25س1?ww/ Qaw;=x_e[@Fĭb@±cܭŰ<|MI:2ʬkJ aMYsOK [fan(VrC"ot|RC!!N?tLW[(q:1DH)P8/*]]@bǚ=$L< F Ϟ6]!}40\Ƽ vUXZYx.t8m"GK|ܴ(Gak"+gYt-;''e7Rx soNLT'74nN45Iq.Ө7tSykJWjĢ2a+GVf߻4s?؏8Z[זHC1TqtƧ1HtQR4݌؝f)5Ŭ/iƛrb͠%uT}Z qMlXd3%GQu$xx]NaPM)kCgx~mNz[Jzp C~GԺ4߄wO`ϒ+Z(݅! "?r9_.!Nû\S{_{k∿"#zS_z S_|m>ȣS2^]&UHݱc泸y$|)`< q^ Ak8?F,jhwCn& lz?#"8"De 2wCކ=vs|.㳨"AdHq#/2UA^rC"-qKLV oZaQt9`=]Bz>^X)j&u{:T4Ak<1#7F^ alAtTIzdH7$GHMT^Y0o=%`m ɼ0'8F<>ow.*{#/|ه2Qذor>Af!]V'm贊\Tvr7:}4:L Q lJ\|÷YԅStq[z 7&&&09=% Ђޒ!)n`ĐV8$Ir+ >qUw@ :n o_}ca(+54n]ckm-|Z|!-CAX|F{fD?TV S=/$\{J/ q$7FkָivPOt $AHmr Mvs~M֯-`]:*lǵ{ԁ)r!.<`+Onwo01\`<֛Ԟ"-eecn/e(Ou!9FV@R9/HZ\S,xw t 7W/ݭ K&AWSMT(VDsKH ǹ{QQȰCjMWL$rB&s0&?lѠd♦ =X =m4"õpOaƧvͻIr x{fˑ-elm<i!D i7GK wy |C˂w-딩v+QlF9@m?~QΖj]#<@7(T1O%(,<Ŋ%Lr"W$ȍ-=RɌ191I$а @*a 0JI^Ю\p7T}V|˟ 46A"./ ʙ mU>ݬ𝚙6*=ڪhRF_RI6 "8".Nua*(.x0{|CK*j0Y ;R^GKcG;FN$J[!@4T"d}-KAҵښ4 Ruf;.Dz(3 `?~i?| =_qr@33qUKت<_6נ| 310@b $VJZD?? Y DPoА3 7EP6M~./$3q[!AHinCO\^G([p?]<^wErKsoa @% iA{eH<3UeL8, ִk/p (9"W/)-G:V'$QzBz{܏h` \C95T((Lά3dSX@g/in>DvG퐓2@s!90O_+2͟8"fIHnjQsn+SkMvsT]hX<$@hc v(.2z(h5* ՆR vەmry-ކĿYp7ЀZS'F+cz:˚n`Q3*uU*Y ;١ v5cļ r 9 ٠(q1?.b;'R2I<h`G ?eZ<I)zʸwᅫtB Yf ް렑'Zq 6 )ӺYJp!.'9CYLMAH{029I_ͷjcޫ2oCq%|qh/Qa/rAhߋ$3GH"#Bos .2^4y*i6rz0 #+l7Jt2R.3 2&Սl,)K %Mdxvz: &!9_V.b!h;4i`WPVNgm!<OEFzu[[0?![ \Ǐy,ijXUHH3*Mn(5#uu'OBة6qmʫ貱Ȍ؅k#{J yW@|&R6iXwA2#i>?@%l+nOƛ٠wo±8d́xes@As?>ۥgy5L;0o'h9 ߸;@X49| e>xB|(T\N T,΍ +w&{e=e*Fm B 9(~]2/LE$G c,nAHE^VrUċ*-4{\%uo3kv(4ZDrHNGDpDKp)@|ԏܘȍ\.qMcF6dB`;hrU%G]3]Pu2dX7jyC4^MTw.iSX6dG Vfшgk@2H H Hx1XI{rnoX$jCUG13s;qpj rSoD:-pznlg9?lz]Q9\Xm9 0j} yMܠ덿lsg'I74c\ |'hKA# ^VHP/PG/FݎURB8w'"#U)J%;wocqYQ+S  )lņd!;R1yfI2 I⧀MƒA>fsf,rR濡hG ؒdd,3Ob陧Gaӊۜevt3=m趧UM]3"<:= _nm*ɥɍ ?n9˰BȍEBW=O(|jB%cIŠTZ7I԰$A S=A .?ޘqS*`Nns|B ߾_z~;`y4O_^qcN}O~kQιڮwk7Dl_➲yxX z~ rc. !ʆ`k&F1v8Bg_a@N"pחq%l3l7bͼt\VJ` rj#762܏sD lV "QkpI#?n*^rQ!Sq-[ }NՃ堧hmJ` dž(Kȧk"ܫmytN#n{$(!hF۰DA6#5 nӓ39`dPwVqGKƏ^?/_P,'ʍ0Z(wڲǝf4#1{=eYhXG^1=$Db펲qxK!=!=!=Ps쒧a!\~h]^8.9otHD"te]Nu :epfnn%-EnH` ZDTyK[tJB5p7191y0h%%փqj% /ŚyӰ\q'qՑʶa/lҔ]8u`u.3a5 Q Ͻŕ,~bBQ-sKXcO\[Td241AXW̢Ŝg_>_ O$+`"h+(Q|o{ bC5 >q&/|﫭&]{BCmu5m`?.rahQX.|K 8VtJiGQᲑ#B)RݎSO0J`<%%Է$ )=( 9j4:UF  3B IJXGttyԓd>9;gpMgaϿ.s4C4Y%>LX˂f53K"w h{ G+87 :c4Pn?R.y A At*;4CctJ[X͵MCac3p%t/쟅=vD/4h K%Rr?G77"Gsp3(r#{gE_XudýyPkK`'`w!JJw,BGnJ}jƺh1;*pk *#DrU5}'_\/u?q Q\{G6Q,pl?ƇNc^317cNubmzD#7l3O!.6?s\Պ8<}MWg54aaװ T:''ONc2Ts= `8zJBu t\3]s}M ¡KSG v޸ױgxfggq6FfAdOzW^HgGISSrbCN]h5e"WRV5:1>IoqcIƒm 0Bt3Y~=~w8E͊wS`:w0pg0,h\.cF9!=nהGn'a+5&;T9@wEK}ƏZWԠ&agx<'AJ Ə/=-!57!ꍥgeK #wt5׿u,.."je# O%@u RSD=>5v|'պd' T:hx_Rhvٯ+O"CrpM 4tKܱmDcxX-<(]5bށ+G`jW(."V//(`&6I +8z|OrBs_vDtoA7 l~Fo`3qOF%Gd^DAs[>9miNnmk.m}rmEfSP х7n,t[)8"Da,,,_2޼ocIn7?B&\SxT x'Pꊯ Az&`ʍf~!Tu`UEz0[a_'zYVcfG ;҂V< Ԙe2&M|w.>]ů}a,} VvJç}i_p[cx,Ӏ\FFZ1H= O|Ș#ZiSSНJnz~}2-sAVc39Tst%O|(QA_ ]gA:v%B_7]n}S\E#Bos:ٟ`bb5ճp35%,yI-P*RuŅZ*/(M,e멨SSN9I1v$? +5eGȁI+JŒF ג|䤌M??l+aLmQh19gB8#CTpdukcCM E=Q8.;?/+ 5 ^] ڠqxȒgE,=$ w#T{T+HqxM\Iz$p*NK*P6 1>|+K|퍂~.T6;man)7_>M,*-..|Ʉ18#  b"Yw`#Q%D9(?Lx%R2͖RH9.EIl^zפ(w(ʠ"{eC 1wޙ;}9}ӟ8vO=}9)#,UhS& 4#ӗ+kM76إysfӹJ*"&;1E*kbj 1YTs\ye1 J1s+HƋ/c꦳G0+A .^phLSfHi"ЄDV^ş,b',wR= Q8v*Iɍ32(3?9ؘU*BdpGC>WIv1Qaq6vI'eۥl|հ4G׺:gڬCć98n!k& [Вo0ŮաA[b6.jȏH=0-@J9<0e*G8͞)&=~d  5œ'" bgD(MzI2Jܠ- $F<PneRkn#D,EtUTnF Bn |p u {Jf/P! Mr.Dš ژU}itֆ8Kg3곙ZdĔQ[ A]]'n>nai9 ~{f{^_>k?a}a~&z0rL!611V󊹂Y+>4v6p}0cE\8{ax0Q%(b,RSr Ka3e[ &=+׮x3nf%n"G<'l̎`E+mou-LQfRaX5 f7߈M#d=mG7# &KHH$Jcp2!h$72CxX&jc5,ucHY[ M`TyWN0U'fsׇmuiνNyī빷X  Kmd!E/T[x Ňm=jcP4u08(Q$Fc:L2h^Zܒ2T*8J A[ycff<\wߐ16De7oS̽~ʒP|Y!=x.%A '7D05@H6j%B[ D kGѾy:Z"D]n/rj䆥RI!z {Je~ˤ̺,p? xZ"Cz,,x7~v~ wKx᛻X.aZXE[RLSb7O@ToHc }SXcR@. w{8j=[ C/̮7;ޢYV\E\]40ĸ"r!D@3@(QLI*LHM~ow {onaFD6H6((8uΞ;Ց @!v:$j `p8b8*4l8$ih_ ՗EX;@/,It)?Ao$ft0{Y0馝}a+:;knם{\_~K5j_]Djb 7>$}8 %Ȱ>4+2q.ًo t_lؒ 7*u=VEShPBQ&!%{ ۶Arn˖.)W/_EILľsPq|8<[x,ÅzR>PT; `(El*H4 %=J--Jp.)sss|O>nRC7m4lKLpEvVSp-)ᤃq ń$8̒ ~l1'%ZZd޼6VdՂbm7U#8( Q hV-;/i(8ׅl,48b]ćl (BtOvϿ"9K%(IZh+;E-sj N[ nlt:#'RWpXNF _' LnDji(Z73wr Zէpު\%8CQx<tg\_9Ǯ+-nLL3&9^ t4v6pWN":є88ӓ8uN~:#Ŵ&Q(BPyUxoH?_q@Ip&<-H qm`n_`2l#3okM&7IG5[3Y`G'7=lob6Чn%ojBWeM$Q>8v߽EglA$ w<U;6!up2(!.cRb-cÖ pbcO  Wi|w &uklGY0ǥ.T1YlgHAmًZn+4Zt%Qq@O.8PpTABdSw 27G9lb~~>V un'yX)dt'Zxf%#c2`ņxf ?HuԜ/k֚Ǥ)0q&H9)#M@P\^kO\:J^]'@lk'7)dXF_yVfDRgHWzdvˡ}/ [hfߜfg[ڃW{=:HI%"xHB.^^Dgƃ8rsSI9b!.BŹdK⎔Q$8JixKdĐH0UG0̈`ۋ)Rlt7ԔIҺ!G\tOQ( }iܘc{JET`k>.jJwp$5蜟@dۚ;wsXcւj1HVk|g?spoAz82%x$GWӘ?p[9|px0H7Q<Dq38ӓV7h7,괐 !m#w⪴(ؽ}wRD L[[f47Lw6,i[lK m^޴ږ0t];`lnl*۩*gNBI͞p;Q$"C5q< x9GRri#=ֺnobu${ǡY:nР>?(bh L1޿U|_{'E+^֖OOo{OݦF0$ 1/}uygsN&}y;RBlt4rDbʚb^)2MW]>'#*G[IRQb4g"ކ +=64֫u} 1Nႉ/a:շEW ۉ؈Vb`ˑZ{ ;&vjb"CV_uwSDܖJ%qKClTGGԗP(,lC`6^ ! mU}761R|%"=VH }F]1}pq8qWw|+<\9⧫ueOvkI%6jD B! ٸUq b "CN :Q*M௕]79bGP[&0?<̠-F+of+@> ı0E )gmsmX] ccALI#h(b-mcnƍmY me[10mi.?6QmmYּFiov c(gk6l_qMl+Gx9y1-ccε=62c2 uKE{K_wc׺~mŔY1WP #RPM AHQ+17U~ʻpm?ǰ+G︿wױncPՖvt]T3rM ǔ@cgn˫x>cQHeOoPX+k+\7E BN (>oESsų)o[$޾wSq ÃfsDB.)BP3}wNgLQ)9! oa* rӿѮ)ѪwT!ےBBqAA+,R|t Qu|t(~fnkA8[@mDxUy1'wo yl̔%I;h>o>{?Pr`W>x?O[ӛ_zIWn4,fg[x廮r~{wi_- AH;\<{1 )+AGdC*WL* IDATg,߿2cCiS"_M m ^(QDWCpEnt%?(8 `g0'0Np:U+VK-=@2hşod33eL;2Yf rG05t"ǚ.%xsty_b v2M[@mMa/.#Uآ9{Btߔ혖"BHK\M(|[PF5mތEZa\5S?y'گO^>a$pcwxW>=$]xz*9WjergGsN'-ѣ B )caj‰ɿ\U[`c! jZGLh7[%C@pZ-4Mm5!' U`:hZ.ioŽ)͊|+BBww}\VM䐦 sΕPە`JX[ W!:WDor )ƨvt&%.6 UY(̮ H#ϣuo|!*>a`x@Fg="@AHMXx*~ 2aSH4 y*)rW/_bzt:<вt6,\H>揂ΆiIqOJĭy%<-Tw6#8JCPEbLԫ"Hp)htD KIQwY>{HCRWsYMphvAc"I-%/µa!*<ԅCp}ฎm;nUvM &14^~~l ް((AAg3O9`%qC3]mT7WQ=@7*]P2Dx|u!8voߍ{͖18JHf󘙙\.%dFCyP5d/0}.,e*(2@ C_X܌`hrZGws 6ۗA\IB$ 8d\ M4PV%kBZuR:[L-ShB!(x^;|[:m+4X-kIg=!AL೏;o;KHgjͤGz(@ Ay9wMH㚘?Ӟųc9_&G\I.ƐWV 籀K_W4n5#5IXTp&T[0Q>>Q0,f[I[51Qԃp TK5| } +opyUptY"ۢ!uOA7/ J!"TJu>}:eZ *-w#x%u.&qLIpΉ8-Q^p_ ?$̱48ImF}2#*8EH#)M*z#8gpȸx'8HV~P!‚6$'BX&em5IUΚn֦PR"8&M&7fU@HphU[w:q<^voI޷/11V4J,L0/Ue+T$0k%QD0 GG%!<;d~_a ~ &n- 8J hڮc3D͍M$F@qaBGz;ަlSF*D'95k9',OҵBJ VQ =eBl/Opڕ i1u][YnS <,u:56/A 7; ߈PWHUPCkj‘9VY4Sš*J E{ Bp$ 0 18JtLQ&7QKOQ#~/<>AΔDk,6Fx6ӔvRZѹR`]3+ݤ*أg* QuXKS: 'j J=Rxc"OKS8+Ic=UnK8ҮObzLXȋ+,wn49֋]׃J @  Imkj,9n+YHf9H"_ "q={sm%yMt(14(c6Ds  &Tg*h/vԦ*o@Jj*8Dyo5L!aT xn*3u}S:`Z0 eėcSGP;BAhZ tUҡ*=riy@s:f ێEphiFRwJ%suj3f;j^ergGﺎfs'79b1~xUs92\-ND:ޡ>n^!3\[y8  R4r#3p'Ӱ07FP!}dݛ~YfC`PGos%#CPK= uD]Cl Q̈́,JDTd22)?:Q,k2$$gRE)9@Hs."J8%Oңׄ8|ame"//:AHwQjэ.kWq bQ3AdkH97E:֘v erEyI3%QD(Z&v1\R(4j tNh9F!B`"sg7n{ݕMH L%~U4AFFHɡ3~ uQdihE ]U66D7cի# )L|r\Zr""X!Y`RCDnxG3#NR"=cu$=LW-pC@V^Ime$Jɟĩp␞ta}s@E$uRHrGp68xh8pjj%nW|Vn0﫩[;B02dJF*K)9HQOʚEXR68F9ecG fŻ 4a=h_T3;ms#9SgKu閏#4= m=_wH{߻6c!xmEqhLJ_pƩ $7p%Ȟa)JD & ?I܆8Tr3 @JȑĄ<y>!xHOY4AbIЪ0Zgkp| v{" CH bsDhRɎl/&|, 4.\ֆۖ<풿tl2}\i~ϋ\G"J5»h-S 9SNfJ(lRQcIJEskswCN7q=OnD!<|DrW;>)iKtL"AHY萑qŁEDcW,rtv Q% \tt\ȱ cP05#$8JpQxBhN c¶A&_2G9Z6vjnyLbUAwmA"˟a;fuɮO$I2:ɟZEnSza6 j0g#k?kTY{ϡnxt;hf,fg[17m}x&sV'7Lc!/;8ǰ+ 2iQ1㐐Td܋ }NwɡX(q뀐333Cn4̞ Ḅl 3PܰBK%haD6qG7\m%Po ^B0޷>r'Ƚh6cu3OBpųֿ{/|_L q0s BJ➤Bl~iu@|t qʵ":AρqPTvi!HzM=yTp.B蕑DŽX8 Q am)Ӛ&dC ߢJYܷ,{ #\besǶmH{\w=N}_lĊ|{Fc#I1cy'G}ކ":h/o?/ u Znʠ!zj:AH)HUakKCt 6RzQdzS QR$8Jl9| ###نmF/Ҳ[-ކ[@AެN6 ENQBf֚-E@)2É1!9mP&WJD(y3dj0lqMsL&wKu$VK jR^9@Q}_ .qQ9K g^8Kp.|̑iHZDGkMp_ctLД(:K̢e`uy,zޒV&VBx$0ח#Hǖj@GnJ\ާE H) [_WFV8Q'g8.)fv{]RDՃ*\ǐOcdk{ A,Xn'U.m22EDFRr#,}GHP7* v;~0TǪ%$uۢ B b*G B, Fd6Gpo #7tߚm)`# S# Ozң<(="=g!+ Bw^\b[Auiu]Gq: i4r@O`=}\Q *FzED _+_LL40::T*UT5|?[+LT!Aќȹ-)╕l!:avNN9KVDD 2 @5.,҃'7V; ;c} Ie<" AA^_Sh 〓A<jROF )4JE%BZ>>DgI&"*QFz;oo#=N7iG ">QCpF͞\{"wKxvbQ%IFv뒬)<#I˥YLx 9)9#Cz,T7Q# 8cJ5@qX p3mG:'?~ ϝǩϜ‘'r8NDc!4dzP%_K(+'111z}z.z.66qOmv0{q!  !(̾ܰ6,kṤPH7V {ӎ9p]ĂZFn!3T긪DsQvtj/I& Si)ɝ"{.dG-}77ݷgyrcK'\h3 ~ "&~cRaCң՚[G9_gD&'me"//бC&VqDaq8Ltŗҏ_b&QsCAL9u śa80ϤE Zlb0Minl733V)OgR!L* ! FVx# T5+ߚ&c?.n)3dsmYIv.o䎙G(:.*BjHeg /&n}iO2|KpCW!%=۳!9Te bi=y%m''m+dDEgβC-!9fgVk'fsG^(Qs0o?羗{ \`/[`p'p 8rT]TT!B~qhPj18Jp@Bp|Oۯbbb jSؾ}&'Gg,ܼ1addccp ADp_Xpl\Mͅ'8; Op0[A`j1Ƌ` ΍Őh-b"ki \9O?h6r’Tjmmp9B6g7KDm*1ɣ[؆ǐ  )+%'ן<침\G ܺ@C\" Jn*ܹN/;q䱳|X C玐,* X]^Hn+ S 8uNd*~^e]RxWHm [ !^m<&-VJͿ *P:ꍉ67,i͛`|⹯LMϿ`Jc`4@:r=b\aûyƿHޱ`jb{!nE]cWqqppC{`/؋ٶ޲87o77{z*N?}(, >Car$///NJұ8'gyѻOla Ĵ<6d@J?ti18J -'0>> **&&h4pfnׂalxQ7`677}y뻕>|FgM }:(i c.uK;wEuGl o IDATVVkRfuvW%-.#Uh8PmUUdJ7!*h*BhHՃAkWJ,,!QdT Q H! <#O~&H 9gFd1M^ :^~Scjƭ.4] /QG- j_ ~JWJWᘒl+:AHiWbqHp)-'=&ƌ!e_BwM a!?%vؽ#=TpZ,Xo޼ut:7pU\ƵkX]]c( [ի!Ep2eGݷ=w .pT1BPkF'Dd`lt2Jw]2]w G`mD!>ƨk4 KR2g Ic'si8@(8*QبhL4=ゥڍIuoe!: %<&=}CzL[ _}ۓ^Ө"Rs*]S .0)%$( 8NML ɲ˰\Gd'iay:Ɯ@kk+x%uZض}>#U&)bиX]<5Eo % 8{m"Ծˆ"96ƒ:J0}+J52vV'/09W)%VŹE.5n]ө(+ouKM~h*zµrO!84f}^}>a:] dI[F r!c`m ~-!똝m{ALUA\(I!<=Sgp Ar䃃y!O%rSC@HH<UMpKq m(1tW|jz##y&,k 7n,ƍe*{0 ###ժԧ>|S>ԡ$(kfoadAanVܫp#kzk bo ln~'H6%{Nl4[0iF@ #JkSTU4 m#h&7u u*Mɍ oVPQH؁P˻.+QY´RZ(Lw(CR3;3Wо4ȶBgPQګH#3[4Qia7jX(/-uYދVkGz_rw֬8|at:z*ogQ{y^?I{~ǎ5hs ΜR{UdnEOHzm"1ɢ2vv8Y!?FWύQq]Lxhq^Z]&KS"4!Pma ku5Kf rɑV v0Ʉh_B^~~fR!"9 Ė\UA9AFb$&=Tj-Ʈe1q$_;y@ ϾqGu 4Xxu!`.^0 a4aaovOJĐa߾YT*Uv033Ž/ia0c1@/7N M1)[EwQzUDDxUӀ: wWAL;eY_EoE^RB Vw%AJv~/6vҵA`#ʺٰ5 U,fUF"7 )UC~Gt|;HsD}MBVǑR9+o`I^7÷3v Hq1( ye9躉Z/a&B{ P% 'N:x`@ %y1׷Pw -@Y`՝Q۟H|9dnaA`r%X#.3X@Dnfm*EGqc{ 6,TjBMR)uIg&8xב;:~-;fM!.!tQIi>xRQ`RW(cD,uYN:Fzh/LPʌǵ$G(Ė<K%! e}3X/ӋDm' G0fލ@;w`2uՖ~oT ?АRjt7{L5k]"q`:P۔ІTۣ@ rZbKN$s]/}tMt OE{?EhK(8B3%s)kZv%6ImKy 2oĂ!ḶLk/W,/yCFz$JCr AnȐuqS4<_u裃THY@?Cjuԣ(ocGe npcqL۫W"9[awqrj‰SWmh6͆d㞒dS&%frzԹ0\W>!8X'܀֥^(;vB8YZhK:H!"!; *"*V~"`r$;3Rmi SǀݚR(ĞGd̽B5G.*D C8̍os _ak)`nl*:ReA6(n2r{#'QX!ބ`5KH wiu KKj\ܙ}^$+2u ȕ(R(3 $;7fKUn, <yG9TzD9oǸz'#i]g0y7(Gɍx[}}؋br$XˋxG裏bnnsssz9HIP$[ cN+$ %nQxb%yd d2Xw:.Fu =C'JtXL*Ӿ;H46 ,&H8蠡v*Z1ү nh27pwO w) ĸ ‰ɡv djQ2|$#.#"7%'GO Ϝ򲻝WzEXV0UpqGc*ٽ- y8TJӓ« 8Mx-e*}g_< ػ tæH=GES#=(˕UNQd % 3̓rCVĵ,ֆ =įK(dyf[Yk8Np?"c"T/fmn`0r 1Flu X"` >a ƽT֊)Adl(Mܯp+!mR Aף!X\(oȼ |LGWp)6hB&:t 4ı'q#'<T1}`>8&&Znx"ξxg_<,ExN?u:r=aJDHx3S!4&F1YDhZxg LMگO` hMЍi"&^C:Rj!YEl':t :2Bxh-9*לTzH 8 FxnO?fLZwȾZ 5kHƃiC7Ek8 ݷr-l~}DAŗ͠ )H8&2C*\X*QT}9OcVTc*_H$GmCa_H!:@\xux̻j_wM83&ro)8ёE1QAήAJqlQ"YJGȍȁ3Lx7=pJf5=_Lt7{t tc ]Wq_Cn#T|Ctèi&7?IDbLvD } ھ4/{kD}}\iO}jhۘ ۯ#h#z 8c~A6S1ގӷ}\%a)BIC[eTeOqX]*c\LVZdǬ ="HPK SLJ` Jױ{㹰Lwb`3D!P0gN֔;:?Spib tI^mEhc<tj $;?0ClPAA"ң S mK%FB\gnIp|GRoVA,CpC0D2h!@0}I_l-Ipb#aĐ v0;+ &lv+ Czm k{n_͍MmNIpꘃh)#VA ZU ­ZǁwD f߾=kdHVH^E#<"q iYeihId#șhZ`l&R cQ/Dl;8rUSgpLhƩNyY^0.?)!/-a[rAK-ise! i9( g̔T2!7AX#HR0,TTJ!1)c垚:HS YUqABUF*ڇ(rĉK"nvQcf>bHAQ~dз>9PV_ס$ ;:!~)$UNZPSfYd 0vi9 ձK\`p41fc_y'ӹzNXM,%|@20ߋbr$?s?zg_xR ĆN+=D JBŻ&oQ{7 *@Ip(1%8@mS<}$`}Gp6~'G@gI SF ns'a7 QtA:],WNp0}2i_cC`Gx [;Yε_Th2HY]Zp1O%tRJ9 -#E&fS.l a@p.3D1e/:-e fXþ_ qxmoOE''CAz:,ME%%P.*%QĐ"@pr#ďܰ01&Z ( Ȗ#LJe7v`SM* IDAT>)8 ,U#@z8:e ClĶ+>>(74~wl q\'Uop{EjվKzJ\86"C۾hn~: .0KIm"8^ҺYm$(N)rU!e׺tm-A|MNU T\An=>2A%f)&@/!?GtTyb$%BAg;9GD #Ѭ(m>{v *"9\Ю["$xG2D|Zo/@OTk5`om[|g )O*,"7H [s/,}lZHlt( "˞ ;-ל  ;ױ+T5AEAJ#*$7ReGXVTI3 \l3Rh'vK",*dmQ2Mcs􈔹J\ (DՔQ%hۘa ZIV]DP>HnMjh,X 1GM/. %3Q ` lIWtBjCHK4ёiXk&2E`[[E}jV#)gQ\z5QaH8!uukWXZGV&[Q%Zhg񰟏N/-Cn0j9@Օ EV `.Ri!:jң(dlQ0JBd$8; !-U4u?.|;,TќB:zKU(wu̞ cď㦢c UEϭ%:byD!5&jQMbc{NCLTW\@iĵ .# $&| hr#*aYj5s@a")4HT"0 "ECb\hd4Igm5g{!C)=Qr'=rzQy( LKP%Zz0pAP(4olR웨  >v<˷]՝ܛ{*E^tkZsX[o:2`FDRW81#A&c_7}Nuo%JBy8HBn)dۋ /;*F`SzZIAW@}\yEmr &Q1RREH R(ʤ0(!*2UC(X ɚ U;pkȔy򂗚>ёwl%Q">hTEF#GDqpH.*U%B_R|#*Y:.*@DmH'&liaOJ#-C QH 3UFUHHe'x FZ0v%:|5xvwI]W?ef Ĥ@דX/7UcԽfem.K:߻Υ(@5% Qņpj@P^8 ^uT* kPE«&DHU$l{gH7o`vN+0l!~.~+"z ĩ[^Gg5jyr'aȍHHܠ>ޟ!7l(ȎVBCs9=жKCbqG,r#b C;YAþK聻_E'\<m~!a&TRIW?B,0(@j,Q%JX7 DsRrbZ5an*&#D%t}d CB@ g&RDdYOTQA.Z !N",H8 SV/$ $˃I:ݸ)1:5{}z)bFN$i'ֈ} TS b߿$jGգ5kIGPwȷֵ!QoH:3vkc5R>|`mX오l-CVn+S9H) j)@IpP',/o]rVjbqBM|~hj].",7(iGc Kj^fa9 (9"tݻu8 $(!%t6jLQ~(NACHx$  {JhYi>Eh+v6m~e! <>EHD4䮰Pؙjg'`2trtijp#( Rܜ|#{߻Zj1-fRФȎ(b4&QCX"Heö}XEmJhfl~]i1Ysd]WGWC BoB!Ss_..rүn~#OETN]bM ! ڭMcxv>z$rMɍ$G^)b(&$8N |ECh8d q6R̺ *hQ 0k4XÏI-@09)R?JEyml5;Kʰvpe3(qtUI?~GqX a!$:,Jlj1P7@Bv!/6l?)۶3BYuaI"/>B?]Ge&(dl)h*sEzN8% dwlD4YMn PL?pUV"\Mvcs m8l͎$I(:QfUٜne E b/ LOFxNw Iۃ鏈G~Y^n*"fv2t>D4g$ﻑB؎=ŀGDRP]P_wi%/BC]w1#jţ?}Dd o'` E*ɱ ~_~/ j(]$p ?@3$8 :2LGg+iEqX a8]< `$(651qzT qHgx _JE1N|l:|=/Ff;wr)YɎץ6s$$=.{'[spT\޼y[𓉾y޼yS>)8E~#,1'jvj:h>YB`["zwd"LTďw?W/JE^2QPq|%9z|3g@ܐ,ƟKnwڦ DWmZ 3crdYy_JzJq%6:߳niATWZ.R<#[(18ңXfP&"o~5osv*GɣQ^7 (v>u,X[mZ;hdvހl?R8zgw#S<øIW/UO!$䆯 tNa@L2|C4\>5X7i mD K= 00E2HOnLz:k9$JrXYPH;+NQ .Kzם_[AER*Nr |wm0;U7/ңHQ A!ˁ ܈=sDp 06Ju-h;t[8zxF`m Gw.,iprRh6]%pIte4*L5"\}.<f79YR"k"3åN-Id#[ٱ4 ؖe qpS"`N<"X8^,ᢀnZ#!! Hp疻7*uQJpT ?'6~bù^|yؽ&EnRp79i>E]~FpHym7&BN-/w1c[׈0K\fK"8ڦ]e^-ɍ׿OFu\:!Q\YcVGZM+@ʼ0 0,ZGjftP7nzOYy^"_-z%-AcaRD%8*"78,_ o+qf/ᇟ~@~qq񼷛JjdWLJ#Ws ZfW&@t`ԹN~YrbDGv:]X '7Pw8WOȗ%-[נз tV$ k]ɣZ$ \N%X@CQd̍!%"ؾ91:X8k$ņBgJ{1\،ܰ%I=$-[Z믿mM+d?_Û7o|ttG=}<((lncى;=fθ~=6sY736g( =&zC+tA{w rOp.~91]=XU`ؘQ@0S.DPJсV ks?uD5ZCX`ʴo-rjxB<&c5lKx 7MY㬸oRl4:$՟zC;_˗G~"7~@ͷqi czWp x[)' 8?)=}t?ȶΒ*8Er;m!/JҩrzYA($8b>b{Ldͬ(ͿqGI9[&e,)ݧ4#(£ ǑSťC (z.OO#0 IDAT? ,IJpTT0C@` yxd Z`C!=uKDNmaxFWu"g;+Z!`0h?4B4"<%%,6A(m@+ Qrd~2 q黋\22?;Kǣ%̖x$ǿ?z~XGE##?r8K[cz'"8SFp8C^ 8 a$L?ϊ쁙Ǒ#TԋDI#3 3\A;/ L#egQ|8\ˠ9>V 8~I6h@XRV)£5.+E"g 6 Ky\i!?2۰ ABzo޼as@Vc#8Hr¡"g< *(^aRI:''8fcp&xl|$Lbr$г$Inxsy_MX&mDpL0\tHJAcSWȶ51,T~m//Xh,$i&9BDHs>B·뷋T}Q.HQ G~!IpUё9("Pg%;mW[IcՋ^z,K; DǦ% 80pn[QW_; aZ؁pp7`dC~"9]1lCK0Lx^zD<y:Z#zxK/g -Ww1`wKn5V,' Vxe F InKHLzR~1%e? &`mζ]{{\uvA͚18,+{Nr)tkQlP^xIūF`8,a#8lgGN(U|4x Wv,cG\@Dz ɍ|;No~X@aNKx0 m GDH`͒2Q=xy}wh0'$--"b"!+qʔ̠=CRi(kRq\ G=˽Mm6zLv<U.5^=TXFz׎ѽ᷿-GE'jcEl@86W OS B$ıJSIe6'Rؽc+Et.32,p,4Ǐ,R@;y& D.dQLF(&hgV[xbaJWNo=2N\3fZpri)9qLoڛU|GsmzVnT b6l?ۀ9\O\. Q!*!!$d7x4:AQ#MXh.sY gCyKЎ7fY̺lڞKFpKo ]]d $_#cXJ\khiȴ)YA^dW"("vd~)$P;pI GES3hW#x{z 40+x{VMvѥiٵHyc=ɑW¥C΋t{z}zx`<)TQD%XϾN?EHrr #J`2,eD: jЧ MnY{;rlD7XuX|NrD*DJPr1Yij1m'kh,98Pf_ohY@<,E}ǵKq.&Ѣ0cKTu cCIaɂU Y,2jr SGA{B%8**~|VMAɔj"$g a2T3,GH*f%Yi/?+X~XHQP&h'w MrВ>@;a;9q%C"%x7M~݅/a)եJYϘ_<ۮ`sU4/Bk7`#.XDfb,+llk EsRT .>hdR}/Y0HPatr*̝\ڋJI*Dx|t]ZJM!vD}C\P}zk_C#;J8ׇV:Sc YBj!QRZ$1T7"ic/aqc& L9(J@ iYV8ݫ 8ᑥBWq7N"[.d h疀$2=wQJpTTJtv}?:'衇w6Bѧ"R$0)$Ezp3l %-أDUKr_ %+x"B-K $ ɔ[Ւ#!5/9:NɼK wǟKȵ榜ƥ\|G`ǿhg;t =I8GGxs+="bݫnw D&rŒme-1_(oKT)-1HFHQn.!^(8 =rsd06R-5N9TTQYr^(t.!’gK\W>%oSq }9Xj>tq24LY침 o× ܴH3Dǣ'<>cǦe@Ɇ(8 p!Dj+[J,orMɻਨБH!Y|=2ܮ*QgT~ z(@k衇b,Bbt O[dH/w_2پTMd fe-eEI9,ic芓5WO9&%I1K7$j(YM1v- KtGq\ L9K6F yQ4ǖ%=ėd{/!(@%8** |fx3@? Iwȑ>ӌy.>7^ . 1M0~!d!uly)L ϮyGl*YZ_MXO),q _Fv}cy.(M ɓΔk`C{DӺ=N&PJ*upq.Xö$ceDGR5aP"<6>n/`xliJpTTT7_~s\U!k<9{຿J Ϯ)-{"r/B &\SHf-e$Py[ظ>C ?K*]a>,q0ki+F(&4tOҁ Ւ:ӜmjVT8#C}.tm\kExlT&)_4+# dۆ(۷OGEEEqo릷 P L <'7H$fɭь^GmPCD5+uJJ},Eg@SmF\T ՜0QJ`WM3f*6ᶻH HHd-VBYPz(>UBqBֽѲZA .cziUvOb6{. +O~Ms_47SƓa;YcJBTBFqDxM.x "8Fo{Нկ A呢Ow"M<6/pV=!=P~E2%rI"6"BQ#Xy<.ioV8r69Y"M1ߞۄ ਨxYDR ;FbdGl#zj{2'LD"Htjb躩zg(q{ ?~*TJUD>٨  }n++ iv)1ysd7 ™dj wD" +Zi]GGIP^]h7oJE(lܘ`8a8#a ^} zޜH7o!ݡ%Z]jգStWVsڹxY/9SGEœ>q-[mu)Bb%Qft, -㗘PQ [}= q:4s @ G//a &@/a*!qt>SuTSѨtBKؠYFlr~ 8s!jz>c%B,%m۾QHͼd(JpabP=rb%\5WƂ7^ݼTਨxB޳v} A&5!) dyu4%XYNrP’=Y# `\=tNxȗ2J J*S1"7DIKk{:d 3dm2ڗ%NͱPEbG+ΛU ,˸ƅTmAX.aYS.nZzvO;zYC3X) =z.ݰ(`k[=JpTT<5(WMi/sB:Hd|aKۚEr %g|<55*FG}nO["፬+SDhD ծ'0Y);h/_M2*>ȻnZ ,-ljDپ|FKrpYy;RFszpIDwK#ψŜ~!/Ͷu(53GԦs+5buDy8$ eJJE!!%$~GC#0(Lc\5wQ/EHW,Щ}~d24&d.";Yb7cSaKx" =V͜]eU <ʸin5yT4;-'罛N'ґc7ᬄځ 4LQ J"<\[BHd͓bR%C7v(,]#8***.&#'Xr漜9 L8s7$ Op䷻cLtasՈHg!q(盥-R p{9a^B2쒃/gJn8.vEHJ9nF{s^U&e۷TH˧܀AKEq۬V$.Όl簆rC"A`uEMTpϴ #tl7E’pƞX7mwRH[#A0qA zY1IxQ Oϕ"A"@)'4dQ:T&/@pQTX |E&~38sz*S>qSKCէ~>\F^K2Ym"3Ի q"3G*Q,RF]ֈHx׾Y~ 9L)c++$y _k£(#9DDGAQ7 b{(K0_ss)vKGEœ2 AY&KcRІH,&a""cj&3| OϞ*K[ths54 8wd{\p!s1;˖@88A*+po^u{inර]ȟՊ]+/F#PKFvd=l$~m/s!cofXcពPV!RHtv^+/{y%=kO:lJpTTnw9a/G}Ò!Hzny7+FIDsj92*"2;H8>bf#̛f":H'I|>ּYOR77Cwf[ep I߆KxHYo"Q*ٸAG+j#<]P_{hDryJT I M^LiXy䰎u4HU%Hli w'm." r7,OK|9Mrٷy.١\bDuvXYuKIү؆9:۷!;S\pAGSȘ7C)Cw72+܅ݒ"';,0{}6%%sh ^7#-hW'3cgJpTTTlѯ%vZR#99hOZCrXM $9Gr`U/a7W_Ήz.;u|z $sr}#p6[.ӳQe(9a[k|E`㷮\+F3ȰDk?kaڰ{TƯTbIuj`\ewq$1=@*dMv hX5e!,j`̴|&+ڏ_ĞvXR\TkIaCxڡ6p~躄5τ?7![6mpQ#8***9 5-Anjґ!9z* 4Tm7AA:DundrRJ3sۏ槈I"<7 \Yj[lC0YDZn(hVr`&s %Kyr_iY7ҥe9)2ae4/#:X;Ytrѕ23y9[9[:)8vlڱAer vyɅ>h 4BJ 8T%"9;E(,8&2+ rK6CRv*LDN=Sx?ܟP :K.F>A!Dmɟhr1bܱڲx̑툌h(7A%"NzG nͱ-#PL3!,Sg#&Us|{-`}i,.Xgg P '_UT oy2$: 19Aݵ# /Ig#>=S9D`K#ƏFЩy{FQ%,m.IK4(̲m.bߣ֘=!Fm5dsgv;'CS1]:-leFPH T0a=Ty#$LcUly3ioRXA%8***. G)#3&WDHtg܈_$Al[ B*O9ѱsƀu3 d^suVl_r4^Lԫ7%k Y i9)IbKN I}.p<;Ļ06Nd;6[{Y0u cy[i!'#Y&( -aqpiQcҙnv7p#`&C_儊l2e u RHc>-IwNV$;YZNGtgp4A2tPՊ&<!οQWY!oTe519)"[ m=|p|uc90,1o)qS '!Ɏڠ>Mnb<ˣr UK}Ka.rP\#k;"/eΐ[j쳖[$f'ܸRK6ZfҤ*f^٦=KR^hq$ \ؓ$>Dǖ-,$h2mJhOC@%8**6BOԦ_Ys:NKϻQdT 5zp N_r{6?_aC;2{p9aT[/$,P8 r|;H_.oɈ}Gpe]]P<%΍BC8xR, )H"EtDTU:ûaJ "*Ճ _G}*+F|#/xW"(ܚGEEOOaweqgrG*7 #Km:[&=!^#(ޚ Rs'.Ys}m!2c䠖lM)1qnqƬŢe+BLZ6KZ͖Eud] ԏ$ '_he)e!C̐')Vs#N ~"((xEȎ!&_"ގ&R/XŖ(|,֨GEƫaLjv'oOn(OIrWѲ*8䅤j'%Ӵyhhvcx gUSsy$-U"ZM?&f9%]K/aYi"0%-h)uڕEcS6Ex@!nOt)鋴ѐЇ:k8fcZVN:#q!^z1]`ё Ҳtℚ"&3D۳3T$B`9r|-sETC0hj^cѯ Bw%+>vz䠶i:ɑ*t>%H ^ӻXWqN +YSc6XO4FwE]-^`-%y_zive7Ć("uӿD+ fX4m$¥0—K ^omhSlHWPȰZ '.>`~Eks<ƅ;Y0;屄) !9Pn)#~%qrNRdzѝ(`EWBH8 wf2lBt1|^7mΧ1.,U[ y4o?G<ȅK29\ްo=Hأ4-49ĄE_8[2x[LGqUHF87*QQQ" EV? O98Q5Ύ!9PL:/Ins"dTUO aQU͐Y<9MCn`q.oǏd^)D," >[InU+r-X0"Mp$:iR+ ?#m\TR%p)cnL}QAZ`.#G%:nڽSE8%k:'Bdc9C4W NQ#} 9šv2t>*ws쯯^r&|+LzQnE%-hTi~y[D$# Nʜq rLfmg9+ u#V3QOxW a (Ƴ!A1$hgnkCLE07 y~ɐZl`uB9},7*QQ;oPL:Mؗ }µ9#d#> 9e+D }n82ݝh `t >f lvDIܣTГa`ȋE,[$#T(h)d#N-p (9rckR#I|97 {ٞ%4/vKv%(1>;EAr ؙ(*t&v%v<lF.`zz *QQFpLPVQOtRK y7BG}D~gc.;^nIהrfB;vLC/i OIWɬ2FЈ]ھmq%h!D\luwf@$( GzVFu߲Q쪲! oW{O hEb[bۂ3_7N*j.#LZwd3% [d18.˓AY E BUгBB3/ )@%8**<^^NC`91_(!q6dM@O3 #~dQDSgg58.W/_rrH/姢~_ Lq:(ԕulՖM(aTGEǴ$#zuCR/C}l[~j\K+T4gq4%RD|DtH$E쀭3& nN ڦ^X|@rra!dDCȔV^W%]B.&9X¬d=ё YJ-ml4^E8n6h4cUjHI;6'Dr6}O x$,Jz^FÍpb8q!D;sE-]^B/BYB yM.s+tڗ6"G*@f-Ȏ(|a܄t\\M! hZVYT(dc$7*QQ`YDޛxJ-r|ww-ɑpmhwC$K-ķ$MW/_顃~tߴ3!c&=] 𞝶Es[GtIKOz)󟵢7runtòC5bTi]Ț9JRG*RQ1 uO A.e%eG)uM!eW 6pQ2@lo,Gਨh|; s /Sh%E%\Oܩ!95(%aiAUxwƹK9K'&If陉iwp<&=8TA7UV5㿰XTBS^.ZVu> w#7OR dCMGyGh[#tPnRL̈ؐޯkML:gө&`K*"$if5.[{ -kw"x}t,&6ђ=Xp%.&дWSY]L2p,hNo":S'<3"$XaY6lGt\\҃JnTh#MT#ȁ 0QD<W%o9.e$0K^L̹jzx,"z;q_!&qo17+3R,IJD;e$;XMĠgmEjWX%>j9{)z5 Ut!wkSۨ7מYF7HnA^%Y"";+7P~}Bn *YTpv2b~uѐNordJّ*|GEEţk_%<8crVRCj˶WSLGD1t]ZfR,ݸ'*3= !ždr%'In1q!A$ȶk֚M90"]u8J*]rZ$Rr҅zi7Qg1Ҿ5@P fQ\ O#25Q cbESdO&DDG9ɡnJ]TcYbL.uQ GO?Y'H*܀-#v&{|88([3qwiadIȪv)%KNxmD^fo缂qבIgС;-B5wgDX aU[]th&̇|N4EݤEXQwY>;uݷ7 iqYSdU%$E y}WV[R"JtÔK4l*jx JpTT|R?]|0\vd{DF/hZ6Gq|M$&O9}Mg'rvf+CbU -ym}Zs1!7\'2>_@rDUXA1*poXmmN|¶[ ΦX[V3R@rޚ-~dAIqwBvXf`Kdf|*9tqMDmL%Z?ZB`yC{=ssAxਨXn :;'~-uO_$/ 1:Tl/J2c5.`M6= K(ߌC{DۿUumTYxOd\FNB¢YH9PwG00FwJ_HGyK":7 &3ϻ8$C΃6}J\0#Ef^\V1&Zev= YvΕ>{s?UIuVr3kY]iS<|=ނC%΋SdIਨxTcSr_~!\>CɈ"$X^.L^}~F<^)mz̉Q"B[̂놝d)8Yvw/z#-&]ҁ: 6ANgyexheCn١G|Nĵ5;&ya[xih 8% ̲BvI(Ib,ѡo }J'`Nv{6) %X㦽 ŵ, BB[ P |?ri5!kBA3ƌIHŒ1EJ ە%ܙ-H"*?:z[ fwSEK:b$D%:Ƅ3e|B7:/cW*Eowɍe;%w^>|O#HJ䌠9QX ERdyc(I^ExҮDGSRkUCmʸ)U,awP_a#[Gp|MJpTT|bx&5@/<%,"_DPGM -gpTHnJJ짼ft A91p"c$9iɄ6"%f2AזhGα;mnuD"27[<-MHEERs|Y< ~B\ vI*ѢdѿYӟnPn,fҖ͂ik`Ifd-ϊ&_9bcjlEPd0m4ܩ1ғA^0ѧe]Ef%3!o㽎%G<ңdW!\Hu*gHtdWT,ϴHp:T|mIe<'^38_G7/$˴-;z[[ .Z'xo)Y`%oSlcmタvg5=@/gR dQw<ꋯ<]Ct* 6eH.:!aPe+m2j[>y҉Q+'ѝS*TiD]< }p'#ʱ Zܝށw߁1fz]cZOd02 &;  CXWlCwܚDT[l`^52Q욑Qk+sqc y ~B1p+B޴KKq#FQr$rRPi}wo4K2r9}yr]3T> /1 HkO/(C3'EHkr&6;`iŅ)ߚB뒵:%zPvVnic ǹ?ݭ3EFh6q_75klD`ġd/@k GtdG,'0|I%ёFST ,Ö] 4$f RYy~ 7*QQIB1Z$+d:-Vk5WmܺqDb^Nys@cs4MB "0^!86r5IJ8:KhO͌㙕1WBj@Q7ZX$;|y9j FDpKAW#麗t3w/|C4 JRv/)|o1X3w&n n6Z"ر`l_42 +۰~\#K}έĈx컧XTȀ9PLyayhN,|;t; j{|#e" dkg!Ëlgk7oH7z [dL˰~HkM@ ve1ZxҎ)+t>MFRC\]%̥ ^PrI.lY߿7{ܝM^F8aN:eNR+A۩ Żv#ߝIB&oc*eݓ`*)=iNr~̄*x|DJǴO$B$"c&JddGce̻m  U;_CmK.MVDr ';]RE#R?N׌7ssX';Fq|[fliռm^RrMDLӾyBCލ[ⅰ YBpc-k ,f t:|tFn+QJP-r&5xDd喵,I!=OGE'|7p(j@ ce0Eqr%I/%Pir#N$f%Ha3&2]U ZQ9Qt! 5WT¢A9(3_.<ĥIuPDe- Yl۹$%{cdwh̋ IKvD"AI k*m)}&]f"[N'TM6(qRaIRY=ȅ/G < JpTTT{N=6d}`uQ*d}i k }xb\KbEH젪2vNU; %S&Hϊ'_7a6mDA0/&hZ .зY#8***{?Ѝ1 \^PFPMT^ <_?䖌@&F|G'_c 69hG]O\ ~!Kz6Rƍ7S.>M/ m+]d?.:6#_tIqB.$ NҨzu"m9bAJ,{/ad Ȍ9E*u39tw 'E:RK_&ȸoI眨GEŧǫ99cgP$Lr9P):6Gt?YL|x_ajAf ,v401bbnmm鹁'd`8U^bf#f|cw3Ð6OЮ8)^nhMȘߜ2w+cAixov7pwzU>% Ɨkg/KL.)˝f_VkȳI11Px3$6i&,MVwq"-: ʝQF,DwoIzjਨtDGdE}I3M̰,% !>D Qqte ut"I3l7N!Iѿf.X4%ӳWWyRg=׭GxL% "}ynز1?_О"/*.-;PdAܝ$v*$dF( ZVj [R1u1|K0;%$;g [`S]#WքF[ZD'.#nh ;cGcmڒ=Ţ,{t˜hhHėIIM|)#GWnqJ"#D'GAf or{/[zh;43WyVd^]x̒.`y}h\_ww ;X/!{}qq^X'eXa^@ x ' #&Q5ָ*P.M1*TQukӊKG$-t%Z.-OS<guz][r𔶇GE'7\UE+r+:9Q$=Ml?Ǔed%^ {O`'|̄>tq6@L@=@"|G)FxXLv3|r }>F}}cYr^8L8⨈6:3p2b@%8***007jCPpA2n4GY`A} ȓ8,RfS5Aϓ7Do(76Tw^iɟKwwVEQ4/@R̖߷~tIxxLJh.PEE93C')FoTQ$A6+z\:`{b&b5#١A@\k8>t1Z­D \QAp!H:a53.3ʙlD|E-iyZN^Qы҂޼]_pC&=쫐_Mz# ?gܶZ,Vt:h;Q3r퓿mgeE4z#^ Kޝ"dq |fQnRO&.o`ےv>/󸊎((BU!߾~z F*QQQoxk ИL7Rc/,(]L$BLx}^57 i,63\7GrL(@iTm/xauNl$Iz)dx`ʷ=Cw IDATDt.-u]{ :hxe oS?MWObm "%2]-$uFĆ1Dӷ(züL]X]"*Du^QiItp'L6Q1lzr2_g6 hd-_ [YvG%8***xuc993<#mGLJwT[Ǐ-c9A%ܡ_u=H5:^ 5Q;Y2_'C &Y1p|3,HDywKt`woF-L;^* b×bDupm?p@N}.ݸ#rL{ƒg7)eaDųѱu] Fot a?*(QFPJ%,pw:d㖉쓙З 5V2zd*B6(V' ]'O5z#|fz^p0p;4v9;Pcݩ-L|uK BSɄB" 2Ȉ-kD^j~M$L=ԛ]TRŖ4M l3\*4>Di=KtdzS-bKiI1pn@ z^Odx͸W$@Aڈ݄*B >U닥*;" $d&4(=3&.@ձlXTb$J*.7LIJ3TTb7_| ~o}X&"14lTx{#(^Ŏ~EEqpMWtIHEp &D 'cnL;]Eε55=]mCਨ 2EmWfr.z 7Gqd8̂-f.1ǏrNhlZb3M]1X906$dq~9D%!4ٓxx_iZXUz$GS*x4,x1#:89RFJve0a&<y0;eЎ'qEt I5Yid쐃q4MtG#Ct')݉UffeBj,<]Z6 je3r@%8***F|M 6PSI3xKtZG^$;7O3D ON}}/bcYMDHKY9ONix&Zh9@KDx qSDGṇ?f=0!;]3QHXZWm#Y*Ϟ!A!)p"-qayFo`MFFq;[B]r݌$ &Ko&zsȒE{r@%8*** A㐀١{SXdILF~tl4K0YRS蠪|{=+i+ OCQhC$C"Ѥ%#nq% NKvؿ.qt/`&?&z-]'#=1Mx`$d2?ƽ^DۭҶ/x=;w"zt5OXpω8Q1Bi Q[R*H˖l?RO9 Hm9hN_(g3|'cPSN0 P U ks,(LhyTt\"vڒBIS +H6ĠD=(;DZ䢁Eo؋̌5bWn;욙x"nKLp'96+E,T|&Ԝ0ڦEKVJeRCn:m 9:HNu/wwH L.mt!q3Sf)MΘdÑetbtP`~j~cfL^x8O P4%2*QQQ17u&圪 v]!A~A{:J~GW{ }אS`'Ӷo)0FSm*|x{dGض.H|ߤi hF:a L0V4>n) w_u$K)t x.XhƯ֦5B<~mX߁EqOɫ`B!9my }``": ;1$#>! btp ~ D֨ތ['>svHEΣTRԣ7*QQQ͛aDrx;Xprj6_ /2_nΖ%N@,-%j>oy$'TV z0'uK7Q_غZ%X ria^MU۷{"t4BWӡp;Hz9cBM37S@vz3qV{y Tp!l"q` <9vu$H#{iN3`EmF1-:pz}HX iWx4/, #௭L v_}NiĽVg3Q^P2@g52X3$5ʺinFz:[@SO0 P oxOОPZ/X Wa :}!z6jѝ#(&!Ϛ\y,հ%IylĒԼߗ`}Phr|gGHbNIÈ/1 J0BE %%L:b ۴;2 &=DV|dH?Y}]츲"D+T5&E'Q=TXE)KF*4"^t͜S_cn8Pd#ղ7KPzcƮT"7/O?G`>E LXN+)4Q}cz@ z瞉ozDl44M3K%bN̼4g.sR 2𐾋5]ǟcx8 -`g#9"0.z_L[C?o2S%TR8_<{owyO+φ{ґOuoϞفöЫD =.ʔTWh<7.9p: u;-<{<"n>s,GQ[ 5 d1,qI(YwooU5:qk?^d {+>~y,n%=4# :E&H3mʺ65` ɉ` ^'Lj#?ay ᳈@{ hP["q1Ç`]#I/UI2[U=>V3OЏ[I=;Ld=Dx2[׎vp 8nL?߮9S| GbZ{R鷴]1}byeSp" r^ ;F pN 6c<J!\D8Q$+`XEw9@CF~2X@vj2$zهȠ} ~ E+G˲2y3ģ4Օ;1YtwGEǯ%|('A)Bذ2# 3xQe WB凧51бS&qM˜[Ѫ^kmJ~S1![:z&|2mІà<ժMkw0$`D]A],h`GHNOɪȌ%1+!dʷ(K$[Bla mAKTn?Z, F5a?zCzዥ`3{݉6S= no` Ӫ.GdPnz /_zC*bN )j9o*(VRm\YI#2іj(C;3 4=uwA7~c x } ެ7Yݡ *Irc Bp&"QU22Ga̫ZU~;n]:Ȯ}tDv 0 6cµf(@1$&4 $Y?E(v(̕)jrQ$c1r,BgU&mjcFwJI]mBU\`_Gr =ѡC>} RՂ^2A@()< [ th]o@wk'M0lַsyOOC<ę|Qy:=4fR5 P^ ]iK4F(9hj 4ĄHvO_ SPt*wĵFedܺ(߮J":`]P KgMEJ3p1kdmJ:rw\6Þ%f!.tD5!{<9+IXW&m^ʠ"4 n,+'G8;1b7F ,X)=ѡC.:^0Kʟ]4{ oJ!!'cPRV7ۆ CSmع~<r|a { :FhYE$t)_СH*٬"OyH !U ڝyx9nE:(~=f:~¸.0+L9xΌ>L:6g{{Dq]7 2 @|E0XCTo(nY:A^z18Dv9ƄD7<@]xK_n_ zh[hZA2vƖF9z؟ճ!esQX~/,zR5ݼҢk\_!4O,]\o+ܣ- m7zC|S'C/4к+k}9'轒aځH‘2<薞ֶM>aOM L4/,6oQ^wZ 2V_'_Drt*=us剩7[Zk=ƃ܊7;6\I|!hVn sX0R˸.xe^/?/wnie e]|ބiC3Ѹ9أ#ޭXow(qPq-U"fpvsXMpD"[fO6a |<<=J)mlUBr1@/'i:t`Sڼ- K8Ԩ-GU }²` 0a4Dk[=PJ|x* cGx+h$;< y\kqtFM*\K`8/s65܉5N{RB\husv՞h]BstYݟLfWӗ CſOJd[zgkH*!uv%} !_D҇g6[GyơGAdAt5y)+kc ~(] FzCLF`:#ٝ/~*Cipl 4LBϹ|'pgC Nn=w"e 0C|I5e2m!wȣ* Us(F ۛ9,4QN)Gꫤb_.2%ݴ+y43A0zlNRGFQ|ZpMd1}P ձۭ%u&TZ?o)ܯCGaG@}c,]s}Fl$5 r$U"Jȣ *5EM0oҮ ?92n$Ѥ =ѡCß/%^,W|'ϫf.µ\ƒx/IlTk&G]F<&sc󒘹=R4)y t0ͻ9|#1<[^2@opME]'nEu,yؿ/iX ^LeQ8_@G<[+OvvܼH'^ ~tJt ^Qbq,w3H/EtKbOǟ&"a^q@pt!߮`&FV7{ ?gh@3?6-,GÂ(ҴI 4}y6wn^^Y1وOA>L 4*wʫlꑕPqѡߙ! B P=sf,ȁj PD@V `]A 8‰a5g4??*)0TA +bM.A\hၺžKޮ)[6c[ESR'H0v#3HHdbDB4 Si7 vMloGOB/I>Z-7/99&uLE/{x`z3:ݫ !?xVuƁB5tiv]FNn5N ZgYڎdvM C0K[0eXs;[h8lnuEA IDAT6r qJbV*Di/:m\7ݶ0Ef5hnSg Pv0ح$Wd#>T%y&FEDxRK9Y&zf g r&{S?=MurMwp@ptС ϴ,cQm{#MꗾL߯ZB4 =$~&d!f4ͼӑm%sP3]>5 pϔAWm`N7LH6[`DO![dfdpNmӊ26MZHHudţ튟? ݞliƌ(c6~뜻9~Yp2HRp ^8ڼlv(L*)ӢO9uxƎ)M+ͻ"ڹeʉ?@9T.mԜVAT 0Lx ejBK7upm\:$ӷhQOQGudw]Ë}~_ ixM"eˆAN]ۛ8]sA~xRuo d@]xjx@Y1[BǣfCF|,aSDP@e^_BN1I+dyt4ټpKn]ɵ-jw\.ײMLFE#p.i kqlϏEh #ʗ Uc@9 +mFn)7@Gr92:t3|c[#K+թێI뺔 oAMȷskjN.m5`so'Ѵ!5vPfgngFy %pp~DșU i1@;8}EC:K)"Rk)7)@ptСWU :(Xmhf[h5))lVT)fKS^r޻³e#Mcd>vkxi<}YAM@~Cʓ9AtZdAWm6WCaK'fjmy"DRa:2#(whMs7jq}L`apɱv.Y)5yjJYOihA#OC`W(IǪR5MJ=ѡCI'Ύo)n7L:V M-K#?j(LBP[M0dUv(#Q;w ta .,4>r){!9af;Tv*E{xp6F_~.v6.lauvاӇxUDxyx`DgU&!rր6Eljca_q>2zHҷ|?lW"Ҩ#^Ƥf~xp"(D0sswvJq{Sj|PAMjn6Ujg#q\fs!h_\,~}_&pr95б~":}2#6datdt;"yD,&a>E~Fφb;b3sk H撈QIޭ.l DM rzŧiV~ڍfzIЯ 9vR4Sx&=:th%ʘi 5/B72d;<$E -{,aڑa޿x4٬6Ym OgGI/akAX T_G]?2C{MS3d yI-_og(7SXxSmb&RApwh(mF~uW7Ȫ+t uQɎӞ"A֗p9QlI՞!ŗwsF ?+0+@HJ d)Ba[&NVDq+ͼNc  91zfDȌ[I\Zs'ŵBiFnl)=ѡCF?iҪtG| j-@!h)[dPr_FYSw4h2^?G#-lV&\x#EUS m/?% a{ѱr~ }#䯬#mkJ^?0լZ#1xGxP7 'S7Kn@ygveK'\М l(EcUij45ُj^FaPtIJdȩLO#=a N:*o2 ' ]CΖ4$KaJ\mOto3_캯$I8:t VH(`-c >8GLCx#+ mfqy ft: Bh$E!:#ĵqܨ3.(^ffK+tzrh|S8$U'.e΁ 챩@? @f?|;qƔ6M)%o=%C;BI/GCۥp)~p :th~T_4-b U~i+KZ?۵qY˚MI+?6_[<+|E$K0vo8dj[Q@](Ai δ68ƼKơoGӃ>NL) |.h%+Б_0+< ꈬv}+NO yi32ّtsL5Uv"dt&*`$| 9/3-$A;RRo)H Ft~}Gupɖ¹va}:ժPCs^s88 Q'j,. B71 Fg 9Ui9w /(%4Dh!~l>舮|M ~߽1Cpta|6x c`kҷ;5Ů l֛ \pЎq ^Qv[!n <Wb'VU]_ .`msKZ;`G?OV tnE]KF3JJmp|Qvr &+V oAi ooܙѠL*k*oFks2P&oPA !,dDuvJZ {K6˵ᅠ?HJC3сC [ϟWtl<uW'c GjA4&#P7gBܚ;;(бri =ѡCۏS7d_ jS[U4v0cCѬo9am q T^ Зɬ2KL# Ae۟C,<. lDMD[ڂ8ju ;OIɳLŮ&EE4_W*2( tvQ3UEb]sFKJQo>rϙ)ichč?qUA?B8:t>}3S9|1(]m 4jm-Ol R'eirNa)-H@ƵA߽A8:t>[qloXFܷ$ &Rb:n2`Hz*|8>)an8 9܋00_JFsHyfey#0Lcphf~sʠ> x>:Kys<`A^T:F1̍&٭v"FbRoJe.gN̜‰@c%jnVRGO y`nvt A-(f&TGM.*ֆd1é eךޑ|$\Њoᠵ;gApP:\)p~/zҠwPp)#_e]1ŎNnV13i 4<z v dyNȔ̱D5` qG@a}T( 4pVP/majrI)4VwEh-õy lPH.ܣ21Iu>VE vχ!\[1ۈKҕXXV^#<$5 2 pVE#6HD e_ d1ïۻABG-)i 2t!$hyAˣᇿS8G.M'FA=av8B#D1lVIG+dPLc-u3)I!g7l4y%2TeO (hFDফvN1}_Go0ڭ,ۛWOP-d7AҐq4|$@4эضy˝ҟS%;$,l Zwĭsldgk Atv7lgG+J'.&$ tH=5A i˼#ZKN#:?գJsmCJUȷ,g֖&A62zc ϣ%i߽!8:tpŅ^^}10i83iAa;YGGJWp,xUWvwT8ۛF7"^*s vd snWk~|S+ ++(|fsBHw CTmV#Ji2u\B@=&߁I"xi]1pmED6x@v9 ќPݭw,0T{Nu׍7s{Oq,Kp<+/xIHQ8$G.1ҁȹ"K DvkŭEvdL /רjk y#hρ>Ҧho  2ES4-qED2HBu r$Ư%o4r%wsMKܧh7_C\ޭmaz)qJ*Y4sC1/4?@fŻ:2`g{`ԕtt _X\J*jt)Ck0Zutvn=]gսk ):G.lwz$]z'Erl\Y.zmtx9&(`2 (>ᤣjWNJo98DZ5'bFC /@y S^a,Z6C{z -~lʀ+Oq=58Gt<7PTFBԣu P Yx+ ӘhTN ld=n%qK*Y*mpNN1gɑwqFxJHˤWkd! y( }=ѡCo>Ҡ0#-ɗ@,DwFtE|ގ +"! J>cxIGqͧT/ebKQxUACӼc kbJ  lCkPO'[.:k-uE(K+0 bi9_ qEHziOcq LN6B_0/]"d ǡJ4?`rp>9R$E[W|=,?M6ur9{|~-m=9:: xXAu_ Z]$٤8t:\~ 2O&Er`t ䷇lXN8f&>`H!4IF۱##K1_D %P IDAT]cA%RρBQ߲Hz$ ~ψpޏ;lbÀizZ]ve,g&u+F#4.3| kD޸ׄ@~<ņСUO'Q&.YJl7A6 X+&~ʠR #yՖ:=tzMZ-i3,7[׬?gΰ󄎓Eޮ$Yo㱠g`d0Qe<=CmnbR9Fw;YVi-:Ϳ;QMB R)-]GQOT{ 5*yd+Jf;T:|`5{GHNv2*FL˺# r(uT{u4 vix!z%)5iUn R!:3XF׀{ÆС7e!W=Z> -vd+װrf[MѬԒdhJ)":OnWM"O谬  W_P6G7wR1DAqxn!Q+qa΃i=H,ݎZnSƤN7z?P>|ur\&U/RS@s4Du;ܞ\hCoY1E29.f}җNn=pA31;+N {éf⮜-8@2Pvxo,BU3O@K-TA8l:\ >vĉZ)$WrRu Rn`ÙOyRi9S|U͎ I\/O* 4G pU oKsׁ@G-7O.Cl\J nAJ8JFzD=6`F}y&rX|%> ۰u@=rf P j.@~4L1)uZ`jџ2~ B]F[*FSIi)Fb<ԱYy)fHg&h"S|:\ >}I@2Ɖƿ[x9>F<'-^+덿B.Ho8U cӶiѷW S7炵m[tw=/A:ƀ=pp:<:ZZ_,DIcy:2y]8FpjNQbK'?]Q֨"ihs)\prH8l-F b!m(; i<ޥ~`^5xY7 @VC tqּ7o^;=B!ďG+CW&z,d{s_.MYzdO*]@57|:\.pT2) 庁Nn3FkN0ڨE {CgB;wd鵭`Њ̑\пs:?O?#R#Iv=Xw ϙ _8'z P dz&r1̶kƌ@yKvf\4((I+E}O2OtMvKCpw{t%OOI:vpZDW=%Xzŕ;c>G WL D0iHpPMǵ s QW!$i/QB&K#RCs+14\% 2xlӜކ/JbݮRc]Cz%TLq/5XXJ)pnu@M*=v(HZr?,X來o!sɋ&M@RNkh a+_Of?;lo?((vSZbKF9: BC.Pn=ȟ r]vp- ܏Aj0֫#P0)E-zCWO| v@Ǔ`C}8/L؏EsZ?IX=p0p|:;mt=&ǫfkOø |؞KϘv(ȡggRE 5/vΜa@ѳ_|:܂nY|7 $3Q6U=x@`d1R4JS$BoHs~@۰(GNg)c.L, sTT^Zt{KvQڼ87 ⫃#C%{jGS.įHIq^$\ر/ܵ^P@5fdQxA;s; 5_&jmcM=qlve{I- q.|$t,,뼌7nPX ;6ӓw ! yAnI3VK?[% xz$Z<蛹(BMfyMɄö*ۡPwJLHũ-=7O9xlTG`˦ dM)m:o$\@Sb:\>3鯺cu[MFՄ^;|e,B7H"ގ@!Te|d0,!bٮѱ 1O?g8O`WHR.0pFg4nm'vs-ln7T? ?V+K=}r1U,Շ :ݟTF1p@3`OtLxc^.p._P0Qcvb͞_ϱ9P[ìj r8X l.L40[z}kQSr:tx4,4S! J7saV@"bK$dRٕGvz=j ܮp^%Ő&xF0V0d[JyyWlGπ;< 3~syDs"ۦVLUFO?Ѵ!j7=v{*akDؑL[>St"P8|޳w; K>ǩn8kkdjSK/7`nUx ؟w~K6_7n[B4}U__p/)9: |]u;h|'Lt;}[ d8ܥ!A)Xoh v,*YXS &V;؟p8pL;7\5Tݤ&bЉria5i#ZE̹\D=xcWm9 +[lkGDaL POg`V7L@}W˔. 9OCpt? :$fAܯB2%(=xɋJDUh\ˉNQݷbtևYGh{QqW!LS:tx3ab>QrR.snnɹH~iŸ_?[㿹J6vH욄Q _d>6~|~ϧӌDx zZ %F+CC6lJz ^M1K4|dA!BH.r(c?rC>ϝ)\=m tyYy7 n\h> hJ87Jo8ЮtMs=U<1rtɹ\]ХA*uCc=65W$A{DϏ&پ-4oyk;;~ЯxJzCo 38AҘtM3”j#2cD|*7NNzPk #cqnG!Oyi|o,rYLIJ"ͭZ^_V)TooQ,^F~; 8~KXl;TBW91>OػCrm=.aqN1L'G-sc#sWHA+ ]괉r uyDa‹P )- rƘN3C}?R盭"LK蛉iwWoD a cp}x9>$<*Ws^)u-=Lf1"G2n,KW պ• QlTّlz<~< zCo 7.w>EY]'y5\fΌ/Xױ:[*}9eConUjrۛ)ҀeϤP(o=(iaFmTb*o( N8*U/~/r)M3;?W)V#<dPೱ*w6aDG#"6NnINїz>ژEw˱aMJ\9( Ej: RavQ2H"؎ϳR8 e&yKuC;%! }FgE?:nH␉Naؽ60v_+O "M)m:txso.#1F[sq6 loshGyQjp$_u0H; Tz8}h+l V:~<y(SNuܙt),0N^5)Fc+QJc3H5ud9hcgf1uD/ck`I=jV#n;ZTUCXv;E`+c*J/Vؓn6<ʺCKT#X>wPƺr_G鶩Pww\kG?=ѡC5(A qi^6hAKk:W\>YvCNs&6u]mw{A l`UG 9# _(?Q) ڑƈZag^9jr 6cm>jNBPrʈg_ɜR986 ,;RᔽE/pqkLSתu),2Y㵾Bmid3v SVu⦑E>凧'y[հ1ruZ"+?5pn gmZ8Qbʿ)}ήP)M/kN<`cُCpto>NJH{/Zn%TZ!ʵaW9HCka'rWyspdL" e%X)c:;I zz6RHdʱz5)~u,a;awԮlx: ЃQs 7Rb\Rٮo֓b5.uss;~RgG nvή}Й wqO'G^xR{ѿH2PB_67} a~'i:c2Gy:F!u/tbLQyz_ya u㠆# hh~ Ë6ZyA$TޥE3&p=q$a"Y2GX&娭 N.ڤkun|#8%3SAptD_wA`a0-8?G*uބTQ5>Q~ʌa8HLm3ޞx2:|59Srk.޼o :4-ՠuT$u2YS4;}k]߬,78m0Ǘ#jގt{۳}ví*~[:`F|qԮ$Ƨ_5[W^`;r"pTUM@b'YtsMNS+&C{6?⡾YSO 7MCϖpr-82t])4T,wj(j-iXO>)QɯwqO{MLS5f1WYC2Iͻ7x+-]?zC_O_0w뼜Jm*>^X>ŎBc'e15 IDATfV9;̰I=p5?T4P##5f u?X]4ᢡa>e\ne9#P lW[Cf5^U/8FC]v/ sHϮt2<n$aLJ]d;@ ejqq@?C-pYbD TT(f QOؓwYD(/.19P,IK<ɈIXB876%i=3]i26g냉"+(!]$ & pg:$dm^];̴^#P"x ڗ]S"͘_ P#eVSD#9WA܆箎%cb<*Η%a5}@e~n(8p蜝1,W.|f>:D?h:̬Jl9;,\G~ˬ ?͉)8m2As$Abn%VVY$ kOzC_>37i_Ax7Zt[@vN WR/Ţ{EYi_g5ڸWJ 1vjˌ|5hc? Lx m=tz('8aV YĄC9&;f+M"a^cY"3խ\tttX>QI_FSߺ#Uه<1k,@ckeeXJ#Yd ZuQ/EpRJB3WOR3V?1Dc;N*Wޝ2|__iU0ZBqj'oOc:ijs[xZc0l2ּ 5Nr$Eo .?GÙp^uV4v h%cRHaˡY\Ut"Bq/#+iۘQ%S9A~=e:t0]4|M x28lYԤÕ @?gi$˾ی?71Ae7};y8|6(IQۉs;]0\8%*ۻA2iMh\J:{X&2n)QJ6>Kڨ*vE#TG(]JT2ƚ".85Eǘoo9TEfGncuX/ښA=B_.Ha)UTnqrE#?RVX (wm<::,?ut뵎a&p8Қc㒜fNS[VP R` ;(0;+"#}Etݡ3">ɤ̘0: UgeG[N'ʊP?CrT.{%n +.AClg-rNҢH21q5^VѴ6؅,=zxNEe o7~ŤځbXm@Mmb"^Es׸E/p;o,F~, x1KRx5-kc8]QX z瀚>79ś!qnU*|C5lo [몥Y_6rڷ>Bҡs0]rt-~)5  b$ ׿hg9WXe>S\\Arz_ҦxizE icW^y整K-nݏ\=ѡC >gxmCjGD{fjaW-C4<" ο1c|ȯcAl(뛕p9.M,pA |JcpA0;ʊ:pKu%5U$}]"9?kUH{ӒlAʵ0OPiᲈҊor '-SB)b`h Z2*B`շ4\4a[JeGCѦz[+Ò6ڸjV-)Cɇ,k仄$M21‰$v~ w:tX{/T'((<X7ct94:,E^TsS@|vhz Nuղf$MƄ0ֶ2=p_A\3 eKz3Hoootz}~+Dq|y.hܯ5Ӝ>xd"f`9pLi*4SfʢM=gf&#hLqL:X%"/^QmFWrޘv=f#k:vm$"N\j[䢵j?<=,^;;(K.+ܛ7m?r:Psq^Rc[~N?)qi]l93:֐XL8ʜfF[-'y)PM8U#4f`L駨Lg t('\%p>C. o9A+kR7s]o z@G)x ۛ %TCMO֔ 2ܸ,*VנT}F`0|Ek\/O_ 3$ߩtYn=[^`֙W9YIֻӛh17VYHS R^ efXfOGg{:tYA p\ "P.K Z!B$W{URP8EaϪq-@fk Ԗe?8!|8f1/ U2t>I8)>f1)sR#:y}J>ZH єd(`nsxUffĝ.7g(h*_{|`Ov=q[SrPe[W|4KtֈprYٲ:( f~,D?(zQahb)2\!Jգ_X(eQ9gmxMj{!qEb ԫ]@_PO&G~v#1]ǁ 4;9<2X}aGrcI Ef{.4>LH{ Je+XTj kIHxX,}5ٙ?"GۡR)ݮ5@yWy4b B:C88vջijdcAJټtHGfwVIGW3]1l菢)n/z5ܸc^RpE(%.ll%(y:RF~`d U_cc:.Ձpa6۝$ "xdD%QWcHDFi;a"Gvt JCИRp>'ِsGMKeiN@'Ck-tɆBhQ+_d4qˌlEPzkPkTpj(P +N_ Р3)`KR#߸^Uplz9,c֗E)߁"}ҝ =v2eO"G~vͧyKnG2Omvs9?tF}q]wHQհ~rdM̆I&ʳy Cb9C 5.c*&3&i.GW?g,QZ{mHufZ?5u=Unѹd-"m` ugüA+m. ҁCptuGM؈! \˩A];x%ޑHƍ×#;*7U?㨻 VuYRouӗ9Q?!n3?208:`z^eMX;_)2D@t-, hƞ,Y,g1ܰuZD- yXrp|92^ ^ LUysxЮ̀NˆUa5 UD&5t= zkS+.z~%:to^4[P :>eTbё aM3^9~UQ3Kf Yʴ|($ /aXu R$K᠍`:wH~o{b9%E^*-(}Ft5m||ES@pɶgZZƯ(_6٨p>Elfpc[=CچoEO"+,G6WRr2;y)Tm%csw)t8V)0vAA`b[@y{%L: N@?r}:b^c}z$+c; &(419 Ar֣?9զ,_8!R?Ayb6Wd~-5)a}ҚkNLyE`(uܵq(W.Eq8=*fc;p ܠqSi^H$t&<;w{p%ȫR8XIF.Sej~J 8&p߉FJFl 4(,P6yAu ޸b~]?rm:X\+c_"X%C-IhL'~ڹˆaSTү7 ӗ%ZuG n *m fzVNi~$49R/4[1#- h/Cޠ>/ǰNy (NhSEe>U, yu).8r|9*c ׇ)!xLRdՉzQOI2<Y_^גAO9w-w.LzC(ս|QUY- .m,`Brh,'-lNŅY0 g+#a&?͸Ǖ֍`EYj1IF9 TJ2:Oq0UD*W9.uw)34 ȳм$SLK+2Dz-Md1u%wvz7~4 FW(N).ѻDEqˑ(*s99м5-vaȩ P8ܵdk-9 GXt1@?6:t<~^'8Z?Gy8ԝ%s nR;9N[vhSN1\{Gw`gfO($7}1Pv@yE[ Һ[Pi7]. s݀]llb m" qM(eL.*i'4ZH-7&i XLՅˊRVK0ezԒ;o~scSBp G~q0SQ_aA_"\/V 1,P )m) On2qz9);+B1kx^Q )IXV47/@)t/Q(NW1!#O@ LL̺k ./+$$ݍ ` ar%0|sE"3E~ ^fGge-ֻQ@f8P!TE悪܃Xs&)g SajC4QHjmr t?<7i@@M񔷃С/>)> kv / UOS/^Nd=<2l8I/ue!`Yh!?Rȏ)hs4-Bp!B _ɳYaG!q>TǦ.DE|v|Jq@G38w3)%g0~6gxzLȖ^~&{AM?iE7DUrjRegҥcloCm80i'L:UQu&PP/{_148kl,+@ׇ'w=:t۴{\:jz^r85޶̤LQrِB陣UnI)5?t7~ #w[ 8Bs|9tT%cSdB.Xݠ1)e BHs&?#J$ y͆1)[C Lf)bPz7~a^ N+32Jt7ϟ[ZRcO7h`Oh+?)9'-iE-jhqvzp,璆W\=:t§o>Mo^oix! CB'nLV+$Ah53Hx{>]?Tހcκ}87J .=X)N(BtS17lFYr}c9=ZnNkyXCN2 k@.%>ѪUV u"BQYQf_Kj_Еs+z;UsX*rԹθɒyqm^?*cG,]hMоޭH?zX <]y%.D=qQwX~%::tEC譓|+E/N}3:C,͚9$MrΌ(O_N`Wfz^F5C:<"^@YP龃J[. oKiYud֊t/3:fW y%U5pj}kF IDAT:-נVw ZF6h訆tX^OG4ѸH̺AzrTX1HmvK3UL OE4@1*}G^*LK}+u~wUD`Cpt w}, +i#,|b_kBːBE}?a gnRDɨ| `z'[Há b(,ypHԎws ;03'aA.BP r95|V\yJsݍJuěҧ6 IjJ Ux'O~4D D-S7h>T]ܜ]rp) Sߍy? +udD8@mXt@߽:tEço>sKg J7tMZ}̔;8<鄯4 +FF( p\>.OK믣a,B@;*_LZOzW~?c:al!tep;u3ws yρy8[GM2ߴlpU|-Bok|%A O :Ћ{*eY/F#YfA,B ~yPbuڸ2P+EPԯR=ZtazС/>iA}1,x1]rT.&Ey9dhm~ci^ GJSx.c)ޅj SM!Ÿ4GanVHNԈecF0:3/%DS VV˳AxV鐺7>^C_MNeżX!klJǑ[Y$i&, rdTC!Ka2Ʌ|4I$O& bIzOA.&arLwg4G~O񛏴ؐxEt$*+́ &q%[XƣXk4q;ijI=GfpBMI uX]o;MJAfQ+N_JcA4 jd k>_DPޕ9p1D9 '<IrVk=BPon-.s XP LyHpw46fBd}$ 1ދBCq'WžHغ_ !C΂=ۅf&Di1˓Ƞʧ{  ח-t; X5Hݢ&/CEKN,S~=/j# k,Fnד~-:o[oN qhQ0ͷH6CԖR57Āj1l W!܌JP_;"lz-SB w`4܎~P:|eB"K' ;C5~)=9M8\/c}#Ǒ~9Q l$:zƒLo/G= , uC%8*** ;~׿L_%=+& N7b2:CFNU*2{M/n E SAiyI I TyhX-Wr-G/<ϒHcg06iD=mNgrt(Slz֋5kBrqnR^}ZqT]7{GH^cVWlul)jsb-2_v̘l>FuzDqH/QwU yK& fc*sRǃGdç3<<#N?NՒ16DK 5dlMcbIp9%g q=8jn h>8jCAȗp?q 9bSfv*sBKk\\>hxgC NFM=P_b_+S@49Q w})Wl쟃ethZ#$W@Lmͪ_6LmTFoTQ wooeq$N&kDkp~=>GghFćFMRs:|:􈄃Hjhihy/ k|=>`Le΃4mmmdUTČPzgcΩ1NKrNp 47g~0%E('>^99Mf=V}An`<]EU1d}6Ϥ~AS\7oozy#Snpcگ>Jc\./]/dhi({/GЬ+X-V|ɑ 3$G{qh`g(| ;^J[y/htl41#/o ;(dgPLHR(xJ">RXyU*mzl9նp+`tW CȌ0E8#$..yP wr۽\$f=/9Ԏ( g\&!^v1$4Zuw+,9 qw5/^2%[OGgiD& Hv4-qddGB!Ơ_Tj;IcOPԱZ,FqP!9X{%9quy_[SS_OYPZ]Y }$G!;r,+S|W 9Ǜe?cm F1|fƣ'zu:k㌭{Ez, yd-!;^ 㨞x(.[x@gA%8***5We_).:pwϮ&^rmDOl%Έt?%'4BZd W7+nKDv4g4ԈtT/IuDr ~P@FZ$44Ej$9@7FsL23贕jsKH$}"_Q#Z"__"9|Sy/PHt˻"kPJyɳ l0a]H>?1􏽿NOCSR)ਨx׸[WLcEGì\Wzjm S]jkpXΏv wi N$ztr;0=O<_"~L LjHص$HZf8XPy6 avjZ]Ehה9Z]IRH"9&<'r{*fW66^%SWHX_?zYنQBz9}kb,({θ*+ 'Nuk|Nmʠ50۴..9Q wqX&,/D=OSiuf'SNI F@ Uا55l=|!b5aQۙJ@䠗%6t1Lr`YhhR2T氟곉8cw4} J(ēyH t'}H(a0eIjVFLWM&ߍbiDZβB]I/CyxiDqwl8*QQQ8Tb{2כ6m^9~kB@KEz&Fi<`dƁ"1pɇF}e7HHn6;iϐM1=U\eE(GG0 :HyHG|h^hrtx8~ArV J U_Y/.a$|(*<##{&`XW=!_@Px롥^Z鷱MCbfkmGEEۿ_nֱ pw4AfH:Ika/^rK5aoJwIOՈ8 wbϰ? eQ(aDse 3@ ('h>kYx\|]ym8Br p^x\fXqFP- vm axxRT; Dp:yr _Lώ+~HvuU ۮRE%8***~{~;dnf rvwn]b+46m垎Oӗ4bɢvv1w@f!rK2r,ϗ# H4IӯI9 %Ss"BxH6jN1U(h9 l?fП2O Foi* b9JFޖɎHt1㉚j 90%ÃG%8***?%Χ(;X6D:!Ps-tJ~\pJmސrvx9f ȑc93#89Q#UZñ%; IOŽ* ?hf{M i#Y#Ly%FFьs5!y/ 냸ՑUM)1ܑuzV[KH vYE]&^_L GmCKP|~T͇whW:I*ufw/COrOGa[Y7^vR4Gm ʩ {FBTBӐ- SZCO`a\R|GNZ 7 $ 7iNE^;G[YYk9IEoz_feNI&tVdz]30z.G_$ⴷ׳DzΖ+Shhf豶=նuqѷJpTTT|Q7,2#&x9m-N!4Up *֚mk\. b!l+9J٠IY)*Ƣ/i;$h㣸cv?9'Ct@4ŐDt@p* -6J;ZILOZ%.oR{O4 _$?à\\#{|"c& se$ d˜ ]l) kK;Y텺s; v5fa^%i'sbRF}np荷JpTTT|Q_f g@6 s%NxXryi)ݑ_ ]?LiB si@tNzp-* x!Et"]lcEh`w v6=A*e59 6ؿ(@ ,|$v,+;\PL~S{FvIOp ]l >''U@Hgz!"˿![0"%=虥 ʫ5=|]\m_n]pA??Rzƭ_i)/u8R R obҀ,*U&DJ %6FսY)4 k0Ɏ3Y/CvH|Ѷ!Зg$ǰJJrp4c:蝀#WV{ǥ2yɎ:a3ezȨsL^{#ّܫs7u?֞;51u\1rje8Z5=Z5uqѷJpTTT|qp]0/6` cs2d~W'C8AS=*F2lwd~1[5H7 +{23Ogy-DJpTTT|opwKP|~d{+е2Q!ʜ"G+tEGbT3by$\fM% PjMĈ<'@ԏsG $VCH翠;)A45=|<@O ^HF^uQ#_N;a".?tݣ(YNZ 6a2TbݒQGjLe{GQY"񺄇^uS h|]\m_,nm5Q5%`xIue^ASV<6eM2ɭDb2ǪA45t  1˰h @4SjvQٷ'%0vp c}%n<*29&Yhc3DY.c40yIt]eWWM7w(N"Hf02/sx[GEE0K9T@o7`ip;l-9mۤ`T"TA>BI":guh[0})iyqYôh`\B@=<Rc{"u5iIa)$q;/hb~&-vLK%VߡLphÌ+>վX|cTG E$-̲{k1B%xK IDAT8***hd8ryhT0CbAƐN,{syCG4bB(d!D X-lK?D.ғ#`zF $S\dۦfX-VHOA*Ѡ}m1/1G\Gt64&;36ڒwHnmkǜ~E2M'k]Y hh2b Tp~E %0ꥰÊ,no`yBG$RU&:OtQQB-nh E>:i$"Es4,DgCҹIOCs.J)[ō˪_.EgOǗG'- KtVkk?ھ_X~XQ\J!/N9-LS$CuzC%8***xu96 u}zH^&^rl\S$*QQQU qyYNr_#ٵt!?O><~ZFPʯ_A[F|Dç#>L( @MOI@N.=@vRNr\,W$[7MYa2L\&FsvLje5rUcJϷ{FSV5Sv}]nzaVȣ߄>yzHZxT"]xE%8*** |IbOUh,E(h;X߯8Ú|R`"&[fs8$NшޞS ே_QVU\':pAe a'( DobJ3(qwإ"%dI%$G/+Tot|NH槞Eo)zB]ǨzfQ;m5,:ӂm7ƍ|ՑzDGv>VzNB_ [E%8***Yl/RW˔r!3#H֢&lw~wǝo:L3 JBۿJ)cq]Ph5?iPMM!3x$Ҡ=\oII$GHDLqV:KN#:> -;jTn}~HodGl_xQ?eK d2:útZX荋ƿHǺƛE%8****8"&H|X~ -FV WXyHT :֒iB&a+ $W -Ě(7Wt@hBi$¤o)==1AA䠧'aG8>]q#ֱ~As- !{\}5?DqG~g yaz8Voਨp-vlJ Jg#KAX4;ɶ'8DȌ 妲 ̩yHÀ}ÎڟB!jA_Rθ<䈑"K t.Q鵧O]2c$$ugJm;(8)ro DT|M"_(a##7ҥsH8ȉV''Nɛ|F<[g⨻FomTLCQE.hw 5`vsIJOǧ t-G .j%ȍ!ڤ|<6q Zz9LC4ע9#P )-Cr'A#Ep=/ug eΉĝe6K, a3dGWU@ji$;Qa 7&F[i1WbA5|x(mQ 7ߎ/ cӁV+Fb@~ pdrۤ {4eŅF%,I$VH]o!‡,7L xI|!K+E4ivOÖ:IN0IXi*!Gݳ.̤ {ղ)k[roY 蘯·qw!C}$DkvEXX]d[\8nsS<*QQQU 8VJ^cMQA=dz^b:6=7FO9a~e~yaR:>jfiq7p*SDE"2FyROIOBl;WR%;$f&,ȉXOk;B g mdL8%>Re:ƶ({edZR}!sM/!쨎9x? Qν} GwL!<ְoਨjŃ>t^FqX/׳͈[j1%t|r+6BF>Qk$ ֐HbGl `!$}9HuQb3$`'(-%=5-<#98y5ΑVߚym0,!]S3[P-mK,ϖiYA ^<֨hEtr=g Zզ $@j|( V #8ɁbBԔU+<=NM<4rOv:,Jb=rOqp~?Wd؍~U"40/lSNg9>=Ʋ^KOdĬp~P 7G͈ $AZr8{@b(+5Mr*Ě;X(%J$0g_ϟښV(yVB#idb{+=fM)5R$XDc(P]N)[}Ο$GPr~=V>tEt]r e!-`3Qb˽vǝ}gB𲨻Tt8h/3SrJ""|Va56uEY/EIy !#4ñ_V$22YV"Qmf?(OY! GJ$9V% J^pcZ0ȩ JSG ;H&#<-O i3́(%4\fQByYQ E@uJq+1hE=ԠI^koL,J^Y8tl#T͇7&4,u.*|~T먴z>"g{9Ϲ(Frz=#gm?]nVChDmti4DtD#׾ C4S҉'j۴acu ҳ?EG 2]ʵF=:CWp/v9;sLi@iٖhšeΨbs~JZU^ٷS .F4'R3e`) EJpTTTT(HKc &>Y=/zĈs&-₝&px`FEf82Ɂ)+Zxh Iɱ8@OP 3(pǁWK9#i#~ ut4ñ0h{qQvfir6'O!73pC7FOyجh)+rBH$F^PSɉuLe b{ԕQN*0&:"]m_V".%:gz69S)evɿCtOZ z5zn>wD,Z(yq{#OWoH;23)`7(; 8|zIHXxqg&:мZTaVe$G;]5g&- D(]V^'eC.Q?O4Q%9*KINPaI3k4~҆1de甍rugms=hGqjx=C[>vd H2(ymkH+FNDc|s75z㽢 ?G,M( w;sÎWHߠyyA?-jDₐ x)tٹ g/N;=lbeM(~y?y]`p6Ί9G$< /~%IjlF)uDb GhñH Q:?nmL6H L#9ĂHr,7}(@(4Nr w !luG" L$șI)BD]θCfsW贽sXԺ0^+'E~%xDg̥R(Kg#;cs]\t7+xTBCߟ 0= T^hNO]e&GKntLB-aVH/;xԎdb$tcBr'LQ'S N|maY%Lgi993q{L{(\\sunx9/f}8^m%=1/f]*Zy) &]uNg0q\Tr_>jE%8****|ݪF|4sχ SxN_f(_YvlVm:ƑiLr 08R2Nd&""AU h痃@p(H=I@Gr;~x|njڭ'Jmod+<+X@}/1D߱A)i!¡.Χ+Nߔ:UMnkN-Z(<ÃvoZ &|d8-f |֭a+*QQQQ,$h ry zp;>z\6?ieIv*s-`f,E!!'N(ߐ#XzIЄdJrĿ1FV%x>B(OU,88N'D8G+'9~Q̻Gizv.(m ޓ eVTF> g5,:1y=f7ͽW ^2xH,7}$HzzZ2`2CLh11÷ਨ0~3K[:8"` Qc _m  ؆֭m/!/E%_/cw>EKF=c, mGs$Gx1$ꢣ*I!_ttקA$jm5HQ%e4Dp/i(]WU=͹2 OTnU,e_Jz<<%1 8jJvxE_y%M$IdCOvxbe&̫71Q 7nߚOKa]P<OGʲO=Q 1iΗb}wN&3l*OQ4@~8!"9 !Dr?Q<CtQ1;o!H<ZmQ\ Y I^N#q3jhɞp]_mE$PkdH*JgNPx?=\miG&痉Rz"75w,"2z %)[V?->'b] JpTTTT8p[9x-b%$?6f *uaҩD2S1 2 `=ъ pq#үDśź9RLX_//lj|^v8} BFN}HF4=J>VNKY &X~J%w/_=G_5%z-Ql8:Tv?Ips6BMNrG8i4(j2ؐګMS2 xJ)%I襲\v^~Û{Tr@%8****\_4{ z+ .hGBtxzyfOR4@< ͇O| snJ*3H,pq\Ͻ8`JE|-/<[ $ ?]]$V=%zy(HUq&9l^3um^8 pu,AAѦ;WyW6*$cCM땧iVAgYl PM)Bl@r=:lk|uN6%?G\ #D'a-s#Yl9ފG%8****p3LU8V*u{nkD)`=,| IDATZ4<Ԗ=Kmli:U=8! nKt$pQcwubB}PȎ|6lWzNKuuHp׫zRs3;"g&Т9B.CSsBjT7Xs\$`#?DtLb+ )b3RRjǹz%٭Iv,לyᵡ8GqG/BV#=JLrP ĩ*" DO4!P2xl$$˾G9O:kCkɨCF.C-C 9('MشA/GY$F(Jhpxȴ.?e$ οTj'_bfҐQcp' N#! vuvK6!DURRξ]fK5BHC@{ @y7oְ_*QQQQQ_ @ەLwclPK !IV8BG,P&EqdvS)`Qic= /DCR4aY.]yHX&!9EHպ wI1{i<*Z]$\W\N4P@~y\^4 Hs|Z<1SJrT_??s͕4h"]VKfP9z6#i$-,f#0JiuXurRq'ו6 !&4mTG(]V`y~SUQ<,_m{JyCv;Q*;:uM$2Ir}Ƹ]dJ^<$\Ly_c^hc]-Y!EwDInLjg)!Ei(|){a hd,$7Q RB:U|\GBX$zg_..@^|etRH$ 3OᅡCqhؿ?=41Xt$CvJ!tӴaǒҩ*\g?*ۮ`IGQbPD\0VI Ÿ<ɱYl`wv}$9ObІC>--@73c?rmUiRrd OǤH4bAH ܠ;Ww,RaRMv8e^n]TfF)[Κ4ܾ{Svj)'b] *QpB{*-ݪZ=qe "# uZDV&*LP$FqN=8@̾#:"hPz|Y@v_-Hʹt &E[|kƗJpTTTTL͇w^^4 ~^l. uqj:pAK\t qNqPmDPiT*b5-KX :nѲ[bҀ> Iٍϥ ,/)#q QSwϿ(Veiθa+Ƹ V▲-!U.iӤ1խTn;a)+Xbxn׾B9R@[j$"nFȓF~Srw7ҽ1D~'e[~@ 1oo6L-3ᇿXu3z6h V_3Q];o*ŁG]|ꈨzf3DQ1 MabɂTvg@C6}%S=Tb܏jYo+DaGˬ}jImDL|'&Erӓڤ>-9æ\4GDt`Awpy&ҝ]uY9r#2 U ]2 t1[??W+pu1r䇷dZ0S-ve3 ?+dvѐ<TN#>(`()̡oyNý'^KELOb[s6CZs :Lo$Gn k["ER+I* ң7]hC&#bcb4347|Ji>[V["r$,w.!9eY :xsle: mJ `#M yUXwKyZ0CJ2$&; 76l*7oTVYP qƷ vz՛tHƅ./ x@v[=0;$t95S͹QA^L!9kTk*$ݦ-)(c\w$H,:&]cاkp(wQQՙ.d}U[z?r xڊ'X3EGtUH.|jNRrhIeH)fs#?m*QQQQ13~OÁ{q{K(&h(9;㟅("=䷣g!r\$ &'$טCOr!:\$'C?I hBݑDHQ!sAhXQ)Dq:Y&i]މ~JHA3:Q1!.^p#YِW9@\`SDy9>bbQs"t A)J.sR äR颢H&␏sZP <.8j 8VKŞ۷Eu-PR45xIl,>t_b8t Si6ĕ ™DAlhC]rb 8|Vyz7~v&ρ|o"ٹN[fID=:*] ,ʹؚ':k\wATB2rrBʝ t?{v=*Kp3۝hoĢv)߽{ aǹ5Fͩ_ *QQQQq|ݍ#;UtjT>`ýtlx|Sґr/Ԟ.0CGâ9G?C4%aK$5i X/:/h3)dR%nN}vKX93?͢7 IDd'J$OW^l=OiYh=-'G'< Td8-9}J$Se1Wr˟񲾴 z6_xKr|]}݋u'YdI%[:a =ĥ$RgFGq$]:"ŀE<DUnȚ.Br8#?Ĉ@Lp~ڔυsk*Œ9zͩ*OhZ|S;l8VpLDq^C\6CrlszqCn{vǨ7j;קm^I1|dŢJʜ}a uTH1E1Mu*#L+5G=MZP w*#h p+ibI$c8ꂣ|O6+ zs 1Q~ S"OaJZ,Cumc}C; .48[cx!f*d"ƀmo5}& F%SG^"5YwCCbn˂ný\Rsë |<}@|J^d0m`tfO[?>RxnNtJ& Y͘ɍuRxT|O({nKPSZQ6Nਨ8!n>q\/c/(BBe@dȌ-TQh<A2 惋ۢ9gXQ[CQm xӣsLoY BƤ(0׈F z&VHh#E+);TO)+H WKcK{TPsڔɔ=h;_$W>ߡCjAṣ֘9uqNQ2QhmTSF H*]dTOʠgq$2f;ڪmS*rg~y$=7ny&`Fo|]GEEEʼn5cx D%$]..Āb5ʣ IDG?p{<zHm̮T<"@G44(rc$Lڠ4'Mkl?`_,t: *V_TT+{c\`Qms2c.,YO, #C0RvIL6X;%z6,W.Hb>}e 7wO'=["ޭ&ae8Wtro鑵/k5zB%8****^c%S  4 %OeQtȠItٓ-ӶȨK׉;Pޭ`t=CzҘQ)0! H@U0 yBw=t){cTy taHr3譋VIF^=%1B˓L11IϝtmQ  X^'AI)8#w7$ǴUI^.rwzGs樧Fo|}GEEE+uhlB_u2 d=;̔GhGH|CҸSB :ⱮayMuw2SU69Pt !-5np{EJ(!vSUR)کmk^/h}i$uI!#'&dXɅ0Ӈ&bHL{83=RN_Bo԰\! veϓTȑJM{ѵ${EΫ_*QQQQJpJ/ n7XaZabcD98)g$R8p Q 3Ⰼƾ G~4'/ϖptwi4 6t\ 13C4è8CVݟ͒uXQygmWP朲 L$"FyJ.GA4AU0H`)ۑw/\;~4_SBȇVK#f{药ਨxEv:td&p)`Y9&D:\rt TwJ`GΦ6^- m):hX m-;9p.+RbUAY:!c[ ,8bi:Kr*;*Ӟt|ˮڮ.05`r&١j:ɡLlW[*3ٞULxVKN'<RCB:Q Wn_1|]Ar4J׉9wx\NU i*yHt'SUXG`&!5Ю!ڎ$r4qaR@ˏBr |z=9'n>Uό*[- rplwwj | p;FU^,OTt<ݹshوYȌ!3j źK!4Á[hQ3@>JW6Y!*Lq%)!PuMMq3g=˧\7^Tq~sмF(C3hlk6CNCc TM# xjM&鍺6t!oSUD-'9QDžIJ?^~d/gmkU#$>y"[4d]<;c:oB!&׫+/-GHe e8?<=J1'3lmZmN;ߛ '~˪"A3$݄jQe*kX/KCD2@U`՜)\f1asU=药ਨ p/? _A4K˵]U L`^{l e^8sZ)!Ck dh昻Yl`,6>@9~ukwJvPWPZos=wXfu,RWP5pB;Ⱥ0wVDV[EZd-B\" *Ɂ.hF`VANOOʗL$3RA>G$ےLQ \"\/wmXò}sEtG/hx>xkxϨGEEEgO)]1]%RÌegFZBBb`u~!7\?%3\ƚ®zN;hF] V(B|Ty=9RTZ2%&İIeuNtHTKkt[AZ݄NMڑlUIYGጻ׉RdhdɈw0#.j Z Ŧ]`,4E_&o{@;lT$;|HZ}٥ϩIrE)_7*QQQQ~&9@^ [ @H N-ԩe^֪@K?|X&95$rFvd丫躒/XkSR &; j5xOXndԃbL93#v]* 9{A|%'OU"g_(ɱhINnI/_t\ÑkEF7/2"(f c䛗K\FsX$It4rW|7'ThShPn Ajö۹$wB̓l!]B4M6-;s% s' }k\Ć7{IqkFt6ғ\jו}[Dvqa(`ٯ<+5IF@%8****/﮿K3Z^mGEJ Rwy": JX_y;6 o.%^l=1.<&){}NSSt_5BUH&$/}TCt` 1:C֋5DVoxDm)cM[1u YO}h(paE껩*4FݲjuG#_VWĆ'Jx'HI gAQV4G%7*"*QQQQFp~{qhHp38 Df!v @~A^_ zӦd\`Q, 9x0І~"ЧO=Kf!}ɣEe0.1z<̈1VOO93e7I|l!g{ɮ6}؉QT(SsL=I+䩩OC.qF0l딼.ԑDr޺ŷ l:΄n$UiT#T UBRqۯ.莻'b\ߚZol%8*"*QQQQpᦝ"dc si`'ɵpi+殮y֡A]!NC'$+>):/Gr*SAkC{n9ǨQl iFx7YF62-=gIwv|Q8,.FV4hJh^`,^2z?>BԤ_S>gT3RQE džr!@ё"Q;0L&7 h݇ӤyИI0"[·FF%8****~Oz!#O| ^^nZ Ao)A}t YĆ~/ ٲS+HYHq IkX+ _s,$;ImP0>J'VZݤrVֳΧ愠*|QuZޒjP>^iN $K/VMg#SIXUVY\iEBrb}2 *Ftlxx~g!DT+%AIW>GHsID⒦⊍ H6:;Ԛ5Eiàn`es$V Sю#TиK.r$yH v6-%=r ygJV܅rAfzR.uN0\JHfpFX}o&+DyNS{*\ݐOHNriU?Y_bSh{,*Y䁷|%7*8*QQQQQGFLFNNvzµ+8PP}SU#\^{M.#$pQoC8;)3?#&Elˍ7cώ p]5P/ͅqQjOқ)ui>v5jr|uS @okOwC4ښ⨠P*}Xzja-mLbປNx* ػਨxp^@4n5:k>"6d8 C @@SJ/ 6"l ,!Iok,`XϏp$ez i4W8KRF&&_6$DV8m&ܽ9MVArDAm۱L4m3 VЗZd­GEǗ$lHW@<LE.SsPB돽j/j+| ,?߷ۻ 'Dbw)H*&JGˏ;>" 9*Aʽ 4Hz=\C`9^Y\.HeVEr+UT=|f/tSѴ !ٽiA]F߃^ !9R \3k)"GP!BUR#'eRf-O1T c pU+W*QQQQ~}Eb8I Ұ*t= >`J"Z06E D8]"9]\p>j SHj:o1Zz#퀿'`;=tyٓ`:Oe8W=尔 0xC#ǽgfXwK۝1gV7ZBF!-rrXIx>ݟb'Eô&:ƽI.PKڡhB9ڽ"zcļ2,vO z/3ZLYSN`co=ܨP wGcL=V tkpsy0`SHF[ FZ$$[^ם/r xFIk cyvby%X4!5YSpTā7:Je . iHSҼaNOD&icJ48k {lmՂBA?g'S %f8A5,D݄ .%mwF:]K?X&=5C-FO< aCc%,N^O Umn1Py=),ԑ5ghwer Hwr$,c('8}D0>4u*W[%k??nh,En1k?ђgϽbS[򄇥MϩFJpTTTTEG7M+A4 ށ${T/zitd9CLr(m[/RLs~ ~^ p@mWb.+{إezQdrjz>Ch+25}ժ?qfN J^_v)OWaK#$t-VP ਨxGjRqāzt@2h >FR#ێI O@Ű8|:y$Y:j}(O򍕩qS̐oC|4!A+y|/?;R_AL:<%VvJST}*BoIJ9.MZхb3|܋vذ:&7ϸ~9n{O^jd5#a[X~`e.M\D~iG<_4B%7*GEEE;O LG$ xg=&]C#HfI2h  [HHG2ϟI,,X6ߨ/  ɱ; FuػHֆIto/«Hd-:,4 f\Q!Jk놈$ޣ\2./({i'84C2Cqآ{Atj\rFM*9S> D)F]3i8+G֦.jC Q_D#U+[P b*[I'~%BiǖG=ʣ9T;u s^Bsp}YG&un, t3-bX ԔZhTTbw;T$l %v'зMX}@=vVt$d>\g ,h|:K^~e !c:؁`jې~_c5$_!Dt,.2=8wx6$f%:i0p)GG/a?ܫC7Z>lh9ӵ>mR^T3@r S_ƬFਨxpCvV!.6*l^HS$ȳh~iD$C$"hD][EжN*<:PneLY-aq o 41!tu6Ρ!߈XI6|eH:e%VK:w(1#ŴsĞ?~r#cLDGqTr~Amڧx'FkB9%fήG] >ͧ)Ak ֳr3P֞l=;'lF%8*<GEEE;E\tHwYQ#|J 9 qMUS'(`qaDM'9vǝI&pe߮Hvz5Gۄy#NYKB?M`\<+䮙Z!V%./ZvʊA$Naa 4S(COL^DvpbSݜi8 MWm;o^q_-wKPuNZx ^zOm%7*|GEEE;w dmd/ -T4(Zv=(hFdȀ/$@j-$ǐ> g 2۱q.ќ|ILn0e ]Meyޡo{ħNYegpcWQܠ樚&yu9MRK2 np:,g@ P3tg !G!)E[5Ig+gvfnNVj]e 0** _lYQ7*GEEE;O ~~Yh  b.^d?: aLIt630$dK-yt"q/Iۢi$d3.Cn פ<]cou<2~:zwR;b\trr*{pEQk &uv6 vHM }H>[s|8< kt#:Eu`U;M,!-)޽$`@Rv;^2r",vD -}|)`JAl==-I.ץK5zਨc8~auPz3ֱd?(yDr&B6:3׸ 4SFޱ^N[ts#/0/);bc #RnwfeNaNK&ID6VWd<Ҥ|~OmvQ ֓= |$НbRGZ͵?RMbUSdxu'=Ԭwxjy&KZՖJJz};Р)'֬LsFoT_ʶ$]*5,=ccfa[zlcDİ %9_Ҧ ,6`]~Dl׃t<[БNϏ?gв` Ƒ$PR//1s.yM.4Yy U"^.!OH7EP tI,xY<!hކd,w2Nj_^_ !&7V*v#tdk<htG)ȓ 9MeB{%lJUAHHoEE%8****|{l#Er Ұrq#_:0pB>oDrI>X-|PA\v_v:4\N<]/>[RZ+Đjzc]f>eϪ-Y]PE9!JDG*6i8<@~+rlxDD}EHW KrR ݟCxcA'OQO@|glYFԐ+Q3|.0%5!g.<o6ǭNP /?.ݑםNDf!R$R&K$&䮚5SYHk ={ka|m(Ie=JD% LqqJTf;ٱGA y3Rk/Ig)T+"*d"\\G '2n/$_/vbzK;z[Fr6(SՈ1ќR]qG>ynbp'^z[;xDb]7XVgKg۷lH78:Q;XHi}M) Jlrj !c)rGH[BNe;ԩ+r={Mnpp_>/*2u7W{#o1:L sel(4TB-'Gn~\%UzZ"WY)΁R쐾lW~RlĎG1`gjyB|wn./~zRDtֵmIee&뗊xoi2q׎Sekqt00\}/q/fb S{DuGLkO9wo<|]ewA(ǽ&^Ab3 !]/⧫D`5x dAeѠ/?o~3(sr1Sp^[pFG;:OzxwBdy9\bvX(ѮWVٺdwbLO'qffhr:zcM IDAT:Oy]h! b8DboS;JwXC8Bc!M__"cz"V\̓ P88`YQ\K,Sl9o(̨ʭQG7$'""Hv{(t(*ý!3@7([~d9VL G* )ƑVm*޸sCyR^^K^~-]weiUכפˌA*\vɫ+{Zb`O1*ۚ6iJ"K/`s쫂WzU a7 Qj23U1{~Z;&|[,ߘoDo&;J Qi:ǒ5}E^1*?r*W]3s]ENJ׫J>SZk2[T)c28Q'.!i-fs٢IL9պt/zbY1#^f?6GtDޏqs'o1Zlq3y75T͘;FWzYz 4#ZT'Si|L[yo]&D *kO [|P;NUoU5e e=hl`Լ(  Do&;1ciQ˛f(pʊfBS =Ӈ~Rrr#-ʢ0ʚZWƣjur(s(9Sg23f}xƘ%ꥈN ET{%"F*ʎcX-v~eFoYe#GJܰ~R צLب{07վ^ڔU֒E[&9\Cĕxth$^x/Uj葔FHsR׽| z4q>e 1 L~ȢKhwrTJ}XY1#E\'=lLwrNsc_ʪJttG>drLaDʟ`8-gp2g"XXQ.f/ٖ%u+D )hqmמ XmʸhxTDukX&V|Q0ç/pyZ^e=s0*2#eQ!E{Lk!5x.=EG >na6^=WmvnʣAdGGn:>uz@ p џhDi6eNf3r!GSiF90ʑ0 ;92Ǎɡ[c^+t+s[Vٱ.f_ѡO==X-JFᷠ@;fX1urrv_a8Cwspr)Վk;Wa]&[\3s8F(b,0Vǝ}}(;#2#EZ@MEE>*|GV<fKoVAޙ>p%k,)~rf]"z_~"4\ W.ҧ8S[اGs+0].B.p;-5%HxbG.&H&3%DondoBQLqPLӮFzlQ 33DTxRC sNZUn ճDitdr~A)+IaKq<'+[4mD#ooMۢ6bc"FjZZk\F*h$K4X;A9Hgǫv\JPRU+߉Da;4}ql%U xY]:}{q'ܣ_H^_r|#NrVXg7@[},KDJ+S\QPzܐ->G*G5Y晱x99 EqU2aղs}䟇A_ _/XV0Am1R9FrdNjS͌wISֹr%qz S,N/dnIż ) c2BW>q-b5h+'?% L}uIrhU_f=~,Yw(o{ɉ(4<TQҌi!Q^'=G!J_Wp yxtrK^.A3`#97̖0Y晱]f)wR4~FҰ\% z_;0ѴRRVָ}@ sZ 57UHiS$U5%JI&DA׌|1{A'{dZsʊۛT!mk}blh0^]##. +Ľf-mtɫEj o˹luW|G?Wum 󮼷K ‚n) +Wq[f?ʕ]4:4c{CJ)뛹ْ'G>YѰvpzZKFgk{{{1#SH>`Yla$e1NDuQ87-|_M/2wʊKSb'cV`y=SUaFF8:b:v1p[:lQQ(~v"m9˂VFQZ`V;\c#ij./F>+ I!}ƒRz4Jum[+pNb,99H ]ǡkʨ)"4^1ɡK N{U5h-CZe-f_um+[ִKJ ]L+QfV"Eeˮ˭i?WJQo?gN:*tY1)%7 ɡhՆl$8#< G=4F5@*l+-EfU),BEF6/5K%SEq_[t5K7",vz3wGvu}[U[:v[wkXKƼx 撌fbCoH7Tpx8ZV{|/\~[u?Еu"n;dB}7E6ՔcT6]a'u!x9*LS(_~k?4"5ANHP3mY}({Q-^tHCS[n0Qd7 S>^rP5ܦ7 mu 1FNkEsלh˦QYi*SXA),GQNuӲ/.ʛWw%7SBO7r! R>!]s#-У@=/w:D99JznQrXe<0#9fi^jGw"\N4C""C}}[>g_ύAi)f4ATYqUaA IѴ Qw6 L5=/ڛ-b?T}I;>;2qa !q[븳A4G!\k8=IGw$RS\1FW]F<޾Nsbr&QW׾'%,‚@I|l Z>եdN eR!RDr)}Z`tr(ԜRׇ\^kv?4DshJr\UGnԆDIJ*_Zž^L"Nrpe㚶ȕ2i[+(Qd'" 3Ws}ttx+Α~+_>[3Nn\hWwFl *V62r5]'j`|pǑs=g"&y/k% )KP/OAѧB\au*S1w*1ֱF$Ktjʖv-e UM/AV}+f;#"o==+VE6YcKbdVg L-ְdFs0nŽ8s2ʧܺ 3z(/HǪTX^ԬWuzZ:y r'ҵW)+E}eHubC`6 | XuS& U#@Hk/uUB~reow]/%^ƍӖg.bQɰ,ٰFMJn.Ycq?QVh._mn RgeOM&"GD-6 }rU_4,.(R\!U5hHkH('Ge柊fd**ܺrX{([=BoL$GQ~7]5uh8hFOQ:ϦdS1a"aǗƃUvc kO -I|R=qŒW [=H/r儔qv٫'#z"zkɨiz/]Iz- ܮjȩ+TdXuUh<{x#9E$$ϱҥ,,Xpp`UrRvd(w`&}2}iZ1VZ=%+`PEs-SV̚R4P|I 'ѡYc^kpx$8s$'9r{}g9k+f>,ubzw_M/Z2B%R=Ѽ)9B-l;ГnjAj#b/GGjuDhn-^T540:W+G9ύټ *z|=t oFL-Q M/Z7*H1YOMDr&g$;9t݅c?mB]v|Ls@9)zTaaUJ-|ɣBe?wtr܀Q\q\Qwz]4iauҾ+&NX֩9ݤ nrÛboD)"ݏԯwE|Ŵ}gﶀKDNRT겪b-Uڛps*V77[.lDoU/srL%a7\\p`mS/+*~(Wg&܏U67 M֏=2Ж5b)X0$iVSi`Ю+F_2J.^{DLƸhg̴HՖq(P=6y-Wcԫū:5ox;[ܶ9E]'PWPg}3frߩr;v uB,BQ;4/biNA>7od'7UEw|L,]nfeɑW+SJ]s}n DwT% 9GR";\^,3PdѢ_JYMz_/=;G)r/_}IG̖yifDL.8Ě2qD5UKL{qb}[iW#+9+c$ƴ;?C[xZEPZ~\%QquoZ_B%Q$6uPLg_־+n5pnU(Wz0~͹ޕU4,^ 11+E4{"~H"PV݆ң1 #Y3eKAuC~pFx1V־"Y9aAyDMcDZN $b J˘(c27 fo3u7d\裸ߞv^>eւdMJ" c˽Ex.˲Y\QfUտ\\ZQUIJ-Q)WWe_ܗP䉻\u8vLK)ROhܳZN$Z*$` '?w5mUGVR6%ue̾T,)7m鎒jHH|o9:4cOGsV<޼Cz )E4T\ProYOlvP,h]DDt_Mq-ìir|p,l*O7CuU(*iQqu*旕]뤹X;|+Ƅ^h 4jʙj2=M(ӡ2$joȫK(^d<8"AQP*VRQl/ʗ!(X-ppHG#z0~}ɡT-We濊ɡ ^]wAC\E_ WÍaJSf eCQTyr0ؗV5ld;.n~}+_9aU0>V鈶)_k/}-T_R \% cځ׺H[b±Z[GGrQwp̵~k{7=n-Lq$m|lڷ. P'?1Sdnِ.~339%/jA(fV:{9ȴ"-Bjٛ"Keȕ6 "EQ7]E;)>٬d(MoG37M_fcߙzDDJl1sRp3i2iz??IJCb{ש/?.n-*^dc:OdWbעij2Fb}] ؈6ƥm'^l"cCMbKwᅨ Pq8ȖTs8;B89CK2msHoC7u@\,4SCtDbɷoTnP*et*}KiعށSHz-)`4ţ, 7r85e5A~}kbi,nqXtco#oG3N(Kh#^k<^ }F8?'gO:)SSk .,yA"94C[y1͒Hbwj7@#H > IDAT!u#9\9aQhE{#"Et}smjP F\qw+Ec4*M(.֞nLSW*t &GQД5r&X>{}v<tJL8)wN2z}CW2Jq 5dOvۦ>eo USƹwp}:sU~D f{Y! }$?|u @c؞:'*1uOͳm{+a~3,ѡhg%['汱)XZnxA7P[wIa͚պљEr(3kVilĐjS茉%ヱcGl[`ؖFqe8;r^RnmhU"VpfpPٝj IW bn?DTؚ=H, Z 'k3XTo0(4~us M'2ڬ,l ӡtP>,TޕpRl0 ޴XGҐ(n## gR^WAot^..=ͧ*~i-zVČ(:ǢځV;jݛN1b/j9ݞEi- !*k"ݘR8t}Hk%\)up}Wб2mI(ʜ;RZq?2_9mVݲҚWw)jUܼq$oYu<$_zػs_hzsHV˞Es{e|#m!moƞ`FI%wAE)=s8hӼ[ҏ~_Iբ0;YŽeL*,;l ve7¿!-o8NQn߷(Mb$I[ whHO{u_0s#q:9 U7צ~4~bnXtt2J75;غ)Dk5Ue/ʖZw3_ꩬEWTe+B/ F)nҊ_n9' !$'F@vpM_ّX7nY-m%75D씻½]Q%Q>v5Q:)p|NܘrT"J|6$-?@Wu>>$NW!Rr6w' 2NAZж"kp@ ؊(g6MwmPH0ee^YRNc"g(P-n3dDC;ʮ^O'FIoz '#U9 ҮDtQuzqW\ᴦMP[ CUy,V?y5wsipw5w;U&JۏIa+OvCk.(dM{DaJtZCD'2HAl$G^n/ߕcQk Ч}P MBYln:]]۫d$+V=M^Hth!>hdɒU,"P(^D񳗞%"zq{eRNAkm5l7L_wՋ>5'AQ&ךWޗ+#׏/Kkי!FN;.|i4舸ց{'HS#JMĢ`@'4urChb'!rʒUְDŽ_T뺪n(wV;kgk?/wv]嬐-!EGmXL9YXU" &GD' sI#}).fvnjsNW}c=$yp ̕]DzuzUEsxLh.UE+4䖘?>b"zt}Oc*-("~@B5Mp(wŨ? wi QݎNac(ϧa1 >D*;Ai0[Ԭ&H=Ʊ qtyET̴H)p[Z|`۳6c`Th{WgGdiK,]HBZ]Zq8˸qn ~_;in#(d ܯ:h).EJkQ#Kr*#(4)ttJDZnX}O) w~J[wZrf wY=U_\2^^Se3}*v͎k9:H0ל!aoB/#EԆBپXpƬ=>qQD4:=M_3^ozTV,ǢXϐr&{ネt *I?͎ =w٬uDGո?ⅴ?z7#ӽ=Do!c\^֚BD4X7=ssaЪ_iΖl:92J [m<)Dsh̨7`o@e9GG;0 `0K Ο!bE$e̍Q6v:DGqLSӢ LFҼhFJZubs9\Ĺci1 n(~x6H%xRcotuV,25m MQ"`Jxx<ڜ%|4[Ŕo;7\;W|4G!bӖE!dUjv@ZCל9 R1YԴvbҹ868#!7ifzK-+߻q{1aϵ{Ա6zNTBG? r4[)e|lWM}ۖ4ۊ{'!\ gDmwFgCbQ`eUdQ #Es>%pHS牼ǰtsHq ae %|Ue4)h%Iy<):Mr[R4]6JsoL'4mb~屶|1*q P3ŲŽW92kΔKVش6Qя>=`WY_ИtЊ<ӄq=$>zFmppX)ғЃ񃬠tYb^cWNr[+MJ$ʚFRɨ+k"m̂>-T>pDL$4.뛹wE{l’CW&l73/%ԍtvk5n˅o*Lൊ%l{DBmI6?h"X&s&zoB%q{tւHrtpD*mº4VU7#U+R4jNwICi#biZoz ɨ$zbV!-M;+ؗ*w[:6L*ήv):DՔ(c4=4dB6!f U1^8ۡvIy¿jܾNQ(9G0(h 5hIy 2eRDx-^$ֆ "qKfJ,)`VI#W4-ke|27 }gѡJ^QX(g-l^%YUpj6"3 <Uji9mm(wNWkG/GZ Pyz/痕MS% Ti2(cwp׃o=Gh!ʎmtbO|Z@)+~pnMkvr8ea\23ż3KlWWinr٠zym ώZUy;:,}_lEDi#Pٱ8볪\.lfTHPnQSoJzŭQ"~Sx0C/B{r]ޛixspڇ5lyuM~Dv \ﬨWS+A3;vmꞇwᅨĢ`ぃ"9G+kZ۬r~(kV+y1 *qK"EeQպ޴=EFp9 25TP\%qVQ۪ AUI^YQb2V6O8(PrC`Liv%m/Ǎem~HlQ_:jM"jظLoEHNx*SmzzI`dwolTl3\RN-t}"2#-]\;{cu|ybՐ1*ʄct^?Nڱbug2ӥ$JM"̲e˸pD R('mp(3`6|}``c99ހqX#|[gX%Y'Xr ۨ2uU5/\bz=U@'l.Tk( ;Ȏ`+E&C+b+GzM%x o8&Gz{rZ;GlcDPڽwm^.z?PDMfs1laJ d%&s>=LM[`wyz|*KzcF@Cax3Śon}2E49[dV en۳Jf5XtW,Q>hHSnIBuWzsAܮeNw~G-LS1{h%CY*khNh[C,/ńtzET~Zʧ(vTP~Ԉ*V/`Jf@R-<-s>9OӪ_z^ϱW{=^ʽdY F^Vڳ>Krue7S'éx\8=, y ,BQn`H߿v"vnoU@_rϖ J.|h݉fi;7k DpH?*wYበ&S8UVOJNkhyCIMܲZAvu Lqw[MEI`j V`)"9.Ua%r1 Dh'4zZ0iѡf QJ`|Y$%SOk'^Ǽo4ɖl٤:XZgj*"=m9sݺ"ܜrR}.vevnK;{2Jܗ| MkcL { V?|B˯ˬ !W=.42^/g4<Ȣ f Ȃh+^@EJZz/"Ťdy.t4vqm͠SD߿6D$Im_ b":jUeT}^ 7ڝe"(nJk<`>|C, Dp*{}:s\4{.>>[ Ҹu(:p+F!`Jsu3%=(٨-Β.I:İ}#oFs-}/G؈(eL8SH~C7o-Uz".iUy?pot>z `+y6 j Jn;efDe0eOZjRxp)/%kiϋG| Mgʋ|]!*_W vђ~ƥUYqEeDGZ(~qv4c;m{_6G lA,TtY#Ҫhgz#`9*5 BÃ3Ds994± cU<Cۮ]bYDTr?("/46h} r+N9v&j+ٱblJFr66%jZbk$T%╩"GX5ppz'?~Zx (4do=(O[]~cĦd嘶c;3QD9elPDLSiul& "MK:;VكV %Ӏ:0M<*Me6tD5B'vLQȖx,7.;*!Fp%KpjZuMl9>=QO]aʉ(qQڏ֔2j !ed[ܔ#RqW4)LS~x⤕hEՑpWkI):ΞNhjO$05 UbjK״{<5 K p>9OʐaP'z)U^sDY%!B;7s:gPwQߦ]lH5&+#p#5$hf H \+09K89\ n N0)3oxxkL,uF,d(`D?ёDZc]bTkluH;;j_ ['^4j50O e (]STOBryYi PXiz7WDN2/V]QFݘwW3.3Noey9yA6Ԝ~B3ű?ֺZ.ZqF?F]-^Vh#G^q'Yu.LRzQh%[.34rnXM"dg'ι1OUH!r"~Lٖ%$CD֊!ERkK['k GN1ДW׮R&C[=!Ye4{x΀ZU͜z6}Zj/bTLM v~?-?Oxv%_DwB9 %aaVIpF"\ GFvt?6͖SJ+æ?zJFe֑WޭC-5t/i|0n8%!ԡM0f*' NLM iʨ?H[D#b`'YT{9u.ӛl:*)"gEr;lL]azlLYd>>C[ tE']os謞TVbA,={l]MB-5%`iH.4&isj:{d|95ҝsn!bT ) K IDATo}Z~c(&cѨ?3ZSJoRz̓Bʳ[5l2 ѷu UQqlŗqTK닞h~V tcV_7O05QI@icjJD+#88N[ξ<+WX)Fa|Y65h!7.cM ~}3лdlo3EãYsz_ٔ?ӎf^GGJKX8V船l>rP"TiܝM+>`j ypЗ f!v6n(( K=5%T86aUhpfES*wj;6|#e;*hDok3roƿ7?|`K@}>ݗlS-g>9]"irg%Yl1#h7}Ե(YK"˃-۹rs"!(ƨUNoDjb^WYѢ5"fWǹADsCE v>F8/n;ca ng?ُd˵jyZ] ;7v'QFRwqn1f3$5*%OęAD͓f CVMb0k,br}Q&#nRD֣?nKQ%W/ rGD9Lѝc]%:^> juH\˕NF'w# HSpD8_4h?CPHmvPS?"r#=QLo̾0 9" $L v2]δeY*·j]474F$ _wdRϲJ{\vۢ6KHw@dmD83RO3i5&UihaIXp[A`>?IV?c_ᾉxPYITsĔ҂C-g4l1j\\F FtJzwe__hxMD#7gJ' p#[􈉗::ؑVE(sh*wnV?'?iNjˁ!b9Cj::+~(5K3gf`Nިl#q W;pcd>8 ˶ǃHLۑq(2X#LN$e- _: ` ϳVDj%&hYۃ{SW*Jcf=1'ítSZ$8] >;qMH^sK)Jh24Z^m:qk’ ' ,uI" lQ2͊Z=PlUtfLYSJ( A(]ʫ CG"zu`Xw6MX9K{":p)A@"v^U܈͖3LW? m;;wF"l֟|K:lzX),sP \ëе5P#88 88d)+ZttXΉ|Q\ז"flyma0*+2)kg}=N+0!3?ã~wŊG~љ_(kQz#5yx|侶z>XmwI{طJifsraXΖ3GfG-]ڱʗ%, 4퇝>0G/=R-9vm$6HS{ wҝMBSJv < ţ!_=|;]Nt9e>+")N'Iqty)sΎpa`YGT'_HK΍Bf206ۜGVIjg>oXXWؓ >~ck]ݐsq {9tt\DN}eo[VŠ*^0H̓m2,KƮ\qiǿa֥794o|IfՑTZ?1ruPxWȊxz#ZP> =GYoL%mS'(;;oP@ns]:2~%f]Vpc7C LM@< =csZJ>~=u,$.A0*X8뷦DtrTz> \TEZo|5ƆEyM񺜿&Q-1Ojs+O#]MAhZ?+>(s#)ٸXM ~tij>֍pS׏Т5ضcWe nUp:P{ߤf#^mkK1a6j"NJg˪1 ?`j :~L 5'G3Ph١ ENӹ҆KC S^׃^'nigJCӥ%:9b65)*@~dBTECZ-z4g|@|mazK &Uި|_K[OCѦD&j[f`-:'M^Q%5M:J|B$Mzڅ!Zozr "@$Vξ8s _0$DL'!fYk/^/v'u0)#:ѻoY_(cǴjFrd~irЮlѩMw (vJ*=)υ^xsgȫ)TA=]NHT0FOz1~Z˻yƇcv@ͮA:7 P(i'LM 885p>9< -˦7l*GAb W9"4\aHT/rJ?}<ћzw1:[o:DtWāXu AG7ݒi?87H985!ӃehDԣjyYabT);=ZVSddl6DU+Mvnx5E4YbIͣ%IWm̶áDPqI:Nv/_Hkh1sz~箅)4/3יslBTGц"RrFRjߤ݈v#۪˪F} 6G-9L,ҥn nPDpk|lDsPJʉ~Qu.cjq F<^UdeZŕv90Me2ԎamPFUE΍c#87 "8 "&XÖa#g>L\ %VNIbr_P5§8Y[w(b"hytf|J[qr*F:_486˥J;Pė/݅|1Z՜1@{ P~tq}a-hWFt&Du|]J4ŌCmWF(}]Ѷ~V;UQj > ́`'{X-'DkN[!$<1FX<6\u:WP;  688-@`i/{H[9-Fsx =:8,m6OԹ1 X"87~g?q(s$bլulejpL%'X?*B|Ku Pitn`q>9_jٛ)QDuLo4Lq3Y>4`LKx3e/PDqr%J?FE sQ: IEh88-3PX)+Q Hl~?&7wU/rܗV 5jk IFnxZ>vtbDse|ͼAHhWYwMHp~ZbضUZ0R)&׫qFts`9~y'ЈD`GVjKI*uGTQ 888:م󉤢l,pp;Ȉ/./3j(r&<ڒ4.(88؅s  Ds93#m89 bMN,$PCdrQ&Q:ppu1s;=czp +QC[tz3esun:CX2RLZV.*m|-헾?1ſ"}/H ڤXY7ڏ'87XvV_|_rR' eNaE}h:ş<+A;QާшX ۼKZrl pp;'IJrdУ;gDsh4^"o Hr¹sp>9O>"?LydFꈂOvvԉ)#23Aoj(7@ql#`[ ~\ n这9,7S~J(FQ#v1g<V.Bnj1KQkJ`.[JmchDnz2%eEct 5 Fuĺ_~g #8Q,c2vh6(VVL`Kξȗ-VWG[gMF2R|%XH9= QDM."J6[hU@Q 88[N0 QP:;d}S#ӇEwߊ|%&iԊ>87jܰhӡ~h̓|Ua%_>Ďhբ`G[Xٕ~vZ9}뜲ҥCQKeLJcz͆t4+ wLQ~vùtB46vEGDzk;Vmޛa5MQQq76* nppS~yFFc~yY;Q3$ $SN'N?TKe2F-"8 gYu889/<40 ,?ⓔ.4:ZC;>o__ot|O'ztl!pp`e<3*~:ʺos:z:kKcC͕Ovt M&'폺k)pp`圿<_󬠭)&m;.8v 6+=ujMU:"8VO; 886D%mDBs|L-,=''yzN&Fq`J|۞}Fp2s]_yJwfvtNmiɑ,/I^U6~y9:pbt5er8xm&'MUc;0h8~O]Qx@΋@$GÃk7}iӷabuasl,#g٠xsl4X6١N_F-ʷ\:&v`7/ot 6ҥ# %Oh/aE87]`DtxGMKDh;Ttfض负A6NΎMpnt3z>yj,mEHͦmÙ 6sl%/??lx Tԉ]EhCtrܦ}]dtn:l5ވߴ")ReDl>FHgZה; npp`'XNHҴ}wI]GSnu}ixo%pnp;/g~!iҘ\Q:/R3UOQր|Ntt4H? 'mwptlBbR87gcvQIʩ*-l)j88pk(t\<J6ubDsDbLOiޛ&Gpз  Lq|8ΏNѣZ`t3zyV`;;|/ڈ "&B~{o0+M޷Vkppn݀d"88pq=mP2uuz8LIDATK2JX>M65#ޭ%XsP=SzgbGPm::N A2ٔcv2uzk6YcC+Ló_?g~F$^ !"x=؎ZprlS#ޝDppx8yN/ӟ=w¦94UnDNw'@ 88"yOOWURWlZer;96)!#M_m`J 8898_ofhH}[+GAZx0%  8,,bGrOi2!Nu))hy7S3騵=-:ȷ2]eS]@FLI)O)OJ-uYgZIlY ]:9r`ĻR8qxOO9].(b%gd\"(](75$MشaJ ppt1knFb=Kd)]"wѥMsl OGpn 9=gtq}anhhT#<^'*FyrV܈8c@; ,ӥ' iAȑQst7]:E'G#M°i\Zc d @f/g⹹!aiYҴrl B ), 2zcc͋Jp@/}N?Ua`%(:}=:>Lwx ]F1mDm886b ˋ \\98V8}N_?9!V-˵јX 88geR1!iCGGh%R7_ 'mQ?6-Ę4GG.b7szk+;?ƃ1֚Rֵ-l>#jr/s:kctʝHPxrlrAQ<6" FŔF8"/\|BYdtBѺX)/`L}Y`uGpu&?t-x~ft9L_I-OOYrԹKn-pl6 88nw;:ܭFF KMwZt `s~qNϿz^FxD9v01upl688@MlY ֖lotn1$lppgzF?PR1΁VbisѰl 88@ggo?_Qhy&0vc9*û@`ͱ K˶VQ)pl88@c)-ed5#>88Vv88@^o>gfefy) qKGE]_~uNCm: DwU>օȯU+dIJ%ֈGG i:ppGx|ϝǧ4>7s&.npp2W srDGu. `c&tz|uSDJK}pj`(}k-z荍pv9;ϡ9G88Vsgt1W8.':D`9˿1}ѻmOqzBLJph@ppfIDD?ϲB)7:yD1 VR::r^L_Ћ+1pd@kN80`Sx[nIENDB`hkl-5.0.0.2449/Documentation/figures/qper_qpar.asy0000644000175000017500000000322513211074263022101 0ustar00piccapicca00000000000000import solids; currentprojection=orthographic(1,0,0); currentlight=White; size(300,0); real k = 2; real delta = 30; real gamma = 10; real mu = 10; // points triple C = unit((-1, 0, 0)) * k; triple O = O; triple Q = rotate(-delta, Y) * rotate(gamma, Z) * (-C) + C; // vectors triple ki = -C; triple kf = Q - C; // Planes pen bg = gray(0.9) + opacity(0.5); real r = 1.5; pen p = rgb(0,0.7,0); draw( Label("$x$",1), O--r*X, p, Arrow3(HookHead3)); draw( Label("$y$",1), O--r*Y, p, Arrow3(HookHead3)); draw( Label("$z$",1), O--r*Z, p, Arrow3(HookHead3)); label("$O$", (0,0,0), W); // draw the ki vector path3 ki_p = shift(C) * (O--ki); //draw(Label("$\vec{k_i}$", .5), ki_p, blue, Arrow3); // kf path3 kf_p = shift(C) * (O--kf); //draw(Label("$\vec{k_f}$", .5), kf_p, blue, Arrow3); // Q path3 Q_p = O--Q; draw(Label("$\vec{Q}$", 1), Q_p, red, Arrow3); // draw the dots dot("$C$", C, p); // rotation plan define by the rotation axis triple n = rotate(mu, Z) * Y; draw( Label("$\vec{n}$", 1), O--n, blue, Arrow3(HookHead3)); // project Q on n -> Qper triple Qper = planeproject(n, Q) * O; draw( Label("$\vec{Q_{per}}$", 1), O--Qper, blue, Arrow3(HookHead3)); draw(Q--Qper, dashed+red); // compute Qpar triple Qpar = Q - Qper; draw( Label("$\vec{Q_{par}}$", 1), O--Qpar, blue, Arrow3(HookHead3)); draw(Q--Qpar, dashed+red); // n and x0z plane path3 plan = plane(Qpar.z * Z, (Qpar-(Qpar.z * Z))); path3 plan_n = scale(4, 4, 1) * scale3(2) * shift(-Qpar / 2.) * plan; path3 plan_xOz = scale3(2) * shift(-(C+Qpar.z * Z)/ 2.) * plane(Qpar.z * Z, C); draw(surface(plan_n), blue+opacity(0.1)); draw(plan_n, blue); draw(surface(plan_xOz), green+opacity(0.1)); draw(plan_xOz, green); hkl-5.0.0.2449/Documentation/figures/sirius-m.svg0000644000175000017500000011532313237020477021673 0ustar00piccapicca00000000000000 Gnuplot Produced by GNUPLOT 5.2 patchlevel 2 -60 -40 -20 0 20 40 60 80 100 120 140 1 2 3 4 5 6 kphi l [0,0,1] -> [0,0,6] s1/s2 (starting point) 10/100 (steps) m1-10 m1-10 m2-10 m2-10 m1-100 m1-100 m2-100 m2-100 hkl-5.0.0.2449/Documentation/figures/B_b3_y.asy0000644000175000017500000000145312710332472021207 0ustar00piccapicca00000000000000import three; currentprojection=orthographic(1,0,0); currentlight=White; size(6cm); triple b1 = (1, 0, 0); triple b2 = (.31, .95, 0); triple b3 = (.4, .5, 0.76); triple a1 = cross(b2, b3); triple a2 = cross(b3, b1); triple a3 = cross(b1, b2); // orthonormal coordinates draw(Label("$\vec{x}$", 1, S), O--(2*X), gray, Arrow3()); draw(Label("$\vec{y}$", 1), O--(2*Y), gray, Arrow3()); draw(Label("$\vec{z}$", 1), O--(2*Z), gray, Arrow3()); // real space draw(Label("$\vec{b_1}$", 1, E), O--b1, blue, Arrow3()); draw(Label("$\vec{b_2}$", 1), O--b2, red, Arrow3()); draw(Label("$\vec{b_3}$", 1), O--b3, green, Arrow3()); // reciprocal space draw(Label("$\vec{a_1}$", 1), O--a1, cyan, Arrow3()); draw(Label("$\vec{b_2}$", 1), O--a2, magenta, Arrow3()); draw(Label("$\vec{c_3}$", 1), O--a3, yellow, Arrow3()); hkl-5.0.0.2449/Documentation/figures/Makefile.in0000644000175000017500000005256313237017633021455 0ustar00piccapicca00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = sirius$(EXEEXT) subdir = Documentation/figures ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_noinst_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) sirius_SOURCES = sirius.c sirius_OBJECTS = sirius.$(OBJEXT) sirius_LDADD = $(LDADD) am__DEPENDENCIES_1 = sirius_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = sirius.c DIST_SOURCES = sirius.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(dist_noinst_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASY = @ASY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BULLET_CFLAGS = @BULLET_CFLAGS@ BULLET_LIBS = @BULLET_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMACS = @EMACS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ G3D_CFLAGS = @G3D_CFLAGS@ G3D_LIBS = @G3D_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GNUPLOT = @GNUPLOT@ GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ GOBJECT_LIBS = @GOBJECT_LIBS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTKGLEXT_CFLAGS = @GTKGLEXT_CFLAGS@ GTKGLEXT_LIBS = @GTKGLEXT_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HDF5_CFLAGS = @HDF5_CFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VMAJ = @VMAJ@ YAML_CFLAGS = @YAML_CFLAGS@ YAML_LIBS = @YAML_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ release_info = @release_info@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ version_info = @version_info@ AM_CPPFLAGS = -Wextra -D_DEFAULT_SOURCE \ -I$(top_srcdir) \ -I$(top_srcdir)/hkl \ $(GLIB_CFLAGS) \ $(GOBJECT_CFLAGS) \ $(GSL_CFLAGS) # wee need access to the private part until the trajectory is done. AM_LDFLAGS = -Wl,--whole-archive,$(top_builddir)/hkl/.libs/libhkl.a,--no-whole-archive LDADD = \ $(top_builddir)/hkl/libhkl.la \ $(top_builddir)/hkl/api2/libhkl2.la \ $(GLIB_LIBS) \ $(GOBJECT_LIBS) \ $(GSL_LIBS) SIRIUSFILES = s1-11.dat s2-11.dat s1-101.dat s2-101.dat m1-11.dat m2-11.dat m1-101.dat m2-101.dat traj_n.dat SVGFILES = sirius-s.svg sirius-m.svg sirius-m-zoom.svg traj_n.svg dist_noinst_DATA = \ 3S+1D.png \ B_b3_y.png \ B_a.png \ B_b.png \ crystal.png \ 4S+2D.png \ 4S+2D_reciprocal.png \ 4S+2D_reciprocal2.png \ 4S+2D_reciprocal3.png \ 4S+2D_reciprocal4.png \ k4cv.png \ k6c.png \ med2_3_slits.png \ zaxis.png \ e2k_1.png \ e2k_2.png \ e2k_3.png \ e2k_4.png \ qper_qpar.png \ $(SIRIUSFILES) \ $(SVGFILES) CLEANFILES = $(SIRIUSFILES) $(SVGFILES) sirius-stamp MAINTAINERCLEANFILES = $(dist_noinst_DATA) EXTRA_DIST = \ 3S+1D.asy \ B_b3_y.asy \ B_a.asy \ B_b.asy \ crystal.asy \ 4S+2D.asy \ 4S+2D_reciprocal.asy \ 4S+2D_reciprocal2.asy \ 4S+2D_reciprocal3.asy \ 4S+2D_reciprocal4.asy \ k4cv.asy \ k6c.asy \ med2_3_slits.asy \ diffractometer.asy \ zaxis.asy \ eulerians.asy \ e2k_1.asy \ e2k_2.asy \ e2k_3.asy \ e2k_4.asy \ qper_qpar.asy \ sirius-s.gnuplot \ sirius-m.gnuplot \ sirius-m-zoom.gnuplot \ traj_n.gnuplot all: all-am .SUFFIXES: .SUFFIXES: .asy .c .gnuplot .lo .o .obj .pdf .png .svg $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Documentation/figures/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Documentation/figures/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list sirius$(EXEEXT): $(sirius_OBJECTS) $(sirius_DEPENDENCIES) $(EXTRA_sirius_DEPENDENCIES) @rm -f sirius$(EXEEXT) $(AM_V_CCLD)$(LINK) $(sirius_OBJECTS) $(sirius_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sirius.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile .asy.png: -@ASY@ -config "" -render=4 -f png -o $@ $< .asy.pdf: -@ASY@ -config "" -render=0 -f pdf -noprc -o $@ $< .gnuplot.svg: -@GNUPLOT@ $< $(SVGFILES): $(SIRIUSFILES) sirius-stamp: sirius @rm -f sirius-temp @touch sirius-temp cd $(builddir) && ./sirius @mv -f sirius-temp $@ $(SIRIUSFILES): sirius-stamp @if test -f $@; then :; else \ trap 'rm -rf sirius.lock sirius.stamp' 1 2 13 15; \ if mkdir sirius.lock 2>/dev/null; then \ rm -f sirius.stamp; \ $(MAKE) $(AM_MAKEFLAGS) sirius.stamp; \ else \ while test -d sirius.lock; do sleep 1; done; \ test -f sirius.stamp; exit $$?; \ fi; \ fi # Support for GNU Flymake, in Emacs. check-syntax: AM_CFLAGS += -fsyntax-only -pipe check-syntax: test -z "$(CHK_SOURCES)" || $(COMPILE) $(CHK_SOURCES) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: hkl-5.0.0.2449/Documentation/figures/qper_qpar.png0000644000175000017500000010231513237020466022075 0ustar00piccapicca00000000000000PNG  IHDR^u 2iCCPdefault_rgb.iccHgPY<@BPC*%Z(ҫ@PEl+4EE\"kE t,ʺqQAYp?{ossp e{bRɎ(tջ{i常r)teJOYLgWX\2XyKο,]~ )sT8بlOrTzV $G&D~SGfDnr&AltL:5204_gK!FgE_zs zt@WOm|:3z @(U t08|A $`(E`8@-hM<.L@ށA2@F 7 Bh( ʀrPT UAuP t݄84 }aXև0v}p4 ^O6< "@]p$BV)GVC!Bd h(&JerFTVT1 uՁECDh2Z@Ёht]nDѓw aa0Θ Lf3sӆL`X VkaӱJI%vG)p`\.Wk] p xq:o—;IA"X| q B+aH$͉^XvbqD%iRi/82! L ے&US{1O,BlXXؐ+ NP6Pr(3;Yq8WJ)Hq"HJ IKIJGJJIKa8y"Ֆ͒="{MvV.g)Ǘ+;-Hז,L_~NAQI!ER¬"CV1NLMZ)VL $L`V0{"eyeg :JJU*[5JLGU殖֢HVQ?ާ>حѩ1͒fX9֘&YF3U^FuX6m]}G1Չ93 |UҪU$]nnCM/OS~~>&   .y݆i񍪍&v\mu:ƑGLMv|253Θ՘lOv19|y-Եl^Zä́UUКij}ZhlfSoV6¶vʼn伲3صs-[{'BCSGhGfhgWΣ<lqu%V>svu.֪MZ26,b&*4r**4j:*@LMLyl,7*us\m|GD\bh$jR|Robrv`NJA0"`H*hL֧uӗ? ͌]֙ՙdKd'eo޴gTcOQ{rswol m ڳMu[NO [A^i۝;OrR V (m? Yrˆ[EEE[?Xި%%Ga%oDDiNe̲²7Yn\^{p(㐰­Rr_bULp]u[|͞iU-x4:zccǞ77Q'z̚KZ!'lsWnk]8q/v=s}ٚvZ{aԱC) _}ABEKr.]N<{%DƞWzuW8}nX8[[Mowf[@;]wv8d3tyoy02*|`a׏2-<>+|"ߵ~o /ۏ?yx??'󟓟O)M5MMqb݋ɗ)/f 櫳/ M^̛oy=}na>|ZZ.V|R?B, bKGD pHYs,K,K=tEXtSoftwareGPL Ghostscript 9.22_ IDATxMldkZTG1 # fRHDM6YFY ֈVQ) -J 2AIEB0f{Ȃ1>YvvU9,w{u-=E]u+eDDToU1yek?z'?M>ObQUE_=՛U'xAf7(kq)F%19<'1~el: ^?,OF_?Ưc$""fob)6 R=""=51>mTQUE)MRQ@W R=PY(.Q@R[BS sb7TQ@ R=%F}5jnr<ﻏR=bT_zzzZ)F-~>@R=PYANFo;C72yz<kLHu\z^Dg~~z7f1~e{@'u]{T[G-ƨ+'ӏM\U]ߏ R@' R8T~0!@V&J +A )J +A )J +A )J +A >5o++꺮>S|sńTV'H=$>SEzH6l +zED > j>_5+{E'XMQ׵zPRD9@ӳ3z_>]xR}uW}j0zlu9H}j4qyhREĽ8?#&z\^4r=R@R=S}jՊj4zQ)HMa;X;zpѬ݋"b#O t )x7.띞FT `UT<:{ꋏG +{=RZDY4E^Dp E_ t >_E}K#)""Fէ'X oT usUc^ORDyhُGѬF;kI2!oVͅi*jyB*>>u*zLN4PE4jEaDe^ZDqDWᩎ(ǗE?Yf9/MEG3uMht^(ók}u\LIRT2/PKQڋX|SR@;EēL4QQQSR4%uڼmUY U3.2O:A>S7i.hoTOhTؙ [.GU,^_O>W\~hVRˏ M/7婨똘zbgTDn]˟;]|,LC 3VwK_ʷ8I+GAUœӋռNJĪ-ꕽ'wYK Od^JSZeytRJS\k?uCǞHOqxQ3Ʒ ܢ<)}-ͥtm姿'i:ꪯ[^Y4ʏt`ŏXƷ[:%zB**\r'_2tݯIL"& =Qey1i: 艭R{ @vO[.F%؉ .tUAhN=e.I `7t uW=o>o6gD)`XOn,ي͆ d|IwG%ө;nວ݉Q@6l Rd%H @VY Rd%H @VY Rd%H @VG$I}V5*&Q-|`ҼFY@?{~*"Cp 2EӈYi:?ŢxJlӼ&ZQDU?<Qv VE<|>Q?wn/mUu=j@A 18=YJ` Rktr8/}CTU1xp9z'"}#wGŠx$8m`-jEqZgx{oz$nR 2dM1"\lɶt'2>k1MG5zv 6"_jk]ZUO~Y+(:(Q eڼp3))e?_xo1 "&JEIZ_ )SR~t2X+f]ID]OH},TUKhj6EmxGbp6UGQ+{;Jעyyy4[ۃ;U?7Aw̋h+|tޡ:@/ŅoAqvTam/eͪ^MGǧӳc )` Rw(ŷ{?uD`C{Y#$tT}~TFmϚG Q0Q ;#k+3Y|SI]G8>㈈{{uğ/ĨELH'#h^n6Ajool]/-GGoq|o> [:>HQE1`pV`T yu2?4"& ?HD|""r[jލu R(Ź))2e2﫪ޣ0ш8s?; )` RԬ=41`t6Dfu/i{`:k>"["2HM0Mj&0>N jz?d:}j9w ǗtTaD 1c0xugOJSR[eF39ϯɤy&Vt|qrň84Uó5p/aF{1>1k{fgפ#nDM\Z|^Fk{E<|IwIIQɤs R+:0"F {{//E˱7pu|~Q WbM{!"QuDÇmOm,`G R7trp/rҋ {QECIX p(z+n# R1Em5{QDD<|AIQOX:LY;HX:R!VVa])U5=O5A `{H)Qk!HܔBڐkiۧ=Ajc)*iMt R7a]`m)6ܿ8""[>Jڀ&H|`=f  ,)H=Lx,b!4e]`#)eQl iۧZ"z'H,JzRl Xr@25Z!HD\ z'HD #Aj^Gnj6 RI{; td(`R)PBHzd!Hmȃ""ݖd#Hm> 4e] +A ] A ]Z!Heݔ Q{m|1} $Hm z35)VRnIwGum](7 Hm#"uԆ RIZ'Hz;FvG R){Bvl1}sh)`7t2t.A Қu= Rnϻc)`Aj^G<]S)`YA n.3A ni]Q!HmЃ"".#ӶOA ^If )|!&(`GRvY}c)`q]`Rw"cA )`n  aM:9i  u=~* A o%Hc],>lm]!TͶA ]X?FmT6OGu'8R@f{G a<[>];j:mܝ C RzOU)lA >z[Eͺn+=A*SF]i*Q[E+e]`R@wYJT?}zt2oI>ul&)` R@7YZ=){fE\D8+{nI!f:mIAj>o$Hݒu=%Hݒ)%Hev}]`GRR\v tu= HP{z[OqrAˬ A*}A k>) HKzbNujоNvY{t*[mg]i.-gB hOUYAО4e]`R25ﭨA hGN[= R@;,A hGZv Ƀ""@Xiu=&HYiWY6,A ˺XaOZv RzplQ-{mڕxl )vu=R@8#HWU8'Her㈈89i І4e]aY޺!HpF6e,JzZt 6F6'MG+ lݝ l!A z\Aʬ>.1A*;Aa]kRf{A %~xQ%?ORbuī ur"HSd"F[^i*JL^xA Xs R(z< lּ3Rz(z< !A*{m6#? KQi)<]RY`TF<[>Sܺ7$Hwc]o/} ~I[m`LHg]oR2p{6kwvW*5.8#YtL1&8x*IJU*k b¦*DH1 c!2+{ Aw?Μ;==3}Nw>U]g^;s| EG[_϶r06 TaRT~+v;[K(0f)`?z@֭X]-f\ H{0)`q=&@ d0!) m`r= ֎j4 - ,fD zL@0EzL@0)J¸&yg\ H<3@Rն#"bcB  P (lk(&Zt@ABҴ FJ+W )W(@ q= $yd\ `@)7(@@izG++6`R0OB` `XHVێnB/(TA,(q=JB ¸%!ya\HnZ@ LL+z ̄jd\o]H*Pu+"" .铇PB)Fb)Fq=@ q)6h@ M>g(@ I\hp)& H@.]Ӡ1LH@SȻ0R0-VV(@ A!` VmGDD[p!q=f@`zHml\喏ۅ ˻BQHA]Q֎΂I/SZt ׳q="/p0tHA!q=f@ ,1 HA` 0Rp(#z(q=f@ ( -A em0RknEDZPQ)f@ &0RP6q)(zq=Nc0B)(zݎvM(L5E04)N&@ ʢζ(f@$t(z̓)QH͵g(8TN>'SHE3HE3HEQ)85TZ""buB8|(zpj)8<9g"ʻ@ +b)#tG <(G j[L1TZ"b "*!TI0)q= q=q=ʨȶNe@ Nøelf[0eRpl; FB 'f@tRzuH@4q=Q02)8 8(*{`JT.j3G5iZtgCdB(q= 5c"aq=9fm-۶Z3H úlk(  9@ Hb/z0vRHƸ@ HA.[Z*q)Q`R%j݊?z^l0R%%lk\inG4EWp&բ Rpu=J)0j4mShg!zL|\O LHFFH1q=Q01J+E0ֲmUl0GR̯n7H1,fH1@!R%j݊2F UbDc`\ #b>?RuH1(ẑv;ۮZY?Qzu]Lj5,Y^h6RWcc{S^i-]l2H@j@)Ȑ,2HP]t 'HPRkk2KqV:s 'bYJE g@)mn!bH1ی@J,M.azKK#*5ԅc^Im@ٕ#b6f[zP:)fq=(-TIZ"bo]n(@J.U8zPj)fOZJ ذv.3H1[q=)SH1[1׋TRzPz)fq= RRtem-RH1l; JO l3_Z*D)fC>W[p"TIZ.azz`*J.og7nd7)P-0zl]b#bQ`jnQ`j^ָL+j8Tɥb%Ɔ` JO u|\O SG t2SK t2SK Ubv%q=j׳@*_صmTH1]l; @/fTlPFvDSt'H1]qz:VVP RL|\Owm} N$bzz֏&bz *Ţ (z03R'z0CRLz03Rj53A EzVu#!*VVD1skcQ0CRS`|\O 3C E#܌HQ^lm]h'HQ^`& (n׸(wG--[Lf %iz&om-ӤݎHSPz)ʧͶ`& (|\Q0Rq=ikn]d'EW0!` (,23K 3 IDATEyz` (|1V:HQ`(|v<_]ϸ]>ye\(@j^ "WLuOm.\g$G^^l\Hͣ Q@aR&׳~PԼ1(RƸ̗f3۶EV@jJ@ 5O% V镳ݿ5@j^QVusO 5/֬@jtV @j jg{q=_vDf[HMzq=͈N*` fq=:k׊@jٌh4M1@qRθ>f]Y1EHͲlTl#nG$n++{wP e^^l%huL#enGo{hfU>g(§|\OH*z\mQP<Ԭ2Oq0 ʠZtq=QP:P}%CjVWyX^^ߎv':}oHԏ/0yn1LBl] vo=/DDDVV٨ןQywԘjC}鑥vh}܇P &ҟf]_?+5*ƫ.pDi_bѥLMVwm7`ꡟJx&Zotb=pF]~HjoE`X5: >{>{#""M .$vB`mЩ;ȃlqg|hp~W:y|yHSO=y#zTcy~ ݈}(knt4V_Z2!IyOӱPj0;lZ RɝOÏqqi6&5gy/cս3ύ~}`J'm\;FNk+꬝NG{3~I(u@>70*"i鑥S]xמ;/Ժab6v{sqgCT]Uc/)4]{QG(pz6ˏ-Gv4Xu=m\?Qq7H`SVO}Q>O0^~K#3Fvy;z<] bxDW;&:(¨\.WVDfeE`WTuj鑥[̜Y#E1QvY:k׌y)"*lK^c"֑FN4,h-?뇅LGHC ".V뙻/:q37oW""~OGcD_~>V_~!jWQDԮ>uzu` *EODh<֋]RFwzf.i.9/!F띸]忼h]HapZR'olU.\ٌz'}~0('?7+q}myz;;cvPxBz&W՗__`<'0,Ed0~heHX_ոvǢNѥa "8>8{:/DĝT*#Iv./(`$XH;5Ne]XΡQ??n\Ρ_H۽x3c{[:wH~ Qb\{߾_oƝwn{"~%"~$bx!b8x/k8蝅YwoEnED_b} |8W8ZӸTC N4݊4zDXYD$ɒ`jH~e4FcҋHܮDV%>>זE4v՝QQy\\C _QoTN=79"4vvzىzw{]o_"n]7nZuQYwԸ2育X_gqg7ڎ" ^++ofu`hfS?"@*͈x#`ce$ot~: W,Hw҈Dv +7?H7϶̚4F/2 wO ;j)ԐQQQg#!"~:"^^D׋ى^/}ǿ//_O0W̏^DDĝٯ~ Iovh6j*:ct4;s pN"lED֥{'F~|3kמk̎} 0niSVo^,Dﵣ:E|*|k#xaGEիQn1՟z>6ҍ/nS"z]RP"w#;ο3٦J=>k`Q g+A݉z jdg{oEIow>IWt~`8@1ܝ=id|IHӯDA6]k$h<)PjIDwoGf nG,l.[?ݭwG~#SN;}=b>z:l󍍡@_x4"Angt'KCih?;;r1Wh6}{N' "^hw^c:FFiڋ~"IӋJI j,T㱰XFf'qq׏HEct{V~lzy1z^[H+iN?O%߾OkGE\fp u-YT~˿wҴ;#"$Y_WӹʥXX'ofHKQ}c4TNwG@3mNj9HDߩD7*j|?iz%{baRjFuc}wy4$-/g]ڵk>ixlfϑU׮EB읓8xdc}3@*?.%奱'&doýL_HqrhWTD /Ȏ=?p.aqb2x^!|hI\t)/_Ȼ?/ǽ]}{;{Hf {-?oMa!&ix4+W"$E%ciFR%n=flރ~#.`b%*v$x%,,DR $գëVq{b^cI{{._D޺oJk{ӸtXX\_{~T@Px::l4ppA󈈫|UT*qϕ+xr,s)r_y$IT[e_C;_C*oǧ>_Xzdil CtnxgxW$ɷl.BDVJ5z|I,,\{ҥoJ% UZnmƭ[_o;w^WCrHxn$ݏ$;Y$Fd-IDRJ%DD;sUoKFzODD,,,qV]'xglnu}Gf0𱭏__ia!QV)$B5.].ER56{b\r\ոmWGߋŅ襽xߏW=x}{zh?>GOpQCCq]]_y=.s)[V܉{/j?nq7jdK,ޕYL抁0v"b3$Hb/ d!*&TTAz9^?xvܾzDlƇ?-mF=ކèIr=w}Oߩ5{y5ִF֠ыo?6v9py{bDv`P$7s/'Q$ e!ԛo~%ފ'h4vECkA<ep;OwҴiQ,D_[ފx≯TD])op eM ,,Dea!T5]|)H};*I%lߎtzy+/}E}4c%8t)Ԅ։j={k???;^Vmw0N;71owFD#Z?x>kX{i-Xʠn`л%6lu#=qOQ ﻢ;[_ףl u_B=wPpOg jjh=o8:Uh|gzdFfwzhnGepi HĝH$w}'{;잔G׏t+74d{Ba#xy>RCϏKO}7c߉V҈o?.x%{׺#^Zp>ĕ%.GD@?"r>uŕzFx჆FCwI#rHߏh4vOEIDATV{1Y?j1)`vzq[v4~D/؊Xҭ 5 Cu^@#6}R6uܨްVlU^G/FWGcwJFj??qx'#Kw7FHu_ȞʬxVdg|,oyۦ$ wG Nc1"lLk=fSu(<Nٺ##h~c3O.B5"B7~}R]nuuc{QǍEDԯ>xi|_7#_W#GL"¨]ǧ? kR^Zkf-/"Xdxns? I}ݸq؃~Ngg r9îp{ceSR{;rp4zh~vzٹ,A6@':v_>q|wT@*"#ތsnf<}Q}yc嬫j"F&jo>WWY7ԗvjdQDԶz׳Qzo6"9;ӿtl|'G0o="Fmn{4FܿQ{^5 0:KuD\W|T ZזNzj6Yh| ɬZv'域 Ht-R~)5:^9y4MW_`Stf:pUOF_Sڍz٨k֍}Cw?_zdMaԤO6=`DB̒N_Dĥ6O~vF=&YFcA`xuT06b wus\ s ^A=0J"T\ 㼆'Gqowf*~/hQqhSیW׏Ϡʱߝ#ÁO5FZό4?DԿ! _Ũj{]oW;a|t&è,tv:,t" w7G׳:xI5\aTuh7XC<F|lè8;jd(j5@#KGFEiF̡¨?=^yBk]á?n k6@g _{4W;JMGn>#x^۪p@x|])`?=?Iݨ݈q-_HV믮cѩwNFEXCPX]}Rj'Ln^DV|^}!Zo<7GzkJED^\}kOkH1 ZYÜ&|i! |E0-§"[ 8:BY?jx\dqIƨˢ.b:ˁi.Ձ@ v,A`a;w8|pNO ĬgTd]QaЍΤ0hx}¢ӌ .{X7it`:PVUGu.{=l9[0=g(8cl?wTqG:\'\^7pIϑp&8+clfamGudxx:f3"M>5N'8Gۖ5F Gw0]jtQ9N:*)~)BuW n_ <#{L0*"|}tWC T8@9`RL@ H0Q)&J D (%`R!nQ+f Pl5, RMH1?H R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH R)R)A @J %HH-33a罧Μf:y{-Gz9o uֹ)u, v<~>fw/b IENDB`hkl-5.0.0.2449/Documentation/figures/sirius.c0000644000175000017500000001373713236600666021075 0ustar00piccapicca00000000000000/* This file is part of the hkl library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2003-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel */ #include "hkl/api2/hkl2.h" #include "hkl/ccan/array_size/array_size.h" #include "hkl/ccan/generator/generator.h" #include "hkl-geometry-private.h" #include "hkl-trajectory-private.h" static void hkl_geometry_save_as_dat(FILE *f, const HklGeometry *self) { HklParameter **axis; darray_foreach(axis, self->axes){ double value = hkl_parameter_value_get(*axis, HKL_UNIT_USER); fprintf(f, " % 18.15f", value); } } static void GeometryList_save_as_dat(const char *filename, const struct Trajectory trajectory, const HklGeometryList *geometries) { HklParameter **axis; const HklGeometryListItem *item; const struct Engine *econfig; generator_t(struct Engine) gen = trajectory_gen(trajectory); FILE *f = fopen(filename, "w+"); /* print the header */ econfig = generator_next(gen); fprintf(f, "#"); Engine_header(f, *econfig); item = hkl_geometry_list_items_first_get(geometries); darray_foreach(axis, item->geometry->axes){ fprintf(f, "%19s", (*axis)->name); } /* save the first point */ fprintf(f, "\n"); Engine_save_as_dat(f, *econfig); hkl_geometry_save_as_dat(f, item->geometry); while((econfig = generator_next(gen)) != NULL){ fprintf(f, "\n"); Engine_save_as_dat(f, *econfig); item = hkl_geometry_list_items_next_get(geometries, item); hkl_geometry_save_as_dat(f, item->geometry); } fclose(f); generator_free(gen); } static double hkl_geometry_list_kphi_range(const HklGeometryList *self) { uint idx = 0; double min, max; const HklGeometryListItem *item; HklParameter **axis; /* get the kphi index */ item = hkl_geometry_list_items_first_get(self); darray_foreach(axis, item->geometry->axes){ if (!strcmp((*axis)->name, "kphi")) break; idx++; } min = max = hkl_parameter_value_get(darray_item(item->geometry->axes, idx), HKL_UNIT_USER); for(;item;item = hkl_geometry_list_items_next_get(self, item)){ double current = hkl_parameter_value_get(darray_item(item->geometry->axes, idx), HKL_UNIT_USER); min = current < min ? current : min; max = current >= max ? current : max; } return max - min; } typedef struct _XY XY; struct _XY { darray(int) x; darray(double) y; }; static void xy_init(XY *xy) { darray_init(xy->x); darray_init(xy->y); } static void xy_add(XY *xy, int x, double y) { darray_append(xy->x, x); darray_append(xy->y, y); } static void xy_free(XY *xy) { darray_free(xy->x); darray_free(xy->y); }; static void xy_save_as_dat(XY *xy, const char *filename) { uint i; FILE *f = fopen(filename, "w+"); fprintf(f, "# x y"); for(i=0; ix); ++i) fprintf(f, "\n%d %f", darray_item(xy->x, i), darray_item(xy->y, i)); fclose(f); } int main(void) { uint i; HklGeometryList *solutions; XY plot; xy_init(&plot); static struct Sample gaas = { .name = "GaAs", .lattice = Cubic(5.6533), .ux = -90.003382 * HKL_DEGTORAD, .uy = 0.12907 * HKL_DEGTORAD, .uz = -159.91372 * HKL_DEGTORAD, }; static struct Geometry gconfig = \ SoleilSiriusKappa(1.458637, -0.5193202, 64.7853160, 133.5621380, -80.9690000, -0.0223369, 30.0000299); static struct Geometry gconfig2 = \ SoleilSiriusKappa(1.458637, -0.5193202, 64.7853160, 133.5621380, 124.9690000, -0.0223369, 30.0000299); /* Trajectory */ struct Mode mode = ModeHklBissectorVertical; struct Trajectory tconfig1 = TrajectoryHklFromTo(0, 0, 1, 0, 0, 6, 11, mode); struct Trajectory tconfig2 = TrajectoryHklFromTo(0, 0, 1, 0, 0, 6, 101, mode); /* move between each step */ solutions = Trajectory_solve(tconfig1, gconfig, gaas, TRUE); GeometryList_save_as_dat("m1-11.dat", tconfig1, solutions); hkl_geometry_list_free(solutions); solutions = Trajectory_solve(tconfig1, gconfig2, gaas, TRUE); GeometryList_save_as_dat("m2-11.dat", tconfig1, solutions); hkl_geometry_list_free(solutions); solutions = Trajectory_solve(tconfig2, gconfig, gaas, TRUE); GeometryList_save_as_dat("m1-101.dat", tconfig2, solutions); hkl_geometry_list_free(solutions); solutions = Trajectory_solve(tconfig2, gconfig2, gaas, TRUE); GeometryList_save_as_dat("m2-101.dat", tconfig2, solutions); hkl_geometry_list_free(solutions); /* do not move between each steps */ solutions = Trajectory_solve(tconfig1, gconfig, gaas, FALSE); GeometryList_save_as_dat("s1-11.dat", tconfig1, solutions); hkl_geometry_list_free(solutions); solutions = Trajectory_solve(tconfig1, gconfig2, gaas, FALSE); GeometryList_save_as_dat("s2-11.dat", tconfig1, solutions); hkl_geometry_list_free(solutions); solutions = Trajectory_solve(tconfig2, gconfig, gaas, FALSE); GeometryList_save_as_dat("s1-101.dat", tconfig2, solutions); hkl_geometry_list_free(solutions); solutions = Trajectory_solve(tconfig2, gconfig2, gaas, FALSE); GeometryList_save_as_dat("s2-101.dat", tconfig2, solutions); hkl_geometry_list_free(solutions); for(i=1; i<102; ++i){ double range; struct Trajectory tconfig3 = TrajectoryHklFromTo(0, 0, 1, 0, 0, 6, i, mode); solutions = Trajectory_solve(tconfig3, gconfig2, gaas, TRUE); range = hkl_geometry_list_kphi_range(solutions); xy_add(&plot, i, range); hkl_geometry_list_free(solutions); } xy_save_as_dat(&plot, "traj_n.dat"); xy_free(&plot); return 0; } hkl-5.0.0.2449/Documentation/figures/sirius-m-zoom.gnuplot0000644000175000017500000000052213211074263023532 0ustar00piccapicca00000000000000set terminal svg set output "sirius-m-zoom.svg" set title '[0,0,1] -> [0,0,6] s1/s2 (starting point) 10/100 (steps)' set xlabel 'l' set ylabel 'kphi m1' set ytics nomirror set y2label 'kphi m2' set y2tics plot \ 'm1-101.dat' using 3:7 axis x1y1 with lp title 'm1-100',\ 'm2-101.dat' using 3:7 axis x1y2 with lp title 'm2-100' hkl-5.0.0.2449/Documentation/figures/zaxis.asy0000644000175000017500000000344713211074263021253 0ustar00piccapicca00000000000000import solids; currentprojection=orthographic(1,0,0); currentlight=White; size(300,0); real k = 2; real delta = 30; real gamma = 10; real mu = 10; // points triple C = unit((-1, 0, 0)) * k; triple O = O; triple P1 = rotate(-delta, Y) * rotate(gamma, Z) * (-C) + C; // vectors triple ki = -C; triple kf = P1 - C; // Planes pen bg = gray(0.9) + opacity(0.5); real r = 1.5; pen p = rgb(0,0.7,0); draw( Label("$x$",1), O--r*X, p, Arrow3(HookHead3)); draw( Label("$y$",1), O--r*Y, p, Arrow3(HookHead3)); draw( Label("$z$",1), O--r*Z, p, Arrow3(HookHead3)); label("$O$", (0,0,0), W); // draw the ki vector path3 ki_p = shift(C) * (O--ki); draw(Label("$\vec{k_i}$", .5), ki_p, red, Arrow3); // kf path3 kf_p = shift(C) * (O--kf); draw(Label("$\vec{k_f}$", .5), kf_p, red, Arrow3); // Q path3 Q_p = O--P1; draw(Label("$\vec{Q}$", .5), Q_p, red, Arrow3); // draw the dots dot("$C$", C, p); dot("$P_1$", P1, blue); // rotation plan define by the rotation axis triple omega = rotate(mu, Z) * -Y; draw( Label("$\Omega$", 1), O--omega, blue, Arrow3(HookHead3)); // circle generated by the revolution of P around omega triple C1 = planeproject(omega, P1) * O; triple C2 = planeproject(omega, P1) * ki; dot("$C_1$", C1, blue); draw(O--C1, dashed+blue); path3 Pcircle = circle(C1, length(P1-C1), omega); draw(Pcircle, dashed+blue); // Ewalds sphere surface Ewalds = shift(C) * scale3(k) * unitsphere; draw(Ewalds, green+opacity(0.3), render(compression=Zero,merge=true)); // intersection points of this Cricle with the Ewalds sphere // and the arc, ATTENTION problem de precision lors du calcul // des intersections. Pour l'instant ne pas utiliser delta > 160 triple P2 = rotate(180, C1, C2) * P1; path3 Parc = arc(C1, P1, P2, omega, CW); draw(C1--P1, blue); dot("$P_2$", P2, blue); draw(C1--P2, blue); draw(Parc, blue, Arrows3()); hkl-5.0.0.2449/Documentation/figures/B_b.png0000644000175000017500000003331513237020222020556 0ustar00piccapicca00000000000000PNG  IHDR ! 2iCCPdefault_rgb.iccHgPY<@BPC*%Z(ҫ@PEl+4EE\"kE t,ʺqQAYp?{ossp e{bRɎ(tջ{i常r)teJOYLgWX\2XyKο,]~ )sT8بlOrTzV $G&D~SGfDnr&AltL:5204_gK!FgE_zs zt@WOm|:3z @(U t08|A $`(E`8@-hM<.L@ށA2@F 7 Bh( ʀrPT UAuP t݄84 }aXև0v}p4 ^O6< "@]p$BV)GVC!Bd h(&JerFTVT1 uՁECDh2Z@Ёht]nDѓw aa0Θ Lf3sӆL`X VkaӱJI%vG)p`\.Wk] p xq:o—;IA"X| q B+aH$͉^XvbqD%iRi/82! L ے&US{1O,BlXXؐ+ NP6Pr(3;Yq8WJ)Hq"HJ IKIJGJJIKa8y"Ֆ͒="{MvV.g)Ǘ+;-Hז,L_~NAQI!ER¬"CV1NLMZ)VL $L`V0{"eyeg :JJU*[5JLGU殖֢HVQ?ާ>حѩ1͒fX9֘&YF3U^FuX6m]}G1Չ93 |UҪU$]nnCM/OS~~>&   .y݆i񍪍&v\mu:ƑGLMv|253Θ՘lOv19|y-Եl^Zä́UUКij}ZhlfSoV6¶vʼn伲3صs-[{'BCSGhGfhgWΣ<lqu%V>svu.֪MZ26,b&*4r**4j:*@LMLyl,7*us\m|GD\bh$jR|Robrv`NJA0"`H*hL֧uӗ? ͌]֙ՙdKd'eo޴gTcOQ{rswol m ڳMu[NO [A^i۝;OrR V (m? Yrˆ[EEE[?Xި%%Ga%oDDiNe̲²7Yn\^{p(㐰­Rr_bULp]u[|͞iU-x4:zccǞ77Q'z̚KZ!'lsWnk]8q/v=s}ٚvZ{aԱC) _}ABEKr.]N<{%DƞWzuW8}nX8[[Mowf[@;]wv8d3tyoy02*|`a׏2-<>+|"ߵ~o /ۏ?yx??'󟓟O)M5MMqb݋ɗ)/f 櫳/ M^̛oy=}na>|ZZ.V|R?B, bKGD pHYs,K,K=tEXtSoftwareGPL Ghostscript 9.22_ IDATxp]W4fŖ̙wmu䨐f!J($T@~p)XLa3CR $r bHM?k='8p-`?fF#G#~cF?Z*w=~?J4jUC4~IJ.^xc8@lƯN%dnn.Io5U99/^~\.\0`xNmp\z0N|lC 2{l6sҥ$3??!8@\j8r"U"Cؿ J-vӿs&ˁqTUmۚϟApz17,//z\xtRL}b޹r{cpeeņ# nt?NJ:7vF)m(eC CX(Ξ#88:t CP(ξ8l6r߭&-Wf.]`qܸ閁h4277w8\]]u/f 6?~MsssQ`8sssIl6`ݴj"#Q'&M ^ti؛| qp6#FfyˋRWdaa&0Yr{1p D @ (D @ (D @0{C8 mvGzat:u^ALja<2iC Z6Q˦eE*O=a< c`(8;;I5cX_9T*VΈ#O?k[XE8#+++v;r@֑#h*?^V|t(kR{#O<+$| #oo餿ؿ@|G$7j>я#JJ~ +cfIw@ɟZT\@vT*Ǟpn.Pg0 9t >vSVRST?86FЁxZ*e!vϻ:T }?VJR\A!PN80O=@޴Jz߱w@?ṼCD#i[[˰<~/Vw1wPG>ѡ(ɍx|8u ħ~&XT":P V[[̃\0y T:q΋T+J>я X8 nSfcf -O>g}i6t333TZ>k|7]nM>õo >;kW^ɇ>]_޿4V{}@ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @ (D @dն=ƨƂ@d-e)IRO}cbv5[JjYI` D&Z#,gyhԷ2b\LZj\~,r. D3SF=+LyJVZ@4R@dj C؝3@צ6![F 0bflRRvBNh`zDZ= r2D9Npr"I L[9N@d"decp"cop0p"cO ==r=ڭˍ?ϋGX-g9痳,Pc2bferSIŘ'KԊpFJ*q8I6e5+Yb0C R+?4n`HVK-td{$|{05y13 "qI/f78fv?f@L 4i;񠫐ݮ@_|ҿe7G I8"g^9{*&Ibf*\4(8y;,l_ L 2[SOcO\[mF 2u ܚs(D @ (D @ (D @d,E=k0D@e.Q ȈZ~o|["#S7=gԇlHJ'^?/xmԇl0]jd;'LN}rԇ ȩz/[Wˣo]^|!_dԇ ȩ}_-+JN26$?gxԇ `t#߳4l&?>R#o~4=t{m\͕/kk=P&z/]IN{0٨n՗`13T $ RHo;W}RżKYK#>Z`7`-+^ޖI<ʃ_P6*Y~-/%/] D{, xCyuLH6:yzUa{p"FoJ~V{둻箇Fw=r+YxH؛@R.&MRnILf~0iϴ\r6n(#fjY+Hopf w'y W~ vYe}z֮]KZ'>cn "twwAZz{ޙ$$wi#ohFi$` L+ e` ]-L ` L;8h@ '1Z@RO=+Y1Z@Lo@2DeT2ͦ:n6h r ~.e!Se7@4ZT2&f*h"b# eC8󁸘$Fu?N6Z83FGsfhhd -ݙ De9sh pN2@4Z8}cF1h 0cF3vh 0ZcF5Vh 0zcF76_14ZFFj4F}CuX-f120jdqQ$gHVWVzqp)K8?#YALr`pe*"pf_$ x^%iDh /˗o>`Tn\V>d9LJd2P2<*0*[3HSl63??3Tea/saA#tO}mLfK.enn..\(vs{^zED.4Ro$ 0Jyhxk LM+vJ"{FÞj4z&8l4!0q$bz__eyLi?NYL@tR.fh8!0B]}|X9774Ҝkf~u>Fu)4??Hx =T|3IT;/.^$8Lvl>7_FFjMei`O;2;d7^ڢk1nj3I oC@a@z///vk9~s=wRcA٪ẽPԒ_[=~V\2cIkOo8??ӈzid)KY] >'{*"v#,g9 YfuC`5ްh>S~LSN'PF㦽 kځblh:ݩy"wB>?g?\^گȣ'ޒ}w3WJdmgտJkZ%|ҨrIߟa]ߚ6U|^g>O=sInN>Ofy<_@g{ܣs?JZ>駟Ʌ ߝ̦ZlGvt:iiyO*6-90~s9w[f*̤Jv+m~6s.sJ^ܻ7K2/Tk6STn|b?QZj]f$x~t+ IDATޘJj/}| n^M_Nk׮lo L33ՙܹsm9wwfzwf+T67a>G>/f_媝kk׶ðZnU*}򓿕O~SQ.Wv6[yA;ͷ\A?va5??$t{2?<쳟N?G,VaB77N1jɵZ:3=o=wl=+Ͽ W叿5_9޵In'jvwMI33TM:^0~w}g8zcE |sssٟVIWv}xoͿ7:?y?L<ȗw~;Izw]yܸo}tz/!;ުfol~GVnK}żo;17Ɨ7md033+zv{xcFpffzh>oq$֞xB/ߔsn8_S6͛Jd;)$NL֯'W_{wuݙσ>L3v+N'n'nco<_?֨JRI֋J*ncTV{,VV*v:If]$V^dn;o,߷~a'`O/>pvvvb_=GLt.'IZk̛'z">0Zm%\s7Tumi6m}o-/r*;~=v+V+N;_{~{RI1Vswlߍ蛩TznRI7iBHgs3ln7KKy}]Nb̻c^HpΔ^ꏈݖ; ɍskzJ^k׮fmj^_{7°0+G907^s>w#n67sʋr$_ /t%33;jmdff&v'N;O>:`<ͿT+^w=N;N'v}Nnv{}k3͍lnldʻ~G=;< ;Woyo~<333I%N'i6W׳ׯecc=ׯ_Z_joٿ|S 6x|~oomgv w' =:ox? /&;jzG_,mY~5(ltnV4w>Ol01>~.kW o \d+z[l~WzxcSK~Aϣ09?@>?{"vvKKigī2/7'˽=z(l;IyGuR& $y?Cy,/WoO%Sx,_P~^ϗjsqq zF#Y\E ]_[Y?0H ㏿%6C9qL@<d>ei)y{z?L/tUQVOR8A{Hc?eaaupgI̅ 4uvܘ||npvn=y@<ՁK7x #c*8!Zm w4\ti X3n~F͡Z-\rⱎdt$w$:8%.\Hʮqϟ/>[ګY]]jsѨhdnnD綅2yI|8eZ-Z-fXEnQZlvp mvj7F՜?0TCZf_?w66 ģ. 8p u./ވ ٩s ~ /x;4]<8=j&Jh,V[~A4ͬť}Αsbv`yo{]| p?kYX荚wnx⅁rj pϝvqco=bp<vS6IzxSfsiѨzﻱ|.\p_ pݮ, aqAתŁmc;ݾ?YYWyi|90A;//xRKsuѲ8N\jڮwLi9ti8zkq\1Վ~a_8NoݏÅ#w8d,-y`z0Tfs{ `4ju(fpsn"0DYZZ{eee)'q@801nNT?1Fp;{ʊ;ыk`0{3Dz69INSu5,8Zޏ"6zxP'9qqd]IENDB`hkl-5.0.0.2449/Documentation/figures/e2k_4.png0000644000175000017500000053564313237020447021024 0ustar00piccapicca00000000000000PNG  IHDR(He4 2iCCPdefault_rgb.iccHgPY<@BPC*%Z(ҫ@PEl+4EE\"kE t,ʺqQAYp?{ossp e{bRɎ(tջ{i常r)teJOYLgWX\2XyKο,]~ )sT8بlOrTzV $G&D~SGfDnr&AltL:5204_gK!FgE_zs zt@WOm|:3z @(U t08|A $`(E`8@-hM<.L@ށA2@F 7 Bh( ʀrPT UAuP t݄84 }aXև0v}p4 ^O6< "@]p$BV)GVC!Bd h(&JerFTVT1 uՁECDh2Z@Ёht]nDѓw aa0Θ Lf3sӆL`X VkaӱJI%vG)p`\.Wk] p xq:o—;IA"X| q B+aH$͉^XvbqD%iRi/82! L ے&US{1O,BlXXؐ+ NP6Pr(3;Yq8WJ)Hq"HJ IKIJGJJIKa8y"Ֆ͒="{MvV.g)Ǘ+;-Hז,L_~NAQI!ER¬"CV1NLMZ)VL $L`V0{"eyeg :JJU*[5JLGU殖֢HVQ?ާ>حѩ1͒fX9֘&YF3U^FuX6m]}G1Չ93 |UҪU$]nnCM/OS~~>&   .y݆i񍪍&v\mu:ƑGLMv|253Θ՘lOv19|y-Եl^Zä́UUКij}ZhlfSoV6¶vʼn伲3صs-[{'BCSGhGfhgWΣ<lqu%V>svu.֪MZ26,b&*4r**4j:*@LMLyl,7*us\m|GD\bh$jR|Robrv`NJA0"`H*hL֧uӗ? ͌]֙ՙdKd'eo޴gTcOQ{rswol m ڳMu[NO [A^i۝;OrR V (m? Yrˆ[EEE[?Xި%%Ga%oDDiNe̲²7Yn\^{p(㐰­Rr_bULp]u[|͞iU-x4:zccǞ77Q'z̚KZ!'lsWnk]8q/v=s}ٚvZ{aԱC) _}ABEKr.]N<{%DƞWzuW8}nX8[[Mowf[@;]wv8d3tyoy02*|`a׏2-<>+|"ߵ~o /ۏ?yx??'󟓟O)M5MMqb݋ɗ)/f 櫳/ M^̛oy=}na>|ZZ.V|R?B, bKGD pHYs,K,K=tEXtSoftwareGPL Ghostscript 9.22_ IDATx{sYHe{; ؤc 6i 'l%u%ydɥRYo2߮}۩J%EsI(\z{j3Ne<3ے?#][RuP=}tth%&`7Nw2;w$Ikя~pT2?ّEyV3^+.]?pTqdPfYf3ܹW^˗ć?P2o{?4MGZŀr}9眀TOFtvN Pމ;wnG$q]b}rڼ#%+OFDN;yeeթ̲,\+._X2'L@ gOrOv>iaܹs'._/_/'`e|"" 3(m;ՕaމK.ŕ+Wu (Xwğ'GeYiڎVa$I%!8Կ???=P`d'LnşS7u߼QRX$k8a?x?>h|7}s%/_WXW>|Cկ~%V$VH7P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P (F4| ;рroo/X'PnmmEDD^?ɇΨ (777#"@H XtCш=~lnnBKxXA _x''VA)28vww#"bcc#nܸq'RAYՄN$NG7P%P4h4[[[љ/9^Gш (FEDg'ݖϗl4Q "byy89 wV888ݸqF/UL敔QUR F/|ݍ~zlnnFD TSe`z>1^qppʼ5{sJ`^w^=9-T7nnn OŪ'UGǵ1[U>C@ ,BI`f(z_aR{7p@i (:wgggLeqsMtT":UQGNwlFQՖ<<[k4Jb8ɼzҌJ`iyEqI`.3(766Ƽ"r{{wl8l4Qc?_zZVxonnfNՓy8yۋݍ^Xypp dY5h4ћ#9ܮ=[[[F\0IeYً7~7'r/^o,*{I%ŴVW|{i7nPD$jYHv -,:eD㯈ůگWt\t)/?g?IRɟNW|{Ddo.8ҩo.oǯ4bmm=/Z5*jT*HJ$I=;,˺wt p12"o#~W5DkkjT&pNhW_,xֲ JLxЇ>ŝ;w"hQV{Š2 ,/]?s'~%""^?}+T){z˿-_/k׮EnEՌ8<`}ڵ{RB{UE@7Xʗ͛o6x[Vvlmm~DXb;eD'ّqjZ\~=666boo/vwwpm@niXq֛&ڽ7n܈ׯGDJ`,˲ "ZΣ^~DDlmmEV[.*ZZTcsss  Ubss3zFs=rي)boo/z3K@ގߏA%,@@y Z-ccc#cww7F3C@ywDޞf$\)`~%3fVΫZQc?FС۾#) AVh.-+TբVھھ%(Χۋ )x|JP|J.2)Qb{{;666b?vvvh,8QfP27n܈Fa>% S8 }p. (Oގ^۷D@y ϧ5sA@ym{{{J<c>%牀2`pΎN@yjގߏ}P3(/7nD0ŖlJ̧4Z[zG O#DD}K+dYN|>JVj N=n;@N_oZ^Z+iIP2U^M8Q;x H1 *^o?ss+VI@LIPo7;ɔ1_Fl}J8/L7pWmN;8iae7zV^:%sk4!F@y>ZOqLJyJUp& (Yo`O'dr\89|,XUUp(9888ׯ"<_nowFo8*UVUmUpV(Y ): G9DDī7>gg~huE_릉=*ܜVUUpZ (Y7n(wAqcxo v^p^r|-RONh%x%%0E[ giqʃʈU~>}3v~;{rr󄒳;f;j/E%1''M@ɉ3Qeޢ~/'?}ǫV*LӨL*ije4,3z~/%YgIhH9qv^UknNxIP2Ŷo)aeH>fG,mw5oXzƨv=0K 9L1|lT(Y9)qvvvMxvH.TbR;+ǚVMYT.zr؄ץQMxʛp3v~q`֧>O9IWb0 K#^oRU 'I@I)}*x<.4UU&f̿|ӎOj FgNeu[U?<y ().[ttߎenAq)G_TF}(^}ɵ?TqMQecObpwvt>N"kf$I矾'jY[) ھ|^(9,zq5Y:b{UMٓ~G>~=ߵ7fx:\3,'|?xu6tNGJ"ZъȒ,{x'ڷf{n*qppJ8VI٘%z}Eھ;{x>pPYn0~طI}=$Md;"IS-ٵ,KYlmmE֏xR:ھlU@ܪ?1o;}嘹Yz$bqv6C*L *;5^]vg͟;<8P{id÷BIOB v*%V~N"+YĽ[x},Sh^DN?ſVKe^e\):[i;[灡jm9W׺AT?b'~w#kbr8lwl _W2P5,zAe"*٥,jtWmEǾ&(9̧өg~Zre-ZY:}Pj56N|4ˢ$r@Ae]Lk[b3=-,V9|Pdndv'۝ i7ufh^{"_7#0 JΌ|ׯܪ? 'WKL';:Y'hWxjʅ7\Q9TMgrP%&?I!mQ'|i;"V 5YET#,b="D]q-⑷>&&f+%2b|9Jv_Ν;o,1G">$$$HJ~02FȈprBdY )<>~H`9Һí܃Ւ2 d5s&ףLvʭW'4PrO T1c}O({wX:xqtGQ!񻝶>=Ѹ~%o_{_\Myl V<b(ٯb wEP2&br2~}c;nśsbIPrnھͧK|mwގP]SlsT5כt *gn?שf!3˲Hv|]qӟ=G*&Bˑ~v}q{y*KNp(9̧A?Sx8g (_hSç\8@!\f8Nqp¼InI2_UEdi+_/]gf (GBX^-f׻8g2Ls&яG,F@Ʌh4boo/"|J.[OĭGǴr;^8|f (sYllEHYF:3rݼDžլ:^dRXW}:iF#[#iBbvX>[2N ws;dy;w] #׆E<wfz(P)}pL &|Gqu.5}Um-Jv7r[g2tK^09pFafeh[,'';R2ܫ6b@6zw N3%w?GI5ZY[5ͦ (#T2b,V^Kw~uGV;#s}fL*4ۄ`23Y (}tʭ؊s?`u\Xھ8/k<oS$.W֢q'kv[7CEe }cނ (?M8GPydkеmHVT9"I"$*µ\,4vw o7]d>gz VRv?]8 g |J΃`r) Dž| ^wj@[ }s)gneՔVNs'Sp!dDb[Q?P%tO YۙbPvϝE $gݻNoӴ&1ۇ#Vy܃dɸ`2,=i?5I"4G|ULVc4J}έߪ (!tuX;g0[@˲ByD9cFF'q^XeeWTN&4XAYL*&s6%Ȇ"[I놔G|ᠿ|dHN (1}c;nLݍ7nPSp=x*^w'αP^ǕҴ7p4;MTfi6Ir#w9[8&YOӽzu=f'LۣxGFG#A?LNțjG>w8La(}ollg?l;K2Y>f_ ̧<%ǬqrV3f)whR59Kj#GRzDDܾ M{!eAۇ|_ħ ';yw~͏D +pZ (aSPUsnx,_eW}Ci#jʈ\$?"bܦ8ݝiӓѪ,H &lk#s`HjFTO"wGC)-ߏ}[mN;`J@ 3OyuXs\H5XK*hd,,^ŷoH46knݾF<44؝$V$ob2?0fIJ%:nǝC!H"܈8x$d5b[Qs}A@ s*'NԻYTתLCJM (ݺp~Ѵilמ3QmMq&' 'gj.~3!VMNny،vi6R}'OG<+?7TnnYi&O Iv3򶭰t93ǘrG4Ƶ/rk ݱpp<`wJW.nύ~,zoߊf^^[q;s&9pLcƭGaJι̹Nr>e2c2)^$es`.1M[В/_<{VV+Z>dkkQT?_?؏ p i%,PO qMf5ofinWX"e1||Φ8#ZQ^S,Y酔kΛ"Kz_Zb$i=6[vZRyo厚)9xѧ,PCp,4=u}>|niCl\H89WN!egeC k!^{"a>գzDDN}qw}w_wdFqV (Djrр2tiyyfN^R2F#,,Ƀii h}\ ;3'$kEyN5W(Iz7W8cvkBўs}ʓ "ǹLTQvww\J(|JsCΧ~MyЬe8NP9/˲hgԊrvΝhe ΦN_wZ@dOr`F8Iq?^kww]ܪsʲ,;rRP9}{չk^e9lvil)lPB_5׼]'(DJ,3gβNqe)c4;r.>ǩ{HO$)̝̲^@tQ]߷ҙZ`\t9sG4ɕv\Vgz^#-T\Rn-{ *aͲݷMAyLB%)^P)2h5ULOWL.stّ (-!;|ʅagNDd8n=i 2J2y,m=kxTO񷍄 G.[uzׇ [Oq|Ns9"s&g:+qQ (38|L{Ve%,lcZ7礀8K<2yOhwuvs®CՓ#oﳘP&Id-"IZ\^]JPyC GUS6!ḃ#z[%C_Ooo_D39u9GY9'S8{DP pMj>ǿNVSF\GBiR)ŏߏ4oA,ivgji6;2c,; 'ǴvgY}Z+I%w6ƙRSSv[ӇMկl6[i%"^eѠu?BI2,N#e4ۋ$,J@ |7n 3j\K,=r9GKUgy {Ne/Pf|Z'_\qSd[fp X=o=|q֯t6ƙ5,\fqwRD$۾ev֎ۮlg &J|)OH=A: ?#_}t*:MA$6ˁ(P9`q䱮4=Yc>U{[(Fgs<й~MܝD Yn \L ʬVO^:99V6q|A;K{Ad;mm~JdV)uBb7Hn?0~>,"*YDe&6+\x(<9?O_f9l (3`~MΫ=y&Oy-P}ھO܂me/bkwD zZ(VO< ~eL!eD֢yY "⑻'v>ջrҏepQsOϥ_!HU/|16*T: eyS'C@ @q&&ldS4O5e;MڤeV|Y[m݉ەjܮ 1f_wS[bPYTh6ej>9!zڕ$Ys4;<~Jοv7DMz=Fl+=jDʵjt2n#"c 5K.yEe+z26ˉPE4TFir (1`Oşwsͣ*f3);*LmqF:8 )[o>k}_N61zחׯDu]'&V?@m[1s+M*s&T/cRjuN;i\ܿΝ+wU#DIt!G,oӮ#*i<<셏4 )(+o~n}N99*JR%ݼ2b4\&8㷃LP9rkͳNeQYУi΢[=ѻbߴٓLZo/ rҺ1D$+zG*XKDt$zaZ3l i%y)J3iw \s$Vt?BZO gZiSF^x3 # _"~Ə%pQf&8q ˼N5̯o?g,:t$6Rx+>ݛ=Y &NPٹ}tgSڻӴ=sI0 ;zDdVZkq׫fBUɋKYe̯D^I'_]9 wfn *s O_r|qmC8ĂPᯄ2NN:*=F:v}gc 5lvy)ϱdݻmȽɬ kc_VeUbz%Ќ;F2WqʈNfkmBPYdIYk=1r,5|ʲ(mê. (⿘#X'sAe^e11GGg\e:yL;{qNFDCOb ,T8vq j\nH1iθkMz H"b}MwP榵}GxgݟI:AeD'li>;Տ6QE*(ԀA@ DN֏y'PJDR?+i`PEg$Yw|eLga:OǪ웇0*` Jaf0̭BIN" yrZI"pleUlӺTΞ|y7^RqpRS EW-kʷ+,%~=@>\/aӔLPVI:{OIfhlp?~,DͭC9f^ /p-.^b E?%=0ljeQU,pVOٔ6{A:K596'!9پmV|Ȓ|hzuD; |^*n tLޟRY5$@$TNNT8z9XS̭*փ%0 s70NJ:9Y' Qi.-MR[eͼcL8Ż)A),cN~3Od@NPՋr T թ]O`lxj kdЄ,V^֙r} ʳ2]kX(E$ Q)A~5/xUTUr])Jsg}&%0GBK0YIr2dJq4f^ZT1M^N=\cn1>E*ReݓwF6d_srIYRzZRFro֟ i`l|)4%mu*m(mCziu 8Ey'½%0G ՓaEi+'COi jrvu$O9iy}4}/s1iNNPsJTXQ:j59;$SBLhT~dC^5&Z 1@[ÍIʙS|ID%ЊӔ);30w,(9re,*imܺ}T?=s,&%0 O0LT9Ð6+U:.")4j@[Gb6eޑVVgN,&)/R3ϖ݌=vα _m0huNH$e vͥ,d fgYf"d ddX^x}3̝J9vv2dkSNWBILTʪ\,9єcΒ$ QhJyi~MT%% '6ai]EIJI8ij/J (&cܶRcX)[j/Y;,(93UN1POD%%Ю{ԛE2IPΊt1fV\R%&ךRRIP #B h50í[ր`)DvҔSS C z$%a}&i%0?<}3r&QMNٰD-S9r4e6}6KT.0h3{U,YTj!+ښFؕ:Jad2@ rk-ONr)!!/ƥ  $F]pnPs5 /v =  P͹BRfLHQ~'ڑ ô%0ܟanOJr2d2e}KP5)},[2XcfRH9|Oii֒#!:"% (oh05}ؙ.nRu٬6ݾY -a3_2In28ur$@'5>/[WP3| e~h,_Y>]aƖOזPaB3;0a[O0r2dIVٷ_FVC}&rDӵ$*9޼ mDu}&4Elֲp Y4p*T#;ohlmL: 7 JKm 'uhd fm~;H\AJQ/EنsKT.ԟro"*]4xpJ)U  Janie\60/_~7]{ٶd36IATM;{rJ`vA<麜4eOFؐ개POKCnUF:Ysy翿3ۡξ&p/,@%hVJON,3RKjP4Nzڷ{@^.]y7G4L`"%pe]rn*%  (`LDnPŭQt\TRkX(7ayaA0md[\NNsHlTM*^Fʥ)X+]n{jyX}zuSٰIdwg%l۫رAo›'?6aoj.MvhN6OEf J" Z$=i+Rs\p)Mb4xeD.TJ4ltz{1HʷO;ݎF:hm.e$eiS.F ) IT`"Ԗ}4 4ϗhzۛeJ+p^YG{Z2;k '4)JQ򰜣L2 ,XP2 s[e˗'!'$'[geֺ5Z 9BQhtMrұ ʶ癭7uLޮ'Um9$cmb&p{'yeFC_768,`-cmVN6%+A~^ueR$ Cnm"SN]#(3fIUn5<9#E3ğ~kG~;30̲aA0m dI.'aܜr&99XwHń^=$**FؑS˹˙\e򬾄Iqp cSȷs_ Dߛ'蟌qgqRye.Ai~9i"+Y>]x&Qu tU]ز8q_!eFo'jˊtI%庆prpaUa /B99ƒӔsiǚ-?em i _uwݵ^xr[D'W\U՗L)ٔ\l>uKn 9Y ‰?uҰe? me?e&@w{y ؍brNN4e0<'_^hkIys:Ps9a9Jŋ=!an+XP2 s)fL!Kfo2Myv@9MYݞ֯GW]eZrY%&;jrj-yϛc Z@I SSB'GRid{e}?u(yX|pIa JapJYKL\jlSֽa;Bes`ҹCzAyT'#!c$Ԥ&R MQ:J 0 ؋ H*'o(@RFGK%& )GJ,H|R(YП(/$dԂ ;bl\n0/lbJajdv^}˭σS30̺aA0 )fy<{$T)iJkK򪱬̚:DðC*F^c!@[@KW븠ޞ~Mo,UPA3 YFAֈey}WuS Ov) -Ai }JʦoݽQӔFvuBj˾/S|u}h r&}&9Ndi˾f>^:8qnIdE4N-{ErD*^>S')-O''kY)Mw!QSZӔʔӔÍ#e$ (Q p0q%0Y8ôKcwؚ'M9OYw1qVO99eS J,4 YVSEIhW8'/{7;NF[. @d N𐾌=s{fد|bE->}>nAQ J(а'dP]O#S248/\)z7{Zٷ4@oPOELjˇJ+L~)30q%0L ?L$'3ZQNbF|iJ 30iӔm)urV! ^ZBL(۞&%'[C`c ̮ϋGE$ wXP2 dzjdDe!'OA)geiiJ$zki 8j..N[BTk/%)&+I@2 {6]G I:BRpF_™)s'($0,(a*03_|b!jЛATN*nm@TTj\8ǤuJe#LS"(3DezL*n $jo[]\!&N N4vf'h̅Yʙ YX˥Ry4(6%Y&\xct$S}lt''(Q$K\ \i6l?eyw?z7:Z{yޕeY-DNBIn6ܺiڲ"QZ J8}) <3.$\݇[7Vx)rڇa[ 0 );PNSOv!بigsEKz"a~!M9>d4A9I׉ʺ)ZTd>dK! I!N#>uO# B$R@@B )%P~]!HHk]vXm-5NL "ㅥ1h]#z= +]j.V?/a A *e!X xOJ_M(FB6EOM6}A6xl4$u** HQ@GhuH09۲Wp2{]);aXdV%0̒RNQNI pM‰rjEZ}Gߟ2K16\SSP.4 ʶ԰oc(MafJJN*ǟG;m4p1JER@I){<.TLJȚY'%Ԥot c40) kV.Ҽٯ B`C\xmZwp/^Df%ޥ4@I )$K=)uI<%IVرeEZӆ)+'*)>}),"$e6u~?5LPh^NӈQIzRrm^@ArXZI$d(Ax!9h&*4e7.d%Fʟ7a9!Ϝ 갠dY\fܮr2d2ֶNB 5zbbإ)gYoRt.?٩PPNKm֑ q%ܶrIIUQ$&쩻mm;ᨤ+&HETBBJ8yR@dp tK|r)JE!Xm65HK'24&YD4{} ܎dY!ܟݨ!K~&9nW@Tòo'g:E:j:y7AiŦܴR2n<ֶKDJ'$ [ᢰYe a[f8tB\ _!Hâ;!@`'*@S #$hNca~R܁0i^M:œ] j$ٟO vH׃Fd@Jzm& d+uOXZ$-a6/+nS)͛y9}=4"VkMRv*hx M8E9adv%0)ۅgGxWZ qheߍ:Ԅ31eeL@G(DEe%=3> (RU((% ]X/ai5_$Z;iIٔBPu tREPQ)BXT1H8k~Rk/`!8*&{S8/BD %^F&R؟HX/)/E1UG%hdrLFVO l,Ϭ$ay;ue18<,gV0;,(ap<F ZQݎf:1G*QsiA}Scɢd4)IfKvлB*n#R1"|RBB@4qe:AFУ!IL7FkXVF '75:("RAFȓJ 8b(KKoZ#M,t&|J3{ZII4{8{2O'#/(1vLZ0֟T,&KTBn@xfdg4Q?evI Jh-JWeERN݇[%V}&S`A0 sp7s+Rغ{D|ijzqLNp>M뵝L=X+JSNHA&U+LKjry!‰s"V.%餤t  11H!0I ht8 hv J> 8B(YJ K$r}.TNRu!28Ő,Q (-4Y1J.`!7qZ:^| v66 AI#e߹aw^^q8dZؼ[df؟Hbfã(v?e1h|lIFPr0̝ Ja5 Ι[.6䂢R!/n:msa?nY͗Q ?eUPiI]Zo[u%ݫuJ/M=_ŤJmdZä)K7n\Nd=! aCd$‚uRӺ4'鄗+J3y)P%*UӅKU1!2v(T  Yhc-AkH()IIAxaze7k~ IymQlY(A}g/[eeHȊIc<]%l]hme?B8$hWmQw۵Rk>_6~wA gXpSga; 0k˾K?| Ir2dgm *J%CJHjk 1QYz>ʾV\PZrDk$"!ѓQT}E}%4bvw$>NJJDBY 0i"apdp=U$MRd$4M {xfIH3-T%\ Rq HzP^^-*VbH m 6)Rk`B ē5MPF=qSE#DeυKf IdB" sZmke-zR6@F䢲*6sicl܄6aB ^T<,{3 s'ÂaP/^\ 1wpt4`Z_dLD$\Ea9IK-/ QREٵ(')UD ]T-QbnNja-N:Iq5@x[ݩbjG_eD "$ԟV)G˭Sdv_+РK iz?e&@3ۃ%)%)we}պHQ~'ڑaaA0 s~Cq_Df+kyI.wf˓}}7`/uwng enVWc-Rm`KXvJӒ} {tK7%#HNFAԣh3Vkh7 /&J').R M@H,}u"'-o HKc@)"XAu"W@u:]NQ)De2R0ML{īܝ'x^S{ xAi `O(N Q)"IӇB'1c Iai[އVjP'+nex.DҁDw~g;,Mcob]rC} 0`A0 s,ῤ3晿󇓇,MN6IJL\m:d(*EWM@IH׮˂2n ʃC )Ϻ.3p %w_xg{%%:b4#"" 06S4$ Х$]</_z Q/*˺viiͰr'*gPb>?Dq\sݣ$AP JvuǤX}\ ņ:q wmKJC$$C> I M S0N G}N\a 7ѿ]&))N}\v %. OC$#wlSOKȍbT.J D"vݲDRo@]XS3IIy_J %o~R'x;O>P)!T^-c+%h<1F֭qҟE7ĠP^ee{JQ30 S Ja[ά~;fI Lղn@3$Ur)[:VZHT.ZD .<S(TO^RlsԙxyQL>`JFn^HR@GغS} ~x6GD{{{H~tkpb@s4@ BH_bGQ(ʥn v!.$eΤYAvX<~uzccj{$~cĻ"(De/e(*)?~.:hs2Imʱa7Z:Iаàۗg1P-eQ3|'|JΕ)֗m{?>/}s+uǹMze>]=S16 @8SGآoaK%ZMRCPbtxPH$tR Ĥl/|t?~뫿ǹp +o$%b3.7Erl\;Nj $>MB$e$TtӾ/et߻h$RBz5oIBJi Qed,mOO%B`+ qA![56-IyoA0|Af4ʷ5`,5~fs⩟~j}!NYXX)|B|^\}3=Ǔ}\ڼ o>H.ɪ5H:iYk i Ѱi 5߭n ĐVA J!hc"I*ux xM.T3DfO[im pJ66nB֤G"HS H؂ ADVD d!H:9,`BᶓAZX$(_/"'%$%yތ UI'QQ'N~;'|X/e?܎af~XP2 \x1@/_Lk^>~o{,Y,~WR}' Jk+`{״/P j2H ]5so%! 62s |\FU6Q2u9:w"DBGW>$4C 8a7Dy)_7>~1cK($}}i{+:5 `"!:L_a BYd$"ןX d 5hDvs-p05؄L+מ+/joRX煪n=qlb]2R%bRdRzDh0MmA>Ei%Ĩ !]LnB[wi*Jʾz " za *;_'@'pÐ֗r{>|S|o-4,'la 0Âa6xbIRsI3g߫,)' '\_^ݢFTj8oblktdk#ZJҔiIiJk]ڬt>T>Lm]b7ߛlLKf`GCPotۋ/~sx>:wR I`H;6/^ur㭓8qu|kW^:@ZTNDfWTP*583^Pf|<!`H:]A6^<~O|s߸v 4 ^0!m$Q 2PI=Aea)6F[$rҋJL" /BRmA $-p Oa%X%iI:rUVR IDATPsJv5h~U` {>7ٻɵ([;; 0Aoo$ap/*^}Ucww=9/^r}K~q7J3Uf|QT=/1Y҅џZ;CtJ[ Yˊ+ɗmժ|/CI͸H^^^K"oz:~5ڼ,&ПvGAHFI F_+Kʯ{~}ݓ0?ßb0p($/ D$wrs:8<䵇%.\66pm1RYP_9[d!\Q3BCIa;=MmƸww-t!i4\ IWnYY KJʯ5${2/6 a"불lO{D",%\mY-sz3@^WSM{9It+$]t3:rAvX>կW_Ń>__O?͟a愇0 ܦp$fV^(dXn|RYMkEj%.*-5sW*Jw>K!:uSF֣)$$؊[ZX!rZilJZ2FkM4ukImiN7{l웍uXbY ,(ans4S/WKZ즱[q 4Ėjok \R'kWOTڧ}_ >v6}:AID1óy8?t⩏OKD66}][?ƕ?l.)CAypͫi:f@BkWv{6 !ŠXQ "m[P DM')AHEB 4M.^O_|m@Q )Đpe70ATfRj;[$+eprrs˕MMnߕ 2iY:`8S$emx Ⱥg3 u@==o{*|1EY-x0 dLT9 =YȠ#u%ڕ~2E|_u f.' YFJk|͆s5qSۥP5ȿ"!q)H oï r$&%ّG@a_RoG>OLUbHÒuCrʕ"WWӋ+Ҕ r67qM ܼ#tjA+k`|/JOvD ĝ\mp&U'N^ NZdӫQYӟsT6.YVILR)YP7Ӹ2Il9I +kq@ta#t+FA24?n*x8ޕVsD0 ܘ^ &xKz!wn8Y7/vߏws%dY=d|/ivB3Da֮Uvi SM>^7YfZn:33Jk۝P~ x+R*VӒٍIޏG~_ϯ]JĿGpw^CzWzWxO`os^5eܳpu{9I9;6.MI 8t7volTeoہXL\8cz:"Ҕ YF߯qjٷ)veAywP'/c[@P/ed{ ʵװҔawV]$uj 'JgG+Jwa'wqv>$/|L&,@O'/n{tV_O/^8 0+Ka@} y7'n_^~1Tmܶli5*)o4owӉ4c}2O:N*{CyOץ)˫U>2KJߧPJcT&^F,#l7oKKŗ>cE8)oKKz7`/ Ob\۹ ipE1  ?"{ u͈q @:)` 0ߌK[spo*L5}-eom]RB@6}yvq +tO5 ear٥CB%$$(+;!t$ H{R72{" kbzy鷑S3ǀ'hZNw^54a9B8A0 syꫯbxxPTj+nCqll *'%*kݢn=k65[r/խZƦuыEG\*)|uDS٠1+_x<|إ%h{=t(ƨ?`Zk@HPJ"`@r nƸzanPv(3~K\!TJt}f8^~.2com$cUr0 1L^G$e)lBmR2)_^IHf璷è$*m" ʃ楔l:ʼ~?82 ܩh0 <_u_=_va&e!"5m?!Eؘk>mhׄ4}۟VcMbs~?7Ϟ/}+A YZl/!׽pi8Љ"()g[:1NvwH  HFI̾eԍp2ڛ| v@*I\=0KQm JҍNZ #@X%)>~Y>"-S*DM7BR/(zJ*SG5I鏔%me|IFdiˠGdV&-"KE J')=@'KhB *w6+`g%g[|)7| l?peS%0 SyןMĘyxeJJȗf"HDwr-"|bcIzڬkUMRДչ&dZa+!ܟŮ(U!T"\Z2bg87zr|H!A|, ]5gQpJ;'E SJa,Y! AQ$e6!@5"!42 o^| <1I)YߝFEJ2˽Tz&K \<ޫBJ%$$ҧ'E{}=t<$@,pr)iKBmSTM*8q,JrIFѬة ]q9NBVT֒,)j˕QZ}ދp3}O̝F~`fy?,1*9٭L,i*<r}pgtv 6'+r] [A%r^6X,"!JI DChz80rs:` raʼ=hxZCK <7Nhjٷ--Veߖt )*nl&b2i7K"&ZIɷ3ϋ웥eݬ$2Ką ™d_0x;oC99Rͅ}g.?$Uo Bs==O\۸xZuUzhl7~[?RsTprvAfެtLCJdD]shVHF}M(5l1Jde!4& s5Ľ[?3wPӳOf,jS⽱e^R❔y8$' 6,56RY2OcrAeCp2ӨS)sap h3:= !O9 -YXlRu>>^0J˻U|>/Nʹ.. KǁC#Ark=D\9T|A$( ,..S>sԟsY0qF0҉l,9HoJdc$Q}j F䵔};O!M%ƒs;$URZw+HIߟ?2 ]y }/0ρ-#(7夀ANpY.^MΡ-0۷sӏRJ)jӔW2S͟$kkK5-QYe2^De`IP^p,FSA ؘ5)ѝȞa9hXA@ %{ ORmDp4O>#fgQRrMӾ>i3~wW䤍J֙ɛP !u 4<߃HnF†q %%64] >z} Ptc^DngA:,-N韅o,F)Je,іY؟2}:y'V)7eHStmZ2Z,]@'b}f a0}a9A J b,-ϟʾϟ?Kbw\|tDsm\T6vTjןrDY8Iɹ{vqˬ$oQYx WjUkS:ѷr_|vZ W.໯%,02=(PEI!)N 8:3]t=tE~v% u8RJie *#)5e/es`$G2H A!9s z>l74BMnG^ل:yɲౙ,d p|wgI˾PaL{[oAk2#0ٷri3۾ٰa\{XL>󐆟m< DʾMHʽǼP\3-#uu nHPAݟ@֟νS #HUiU'Fcԩd?z @sJ2aPX>Wj-SW)GiӇ'pG0^JF7@nAd@' I1$U)2RBwA&xѿe>1;6@mJ%b#G@8 C` d -T Okp&Յjʟ\K˕S*H=L?HVJ 0!DFw%Q,QHȬ?%%}+~2=}_SGw%(^A J bYZZ£>~o|_IT#'Sڧ Z˱S-\a=iJi$}ۭռhAt阢.MYDe*'o,ޓk4jHG`YnPN)JIRB7D^/ !×ZzzyY[z=0)JT% cHJooBZ!'c0-'|_;sWE\z⅂t)JerRҕdh;)% tTDg,o%%_k c&}sU )/%!AIA'Oģ>}7SeM;n=Ҕux:J9SnQ9\ŪEwʺ˜O!T()ޞI'*c8RJJ'XN$`V:nu,k=x nZdj Li @B( ېmp=2 42o] :?U|J!Qr*T!9 .־Q Gٷ(f[N%2T͋ݩ4ϧ\B"MZ*YRm~ =NQɔ}3$HPA{O{ O{AlO8v;ìLZUYCm9S&N *]S<06BT^q)'T)g3.'=w㛏|нa PL<HJ9Y߿ҙ42!XG^ f-,gnǤ($%jk NKC8Bę \Kx0r)9ο[{*V8]?YKY_ YSrt,J{ ˾H{NqSrpmkL\&)~i;gݩ]oog)W}%A!AIA ԟrrNU(]aO;f@c @6 BKR6y,^O !klẊ }u=s @6¹RpQU=RI|잻_ػ5s߈Hc;ނb|&(-I2eޱ$@|T^]4v+*~,B nJPFʤ)e tB;@EChB I*\c<6|7^~JrҲotJ~"*)Q;(E%+WOA9eIRЛRp;gHRKDw?Uٷbnsa_R4, b$ O9xתje(yg~.v zkDN(Jd1Ji8%\IΕk)*5EeqkZIA4c]D–qd}S9#yovG$ʼWC JO'yIAV/+'&SK#; z}~:Ms#*6RIR2"hx0{QCpÏcp(p cOo>WyEQY3L#ʾy'};&yD5?ݟNs7y(~x_%@( J @pB7ԹWMzrTH&9 s|t_N%&B]W1F&7ۨIFжL@Hxrx.d mwt0U<3ޅA9uIJ -u҃24>M9iQ}R>EN:cii ׮]Å O0I[o.sN 5"-R*xnSZ'Sh_9l 0p{`"ºy| ,DCA"u |#$[Genv }Ŕq۷ܶ3,3)qI9xf>T:[F`ROJS 0nn`g`Cx>Ag)A-bz-2p{C3.>|G|sϺ,J힔`̏K^\[エeo ! v̿3풻ıc{~] Aā#p\pϟ"yuéo1~bDRT#9 'l^)ZU>_y͗%6-!u:QYҳu[_SY6JYs@öOK.'r8#'[[P_bV`kH Oڂ0^A`;BnE/ۼQ+39 Jx)Վ"h%4T"Xj&8`>usDP@\7ěw:-.n^{~] *& ,'OSe߷ZʧνSNԶ !jqdz6l'۱ץ<VҐJeޚs.q}iLvwTN:9isrVx >٠z0Kj3('0D4Y\˞wσf?8 :t!z=B@k&$)t2;~: \kpõCcy^~dwy[".QYO ѵ)4KTB:;ATeg{+-OdޟR`{@%uG<%4, b:$ n#_"S cԷO{սw4O1owP#*]S'KZS~t)_KiCEV)* ;JL 4f{Wu,:I:<g|j7RRCFqARzP|q)> ޟAwq\۔T3)M26R!tB T8,MQ*HP1@hfw9MY* "@"0EeLqHTJӾDJH4%0;mIˣ?wy̽}Ͼ(iXAt AIAP,--ee߀7kٷ)Q0%*JAmeQ:w iU]^[Ebj]/ݜ2x|%ӵjzBe"4Eeiiܲ9xHNω>B 2oӗURgeq# DRF܃X9\-{A 5tљ[0)t/9JRAӀ%AqC˾o6QyG,܈MJ2,S4!jӔXӃQ9d8kJESq6 kaޗr钍r7a;SM^d4$''C1pˤB@[}(>ʼ(c5r~td[9%pC!3 D*3;%: elDeqy+p!8ec( `l-C( )1:6i?J1M0!*S%,Eys%#ϝؗ>}̾\ f%AqC}l)O}ײآҁcð4wJK̤c}~][S5Qt7e۲練yerlzA7aFArrrG!7yR <@\Njб cahhPz‡x׫}9*G)Elo? :`0r8i©d:8GG!`2QGI 8!Ԓ+Vl^S )dMڟҖWdvñ'66/ؔ]۳nw@3Ro!L1IPDRfjC!d84)L+I3cKJ֟bӅIߵ)m-}EJLd0R$evˈL7C.$)%oU6m716 !!AIA4SިeFNS})u^ Xڭ%aYT.NVFeqi~4V8|9Sl^[k Oxύ>MSH%q<_-%5lm(OgCryLoV7#$E\>pW蝖x)=.Nb %:3/ t3 J"J[җRGd8$E)4o3gJp/W-/ee]wATed|YWw\)@ `hIRZX ɍdñnM^}Ey3{~M AMɓ'+e_{Y8?g_ib\i?)-!))MKVDezjZ9k5khꀝ4t'us)%*GRR6JW%US}\e%~LJ5gL˼U,0VRZBi7y##mQOIXul`:3s3)@Z:wߴTR8B3[+!.Ό %eJ8X;ˏcuXCTSf*-L$%bwy*apAfrC )}acG^y`_.M)J !AIAܔeߩ|tʧξSJӓ̪ݪ(2?ʮZ]#Uhc=ZpȳH4b&Yd-*GHWo+HOyAq LdR9$7+aH*C myϚLyW*"9x>y`IڈI$el$Paҋ2)͠0q1ʼSMGz$V8MnߟR4e;5evJ$%)|PIJV-f 33ox_}u_Kq3pSBA%iAOy[PYDAmK*J<,*]9$%gSpӾkS' ܮ]؂^Th jwv.C!9s!}>v|9)|j;A9C }(5 aʼq#Cx([O>|iғ)z- @y`ӛ2 J1TdzQBQ3,ڡ`n`咙~O0)aʬ?NRӟҾo%IUdXw|f|fYm]JQP b2HPA'Oģ>Ǐ8x): >*@e&geC(Vh'cbS# eOƝGg)rڔZ+l]iMt[n]i#L֘9'vOKT8v.Ė܄*cn3#"LnI8a91I2h/(l{ - @'ÕIQ Ɠ>*A!TBGIR|cN1CI;^D 3,7; |"%(% c@FPQ *2osvlA96 )W\{_Z`u3(|vRҟґ[E q}feman$eL\IIr Ƈ%Aqc˾BTfrҦF3lQ)1ҔݳlgiuݶSG,J{fҮV&63{%OGIR߯ >Qch.bG [e`>oeIiMR#FN!'߸qe/M>f!; IDAT~L y26A' tlaiZf7c-'2MIf>{xk/-WE[ۿHOi-S"Jo;MiKA9dy &ma9A㲃 xGpy>}:?0N<+3q^I9$Rc955;y0! ӗAVꮓQJY?׳WQw!뜌w}^IUDa=eCڒk-N/T0gBikfǓM8:cGOHG_$A ¤lmIyKŀphBLNy<{AZU0Yk;\ooc#60$(U^❕yt8L˼e 3ɛգpg1~s׾GkgWvvw8Y}ngzJ&HG5Y>, 6D,= fv^\> _W+?{zM Aa<+gٿŕTR4e)#0S[:IY4 n'J]Ҏ`7VE3qec]z үM)#6GJK$ٙPa-,N?2y{>ի &EoEA9> #Ф(R_ݒyycwF!ls@ : qI*LTۉ\΍Na| `Z*ƙX4;̛%MZXdEQY6&gTT:K+2鿟qx:ޜ3Õ n<ě  vSO- MXעn.19FwJW=رi5k%)c름[OYu)Ҙ=D^ɽ{kj^䖕vW$%cTJaXL{[G~ʈ6Ty̭Ioo1x;:x.BC[)8GiRI2)Rulԧ sX~BV"9?%Jʾ; t\eZCʔ}3+͹+=S;8P7AD{HPAD'Oũ|WpwCPkt5QEQZt]oQY:s6?SP溡8ޙfysQYۻ:&KSkK!떔1'rrEa9%''/\;|O/v$7!atbƈ!Ј2Rklg[lCsί5!O+志9Ҕ&v7i4寞u3'=U<uc\JPBj б$tX0^ |9`666InݙYY?0qZHSI)d Ih)c @㼦i+v4]}u V6d)V%Zk0K依pe()kXA AIA-IE]c|꥗8G-I8٩ *cil܉Ųf'ۖ}N$Wۮ:;cZvJ#'k\ԍR1QyO/!CdIJJ2o;EY!h"xZpAof~`B%*mIDXJ#&UR i c ޽a(8\Ʒ^Kn$e;+KrQ Q継 Ss $!AIAcrBqʾ/hH#Ee%1vН I/MNwv֒Ж.qZs!ZS@.)T#ϝޚƀRA!AIA;O =X?S/l rĈ4c1JTT`<@9^TNv,[2GHb u:Q И n8(iXAD3$( b ,--ʾ)39iV9ęN{%IHҔDmץtsr *swKU1ZsW_PE:$e̘J|w F+vڷ$'.}']4:n&)XC))7Hű=؂_D>`v:dLii Ѓr7HcHᲤl۟$*) eYKR߿%yA4A  HڟL/5sm~8ScFI;;MHuq4|5)K5밯c)˽3^ut篊ʺJ4r1s^7~7`:yW.0}(e*jΆU+\H&y@t0M7''dPq]Cp^=K}(Q]fًX~BALS*KTfJL\F*[Z O1 %cXΙP A eǏǩgciIv5L4v$J)}ҵ1Sfe5ǸVvl[;st{}uL]ٹC?Y8~dOL㿀-V>AB%(wZzg18n lmo@B۟BCC nP*hq"ҩZnQd#I3=k;,[yۄ8ҔQi'*`鿝?eKEL5C<)/gHPAB  v%uaS @+( e(!۴RzDN?e> %*OKuJwbܯut2VOTڏ͗8Zt &Aswvy71%`7rRmh\0f]N3h|Oe2(IWRƀ4^]~?'|w¤a\؞%&A:Z{%EIr !AIAȩ}pIi8q}?CVeq2y8JT:VJgjf=)u4)9lLSJ9BTǻZKeʶV:tEi|O /<(_&A w- u{$5iHSSNTۛ~n O&'TRj) Q ϳ~uskf;\U;OG0Yd'4ThXɗ-"L.pwUȫ?7\NӗWAJPA.K/^6 C c]wr(S2J+)>#\(dlOi%ѭkl=\&}r:.T]~m}W%6%ҭH?[snkxu: 9yc{?aywt #GyG mݘ}Iyx* `k{ 1N,ޒJ%r$tzK%d 4(bHPrG_(Z._bZX]. 헖}Mu]8)JC%AA',d;9<{0J(*ᰅlKa8kwA:n׵u|hC)ti;u) zPvlZrvƾnn&v߸$ Wd)J+MN˼KӼ[>u)]2uXr~!BQLA`yܥr2oH(Ai YOJ .48Ӹ>[Pr7ISSd*Vs!5t)f̒#./ yAT!AIAS橗Ie% YJ]ӟR+sMQ=EIJfn=Ú҇dW"SVh0mLT&;**Y#ũISa&vN~ lCtE:B.+0a9M1rҦ$*(BEp#'IJ3ےhZBJ,4-=H|#1-,?sZQYOگ=Ҕڗa9g.?$8萠$ )cғ p7^ңR+ǙԟzS4D-ײtë@{iީߖ([3rc!" oRcL% Z+XBfe4y| Ʊc ;zPVg/V}vI[~ 6-zsvh_ʼJQA!AIAS?lNOҟr Gu4혧)Uԟ2{)􀬞Z =:(Q6)M9p{EGR#?JoN$8z?b? Н!<9i%(=ܫ/Ʉˈda4{$(r9i R)()h:.RTL~ ׯ39w2&5П!_WAA1E~>Q\O}S&Sg(3嗋ŝlH?.Jk.!M9t)Ee+!萸ʺ4BSh QYڕ&v||G0[= VIR'r,v;Eb!4D D!Ϙ:MQZ)@5ޢR{1 ]{ g/b De9Ii)o( $( bJ]S2}<ǴY2ʾkqȶb4pfkS^{M$#wVmdiuڭ%am#*=:&:sA:,||"Gzɛ_t]t=t=3,Ǚ{P`A8p  q "r9(eRlvd`:y*|0±c{#kkSl7Zeߗx!]Q!,߳/צiA9$( bJ䓻-&C L$*DJ0V2ߤ uiJ$EezQ*Vkm%a4%*8{rNtr돓jCč>)b=^ݙ:N.'KrAr@%d0Ҕw{'"%FR~4)M28uzxq=TՂy>1E3gɔ wՂ˾x1ᅏKgHRA$$ )p꛿7Ba,Q)ð )HEKqBjQ̓0,+sy^˾v{QY;SKk[c]4'h(ǖ> cMwwg>v.=Jqya"V18 AS֞ޝzkﵤ%r#0,VV'`~,9\8| Q&]w.dSne/Ӽ*&H!AIA;ϕʻGOj-3Q><!'OZ-+d Nϑ,$iQihSzoUmJ׹̓u:5PIǏXz AcR (I-̰()4QqN҃tX4%*k+)k^+jJ]I=?ܡ;돝M}'o!~3+`]Swy^5E9I7`R 1( <\c>d%1I7,y+{5ǀISn{4eg1yfz֞%i)>%o$6oW}.AA%AASz6d"tMF)OfܰL *e@ +GRbPB &8K&yzO+h-ViO2AyT{y >,&\oJlcܕ^h(EIq` AIAԋK/W7QRlK8 p+ʒҔiJMXBٷ{=2) pQұR֙6ӔAA܍iJ)GJlm)*aJs'HNނC]n$){FӼFrXCipKR& Yj }n JBktK* TZay[gP]4zF}8s+zd}Y M&V%AALȩX2 &¤t;4e9h!-).ty.fʺeZeq|Dea}|iJk[(rMY IDAT%*=#=wӂǏKbG nL~o.o `J^SL9@Rom@i%(9oxCIMZIl˽}[AYиCY\YşNL3,5譣怤(\~$%A4$( bޓ)ZC55-S-{*e c,)g'iRkkw"2??t]>u7^{pUaX:SjpzqʼPMKERa9Aܪ$ 1LvZI5:Ժ$\\Tz>fѢa17Bʺ,Rɻ9xuǔ{WS^+vuԤ)]PICEVwlj |ym|ۛtLE1LꞋן觿OX9&=a9J P, = Z \(rҦ6@2 \$'#TJA۰o5h.R4r7)7dr,ڝdwI~YD6N&ۯ%f2ua.Z^Gd|w;\z῟T B@HQF2ͩz%FH95gJY[_߽۫kȧ̵( ];͕> >wGF|U B?ۧ(hG72 LvP2 0LGՕՎ6]A_;="$<; kntg=)mꝆ}g4^Sn>kMB&(QP00{i.z_pI& _'Ah2R 的^D_8(!Г^/߽۸ )*v҉2 Nܖ[nݔ_~=e0D.b%0'(a#ӕ?؁PIBǨ9 [|"Q l~ By.C7RȆ[vv ΰ8LwGwin| 6p"d]TY Ju#.Fd D?'펭q<ߟ}7]aRa7Xd%0 tyS]rTWc)9Ԅ\~t&Lv>5?e=OdNlsSF @=9Jc#V?'pI9Gi mR4UF6Ftx|~=)4S+?S>S2/T*Ր2)TǶ$VV 9l?An%rP0 s`aa:p}c';xC 9jG)G͡&Rr0*>)%> i)0!5gp_fU9Y7epg|"2l6O4My'w.T~wc}! I>ޫk*B E ,Iۏ< Yœ1cP*n6TvI%>аo^]Xw%HH'T&NJ̶uǶ$>*k>wY잵_o'!P&%0IJa'sUբCr9h8*0*>3FwmY.uS&$̞̻^h'{_:*Ԝ^(TViXsOvdK99\-U"ҁL1"B RK }qMSX3SÍM < #JTIsnJ7PT2s[jߞv"S`%0' (afYdJG1+] 4}5I7%o͛^^QS*s}v4NB:#J&CsLIN^8wo=F 3}VV1_#JZl7Pe K^m;nR$?w[ڶZ ܟ3w2ȄO"{oa 0 ?w BN]}܋PYO)݈H5h[RQVJ͎S]ʊa~3՜RF7e;Ν¯= r; x9 gf4lm\>~eXhHatX)N\UXے5s۽e10,P2 s`aasOf \ sOPnS[Qz^*)!Uwm(;:\cryҭBeS*{S3]zrӹbfB-.Jއ!"XO>WXGS=@l+۫kXw^ML6B%"1]T]J[njaq.MXy $(X0'(a&?w ^t}z8h6z~zmBeL.[DXq~JA+p ٪۵2'd"zgD;}PŬEBehq2]'#ҞVeBXD_b m Ʀmcx º-PnHIɛaPYs#S1;*WM|2{on2ӉId%0 d;P'l IE6N\y$B],Nf;6Z)CNn&a0mZsT"mGbd$ DYsH¹3w9Zyxx{ٻ4og;gBI{1mnFjQ)=S.5P*;CүcxݯBu=?ؒdsT*y(9@0 0 uP0&pRUk.9-|"QaI~ʬP^kMM8 5$[<(75٥ǫ׉Zq{(G"ʪqvi KY߯>*AA"皴8ä8@P$YסHY ޚ@&8{dwyqM @nSnelIofd Er9@0 0 UxwNTYF45T*dPp7NSuw*jSO*q,vO;&+V6v_vu389:|ovk0եre/wx"7ƻkZCYk)<n}'-Dy'B U55*QqPiO}B.Ŗd 0oa7 0 0a{O~j6$a`Q1KzN3M [; dCqm_4~nJkgO^QU6v5}-9/cZ3 o|R6at2/'VQO@-|i xnfʅGuי)ގg_8n̓vmVIuBd H !L* 8r'ϽBTK hn}`M+ܒbQ 2s%M|HH/hޟSqj-7.3GݮX|~q[:0AJa 'j7MJ!{$$lO9f7‡lNX(I!̔dCվ0?e.{<5='}Y K!s]l}#tpSp 'O.cNʳg7Ǎ8ym֣UyǤuh~",E̤Nv+]en!maZc"<.?".Q$4jnˇqoXi P00o] _Xda˵>~dwS֞=}Sl:iQǿ5ozz*K+T6vӼp o'IYz"?(ZJ'cڒt\g]E%N}+a?oW' S T+" @DHs,B*PoP}A$κPFR ,s +O=;@ 5sܟsxþZOMdDeoXdau_'4m!,,s8(8?vNN4v&`&?z)4a6?e~9*f=ت>N nXZEJ'L~mqXĊZ_}\u c?O҇x U,JfJ°@i@-N R kBe65:*ʆs41ٖrSl|8UHǥbE0 w@0 0EJ]h {!TA(5v㇢`Z]#DG0oK0þ܍0Hݔ$hD9mrPZN(zVpA鿏軧Ѝ:7PHP*},1l̃6PDM˲T :vRcJ'wPW̿_C6&fpzLY[osFtN˅GWꅙ3q-\w/=⁎0 @0 0.uOQBe" U7@nwڇ1J'-{*yñ0NRjZc5 H(,fUnwv> ,9t\v3ǖUSaX-<KrT.Lb:W1H$$vB8wTW r,(bj (TL/71RѱB,0 Q( i( $RAtsT ~ ձ{3wpjp*~y8'|>q0 p70 s' kC}>OE4wb0̘; N]OCn¾)sbxO)Pِ޾wqߥyOX|uw IbCT?jy& '<Wp紀_}d_/\VTPmt?VtεD&H> Ѻ_3 UThCwwS~JE*RS&}ۯgjGo5:{ᑙC<OMDqaf?aa9xd&AA$sU&EespWBe'rLr jQ/ش@߷BY)V_k5 )u#&$sc~^wM<.LAH29(aDJCbdT= ʝڞҮ/mCw ~<+RB9Be*jFɗeq|!0?eZ |Sn_oNB4r/EJ+ !b9 0JaDuOhqSdxJ ;L վs_jprdVE Wk(P ʲPYך&Ӧ7=SOfN͜GXZx!| 羱fa LwPk\dI"("<0'V$Xё†L{ѱ?T`LIBm$$>f2hOnB97B} #+cg` w3) {YcnS{7w&2.0~%0 s XܔEQAX. u.rT2rn(TT/EJG,"sN$pR z=s|ʲAwXky!ԁ)vO2'{b¹f>+j76sP|?RJtP:vNW&Ip6}@Uy4щ~^TLB9${cطP)(6¾sB J3aܱbAsnaߣrQrEoa ,P2 0'k?~AF$API.;ؗ*kM #Ew܁9i1Q'~RO̻7=Z+';y sWK||g;xFUy#ՇDOM.b 3iQq|]U@p+ђ*{'T0@@(u`N ՞l~{Slb/]lU¾G {t́ IDAT{;fG8̛a 0̉QBlWm1B`O]xP v#Th8hE~ 6L4\ng2B[ c]D#°es_ns‹/qpgr! " Tݩ{nhAJJ P5 &7ր5~ i &ó"(CQu=( N)iH RƖdr?\ƽE0̱7 0 0$q=d6@Un&."=ŊkiH~$kz=HN\tj.~a汧L4ޥ٭?9,-i<[~X _]X|KojFwbP.פ@)\~ ! lwlT¾Y`n d|e(9/R6p 3aޅ(YN@53W Ŵ^*:Gsy"BmM|8[`Z?;|jϗ3B2jp af`%0 s"_YHI%lBj߹\lwTe9?eof._g'BC33u ދL8*R%VFo,l>\S[{_%NJ^Hd#w(UsOK TrTlV$`@4n%z۠M館8QzRTuUbdrKnrmq }LX(9ڰ@0 Ü8sͼ D2lt@"#T0?#EOYһ)3]Mxk%S‘BezZH'+*}[wO{ɷ5Vlc[+Rov?a9.;&oWm43 BÅ[CN +O=$iH\3ByFI2&S5DGU6gA[&Be`UDaݔN F2-HԄH?禰o"WoJ0&Q,aH%0 s`L ɞXXthY~h*sa{'@CQzS#S#8Q% =(֖F(o~ܰVX.LH!@Z@>c Ej@lwS( Xݔ^ TTީSf TBeJm~\wOMEr9@0 Ü@CL fṄ~e'B}XGe9{}Z~z *w(9P &?d 5 39ry&}^8fW5 6P UMTR8o@Uۅx !Et*Ku,BBeQl9fhNsg*ax/uY OJ4姬}玝tu2 \ MXdaNI8bW*#&T.xBeM3Fh ƵHVvm4(W߅P*Rf/ܷ12w,l$'oǟ) !PeSLg^|qSgdWy&G潾p#䐄0JCÄ# O"9O&S$ÁoZ[SP,f7)2si5 )~B-pHY}&jSVEa%0G(aYX+uOކ`P;kn̬Pi~FlڗS+F!v#zjDB%a<7nG i)Wi ) pH7T 'Az7{R<‡}nϣa2EUCtwQ҅g'kYnJ7v8<('lV륄2ÉCO :*Bw_QIb9 5XdaNQqA&T`VkwTfk}nZ?ʬ?*뢝{V \nw2/w$`"sd .ToSg2 3g UZ[IC >̧ZkV X!ҶwK-RL;AAю>2ʍS{8j} "f6]On#*'7MKxiOY *#l~27= sQr70G=N*0 0g!)CmӾxjoЧtqU>4AUZ576kJΉOEMu_8>O.s=%Kto~w7hح@8s}t;.%PJylj)߻cWZP[;&s.MZZMI}|%4)h[Zb8פ] ]prȦ ̭vNltN&/?SSR(CR}o EFFKT YBmJ$ۙ0) Q$P?Mօjs "{mk:@A`GOCn{@c-da=؆w::T܎JUBgx:욟.Q%H u.\{y_n"?Q%`eۆܧ'OMГZgþ99\z53yܿ<]H\k[m xH8d¼a?Wۅz朴I!{kVL䐬@4ǃgR@2nJ ƺ7 zj oL7 SJwsS·vW9%W}d*&.Jada5I}gűU*QsmT{BtcT+12p:q.+Kܘf&]ҩu=w97&AJe0Mfџvz=taw/8̡eyyW^͛7aBHyvO$ D]ҽ>Zki*i.%iUDpqTnƮIT˝"Bqy8R*?hwSJ/,rxgfGfhrSd-b*|@LaFwDfvP2 0ǚ-/ٯIe77pļc0vm"g:ljg`L˾| "'*.?㧛U M) uLe\ron޼sw!N:e(PI^ψa8&MIc[V_R*N S džy{az2YKI4˴w@3F[!ZaJvƍ-sMnJwS**`Ml~cr/`%0L;,P2 0ǖkヌ?ʱû0 mqOmBeѡЙ1LΩ͟¾w\{¾}! _M9P'P!Qbpkayyyd[9^ /^ĥK&݄(?\Y~j4AUkݓz8-Qj[Hm¼$Ȋp[4sP)hz$ai$iYq) Be%Q#ݹk7m>v2+ռ9*p70 sl}OyW@XԦҝ7ƨ͙¾}HwQwti<9}eu nֆq?{"4:EQ/>|7sp?-W^śo_~e\par-ܧf* TJaݮ(( |JaC #FQ.&d9=ܶ I4[+ 0c" &4:UF!`%f> q6ss}ƽp :.0̸@0 [.-CCp9 DѳR2#nȘIU0?' A*eOdM:g& CfQrSrO#ʙ'n w6\M?.]9ҥKmf/IL aұs Z%Çw+#N5:\87x۰o/4ڈ4vD`F%{7FlUp1 EjqaHEd#{*ͺ/!Z4wO9띣ɣG.OYKDf 0̱ڻU `RkIU.d&TF#m[iBW%"7b95mn;P,9d>wuS:!c.ˆ~g'N'w8Nt7o^;ZBsHɣ}F}EB@PhJMa¹&H ! 8)I+M(6E]H F+Q(S{H @N7.аKܩPt NJ^#&2c/,k?,-~ KX4=ƽt槬O~h ƙ"Nݷ mvxo&d0$g(V*ѭ D?K uK+NZRR`BIVk9^w)G$;?cު{曌VZUv?N0G.0  0̱![ ipVZmqѥcfܔMž; M~JCL/έ:AMY 8 '?þ>)D0ӹ[!MMG)fyyo>.ݛCD ZRȆeDxK Ҹ')arί(D>?eL.k\@xX#)2ti\<3OSڷ]E.\طo&dߛ 0]`%0 sb%c0!*57pˌ23mo6J8f|";N09窙g)]ܔیIM47%,< 1!N\ŋ W\|2\sW_=CRm(iq aRJM$ rOomĻqa~OPB~q'RZJ*3sSZUSGW;ۦrTRߑQ(ar@0 ;^,*s؇,=Hw˶s"!Tf҉sY!-$Ky:2 oƹN`秴fџ[x,ϟ?}W^ݛy1'L޼yΝGM*cҮE8霓>7=)eaBeQXᲀ& "H\VndطqV.ȌY**e0vP.[P$go@pى{ލ0 fa?|6Ù݃טaeiC3aPQann-aߵ}~PYΛP+#Et؏몾Fu0컶/yU3; nᕗC۸p.\+W͛x7aL#ŋߊ  )|[W$r3ˮAIXdU Ǭa@ʲavJz)S?Nmtw*~%(O@I%z"}op[¾Vo/} n^Aa#To;g?ۧ?:1o{ KOx2 tJaXo*ϱ(}0#6$.4d ga[1JBpEMsA~ʼPtxBeE_S{=݇]t))g2GhXVeS"U9P塄qI YU. ֕MD(5< ,!tcU2:3) @QUc;S*T9/sBaM:Ik̭6q4.Rg $L SOCG308NrBq5c-\?G.Nd h+P)"ķKݓAK,QP{g"%7mP(jF=AAgsP֖;Un $7ٸXEV,P͜$ !mPBCAyT %l2)맰G:{ox 0]aa96\{3f*u*U9Jq]SA֦ẢMվڅ|@xm[F;OѴiU%Jjpt*Zヽم=w"N{2tʓ 0鸩U W'ZCwF٭w}p a _иc@h8槌]fy6t*4 i2~!֧Ea30 IDAT_zo{o+z3 s`a96\\Bڜ q9Ӓ& fNW9 nʼx|<S anfO)5>FnjOMnrgҋ} ^{)O.iɓ N?*mxwa`c=f@((2>RB ~q *faڏ LA1;OM@ᬛ2ڎeӈXZyqԞم :Xda {PEOV8dPw>"V"b YoۖREp`<>秬 MlQ]wO4 <9%ZwFUEɱDzq_ ㌋8rL6?|i 󆄚@f"mZ9@$m^4J_ɻܓ@Hkwxvݓ))3ZK(@+ tzdiQ[,9/3,@c> |{~c{)?e1FE0aJaSwg:dEHp 6?h݄JG%c4MDӟ 6^PSP3݅ɐOFGY|}crr3qaR8ěa9\?F==lsGƇ):ǻ'[S{rtwX8ΫO )v y)kj{uu]=)S+bZ6I $?=#RZ'wO=I (UC"UAE.kV7m'aߪ߷k!F/V|J!% {>,FN7eR'qS-6H!{c45=xp⤣!×&w030osQ2 3YXda$ljڙ$5H*iFP,א78>}^KХ֪>hsKgV[:df'nLIS曜#My&مڝ7>5DP Z mA?EC,LIAZA 0#D¹Q02=$ lK(5ۏ)0-,-L:De8ěa9\{EԷPXGe&О pdB;Hþ]Y̝EjZZ{]#!?Z).$:o[m>|bT[C@FɽqtOp.72}gz p8NYsO֢õռU MBDaEJ#.,!|qYhsgwH h 8&fl'pXChY!Mk&a)¾IJ`z(#'w/q >.0!k0 0wZ6!2cu 5Ѵŝ!?eMpKS ya.c2?ۘ!w=¾9?e3m()S&7?9p70 s_ߨǥþ6#)>- ]NC1:l LsZ{)GUm 6=4"\h3SsY5 IW iB k҅w[-ICxo*77i!ZMI7Ŭ(L(Q'{c×'gi2GvQ2 sR`a9R?wnym 5q[J/NօJPê þF -);;*eB !M>m\.lW-BgOr(͛x׎|~0͛7}K.Mzjǎ.ɿH $iJ"j']IRT 4QKʪ*kAbRc}Pc$&s8wü,Rgȸݘȸ Ü\XdaWa.98,ht_"4a(nqJ83GL GnLDܠ.nBe^xyrOvΝԽOy9G;?%}&3`qrwMy&8PaEEP ޭ-c?"Pö1:(EQM)LIVt$KUDtaۃ1ɔZ nQO/frQ>_ȸ Ü?ڂԛ_j ( .… r n޼7| ps\4eK@Kݓ"DDD-|nH Y=4FLR HKKR`u)8,r3 ֽ/PQ#JGa2da@%RaRW?ŃV?g~u&95a}JaHp}J*Kd."M# J 9aҜ-BNǰ''TO e@;-~S5 TFjƘy&ٙPskC~e~QjILa} ROm$$ {Ǒ׃r4ihDB]H-c)udܥ˻7'|q)&fu2䷾?Nd\aN,P2 0G\xwW+>lWY+ ݅AJlrTVZQhDB]8ny.At9*GF*յ_h kO7˝ctF'TP Lʲg7IջMq /f+LIrOqS r] >wNHefޡH/l ''rŧv( 9zόuo}&660'Wa9nDlGe]k2.$)$v}G" FXkOYk Tώվs4]|sxK'7A¾P~Ct E :5wچw2'3.G(FE A( nu۾MˉK5MSԮu 8U/~u<5'/ggNJ|8q9 0QcTqeT=Y YQ9T̅dP)P﬛,T互뭉 ƫ*udO*O=y WCPɹ'':w^f%0 smJfsT|aq}5/j{N贬NϤ_!0%F=yHp)]Hŋbcv.39>9q2@̆w B>Uk@)*Kcצ]U#$Z{ IL# taN]@r&5H~ddҚl&+Lk:ֺmEʖ\r!!ז$f@s8WyD뇻Gx\yTeUfU}2##<zQdI)ļ=so cF<# 7,P2 0sw`WLJnJv+PnʠKw{uiR;1EmplH7cZJ5!'6E1HpTx1FXʕ+P$י'׈-J]uS1PD 9A;\_cC2 )bv60PY hJ{XU֗$ [*9k\t°R/OmY88ff_aaf ԘF ͥe+ϫq nmx6 Op5!Ds}{Q:_1=9ֿW</<מgVWWK/ܹs.^v\=ʒ]%MH8FDJnpO aQ!mnm"XT@B)SrL//-89|w=7C80QJafn=pRjjAY+9#]F Ǎ*˦k X>m/D*Tㅃr < pB\36wŶmr]; :c(ا0 !\[B "dY 2нatQU#!3|pz ;HۯOw:fǻ9J@0 - {;)OvGl*G3P(JiIAUYe{Jٰa*"n#dp.ZeE;OfroLw_x70G (aw.T$d0IEP9NaZ)[_mNq3xP8;4<5 w3 s&9 0\?iGOJ&M rv4zz"X38Tqh'@Dq۔J\yj*F:058cg&6kkk|r.N;w/^u4 *^3p-d#|Hm%%OqQ?g?wp'% dw޸RS_4 YqPy~q,N,ǻ9a;^_rIC'aUӲh tXuQ`27{mD}J! ľ)[" )9Q\X4ƹ/^8u p…\S=k8 ցa5&MPGۯ>{Yys!AR@2Qy<-b_⨤=bDž3}8na,,P2 0sk{"M)8)(70k]o'OٶOs|ףi}Mo*2VxYsQ'9ΌMɝ)JPiޕQR ]|uL^FJ rHA 8XZȶ'[zd_+x̛ UXda"ڕHi w5Q {fc1S7iqSx`QuMBex̐ N(ݻs_씰.$`ܗ.]ڷ)\){QoZwj>  P Ӿq1mWwwHB"!`FY q׍טp1xY/ZuPVSŠ_xO} xox70G(a*=ߍ"͐X3 ԅʪaGNʆ7LelM컲_tm:V9$LR\]]K/;9Pɱ;wu.'8@)-˒ܝ.-(e){dt_x51&C҉lD#wԡx70G(a(Ri$lgH(n@F XbbXR.f7waGcZbe1TzjD'N53X?N)/_Ǿ_y啹A7"Uܚ&mFl-}I)@)= m 42]k[E@lۚ],& 2)IZbDQd#)Lw ;[B4F[kY$ؓn/Pra 0|2Bbر";7hrSԧl}ҭ)BjQUָ~D{JHHʇ'8{ȬLa) Ϲ}Jg mR=iJkF)] )!D !#DQ44,NSPTһ"ۜm,NΖms7x70G(aY<ٰطNn6ҋy3V۷=,fi%npP Eo;fd01'f_gr4է|:Oܣo8w?@쳮kdHJ4:دt2I ŐQqqgkí}~f+̱i̖ܽiw>?%ǻ9@0 f}.wP8B(rd c=9ZyrB7%P}:)ק̏|bB\r8p}ʝqm}/ cqH6DZ r0Bݓ *" !A QC  S4m)'2hPgCJUF: l[tP>Cna:,P2 0sw`c >:(k;cH{rޣǭwԧ)kH;'$B{蓥_w 0=89m|s*\r|:Cvិľ֠lIƬ)8\ /NJjOFQhIb~RrSܐgsr("$b+?}l%(`{]`g<0͘701ow3 ð@0 y,<8h [f9#ֻ}φ7%0v}ʡpbf,=V(-TrsTg0 v>erʡdwõە% 7tPicJgq]E1V0kb_Kq޽["qdA34=P'ED)Nڄy'eı&;` 5 ("BnTޞ~N{-`k,yu/No9ysaJafP[4+Qɬv6*AJ нlNp xНZcn?c)n}/F=7qsLBaX[p4DT:q):w iyRCVOړ»'QH*KA~qP7Zp^F:0~}S>J'PCޝ )vM֧Y9Oߘxsx70 0~6c$[w2h"v1ܔma» )B7\^ywXgrxQֻH_y)J^{إ ۴Qd{Β H|n[H ƻ;0xw:QDw3wIZ`@U@2NX?@e5<[kMWBҊB⯔֍i"{'Uק[ΕHna 0!Jm 66fQJ9^?S6f7w nksS 1P.YPc)ε.ӟXǹ0c\2pOD|#d2@;$kTdX' ՟]c2,Ky8snO@:ta]Y"#S"}@Gbl?++@wy|@@'O'Nw'et;sf@0 ƇCi*{AF7ȩޛݾw[?T[|3xv~9֧,LX2'B Fstie{1GQ3S>%pmadA5lQW;?9m2HJ2B;m de-E >rq&\V;X7 㖲pKjeB_5yeoHi 1*U.~~63a1;.x70Jaf.P@lch}ʖΪSl* qm(rb]quVgr֧$'w 7Ǚjŋ,L֧\o*:%J0D?(\/{R\;"mT,Ml3|M.%]s73' FFϷ;1^!j3@, O7>>\NCx70L 0\oW}zU%Le&qAعaڋ;L$@3'sZdk)[H"e|r' ry3{Z}kKw mNBJhܓKъnWr7T^E=)"Dq A4@(tOz"L=o|G,-ה̅IS[ IBJ_PD Y,87eGRr"* +d>r֦ܸ4w+PIw3 @0 (IrxU ;AiP՛1k`NBTfc1SN}f<&MSҥK&OyʕR}-qOT HH@!N[IIH82v8$=PmOƼg,unj}I7$ qc%Įn Eb0c$HUuW ݙZJgL(w3uC3[o*,P2 3@0 ̜=)n o,**ݬ6žiuư&Bk۱uwMt\ܔ@rط6fxJ}}NZ??G˗/s=buu/R>/|hז wOľV_>`uO$+aݻ#람: !T4Iԭ7RڞľBm>žs,صQWaey+ǎce8OcĝED dZ#3${goDCZ[!3T,uy aEI/V9xoo[ټ(TU`%0 07޴ʀ"8Ucҋd9]36e~{žuP+ !qƨO);f.L|;??*pקbOyŻ8>F+صB~ ~+~ HQԞҺ'ȭiҷqҴ4_§$TuJu ]' VBXA2^cXY9e?~+N`aE,,c!4uB8 7'}6B cGԺ)@I=9g?wO!y*/gr^aQ@0  CCF:*1AMFA:*5Wg(8R;s7w SUuc#[>eMwBm8 /s/cǞ;طAt^[[0{;ϳd]IX˯BXIi T"KSisN'~)uu}vh8i40ʙDЉc,t[Y:Kqlo#B?4@)A :B@D1DC?ǩGa샸.>Y1? (QCKGɫſ,_C, 0eXdafko#VڝÓ}ҋ_ oV"/LBsΆ\'s,Lzv$HđB"]["277ܹ$J&H260Pe{Mv&RsA??S蜼akS$Vr[JrՁT)}~4xw<(90 SJafox'o5z:$ 3]ƾw9B֧,;'GǾkO:s.T6]sa:AO'֯ȐuO:7m=ijݲwK(@hdY2mo"fK~ 81wు! q(B#tj۠' !54&ǖnc5tqsy|4N拈Ľ`nMb ΀HRcyiOb ? /?1Hd7Cݼ{^ߘxgOw1x70L(aٓh6O"T 0Mb7eNM)SF$էFGeS SF'os؆b IDATwu_wLTrmmmnEj[Tmv+5yq2$(wO"%I N8B:C)DK8C~] L/N*pM*\b!!B(UH ZC`qɊ;e}wnڏqo~|"ڰp$e(,,"dy@A =0? ~e`İn7%PwT)sO?ocTgr."0ݓ-ߨ4lݓpc!mg< .]vI!:9ʐ$$s'P~% .:'UdHkѐ0VȲ F)d*Cfl##`y8q XXП|O>B̳Xx 3r֞2,vRR"0>_ܼ}h:=yXAM} ;,P2 03/AxP$"gipL>r$ "[&Y٠N[waɃM>P!Ѱ܌TI?wORYIԅJ=!ch i$P|< NMqKSug @ZAJ0ij>`N?wzBG@CH>l\=)ԊY c"{c1~S('riFJw3 3@0 ̔W>UV=>(G%(ܔJkHAnԧT8tT*BiS?7Bҹ"޽s\gEfe}wݳ߫ µ]Tɠ Dv qp!JoE(A$U,I% (I#Ӹ:dbԦ+r0ԉ*6mT,Ma2'NQdcܧKzҏއ|1 Mx,mwuE̠ҹ) "R?N_ۗ:jpaJaf>S{3S*S6AnJY Am vc &!=R{A"TFv㞬(tƹYu Ļ]ƻcDqh(!#qЅ1<r*pOH79@:cޤ24I;gBH>|/Y])TB"l^xfؗ7wfig?daO 5ؐ?$)=`ػ"rhKm W^s-o/tDЍK<EIryuQ=QCsOޖ'K rO*IT5 ld?6t c'͝8ikhA 4`,'sR.Kt{kw3 ôJaff|a7vq S B6 w;OiᢼC0&7eHg$-ii9J榜˲Q)%}~jg9jŋ\gq\pVr[('[anʢpI*JA1eR"2 I)_Z k{-Nj5 /I{2X'eB'}wWqnȲBxuXQNf9i2"wtǫna@0 tw= C *[S';5!y)že7>?/*+S)}t{rz"'@t)YpݾL>^ž8~u-oWI0&wOK6;wc8NE'n!%T"KSn.pnmݓ{kcG/N)6ibEKXX{;௑ d䜮E0&G5r6~}(բx70pXdafkgVp^Y[ݔZQ v7PwS}h4P;,w]z;1pSFlWi-]3y9\tiba),׋-1BTIFzqe)']s/NF1(`sO)`uٸH^f;)@̛ 0aa gVž+)elդMnF:-)*Mbex>eQmqPv;sx7יdE[{nlcR z{R.ܶ_ƒ\MWdTtQ2dYtzI"bl.>%)1ZE}g@L{Re:Om8vaAl-D:2Sd&P: :Pz/y(Jw3 ÌJaf6*"z컭>exOlPħB^rr7BeNMamD}J FvT'2\g W\ɅqcR%=۹[J.M_IA|tn9lsuOQI(W9iL NړI'v?>e~6̢7nʶXV+; 7U7eŐwq q;(rҚʃ \g VWWK/6wܳcPݼ$Z9$`m@0$9R{R+,E =u'sqR8 >Dw&},)m$),@q tQ   3rQq̛ 0%0 3;\7mQ) {&E.7:$Bd֧#y!$܎buF*EƻwS4ǩƹYda)?dx?v{6~RVy=$ƻ 0AI^p=)A YދB6q,J>}X^ٛy3zxDw10ܓeA&PI,@8Y@BYǻaƇJafFXqZ]VY :xch&T.(Sp!TVS\0͢i44 DP x⤒r{$ǹYVR>kEruVT.I"+Lʊ8R[Rv߇f 'ccCDmn6w}giy%o#`{$,=MΜp0Jw3 saa NtJrfd[F4֧$+T7^JƾJ+[{ZjB MYGMt(;}K(@wmǻ$3TSx$~~ϊZBewO  ړ9NaBU( [Q#bhA)~wcg{''fAIYҒmsI~ÏqJķnBvyk&sˣ{@#{0Y&okߘxgzw3 Ì 0̾'o omC)=>ҹH -mUR(G7w|)AAy{ݹKS߇b~iż [d7ǻa&JafΛ䂠wބB1h&T)*;$X*C!}Sbo?u])TS2[w-w89L8Au& >Lzu$~-8I\͏?}/TVݓ.-\= (r"I jOFq ){2K$.=s՝y>ű* 3{79Bt 7"ƢX>u?@e)J@?.{XZ>}5e,g1ow3 L 0̾C'(9C>eF:6/F%OYhxxIQr_J["8ݾsAqv(U!:y1;aC2qn`o*z)W_ƹ]zV]StnHr_$Q??a2dAF1=C6JZ{1y8E@goܳy}0O`0Zh^w @fz]~iE H`vׁMg3oM|(ǻa&Jafߡc=*hPY}k˖q c\gn8׎#FN 5$@,7Zr $MBt6N}Ju. |*nMsj,$\xI@fWrrr|t}Pmms$+_L _{RZq2u'(μ{{2\=; 8wQ'Ԋ$Hpgz/0xlx+0O޲N.L׃NȅE43S(뢜Px70@0 ; jEl'lO "naȢc6.b,t$s2jqe,ݤcu42)9GľU fY/ ^OX{\Z_{ \g9|_|C_õ^)}WqOI?XqDkJPHIV{Xܵ`rmERbZ;{7B7B); >6tno!u! 8(~kסx70@0 ; 8c)pľ#e}ǀ ݔ%\TAH_$ou:Fqw$EQYGw/bNs/3SgRu&ϝ;K.d. S{ҭCg͏7b>Imlm瞌{wvÏj֝Q8!*M=p-S޺'eԝMd[Zڻ0{w_ [,y݂Dk'NݏFL3 LUa %0 ->TbN+>c^X$"L)H! bŸXOkMZMIBLPrxQk(`Y)שhp)}~j:a9xQ1T{ǾWO?}|r D;W-ݓ"Ec04)'Z8)u'}I/L*UKK&lÝ7O; E0ؼ ΢@̘w^{kk_kYƻ޳0 [Xdav~&;#)8 \<|M>xGQ}d)5[wQ w ]!RXJ[*:Wr7{L2Wcw^i*|_Տn?;w'Vçz^IEyx'N Ƞsw!;D$HuIVc*ۻhNRIړSئ8`Თl_bp>yYN` zk {X8.{؃}80̴`aW?S ٚŝsS}JZH8f?/ʼ5br;OiN 橍2OZ2.ƪҊel{W1"jũ5jL21N7T~XyY ToWƓƹEֺ Zoྨ~ mD0@em$A} w@= +LSZ;aUxwLfٽ;_ lom7|ho>ZO}uZwssa:,P2 0K:s{b c֧4gJ\> ~ 'VSRHtISFBoJI0h긎}O^n;?婎WL2o7*Z6u7m02[xbei.wpi~\o l" !@R@D1H!Ks2UqOݭu 긨U}0V]WqO􉓸uo^g8_xg.Praf@0 +T?YhqEnZ2}U*3׬PS>P{}j~v>=P9n}ʖAWTrBetF5yGeqn3&F[H7]t-E(!~pϟ> +뛸zk3ht18F0ZCe)mԻ'ifTd윑B^'el:3?,N?0>ƽy+oLY#paf@0 /:s. bMom0"T$R,]e>(r)4غ+swBet;jgF֙87s_GVgݮ[ "'mCWl۷Nauǹ\Hl(!D} I4F[sRF6MImo79 c^ IDAT!% F?O%ǻav 0̾/EG.\vUY!e-m  ƻ++Be!(Z11n]O O>!<;OqSzrcG q'VʦF:y~T|.\Ǫ:*:a6yBe𷮺[0Y!"'PJh*:w9:;8;} Z?Õ^du`JS i d)J^E8"n n d{=ln`qtP>:f,P2 0J/ˊ.y ȨcBmꝙA,4NRr7nqXi售l_ יd oqƩ7YLPۛ{)AQ uOFݸ I 2|p2.+_A2>VYbd)=vXq2]'nq"YI{}ysafw@0 +a;|ETn}S 7fP' 82abb(T~^tSط{>>^ԧl~C}ʥ5Nƌ5\r%qn0~o?h*Tt$иƭSBIm8nk|l#He_q)0Mp Et;"'h !na%0 aK'ę\F=m):!Xf T*mٸ.; ֹԧΗ֋nM/ZP*cֽ٘>BeUi}v^L2GoOܟR*nsOJjOJ -KI:wKQ"?)6)h|׭3F9MorEN{Ԝk~}"S_-f=,P2 0NIY3i 7q0I0yZKs7Y2/dJQ)s-3*}o.Gƾm֧l)ŵfAݔ>_/ \g97W.ML@D6MQ#ocWNd߂ ) dEQ8qbՕ|;zqqd$WD5t ֧\y@na%0 ow~P8)=^Ql9eZ}J'NjmSݾ5žEy}J lԔIZfg$>e9]۷R"M: ѩQޔ!T>cm;4֙/0 Iu঄A%MK޺mܓ6;w :(sR c۵;cDQ Ȓp>mN$ekV4ƾ6޽yug7;Cw3 L(a}O>*נ!a웈@q eRWaHS~&v7 }͠>e: b8{j( 'O 순 Uiž2>uzj(1{QG J}>(ݓecpIGH(uOF1Y"w z@mqSX=K~kw7q T,ܓ信ں&wY~?ܓPYxWJ5nM+ |Xas٘u"bHA[*IPѳZqGp\c2Jn㸓F AQNn^>4%rE2mnJ ֑ hSgqu \z.LS~[JΨ{F Rzi#lcl8f4:@\ga o3xVׇ`[x 0I9'ctnauH8= q{2BR"tFSy$/}X=u=ՓǏ}q )q loɔ0 {So\80aJaf_!'uMwH6)% P#yP>oo Ҟ„BLj\ijl}H\4dJAJi&pm_@ieʣ) 5="t ^/\9יd2]PW\uqbܽ Q=]dkt>vu'IP)m;w6t2*Oko|'bcէ.7R{HJʠ7 yw#ǔc(90aJafߐI?o^NV^.TVHp i , X7v7Ԏ̝d#բ|6q##o+T9iLO/8qrhc2Sށk0nފaLPYsqa!r$\ga_wעpAܻ Aċ΂k#]t l\VL"&W3CBH뚔-H {Hz۶1 t1{Cmf.T^zSyqҮJ[sO̍arz_w FXda!@u m"cL$lV*)Kt\|@ Q Hvwx" O r]N`}E<]jvڑ|̯v~4 ک"Z % Z<_ȓ7~P^|g$ôK+ _w!s֝\X(r$9w'׸qHI׹[ tAw &MIӱf_MI.ڝw@B'axؼ ;-sTY> Ϙ7ǻ9@0 2MtbR)M;6\F2IMp%! ƹ)ݱ%ľM@40xW&' oԐ4A @tݦKrC.Cf)+R*!}7+oQ4*&l0V6j(5(!jDmJ5^~9ǹkv4@PI@r-=Y]ȣ_ /ul[n/P@8ikㄓM.VS^zž?klmI&)!6RD1(T ōq6oLuLqx70(a}#N)1V$y3n˵" Rr[ Υ<]Ttn@t/AP:+iχ91JbuR)儺0@w~|PȊcPI h`h4F8qRۘa5uW00u~/4Sh*wnC!A ${(%I']mJQĻ{2vB lo`ړ'ק/<AN~aDM)G)n߹Z߳sߙ!n,[]ſsf WdvBw zHEPgu9~"ߨh[Q;9q Ml;c*y}S'pK_OQ:twkg94na3l 0 35v>2MC@srqC+~[y?BeUtphㅋwCsERNn'D`vth8-?Xc~~ pS aݒXZk<Ǝ0YW)% ϳ80^{@ KF!$wnh"ItH aH!AW%hFt8Fu E,#t!=Yem_uۅ™>եC:xq ӆ: Sepsz"e4k fA0 @gIk@t@oسBʼ# \nh͔dk[Vbߙ0@ QOIL}Szͭ>6-ބJ}=&:>kS:طH/0D#T}g]RES )% >1a*M"Y hwgbaŠy I)uO,F@28edmO X\[X .>եpkJ@.,"};7sY}hjeG?xMpa ;(a}wMIh}&sU?0nJ!ܥDQ83KN.*'nv#ru Gܔ?"򇺽օ3إpSS4;*y${_g4ZkdY$#q r5]aRXw59M6>6Y\t5#D8)!ed%Fg݂d/}9$ԅIlb%9eďaĕJRʃʃ"2cERRخ Y J9)"% sK^+k}3Ϝˬ5{=|}_5Lc2J{qr1c5'NݓO~keS~朷/1#j=>ݹO?noN$O;IL$ąЪPA mATwy&cqwn/Vvc6("AM7oRi~h V:_:tucy[2;%v@qO1}/|'{cX{2*^5u]&HU'_=l{K(PYݓAhTU{ 5Y/[Y-,t]"=i!/qP;koܜ;^ }9|/cCyxw"xIe"H$. T Ql)]H/و݌pj\Z2 zQOiiܛ^plk֩qtλM슔HvAlJPZtH⦌"yMfww]׬xZk1H\n^|;SPu>7?舔|FXw^ Y~I5ZL)q)AƘ<'H Z.XϧS?+> /d(h߫9K/g>ݭ#t-E݉Di'uP&DhxǒFi;]P1vM4kA†ipyO)~J0A$˨O0 (')llntMwe쑔ãAT{V`:Ȇ%n?{f+PZ7*L>'ȯ߯ozyjP}?| )Ћ&)OJk/j?}"XRD eFV!n]-wO1>fe({|0xs?"/_OsWvvzNID"qHD"H\ RZw9ݐȵxwF?en+uu-RS~$Svmm?eύwqTvlz13n)7X. =b fٓOh]Svb"˲{$=D;xwm} 022t.icƐ 4XܓXk LxwN]Y/f,3Dءڱ{ P&ң8c{\=8k_z |:ž;uQ_ Ż D"VSGȵBetwlTJA>n?w#rط/T1r5b`k?{[?#lƯOylqD}4] D'T7 Db;7:[:ON*6T;P8hFCf2Jw[Q~j7 ѪuG$8915=hw#ƻ9@ ј[Q||6 ӹʪڽ2Że D"ޮrD_R9;(PuMvEgCdɨ*\u~ qa*UOٝ"*?kPOSZ2 Gy)BeM2ۄ,Z)Y==B_䏞&xү~[O\ݺdR,GCۘRJmD@+T S3aXZL}Z+8;̲=({RZ)T^=0_y\#ީ2q*7?鰜Nxw",D"H\ с?co!5o ڄVİRHQ LsOtJv\ g~ؑ))֟k[?e8 cm?__?y):tHJ;vۃS:Zu/Z6<z&Oߗ' _;މkrjX޺AZڽ8n{r]{qO$/JR$17sC~-_vēkvvw<)ޝH$. AH$ uu&tv7*o6)wNHm~ܐ1=Nʳ)[YEfklo)v'vIһR܌}DžxL>һ=qn04=&{lv=uQe]QB4(ofֵqBhwݓ8{'Ghle.r8So\зt߃P͎Y62}6,*aEXF2~ 19DgSGv8!qOrRQ)W' IDAT̮zB~h{lN':O?%'ݔOYGwۺVk)3,UUR;&%O8$O oV7o@Q"(nmQ`ZC (^ ɩ+Vf;w=)Y "/A)րUgoSʧS?ei޻__`%D"d:(D"qa(p΅UhJi .MwVS  zYf| }$|ע u)7 tDF!O'q&JT=)A~ͶS"~JgSZK][l8ҾgrrҞuÅԝKʯ|5#k7}Z#ƀrGWG&ޝ #1,5US[䴩2n~"/0(:Fw'DrP&DBثt]Oٸ{ov3{R]Ge/?o?kn;;Szn?tܚ'qS4wtVUM]׀C+Lb[74(tS/~A~}'߸ʯ|w 9'᦬ԫu"Edhɜ()/us2]ۚj]]B1Oln.[NL$._ߥ[ܑ[W)wr* t,'/ b@QQ98(vzb8lKY-au m(JȽ{dyN-90hݜwO4ab)ޝH$.)H$ A'oibӍ^xs\EDæFls]hqd1.a]Xy8s%6i!E$Y&D s|ۃvȡ#=j1rOn׮Gs]l[k:ע:-]8d?P'e_G:-j~bDi@ 8o{chPvc2DktEI5TR'>n &`9<>by|ݺe;w+JCG jE`koko;)Lx~zCh~XN$L$ŰT}an]ve)˲炔6si6-BQ1qRq;<覤pw ʐ_'N To=6UmFi{0cTQ N8, Y_KU׍8?hQڠ,+tњ|rvڭ)kaw!NpO,'O5r4p_ݜջGPbߗo|1N$$P&DBF"_Nƾ>J:SFsΤnFYfȌi)žU'}V?eq`HbQJQLww䵷;Og>)6V+߇B巿~OD"qID"BwNOvu+@9pւƉ =dbpa.Gb?e!)8lY`vEW$OSJco))p19OEfEOIjPJ{oSf(NIkOs[N~r/F"t+ݍ-k!~[Y?&Rn؆ށ2, #r@m-5}JJk<( D9a\NS(n賫8Z7 : nj&c^1xwE)6."|tOD"qIe"H$.oT81R2 ?Ꮆm_r#`g 4%ApZNBc8'(BE;,cqM9U#:)?`UojB%~ Z)8˜AȕF8(M3NVJuZ#H Z{-n'7k/>O"q]~ͷCmv9lx;l ޅj0BT^nCpp0"7VujjOKʼDZYL޹I5t#v]y& #*˪f`#tOnc/OzBko:'.p=G/XkN$$P&DBhAtN8yہs:qAQNvšlE(]=v:Dlw3Jkڟ5 J;9]M3-k2 dt^O!0o:/+]XPۚ\̭ q?Qq'u"߾P{ϴR MrryRbJ$^;~a^-{au]kwqc;`8BFM[89d81kuŪdeC[);bj[:m_L|XhzR~Jp,ٻ YQ2_,Wkpp{71Q'^/_I|¨󉓑~WN5_|\"ew'J(D"q!ܿ mpֻzxl=}[$C NEp&ōmQCܕX\#buVS:6J17݈ܜP4o4sNqF1RUU#jcPAc{N[}"O?Mybc_W&|g>bߏ'=)ND"qIe"H$. Au.i8&yuSq-1]`jlط林Dw#`:*D8i)!Sv]m{R!8 ~J'4huM]z&$^[sRZT69;ncoDb\yZ"uݼfjwJY/_j4FC$ȋјxh4! jrr n?~G)Ed:N1;7Eo;'yl{{8e, ,o^y/G|oڷbߏ!NFOyww'L(D"qq@ ҋd6q8סW\ZE7H\YKDPZ6-tJG1'5NljOn᪹;λc $0VRhR̀n?VԵAxA t*ٍo7 76t\oOBs~8?ź)2wS_yD"D"H\"RiU3cQ+hu=`S:tn?(TJыo~Jg-a~J\mm1i) E>*)e৊a7͉~Jֵw,aR ط_"@2RL urݝ1 S>b.ZOXJD"qy30H$O2:]MZq.HhgSF}Y)C";[7Upj(x.ΧoV5t5.ƼcUqv'S@+NN=R,'+J#/NN&{ #Tzɬ'TW,k&vkQSfw޾5~ᄅ8wk`TgP Y9^̩9cȶ~ʗ')0yddr3歾3H$$P&DѠZaļO駴ѫZ=Di$eYFlvyGcziE̛) aD =6k& F#86@um;Vajvp=v)[(PPpnķOD*L&|o gSvݔ?~wϥ 6:=NqS޽=d4A"yN c3UUX-sU]C+1c^,p|:˻q'ӄݓYN&L 0].C[n=MfoRB8~NƿOx`4aoІrI WO!y޶N$ O(D"qaaPN¤&mwj?nKt1hֵ%k[wBg"F?mDnOO+QQ5>RSWH]!Ɖ`sO霏}wxqO^,Oى}55Eű~ɸmVwF?e~xZȳ2ɓ,gƓ)TF7Iqyco >ysfs/NkFg9e∵,gSbz룻EgںBN'w0OOx1gYqJ?yP ٍ}~s򄉓݉D"Ie"H$.  ;nRҊm?v0I NyXs6Z@uWҋ"%";:}d I9X<.U$[¤ʈƒUOIFPa?IO:iY `S5 ߱?O SN#v<%Azٹh~|zwsOl7vNFr*xgL(|d3Ϙ-k*kdsR;j>-:EЯ1Zl*zޝƓ+b:-sIOy|'O+qr.JtQ4x3MPjlbj5B)ɲ9icqt&G7?`q6nv?gPW^m|w8>cPPGmO/TR?yNڷܔ霦<$L~dSCT9@%&/1E`0fϭuo=svz03$qh9.q|Z=͋L6tID"hIe"H$.yvbeM ;CڋuAX/SX$I/:o)~x3"ʶBX/0n맴aukQ OيkzK 2K1Dmc;`'1f?e4?YO)ǎJ@t= I8)_z|ݔQC`' r'sQ,K/NNLS'f&ȃsZ9{'}Ÿ?/:βN;~}7ƻ'2pZ9ʿOyRNڷxRN$IL$ąox:c+д*q}X3xA1 m|7v;(NibߛǤ qv=x~9\G'KUMUWdY1"+)#B3=ѭݾA}|=E.=eB) P d?9G59=y^i^2+?O݉D"I(D"qzs'wZtu˘Wvw谴:DsdJ =ľ]Xx~mvf?­ڀ@)m1 wwjy<)S%~6Sx$&ƥYf? NTօy~Ώe8S:|!<7cOk Y)>ij=2)TZfxS|dZPY{IzpW^R)NBw'&IL$ą2ɋFlƮ[p( -HG1Ĺ aބmC_%^t΢pd.S,\Jp'0:Q Ң> OQi'Dӆk;FS) |5E6)H矻% -L<珮.ܼTcT9Bt=ֽJ\srb+@@c8yqҭpx[שb9_|&B. zhZ!p:9 +?y/x7觴 !)ޝH$'He"H$.AjǭU$vF Cl4"u#cЇm{%S:huk?X[zHA~ʸ^fT۳O)euTilSB~7VpS [%F{ 75ݙƾ?ONEĹ#<<)= jɢĄh`8d4E(bb7qU#N8Y`ƭWrxo]: ZwBawNv@] ZLF^5uL|xbOTƾ}l'vS'vwID"8I(D"qHx[%)ÍMF؋b]30'N®~L JQ)ط̳,$-3[Xj2/Lj΅cu^$x(OlLӝOi1h(@B2NNS"׷Mtq':ÄȧI)?ḉu NfE`0d$ēM(D"q #Ln]-.2)i֍~&@QAt/D:pOn:07}f*GB?h{>n;G8/jSv"Rݙ gD tn/Tz[X2t_HX4z'%aؒz$.x/GcO: у!,8'X|t6e>^{qZeYIhQ9Ӄ|Xr ?cj0{ fmNz]{ܹ:(C[)źYVTֶC'SvcOD?c,NN1YL"H<$2H$ʿS?=V2ƾ]9*kQa4.qFc?`9w},ynJn03e8k .֢dlsSݎJ_mI/X wSX{㊌)w:6q(`\'ı7A7gq%kPD''gAy~7ƺ[qr01O89ֈ(r㝓eSd'?xY.ᥗa4k ̖:M!硾>nR{RrPef^5U%ƾ~ʧHD"8$P&Di?pRgSc(:!(^Zua\+9qcnP;3x~JCؙUF)ͽ)Di)uARUS`Nocw)hL9E7ߠy<$œ3ܹfRU$/ r`0b<0M(CtS9bd6I݋9jI (2"T'o\w8C| F ~(``p, jsTm2Sz'x;o⾈d7}wY>n&N?%(ӻ8ZǧBe^$P>i< =ʩ~RdFCT9B9uF#ҋkkY,sUYBc&r<0Swosx}n nDV+＀C)k/,?Zֲkj)1|Ǿ},ICqN$Ie"H$._|6MM{r9ٽ tq'd|#c|=&e1`'Lv^|Xt- ZGUv T7IpNyGc$~J(iD^~J%=ɯ[~?e1s׹>V.'wɑ$;/`! 砪+v~1r |~ʧTN${D"H\8ܹ?!E+rCN󆞀cߛ.KQh oC>h?"W>EHZA2Fa:1&p(ib!B~JZbHsQNSơ@NZwf~Jb?KܑiicSoucHr{{mH\(9}/~O 﨟DOƘA+H9p8Y GcF1,/@i՚r&8Y׵C‹ƠjrzA|>9 XX ByRpGǰQ5U'[ )'S;H$M(D"q^߷0ۯqy[bY:Q0*m워w|~j*}QZ:*cnDl3)>@5Oi0ͻObҙT)۩q H5׀ T,ɳB5;C{D¬5=xɳ?y8 E* *+!`h4f810yrb\2OY.+gq R,9uטxyPqKG3\7k҅n;(eoq{v?hJ<\x?S*NBw'yHe"H$)K1FBepcaW w{&+J!o16ӏ|pDf%~-&1n?vSn?OW?r@R(W駌nQkZK+[J+f&"ft^x5Pm'k"%>sL< R/qPMLSŠ MGaR |b`^am NJIyAd U舣[8q>s4&Ƈ(i݈`*${S?m1'͋ZN$D"H<;/]7Dt-u3;`p*×^a= n J+2|Z5:!Nckn?u^(t8wd.rΑeS~J1R!j(3 ݁623#'dk?eѓ{s;.a0D 9Ybr0b81,rz|1g}k;8Sd Z8:xsxtRݻ'CXC="e*2 y~ӽ*Wrby/񡏓݉D"q>@H$G/Gn)սD\nw鴱o~Bl{pbvw(C{K̟ GVk/T/mqU י z1SOeǚEAqrSMQ~J덧}=u $R>jR޼}<_I'b.K`@13 E]\;fE#N!DPJSdE^RdָՊ]o\kI;=!na}0‡Ji@Γf+~S.NBw'yIe"H$ ??%1Bef[Tr q$hbDg'*0xa4~JGnei-氛O oE҉n)QuӲtr~JMۅJ u}<ʲM[BeG_Iov2>|>e<?;LFr)ͤ,/0wN#e9$+J1jb1gX\WT p yS%e)]-5ouO>w=*!u&xG|]I7qt)_}MK NBw'yIe"H$vOպbZػ> 5ӫcL\4qmDnQѴh1ĉN쉚.;Ƴݖb55]~JPsYv)-z+5Lf*Q8|(\r㹊ےkƹskT2C0ƛ휃ݺr~&P~ek|w` AHwQ%``0b0QtԽ*%jjDjBTFf2Ǻ cxﳼu;z?.#QCy Ļ>J<\=8+)},I`dw'Ie"H$ znӮՎt)7c.RLpKR}n'>àkͮ+=>Bge[D{ףrm?FG% s?Pmc߄}Cطi1]vI8uX8S*<Ʈsjd7dw6ےlv' ':d3F `ؘ8ƶ4I<#i iy䑥Vkjݦ]b-o9s}**Wz|}YǦsjSCѱ6][)w'{}Muoi~w_A`@1x IDATQJac[Q3Zyʢyk,~;ϭ#7}"4k&$%r,'r4#˺bR6=*2?GFQDRA=1q+Yrb*ztp (մJ)V-WJڽ-Q F#] 6b>qϟXM6}alIBNFIF4@ULI1( F[8Ȁ8ͤ8! %J)ш5Vg%`IS{3XdUZQv?x=pe?{1/ڹ<7/][3}dVbL: #`0wU'P \*(4CVkܸ|kVo@1=}n[Whh룔qo{=ڮo+{݀>;y@ozʮtx:_6;3s$;(m癲uĘX "nֱ~?e6a@*릜8%}2,:x91uumg0vS: i) 1쎤O#>֠kou{&cX]502ˌK2 Aq$ y>Gϑ9qE Q[`1R`':+iEe  *$yR5McU{TC?'!R F5*˻IiF,'c (c&e޸,7!2aLdQ@dQWlS]r*WPkPV'aocuEVM(pS>޷q*Ͻz+yڭ<7=uda[Z09w 8'k: Zs\ o3 |ط&me<D 7S*LǾ@YpS žEю)gc]L?%I w=#uPϺ8)uWq5Fpa(K2$MSl@iF$IJHR7qGehAUTUekҜFoܐ`, %/S!R&hʀan@'ctAP@ed0Q͑o2AF4EbB]fV1Qv8Uh}kYڐf, c/~Z{vkZ[(zy^[ᓧOq"~g M#|dIn///J////}[l%ݏ#/=߂rnwjM6Q00Sd!Kc&[kW5&F}}Hƹ8 ֱoB3Jq )4ՒzS?aSձ-fj!(T ^zq'N=ӽN;q)y> r$!IR0""ƍќEEQTTUCYTUcO4߅?яz8;>.h.Msُ(ƈ0D!Ai\1DaJŔQIGMԓ EY4AdINEIJ(TQ0\ڵˬ^f< =~̓?@gP;i{n.S<|è,9;NZO<ËI{Ͻzn_6+|dcO'v^^^^^^^^^JN]x &Zb'u)P)CPA zdDZt?e '~?9 H]T*Т7SZXjOK${2ջ_EP1O)~:' ZK * L44 3@FI#F!42c?yǺWq7 LStQ$,Kt4 IeA4 Ue dYL&%Iiosp,ZQ׺=5W[1I)E;\Ji(0b9< sq CD!QyȲ9$@u79f<1L1("4g H3{c:kW/~ō6M6҂?7k+-,ڍYWKM[[G,J"gWsO<'N~4}7$xJ////} ,duWHԃM`rkPz#MӤB#f)]~Jnl~J!`T?e4ں17Eg]D|T$̭ oht]3푱QmAMhce> pi_1]^L?oѣKa@F 9Y$q!Bh5l]u(PZSUT״Pih{ U5u}%HvS\ɞ(1 2"B(!2|`0 DP%ɘdLQL RDaDـwݳ~ʻ 'ǻnGPzyyyyј 8O5-gJ@J3$" $ݰ:vfSj15a~ʶt?e"-TZ) }KO)&&nu(^^Υ9OiCT(E 6,+ r齶ѽs 0?$APNJ4ɲ,K$(!i5qIU)J4TECQ=7rNs6wwr=uUL9Sv8 u/OGH9`q1 #kBEMH&lcۓICQdE)KÇ~RiG~4Ca(-#s2攤2LhTeEQLc&ń,iTm~+!qsـ,I]Xv\X*#_1@S7Ai) )nM릺qY>-Z0իCPTD)qIMTsa2H1+&MYjN0̥iLCޮ_; ORx4CA!1Z98|,):(MUVL rLQHw Isw;Wpǻn_Pzyyyy3͂O||w._ZI3.Hd~wv2;t=K}+4ka#vjBvv;gw\-)EQ܆{b潥e>fX:MӄL&0p׮]F H,w2{'ǻDPzyyyyU={~f0'Ͽ Xh;&g۹)tN.m[*gݖtei?e, ;ZTh(etDSnh9 5qQuwCtZ,$pS TxoSdTvkk|$NXWѵ=wB3Y^•+ @[iy_vS-$Xng|ꀓk|(w<~u[=Wn|ע3`AX80 MYd6 JDҨ(v RJI,d9y ASo4>:0McW){gtľ`k?lTqV!;ITY*嶫8PKp+?ʮ)G6P'3y@uW]{;}ꭏl9plo*o:t Tn*kĢ4#-p)E9P>9ݭdlE>z*r~JH{3o ;0F{`O7g~J3G(Vj PS=qR5ٗP AUcwܹ+,//3]rG^aC0!&m;x3|z.f6?H3Dj&8%L21"o$Yd9iF1UP%FP77@Hi~LH0$S3 'ɢY|}*6uumγL-o=8;>Ο]Py2;`48w N6s;;tQ&~ O=oO ߝz\=.n///;s[=;N/^o[(i%?t{!l)gݔ}sia KƖu[sCjӜqJǴpnwK3|Goy[pZ@lZG;8G(o6RU~S)kNG gr'2Abη~%I(͹q#/~IJqJ&Gd 4H4͉h!EYL¸&DIN sP&)I#TM=@!M cMc F R:W/C [|ib N 4oTNaj]=!Rc89~?%ƾNDx.{%^^^^v^^^^^n3y+ MwQkN|!*nK[Xyh&{]A\?=m= NS%inSIuW9Zm Ts{[ÞQ4)t hkx ~뙼nNK3$0BDa'f8)  D\ 'Zd V/ҝ1^!1q1Q"ÈFkfRN( (B5 !ai"IÄ"FjMSNo3qcc t&T<Oޮv\tm kr?8Y~w=0])\>Hg8 S#_`ow{yyyݹY ; tpRH0$#0F*(Go3_3,'4% $!S$p2#Is8d]1)&eIYMR@x<diFdDjxf}uk_0;8?SJS)d~Wm~kocߧN·z*j́kjJ}{xEׇl{uNVK@B<8Ծɾf)z_:ٽA>u붵۞[mGD8*맴ŔKQ.xcm\"0*W]v Ǿm٭Y[U?eg -B)hiM(8–AJOɴxj:gY)\}{@JN㵣|ۈvNaD DH1'c(" #8Fu)I|W_< a%qOFIFE(),)ɪh#a8x燙$i#TC9^ظUn\B':1NNXa Q#0JH45O)u(!IS3V IDAT '6]ऍt+& ͔4IY!\c%W/Q\ L 'r2 Sr]r?}q?-zd d]AUCXC؀ ZVI.]WV a&mV:p,gHlA?|WyWb>7:`yyyyyTƹ?)tУ?*yne؋} i}v4nN?.-,pt1#yGG Z5{#`ڋDIBha"ݦoҀɪ*ih bԹ&3(!ЊrщksҁʻO^^^^{#(n~w_F.o\$O@5r&g)g!QM)#gz-Pܮrwvtӹ&8V(xO9/idtQdPqunyDYD(| LIvI Ӕ 2 PIjx$!謉t7SRV%u](I%5d$aud5֯_f%/pz},y%?Mc̀1]E6繩aOّ9p .*>OiSjh6-e.@vl?A`*M ܬgrRNMs&>yǹo?zc^=B4! C"Y)ap8F! i3S4!M33'IB5em.huJ2aS6McܤSEn6ONוֹywBaմo4-|׋0Xy-$ (AKi # HLҔ5T MC(k-Y%UYRU@YG0$3;8 ٸato\τ;k=C\t@?r[b2B!lgEEg?Ww_Duma8Mud7U'@͇NփN*޽\?.J~=5rǛמJ/////}{3y+}h%r֩g#mؐ!5 eZ#E!6 6찜매[fEoA=H;Rܢ82ucnANm7fd{cz([|h>R!7ܙέqd,fcDvp2:'("XEc8<#Ks,'I3$R3,&P {^Q׊uS^-B@yPc޳rnmc߷L1突b ~H5QWhܠ َIta8u󃦺o$,}3cߧ&'ž}ko\3yc4)Q[޼xvS_i}xJ///7Ξ=g?Y`z&o޷Iiݶ5Kb&7S:'d?-@꾓a.=6}=)mנsTnO91to-vSvoۿM?Mt@MM7o2$nxhO-(灑ܽ"MY+ā9dK8&4#r|@di@QERI1ӹ'L&Zumj9W@xt75xp:.sfݾU՛ᤋtMBt7mOěMt}=#>0GM=٧}au*ݹ&g't)um&78vۋ%U)eQ n7޽e't)}koL=羙y0߻x %Z|o ڸZ)!nFtt'}Yie!(8* ABTXw;]d\uִE=wt~J~JTTFAżpXc>=~1^+&RL^h edānd8i9y6  fA@HINB`TeY0)JUcuOIJkl\#M{f 5;9Ї6yկNiS?ݯdaqヒÉ`ީL&ozqn'>sɅ9x}ܗ>pt~J{y@A܉_;ܒ19PyqLOvcjhľK1qNU?hcz,^m,Y@4E<Zkj7*dwZ%(W-u>CܰcطQL=skymbb^8a0(Nb'<0H03iJd=*C*a4)CʢJF6 F"PnU'% xڿ:核(a8 $0;XFcMS6}b@^H~ iSo,KK(ҀL!aiμNuI؛xʹ]?7{k@=-ν1VfHbiN'Lb 1lcբ=49Nm[KSH#ض*nwuAJ[on1w3lmgR1B ܎-॔|m֠(; '7I^ٶBbVB[0iC'8Jӄ, sad@9eYPeĨ(R)6ҭMDk(Q]+X?׾b̐86r) [ Î4*|q^a9-,A2c݈Ql7pg3rCܒpNVT1An 'Wo ':޽KΟ6xyyy璗v:=;zSO(e0d0NF}t}4a!LwpgjطYxs[C;sZBvM ݏλiv}5)=O˭ rVmv`g@KKv[}Giq@~d.!ϴsq is-̲SI5u]1)&PRń&nlhF&z>cZs*|WAQ*IKaVљz01R#ermKOuUvVfw;h.7DR L\: i~wHidLݮ>4`R8e ʢ{z/6*+q[)?ÇSZay9<=5gV{~7ӗ9tkzAo)uhmcR.-w s~JmEvTִ)֙hOAB[uY{g.-{}hw<>Ǝ_6=K&N&-̂lRoA ++(R( 8QQ9&tIJf 9ysR܇J)0pI &G@15 (yRhVHU"Y> LSD(<Ðw 8bd_^>\\B]$;7P.s1mp2ȼ|tӸgdlM+hjtY ]fNU |[}ᤳ$v{;=Ƈx N8yrs=^^^^IaA-)%Z:>zoyLZ1am2 䭤[R{s6)WBfm02l00/c]P6w[;#,.DI4㜌8͈4˙tp2ccΥu]3)&ɄaQ i(T@ЌHJĢA #T@HKx2,-rw0"pkv") |̮cz<r2A 7́rp`lϸ4aչ8rMm}cc߈)o3H*[I6{:9qQqnOi] )|THizo7Gi(u@7+D\Zǚ,3Otq֧i`qܮ+Itn䋂( 00puMss ͓ rM6Mcq&I,J*n;'M!1C!P5B(mdh߳?ﴼl9(DtiO@)DLoEټSoz,,Гu:nĩ9-~L0jTm}}(ٻ,BU*&hw*K8 k{8 (gw?/̭)bQM?)4ͳ@й,w~)5OS RY~J[q\nLM(}*Z?e+|^}5b2) EP{hq`YbQt( X_DeӉ+J4UZ0&NS$%pZ8 {I5UU2LPcLVuM6lfGg\GBjٹرI~o0ǹ~TNt4|ۻ~|ULځd`ϋq#a7; ;7eMrşn؎+upuI6ݛ_1=8), y 0@d.Kt]M9r]{.Q;=3+矟ZPyڭRQz(S*磄rr ~ M犥庍uzƋN}_n嵵5<<W9qQ2ӌ$ c~n$5=פqLLƌ'5Y׵lj ')0Hs.AzBC d$V|a0 4ocL&rY4νs5ԩI?Byd{ @e] D6Vx=q;{{x{Y( 5PUW@M4UUf(~]p{v';}3=˱ y@uj63@jF:b0vSM{~JdTn3R;&f8No,l?ơ(T?1{Y486m-Meѡ%]?_2Pw1YmNbۛk؁}:5.]kՂJ1}R:`0}?'eL%s_|7xifX\Xdn@mפҚ,OF'cbBU)1[`;06Cb]v5nE*QB˽%..-"A X|5F-t[`SwE P]ⷽ_@=0کy(M ,ePNM AjuESz2) tpz(<Ԯ_t|#\\{_<ݔ^^^^7^^^^Ξ=g?Y܉ﴱd) HdcuTn]۞?Gc&* V3o *gܔoy$ǹ?۩=cMvuHA IDATRn%[mP8^( TU_.~?e~u7ӧ NzXUNu?&c{>$С/|/Q,.,10iF59G'#&1EU5MSM37XHg l.jP`,@p37n݇o'%IܓFF@Ou{;-,O iy&7TuRvNG=uٿ:;($*QUI5SMFe+pM'aOP:S~S>u3y@u3y/Weݑ!Tb~J B",SBX)bs:Փhin]`t(6-\va!T)?Z)z /fJNw.O㆔BtQH)݀Y:Ori*\ahnsNY7etm|y' &ɅyHtxh4dX*(GLɚJDcLv~uM6;޴jJtg.1؀˗QھO'pCR3(KtZEt]7} (J?0T9Rv5{A 'S!|p_W?4y>KYX' N6ux2f42 Uٹ&-4IMD)]HSJɿ'WGCuPE4me~R@@] u}wNw(6MĻ?CO#1v+y)Sѳ>x RJ!I€$ hH1SWy cL7?h:V^k8 Sc'OVo^^^^^=y@u@F܉ik @JAF*ٛ 4Ov qR7S][@0t9+uhުҮQfvO˖;ߦݠuSBϚih`:z&ZPqõʭJe ՌilS5vk)ͫh]R;GdtpESgYI0̳xCK,GcQZ3)&k&k5՘ij7"tᠥo &g㋼'{~LWWa84qiɀ8$ITZפBJwˈ Q*d<.{IGVe_wӏi6^ (1G'N-w~;d $q!yvQ]L#ɄhhDYƝ,KG `N+~ƻB~O}jSzyyygr'{}/zxs4>CR`t8Nj7肩wYꞓB!l@g0wLϛW}KjItKՒ,X|m5Dx cnkl< fc"&bchڒٙagX Bzb65!ee,$ْVuV꫺?y<**73G*3|]]߱riC*_*vnmSy*`89\SE~GDcK(M""IsGA@MՈQJpG۹0Z|J "aI:P1 z 1ޜmI9֯49_EѣCHSɩ");Ĝ6"EcDμC\(LvnCR 7ְZvkpcǂI. &udddP8.au 7{++W={t0s[~դ\N<B)BxR"!X_7oa}sneY0yW޺ Bמ#8݁wA 82JEϩpj5,,˂,d2\c*VWRi?g҅d]{-1$19 ʻ_|~/؛f>%"_ (Rs&;~9-a2 Э2ZAR^N=Βҟ=ih *sFCJ afp9!#TVAHioNj=hA ^T"yBJp=菵zPi>wnWڰmb 3'MHBi_Xam}k뷰ZMW9TW#XFb,rfłIӾ}e.J2Tܖ.f2 |Yr.@ʠP@0 ˚z /͛}9Vz΍&%~O45=}}km8.Lda:vxo]cíP*rikX_[R@Ro,`b?(ι '`T?G ^p5|s; -x Pr$۹ sBFJ7mC:5Jf$~L W2G)RRA?T* ϟOi\kut۷emaeximfoQ?pR={pfd!ˆy'E۾TsOWkz$@PuÏ66d$T7.))'C(YV@A6hye9Ndm砄ۧWu׎U{zZsI˒2̣PKp<(INl;09 $֪zu7ou$ C&3?,ʘuT7qy\c'vS&Lg2J !9* TJ%T+%8 VQ-›ZUp5xB脒3>B\ѣGQ? (ސJ"s3ܺϽ_yCF[/-S Kmگ#)cPfVTn)D! #KQ|e[i<.hH{>|Jd8UP)ESh=Y.bfrAy8@ֻvDTFdYN3&Tm33aHiTL^l 'P^xJfEe2X+3կbU8[6nS%rW?f_>ʊhԕn%%2 \BBϙt`5 {bמ*2f! r\vMp]Z y;)$+<tkwaݩ;v,%W$8g>wN=[ H1&fY*Uc:ʯ4=cI<<[Wia)  j BtډP./ <ͧܿAz!R{o<\]ڵZ캺Y  AB6 &\~˙, ;E=Ikk_^zXV4,`b"|>LF@JL:N ZPf؁;bǎp /bej_9[? eԭח 1jI`wo $sssFJ">sxYxoߪL)!DrÿB*H%n4ΧDذ+&%\A*\eZ!y`>nھNN8PSDUP)+mS~2mI=䤋bq1R!]9V=yG` `ۺ;YDKX,VJWh*?dt`Y(MR\=]ͨ?ޜLFTa5YVE R_m% eY(&099|>\.!.\^GZB"Nyv ) X_X+OGR1gr314ϜB8 W{w3&OID%QpdރOo3&= \HO|JO_mߦRRr}$Χ0^JU `<+$hU'!%\?d4h&0 oڝO)[}TsTX7 *)Ҡ6n߳ne9(ulz=9⮻\\E^,wwoGz6v<{5 VS\TRfa>4<(ayţoa8?Z /qlN !o#3@O`bbBlR.\jRi j5]1GsOOΝ!߁Jōq9,/ɟW+3َTZMi#on{)N8w7sa>|n>ѣG}jDDƀfgg9g;sރ?8_-A6n "W=Jq K[](OX۷l*ۿ%\F> \3'MHϑTl :J՛=O*4.#!%VSkn<2l&U"JiÇo{߾*I(Eb;vō2Wn}܋GP(PWP*T*.r9TZ(2uw6kU",5.ry2 ,q*vQeYL&l6||\.l6l6n!\jellR@ZBVAR:R"с.LMB#| /_yծm&04pJr>& =DD]los߇ߟ? "unԭR)x&ļүTBI@Yoiھ_/ʯ H۷ +9ʏ2VSz o77Q#|2|e)%.R{''\*)ՓQ\ZoP:nxswuw')(AIܼEyA'p ayMZbc'p3(X[s͚~+*s9 oYYr,3G]hB`)Sy"62AWF7]eee71yF_}٠oQն*ϣ/}n}}v߹wa-{v?½ǭu®V5f/ŋܼyjBdtPi6aG7brzw.g-Pu{u٬˲1`X)oz2 \@\ #ղ_%YBRp]Il6\|~ T.VW7P*]vϡinQUe21 '`yɏ4|Ž=}+W>r9 ;VPmCt$z7s=yn`I=~EA۷4mTRznNnVK-^c)].R~_nl>e0'PMl1RJUS kn+v^̧2VGp?+=k-7pW~U<vN,/jjA&lV\d.Y٬D6[A&+)uhB2՗ٜ>lB6HXz+]W@Jupqlxuvj ժ_%30u ,+ rp,66jʨT6y D7"9|1{?ٝvRy$mSiřC#f>3D4lXAIDE3^>Dea|+" i\'Mei ^FƕS^:}3<+qßiEƠ2Z"ij{]J)u?g^׮LΫUOeTE }ՋXzI|A`b0z+ *ņ|AV6cem~..._E2,K!CPYԿn˂P fUf2V0RWVZ~WO? (xϴbe6};R@ eJI.Pdf7 5ܳǶɐ&kے{k Ȃ_|~ޖ ʨ/}* DD;t aecջQłKCH8h!LJHb-Y 1Ο)xJufxn%eLG}HcO K"2)/5j] .+6o<6Jio}M064}b>e'^}lRU҄-lYeH[ ͛;?6Usp]`zچe9W&DL6؟`۹awa8 ҈ CDƀMFsO}쉿y.7 Lw}ZO4ۛOi^J.eds  \gE?9cA)i>V YT&&AyNP9aV b>]i */zx!%J" 3:~?N=@/ j2BU$Fn2MS&IDo7\p=4ch8 4iA8)K7~. ۾3W፫W#7T&ۼ=2Xz;M)iNJkwڃVVE&%L_F~d;,gk8Lk{70Ou( PEphN*lOh&exY ݏ*lY},. l}}Ȱri`k)|%D+e<4We9LS_un6,i嗜MJɞs76΍q8 /(-2>"4`h?~|R(™&l}Y)@ /1R$ vl BH# ?V^py~+?9s?GҿP"XR@x差T)=RQ&ԗ?N<*y<+)<׃Ra Qb* #TΧy2L33\Ӊ1' $W y๹9~LD J"{39_#"dJĆUСYcϣ4omBğX$#ϛhPmݺmXUlP1Z?R Fϰ Ҵyc=o,'~)mN|JJɾs768~K‰ר*B--9ՔMˠ;"cљc"'@qX *=g>o+IL?@%JHnbRDIGզa(h5a吵y').djڹaw=1io348z%4ΙfӧO>igFPl>eHʰIuecm|& MT}&% J"I-/gR&C㺊EmJKAhl>e`6W)خՐgbMPxiZ_t5F ϟ;kǎ^t>e)R1$D$pC,4}s>eki&S7gl57u jdʨ$v'Q70$.f~KOTAeQb|JSvC[-KFi um5ׅP@ƒșo$)Q!ڤ*4v?Oj;| %]]_X0u϶"A%۾Ks;wjLnm: 0L|J"&D428gʄ@RՆϧ~4-~P,‰hXo+#!2Rs9̢ͪ@@LiҍXDӶm3߂ϱoXWQHw#i *ǵ;C5gr3\EpahPn)h;PI_xǭJV"qHuM*-[ϧA *i<pVeF7)pn[ {Bsc>?w}׷ys[-3kNJk70^AeKe09s&7s& >`@ٮ|J}QPPI_|o_}D)̧LhH"*%~pouˆk>Bٶ<".,蹕Aeg^?\%JPYւAsgP+r<L~:nBQoNɑhnfڼN4,Np>%u% P?CNھ)E$ bin5Φ">RwX߬\ϢY:=|痗hP|JunFsڍ+X6老}ZP96Nm '75,ʭ|J"jJ" 3I )6J!<z^eb # gRmcgak2x۷~oNΧLhX XvIϝI [m6+/{J/4-|g\Y5Lrpu}V+W4FrIswZS5ƸQlf8ٶakP SRs&iX7+}E5o|-ZJ)ۼ.Α汚TPFھrf)$\b-/^\!Bn54Ins 7`cXy'9|4sϺiϭ+_e ';2l^|J"b@ID94~~/1VAh9S ԕAp釕Vos[2LumMSJ %D۹@qaa蛷pyu5xu6 *Χ7| \9WQᲜVi&νQivF>: 0vT/D4惆饋'_ {jJ V2.]_5Y? >ڎue۹|d;FaY4JalPSDWGE|y<>{*:Oo+SeY&JKWW6MY`^ )s,]`;.< ݋>[*EϚ|^==}՘/i&m߽OiYRLrd͛ c{7rmE4>PQ U_5\][krP o*Jy֠[min-e9 'dXۻD%788՗_xKC)#Kc)"hJiMSƪ&S0SF d$Ϊ͕R]濚JtT'45OsͻMinJP)DL9g ͛ k{7rЊ"h1$IG){Խ!ռ;xW|JZHpӺ4ۛO) riolu=t3kuܺtm%US}y$۹hؖpc k{72-8h41$Iwů?gϵm;O +s#&mA ʠ <2FK%8t=l4R@aY؅(;ֶouP9cdڼNn0w (fvvmD#%uLӧJ^Χ BK)XR6O`I$ UFSADi/AR"x|߿PvyŽ >o!I;s&#ò,d̢ɾxw`@F,  (+3a8gH;t jJ>, fTO)"ae]{vz2v}Z"O0Χ4xy~)\`\f;(V/iݻ|ݽAqy>ҠO>I{7Vv ok%e7ڻiDÏ%m Lůc)mߦ|ʠ": S6[#v'gRyk.j[jF[S9Z?[5؅&qjGSNN+ha;wyY6 #[GP٭n0rNŀs_:,LVSf$*%L夨 2)y6)*Եw/Pq܆w)!XKUH|ai (L@Zۼ[FJfmjPB4|PQ8gh{N..};xM2; XۚOii4U .M[wp_̫Σԗuu孪[?7O'!ys`7 >3iO9耒6q '{DnWAeڻÆ) J"jgu%i|xJٿ>:uAe.SUn:R fU6BF[9O TgԞAϧd@e &-MmޣN(L۾PR?J"Lc'Nt_4Uя7OiZÛ} Ge |Lʵ՚vt[yXloEd JsL(G)Liz綫) 0v#J7D!'T Qw|NrdhFw9)Dx 4 .}dxٿrFۊvھ@eW(O<~}#ɔt0l0 v|hWf{7rC(}PQ &J3g_凉G-ھіJR&yK!`{ 7ky# *-TTv]?^39$p2>d>eۻ)҃%;zI<(Y+ : * (U+S"8SJlRBrD .uwJΙ2d894ڙOn(c1$"L4>W=Rm~2X0lO)hw ߉Rϫt ?2lmfT)uh)!yz> `J<3/q>eBWھP{Dtd1H4E{7rܰPYΙ$f>Oa8lR KalF2LG [&L OmoR*6m2뺨Vi;5E| &GLۼNcO˞<>mDÀhLp$Зm߉x0TFU&Sʃn,IVUoKJH!0͢8B%U_o;J~!R:dwWmg>VJsV{1 {p{p(x8c@9PP &&3oT!~jT6h>)Taodڮ܌]aBmk?rSawme>e'%1Ћ6oC>0$Χ$D#s&Ɠi,PfQ[7 *7OMiVzBE_j8s6ci+DIRaO;'dwt2݀cr;L jqd1$)%I"zI|XBl6ھu Aw݆oTe^¾J s<ɠ2|ʮkw>fYfݏu(p25D6À8{PΙ$KS snQ7yڞO[o~e - 7kVU6lNjئVSBJyPi+;wI٬Y@v1֭e9 'bfPR#\#D#(Q+'??4N/ھ{< .Ւ *)L.qevĖ崒Iu!%ލp>e5 *_v>`rm͛d{a 0Vm3 (I"Zo *!eP۷822R ;;ٕв;Cԇh=Ѩ;Pr$,dWC Jjڈ%ѐ?|DUWg)tAe|J鷄CZmc9my~TpaHN5%Sv]4|s&Vۼ{9l%+ZH5v0$2 &N..'q%RWPAd6j ̧ BN6lnѱF{/2AbpgqHl>%۾'".f,sScy3l 5)v%ѐ?nD 'XO }|-ھaw[v#GXBD=2ݗQ(L Gnzb9ѣ=>S"%izc)JF<Ρ4au-! da: ʮy ri^U¹ *Qyn.IMɟ)G%Q<#,2&'s.| >3IDirrq (-Sz 4OiZ! s&mjYw#~PV |Jh=$tc@IOW (zrfމ];߉O|{cL,'tyIijNöouDh)TXzPz&e$ ; ϫR.ܬ;o.;6*:Mo(,d9PR/Ex/G ([6yW099l6|;vaϞ}ػvj5J%LP8Oĩ7 fPmx204)m"3s6$`;6kM4Xn^Ny89%S8c@IEֳԧ~SS;155o;vƝw&'PRi[]wd)? XPl67Ol&`&|>mygsq+<kղn6*Z}uivBAuJΧqĀNr;wc߾;yJ ,JpG3?A:QG;q$8MrwUy')u^.FW%۾YܢLw߁֞AuJ7v8a@I%GwxW{w};vB\66P*V&''qwC㎻PVz 뷰qI<(㿅R?4UE~ҶmصnuYN Z%6 *7M p>%7rc89PRD۾T(a@I Q똚ځ33o[z ]kX5 (xuG||/+?9&syպjJoVoTvWu)=#%ebF@ajLg ϩme9ۭ|JJ1 [#w݅w4PRD۾48h ßطv[q}XWDZm9]E>[hէN..'p|j 't7\Cywq= %%r5\rct '*5RSk}`ۼ F6f7oN'4,8J6}[ⳟM=k.cyl[WJVTT*jRNGJ=x{!~?;ED4'pjq)lstRڮ qmݣe9],aPI`=P0IΧ%J6<ȧquLMMömT*bmmZB)럅}{Oh(o_uoKd.NHi;.lׯNl=6flׁ㹺X).`9N748Ҏ%ٮvW~8 VVv r k )H".yI|H!hwDp=Uoެ{@mޭӋ֔'ylN7ny '%٠))MPH;vlˏ&ԧ~]zDDN@c<).hZze;A5@50OɶoJ 4o[|ۻbDDKxk'p)Lezj72\ڼ!@㤑 ,!se;p>eg@RMJ5OIi€FVt7 -XTӐTSƪ([z{ʑAxɶHŀFUgg}Ӡ0TDD_[_;OcjWJJ͆s[yoyN9=B )E>8>J!4N?S3^c@I#'9$hzI|HaSvNB6ݰ<j.{* HM0q/ (i?~x} zc .d3Yy 4j6ϙ '4m;Po0S,_0%<~$N-G!7$TʘdH9m}3I JwOIĀF%=L86DPG)$k<IjJ";PyIOcU; )({K$HA DqOIĀFև %m JJ~yol;ֳ$"$>i`r =w t"Ks,ZI\/EbC4&PR'PmmߴUca t"SCDD1?ٹ=w kjJۻ]-H"=r7ষ\f[7Qo>|,€ʄ#Gs<`@Ie-FDD~`YN3 ΟEv^Ldrz]ӕ$aIDDΧd7 (i`sGOn'7 ( y f:,mҲ8H""632}ѣ>5*ɖNfR-DDG?sus([JAPx.2Cv*NR1$"A1m&<~8S)*ws$mfmލR8s7 {@>zU%Q<η;xS\@CDDdZMP%J'IEDDhͻu,{{JSU GQʅ~QL7S'ws$mEmހ} dvCf>Lz@`Y5:=DDD)JJh{w""ılWBJpVnYJއهc#pH""8r0Ԉws$ÇƮ;|:"""ꜙO9;;,,,0r ()5~Xed#;%m=O#tLdmWEm@v,,\]wSDDD[gھ9r1Ԙ F~DDD[q8m%u&@ lA;Af2dIDDj6ѣ>5PJqF4{{oݶo~!"to~h7~yŽ W|O4.L5%}J)>)+""ڮÏNe$ȣ??wo|~'5Z7φh1$.Aӑ#G}r (iDǎ(nxG0?c@# mJcS.-- (}8Jt6?<!"0?˃>l"""~2)MSJhUdb?zQ't?~:~vcgr h>|Ǐsd\0*b4x4s)""G ]0%H"""# O (i-ۛg'YMDDQ20 `'7h bL۷Oiھ9rPRj4+.phܵlޮ+PvBS{pPR*V$1$"ojonKJDDDD=OrP@>|8h󞝝 $gSx0d׫#ues1$"""J|bȶ>J)5 `rff_Fɤ;J~XBHc>>V} DCn~6\>>/ɠXAIlɛ[ɤ\@h$رcOG ()uN|wpMn&"""sf>l0ȑ#-z%uPIa$=byͱPіϟl&"""" ʣGFJ"""HTImAr>9 PQK$""""|b@IDDDuL(*I""""8;Pݺ*I""""p>1$""c %)%јa(I4;>""fZMPY, DDDc$b7oJw{AȊ}s>RJ $JҰy50?={<DxŽ=}+W>'2Ք+(FCI"j͛=c7Q>|ʅ (yf7v˾JH^cw#T8p ˾JhK@ٲoHeyޟ CQ]q`@9댽{;av@ZcQ֜A dI5BeZZᄒ2?Ry$ٟZgyX-P gJh|{ߛ& ̢(n'd@&OsO)P4Id cϞx iZ-zzzb;w=&Snt²oHT˾ޟ Je$@˾g $nݻS]]N ̘l}9Ψח=2`͚iNۿDc0z}}}QVV5 @۪Ev8 A֙?]Z?zP>}}ϥ=faJh(h+=$@k ņ B%$?bݱ{ė}[ @[h\Gȯri7E]===QV/vܙ؅tf\x˾7lZcwB:ho3(($(JX} 7DDݻc׮]M{~(F/X ˾JH^#TV8x`Ӗ}[ @a@jJ˾ yZ-je}}}q 7,xٷ@ @gS@ݟrݱ~Oi eIcJhfO5dIf3vJ YٟR WCQ*.L0gس+yWZ===~]vŁf|@ @.:7,D%Z`eӅJȼ,i˾JH)<wrwixxx뇢1aDoQwF4F֬k=0ȁN_x?&YPף/""jj02kV?%)) S̚ ĦM'쳇{8p@\tE!P!Ν= ؾ}fPl0(T@q2o2qnq,(Ǿ}}@ @̚ ˾7l@ @*5 @^Wb`l7$D̚ o˾O 'PR=fMV/.4 IDAT[Pi74@ @K뾐0)O *$1qB޽q?`̠ QtPtcir|$^?$mc`{t3Ϙ!Ptt+gOe0G,e6 g=,pn0;kX4qffJ@ o殿{vڟ fI˾O fP!q*-Moذa06nL{8r%s&N@r+10P#P0't@O @;%'O @;(8 Ğ=]q?(.o0-qopL,N@4}ۙP̠`Wl(Ǟ=]a`l8p`̠4qD8 yeJ[ms J6'N@q4|ژ8 _e@ ЦI(ƲoSux!qG#TZ @V fIhOĆ q`J6"N k,h$XwogCTʱgO)H@ Pp$0J6@>ط3֬?%-1#J'Ű?%7 @>&NM_e$F(zPiIy˾O @,(W}L~8 J%+a`l8p9 z{-Z4@ P ,=(r,?% 7@b75`JsQ O \Y S=i`Fe{v=2L!Ny20P={O J$Wس+(gx GCro߾XfDk$P A NEdJJ$Pth_ޢKvaJ)h7)-h~d@;D%6l (2nP90PJƲoS=(2nٟxJ `fس+g-@y cCvQ}8q*![Msu_H{XwogC'NxVmM0Xrӕ)9/tqԴL΅7v#P?@Zkf>/t|Q#mEHٓif,>sar)8@+ ޟr!LΕ+BHٓ2)\E  %ȞSNYLΕ+z@Hٓ60PȑMgr.   )^=̢ OHٓ̕7(Z?0((Z/orE&PXLh!'X(ovE%P}X ovE%PHnYMoJ7MoJ_MoJf7P4%@ Y@sx( a @ 0lD( A yE"P$;$ś@Q 6If8P%@B @@ 9e%P%@Bv4dfQ'P$;7Ł"(l fP*.@ WT( ǬNh2Klh%w( ̢Lh28u((;̞ ;w/,(Py$P4`~J 5% vC@^ MbSr?H@ F=y(  @jJ&ٹU`J 5%H@ FR#P==+!3(@jJ 5%H@ 4@ 4%̗@ FJ{&P(M3 wJ(O$P(Mj\(X\(Me7̇@ T%i0{/H@ t@ Fh:P\ M'PJ.@ FH \@jJD0@.9 Jĸ7FH lJ 5%@\,f"P$ʅr`&%@\(f"P$i2KHe0 qytJf)=(Zi2Ih{QD%@,@-cJHh)(ZH ,Ih!R%@Y |= @ bY P,JIJ̢J|?yfO'PT(@HH t̞ڃ@ "(hw%@^L{dٓ@(R62H 3I`% %^J (Y@;(2T2h?%@T,YLړ@ $?5a$@ ' c,hG$оJ(QsevASJ 4OZ¦=@T*`@{@hZmW,J+JI(#DJ"+'yjI J +.X?s@^ g%@X p@ DjyGEy"@%eDDl7@1$7sV%O%@N/=)ɥ%W%@NGR 厴I%@t_.} /}'}~$ 9Sh?J)ʉ_n J&KJcuvZ II(V{cK^GȾV;ۻ% Q؏ w(h/3֒%ߏr~Yӊ}'\ ; 纺=&h従.@ ͢X@K_Z$@QqLJ h}t Jq4:;`D3'? @ P ?hrN6( !އaٲgh* ЎҊoOuIHH^{rJRjq(J(#"~]TJ8 ==fO P$iTƊϦEv\ (*W㬳= I;NF@P%@z{ӛAP)( qZ'(VeDĒ%ʕϥ= r9?-$r,y5V紇[Y.G6~Xoiƒ%= ܩT'{zޖ*?] .ͫyOf"%:;EJd-NFz7P<) PPڥiaH 0%K'-([?i ';{Q6sοDg籴9Y.S~T.0<qK Yժ'bO\Rs}A%wŔ͟eޥҙۯ}틱jՏ @ʲ'#\((ΠlX?a\㤋EݟYÓuukEJ=^q"O`>!̪Dw@rtuu=Y= @ ̢D'bݺn0-8a$P|%@ 2r%cuw?ܚȲ|j8 %Y>\p8-;P#?q2"nJó͟ )DD%SR4Ǧ\ryל?Է}vu=3tdꯙ|nMQ/L\Ea%@2aŹM{ֈyb$.JU C/Q%Ks'V a@ ZҨVIgL/ ~4YGG9-J%r7NS`=!,ַ' $K.˻Ƃ̞tn}^͸LJX1'he˺b%ic=  zzޓK^k= X+*|79VO̞ڎ@ ==\SYxGPtĪUs'#̞ړ@ ==lU{:^ru֩>1 :cŊh==$ОJ |/nWcݺih+VtGWWgh 'v%PdHvYKgQ6sxñn݉xӛ^M6Wt+r[ c22"bʡxێʕ|g% .5 cjZ)f N&b@Y;ޓ@(2 $ N[rg^W~ŧͦvdIGsNgM6|[?2Gȉ$z'^=\s*.lJ(v5?2Iȑ={>H%S⡸XlJ(v5qmni9󑏼'!,mY36 ̦[ctdwCiju ̠4<?SR2R4|.E|y%dJNX `n9m:{Pޚ5C?J\|dI)VZW/NJU[~̶m׾vcʣHwt.D/ 0OVUbNar ۷UNn y῏w("JRJ(Kcv\S|{3`t^=g~͍⥗,O,[V{/ f?+y򊋩:'ػ#禿?5~'A0/([/nz׌_/vG⪫^ի dʲe8%|+sٴPfP2yAYsA9͠?r{`#芗^r%RײeX|fK ={~Eq Jo-[wiV+q\ybժiZjٲRsNG,[OĹ'o6/FlrIxzɸʗ+^UN=HTww)^09$@-&7b2=(TW++8+W Kwwk^Se{9+Idm{I2ٞ%9V+a-?+=Xxk"-K{$oI(̗AY<+Wqߏ+=8N{$}:q A%@?,U?.8,l|MbϞI{&P/~[{bL\x\~ qeߋH{80NWPYsJ\$q5J͟ ~~?gT*E\R4#1ɷ'8|㗢p57vD?s{xx5>ޟc?& *JexhwiTg3ƿ8ӱJTNu݉_ڑOosS߾}]|$@+A oZ}_ǦMk V8phCbXb0*m%qJ{>H92b,ڵ?K.y6bő@A-]:V+N Mmy$@Y i_x/pt^~;^yeY-I.=K[=mKޞ?9o_7y$ JNmoۘ0 gŊ׽W\xk%CbٲcrXt08 3('_ ʩfNNI3('#GNj/>=kHg8Ќ3!͠Ay'R$P0_Ϝ {@9r|6~0c0::Nҥ'bl('M38 >K?8K .q %Ǣ>N[' Jf 7q/c?F>|~>|<[M|2::cF8 ʤfP{b6q Jf 7|]ƱcM Ӗ,9:{0&Frʭ[ϋ 5%s~ 3(ʱ_30>[Ǐ7L(OɓGrJq J}l{@L0Pǽ8vlMQ.ΣGǚ(n=/uq J}#;0CiP!P>r9~8vlM= Y+dɑ{]r׾v}lv' \y_ |?FXKʕ_wb?Fg@۪T^FWbɒWfJsDZI>3(X{)~WĻE{PN5rx_˗ĉ'ϙwqǣ\>9nVL'V42&xla3(n]7t8 %w?ů]xg,P}#ɓɓ; tJcQ.JƑl{nqQYr˖]?$_+|1z҈8r8y+棣(G|< }e6֭k_'Di5)'H2rW_|QIDAT4VvaR..>ボ@@+n oJj߾(('FȤϯ|m nNg*Tzutp'P(lY7ݴI)۷@qG_<Գ\ 鞯rGر)h(9q@9\~r˖կ{ tw!KB qO>y0xgDž2opxxx4T>Nf>@Z)Y.@@yW,(>O?} ʂ3FΟ@aTWz(v~8d?J1>S|D<#rhh] Y(Q,>゚ֹ-[̚(:Լ}/]=Z\x."Wם%$KW8Ar(ڲemwYo2a׮c-.SܙE#T(#"T.^c[{,>sܬI#PO?lp@rGϟ7<(^EܟcKܼ٬Iv%P9oR\Gm K~<Q*5 ]5 J2駟oSR{A 7fWn ~gbse1YDd܍7w^@rb(gSGˈ G]860?y7@9kcw5 @Dw?<*( ϳuօ>~%Q@97o^ܸs{xRu S?X>K?řR#Jr.Ǧyyc&&D wF}?(-M6P }/ FcdLs[y('rǎMcǵS(ȥeRS?t̺$Ks%cm2@9{siʑD e@V-Lc|jf \5s_k97s"PP7L1R(ʉ&.0]s#Aq;&N"@v^(g?cǵs0/%eG3PNE s9cBfݘۍ9vr@9͛Y w?C@9U(9PtѲ[L7Dz{^(';{]Bw?w7zO(g?@9@~e,o[G}uLlv

7cB?+qN,y2kr$Ln 3x_|3 s87cB?+qN,y2 rqMc۶E P@|3w?sL\g% :/P(mHJh|o;8e][\g% :/P(?j|( E&x⯧A)P,PYse ۶]p-m(JȀ'x?{,(Yse Iډ@ O<_@)P.b(۶]7ضv$P@F=_ŷW{@J(u^lf柌o~G@( ~w47 8'P@@ym.70Bԧ>Jrg% :/P.$Pn۶1o&( {c?'P S<>+qN,yrr}ƸJ(GO@9S?@9s=/P@9[tF>TgQ./~>-P΋@(s>_rdve/ J`QC#Ń>>D3(evg?Pv{F?_@>@S}_r('(evg/P̐,jKZ,(Do~ |(ʅ@F$@ >{7"g% :@9"t3P<%~t$T~cyϟ8'P|Z}h| mB2 }}E_cG?V@Ycȴ]b_|qJ wvdDD=:/ɏJ(u~~"1K0Ƚz{4""vѣԟ{nb1F"dOs%PT?r:Z-Pb :ߘoO%Vv Jr[[V{KDDjgn4@ z{$-Iʅ@ي=="PL^83r˅(e3۽i(o=\ {]r+V2""j+V{kd@ Dg]_2.P.uʩnoG%@ ,"`&qN\b_"(2w;?1Gf1 oWWGvUU]5@(rjlFYs(kV:+ljKh#c[_?}}wl #q_Q]5@s ,HoޚJ)Hq"HJ IKIJGJJIKa8y"Ֆ͒="{MvV.g)Ǘ+;-Hז,L_~NAQI!ER¬"CV1NLMZ)VL $L`V0{"eyeg :JJU*[5JLGU殖֢HVQ?ާ>حѩ1͒fX9֘&YF3U^FuX6m]}G1Չ93 |UҪU$]nnCM/OS~~>&   .y݆i񍪍&v\mu:ƑGLMv|253Θ՘lOv19|y-Եl^Zä́UUКij}ZhlfSoV6¶vʼn伲3صs-[{'BCSGhGfhgWΣ<lqu%V>svu.֪MZ26,b&*4r**4j:*@LMLyl,7*us\m|GD\bh$jR|Robrv`NJA0"`H*hL֧uӗ? ͌]֙ՙdKd'eo޴gTcOQ{rswol m ڳMu[NO [A^i۝;OrR V (m? Yrˆ[EEE[?Xި%%Ga%oDDiNe̲²7Yn\^{p(㐰­Rr_bULp]u[|͞iU-x4:zccǞ77Q'z̚KZ!'lsWnk]8q/v=s}ٚvZ{aԱC) _}ABEKr.]N<{%DƞWzuW8}nX8[[Mowf[@;]wv8d3tyoy02*|`a׏2-<>+|"ߵ~o /ۏ?yx??'󟓟O)M5MMqb݋ɗ)/f 櫳/ M^̛oy=}na>|ZZ.V|R?B, bKGD pHYs,K,K=tEXtSoftwareGPL Ghostscript 9.22_ IDATxmY>/sfn/Yβ0n!0߀/V}&&/V,YZs(dR.`Y%tۀY_c=Ú%cO5ŋ=sNzP/]U]/O>ݿt|T?u=;K) V~`I*eojq||eo%Ppat+'ONN^C@ GGG%e̠`]di۷맂( J.!9'. \z]8 p (xzw(pr*{0n~ J4Z(ҘA jh~cfO\RJ0NNNz>99z>dk!'NNNGGGzs7kQ睝saeٽΝ;k#*"3)BK JV[=9*?wRk7'`-'vOF8 p(TYpyA @麧{ 'JjN\mJJ#@@ @)D((p.%k%5<<<\(N05qrr+*{\np2"Vn(Z-cggnjJ+@@ j^8q||{Bv&WJ (""NNNBɮsR*{\>wލ}ÊΩrPtZ-pk8ۛ8I@ RK@ F@ F@ F@ F@ F@ F@ F@ F@ F@ F@ F@ F@ Fx*{ @@ F_,{ @@ Fx>P6X3%g>ٲ ((O_RDz ((O""[w: ((s=V+)y\vJNv,klƃ֭3l`9p2))Zfޏ7nƍ7y\rJ\eY/GU[O~;`8pݮ~dY7oފOJ+'` *'R4l͛ĵk~,e?y}Ph郸yV\~#>Imy׻yy~Ż?޾f%%'`mՓ ʮ (OAdYzaۚ=KK?wV (Iz-Ibynܹsg.J|Փ#EmE|4_XKPb/S8<99I` ڻUP+vݻwp (OMV9D(Ѯz<<( G~?8==hZQV{ڵZ+3{?|ͫG !f/ljV<׍]S@ w!ʈ׾;]g_>V+NEeSE셔~7N\O@ waʈv%+_x<+bkk+<yᛧX PFC'|2^Wƣ"_)彀ƍq歲 pʈO>d<+֭ǢRBW]K%0Rx>z{ hSABmg)6tʽ899 Zh?{mqpp+K@YGGGc>%WO ҙO U&qΝى{n+e冹}vu)TPn'''qttKI@vwwΝ;kTp(/Sp)(/nwDё O@yO e"̧2*{,f?vwwVqcTP^mSpq(/nPg>%Kh?{mqpp#SΎl-ޗ\|naP^qΝ|ʻwO @W~ܹs'vvv8޽oJcuSP*WM@F7=ZQ׵}R*(o JFݶ#m,o&ߏ^q~[PRo Om6E(nܹs|J&dnqΝى{jJfb% }vjqtt;;;Sҽ?6#"{w97^ox̲R*{\z=""bgg'n߾] ݻ+Y8>R{O|l%/;p5|_Z6+py,#|?B̦$k *G/U]W:<<888 5O@yCHk9TFDDNo7?|COEZ<}Okp(Y|ʓ)O¯WTQT<ϔlyT+gS ݱob`Y{o7 ^TnUEe+g &E-nJP W3vtnGV耲kA"Քg?[+"*SHf"EO t (ھr놑PrXJ_ݫjʞnw}7/__f09|J@@F9<<TELJ#/DTm7ѦUSv *i.|Jlmpݫ}<՞ɷ݀zn#lydY65SJZaBPٮlvT>yu̧I@ƪqtt! :ՒӌUPƍK ުN:ٺXV'o\i;wQS"dO }qZze+)T+h *+3ھPr!}۷\R`Zrǂ׿-H~=sұ⒫)'k *1ϭhrOU`Vy3) *PrO 126SH8ڷeϦ ʢk>g[P5hA><ͧL)E^`EhE@Ʌa>%,sqsW,y~pՔeDa3c) 8E)䠲}H?񹈭7{ow/jo `AJ. )`~d5b+; NRVJ3̇< z>]\l1?qѵ < (#ei[RDgO)EcFھbPrO ōm =2V#MzSSZv5}GD<槵}$:<<}O g ͗\lmoG}kW =61Ӫ)7nf *'>DeLZWMGjEl?bcĶG@ɥf>% wZ;\o/ (;ϵ) '#FWP%)5#*im>%\JzGGGSp%;~.}xD+ {a`o/ųq#>])ZyYQy., Bf\i݀Zpħ""Jgo4ai}Hy<#"o߽|J|Jھ C 9/bmg/Z|){yu %Dž)2v'RD\?ژo)`(Sjxb8ze+Z)ImRb@Ee+oW\7td@9 i ʩCk-֊M "RllXGD{eJy{.|~cSj"3`8\Q!2f!WTN ({{ZA,N4߻USvֈ`r6SswmJrRæPBSPusm7np!9]yJKt#>:TApk9K;ʲ~ȇV4*OBe5WT"^#Se3gN@ Kd>%zb='DM)9xK(6C<7v@lu,lRF'l`TEeq+UqSen6zJ@ +WqEӡ)E[1(6rMAeՊF+Y L>ٞ7RV3"Ҙjʈf>%p3e#nTL&UvvkN fY[-9*Mn2O)*c>"e7,t**(;KtVT"孈ԙO91=3:̙2PŠ&#EDV@.oa:2ky<e,*6!e)vE7$zoSD$bAo`G)PšlgjzV4VV Y4Ely1kh܈[Gi[ނ<Ӿ7[P F@ %Rpy=S1__̛ubbzsuui/K9o5ȹ =pCezS**eI}ل$vyu7>Ll));AAo`s&̧\ݿIf ΂nχOlWPص`P9Jrwd@]PkCt=7r\P&rUQUۈA%ЦxN@ ;_$O.TMN29)]1#G?<2Nls_~No;X}4;#ER1ˢZĠ2QI)foQv̧|ǖYi`/*%l?9?ZeiZuKh{3yneJrNpZ**[+jm4`TޓS?#n{.o܆R%le֮ܮO n9O@ 姞D-|)i@Γ-6\Niƀ2b=!eRSlySDV }ĺfP^8!LZ|<)*}"o`i̙pfX)ӵiDsҽ:21Kγ03]?2gGRy>K *C#Sy/\2N5e9h>o|[jeo8(F@ PL/^n4Wzb,ʫ@@9Bެ!li) 5pP9T˛OP0^5gOY@q|J8%0%\`~>_x^U f?g")_r,dNn=!lzyS^?2~,ܳ &'7r=HTUvmrFͧ|Ok $(`y&ƣ-ݽyc6ekop٘a܁2;ynrΧ|J` $0?%\~R|Ÿŏ}ࣅM.TʧjIB/y_)Oq}zLϵxT=LVoϪ'U}iSvS=#ͧ;::$K@ |۷o! jTKw}\N;tP7 rlWF=}X@Ue{{s}? /b^;?} eVTUSo3Ӿg5{Sj6K,.)w\ |(_szbg͑a^rwb|f#,nn=2?G,C}I#^vPY5xP}KΛAAzl (3`vMΪ{YVMy滽(g^g[/EdV%jlW \z={jš>K:UVES)[ۘo)aj( 蟉`q<3Rp9[XPYie߫ |;"?[QKqSD)}r (-X.%\!SL/7KYo\ 6-lnV{p@y}pj7>/خ[yDȪJĵZT+s6[hv-RpK'cZ 7*F*خܗe~'L[[ͧ`1m߂J9JhKYY2|PCpo_MP9rrNRTS<= VފӇΪ*Yd8P9{wS&|*=BNVѮh̛}mD5o9>J$ ⧟D-嵻7`#D6Z;7N (USk._c/L[h'YDVDJye}cھ09~J̧7yK IVXv۹)72m0hH,X%~J\-dQ-ݳl|=_k6h@9zX;Ք3o~Z5%W2(s|?Q{nI=+HZSn *iAj9pZ^>}9"9Y<0 LjȖtN:cQ~/8u̧oVqKOYjrm\U 5`3(s?pkş`5=A8mjʈǛh^/vb7}ӽ+,JyʣYغpՊf5͜[d*Q䰼eՔS4Sͩe7~yQFͧV6`YXTd%$Ӫ&YrgEۄ'S^.vyͻvilz5v{_|ESk>.xЮ꫟OY\V1`3 (t՞8~nE HRJ,2qp( mߋŞ7=u,{YA:Փ:Kg,"Hyەخ+V4Z}3^FeМ9} *ϧlvھB7<<ͧ%LfPO \DoF1=2EJ}XN :[71WyTo.82eV34 zl:Ep(j6ʨprTJiu]vKwQfVϯXs Nb^"y>O)Y֙CEy_ވR1~W;__MbY\oV3P+e>%*de}Jwn\HX9m>-=P;մ}nTMS﷗4"fZT"KҒLk**BgT#Ք۾[Q]qTnR5e3g./%mZ0EL '-=q%$*G^N>{rܳS ]e{Փk'fNfU*YnR%"U_WT|>H)*S۾#"ZlzUSFhfqf'O=E '-:2Oʩ5Kr/Ƹe=랺&ᴠ,POyv8N@687ոYPv~,"<YTgJMvpιOʩ)S}:=xOd&L!n[P 5O8ٯbneK*yN)GP+ɗO_c[Y%*YӼed9(';]}/,{\ySv%e7ZDD4b)}SZ@iDG^v8c"H20V+)T.ۤ2**gyڛ#9gl`5ҙTnZH*ko 6`&%P:)izdט0eTCrZ݊y_wY=絗w \x>e꫞l@|Fe+neDD%djY.Pv^t3|y2Sv۾ͥʢz9T6;|J(^M@ l ?-FN#TU@r[yju s$j_{Ѡr0Y%bkրkA'~lDyz\05*̲Y/9M (mm=6r̳60:2f4 US~%m)̧?& P|Jp2voyd {qhDRj:-x:/?xy[QǪ?g 3գ@P^QDhH8ٯ VĢR % * !g +*2_TTCVV؎)߯#+(ȳYgW"1rt5er;Hfͥ} x}vJ'6f 'ϙj)K,9 )=)ԛ%d,RA9so შv;vV)c*gټ6k#OBx_f -zY2u?̧Ӭ-]oJԎR8|͚7k7:+xCVOي||/-=;0 %paO pߒplٟjQPt<] IDAT8y^o ?y**':V>|piw[PF9{e6ՈkTu۴7K)/蠲Xof^ͬ[nE\d>Ϥ'\LPp۷x>Ka@+ǷITpcՔXFEeBTSިlcޏ<ReW>OV{yy[RgCD *gbGDGUUν,jH!cn<0/%p)O S/W$p#j F3Фȩ\Z5eDQuy\H7RLڟ ˾UAo \PQ,o@L 0/DP p bg$d1ur:s.&GtrU׉ʦk ʮLyi>oIr2qR-.ߗș܊< I޿eۥ?%%M/!to*RTN۟Y\g>FL 0oDP p`dr^vJ()M:$)'&QY%(wbt(UY]&bW?XRxIPu: `GPK*6q Y Ъۿ, PUA OSRRJʝC "(A8_xaq 朦IN]k O6%;ƎM5~.znݞqƗ/ e7QMnN)I٥?eQ)P[LQ9Eʘ+.mlHQnCA8P )aoiy *<)˴.9iݩ>t|dݽ2miyxϛ@i1)(De)ʂr"7Vm)SrʦﲨTߧrʾ̿Oڶc JA=} p/{;sRvܴT=(N_N"sFP %Lsj2e;W=ʽ) JKp cp#i.T}d*LETR.)//8k7ҟ;vI{DL cP")awyOt|K+4T0ث*MS)kف])aLcN)MMmVȮ?u II喍pE8^<^.F2ST Ee?RҪDE7P}bO HIAv j.\} NQ-'k)mT(< D?u{ωT' r+:D_3bO'( g8hD4҇acaFȑk \ *%)gOiW" }m4p%O7% eUHIA  S<^h\R=a;g[e3,д>?,ĶZPV@Nmw*V>ǪEvxad#(%iyY`4Q0n LCSZfh˾]ztwDʾ0(L4|r"RL A!)a~
iw&(k0DM(\4e^TL\;Iʾ.""Ri.9sc? fISR=_S>훁!Ctymk>!9;!*LoԤ#/#cgѽE@ׯ !ݜ̋G8xcx ӑ q#s,ȷwO=V70Z4%e[(oQ܁ISJIA P Jz Ee;cTImWt2'sLY\^= W @rew)kϺ JA)PM3Q9OA24%uu58Bԗ]g Z8qv%w6z=kGz !˩uЬ{%2Q%YDPT(.=dM8 8nsQ*O}L%Q X8QyE~?TH%  3 )a̙ss+::9'+Jg*Ο)SiIϛC24e]L,0`&$Sx}(3UdF>PXsr2`&d2ߣRJr8]ë8X+TqUY}wν;]-}&A8AA?pШy C7NT.`ٷMN"myfMP:"O,%/uz`yFi 0 F 4IPn69;$٤d%R 'HzW&=,ģR JD\*0hf5FpL14hJ"$+\\}q_DZ {y)]B2U'*;_OY&_#?W pA) HJ~O{m$])};r=ͲkrJG Пr*ZhUb3 =e^#眖y8pZLdhBA6I?I5^@l^F&7g-YTPDn E+MqKǡ _G>Y`uI ٘q&6@e%tfDxKeH˾ I tO3᪋O9oi!$AG ."?\ ~FOɆĉD+TT{*\3ia0;܃ڽtj8K;@MvJKII.'0;zK/Ak0L腤+t 1\\4G881A69ef:8q II .AcDThcLǃ0 $&SiElcX" 8:ĭM3#)s2@:I >rSJIA "(Av)#E92ތ˺NTΖ,';dk함ܡ4eERѸfzteB+w`8f*lI V@lc_̀OH981l4F#v4pqJ,&RrdX> !S$'RP I QiAA:`:PU@^RZ&5l8IAPq7 ]dܟ8TݟrAR{grGٷ(aC ! ΅™sNnSTZuT՟2Uu2q}O+(ku?}e, qZ[3bINIɪDg6]1ĤFi?Ԇ l4 p8[/%Gp\<E`G`rI?JgQAA?{j*i d&@н/C($m|7XPZ6} BY ppɔ<3N4CLR+kײ!^񞰿E%|'>W)*Ϥ  {} ̙$'L_l\u\2dq`J>Dc17QYxgLeeAT&(}2 ƒrAi;W2~xdםǯIJdA/ێG6y2FW *$`'aIܔDyُgd }*;i4T {0[%*0cY0a]")c/)dd!X8uwE[R.aܟ2IS"mL嵣fxgusf?4ڿe%>~6Xz pA) EC==gΖ}O7I (NNgL8ӕugmDeAN63ŲFLwrf+֋½~OJM` wK;^-+n(%.IIF-ģC/*F[Wc_,\"$y|C1D$*w?-NT6@>YP:  +iɷ a>qi>H#v:8* `߶uinJERfx9{_D.C#/U5 A)PH!ae#Un=ŃLN^erIel~oNZ9ٴ=(6[~]b@CZV?>rΎ%k*+Ǯt7 ⡗`xx8 FCFDHn .iIJe$R ( P 6䔱RVPZ'EN&d˾{=^-%+5YT/gbT B%b'ӡI)׃zyA /*s:} A)_҅_8HSV&'V)MYouæ+z)o"l"ڂl%Blı/ۦp&/ mK˸ieh1ư[翄ba7*U5k`56p|'۹K/p|bY&Bi9g/U&*o1POP^Bޕ}tb$})AɉdJ+ "M_q'&3gO٫u2Eʾw7w/? @ ¾ҔWva'9s"_DWDePpεob^e[3tm}"[#&2X2d_djNy8Q.-6a[p8K?*I4}|]7܉ 8r3^r<^ x4 ʕkְv.qҷ4>._ˣ!`=:v,-rdID  :äeړ2K 4eL1''ŀ "e")EUJeBV6 ǵ ʔ!*SDXA ¡ᡇ*}?#ҧH;ƃaҿcV\bp9;yPN\|miC*G!7_XLTL99uu|)>X[ 0"ǙΗl+1#e087e[4p'LFdk&0x1ںhs` vo۰>)I6O4xσ@?~4`{IS Gϱp˸p*1 As}& 84%A 9cS]/BЏA=" zKK<"@iE@GIɷ_#O>Uj'H+E4F%n#cL{r/A A'ӧOKJan|u9JR2^56e_rVl\txm{-{zn$*k_)D8X8QI\cReR!c5\JR|`QYoæ[ZƱ\~UD[|{8IR2F/쿾yÝ_-T;+/:$^948ᶍm(^"¹8,YBAAsɀ\!,=6ME/!H&9zZO79_>N@d_߇#ɑ77?WOj@Ӕ`-:΄.‹WЪ { AJA}ɓ'g)qO)luk^ IDAT?0l"D*-NӐʜ*ɯڞې}ZETvEo$*:ԩS8uT֟oa&iɃ=zt~y^|ܗn8QڍdkНcணpne/ l  ˘|7E r>SdmRmο9%aZ((׉pImOㇷ>;LQ9'e _^^6Mo}whNtnAa&DP s)ӲoBWΜGOrLjS/q,B֭)D*K)ʾk7}OLI *$!XކO(K\[=m|?d#̹ (?:^miI` f#?t5gZ)|oyGslIƬe!BZs~BT1KP2RoT|RMScm)B]K"3[H˃t[/fOհ/WqVJ%_gdwIKK/FCpoqv"?o}Iz) -] /.uGU`b(ŀϑ}h(eבLp༸4%%5=-A> ^O?'gq|_?)i9q-ϯx\94A8A8@eҟRVQT꜊/ "1eY/*V2mUɲ;'*b[w}vATfKd=>*֟2A-*<(_Y ?ܰ/x?=|'}k[(0~Z粃&3V_^{- v`bJSDs0eLH> <"/CElZ|rC[?@ʾO (nj % [Ҳ/} ታwֺ\2r"Y7yRe&6]-YqYz}9w*;y4voʚT)H2 i7 H8`'EeGYqJ2_ҝzup4{^w;yvXGqr67bM|ů>+/_ 6 VԪVVYڵGz: G煏UPQx4b X;T1sB K}w #beBOp>^/ӫw gS7G3-ȞA %-B3g/LI!9~sa+\v<LW3P~I Z iV=Mr.-Tgbbz|r;Pk% Y63'ʧ }3y\% +soں 7mG =->wu{RsƱ/fЁOPjS LIoGo nƳvJ_xrPL1sENn6s?YXkɥox\`E8 Ep~ adAvO)9shder2WRk)'zNVSӖX˦A:OI.Ywf9-Z.Z'ïyAZc1Y,N<"==sΧ&]X`0m 1mVHy3W.A% 0(c mL.EI$`H%YlN\_[؛:^\* 0!f?'W~ ?aLOWOS eB .r)}-܂/G?ޖ K㉧hD 1+ ɓ>?>kuL~7дVB2m=].%{abMcrυ;= 4zЫ•/Sυx=[.4ߊq %'S6aU Rл޳5q8>ad R.1T4h8n"Duv;B-#5ɕ338^g>KKjQ~\ Pɢk! "i>ӧ#… {1a8tdAmWTrtBM#*Ksq"IK[Ee1?*lϣfSq3@ KH_BfPrd`Ŧ $dſ_=/م` tM1|_GwnқOıpd[!TAۉ"h;Dov8lFC/'R)Āqf}Ѻ>čwY!9 "( B% ?{LDGm2P|j튥ʤio^T3!{ZҔ1Ddr4e1['E^yy38qlVa0kǑ|8EsPqD#PJʫ M4I _jgqO;,^g>#  lA) d){1\xQS02܏0މ89TTi\sݺdy-KˋdZS}Lr=<ӾW{K=-ȍ4 -jw୷r{g!C)`LnŵC:o_G+(p2ui_JP`0o-O~`҄fAYy1 .til>;AEF BFZ-)cn B:KLꃖa:{;).nZ+'ڦ*nIT֕}bPqsMY.ACwz=z+}]_#1!z})'C|b88 4B_;I(E8M$)p{R("KO.S3O)e߻Y(yOml(N'* SnKN'GլU՛2=d.oirNCtVCҟ2 =cJѢ#"J0`[o_dCLq"( J [\D'a/OKʥeߏ-{h*J˽-T<G#h[píDR*6@2B!~c姦 YO) *A*e<*Kʶ1yV!JR4}إ?%|c嵘j"vrLSo=&ϵFDXܮ\-חuOV*K*I੘Ly7S?ΙXr V'1P2Rr2 :SGqKy 7`a6ԁN?4I(ve 7IJGfuO̴_O) JASNʾq))+ٮKTV7VQYwMV1nF!jt:ZԖFm/tTK6ٙ9J'MVz5ɔ)ҔK0@E=-ӓ)UҁBVp&Ѥ; XEK<nmm]lFpe-{0Y Vf֞}ΙE)^oX߮  Ї>ބ =zo|qIۿ[>}OZ ţ9|/yJ1\6hF*.ԼaK||G*20I:Gr6*Ӳњk]c&;~Oپ:\P|tUT,M:D߽M_o!:H :C4SPo{ebn[_78ыEuJ| #W}F5`L5e`Eu{qk!:sDeߍ{o"`HRALڟ2->}}/g>G$\]foV:m:}A:eәJ5ld^);}i)dp IvY" \c~Uv~PrYIcR!W"v)Jf[eMf'Y8&80~p+(V̛,`ܛp v *E0\߀5wڟRҔ AԩSYʴ[Db_;De/ȫ-JTK8f).UFZ2ݥt?t浧cui*.]ozDS.¿ ԉ2CQT6]$-IoP&*IӔʱZi۴o4ܟ_c̎\]. O#/87?SB `_DKLgc u|j8Ʊ4)5Blp1(&!h4G zPD`rJNͯ7i?0=/-<TzA,ʿ >%-NEӧ#e<}O<}S}Ryʪ&R5ӲfQ!muKLE V{M| o[z: xilCiM1C)sh`DR@!h8vKJ0W'+#)cq ~@AJڟ2_c4¿I(4},on2]]qg9UR+]yht*νa 鷎yZ)EeD)R~]}'}oޕk5q/Fv ʠV$sLv{7.YGV%?0Gk_TNv 18|w")ph MX2+;~=Oٍj,*g,ʿ #_}E)!O]H0NIIT9gO=`8}Ӊʱ&Je $ -0PUNTvXkrf^e_F {@Mn@-"20A B)nO80Gֽl /Vbߓ΁#bh;܄n h# /)ٗZ/oAA"(A#ߟ@֟RʾÙ?,ӔDnRZ4`߼d+=.Nx.!EeD,嵚dLީm{Z 0AA\+u^sF4dP٧.C3A ߡ^?ud^ Jc>Iɜ(`~n4G#(rSpMQe"*Aa{Av'OSe"*)SM0U~ڄY)&))!3ڭjWQu)]n~2~Q5L?z) i2*WVoqBq{ߏ/"8v$RDR%C9 8 J#DR Q\ E 0x"|`מ Y)qV7^oMA ®!)+vO2,CN%5YwN~)'?œCGT3PJTQRv3U~.eMr0u߉`MY $9YC<]/7%ܰdo&Csp l;Z/*c/#i4r4EIڤ%C3Co3jS)iٷJa'A8AvO=])J?MS AO9;\iwjw#sӚ˧S%*}% VH6<B6ߟacҟӴl^<տfk^TVsk6rrbB6qpM߄wx\ޏP_) XP3NNRK'wѳl \߀ZYz}J?,'mmғQ #ȗy\ތ={~?KjQ~<A:(r O9㉧O>P+5oX#+ft+G;ϡub%9Wo?ed4ﶽ3ZIA43ҙ8CDkkG]M>t~n Q2S4({W.…=0K+P++^0ߴbR2.=)pAQ M@,>6{y/E5sA ,ʿ !ԩSoO9əd[P-v7Q)*URYOH=3z'mn\mrcCtۓk?(| W[߀^^UZiǀF#hPDV *Ɵ:AZ}E  LJAaOyʾ'Jz) \nqnR62i9~s2K(&wOYDb#MTV˺*QYM[-2vVzn~󖓟zS>mª8C" ҧ_c[ґ `VЗz3@,$Q#?0gp!8O/HQAD /IS˾|ĊZ* erتOaMSVO&nn2q=LIﲨ9].6]Q&-NɦM^f|N;^&)1d&(>2VC A2[A){QZ߃r8p4hdcP`h3G KE"}A"(A}MZ}S>{'<8JWq_ Z}9MiJVB 6Pb&X̯ϥ[=M&*{ Sgz)SA ɔro4%K\vgIXU& vfA.O׃O[?e}}M=L#a4#JOB?Fn2xK2+0t5,o ́ƔIʕ>ELfD%"Z _?  >"(AǩS&ʾ{챽V'?Omb\q_8rBҹB$aU{^j]MةOLJ׵RkL/dJTQR6*9ٞ?Jrdq׍׊W+ 7c @GBii/ʴe6R,aiR>?"wIP YAAa˾SQ#,t3Oţ'Q'w'Es⋥XvTTӔU)C?X␆2Ccw1AYdErr4eZk+wOIN*H7x9ssj/ >Iw sSeޝ<>M9֎`e*~{1.IO%1(r@9=-iEKS.bʗz &AvEDAvTTeߋܟ  *=Ƙ|i9De^ʢjmNZ 5Cq&\ BIw:a:-ÓS.Z- ]A) *eߋҟW15]T쑉/a-)Ä|1/SRTzUiTqMjs4eCUkWmZUq}5+ur֛_)Ӻwm4zdz0I)W翀g7ċ/>o+7V譬@h(ExwRMq2,')Jϙ;w.tv|z7(`AA) :)yGkYTK%gQijLMTVV^5eܟ&x>ZןNT|:4;l˜ ҩPv`sȧ)˯I`^͗ɝp^:T{Iw/%iw'(| x?߀@opC~ Ue(x2^K`{u܇$)Q2,Z=A)~pS B"(ACɓ'Sv'zA T $'sgwVc5 *J륉Gj(LZERy-QYsd8N6DevA:2Mt&zMKR6Ju0XE~`mAP^1=s} K82r8`|nx? z5K+AU&}9 "nG`grP hU]A!RA8S˾wCTfr2Ol34).do4eYiveiuc 0qg&jebr5 * VV+BŴ|:k mWE/~ x'݅})O3nEcIp6.`mzKX[0;& Zu^PolcDRzAޟY< {JAAHOe~0YP]d.WHSN)*eM2XlD4)*ekUxnDem )IVצMT\S?} Y_hŕ( aCO$ȗ ߀ր-|9| +@bu(z+kF(FQVd.ARPj٨6})(AOޱ/>j5)sYBTV^~k{INZu[MtOϥIɖ5$Lq`텼1O`2VCݖՒCB+aiÙ[wL߫?lj̪쮬GT8(?M2Uj3Oi,6fdӆxih,3Qxw)^ά|,bG|0I.w~='L?R 1s`0,`ir@‚. %T(TArtJnP80UdþI伋f6zAD!A1\xgϞo}9s&i y Ƣ/`8V~7.5Xb*n/W1O }8ƌu}:Rea?xWdtRܔp8R`5Flۍ/jj>~k|?Go ܌s/Pd)as`Džh} S!$` .fw|  !|C@2Pbc)X\R<ƙpޅeug>(hYX @IAcþ^*_|E\xqr:!pPQ .22BegBq}tF6;YKϯ NBktmUHƱkB${eќQe2vRJv ir  4σs!(oz''NJ`Y.8y-,,^Dфzc 3p9pp +G.yې %xC]uGHR0C0U$)C ν6'AALü|EAsO,Tfþ_y啩BR/^T@]huUsG]b SIUa\S,-,L&'' [>S]&{-dZr4^>Jʊάc1Fj1ܦ_ whMgCmZX]=SɓOXYY\FVW8w4z"m9BB " %D !A%b-V=ƞ?+?%c.,kJ$A1א  ŋx"x |;ߙ*gȼg,JdfWTG=&;y9&;;D6Mw?կ)T&n4Z6;z:73kx?Wyx3w^Ãlkz({?.-NP:e=Z-3ump؇1 9`Y vG_a |B)J Q  B~ᇰ]'{5zwyco)+|}?pnXr[Y1Sޘ f^Aľ*?K/d<7U!nM.e(o0b},+Hr+þ9gF' !r)kq~qk*&Ar2A9vsTN k,K|`]^s Vжa;E!iUPQN#a߄uh֭gc(u~J\ VFA( bdSkv^yR~7Ʃ gah ~qĹ'"G S Ҙssֈiug]Ҳ#7%$ 3$PA 8{,'ak_Ξ=Y& ™.ǐw*#κyżQcRpRŇY[&?D)|dS6T m7}WF9B#J-_-Tڷm;h6۹B>̛+)Ň!N^y\ {qZhW"qEظ۷o`kk qKz^8y97Y$ 6,19p6c)(  hջ?tEGhyp[}ǧ=&rK^» vļ5! AW_M¾'oks,f3d l'eݔ@9;9EE/Μ9wSǫ*¾W#U]̝uY&iݕsqnӺriKS殜ޯǻ'ay6܆ـ:s&Pnj\I6ܹwockk?5iSO]@]|rtm\XB݁hapB6xZ%XŐ a @`ycPj6aY68v ;ƍO=7@6?myy3$1!s$O@IA87_$?X F#Κ_Z,08r)NTWr{ƔdEh}girgq.*?e N׿pfO̊{xxۂE"<+w[h48r8<0ݻw'7 aYH +xjI8aq߃hjch` ,? Mx˰p0BI,60 ˲  k+)™idɎWч3)uV27sYZt4Wb2 Kܦ{5f-+Twi=cUZa/8Oп(ۋ¼o`YZ#vW1!n޼QjDm'C3^l{(.s86vj666F#m`k x`7Ƿѣgp 1qtzqK[) Fm4\vOهs%Rj%( 3ׄ  ??zFS, ,()!p*2 |@ݗJ}nܸ?p?~v-  @IA'7yO9 lۆeY`MueR/LnER8]Xba2vF :_B1{jFxuTVtS 5\[Nii=hu*ƆQ4` | (Wm65'Ļ_n [[}llF Vnnp[LJH (o~oOgFEXH)kna}!e;vgn;Pck$ (Aq`λ{@I8 o9TE~J%%Q4m+ws CB݅HY9mwjrSǮ5Q=7:Q Y{( n5yQ 7epO_Fi=ʍw m #סqAɓ'wOA_l pԐBI$+$m_?)4$'e޽M\1>:<:3gs"AJ 1=Y#枦BmYia櫭2mN*qTfŵ]h'5uPil7)'OYW eWƵjmEݭL̜n,ɋ_ q?Iuc0COݓ'cF 8hxeEy(k @ϕīoխu| ?g9FTV pC\^^/@{O/۝9Aq0  fO{ؖ8g" '5혺)gW[H'ySNsG8>37!ޖ F FcZtT܍{ǝ;~0؎ ˶aq 32H& yC§SϠha8L[[nk,,.g>s6壌{\^f5AJ !?A15B )HSNKIjfLerBekrZ覬*' "4Bej* R޴椊?- >z!F#+vc)*:PvlضsP2,J<;xɧM Ilny._7nFXX8ӧ7f( v A1#./:7e2jcJqMf¾+1myBg }ǘפ b¾XZ>={byADљiJcMyI'"w냻`M6!ތ1X 8P瞌CnV9!lۅe;}C%,$b忿A1=#*#|rׯݻyǏ7pgAA%AÄrw( mkGeA"PpOTnJkGT)*sBvbe,4%99'vtrqluk) 4v]1/ SK'>}yٝqVhRa41  8F؝@) ?!D]@ψ-TEs'%knba>OayyJ9~O>>.VW3x/sS<j;$ 3/U b_sx8J9.A@Q*-Sp@FT)Sg`A̟@\ٹ'*`tCGvZ,~]p,9Sb pz%AɹIwǕg?$zF#9)uќ{֭{woahq:xz?AA@IA&'Nf١R&U ]fYg RJB~J6 peWfzWj91Ҝ=P9^4 r㦂9?OMi;.wNz^%;y^/Q7 *ޝ(=o6%@`smp˂P ` LrOfkAc{{Wϝm"Rbssw֭ lnnwfL %A1K AAK..|jlʰo%E䞬pD=ұR!cHtvETU_O|H`KY#Th-aߓTC2b=7 ێ;FQCė} etoL%r43(C m9st$̻P Ge$,_Gn^ħ?VVV8  ;w615_w{̉@I9( vżU! }ɥ?zcH{"Y6?)MsFJC7P]H''T&!e)!^\]>,,0~֣Py/->HiO?}VA"Ra0-R±ܦ|nV*6$B_NFloh|>H1"zHlo}`qC4fsּx{$ ( bJJ 7qq)PE!s\e葆SerBmS/T2ƈܞ !甆)sWSmc湋pSġFB )T\'ƕMkQ owqt'Oxr4}-Rz! G| \lA!  [qMTc2{fpT$?%!"?eֽɳs+^\;a GOyE7~.V \5_~-&'3kw8(9(R sBE IwHc`gϮaaaJDzp8l?K H$ )~5䦌B BBWq%Eᬸ<8lQ~ݔ8] ][Q8/2T,.'TǪQ1j/!'rPJ!tvVdL+fʉ);IRBBP"5ީN>|-T*zFs#[_Bg%AJ KG"*=0re9Gpc1槴8Oii*qM)nJyƺla*oF_Q?8b[J@RRHEʪEK筻Sͻiai8.|c8C ގ s( 4$PAD 9diܔ@"ܓZ+KˊqIh}k+^fڢ'Ep  AQC=9(Y!)!Qu7S =k|$EJUh˞ےL~݄}I!>FGezX Ĺ82?5-Yn0i'D!%1x$Gv| t@ r8XX*puW RM  B%AATp p8PAAִWYܩkr)sC-TZSJ9u~J)MoDF7ҧSe9OY<鞤X{{W)c_8?A|t f68sjPjX=C z]:(uA%AH$ #~/qعR~xhr>SiYYX秄RB Pi]pr?KE}r;j< ydn xH$Z |acPPr?G'1<o 8HQ꜔A^χC#WVs4Ac^A\xw:24gvX8,XuԭP' ]&q(ZfSf:YtV ٶJhXkQlsN,8fDY@tɺs/Y1t]|N@>"!'Tj|oq|,/A! aZ੧(̛ȣJ o~!sH$ ze4P)XZhv)FUcA9+CA?_t)e皴PWd$ɰPaZr 7Xr7aߕa>98|~I} P:F04:3 ) Gxd=%#^~ &}2&h~{ռSqRk1 ?YD  'F- 0GXZ"H!%AD( "å0 +RgpS}9c=)dU~)þSN\cYᎣ¬ z2Nl~JSy0b8 r_}\ Qdo&pS^8FI(`'l~+r[PPR *5r Z" s!zCt:ſa&R)zIA{  y[ͷ"$RU)UX-V'7ɞ]*4_,nMkȎÊ2O۶s!a6ߒdrLoxT;-.n?% D %L~QO ,q"dŲ) 4'' ܋7|0uT;LŐ{kIßUy|n*r!eY鲳M^c~()&Ed_L g) r 0C+`״#* f@üS e` ضB݂8A)[[(נ5yM2vO  A7 ]Yr|طC Kv'TN,RHpK oETTL,}K)qR ¾-c , JAF4B2W+N֌]a<|mB)EQB&3db){v;h6]z2Pر)PnKo ;(@)AIġJ p{X#T6d-Xlc&OC;3VܬhNX8{9jS&U,7 &,׫^dAaf<50%š h@eg>; ACFCi+y(h4ܙ?7{ ̎Z $pC%Aq?,7*MX|8Ӷ輬cL}GS6U8P.wrM*#äLZ!ٰoBes˪p 9f^J=!즼pf /_$$q8qarp"HaReɺ%A (ö9<v dB%3ϐ " Aġ'qO*+S;*#1SW͆Oz3g1 *ݸj>q2 My˲"ĤailA8m1vsND8'H6$FL%L|4ڣ}!yd&$cY(gm6`AJ@$sPa81CA$%A Aġ4QRmP{ ee]Qraɂw}r],%>[J䧌þL٫qOZh.#'S(8l8dqԢ2v)Cxwb̺*8*v`YQ*Pj'h$0f2wgNJAI1sH$ 5zf@Ҳ,}d+wGܔQQ,v9G\uacü8F)>?O;*jӅ}gssOV3)9_kh.'CC1Ϥ[+X)00%i Tː=Q]Q6H` m s(UtPb8ay!66( J ż|FA?xo=g@'U-'IkᅾQ9MsNږ߸=Ӂ-/+ɸaNU*\*q`q@ t*J۫k54ZcǫurxD~u睇eu!Fwf#NPR$D$Y7'35 1DZasP AdNbw{cD 8\ ] QtBU~t3V6.e>e~J)TRs^TN35֣PO!D$Nn1aS:*/yBϬLhV RhR A `!x#?3C)u'(J-1/T2~kѯO!?# ͼ! 7z'2FX"ʈxb[&웳B:q~sQ2[Pԅ9Rq;YVJe! `6x9M~t{fqdu&U^L6ACܦ;qSfR^'TFS$Sꧩk2O)DTu~ұF#+0tH$&`<'<>AA8y@MiY!Dg _"(% (9/x'$ݻ (1 Ss3mt>T)(VTś168PCv `YA `* AA! 84\߇QLF^+!EdyAs' a97eOh:Q.G27`Ԟ66;:!q+}K m0 kS֓GDq)PBu-mL 1HH ̈́xGZ5.uFca(#Rh+۫3yyU^/@CAyCAK*JQƐɳƒO]~r9(hhc7eimA4*k̗YCuhҞyP(G]~_O*#yn&!|b󑯏#XYy J})%}?)%@(C%tJb`HܓB 68z`F=-pʟu'=F @hC UGmĉfn 'x@IAx.({Ov"u#fC$,VBeYTڰ]مPY+R!['W'3OVL nCk,XsRIw1By-^plcytXJNcyy aC-RZGrRRB(4 I65L-[2\ Pll6r&Z nZvWh a(0 ʣx @@%Aq+nJZ`,Waq6}t4;vm*QL'Eijlm"2kz/3i"fN98IU'Ν8R F, #웱qؿC6p} TtSPRu%_0F̲b`P" Gf\0ݻW0<ùfs G}\x)y^/@CJ G Aāo 3" a6&EtbkƜ"\%6;¾s(\EtI0$¾KH:H!sy1gtbBeU~aPۏ Sqܓ|o=R7%?NUP>U+zs@v0`J Wq87 #1r0! ÃuZ8$ĕ붱x ass U(O',! 00/u b\[x2[FHM{6ߠ FH>ϳMUcfO7/d1<9f/{\ZTv)_AW(朸4鄔P4MY;5˺'q3ps+իc-O`Rx(fd=q2˻xW<0qcZʊN>`Js!|1 BRq $BrH0(0z}6y ?H# 8(@IAXެ 6Zc.WNM"eaL)DP] TΉN"\O|$BAۭP/ɈQM3v\l<AAAāo.J*C\ygp+aNsT8 c覌'[mR1Y%'CMoqҢ9ƶ2'rSfy)Knt /_ŋqEw<ٳӭ jz.G8gRH~G)x+ Rj!1R|Z6Y6! .E*$}m܆eٰmO`aae# CܹswF׃mҢ86vo 8,@IAH[06ƧB8dUR{V2 ( u2n3 QRLBeTyeV6maߺ3+~[}(\9nܓ&.^gϖ¾v)W^k^:lCgEMl[%'c?}a_v|`mzS: b_ oD B!BeALS"b0!FÇqض qn/<0:nݺulmrjΟnwA@IA8.N o>VD1'bEwvI1]l,W2B^]Hz. FnpTfE7%/(0T5"l-Og7pZ\x \8{jngϞ׿$$7O/ŋYqyWs~u)laa ]Ӕ¦\@_pm*-DZ8 Ņs!~h nAdyw^pۀ3 bBrM4 CV(~ 9P8_վxeIGXA#fLBEK)Rd, B6@eI,zX ;׾Ue9~8dy2+EvU̓5ۧ"_J 2(%!hA)d[[[}]| IDAT[w>Q%2U5Gރ}B8[I8$=)r.l채6?2-Tq62x^3S.= KOᙧgsOȩ$]4s& CʾpuJbR?eT !01քpB: ~Pn=wHy Yv JC|✕퍱x(a\p5#{c=참2巗=KdB JB!NJ(r6ŷe߀˟lIL*LY}SB8'%EISN*}'vS%9˧XsRLk3 ]Q"ILw.. mj#@SZn~e&͞,$$FE) $PRA5l;x_ƩoC⡝bg]1EQei ˀ#2G(I!, B 7^ya lhÅʲȁL.-ג,BeJ]M_XL7ҙRݚOP,UGc!]{(K7R]kbqឌ'ļ?*O%gr^)glm .a`pwrŚҕ09 kBˆ5@)!v𑇟ε-97ڒeٳ'GB2@I!+.{2Urɥ3yT>ww[ vvH̩#F4kΜ8(QF5$}ܙ cEJfPBȡ@Bȱ;BeYP٨l&{'{ʴQtn:k;ܷ/RR7˭ŝg(=<%v JM)n'tJY= SNB伄A (f08}j u@J N9RBe<&Y%B!JB!ǂ_+v5v,K6PjTl,@:>p۝8wHӚH7'=řʾݶPlS__uV=٤-TޗvO6Y|I̙[?~!5؍uh!1rNɺ[n@?(7svui'D[<1p!JB!ǂ~+V{Eb.5h)BeԱu0u{g߿k2:w '!@ʾΧ)1P6bqvJnGo]Cp|w3ʕ+(a97Ho^ CYuʲB;pz'!lPʕx;WMz4lf<_x>Bb@I!X+ffX8@^k*]|ʦ(07|5\P95rXw].^cۘ`[䞜Il̥1άxeGL휓!i40In ȍ|֤J71Fk||Ү2W?~3"BP$ryY !T_?@>7vh\⼨;ll^go7pZٷG;ʾBmƙvd9z̞/NS^zu#ʹ5;;1ʟu!uF 7H;)!$)/@!P$rʫh:pXT*S%ڭ2 ~}̱LwvJ->vx-)GjӸnUqO6IS t̙\ wwv v<&߁%LQ؜`!ݪTBx7M;R:40F#/)P4O= 7!C%!#O]==WퟖE.Q̧4kq[Q%x?_BtSk ]j^Zxm9.;ܙ!LUj'BBevFga*UrO׮]͛7OB4˹o2wvhB u%D/j0F@H!-⤰I(T r45~b2/L%!8(PB9ҼLv ,^ܓnT}a˾[%1SVY~[0O'Ÿ;!TN)nn7e"u ݺLUMᳬ_O~s7\ɝ Ocs #Fȍv!pfÉJAJ:xh=/B!-(PB9)N96'PY9gLA[zkڞBek[XrI&=0rZ|ʦh:=3.Z"a>יOyȬB/' ?I7o;;0e @h]@(PVK6[rcKmy(e #y|o3eOBN( !i^꫽3}B7_lvSV?:O[KnF)1iapm!,eߝBeYh4 ~{"QrO6tyS"XK?~G^!$KF9Ʈ 넁BnQ7Q8pJeBA̱;'&Y]XM!' B,/~7) 4Vۊ=Wpv)!\CTwC\ v]`\O>eKLћ:=ԡ:%2t#ienLO>e ̧N[d[4sܓ)RKώ*?x7g= 5Zɷ tYw^w;-e+ΟX^QbkCwz}BiCBȑW_$2@eAB4 6DM1/U^JńPٓO);)ui9MY98S6"ח8eSٓgMܧ{IW>* kH*gG1;cN.!)5kQ*He8Rfv w9l <݁!, B$/oO `念r SmöPY(n)޲o YlM0.o>5⦌ к5#2,xdsyļ?*j9s0GOC+HEB A)+RJ #mndY'('%.<1</2ɒ*dR$C%!#ɍ9L6q2!2G$? Fٷ?vafRs{)+~)v 2*{o0}|}@v6ܭ!l9hS<^\n@Sv9s%ϥy0ݹFp/rksNn#U2>m4sm>JB!dE@I!Hϟl jIc=L 4=PY=qSNɧl n|ʔپpat66]ݾ}SmL;l}3Qʙ-_uS>4taⵁ'Ѩ, =)n %(-ǟ;7ޡ^&!Bb(PB9r{,*q}H W!v#F")Dٷ TI}]ݾϭw! 4sVZRbIqO6Bw |ʣ397;H >RkDZD>eK Be_x{n^~/=yݓM|ׯGBիW=*>N׷/n} w`kz ΜŅǟ*T݁6.ݚmcJ4.R )!\ 56濅2~S'˞! JB!G/]o3"!9, Q۔Ef+v%J(KdPaea>eu(pT&)TVBnlvE׾7c㱧 =E|s% /p'2gr^Oyw{=xo|5<x"ﳳiܲa4M @Ɨ+RA0fNZRB'։ ٘:NZ>ݝeOB %!#WeǞ}t xm@̔J)ɧBNϧlu2Gn㖑4 I7etm4&owXv;Ν_cP|>kp#Oys&e7dwͷnͷn~#-7-=i˻MwelJ:j  K}'&rB%!@Bȑa{2ϭO95qF:m *¡nJǮVcO˾XDw쌌ߨQxϙ=9(S2gr̘O'v[ cݱZ>a˸'R9x9ˉȧzB!@I!0=ٶE$ZABeH +2-TXK)PeXoBek[(&ܔig~P(PQ˧d9)?^7e]h.[x] GqwwەwI!$)Q&)+qҖqnYePnQ'Χ4ӇB!JB!G0:R VODJ`PRS)eʁH }:|jT)eߡhzOV{F(NOK BO-َʲ+Bk_Qʕw6{Rk[1 }dJAe#@ @Hh<2K$ R@s"a>Go c@RZCRkJ$Ia c B )FUi`HEGN?to%,>B%JB!ˁ%!# (MQ )t]X`.KBeJkeJt.qRB|)8GyBQ/&9BJB!GTyw3Wr(Uy}~[% ݆w¶e#c;Δ ̧Mڲ1:{&T=;h O}_~BLͷ޲w)ARNXDJcloc!D RUٓ*97@19>'S…#+T^!P(PB9#NS[Ge]8K>&QFٷ;Xzz2GwTltkΧL}ܓ"3.l$e^?!T2grrm_|L* ) v5L]lU'eRe6@Q֍$l>eA%!@B39N,cb+tOC:)Qc3S%a(Tu}jJ8VW7BeO>eN321=QI~ ϛB%'/zw")3[stNBJ!{R#%5O)mޝU.JIt.ʻX|7ho̠$(PB9"LހQmK% TQLLx> U!Be+2g>fAN12C>ݢG<}"'_|fŋqNͦ}{F AV-EzW[C|nTp Fڲsk̊R0eGSsSX|7O_LeB!JB!+4e>GeY薺BWocaYVQJWlnsMoZbl]>[>^G{~G݉|JL>Fs@,\uV}YaǣS=[]uKr|k` !I B@ȡuGN0Oa|})n{x#IOu2&D!P$ܘ{wRy2RJ (f U#eS67Nvi|P .1|JC)}vϧrJ,K̋UٷdVtٓB 8˜8w+ #$ P,mygʵ2ʾ_¤JB!K%!9ʐӷ))QlRx7;rDVn>=["T614CPDq:=6բÜɣ a@5ʾ'.@cw֛X)묔aB!8dý ̧~`-NoB!K%! w_nJSWnʠK5ս:?ʾk2vTِ}).veBm\c pTs?̰C#̧~z%Tz8ɜ }0OF@$TBB919KnTC PJ rݻ10F0eGW-ǗS ϧW>WL)PBY"!Ͽy>*P1eQhh9ƴoݢq񼒃/FacolOא8o2Oٺ Wm=pO깟~S̞\e.]/^lvGۣf$KvkJ)زnhc4wW_4 PʠYʻ@O& ΃.)<}^$^3pgXM!dYP$Ͽ(gܙi5Y9#!Ӆ~SJb0rS,T6˔oo BextvPJU{(6 ~:677Bd0wm#D;\kIkpHZ J2(5\eQEů| ̅ 5|l. &S/!C%ބBV56Jʟl7T> \f`>ekLO>}ޓ|;ݷc%{)eS3qO\ށ>sٓ/AVL|ۯܙ8ì3Lv!rP${(RNwas.r~eBX*{);KSƧOSJ?OSFٗ ̧:7qɰ;^*w"aT>%(W!Pj:ƒrø4ERo/P*2Aܓ;(u %[P}ߍ3-r^MBY"( !,uywBe(N3AtCܔtY|Aԁ1!TRC*Y3M'!TA|]MZgoٹ<ƓڵkIa2ϧo޼^xWmDG5Rʱp`KF*Ο R)l!]@MP~41lo_z \xɅ-\q|o?9)w'tPBY( !$;*˾uc@mܒUgox';Oq'Sbfl9{)+1!nA.+6k=*EM_~BeX}u}27G=M6HSۧjc HY xʹ'm#deWEa'wzW<IB!K%!WISCrQd7iRIIAiGeO)p7ȧ ˧x"}Ϳ_Xd4˹\p˗q\BY`6!P:פmcv h]qvɪ9T[)XCFQPy#gCa7!ABW_p7f7K(Kt] <z;C>eטt?Χ(ny)cMϧ\{bZ&l$39/̧<|ʝWJ^(Kgtv+T1TV;((R0(KM:*SG{Q)PBY( !4•͋) $5Qwީ̙O9s7PVE3F?|ʵuy|j}ɼʹ^zh)_|lw*[ d)݌K;w+)H5Rh"ϡoCFX[sP릴x]}8RXGB!' BVߌMwuKv !0(PB92L*msQMy@}|0wc8#@(&ِvH[݈3Sen]Qqwtu8|P<<#gr^|>kת^zixvpO5dJKc 4i˻kvϟTBe1ʠ5)AOyPͥ{c()Be:Pi˾|*T( !, BV?Soze5IFOrU+uu ʧ ϫx-8馬-TV~nʍ./=: <}aL,#gr^|ٷwy{l[_hfv٥0!TSevmBI+R e*!2%<قN`.^\ ʾ[ɾF:A7P ?9eJ!, BV)"#}O)-w)7eG>e;*̧l GeM5"-|>eKt:g8Ȳs&/(U=eGkFWB렔rOh͈껣P R U, d ȡbo>$1HO.[eY:w9Z/{BN0( !/ɀo=7Sܔ]"3kSpmw hcdM#O.=-2*Wdp(-d'_* ,?gr^R/J;@WkQ7\sO Y׵) ;`\‘t*P 2Aekk3.rȭn*Sv@e^*ܙ؇>:ۛT9BCBJ+7Slv;|J)Tr^q ű垜.TʪrF7%}ۜ攺)F@_w;Rjsʹ|y}=a6DZeR))cd%R덬K!e Pƺpt>/|J BJB!+^nBϧ4Mek0z*U= n|ʦ5fP# SOGWվ (N._9dSgs{=nMVٷ2[Z@֠`?",8˞̠Z#Lly_éDnJT_b|ʭe~+$)o=8e߄B!qXAZBT5eWhT݌iZ0 C#L浞wK?&pbİpC6.e7k79bĵk*qŋrʱ'=>gJ?܉7o7Ʋ<ʭK]u.K@Xy%NVpݣ{Tdf,6.z?ޅ'U(D0slmXgd=>;)8 Q}/5]Mny@!tPBY)ʭ{= "nfoSƲ,tgrXL7D7CܔOvSf~i-e~'qș_Kqt)'N6G_@- ǎR11unl GU`ʂI=){RB$GYz? hBKɃ_=k>e쨴cjw(PBY*( ! A-TfJRvOϖvsܧX޽cxQ֗}Kͦ˾|*KMqBR@I!deɐiB6Rhm cˈJaMţ6~w)~M)@?I7͆B>XkЌQ"p_|=?6 ( P{FH 4\는{RBf˟d%"GgnZ{&l3O>e>ɧ4."%!%ABJ+'^.Ro}V_{86MiU2oC:wmW%Tv}o]";@C:*X{=#>|ͽI)LDm^S/T$!ݶ O=iݷFXmT{qR̊1LQ@l!)l |˥L}L<ʾyBGϧ&]U|`"Y֜Z/vI3gsZdg|13 V=4O4} ;q9Sܸ\(oIsO֖u'N^{C=)2dJS""tOz*kdp "ؽϧZޝOc?qSBJB!+y2C]P(h8v ϧlJ-iY ^LLȧϧ\@螜Nի˝&̧~zOyd˾eYЀB@-Nm1O AHG\G|2v!I"rS{?eYVW$!%CB ݓRի>rdMmE7ao`Qݾ7`& DEM t;*}kc/G:Κ'k׮1gt(^86ԛݓeZ_>=i+5"[wݙuOfkR, !vRB7?:!tcG>)˲PJS.컺^ BJB!K_yՖ6,zLnJ/ywbʾLz\)Sf걩|J ȧ&`w;M|[?3?)0g^ G=\k j:1U/5eYqR:{R*2.=';fpS^'*T>e咜OY uRJxBY"( !C^PS1PA& upR떫3) tTjvg\uN6҉ܒ|MMnOs?K;acqq|ٷ/eGѵzsnawFMZݾR9 B)G*DY(b{ˎm 0Ml]SKG>'O5~\ɎYZ>D'/!rP$t^~mbʭnvL5ůD7+LJY + v[7ݾk@E8n,zH|V}H:*7~G8@x=|8Snn^'|@ a`ݓ2~^'ܝ!F`rw;8wOwn}ܔkʧluv/|ʍSA|YB>%IB!˅%!ǯ|;yʾ^KꞰ5ڔrSeeqTOsrzwj*{Ϲ_L]3@ 0gr9{kuO!IaE`td4 sݪ.V Y2QL(&ch}FTanJ0!ɧt!j|JWU>3g}: JB!ˁ%!Swg*j=nʮAlPvB%|>7)Mι}vws,˻9GA:i)777WVDlv2n^ rO"P N,P9N 9M9?42(6}AO>V9y&:*/h;ېmDI!dP$T[At-TEu| @ 06u9ʔrH94q0ro .UO~7%I,˹)LmgB}'anrW'% ܓCw h5ʢ@LEr"/YϜe֭)(:۟f@>/ʧ,NnO9*}S= ?q3@aBȒ@I!dw[ۢ=cypبݔPR#X rT vhTG .+Tn\˻?'ս9/2{W2)_?{>pZ"\r2Gxae3`w)o!,A ](& dCZ ܔʪ{":dTtSN+ʧȞ|ɛo›oZ@>e*B9<(PBY*ǞB74}nyB7jucКG@ p!n`=wK{m7lCޏ{}ޓнYMax}/+hFhlju! ¹"M¤!sҹ']i-!Rw8ѱu()T6Kg*L1C>eXmiS2e.s՗o}_B!JB!K 'B(Umh;>0@lSHn߈ȡ-̟ǽ9s&O&^̧<}G 7%1u>pI?C_$N:+β(rCn׻B8רJ8?r@>e•Ym.O0&6B! JB!K ^Ol),!UZ'Җx@0ٔrBe-HyNܔwYv8*/,ǹY} '˗/˭|ʃ!rOv,}n:{R:<7EJ2L!FPZh]b SʾySB˾h';ʾ."O}wS)KOʧt齃>B9(PBY;@0DPٙOYΘy: iS)[wAlZRk {s^=J!Gp̚X:{XMUʹ;x{9٫,!%0ʰ4I=)-J,ry"?<}ZkbYRe)']s/Nf#d.{2!t8XS`S_ 9Q]7񻧜3 IWf̻)\ ȧ9&y^ =FeYuSx=82B!JB!K㏿un.qaCZ]SMhC]~m"gct9ʾ4))]ݾ 7;DO?a`҇cT}5LA)_x};mooIU'E;i'!ϞT#L d(rW||}Sm-Dp t2Qq˾;)>a>eWٷʲԇc45]e6$!AB0;[mPiF>e٨:N-TpBB  -'ҋ-J8-3ISzq{?gw;{T]瞔JHV j240D1bbP DG>A`L9!*iɧ4(8o{j>eeou-T :( !, B?'>nfٷ*7dx/fM1-Ut:)[.Jd>eŨv8(yr˻3IEW,.=GpIipk׹.A9i IDAT&I߹[etY(r=`o,2Akn 7Wآm03ߗVCkYDw+lQ&~);QM2}[ؕ>W%JB!ˁ%! fwW>e԰{-Tz!nU;IwSj[ Ykin߳>$ÜIrׯ_!@{-IwJA(ʺEmKV S!JtqTf2@L&&rz6~uO`p_E:gZ`k m|Fܔ5mSbnJ?~@F/ aB!ˀ%!f>ex?)>v5w|ZdJ+N=a;qtSF4c ȏ&@ΚI9Z@ya97s&Ap%ٵٓ{%eC)F:8rF7e8sS&]u/{ta`$>BY( !,/ݔ@ (Ǝn6UqP9; EF=nʮA)m`QB%}!P1s⇧k(G9N3gISnnnD!T]m ̹!mcHpnC#∪swtRe|b2qٓ:܇MSʾ2k a?[9)c2E3%T6)76E06}¥xX8?B!d P$obL}sddh4Oiܾ޸BfeX] Z&-F;'4 ݳʠwr&YMEW>zװׁgcW=ʪmXksmej$\9T {R"/s1D>F!B6;˾*bc[jN8>oGw!7˾:M= ͧ=.dB!K%!dI Բo\1[ﮬWٛY)K]ԵJ{4|67eդ餈DP_.WP+Ǿmw3g*|}![^Qqi2~ݓRHI6dV;ˠRYl4Be>do&@2.\e_!hc§cltS֟GהpRy+Q5OCJ̛BҠ@I!W+6*Se߽4F􂛼oM}3V݀;%۷Qi31wׇOnOI/BB6:6ȮmU-4˹ɪreW'ΟNe/w7Ϟ;xc7`4qke˞3s{qRnF! @QPZ[ P;:X딵PnJ[KێкiOPi/e߻{dMr!, B/JΛP4&-ʠN4= mR&˾iGٷN C)+ѱsh}>ӗw7yX5%s&QoOMJwvpaMOz7ws|{2nʪstٓ{~Q9Q;'!$TP.{2uO]غ'}BeY_QupwP):Kٍ3@uS4Ǘ}{rɋiX)BJB!8}p"0*Se@HG7p~@bL&SNjrin PFwC}WT7%j=h>JJ!`979_೯~zʟGOCō;q{roǮJ97pX-UbeNB}A jAe#8.D9"[8bj؜Χ e"Zk7}?ωԹ |˺I{=X;hC,=IB!K%!CG>O2ȯ*]٠ݔڕeƸp K@{'PBqSjv7#|>ۺJZRwC)֕[7iBe0/yvKk{fβ~.n''=]ƛo6ݶ9A=Y k#U5RYq2!ldQǘBk;Э+3M鷅eC˾瘬*>fK3)MO 34CLgε)!R*:( !, B_%W: LUȺcv\f:S9m+ʡ+6Yn=B堎R vSݿ=sqJwtښK~|-XIry_~/޿wvqs7ܔ?ʾ}>epOݱvO65Ʊ2X&('{EOʹRѸo`P)"qP0&pO gcׅD.^|0@%$B@I!1;ۀs96 AٷvbeQjZ*J$@ ỪJV7F:}WQH}gJFDwxݾ;'_DߠsB3+͜ɋ/իK !bݓn~cg?^}_|!lƵ=9pIo+ `0YwI0 e#{dat>.Zb*YR]y#2-T6 *k«`dg\g22(n԰/!%!gw[8皩]EQ浀(K()!+΋%fOyMuPvS )oC[Be{dx~#Uye9]<,T_eIrkkv5ZVmO2wXCSʾCW|ʸS9GJO*tVF`$(ZN!BB᳻트c6mgWb&82>|즬oFwT#;N4I[ sSC|ʺO0&ȧH:!W h2c>KL) :B9L(PB9T޶uu$/THtemYUBHlBeƕb˸ Q'Ɩ2ϚOY贋馴"c,]諾>U9FS' g ;VrnLN ?l m\6~!<{p:~)lLw;v_hƖ~K([-lng5ʢxwdQɎuj$9ʮhb'dpBaxg2KDsqr&iܔ5OH|^cpoM>kPJB!˃%!eo.!ƹx-&݌c8Oi(j7r۳SfR*AV:*12{hqݻo/xM3I#/gk dʑ,wH5{9~Gά?\:eյRB( h J) ]@pLBle7t4&̧l3S֟bawO91P?iil۲UG3IR"SJB!K%!CE4'k-˷}\2*#Ep?V kVQQϨO,];*M_=DOqz7ݔ12{=5yL>˹3I/T㦺) L>Ye0Bbs/ Ͼ,.?/AgOuNܻ'CYmǎ{P_s@>>{ꏾĤx]}%.4{s@y-]-\fs7rp鲧@!+JB![eqdM 'H%ͅS 7.*SN*O b֮ Ïy#P6s&YMWQI˝-! 8\n!ҝmⅇqic Ͼ.>XBA 2R)=]]"pOt6ƹݔ~H`V2i`>e\r@DP 會%ctQ!w@I!dIP$rNG]]E>, HZeߦ(!!kʆPY nȧ̧47퇇B|J/TͧLÿ?e;qsjS!=x.j:*d$98I2E ˝-b)3'P*hQw9߻{Szz { \c׹ʞفsH]U~霢 H*tS(n M+RHBb#ȟͺG!%lx{H!d9Bȡ[Mga|6|7 #˗}K)CVLa{Z[7nFF@,I7O'T*i'˩)7e5`LFkz~7e<ֲHkעIs-FB8tX)! p5n`sw|..^'¥ _8;_ԮsU|Q9yBeͣl^z{<5;iQ] 2n "xv¸]D6ZCFP@!+?!*UI1 "Y]UMû'Ep*+NۊBbZ;ȈfYTn.BeMY: SM9u&/')}9^1ΐh@fJAd#Y_HBq=\~dϭᓧ%> ~}QaRkĊ`Y>T0^Q6Bp<쭙;qϼz 6F:Wrg#(➇c4AeJX~eOBV B;|.ˠ;v!);ynd% #a)J(T8/JITqjٷ{ޗOi;rTv~B>ƥ2H)&_^=g979xx_}.g+T;|r> Pʺ'trOj1 B)>yF?]in%5޳q94`-E0e[ Vn.vOnJ$tr W7 YO"e,&4 D!PBH8S ~RnOW>:!qePYjmK jC:7|J;(϶EݤZ-T˾iֽv̒O9Pْ̧L؞'0$s&I\YeY}aw8= ˞T ZAGI:w+9[0?+Am<%s,jb]^Ck:I߄j.F:uI\h>eON.u v;=%bD%!@I!i64˾uQ@( );}<L1 mRmBeui_(ʲ*yH4@+-3*}ٷh[oͧ)JksfAn}20O$s&IW?yimWJ d O ln)|STp!lJBj4h4|OH\:.KoGdց~4үS4NjF%uޮz|Mi ѷsyd϶ =]!pdqěBP$rhoyƫP;)=^TȊs0+[ND vSV7tU7|J lc"sLTg>eΨJ^2Χ|0|J?ŽB,!U|cEif,OGѤݔ"T>t0g\Ba7w߷OU%`|I)T{6qIH[;wK!k7u(PzRRAe#dYQ6BP9}w zivs0x9B9l(PB94t8!TeBeQD &͸J)ܸYe 26Je˾{ rVPiw 8_/ "eV%qISGJR<$cJTU\IݬH/̣+QdKrD)!*ĢGeEq9 :}_;e̜9~w^z_,%kK Ӥ3ؐ ]`IB =.2ԞI >G ]/u&ĵfq I ai`IRtA:ˑg9njz/: ^~f%b;qBeph)wSnkA9/|KL:obemw*d >nݽܽc  \ "P W& D2)պ(90ֺްP/FC{ZiK6],'\XLE1fNcc NBt??1e@OsS6g'.$vH'RoXIڭ2̉Ykԛ 6W_q O T{a*&]cWdlj$U^r4?9ʰ9GʴmNu݋%wxr2O{ozfFapcAIDA[M6kU"[)ˑM^Hͮ?i@ !-2lB:ؑ ŅVE( 5-!:cun_F.ԅ }Û!g w"~'GܒgRO߸//juűО)wwo:R͵{(4tAYܓ4[l6kw?rPVط*7}S =!0K{tc߿3\Y=ivû⇞xYYan,y {waǸGP @) \)ɽdOٮBS7A ZaGĮP Jݶ,5 :SZcs3bFva!-=-gTk:H>ܔ\ˁmH6G@L BגO}\K zݮ94vjtˤ8sP*ݓ,v%v5634so[O_ />sg%}9ʞc"ɴͷ:D*Oc|~403KsrO=$jj:GV*վ p@) \)B^󘆳u )5)PC >R;4x*1)l ?J鰏 MN凴B%Zkǐn@u$᳟{8@ IDATt 棾֢6¾ӠrOCEŏF܌93>k)c@ O\F- =<ǑO( TCe9ADJA! b]"2&NaUL× @e0Ad#ȉADpnXd\%  9/RZ?Bƌ^wN+)t2 sp״<cXn'GO5^~RL ?zr Iw︼eܓYHwdzuL*R] ryfE`8wN31ƛi^!{>cW8l5n!FϞI#A|qE兞_r-k$TT9\!L$HH7U7,,HRBe4,Qr^LXxOSvdJw t4 ,qSYpPzLc`0)C7~sxàKoXܽf'IRNԤ把9qBaWۅvY,l֨7luuO7n&zxO}'&ŠHgK bigS咤n@K2Ov9k9n๣k]C1ABAYDA RZcYk"w !/ƈcىb ~^xc11":rp81aS`L}yRZ V.K@":Xۇ|pC/"ٝV\aO7e~#{Cnʺ\|7%[:|'^ _xW+le@Y !JE=kj8]V)d\;2dyvjzH`A̻ˇ&?4p~/9Oy ¡]XN cQ#) tA@'Cc]npVo#xgAA2m •APR:-)'5RR,K&LI1TQ׋x1"NceZy*OȊh:/jOnZ {-{osOzRg{r]޾w`uAF •9T]$4$"We(XZkٕy-3S`aߵ1B+OIp<'g8[Ql0zll#lxL B8¾q*vBd8*55aRZ} ‡~7:P^-Ѭ.( P ?9vIbp&JRYƅqҚf vdMTeRGe\c_ #Ůa[cLl {Rg2kccY}["B=CśA4pmCM>zWT3[N\Π¹'nB5 V)R8iDxCc>+vعŴc/p߅xgsO |6&G7  < A Ɇh<ˆ 'h&70k a61}k'ka: %ry:A 劷O0}e_!>L'sDط* %R\2\?GViZwh W^}/?u1|!&qO-W]ZY/A(AyIJ,KD Y^WNq.CkNkx)^uŧ3x~V^"۳߹9AXoO[?|c&})O ^xu[zk?7^zSAxRA2BoMQly*\۵H>K^;sa^4aHu]S" VO j+Qy5Ú8OD }(ܗ,F(ZBeWD*&` .L ?Ȓz4x789:q2zV\ICսs98ω?Ojrc)_~/<=fku6^=0x\DbO O|w}% ] W?9!U17K=sPZK!_eO󨡝RJK}>4?)2䧤8rQDȳ E#Q+?i09s2i;?eBرֱi26|tuzD|~Vv+$_,aW^}_IK=l}% ۻ TQf4e RYeȳZgmXT9;+e9<+lΰY\ N"&2g9?=wRX{P^zocr r=i5p>{SAx p%h .:z{ i_`%P1W֊]6,[$v.4PqHwFzScRw¾oI~İotv' Q몟+S9s n/r=A4+7grgl/4e58޾ KP5TQ8J!rdYLg40aAey+v[,+ ͹=a06m|~ʟu0+?tOл \7 풺'=_h_"P EJAjDE˫$?e* J¦͇söS.,|~~J\H5L?ZvRvþ| CBesHR,PcMl1@+Lu6ִ/9n?)߾@h[TQVk W :ϑ92 qBxBJ'{[>=vݙNfN盶_\lxCoݸe/?W߸c5m#yhD^Nn꩏ d=$gX_ "!ނ •@3VX3 Zh:Ұaۙv?)wcطTMI7|H8VGkObJX|^Wo ^xꍒZ븸%^X߻ D0!Wd3AC vvùhrMR.}_؃ loMPU\Y\2y,Q9; |qnUk[/Yrh1# o O>!Z72pCk[o0+9Ur?<[j9m=|t`=)|p|aOAGJA8mҿ|>SFQ ZgPi$DrMs2T)Y܆mq_~(6^ W%6؉eSખ})[kePKOik'@wy&~i~?W>yr8!W?vFE!b\< Y+\[S}ap$9!3OI3k}z 8d:JPm87 T-~oS>?s!~#JI{>ݓ# Mt=)|pHx H pEEC7Bw sats,ƞ<]%nnjpPԪv7!?)98l Oix}_taQ~)ˋ/?ec ju8JyZiNE?]^>e&|tAa4y {&PV \n*-yQ@8M!(X, څw7-%'PW 9hu>[|]3B\0Psh:)a;n~J˹' (" pe(޸otx,0ְ\Gp3<o <-oKSvqv3?fq :eQ,JdY`4h`8iβnJB-(/:3vi%^~JͶKo`H$ױ۟C|-w Qu];kQ ].vB,a{#+}_+P5Mo|1!T5*+ +@ZC yQ&)Pv'NƠRt"w\hv'^-AY/.T2)`"nJj5ߟ|^|/>^ i'rBe6yUqO>ʛg}Â4njWiZY5"CLeI,F#&Y#PZ wޖȧTpE:ͣfMy9 TY4MQ7/֘PЇO$?e>9D>ڼ7ү6."iG]twԄCA␣2*&\nfnPSm{nY>;*1;pcgOCb̹\=y)=) <@) \ ،C?l֤/bX@Y=" KY ֎}$ _k8q IDAT]I,5tb@~JsX>1//8I!Ն9 YSZk9ۉZN*ʼnmHWݔ?xC>|kiIT!j@tg޹:8N (/@YEt2d2E34vmSc׸8%΋e(Vwaw[錧3 H̱+$7j=9*K c"˷Nr Sfw0% …RAE Vu\ʻ)Mc硍n7+()rC30r5Y/'AD$vI*ư[dݡC)OӲ1ujvO 7਄oSRuߘ&TV6@zAӂ>g%Jn2DzaѸݖB%Y%þGSZ iИ+shτ8xvM8%秄PO}OV zBvڐ8rP0CMГ)TYq2+  EQ@յ{ }̉eQ!f{w;9v_\b#V̾PII&D.@̰2 q)@l禬!'Au~AAxpP+z+BmQJc'mJA)m!wJ?[kxn X7gnSQCډBطyu8b#C,p~H^ZqaY#rW~~ :y)GZ 6&N͂チ/}~)y|U4h6sy' 眤,Ν891&tc vunM]nkRN,s( 1,ϰs{i'}OA>(A) \wSib3~m|Mi~JE{ 9mi+jz*:&ÅOMrN~ʮCq8?e;IOcO h1M0VdFI7;EA eQ24 YnʿS_o <~o~^|;h :<̠ TY^L001Ji\8ffîޡJid/SBY`^buz{aV+t@&A.rν":RG{{9sOc?DZ_}&2[ӝWOi0>v?lfxaOAA •]Wp=v>G7%u8'w0zǤ>NܘQ]/N ;5}ȌT\%vksdѣÔs񎟦n`έFY r5Q3Y*ء4ʃ-b>Xj_MYi j:wy'r=Mg, sϗ59cƁF?I7u݌ 3 w(^}9pha߿M _sxxN40&3y'y_A@JAHE+XlQ&2B#pk_'HPk'En %`8ǡDi/ A@ ZB% Ru휗ʅofY Z¢>P{kd`YK$)|;qNըN''Y,'0( zfO8a a}v;؞sP( =$HC}2+RmhsPu]¾aAܓ ㆄx W R>fW(Ǻ C?&Z C@/?%iZ\6 rKv'TZM}P'P2P?7`"l1OW/ <ʼk|nGP9t5‰G8`ZM.vBWi"/PU(5;Xݻ \fHcS읓Mb?t h+9OuvaS_q O{RADAgZ2kQ0A4C!vt"UEE Y]ȱN40A,QpoZpQb%v6b<*G0%ӲE*=Rhagd,C㖽,ma]:CdC%vN?,n{MRuzMسX /- o}vՍ7kj2*+PQBt:'(nWc[ܮi4rڝ;v,0Lpw21ABeP# COIiPx7S>?-)_~l2oS3 "P W) @PjKh,YYsarCc]J,n*vj/i,Χ@m׆]al#чxo+y?հ0M`~+7AÕ>7z ^p !p'YhUyt ^D ?57*y 9nJApү a+ى'fP)tQA8&3'1̠FmجlPR) j],dsJËmu*ې2*æܓ]sSw]Foŧ3sRx\ti6~qO>:|aOABJA ҀdO a#)Ih׃qj.c1OkJX չcs~6O \hfHLݔ ~3= %AG (AC)5hq LCީBha9 慡+@Ơ,',*6a@,:]ACD\g2=`tq*yFQd\7Ɖrau ;:^FfnsM|OiCRe-6}/ <ڛ;C $PՈP|t]VÅ t#Ώ0"2`a[_,ː%B@wnbu6'b\hka1}Jgz?GeB*ӹw9LG c?$TV׮^o `Dz ~nj{ᱥ%NzZ;d:"U~Xj'tUVPedtºa~p(zzzf].b( U9A c^M,B}z|>.﷫vN{rֽ- # ,a1¦w8~o.\sd{.7'sZGb4ve]}bt0^M9xLnw62SzD&'F¾qRA0  pex+'CA|Aƀ< qa߱0De c`U."6]u\RHyDA"kp4OI*V[^f5/bM8/UoƅQ9|pg'JS[0X6VuыI~JIN/G6 uvOY cKpQ!*9~X*@C @WtQsrGGOUQDXo6XW8[-\а+:5@UT(ZlW ݻ= O nn{{oJ7?ؽDGKv656uJ4ɼϥ3$$Gѻյȫi<>/?Ԉ@) |(RA:84v6sZ"+DЖx&[pXPX೤|XM Xu@^زsR[tB% v#Z_a!~1?%Fg #ݼ̗.?;XۯPbnKvM"̲av r7/{@N,`.}~AsI˨up`3awX*΍>tS&'{rLLOn&xd"N>̾Þ c •NSQɂwp6n|QƠ\%o7+ƺ߰!D(mS $2Is(xRt9ݼ|J Ԡʵ)͜3,8Bã#%CkӸZ7 GtUzy|(򹙦漘d 0yiU @,ʤ FAxxq2ebz✜8YTe,1ZaUY9vg%6-y;dQ!gwo;qm>Zԇ \8DU#NKvDGy4;qTv\!TΟKq>R BT 8 ‡(A+O⬮q! :!:0ɂ _QmA2uO:p~Kg\F(>*'$qP~Jc-LKI{~~(P@S` VeѥȡװADc%dô2E~~8NjGO"XQ @ɭI/^y9ƅ믢!:aݜs%4'`qrlbbfA4'ެpvV' Х no[#E_ -e'T^MyjDpjyQ'?t|:甕 vG/?,Ay& \Ƨ>w˰m)TvWWĆWC5k\ۏy ݪ*m}JZHwS«jxpn @YdJ>pqWe۟ܝ\U:y(V&U}nu97J7 ڵDTҏljl1%N^-/^N_sɲ@DXX8[lfA]7hJiyP4)45wpzX޹8%ʈ՗ZSOsZxa@b yøV ;֩31:"9ST|mk߳?u^#wԧWxÞ cXƀO iطOaw7΀,w ~Nw( s.LLd\Iv~RkG>bv~JNK!`TӽH~ <6 Vuʵ:aƫht9Iy]LɌsN^5,Nnv[,WK..{A]װ@sE)'N.O} OBW83v:4xLeQ}0g%+玽MA=&kdܷҫ/).3<4N)|S >i^''Cy"P \(A+9DL`9geXWZ.\X8c@ h}879!Mai+q+Xx~JS65^c)-SjXmX<;g+g|̡ ¦P lAkl0f??$%sXFnc'?eJ+/cB.#"T}z͝hTϡitNDYj݇Gpxpbqr֛M92TE2wntfb^IZ)-V;ҋzL.vkȚy85c>4?K+fȃܞi~JJȏQ#ҋi~Jy6:OIO"*ɢe7ܙӪWxIAk-b o>Ρ&Ӑs2+cGp0?Z. IDATt6X8]a\`ݠnT;BY 8' ,K'N ANe.d^ # `y|'٭`w|*SM>v~1A/^M~)G9>49a-2YGVNWIp17e=D[R8<47n(* A?DA @{ьaD؀]-y!s"§}JڢNIb~paֶS>;3.UJ;1tc;%*&;)r6ILOiuNO X not%b*xliErǽqnJ@Jq_{}q2aMkNA5#gPvz˕'ǥeBHlc[b{|Jdס,v ]e/G>GeHxGB1mo$?eud `\ rrz)} ,"P WJnD}|2ʐEc-ҀdҼ*} ť5.780w-==|VI/Z1|,*" !(Rld7(X )M;}u3䧌W3\8Mg3&FuݔB <¼ڍ `\XnJcP/ΰ|m@yqPTL,Nb:;@^DxqrqjƉA),9dᜓ(EEַۻccpe^"+vg=v[s`> 䧌!K'Osb{Q$?   pݐn j C8y 9|~JcXێI!E[1p+?{O|%l*l$<@ȋ T|- #; @~Jk]+>ħLXw@H jmLGW^/o7\V 0?\ɲjt!%3+l85rɼ@F z;8.5g1`aP92 #y1 S~ic~Z=)DUmC~ʸ8 ⼕w )WvhX&Kp;ؖG> Nz)fPi]"/+etCLfsdy`br!MSX 2윬"ԫ5wsw8ݠzY 1mocf݌񺅇Oi^gc'h:,ƽBex=`{*e#Tƹ_h8 \2 £ •o9/ՖkrPa߼_2+ӰoXD d$E!>?d}*ܙ\2x<*Tg&mxpnG͝a,0zG(_Mڃ+客cJ 0)w^;wqZvܔ󢺻o&+LI]TLf30b2! 4`avpV%vL Y,Qrjɓ]'?TU#"Iz|8XpX4b T_8$8n0 }P4wtD-P>|>þ%? (! pE:BǷOr9#][4f7TV0ր|A/ XYptz;{ w'Oc)a,֢wPJ^l و),NUo/<!Vaiw+?mtfs$?s9/컳-mP%~O\B!9QݨO{,NΠ4D9`2q9&t6:Zge^ h(ԫ%ojZ;'{(m҇An*[bGL!| ?\z$s}i7%669|;bgh[ >>6o} H0K{ -"P W9_Bz1IW:)u "sZipAebY ϴ`x,bwt|k-(Oi-dA9)0ƀM\O"ydu""ʹD_cmVS&g KI~Jc OM1>={7#d 5b8YY"/&N0b6LfbjjF]װB5@Y"c|{PcK&D#4?1{ʎN04^ w6vt6&:nJuTO)O\jJ[ч})O[ARDA/<@T`e'χ+d hA'}6 LJ`]L[dtcǒ_ޥi 4)'<0l IZ\ǧUʉFd$?eW?M̗>?eI0ƅhӫ^~{ Ǚ CljJޛK}̳rowς 0Cb"([B@zv-t( 9E:B~_H4e"EQ\D9HYpbLݪTL?d9yNZힹ7s:'OV_}4Ylwo D߂IfYN6dybhxx$cR '$%Қbk&s[Lo ';jw)~>{܏ 67h 5;*4ov/d7>dv>gغp[GPPPPЃ(@rf04ѵ:e0O9Ӧ[k GW]j$oW]}}LUkaSF2m4 lLxʾdS&"YO(S:)m8)Eu][ı:aS"ZGn#[ydQQ^_saon.ނ9'ʜs2p`0ߠfNNZpr21p8ɛLR4#{{޸Ջ^:t'ٵ5@˧l?rjWrm0xrc|mѓ A]묵Q9)UO|%N9qc}O\Cz AAAA zƍ|%a6MWd Tݼ0]we)d A5kov=OZWS $]uLǕIK׹@@l-{A>50P:eY"qL);b6>` &R؄qGZ2Z"><^*˾qd]& v7q !>2Id9yO0d7yq!dd:eT3ʲBH81%iF{2.{(p[#iJ39 *+Dm.uK۠ [ii}pS9Y\w9*tcK/u?!N=qgvPZP?Gn7ݤ5A Yuu_ZRI!հƗHGMn>չRH62*A5ˤFnD-,`bG> " |Jȧ:'m7o?Җ SVPo] !RP9MZ*뿃6 /zsŨ|_ ~Ug9q=^AH00p2MAHӂ8'Ǔ1ӢTCJ8!Kj8IY2aev\df۷qLS\k9!HuD8|[Fe+ϑ5TћD[X3CQ?tPE:rp7d뱮sj.'O=օéW2S] 2((((H]isT.hN`*+_=>&M_~ޕo0mȻ7,Vt:iDAd~nI&ϦT*k]>*RjϧiתF0(ZpJ&1]>65bf0ϳ{]nJAAG!N*@ -H}5(t:uy7?зp$E#ɈdĬR*ө[Jidyblxwؾz+l#ޓOj⧔wcn_~І|]EPocԺ 5A\T\6yy-K GlˁJW`e( 2((((h$hl>+7%T馜ϧBX5-zHn7QQCF)ΝYvS*m@ʹ}cdB.7pBIO)SҕАg5v:`*^K):x=Zێ@AAo>O~t53f;:llVySqN&!NrM>QPjdV0MFL&Y '#ʺs4#bwپz[W.0zrgZ8 { *dװ9 ^#rSv\l-v<MY?l::8*;s(ÇiN69ν2^z3?eT ^Q/!(((VAAAAAGs=ږna@:Εb䶜{g=ȲtM YHk_Q\QlV%|Jc"]o"R&R6)5hS>hq@rr6q~BBO)zequ |2(ԆnJޅmMGeiFLd^GLnL Fb2,g}BH"& y [N^%2M=T:W)77yÁ=]O9pS!Ct颦WڽL+jsP˾|c;((((ePPPPБc(an.m)ͥO)zʷؼj˹?fcm#p>Ri*Uwvh|JM~]evOeߒF>QOYml]e]eاS U}k[i`ݔ;,[u39PpS|q>:O 8qͯQ"a"!{ܕtYFLIw/d")̔uGc&U(ɒ,ȒDFbܺr_EFSOWQsZMi!6.9 CCyWЭZ`q8OUi*ߦkn,uOvi5|k<:g>;ʠ*ʠS{ *큕:W^`?#f6eLm)dt.M9)qUn,tRD6RWFUy睊kF *ʧ z/ioPF t%Qd[wɼ#NsLg3Ehx2(&hU8)%y)1&co l_h'}$@HkJ]BPvR,+Jpnέa>rx]h]uCݻ{.\_O G{ZP{x Ui!~O.nqil&ۏ>λcGwL)sZsU@΁4"i3+ S"2GidU eT P恚ǤT]4ty̩/='ZJȧXǦsjЍ?ٱRX b1\#2(B8Kf;{58fd&}8=4E#)fS&ńxl:uOhU mIqNdq0w:W.}"Wѣ=Ozsk)1Aeµs(Õ}7ǯz+-b}Qwm1Px;ZTjVv/SsN_ڽL!2((((vePPPPБGLٵ<&[HJUYww*0ST4yRQs-!×-,Ji]Y9M(w). ˾)c wX)E|J!5("=0ΧD o] %]ٷc$A-)v)AKӭS9=?A)^[ֽ)eM4I3 '{>^'IN12IQ05*q&)yN2rdokWy<{/1u&cғOv%^8 rW{7M~v]xC 9ۻǻl\K?,^aVimIg_wS߻oݔɅgz AAAA :2=g^֤*ӝ<('y=cniT׮ƚ2fE Kt}l4aHo|>qJvߖ`ډ)mYl6CJYJᕖ/ͧt@S !ZLa\;pʠQu~kI"=d;8fdy^&)2(gLSƓIAQL(UY$M#4'KR(Bmv]_l&'"zn(<_)fR̍:VXpjx&9|K)#Iܽ]Χ˾Ӌy@tdz98 [*09 >m>my4PVjMT3׹YmnCEHRl^)HbVjd o"R\BecLd|vwʧ%,Cβ|Ee߁O]ZNζoa>2˭sҀI'=z>y's$E idQ8YLeiऔI)y'Ʉl__ۆbB逸 8$AF \OFw'Oj)C)sU>eW?7wA'j}w R>w69ν2[/4ʾ_^ZPPPP](Lns(w?`xk/V`'ʾ'BBQ'fSr3V(ͺ\5Nmt,}HXs[@F [kw+R2m IDAT)RB:DK|J>M*D)fj!zg>ŷ ܔjVn]PAAwNkmlnILR'^#z8E LIwQ0qprf&H)m3Sҝ')A9w:.r&7vҔ{X_7C@e\Oϙ\8jQ=怜fhܵ Tv\ma7ݾt:*5z h-p}~,^&ہo7IpPݶ `7 O{L7*ٸ8L"QÝd:*kf]IϧTZ׎RˀJEU젤reTݿI.ZDef>Qm)d圌4h--<-ws**=ޯBPP>~7oJZ}K"&o҂('NqNdy7YLgL&c& iA9yp"/o4Éf:cU\d&7 |5.g˾Vޡ|36eX(i>]e߉tP "Rp ɠ;s2r:~U8yp2둤)IT{YMF1SU2MO&K)6Nc 'KR̔t'QP%]'/_`E7'#$gXdtqSzDϧtS-~-z,/^T6rS6&{k]?}eq͓Uk3+Փ:˜{zyAAAAAG(TZíFl^->^vN@lm #)M`Y$I}qTjSVlm/EY̧4h V*ztw"VIfٷ4amn7Fim:xN$uG>}b0\T+b)a-e(p}ndﵯq yeq)q%y,!͛'bt:E)ӥYʈ$b'$3p7y{.1u 1':uwS4W)ݷeNH!b|օ#W;Ak4)i)a)՟7K[:@rqC.\K[ '咿lNl8+KK zePPPPБǿ޺r}1/.v[f!DUbm̓J~[X!̆jShKWV)|J@{|>sHݺ=tZَݍ2p_-&RIw2e"B)[ZqET/wkS-Vm؂ؼɜɪNFp2I3D`:2L Ŵ`6WRH$%KRz I90ڹK\v |iNZzT2݅kUr|bsecMKOiGpZ wJN7v>??9νtR?vK /ePPPPБܹs|ӟi`<<ǿbx|l)E}BٔR-='dág_⧌-mK+к|J-&O@)+i+ΧČsX9Pz>k)k -x2֛|쿤v65۾/o2'2s$Ʉ^o@qim1EQPL Џ,Iȳ^1T=n\֕^5Q{fmP^IW1ƷX!csﳝ])n,NSպg4svu=8t:y~69ν9spSoPt+ʠwLm0_/m#pYiW d7Wmi46Uw5u ),)tsȧQ\ͣ9/jXu Zk[vB {L1˧6̎y&u@QOY7igV4txp)~`t;d榤;H,z=,G&)JJfedZT]HDqRMJ&{;l_¶[73cc(#--']kS.TOLk}/qSBceeÂJh7]Lph-mS'ܕeItGePPPP;"W 3piN:Gz?m62!\VmΧolvL"db|JgsΛ*_rQ>iRQ}5h|JU흵^>DH?{R S5adUMU߇0 twݼm>%J|J9āJq* /u}H>Ͻ=N5pҩ{_*%mԝ9Yf\I!MN`VΪHFqBM&2B[\̭ؿvM(& }cfs| [it.5;~/yiQʜnaQ=&w|;agc)+@eovVϽ:YsΠ.lU'pç9wL # 2((((mԧy0G5\aasܔs aY_wEPohL;Sz`QζQTGmd8 ElНOM]7ѩܖ"2n*S T*Zp{~+b)/`+^k吤'EooC>S5yɍq>"39Qe͛Iӌ4ύ{2% ")M13bRtkedI5d\ĭ_lw w?c&ڀ Vvn.'W:*)ݫ/ڠ:ϻkJ_Gn#8 6:Ys?xyi AAAA z[{>o}u`]T*mܦ·sko3jTV>ZC]TuqX`i]i;LV%^F%(|JG(Vj P [?M*^9*+ʧI(k|P_*ɟ" c"7ݼ{6߀)6]{4#r$Ȳ$QetV2-gL 㜜f6o")I4NҜ^F1B)qEv._d|*j4y&h:m *r/T%{ƥT[ *ޮ|F:8NR6=u՚n!wK9ΧQJr$AjtN^`&E#o҇\2\Qr7%@T5Yp (fMנAB,)72P '[E(~Χte!2(((RAAAAAAs&W;9W.߰NTٌ P(v;H;P)|3aY: C5},-Y{wTe-(BhԬ-9W ڰSt["B;xi3=nlS /_6s2eE$QQ)%*8' q1:JqFȲ|o;q'FdNDicLKW=e:2+h(6]]Iwb&)gwٿqkپrɍўN5&M:nʾvOִ"{:|%mͲo3KAۛO)Zi]r|= {[緪w"rg z$^AAAAAA:L:,l;>gس&'uٲ\a'+Piotc*'w>\I{wP JsHc_ug?W麡oj4'=.@× > z=2HVdDd52+0?%4Lr,'sGf|[$I5ɐI"J ʹ) AEdIFKw*%jZ0fU7y[7Q>0 +a븿=|M_>Ɵb2g+ap [sKG-|o=_܍ơ?l5p/oG[mS˧Vy?m.];wt{I=qN:z8:03GɧlSx)ecs~*m QyϪ<+v2}ݽ  ZKr`{~_7giU-}'OYu|JRc:bnaO T{jdc\vU>eiw]mI;U>J&]2+u@nݺOY9/,s`BYDOx0XZm]o/i8d+BE1qb˺88MdDBh[YY2ML f.tlIwddQP%{7s2;6oRlJ{ugg)+܊ uPUb8wQVSuk]ڎfy{_ԭ}!IV@+4.C]s/ۑO9xcwdAAAAAFP-՝Ι\<8ůcAT.[?S"PZ5 iJ kS!&WYйPL56.A~708ݓ2bp2I24 Y}^<|Hנ3!+ʒkJtiG;KRӥ;I߾ε+\ՋLoK߹ #}w)kԚML.t c1 ,w/:*6c (^N>Jp re.}Ptw(ʠ99_;WZUrtP?eG>@e[;cOΧ;Z%$@t d /tU-s(fQF"k ͪԸ|JD;IúuBԆij y^Ɩ-ٓB@S DiDqBiJŔ~^'D2 YjqBR*Op9QŴ`0-<+fUȀO'2(A*ll_K^ۆiA𣤏i( ʾOr:rMPV}+˾GNݗw@xMwb.z"vcSޮ%= 2((((;3JCW_C`6Z H/wOo|5BW{Q)E pz Cl`ώow iwkp'v̖IܟɎ<܃~>eYM;Bbf!+5؝KXas9*…xk߀*NiR&ڼdI"yAH=8=CkME e2eiQʢ(L\"˥ -NȳY11kt_A1&g,U\" q;rU4*LqRu`auwRM .P.Oua^pA\>>S}o7rPQ@ٳg߱Uާ71Hr!9FaNJʩcH[OПvs]fH5<O AkXo[E : yuWN -H|JV[jE̢O):9;yj;*}y/}__qN2#lT$J$2#M`0ɳB~L IDATBF(۬IkҚXJƓ ,z`AJ=+d9-Ҍ^)Ehwkپrk޼.&,#~)D7/uˬO:Qruz?::]Œ!nm歷{XrCNt$˾O=qyS͹^ZPPP(pE:Ͽ9~^5eBPA[ |J*[DžL\V]b6&WHG n@"9ݔ@d T5)+'u/`O]ٷN2\ G$gi`4z88a!if$IJYnݒ}}(4>$ R59+&=9-&)R*E4 6Ҕ^i f:1ھK\v ޷ѹ4*6Ɂ\ >d~m-7%T׹un$IW|Q(SSiNβzyAAAA z@ŧ>)hr&W 4̒ɹ|J }'et鶶3ev+]m1^hY9)oW(5)y]n@GTyC) ^z}T eQh2L"r)9==&(-ҕkRJŔIQPc1iA92PDtNɔb%`6eޭkX89q ӂ{[2TU98>*[nJ "ұJ`@u֮ *Fw6Apxq'Wm]_|ʧr777~ٷ+ 5Se(Ae?g_ll@OfLh)qL"Yf=}zN(\PBلɄ PN(UJBK{A93fv^be[ѣ}d>p]zeʾsޮqeߘݔ퓨>Gqr!'*t>,lpH3X^8b K{-]^:ǹ|3NE8Py8{+ ePPP)grK,RnIaA~7 mv G*AvJ3:xVS 5^lv6l>k|JaG6xpn$eFK]OWj!\^|"y]*}__y6AoHRBe Qc4C)$5pr7Prei\hLgS&=gc aN-/^I}gʾgw^q4 ,T>xAg9%Oq:>ͩ/‚C@3ys/w|Ըl9Z"m XALhPVeբzhU!tЂR0*nmG}ۣ~9] &o7˾k麆k >|Jm; ͺvN&ڒs%|R3DN@oJ&B'&s2HӜDJY`0d\%E1aRLL&> {ŔRP%ݥ*(u-,gev^yrcO=clвL  Uw,o5I{/4:)oibZ98-ZY|=hR[jg3NNs[ ΟAAAAAFPǺs&B/Q) aJv[VٷԎM0ٕB[7=_-(6'Q UŠRԛcKUe-CaGݴ]c59W̧˨`rnS_ʧ獛7t~66QYYDƈ$8A1qb$YNyΠ?#tZ0 HY)SM9wʺK-B+J+vw ){K4h>eϫS.\`= _d@ޮ|8JHओn /]K:Vr'pm-=4|7x뭄_PtePPP}{)grӟcCtk \P?ۨ.-DS*RS2-nJSm]K@]_L,N* }a]գޮ[z>0t;S>6:7[I)_|?v^lc(A✓1If9i#{ C8&{4`p23.&L&c3NdiIULD/Vb}K_^h|S݋{r].ݹMnA]|rʓO[AAAAAePPP}&^浛dqlt-Es?S 2BW.9h3_mL;wS8{RjSʩYJaȧ͹-!q UkS==6ymag :B}_慯ǘ)*N IQҴyoJC!)2` (gɘxx:a23ER%35eV;ZKq H1L$INN\&+)KԹA]>R:-K+3%y>ů?G9dd45p265ie?d8d8IY4P&kr<3OFL&cU(mgiYX@)("Yi^jZJǪR+Qp8zcH40p`X-(fy# Gh.Rȹqk//X֒\i7o=J/>W@)xeAAAAPAAAA?#?r߀I{Iͤ].Һ&&NEQȻΧݖ]*@󳐒Rk;_.̧l};G|Jm7j ;f" JIH2dMqM {ʑr`dhe}ķMd컑O-Q-KSms :(QSj:A%gs;ِFwQk:*PֶnOIW{WM"yNx P#io68$Ci#{dpp͍M,GA5Y%mqMf3$DQe9gH"ԌUWE,0`nuSPv#ַxzNō|)hǼT[t=KlepcYp[8ԩsPCz+ AAAAPAAAAgΜ9[}-RmC[ƺ)ȧNF@۳R:o..kΧ:d#Rc+kcYuަZ *GwގԶ)3rQ>6rKSnEuE7A˾\Aw~w~'Fd=H3N{=2[}lsBJk`4g4hiQP3&K,_ciX%CwVhMm2)Ѫs*UPZi["!!NAZnL!"ZQuYʥݘ5)4d"S=7&䒕.pWFk`)](['2(((h ŧ>)˙\G_ʒJZ$O41ϧ2*u=G]m!j:3VXxhJŕ@k*l};瑬ƹ?E ih\>W8li^͢kZT]%A>& C!>yo@o0q;Aׯ ?g4g<1H#J,˙vM!_sRP@I'k{nJq^nLk]@vHܔ\TZXG1;Vjz] ݞd( Z(=9+/[wDU;%ȧ $2E)-vRU]>u7xNG9,K`Wn)MH8زoQouo"4JC *|j"G -S?:W]Opw+0?%2:P>_?xV;svspa!! d>y`ɱc9vW]&G{ߣNgLNa:pRW~hm ĬJ#x%Bg+6;-+>V[oTv?(ɧ\8Jo\Zoa~u$ɠ;'O7~:U 2(((.ٳgu|?zˠ4PQh &iPHeH֎Iam>j} W%J+ۑn〥ʾAO)6pTƪ9L Ѐ G N8P}z]Y^M2Ko]?s0@ԔuÍM;q$Aa\91hbZPf,)`::cVV$k8'k&]ɷY\ k8t>|ng^#e)Wswhm] N'* ]k}_S~/|ʠ OPݥzs&я~ jR D#xDhiAb;RZḩ˾x TvO)<oD)?*8)hSZVRD *1n RzSv9yRs֛|+J&"7p22pcNpC;vܔsۯdx]4MpfNrqЛN E|Md9+o\JfnXs݃< -ضbmH Ͳg9;HR$9 b-˵A7`AN7=&w[ʱAA#?򓟼)<@tAϙ\G?/V޶[9w}!JM)C)s˾J(礴JަaHm[FTc-xzQgQ$Qhlcp fݲP}wo`veQ!"ω&ǎ?ģ?J(-ͦﱻlJ92kI0@R ,|Ie^X@TK8XVܽMWၲ![:9wSaʾ$lȕݾa)+_z")`ASgCSwPϧ?6O/((UAAAAw9{|\j[hQʹ|J)\w;D @gldt_kAGp]-,Χ8.ϧn509j_J%}!q+A 5[gc7F_{}  zNnl28ƉCe).K{r`62N`ҁ-r[f"$@ƲDQUo&T tYe vH1y;%f*oCtnH;m}ÒAe[Q[ސ8Zm9< p2h] wtv>>P5*ʠ@!g~_×"WX'4e(USJAJZڪgg?/ )pIp'VUYy3/Džb0O)[r)mR[_헂WěٛCr ڠr3<*}v-~3b]oWN< YNyl#<#?Ɣ-O;nKQLM fh, nb,Rrf]*QΔq%Z)T93q!N$ kpMN5 [0S{@v[U;'W}seߋ$O) ʾ׃k)'^'~b_ ?)ʠ#T;g2ss/!KM,AmDi%q`P dTC6Φ43 2*)=q=jeϳ=]7.R V(x\/e߈&xv7D=.@ *]t1O87n/;s~32w|(e4'~=ʱ Pfeh-)LZ0)=$1YCetͼ̙3Uϧ?i=0 2(((s0yx_52SwAcĔmߺێgݣ$;qYnun$uc I@x؞5c ؖxb36cwl/>>@%Z`V> H*^- 7nč̈|TfV}?:̌Y]s)̶BT>e;j'GR&VF< !0=^ŚB F\vq:кPNT (\Q_P5œxem-^frڍ.3+/=}7^yEٗ3O]09Ͽq0qŸ]˱K! Ut^1Uj2OL Xh۷u'BU`^ @4BPo?%\;b,E;IN|a7'mкYd2ħ}EcmW6ғdcnN&%x 9 9۶}"!dCAI!s&{˯{+𵀌*c1ɞ4Rml>5rP5zl>yxb7" ZmxR~RAmߦ 3-*ĂQks.Z0:h&y `)/kkU1Ӣ 92]M |$CpƅOT0z 1 ;/e]vD=ceek+++˨:mCJĤ c9 IUJ0VPCkU0Et0*dFRZv4a6%02V4hΫhG{QeHF|JOVmr[(ݑ>N&p5XY!i7?~ ! JB vn=e۸mVmm prC|hpԐZB @$?SJ(4lIP+H1=65ߏ[gPF՗V<96Sə^:BLEф*ؓȇ:iخQT6>Q IDAT7vV3PۈUT~Q`n혺R\k/.ߵSXY[ VV ^ZFL|IfxMTJA$(kfB 0> uP )##!<ϋ? \ݾ)z.Z[~OJǢngr䖻?J}ˆM=wf Oz6-;-YۅCq033}|IٔPPBHad[nėK8:jq;6eO(C*HV~FZ'9V%*TER3j'9)SM)M;ɧf|JHN5ScʎʬsԔՑoW6z/?}ל4rjigNv7pz~n{5.|7DÅ X^Y u~k5hF;HWJ~s'a?pCR2%'gʉhn}d_kdeKꦕ[wO̜T|FVTRNQĊJWR2٠$>ɍn;6j6JFqiJ ɧT~}JI 1HSJi@{ZÓu4ʭ DIF[dF*O)[}|Jk5/vqy3Q4i7\cKMrHڹ[\8plbŸ={ .ߵ_9%"ס*4 m۾o?*JRҝ5ƴkm 9H2+҅h𪫀.jT[Q٩VT6yŅgwiKw1oDemn"'S뿱َ#>CСC BHPPBH8vs&7g܄ߟ{(UA4n@;HGGU2c>ɰھ0R|Jھ `K!5q۷D> m(tRI+ IFUH"8FEv:*DHWHJؼ8V:!:"i7>8޿0 ΟsBދ\]v^%p++5~:O}ںɍ ~>Q˷NdNn'חBH()Qh! Tr=Eƙ$%`De)KUU +HoOYحm7{R;A[qϫ`D_X$߅C6 |ʣG&!d䡠$mo7_=F)QKu2 ҴvKlt)!i@h-m۷*8:B̽Si2ɱԑm)M7㔺O&kq)݊KjML}'@7?8Uo'/O9{qɕ wp9 }hn$d~P~}7DDyjMTYR< T>+%5^*#}+~JԐ7t6^Ƶ 9BDic@d`ھ'%N9%o&X-W,`*} Bfv;v!#к㑂B"pq̙$.xSF;1[FC8om'&iζFF"j֩sQ={v;vzCR(:" `od x:&IťY%U蓯_YΙl;/^k_? /ayZ _CXCFLfMVеvTI&m;bbHHHO҃ܶ6Rv[b2u 兡N}Huםd[hzu͞#E6gBADr(Ny>?pa]ɧ>%}=ٳx_fBFVPBH9[ƙpӵ'!Jw'M>e()D!o[yiXR*Su{i۾0CuR`4P ړPQd i'<(M;9t=] gG՗PЩ})CR4IRF` #`ͧVp:Ֆ)#ٮ܉-dQ5{^=8w^~E.##נk5:P0͔`}5ʋpLHgBBD󀪑4019> ojNZ͇۹)",_Hx [X@[7h![ҧE9I6 12jPPBH0gr8w GHcڡPҶXGBѩ)eI-DLIe6R#2m*XXhFUV>jTa*Peھ,:;wʂx+*EW8R|P OL LƮKX8$ϟG`mzmjڹנUhZ}iVH[YB^|)IX9>R0Rt^MٍhS"͔-{VӾ[r22NF9I*n7) !%!9'S7FEI%vZ*cqi4ٔ3{*~`l>Q#4BL>f$P:D:RChHa!U49"JDOi$ɎPQǶ9v[/'ՔvHS34zSXա<|,޿_ J5F=~}c|z8fU5eS)Y~="6|I*r4KS:Zw@q\\k馚) :M5$C|2rzl2WSLG\t͠O33I>ǙOI (( ! o3߷g3PZ"FjS(jE#7!Lw+IJIewa])!BBBh0r3Q+v*/=21I۶V a\iiaEV9&m/jhh(9JS= GT۾Qپ۶~{8e&sbg1ըs X:p}@lBZɐ/ߕY:ӺLieFNۿ0tDSXVT2;}mENe7/ ۔߉,d!!?ʉݤ\|O#fffpȑa !%!9ɯ|ɧL{")MɑT@[٨m"-M˧4FȖxȝ@Iq\hĈnw406HF]J@@E6R \+,ƶoĢRkWqm+ӏWm#&ya@Uyky] xcvs'*ڰ.}E+*] HD;tOL M>e㋮۾u MOrF)M6(( !n;7ȍů~QSsu2E"V KFQBF $noھ@!/XK9l8VXѰ퓴}9緬<4m2ۙ?S eƮVCGiMEOk]o ";Χl;zm,dedx N('I?Vo !%!͙d+hoy3S8Oa\>H- HB!oPBHg8?D@UE *EMi!P!A5N[i6RuBA$7RF&/2U5)|JWv @")m IUQdR)4y>JQT|v]_8kɧLT۷98aN~>~ïk?lHf쮚C&*~'^!nN'Cvnoזq~ a7ٴhgCmGȭ̕=`ۅ{_$ ̧$ ƜIl.~-o/"hn>֑|"z2j6*%V2*tO)mPLCL 6pC S;FxJ"e,QVhO .)@$*(ҊJU\mf?ہ"I>2|F"*73 daUSy:Lu9b EvN92gl.Z/9:};ٶv2]otMBVḨ$ u}!)`EO2pJmv #=)}Mt6R@B& >-^<>1Tr[u=р#9o^/k+lxT߸GpLnJIŢh5e|ԭ;+xx@Lvp4Jd MGԧͻ.ޢUS*׃C!{}-*b Na= c/;\4s_y|e>zKzȳgA JBȖf̙ }8T>a2"bj:RڧH(Gh# 4Cs"C+)M= I 0|Z'CtH#Z-j/Ф[@9qSj@ I˷6sTS{E$mZSJGHS%۾ !`,~o~+I5a$#کBԀVVhd`S"ɧۻ|J!B3[)em+#$Cz@<=\ /VMEUFBU\x:h lɩ>S" b)l>S<"[g ق} 4+*2mU[| ITBiVTw)qZ\6:ro\ -eY ¡CDÇ}jM [ ![cǎ1gએזU;# UB$myLv%\Rl}H6&5*R@FӱVr)松-X ٢sGd'Lȶ;m|w84__7-}=OrZ?++#?Tw׻(mђ/lU}_Zm M /sxZ/^oߵ[`N;!d$l ܜI^|OTRB9t)cἙ4P:"2iOġnfs&e&qS;vNMUh3;z2%mDU )** OJX3l6jgVS67^ݶDTF{NBt&)@4Iy+ؾT 6s>éG}7!+(( !LNKʸiJIH}k XhԱ؋eJ* m볊ZBq!T)b *C %u46i瞨V @=E"e|^< gMSV&՗RRՔhu$%LũՓW7=WyB6bѓyaqgQE)T5 EORFyHYi^[ތ2\_Xq.A5eZ̫,$'u:rŶ}HY,,,-pH'XIySsmTN>Qa$*͘OtLme-vmRt{OPQTFt:SB 5*@2uG*TVTzRƕi\9i.YB=wXwEeM۷RDOSOʧ짤SOvh\VPSAmBF۾VĶLjd`hVuWX|͞M(/*m}ʆs8*༜ B9Ih033#G09{oۏ5{웑HѾZI>%C@HiھqiZ<˧BʩNͧTa]C(MUe$3mVe(%*R&R%ھAm۷vPG"z깞SOO y}M$Z'7VSZ*ݾ=ۑ-(JMc۷|EeYjʼk(=H|J]wVqEer26 dd\[} #G^>%۾ !E$$̙$o~/<TĢ@~>L$"f-ƭS a)ܩki26p'RQM۷%+<\}T4RTP+x' t˷xhbccX}Yhl2LTm=\Grktdt!2?cG}ȑ115iv}+6 K#Ԕc޷i["¦Po*ެeʋZ-ZPEHLxۺ :$)/㕕'nʓ ۽{jG.ٹq 0KBH;(( !CͱM6ğ+*+(Qi&dG-JC+Sbں}[JGiis)FUB$Er 'ʔ~+63f]Jv{[ŀoaCQ%dRjhg%c+*k&(mGiձ8Q)P%e,(7;T۪:[>v.2PPvG6? !.9dO{K}&%$J+}fY f22i*(#2eR HȜǓc|ʬtK:z"esne`|݊'$BeU;SPhXP5>:ZWPUTv#'JFtӎVŮAP9Y6xc딓d$ tIɃ2tج9d885ğH+*AWT9v{iUEZ);6TG7#Ss'!_T'U}>!L*VXJi)rz!*۬TZC~UXeݷ}˧́㨊= T!tr  JBI2̜__aq$۾t[-L$LE2)]Y xtlqA<dٶJ~B<K'֗J?9)mRۋʕp=SDeSZX.@T:q;w$%jJ JIolwf-%m*Mb :jI2PPSB JBȐI2*$N~{"mIWSҺz1J|69ҮդiqSjQ$BS-<,BeFDǢҬkvi@T6;E$SO**uZkTyݮ Y**8\ƼÓr.Q=|ʲUSd?l8ḑ$PPB s&(3'D4ổ)mVZÓR2t[cYi mvL>tq۹@=anR%KYA.+=X,L%XD7ȧn$) zPPB6N#Ӌ#9׳R"!2H>eܾݯmeL2Ϧl@F$e62~Bi !z湆sQ)TS7YɡMwȾ۾d'?mZ^Eo%m^7q3A۾%( t][ Y \I2PPn<"d@AI0lV9q |J]>oDq5mNSf')pnvéN[@vvt>sRѭlA*JYe"m.~ҥn:ͫnh$@9I6l (( !}V"@)O\ZT&Uc:_VTJ+iOḩ2S:L6bґVͳ/FWV#Q٦P˶9Y Aᆩmq+L]o.;޶ dSm'X||cEeʎ)K}5 YIUzod@A9Xpql&d3BAI̙$[jJ }3y}FZs$m[mN bRP//K++CJFQQAW ~WS-EB 1Yp̆-%WZQY VncZr5!Q :5$LPP̧$dsBAI9̙$[S }|ʬts#l[x9>鵤SS~ge /"P 蓨lu@u"(*CSՖM%؟B2FR*KbkΣՔeek)YŘ-=dAA9\;vm߄l"(( !=9$|gODHn"ҕZO5IDF&yn>e,"%2m{[vor|-RXJ(/=bGQo J+ޠ)ʬ붚ͿFT-ݭe(Yrl:((Fy$l& s& 1^|} ՔcB3QgT:2O)YОLVKB$HOiH{|):^^[O]s-Pε6iu tO3KhʬWr2XݜUT!Kݛ[__^Yd !#|JBF JBHW0gb}) S۾m5e|ʸ"|J#&|fCvdNkw6W^j|ʺ;6ȝx{P6oLwՈ]ʎZ-ީ!C^}t G*`RVW2Kcd+@A9p8'! %!cBHyl5h*DTJI 2ym޶y>e:@C{U̧T;hΥD۷Z5@5eYm6v9եNn&(PZ;ӧYd(6ڳ9ۼ1T| w&([!J9I6=N!d$9t"/M_Ξ'?2`ډ#,\EY&KR2;W5YՔhQ~wQ5D힞C1*BbBVrEt9;{{! т0ۅ27<kީL}oPږLO$Un^e|JGgU6B +9ɧzQQ)-; Yzmmȳ=DBOmgؾ{)9lZwr}yyyNO+Crd+AA9d۾3 ! %!-̙$ubw8ed`t[Mi(SfmBɔt8S?O2)>.ԋ^}+h=jNIN}w!*RqcyھK\۾ɷ>shN}۽|z'( ?+횄 3 n(( !-?lVT XݐnO}"25@wi2u#P u?@~ޡRB["Z}z]MYtBҭV76xXjӾ 5E&]z)(t/(rɶ}B JBH. E}bX"Qida>1UT6ϧS"n`<eA8VPn`딓dBA`>%!%!2ubwnFhPx2r$VkH t>4vrĤ9_m>+)U/ou:ȧ-+;q4s>WEZ JzܸemBV0bxP.xņaYܼ{CAI?ȄoO3=@L h{ݬͧQY͟˧12"4RX#X\T !PS>TjVYQYaBS|~-Wײe JW[.@УwۏμcIY.){RQ)Zlؗj̶$pAl)[X/&]@+Z<'uPPnpql&d#$d œIBFE'܈/ Lc "ayqer%LS՗ھmFeOi,M>e`98^*2r]w'U^M 5vN 6tᴣjA}߬cRhB[ sPP8vs& $|JW`i9( h K4h"*cYHZo+J ,(hto*? J->}+JsȧXPkw[)wRxEz}F9IH ʭ۾ l3Im״}g)]UN^e62 mߞB`Zj@ #'W,x*ZizJm0hQe>eGՔ-+]ׂo|N}*B,kEe:Z΁Qr JB69 &9_9#M+AyU\  Jba>%!Ms& !wG>; OȖmc,!TKI9m !PU>ZSʙCTJdu8HX zDeLjxۺϟR Bbus2Sdn2(t/ da>%!Ms& !.sggOĘVQ8I۷ DT̠3["`,Jھ䢓jʺ `G򴪮k\w^Jc0Ri@ZCz=O/i YِvsN/굤YjN?$+(]GWz>! JҊl7&#02|䳳ϟ27QJDP;̧t2*St ھ@44YEe{H)ev@?#&ʶs +(MHgPP"Π$dD?|Ny}yqe>Qt)[Sʨ%҃N>^V5yWՔZy})9Hi*WBm.TQ^u5crٮJ-SEeڹ{[  JRkb q9zbVT J+*U,O/N݈?  $eL 2QomKk)(sݫעb0ܝLVMxWaޯ|mB,x#8ǍXď~^sI>emǤm[O__D:Ք 0_ux*]_n\#^ucy)-Z ^US:ʝ]=b9RW:Fyfȏ"dCAI:رcr׉99LUX:UTZgМRܩN@LT2u_[i_ͅ[*P StOi m TSF&e]qL6U%Z !Ƙ6DLe%ӷ4\ t %v JBFh{1)- FH:Vm^| T *|M9솢YVhmՒ)$oj.ߩ.Bبɢ2څOө)(  J v P%!}O_$*n m[XXÇL !$an~;{X)q%-*J[ITWji«@NlK+CA@֓\a9RհSk3HS%ЙY3Co~=Ɔ)(  JK?Slu(( =0_4**1LMM㢋v-56ÜIB017NDe|Jteꘝ۾O߽ȧL_w]TڶRkE~2w?%Ο}{s$;((I?S8lU(( VNNNNall 8m;v\]vwWas&BNwgOc}ae։T&vHї0d&S [KJ``mߥEeՔJSfex9nS15 D[q8!+h<_zO܆$y^d+BAIHy"Zo߁/{\K.z˸;3I q9zbt5ߏ%JO}KEBJa^֑oBT6]A2Ք@u\1xw];))!0&_U.t%7̧$[ JBzȃ>w1=8q廱}N*LMMc}} ++X]]FְgE,' )Qic3m|lwelF~GaLmDr۽|6k bS!1&<== $@AIHPPd+BAIHgض"]+KwA)XN"|]? !wݟ37Ərlj@[`}XAHZْ;}wG?;kSG;$m'w@V[RFT5jJl!*6kM:2?Ui1DL頜 }Xj҅$d+@AIHx׻ރe]+܇ݻ_ϫ`y/`ia,'O/} 1sggO*De^5%x*ƧvlwO*׾[?+MJR*6;WW|@+V:Fyפ$;(( q)M6#tɭ>-LMMa׮kkjp+*5L+x'Lcrl<Jˊ;ݼ{\?+*͋V h@iS6lfj)Vyk'Wc^=nHZS]WMBٜI+*ggg)*HCAIH<z/.r\ww᪫^z,//! FN5u~ڠ/Bz߾">1m|JQFZ3JamV[Nz>Ο1!>3338|pO9;;}-ބ䡇!\q^uߏK. /^zxN?_䤏0,.~{ЗE!}en~?M)ݏ7m;7ZzVt2wMU+X++V2A+M3( \ӄ7n_hBwMHwś ;|Ç)%!%x衇˿!̼{*IӺo[9Џ۾74+#sssVZcXmxULmxgH-IEeTA>e7=.鴧hSZGi*HJnDvn?pn?pC_AAIHwPPQd$ >_|q5/>_|TJjֱWM9Cqxo7!>!d ũŔ(')M8Q | ,*[~USJ!ۊJ?h-(+ҋRr_oU.t%%l"nc7j(( ){+8{^ų>a}} kkX__Cz I!>_2B2|ʯyQe0rzTR5ahd[f;·{gBTRn94Sӂ o9hP+8Y((  J2,,,L7)ɰBAIH_³Ͼm}X^ !V)%n&|>mB ~gAǶf{z|Wu@+TD2|%cw}υ$ )ɰCAI6-ǎo~ߏ3g΢Zùs/ci9<5y\N#*KVSVJ\% ZgPA@+tn7̕zl %!AAI6ǎ۾OI J)q؏9:_'ݷ" pছ(# !_|swpX D)&Š'n3O Qdi2h?$ YMh_}qr| %!AAI6 n>%۾ɰ@AI6-7CV_}!en~wn/RSnމVXB a;E|1j09UvyCz^+(7WUMPPd|J2LPPMe2܈ޱ覒ՔZP?ﻼ^1'#R J ,^$(7r:wQ((  JYqvf7d(qs1z%%!.,\*r-[I 0Ҫж*Žڦ[ln~_ JBlvOI %JR^)e2/⣟ũEH\U*o93´)4 6;tHdnn$[SAAAI6%n:$!l.3IT>MI9 ⯐<})Q4Vm*ᐫ9 PPd+ JRNBsgg!.ށj-߃T;ne6ٸO:BM> t%ي0ldqQI![}^zbV>B 8#[njmmE~]󖛆b2w((  JUq۾w l:0 !d 17OLMbr|PZCiJĘނy~ ,{څ< JBluOI %!B6 s? a.PZ}H ʂq#)_a('s$PPB!dq׉9|>U^Rzۣ:^}x2SAYRz{ݛELZ((  JB0 JB!lZ/^AJ)e۶zZ][ҥT5(C6PP4|J+((PaIɓ'133oBR/cƣ/\@]me7ҧ[l@+Tnk F JB,,,|Jd(p5M=iXx7ۋ80seB!0)gggo J2P\ "[>pB!7\g/SϢ{!]LZ"V )(*o?p_w !BXT?~uOeDeB^TU? [eYZUTYrD`[B!333#GՔyoPPqIՓe]ȶBH3~AT<)OCNS9ٌ^{wTA(2oe4{wWD!ޑOymx l$e[BH7|M7o;~mߝPrت/{99+AlIB!dq)M,d`4+v'}b$!~pǡqǡ/㧾nDe'rSzUWফwCo,/!Bͧt۾ۇÇȀ$CEeL&B!~p-oDW!*Wh_+%HV=Lަq !2ضo+*=|- %*ʴw3BFaE=_8SOΜxu>tJhɶ++ [V\nËxǵ̕$B)Z:r۾7!d(a$!Qڟx}1U_Gybd*(͠RG-NfxǛG?;`G/?\n{B!lǙO $# ' !VTڡ/?*^|'xVL-`lMedr_;e__6=߾$B69r$Oy3,CAIFlV%[B!d~߽KXמfi(R)VLLռ%j@)JA<|xЧFJ c ?ܷo_,ܷo_ôo~!2 ؟Ve7VٟR- bJZ@ SZ Md$P)%4Av8zz- )9ڟ(˾-Y sgwYMY dM4ӳ2nԗ} zoa2ŬIy8ܡv7cÆ !P!=={c׮iGtu ƍB%$'#, W'Ȃra74߸ʬI{شi0@a ^E{ -4YM}ٷ)JZ׬Ir*-(hZp\4)q\'(ط#,$ʒnn]w2@xDjTCe cϞx@`>JΒnZY{i7̑h(K`D}ƍqCi2K!\&?%ΚMٟ'P(o}:O cx$e3(XZ8 T}&`^7 q`l4pJL@ٲoZ@ X ɳ?%J?%D`F$=#G@qy;i }Pdކ`gq2{߾ e%R7d@9錍cӦf%g(̠ "I+Swj@?%y&P8q?3X,@~I(([ @.-Jb/?%Yg7@ 'uCedP-Fq`l4p )KZ8 ՗}בP@h$0riJR%P8 ̦=#G@y zz= '!ST(j{.a9bJM((qX S,~PO^qh([ @bJǮ]$oqn IPi7 @A@G{l86 =rN(˺?% P+vi?%eJsn O Bc d)/ \*S0WxTzoCQ}}i (rȾ@ cϞNS0% g; U{GS}#aNGtu ٟ0 Wzz̜ 9aIO @ [T9`i7*O z5qv?eO{ he7ƦMSL IDATifi7H([ PP%@FY pV}ٷ)di7O P<%@Y 0س3g-@y cjÖvQ}sar)8@?B+VZ@ 'e>S.vɹ0h%@J#=cJ+WZ@ 'm`\5gO<>g]ǎc-[mmmQ3t>1sMۓ8L9<^z41KB.G~%O^q1_d{w׿v7ǿ8u?O4/ڶw5,b\s4Xf0@,_^_+V2LN{`%@p'Gq 59S͜ ʑ#x%W"u-_^g~idΠܳ\A̠(/}غu+{f({k͚UW0V>p//yD qh_o֭=Qَk֜z)XdD-[V׼,L΃8 x~ زe|LgĦm6Ԛ5'++ĪUB%ŲlYk^S{9+Id-I2ٞ%9W+A-?UN=Xeˆ5X<׿.N$Eh1_y&R&eZu"W|/V:p`^-seI>رNH@ ЂF"e:K=rqߋ+x!9G :;sbٲ|MӎbϞJ{&P/|כ{bL\D\q qߍ .H{80NgPtu&IhprgȾߏo}(JQ.T*GLۓ8|㗢p57vD?{{xx?ޟЙǞ+ۇs(ۇGNu97gzl#'i9_d{w׿v7wX_8 fP?&bq#y?ڵߏ+=ZD[P\y*Vm&qJ{reX=k^l bʣiZt0V>+W&h I&3-^{e+^7o LtXtpܲ쩗h[=\x/cǺɃ QfPpo{ۦQ8+W׽Ÿk_/ijk;˗UҥiIA $?-x3(99y&eDk̠p="^|q9B::NF[hoq&v3(x=$@J 3xO(Gy{[?6mmcғ16 RH%Ls{_گ>{_qye=]7lُ)8˖˖i%`%3zgb?nEr,8rcG\G\<yS.X$'j42<ؾ]Y=3sg,nb?رU10pq?f~42mɒcKcr`(?@mBF`Nx?n3 A)P'Pq8qk~<2\>5&O5.P$P0/}gb߾er&?WW]m+OF|*::>2(P1r۶ k_'H`;c3ʙx 3(;'Nt]odK79@('J*P~7L>9*wR}X'1-]z$V +1::~ZV{n,Y _iH3g% o?/]x7iʩfPNok^~8y5qy0_mm?rD˧͊iيfPƄ'>۶[nNEٷnK3(>ԩԩ`:(OD{GbErFʭ[WzI% ˿|w<9J3((cʥqq18(VG[KQ*rDLlmW"N@ @{4RNe6㯾zh|\]}<92_~WlfI7@4}(('FȤϯ|m nNg*Tzutp'P7:Pnݺ6ne8 S% ξxgAӝrGih (9q@9\~#֭k+_y'%OxC¤cʓ'ұ(^1>,PNo2coTҗ,(D=_@=((>7b8N*N~} 1G?!p򱉏 iʭ[>`I7@Q$']w=O?P!P-PǩSH33%c1SP((lY_%E"P4k>leAF:um !YtJ/FD)1SP((ߒn"(h:( (=}z$T uGT}lrP((n]%E%PtO=u(v~̒r@9#rhXWT:09b8Ywܲem|K|hO{kY\>}$d?J1>S|D<mm#rhh]  Y(Q,>[͚(:Լk.ݻ=\x."Wם%$KW8Ar(ںumYo2aGK g?v{Q1<(;z˴f.<&K>n$@(Ȍ~6z{([rk8#}lnq>_+P3P5 @@ @t|gt('FHrw@9uxc6OEi IDAT(gzV .&8pٸGFCeT!R\xG<"P n>rsC5S I/1R(l nyYL"P;#˾xO&(c1B ~DDQ2-PNc*zqLE F}?<*#JrN}uI<3K1>JƄezr9s~4rf"PkoRL+Pd&1>ՃdlJr.՗s_g97s"PP7L1R(?OsDgM .?] Yn' g;.P ?vY ƁF}}$rb(~.ZG?&>&dߍ]>Oo g;.P ?e:˹X¹瞇ⳟ}8( e+ʹ.ZϹufpx,+qJrcgs Xº瞇{F ;PN||"Es<01S7{ Ǿ,@ @t=qJKN"P}~$,2ɸ5ӱ F?b{j5KA 创oiOb8p0z{i^mz;1{U|= F%\uՆ {jB%p~*aPPt;n_jC۲e]|?%N({Pz{] 1ܩ"9s=x^=~|؃rsmʭ[/oغ we`d!PN"JrJ(u\,zܲx0 @S 0w#C ʹ??+qN,p#"bځr 0 @*Jw#kOec {]2;Ǔ }M1(nH u%஻]w}](D\ 9.P6&P0~?ձo[/ H@ s'뮿(E(ev y[^0 @0'w!P #P.u((GromۄIG?;| @91B c? s~V@YeȌɭ$&P"|3_|k Π|@9b((mx4L^u%4_ ʹ??+qN,q2۶],L+%4G_}^ʳʅ@eV-l[nG%$`߾}>菾$PFg(r9Xʬʑ0= JHO'Pg(r9X,m-@ MOOmScBΟ8'P@fܾ}0 @! dƷO}a@99:@g% :.P(?J|( E&x⯧A)P,PYse ۷o~۷o(:2'&^K?+qN,q2@^z}@+( c~x(E?+qN,q2@}%q/ hE%dU|[{*P 8V@Ye#孷xz;Z@ 9oo}G(9X[o}gl~Iر1%'?'?'P d<玄 {]2;[;P̒4>@Ђ>;GG@)P.u[x;ʥ$C}&~xX)P&E\ 9r$J^*J@qJ(ur$DgxJ UHG?eΟ8'PxRyh| -B2# }}{oϟ8'PxerŘ yEG2mlG(9X(vgȝ]>}}Krb_ϒ|sLErV{,]~gQr=eOJq# (B=-(lbόwgX h)v@-J-Q%""ճIZ^H=ٖ&J^Wlp^Of(Q=X9v {]ǻ힞 3.ʅ@9ʕQ^Q5Jh./(TqoG%@j."`&qN\1VO/@ 3y]3ʉ+kZ:ƪV@(rjlzYs(+kZ&+lj0@ Bzz~'Ƕ8sV}}(GB)>Z6k(X51x>o_[^u<,K[/_+IENDB`hkl-5.0.0.2449/Documentation/hkl-default.el0000644000175000017500000000611713236600666020463 0ustar00piccapicca00000000000000;;; hkl-default.el --- Hkl specific emacsen startup code. ;; Copyright (C) 2003-2018 Synchrotron SOLEIL ;; L'Orme des Merisiers Saint-Aubin ;; BP 48 91192 GIF-sur-YVETTE CEDEX ;; Maintainer: Picca Frédéric-Emmanuel ;; Keywords: hkl ;; The hkl library is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; The hkl library is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with the hkl library. If not, see . ;; ;;; Commentary: ;; This file contains startup code needed by all the various flavors ;; of Emacs for a hkl library documentation generation. ;;; Code: (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(inhibit-startup-screen t) '(c-default-style (quote ((c-mode . "linux") (c++-mode . "linux") (other . "gnu")))) '(org-babel-load-languages (quote ((latex . t) (python . t) (emacs-lisp . t) (gnuplot . t)))) '(org-confirm-babel-evaluate nil) '(org-latex-listings (quote minted)) '(org-latex-minted-langs (quote ((emacs-lisp "common-lisp") (cc "c++") (cperl "perl") (shell-script "bash") (caml "ocaml") (python "python")))) '(org-latex-pdf-process (quote ("pdflatex -interaction nonstopmode --shell-escape -output-directory %o %f" "pdflatex -interaction nonstopmode --shell-escape -output-directory %o %f" "pdflatex -interaction nonstopmode --shell-escape -output-directory %o %f"))) '(org-export-with-sub-superscripts nil) '(org-src-fontify-natively t) '(org-publish-project-alist (quote (("hkl" :base-directory "." :base-extension "org" :publishing-directory "/ssh:picca@people.debian.org:~/public_html/hkl/" :publishing-function org-html-publish-to-html :headline-levels 3 :section-numbers t :with-toc t :html-head "" :html-preamble t) ("images" :base-directory "figures/" :base-extension "svg\\|jpg\\|gif\\|png" :publishing-directory "/ssh:picca@people.debian.org:~/public_html/hkl/figures/" :publishing-function org-publish-attachment) ("css" :base-directory "css/" :base-extension "css" :publishing-directory "/ssh:picca@people.debian.org:~/public_html/hkl/css/" :publishing-function org-publish-attachment) )))) (require 'ox-publish) (provide 'hkl-default) ;;; hkl-default ends here hkl-5.0.0.2449/Documentation/hkl.org.in0000644000175000017500000017070413211074263017630 0ustar00piccapicca00000000000000#+TITLE: Welcome to hkl's @VERSION@ documentation! #+AUTHOR: Picca Frédéric-Emmanuel #+EMAIL: picca at synchrotron dash soleil dot fr #+LANGUAGE: en #+STYLE: #+HTML_HEAD: #+HTML_MATHJAX: path:"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_HTML" * Introduction The purpose of the library is to factorize single crystal diffraction angles computation for different kind of diffractometer geometries. It is used at the SOLEIL, Desy and Alba synchrotron with the Tango control system to pilot diffractometers. ** Features - mode computation (aka PseudoAxis) - item for different diffractometer geometries. - UB matrix computation. - busing & Levy with 2 reflections - simplex computation with more than 2 reflections using the GSL library. - Eulerians angles to pre-orientate your sample. - Crystal lattice refinement - with more than 2 reflections you can select which parameter must be fitted. - Pseudoaxes - psi, eulerians, q, ... ** Conventions In all this document the next convention will be used to describe the diffractometers geometries. - right handed convention for all the angles. - direct space orthogonal base. - description of the diffractometer geometries is done with all axes values set to zero. ** Diffraction *** the crystal A periodic crystal is the association of a pattern and a lattice. The pattern is located at each points of the lattice node. Positions of those nodes are given by: \[ R_{uvw}=u\cdot\vec{a}+v\cdot\vec{b}+w\cdot\vec{c} \] $\vec{a}$, $\vec{b}$, $\vec{c}$ are the former vector of a base of the space. =u=, =v=, =w= are integers. The pattern contain atoms associated to each lattice node. the purpose of diffraction is to study the interaction of this crystal (pattern+lattice) with X-rays. #+CAPTION: Crystal direct lattice. [[./figures/crystal.png]] this lattice is defined by $\vec{a}$, $\vec{b}$, $\vec{c}$ vectors, and the angles $\alpha$, $\beta$, $\gamma$. In general cases this lattice is not orthonormal. Nevertheless to compute the interaction of this real space lattice and the X-Rays, it is convenient to define another lattice called reciprocal lattice defined like this: \begin{eqnarray*} \vec{a}^{\star} & = & \tau\frac{\vec{b}\wedge\vec{c}}{\vec{a}\cdot(\vec{b}\wedge\vec{c})}\\ \vec{b}^{\star} & = & \tau\frac{\vec{c}\wedge\vec{a}}{\vec{b}\cdot(\vec{c}\wedge\vec{a})}\\ \vec{c}^{\star} & = & \tau\frac{\vec{a}\wedge\vec{b}}{\vec{c}\cdot(\vec{a}\wedge\vec{b})} \end{eqnarray*} $\tau=2\pi$ or $\tau=1$ depending on the conventions. It is then possible to define theses orthogonal properties: \begin{eqnarray*} \vec{a}^{\star}\cdot\vec{a}=\tau & \vec{b}^{\star}\cdot\vec{a}=0 & \vec{c}^{\star}\cdot\vec{a}=0\\ \vec{a}^{\star}\cdot\vec{b}=0 & \vec{b}^{\star}\cdot\vec{b}=\tau & \vec{c}^{\star}\cdot\vec{b}=0\\ \vec{a}^{\star}\cdot\vec{c}=0 & \vec{b}^{\star}\cdot\vec{c}=0 & \vec{c}^{\star}\cdot\vec{c}=\tau \end{eqnarray*} This reciprocal space lattice allow to write in a simpler form the interaction between the crystal and the X-Rays. We often only know about $\vec{a}$, $\vec{b}$, $\vec{c}$ vectors and the angles $\alpha$, $\beta$, $\gamma$. Using the previous equations reciprocal, we can compute the reciprocal lattice this way: \begin{eqnarray*} a^{\star} & = & \frac{\sin\alpha}{aD}\\ b^{\star} & = & \frac{\sin\beta}{bD}\\ c^{\star} & = & \frac{\sin\gamma}{cD} \end{eqnarray*} where \[ D=\sqrt{1-\cos^{2}\alpha-\cos^{2}\beta-\cos^{2}\gamma+2\cos\alpha\cos\beta\cos\gamma} \] To compute the angles between the reciprocal space vectors, it is once again possible to use the previous equations reciprocal to obtain the sines and cosines of the angles $\alpha^\star$, $\beta^\star$ and $\gamma^\star$: \begin{eqnarray*} \cos\alpha^{\star}=\frac{\cos\beta\cos\gamma-\cos\alpha}{\sin\beta\sin\gamma} & \, & \sin\alpha^{\star}=\frac{D}{\sin\beta\sin\gamma} \\ \cos\beta^{\star}=\frac{\cos\gamma\cos\alpha-\cos\beta}{\sin\gamma\sin\alpha} & \, & \sin\beta^{\star}=\frac{D}{\sin\gamma\sin\alpha}\\ \cos\gamma^{\star}=\frac{\cos\alpha\cos\beta-\cos\gamma}{\sin\alpha\sin\beta} & \, & \sin\gamma^{\star}=\frac{D}{\sin\alpha\sin\beta} \end{eqnarray*} the volume of the lattice can be compute this way: \[ V = abcD \] or \[ V = \vec{a} \dot (\vec{b} \wedge \vec{c}) = \vec{b} \dot (\vec{c} \wedge \vec{a}) = \vec{c} \dot (\vec{a} \wedge \vec{b}) \] *** Diffraction Let the incoming X-rays beam whose wave vector is $\vec{k_{i}}$, $|k_{i}|=\tau/\lambda$ where $\lambda$ is the wavelength of the signal. The $\vec{k_{d}}$ vector wavelength of the diffracted beam. There is diffusion if the diffusion vector $\vec{q}$ can be expressed as follows: \[ \vec{q}=\vec{k_{d}}-\vec{k_{i}}=h.\vec{a}^{*}+k.\vec{b}^{*}+l.\vec{c}^{*} \] where $(h,k,l)\in\mathbb{N}^{3}$ and $(h,k,l)\neq(0,0,0)$. Theses indices $(h,k,l)$ are named Miller indices. Another way of looking at things has been given by Bragg and that famous relationship: \[ n\lambda=2d\sin\theta \] where $d$ is the inter-plan distance and $n \in \mathbb{N}$. The diffusion occurs for an unique $\theta$ angle. Then we got $\vec{q}$ perpendicular to the diffraction plan. The Ewald construction allow to represent this diffraction in the reciprocal space. *** Quaternions **** Properties The quaternions will be used to describe the diffractometers geometries. Theses quaternions can represent 3D rotations. There is different way to describe then like complex numbers. \[ q=a+bi+cj+dk \] or \[ q=[a,\vec{v}] \] To compute the quaternion's norm, we can proceed like for complex numbers \[ \|q\|=\sqrt{a²+b²+c²+d²} \] Its conjugate is : \[ q^{*}=[a,-\vec{u}]=a-bi-cj-dk \] **** Operations The difference with the complex number algebra is about non-commutativity. \[ qp \neq pq \] \[ \begin{bmatrix} ~ & 1 & i & j & k \cr 1 & 1 & i & j & k \cr i & i & -1 & k & -j \cr j & j & -k & -1 & i \cr k & k & j & -i & -1 \end{bmatrix} \] The product of two quaternions can be express by the Grassman product Grassman product. So for two quaternions $p$ and $q$: \begin{align*} q &= a+\vec{u} = a+bi+cj+dk\\ p &= t+\vec{v} = t+xi+yj+zk \end{align*} we got \[ pq = at - \vec{u} \cdot \vec{v} + a \vec{v} + t \vec{u} + \vec{v} \times \vec{u} \] or equivalent \[ pq = (at - bx - cy - dz) + (bt + ax + cz - dy) i + (ct + ay + dx - bz) j + (dt + az + by - cx) k \] **** 3D rotations L'ensemble des quaternions unitaires (leur norme est égale à 1) est le groupe qui représente les rotations dans l'espace 3D. Si on a un vecteur unitaire $\vec{u}$ et un angle de rotation $\theta$ alors le quaternion $[\cos\frac{\theta}{2},\sin\frac{\theta}{2}\vec{u]}$ représente la rotation de $\theta$ autour de l'axe $\vec{u}$ dans le sens trigonométrique. Nous allons donc utiliser ces quaternions unitaires pour représenter les mouvements du diffractomètre. Alors que dans le plan 2D une simple multiplication entre un nombre complex et le nombre $e^{i\theta}$ permet de calculer simplement la rotation d'angle $\theta$ autour de l'origine, dans l'espace 3D l'expression équivalente est: \[ z'=qzq^{-1} \] où $q$ est le quaternion de norme 1 représentant la rotation dans l'espace et $z$ le quaternion représentant le vecteur qui subit la rotation (sa partie réelle est nulle). Dans le cas des quaternions de norme 1, il est très facile de calculer $q^{-1}$. En effet l'inverse d'une rotation d'angle $\theta$ est la rotation d'angle $-\theta$. On a donc directement: \[ q^{-1}=[\cos\frac{-\theta}{2},\sin\frac{-\theta}{2}\vec{u}]=[\cos\frac{\theta}{2},-\sin\frac{\theta}{2}\vec{u}]=q^{*} \] Le passage aux matrices de rotation se fait par la formule suivante $q\rightarrow M$. \[ \begin{bmatrix} a{{}^2}+b{{}^2}-c{{}^2}-d{{}^2} & 2bc-2ad & 2ac+2bd\\ 2ad+2bc & a{{}^2}-b{{}^2}+c{{}^2}-d{{}^2} & 2cd-2ab\\ 2bd-2ac & 2ab+2cd & a{{}^2}-b{{}^2}-c{{}^2}+d{{}^2} \end{bmatrix} \] La composition de rotation se fait simplement en multipliant les quaternions entre eux. Si l'on à $q$ ** Modes de fonctionnement ** Equations fondamentales Le problème que nous devons résoudre est de calculer pour une famille de plan $(h,k,l)$ donné, les angles de rotation du diffractomètre qui permettent de le mettre en condition de diffraction. Il faut donc exprimer les relations mathématiques qui lient les différents angles entre eux lorsque la condition de Bragg est vérifiée. L'équation fondamentale est la suivante: \begin{align*} \left(\prod_{i}S_{i}\right)\cdot U\cdot B\cdot\vec{h} & =\left(\prod_{j}D_{j}-I\right)\cdot\vec{k_{i}}\\ R\cdot U\cdot B\cdot\vec{h} & =\vec{Q} \end{align*} ou $\vec{h}$ est le vecteur $(h,k,l)$, $\vec{k_{i}}$ est le vecteur incident, $S_{i}$ les matrices de rotations des mouvements liés à l'échantillon, $D_{j}$ les matrices de rotation des mouvements liés au détecteur, $I$ la matrice identité, $U$ la matrice d'orientation du cristal par rapport au repère de l'axe sur lequel ce dernier est monté et $B$ la matrice de passage d'un repère non orthonormé ( celui du crystal réciproque) à un repère orthonormé. *** Calcule de B Si l'on connaît les paramètres cristallins du cristal étudié, il est très simple de calculer $B$: \[ B= \begin{bmatrix} a^{\star} & b^{\star}\cos\gamma^{\star} & c^{\star}\cos\beta^{\star}\\ 0 & b^{\star}\sin\gamma^{\star} & -c^{\star}\sin\beta^{\star}\cos\alpha\\ 0 & 0 & 1/c \end{bmatrix} \] *** Calcule de U Il existe plusieurs façons de calculer $U$. Busing et Levy en a proposé plusieurs. Nous allons présenter celle qui nécessite la mesure de seulement deux réflections ainsi que la connaissance des paramètres cristallins. Cette façon de calculer la matrice d'orientation $U$, peut être généralisée à n'importe quel diffractomètre pour peu que la description des axes de rotation permette d'obtenir la matrice de rotation de la machine $R$ et le vecteur de diffusion $\vec{Q}$. Il est également possible de calculer $U$ sans la connaîssance des paramètres cristallins. il faut alors faire un affinement des paramètres. Cela revient à minimiser une fonction. Nous allons utiliser la méthode du simplex pour trouver ce minimum et donc ajuster l'ensemble des paramètres cristallins ainsi que la matrice d'orientation. *** Algorithme de Busing Levy L'idée est de se placer dans le repère de l'axe sur lequel est monté l'échantillon. On mesure deux réflections $(\vec{h}_{1},\vec{h}_{2})$ ainsi que leurs angles associés. Cela nous permet de calculer $R$ et $\vec{Q}$ pour chacune de ces reflections. nous avons alors ce système: \begin{eqnarray*} U\cdot B\cdot\vec{h}_{1} & = & \tilde{R}_{1}\cdot\vec{Q}_{1}\\ U\cdot B\cdot\vec{h}_{2} & = & \tilde{R}_{2}\cdot\vec{Q}_{2} \end{eqnarray*} De façon à calculer facilement $U$, il est intéressant de définir deux trièdres orthonormé $T_{\vec{h}}$ et $T_{\vec{Q}}$ à partir des vecteurs $(B\vec{h}_{1},B\vec{h}_{2})$ et $(\tilde{R}_{1}\vec{Q}_{1},\tilde{R}_{2}\vec{Q}_{2})$. On a alors très simplement: \[ U \cdot T_{\vec{h}} = T_{\vec{Q}} \] Et donc \[ U = T_{\vec{Q}} \cdot \tilde{T}_{\vec{h}} \] *** Affinement par la méthode du simplex Dans ce cas nous ne connaissons pas la matrice $B$, il faut donc mesurer plus que deux réflections pour ajuster les 9 paramètres. Six paramètres pour le crystal et trois pour la matrice d'orientation $U$. Les trois paramètres qui permennt de representer $U$ sont en fait les angles d'euler. il faut donc être en mesure de passer d'une représentation eulérien à cette matrice :math::U et réciproquement. \[ U = X \cdot Y \cdot Z \] où $X$ est la matrice rotation suivant l'axe Ox et le premier angle d'Euler, $Y$ la matrice de rotation suivant l'axe Oy et le deuxième angle d'Euler et $Z$ la matrice du troisième angle d'Euler pour l'axe Oz. #+ATTR_HTML: class="center" | $X$ | $Y$ | $Z$ | | <10> | <10> | <10> | | $\begin{bmatrix} 1 & 0 & 0\\ 0 & A & -B\\ 0 & B & A \end{bmatrix}$ | $\begin{bmatrix}C & 0 & D\\0 & 1 & 0\\-D & 0 & C\end{bmatrix}$ | $\begin{bmatrix}E & -F & 0\\F & E & 0\\0 & 0 & 1\end{bmatrix}$ | et donc: \[ U= \begin{bmatrix} CE & -CF & D\\ BDE+AF & -BDF+AE & -BC\\ -ADE+BF & ADF+BE & AC \end{bmatrix} \] Il est donc facile de passer des angles d'Euler à la matrice d'orientation. Il faut maintenant faire la transformation inverse de la matrice $U$ vers les angles d'euler. * PseudoAxes This section describe the calculations done by the library for the different kind of pseudo axes. ** General process *** First Solution The hkl library use the gsl library in order to find the first valid solution. *** Multiplication of the solutions. Once we have got the first solution different strategies are applyed in order to generate more solutions. **** Geometry Multiplication For kappa diffractometers, once you have one solution it is possible to générate another one using a property of this geometry. (Left arm and right arm). *** Restrains of the Solutions We apply then some constrains to reduce these solutions to only a bunch of acceptable ones. Usualy we take the axis range into account. ** Eulerians to Kappa angles 1st solution \begin{eqnarray*} \kappa_\omega & = & \omega - p + \frac{\pi}{2} \\ \kappa & = & 2 \arcsin\left(\frac{\sin\frac{\chi}{2}}{\sin\alpha}\right) \\ \kappa_\phi & = & \phi - p - \frac{\pi}{2} \end{eqnarray*} or 2nd one \begin{eqnarray*} \kappa_\omega & = & \omega - p - \frac{\pi}{2} \\ \kappa & = & -2 \arcsin\left(\frac{\sin\frac{\chi}{2}}{\sin\alpha}\right) \\ \kappa_\phi & = & \phi - p + \frac{\pi}{2} \end{eqnarray*} where \[ p = \arcsin\left(\frac{\tan\frac{\chi}{2}}{\tan\alpha}\right) \] and $\alpha$ is the angle of the kappa axis with the $\vec{y}$ axis. ** Kappa to Eulerians angles 1st solution \begin{eqnarray*} \omega & = & \kappa_\omega + p - \frac{\pi}{2} \\ \chi & = & 2 \arcsin\left(\sin\frac{\kappa}{2} \sin\alpha\right) \\ \phi & = & \kappa_\phi + p + \frac{\pi}{2} \end{eqnarray*} or 2nd one \begin{eqnarray*} \omega & = & \kappa_\omega + p + \frac{\pi}{2} \\ \chi & = & -2 \arcsin\left(\sin\frac{\kappa}{2} \sin\alpha\right) \\ \phi & = & \kappa_\phi + p - \frac{\pi}{2} \end{eqnarray*} where \[ p = \arctan\left(\tan\frac{\kappa}{2} \cos\alpha\right) \] #+CAPTION: $\omega = 0$, $\chi = 0$, $\phi = 0$, 1st solution [[./figures/e2k_1.png]] #+CAPTION: $\omega = 0$, $\chi = 0$, $\phi = 0$, 2nd solution [[./figures/e2k_2.png]] #+CAPTION: $\omega = 0$, $\chi = 90$, $\phi = 0$, 1st solution [[./figures/e2k_3.png]] #+CAPTION: $\omega = 0$, $\chi = 90$, $\phi = 0$, 2nd solution [[./figures/e2k_4.png]] ** Qper and Qpar [[./figures/qper_qpar.png]] this pseudo axis engine compute the perpendicular ($\left|\left|\vec{Q_\text{per}}\right|\right|$) and parallel ($\left|\left|\vec{Q_\text{par}}\right|\right|$) contribution of $\vec{Q}$ relatively to the surface of the sample defined by the $\vec{n}$ vector. \begin{eqnarray*} \vec{q} & = & \vec{k_\text{f}} - \vec{k_\text{i}} \\ \vec{q} & = & \vec{q_\text{per}} + \vec{q_\text{par}} \\ \vec{q_\text{per}} & = & \frac{\vec{q} \cdot \vec{n}}{\left|\left|\vec{n}\right|\right|} \frac{\vec{n}}{\left|\left|\vec{n}\right|\right|} \end{eqnarray*} * Diffractometers #+BEGIN_QUOTE *warning* This section is automatically generating by introspecting the hkl library. #+END_QUOTE #+BEGIN_SRC python :exports results :results value raw from gi.repository import Hkl def bold(l): return ["\"*" + _ + "*\"" for _ in l] def level(indent=1, s=None): return " "*indent + s diffractometers = Hkl.factories().iterkeys() output = '' for diffractometer in sorted(diffractometers): factory = Hkl.factories()[diffractometer] output += "** " + diffractometer + "\n\n" detector = Hkl.Detector.factory_new(Hkl.DetectorType(0)) sample = Hkl.Sample.new("toto") geometry = factory.create_new_geometry() engines = factory.create_new_engine_list() engines.init(geometry, detector, sample) output += "*** Axes: \n" for axis in geometry.axis_names_get(): axis_v = geometry.axis_get(axis).axis_v_get().data output += level(2, "+ \"*" + axis + "*\": rotation around the *" + repr(axis_v) + "* axis\n") output += "*** Engines: \n" for engine in engines.engines_get(): output += "**** \"*" + engine.name_get() + "*\":\n\n" output += level(3, "* pseudo axes:\n") for pseudo in engine.pseudo_axis_names_get(): p = engine.pseudo_axis_get(pseudo) description = p.description_get() output += level(4, "* \"*" + pseudo + "*\" : " + description + '\n\n') output += "\n" for mode in engine.modes_names_get(): output += level(3, "+ mode: \"*" + mode + "*\"\n") engine.current_mode_set(mode) axes_r = engine.axis_names_get(Hkl.EngineAxisNamesGet.READ) axes_w = engine.axis_names_get(Hkl.EngineAxisNamesGet.WRITE) output += level(4, "+ axes (read) : " + ", ".join(bold(axes_r)) + "\n") output += level(4, "+ axes (write): " + ", ".join(bold(axes_w)) + "\n") parameters = engine.parameters_names_get() output += level(4, "+ parameters: ") if parameters: output += "\n" for parameter in parameters: p = engine.parameter_get(parameter) description = p.description_get() value = p.value_get(Hkl.UnitEnum.USER) output += level(5, "+ *" + parameter + "* [" + str(value) + "]: " + description + "\n") else: output += "No parameter\n" return output #+END_SRC * Developpement ** Getting hkl To get hkl, you can download the last stable version from sourceforge or if you want the latest development version use [[http://git.or.cz/][git]] or [[http://code.google.com/p/msysgit/downloads/list][msysgit]] on windows system and do: #+BEGIN_SRC sh git clone git://repo.or.cz/hkl.git #+END_SRC or: #+BEGIN_SRC sh git clone http://repo.or.cz/r/hkl.git (slower) #+END_SRC then checkout the next branch like this: #+BEGIN_SRC sh cd hkl git checkout -b next origin/next #+END_SRC ** Building hkl To build hkl you need [[http://www.python.org][Python 2.3+]] the [[http://www.gnu.org/software/gsl/][GNU Scientific Library 1.12]] and [[https://developer.gnome.org/glib/][GLib-2.0 >= 2.3.4]]: #+BEGIN_SRC sh ./configure --disable-gui make sudo make install #+END_SRC you can also build a GUI interfaces which use [[http://www.gtk.org][gtk]]: #+BEGIN_SRC sh ./configure make sudo make install #+END_SRC optionnaly you can build an experimental /libhkl3d/ library (no public API for now) which is used by the GUI to display and compute diffractometer collisions (only the /K6C/ model). To build it you need also [[https://projects.gnome.org/gtkglext/][gtkglext]] and [[http://bulletphysics.org/wordpress/][bullet 2.82]]: #+BEGIN_SRC sh ./configure --enable-hkl3d make sudo make install #+END_SRC if you want to work on the documentation you need the extra - [[http://www.gtk.org/gtk-doc/][gtk-doc]] for the api - [[http://sphinx.pocoo.org/][sphinx]] for the html and latex doc. - [[http://asymptote.sourceforge.net/][asymptote]] for the figures - [[http://www.gnu.org/software/emacs/][emacs]] the well known editor - [[https://github.com/emacsmirror/htmlize][htmlize]] used to highlight the source code - [[http://orgmode.org][org-mode]] litteral programming On Debian/Ubuntu you just need to install #+BEGIN_SRC sh sudo apt-get install emacs dvipng emacs-goodies-el org-mode #+END_SRC #+BEGIN_SRC sh ./configure --enable-gtk-doc make make html #+END_SRC nevertheless if you do not want to build the documentation you can do: #+BEGIN_SRC sh ./configure --disable-hkl-doc #+END_SRC ** Hacking hkl *** Bug reporting You can find the bug tracker here [[https://bugs.debian.org/cgi-bin/pkgreport.cgi?repeatmerged=no&src=hkl][libhkl]] - Debian/Ubuntu: #+BEGIN_SRC sh reportbug hkl #+END_SRC - Other OS You just need to send an [[mailto:submit@bugs.debian.org?subject=%20My%20problem%20with%20hkl...&body=Package:%20hkl%0AVersion:%20@VERSION@%0A%0AI%20found%20this%20problem%20in%20hkl][email]] *** Providing patches you can send your patch to [[mailto:picca@synchrotron-soleil.fr][Picca Frédéric-Emmanuel]] using =git= Here a minimalist example of the workflow to prepare and send patches for integration into the hkl library. Suppose you wan to add a new feature, you need first to create a new branch from the =next= one: #+BEGIN_SRC sh git checkout -b my-next next #+END_SRC hack, hack: #+BEGIN_SRC sh git commit -a #+END_SRC more hacks: #+BEGIN_SRC sh git commit -a #+END_SRC now that your new feature is ready, you can send by email your work using =git format-patch= for review: #+BEGIN_SRC sh git format-patch origin/next #+END_SRC which will generate a bunch of ~0001\_xxx~, ~0002\_xxx~, ... patches Then you can configure =git send-email= in order to send the patches for review. #+BEGIN_SRC sh git config sendemail.to "picca@synchrotron-soleil.fr" #+END_SRC and send then with this command: #+BEGIN_SRC sh git send-email 0001-xxx.patch, 0002-xxx.patch, ... #+END_SRC If it does not work you can use your usually email software and send these generated patches to the [[mailto:picca@synchrotron-soleil.fr][author]]. ** Howto's *** Add a diffractometer To add a new diffractometer, you just need to copy the ~hkl/hkl-engine-template.c~ into ~hkl/hkl-engine-INSTITUT-BEAMLINE-INSTRUMENT.c~ where you replace the upper case with the appropriate values. The template file is compiled during the build process to ensure that it is always valid. Then you just need to follow the instruction found in the template. If you need some precision about the process, do not hesitate to contact the main author. do not forgot also to add this new file into ~hkl/Makefile.am~ with other diffractometers in the hkl_c_sources variable (please keep the alphabetic order). *** Work on the documentation The documentation system is written with [[http://orgmode.org/][org-mode]], and the [[http://orgmode.org/worg/org-contrib/babel/][babel]] extension which allow to introspect the library and generate part of the doc using the hkl library. Python code is executed during the build process to generate the Diffractometer section of the documentation. To work on the doc and test the embedded python code it is necessary to setup a few environment variables and start emacs with the right LD_LIBRARY_PATH. In order to simplify the process a make target was written. You just need to type: #+BEGIN_SRC sh cd Documentation make doc-edit #+END_SRC and start to contribute. If you do not have emacs, you can nevertheless contribute by editing the ~Documentation/hkl.org.in~ file which is text only. The most expected contributions are for now: * english correctness * a nicer css * Bindings The hkl library use the gobject-introspection to provide automatic binding for a few languages. ** Python You can test the binding directly from the source directory with these commandes if ipython is installed. #+BEGIN_SRC sh cd tests/bindings make ipython #+END_SRC then you have the Hkl module preloaded into the ipython environment. hkl computation: has you can see there is 4 available solutions. let's compute an hkl trajectory and select the first solution. if we look at the 3 other solutions we can see that there is a problem of continuity at the begining of the trajectory. hey what's happend with theses solutions ! let's look closely to real numbers. the last column is the distance to the diffractometer current position. This distance is for now express like this: $\sum_{axes} \left|\text{current position} - \text{target position}\right|$ #+BEGIN_EXAMPLE [0.0, 119.99999999999999, 0.0, -90.0, 0.0, 59.99999999999999] 0.0 [0.0, -119.99999999999999, 0.0, -90.0, 0.0, -59.99999999999999] 6.28318530718 [0.0, -60.00000000000005, 0.0, 90.0, 0.0, 59.99999999999999] 6.28318530718 [0.0, 60.00000000000001, 0.0, 90.0, 0.0, -59.99999999999999] 6.28318530718 [0.0, 117.7665607657826, 7.456826294401656, -92.39856410531434, 0.0, 60.33024982425957] 0.216753826612 [0.0, -57.436310940366894, -7.456826294401656, 92.39856418853617, 0.0, 60.33024982425957] 6.41621345188 [0.0, 62.2334392342174, -7.456826294401656, 92.39856410531434, 0.0, -60.33024982425957] 6.42197739723 [0.0, -122.5636890596331, 7.456826294401656, -92.3985641885362, 0.0, -60.33024982425957] 6.50570308205 [0.0, 115.89125602137928, 14.781064139466098, -94.7660423112577, 0.0, 61.314597086440706] 0.219062698235 [0.0, -125.42334103772737, 14.781064139466098, -94.7660427050904, 0.0, -61.314597086440706] 6.53671995288 [0.0, -54.57665896227262, -14.781064139466098, 94.76604270509038, 0.0, 61.314597086440706] 6.67989976726 [0.0, 64.10874397862072, -14.781064139466098, 94.7660423112577, 0.0, -61.314597086440706] 6.71437170098 [0.0, 114.39338605351007, 21.85448296702796, -97.074145033719, 0.0, 62.93506298693471] 0.218163667981 [0.0, -128.54167683157993, 21.85448296702796, -97.07414574435087, 0.0, -62.93506298693471] 6.59846359365 [0.0, -51.45832316842005, -21.85448296702796, 97.07414574435087, 0.0, 62.93506298693471] 6.93673746356 [0.0, 65.60661394648993, -21.85448296702796, 97.074145033719, 0.0, -62.93506298693471] 7.03385205725 [0.0, 113.28316795475283, 28.583837575232764, -99.29953499008337, 0.0, 65.16540747008955] 0.21459359225 [0.0, -131.88223933078322, 28.583837575232764, -99.29953638594702, 0.0, -65.16540747008955] 6.69038531388 [0.0, -48.11776066921677, -28.583837575232764, 99.29953638594702, 0.0, 65.16540747008955] 7.18296350386 [0.0, 66.71683204524717, -28.583837575232764, 99.29953499008337, 0.0, -65.16540747008955] 7.37556986959 [0.0, 112.56286877075006, 34.90573305321372, -101.42496979586187, 0.0, 67.97568017857415] 0.209053830457 [0.0, -135.4128111996365, 34.90573305321372, -101.42497263302461, 0.0, -67.97568017857415] 6.81174779784 [0.0, -44.58718880036348, -34.90573305321372, 101.4249726330246, 0.0, 67.97568017857415] 7.41581162393 [0.0, 67.43713122924994, -34.90573305321372, 101.42496979586187, 0.0, -67.97568017857415] 7.7353201851 [0.0, 112.2291126083182, 40.78594007247402, -103.43941832567457, 0.0, 71.33706722449408] 0.202280147961 [0.0, -139.10795451001587, 40.78594007247402, -103.43942357602316, 0.0, -71.33706722449408] 6.96173845391 [0.0, -40.89204548998411, -40.78594007247402, 103.43942357602312, 0.0, 71.33706722449408] 7.63358787543 [0.0, 67.7708873916818, -40.78594007247402, 103.43941832567457, 0.0, -71.33706722449408] 8.10986069093 [0.0, 112.27578927291766, 46.214916130901734, -105.33741042812996, 0.0, 75.22640762217479] 0.196576175748 [0.0, -142.95061850160724, 46.214916130901734, -105.3374188005596, 0.0, -75.22640762217479] 7.13962155618 [0.0, -37.04938149839278, -46.214916130901734, 105.33741880055959, 0.0, 75.22640762217479] 7.83557762281 [0.0, 67.72421072708234, -46.214916130901734, 105.33741042812996, 0.0, -75.22640762217479] 8.49706672677 [0.0, 112.697137434232, 51.201667684695856, -107.11797492933192, 0.0, 79.63023536264535] 0.202327153157 [0.0, -146.9330984641471, 51.201667684695856, -107.11798610058318, 0.0, -79.63023536264535] 7.34491897177 [0.0, -33.0669015358529, -51.201667684695856, 107.11798610058317, 0.0, 79.63023536264535] 8.02185610877 [0.0, 67.30286256576798, -51.201667684695856, 107.11797492933192, 0.0, -79.63023536264535] 8.89597005568 [0.0, 113.49085964586432, 55.76762791023837, -108.78347437395287, 0.0, 84.54867879242364] 0.208455586312 [0.0, -151.05782007465257, 55.76762791023837, -108.78348605483542, 0.0, -84.54867879242364] 7.57761473366 [0.0, -28.942179925347414, -55.76762791023837, 108.78348605483538, 0.0, 84.54867879242364] 8.19307323084 [0.0, 66.50914035413568, -55.76762791023837, 108.78347437395287, 0.0, -84.54867879242364] 9.30675279514 [0.0, 114.6614608037443, 59.941489465646214, -110.3385360479293, 0.0, 90.00000081324956] 0.215562935229 [0.0, -155.33854118146962, 59.941489465646214, -110.33854432979601, 0.0, -89.99999918675044] 7.83839602383 [0.0, -24.661458818530395, -59.941489465646214, 110.33854432979601, 0.0, 90.00000081324956] 8.3502621071 [0.0, 65.3385391962557, -59.941489465646214, 110.3385360479293, 0.0, -89.99999918675044] 9.7307712883 #+END_EXAMPLE as you can see for the first point of the trajectory, the 2nd, 3rd and 4th solutions have identical distances to the current position of the diffractometer so they are un-ordered: #+BEGIN_EXAMPLE [0.0, 119.99999999999999, 0.0, -90.0, 0.0, 59.99999999999999] 0.0 [0.0, -119.99999999999999, 0.0, -90.0, 0.0, -59.99999999999999] 6.28318530718 [0.0, -60.00000000000005, 0.0, 90.0, 0.0, 59.99999999999999] 6.28318530718 [0.0, 60.00000000000001, 0.0, 90.0, 0.0, -59.99999999999999] 6.28318530718 #+END_EXAMPLE then the problem arise with the second and third solution. you can see a sort of reorganisation of the solution. 2 -> 3, 3 -> 4 and 4 -> 2 then the order will stick unchanged until the end of the trajectory. this is because the distance is computed relatively to the current position of the diffractometer.: #+BEGIN_EXAMPLE [0.0, 117.7665607657826, 7.456826294401656, -92.39856410531434, 0.0, 60.33024982425957] 0.216753826612 [0.0, -57.436310940366894, -7.456826294401656, 92.39856418853617, 0.0, 60.33024982425957] 6.41621345188 [0.0, 62.2334392342174, -7.456826294401656, 92.39856410531434, 0.0, -60.33024982425957] 6.42197739723 [0.0, -122.5636890596331, 7.456826294401656, -92.3985641885362, 0.0, -60.33024982425957] 6.50570308205 [0.0, 115.89125602137928, 14.781064139466098, -94.7660423112577, 0.0, 61.314597086440706] 0.219062698235 [0.0, -125.42334103772737, 14.781064139466098, -94.7660427050904, 0.0, -61.314597086440706] 6.53671995288 [0.0, -54.57665896227262, -14.781064139466098, 94.76604270509038, 0.0, 61.314597086440706] 6.67989976726 [0.0, 64.10874397862072, -14.781064139466098, 94.7660423112577, 0.0, -61.314597086440706] 6.71437170098 #+END_EXAMPLE #+BEGIN_QUOTE *warning* when you compute a trajectory, start from a valid position (the starting point must be the real first point of your trajectory) then use only the closest solution for the next points of the trajectory. (first solution of the geometries list) #+END_QUOTE * Releases ** @VERSION@ *** DONE add emergence on all e4c diffractometers <2017-03-16 Thu> The emergence pseudo axis is was added to =SOLEIL MARS= and =E4CV= *** DONE Fix for multiarch (headers) <2016-05-04 mer.> The =ccan_config.h= generated file is arch specific. It is then necessary to install this file under /usr/include/ on Debian like systems. This way it will be possible to co-installa 32/64 bit version of hkl, or to do cross-compilation (arm on x86_64, etc...) *** DONE Fix the FTBFS with the new bullet 2.86.1 version <2017-08-13 dim.> In order to update the internal structures of =Hkl3DObject= (the =is-colliding= member), we were using a callback which became un-effectiv with this new version of bullet. The logic was rewritten in order to be much more efficent using the manifold informations. Now we iterate on =Hkl3DObject= object only once (n) complexity instead of (n²) with the previous one. ** 5.0.0.2080 <2016-04-27 mer.> *** DONE =HklEngine= <2016-01-20 mer.> emergence_fixed for the SOLEIL SIX MED 2+2 geometry. *** DONE =HklVector= <2016-02-09 mar.> The hkl_vector_init method is now public. *** DONE =HklParameter= <2016-02-25 Thu> at the end of the computation all solutions are filtered in order to check that they are valid (min < value < range). BUT for a rotation axis this check was instead (min < value % 2pi < max). *** DONE =HklGeometry= <2016-04-20 mer.> Add hkl_geometry_[sample/detector]_rotation_get method. It is now possible to get the sample or the detector rotation expressed as a =HklQuaternion=. #+BEGIN_SRC python :export code qr = geometry.sample_rotation_get(sample) qd = geometry.detector_rotation_get(detector) #+END_SRC *** DONE =HklQuaternion= <2016-04-20 mer.> Add hkl_quaternion_to_matrix in order to convert a =HklQuaternion= into a =HklMatrix=. Then you just need to convert this HklMatrix into a numpy array when used from the python binding #+BEGIN_SRC python :export code def hkl_matrix_to_numpy(m): M = empty((3, 3)) for i in range(3): for j in range(3): M[i, j] = m.get(i, j) return M M = hkl_matrix_to_numpy(q.to_matrix()) #+END_SRC *** DONE Soleil Sirius Turret <2016-04-26 mar.> Add the =basepitch= axis which rotate around $\vec{y}$ in mrad. ** 4.99.99.1955 <2015-07-15 mer.> Add the ccan_config.h public header. This header is generated with the ccan configurator program. ** 4.99.99.1950 <2015-07-07 mar.> Fix an FTBFS observed on the sparc arch ** 4.99.99.1949 <2015-07-03 ven.> *** DONE =HklInterval= <2015-07-03 ven.> =hkl_interval_cmp= was wrong. Now the comparison is done between =HKL_EPSILON= and the distance between minimum and maximum. This problem was triggered first on ppc64el architecture. *** DONE PATH_MAX <2015-07-03 ven.> Replace getcwd called by get_current_dir_path instead in order to avoid PATH_MAX which is not available on hurd. ** 4.99.99.1946 <2015-06-30 mar.> *** DONE =HklEngine= **** "emergence" <2015-06-22 lun.> Add a new emergence engine which contain only one pseudo axis. + =emergence= the outgoing beam emergence from the sample's surface. + =azimuth= the sample's surface azimuth. ** 4.99.99.1940 <2015-05-04 lun.> *** DONE =HklLattice= add an =hkl_lattice_volume_get= #+BEGIN_SRC c volume = hkl_lattice_volume_get(lattice); #+END_SRC *** DONE =HklEngine= **** "nrj, sample, ... dependencies" <2015-03-24 mar.> Add the =hkl_engine_dependencies_get= method which return if the =HklEngine= depends of the axes, the energy, or the sample. the possible values are stored in the =HklEngineDependencies= enum. #+BEGIN_SRC c dependencies = hkl_engine_dependencies_get(engine); if (dependencies & HKL_ENGINE_DEPENDENCIES_ENERGY) { ... } if (dependencies & HKL_ENGINE_DEPENDENCIES_SAMPLE) { ... } ... #+END_SRC **** "tth2" <2015-04-03 ven> Add a new hkl engine which contain two pseudo axes. + =tth= two times the diffraction angle $\theta$ + =alpha= the azimuth of q in the zOy plan. **** "incidence" <2015-04-21 mar.> Add a new incidence engine which contain only one pseudo axis. + =incidence= the incoming beam incidence on the sample surface. + =azimuth= the sample surface azimuth. **** =hkl_engine_parameter_set= <2015-05-04 lun.> Fix a bug and expose the method in the binding. **** general - use #define AXIS "axis_name" in all the code to set the axes names at only one place. <2015-04-23 jeu.> *** DONE =HklLattice= expose in the binding the _x_get/set methods <2015-03-24 mar.> Now you can use hkl_lattice_x_get where x=a, b, c, alpha, beta, gamma in the bindings. #+BEGIN_SRC python :export code a = lattice.a_get() lattice.a_set(a) #+END_SRC *** DONE =HklSampleReflection= expose the flag_get/set and geometry_get/set method <2015-03-24 mar.> It is now possible to change the geometry stored in a reflection via the bindings. #+BEGIN_SRC python :export code flag = reflection.flag_get() reflection.flag_set(flag) geometry = reflection.geometry_get() geometry.axes_values_set([omega, chi, phi, ...]) reflection.geometry_set(geometry) #+END_SRC * Todo ** hkl *** TODO [#A] =HklEngine= *q/q2* Fix all these engines... This engine takes into account only the *gamma* and *delta* axes. so diffractometers with 3 axes for the detector are wrong. It would be nice to take into account all the detector holder AND the position of the detecteor on the diffractometer arms (for now the detector is always on the last axis). *** TODO [#A] HklSource Create a parameter for the wavelength. This is just internally for the futur trajectory system, so no need to change the signature of hkl_geometry_vawelength get/set *** TODO [#A] SOLEIL SIRIUS KAPPA Investigation of a problem saw on Sirius Kappa geometry. The idea is to compute a trajectory from $[0, 0, 1]$ to $[0, 0, 6]$ on a $GaAs$ sample. #+BEGIN_SRC sh Geometry SOLEIL SIRIUS KAPPA (Source 1.4586370000000007e-9 m) (fromList [-0.5193202,40.795148838481424,134.08834052117254,-55.57809067120416,-2.23369e-2,14.824478553649875]) (Just [Parameter "mu" (-0.5193202) (Range (-180.0) 180.0),Parameter "komega" 40.795148838481424 (Range (-180.0) 180.0),Parameter "kappa" 134.08834052117254 (Range (-180.0) 180.0),Parameter "kphi" (-55.57809067120416) (Range (-180.0) 180.0),Parameter "delta" (-2.23369e-2) (Range (-180.0) 180.0),Parameter "gamma" 14.824478553649875 (Range (-180.0) 180.0)]) [Engine "hkl" [Parameter "h" 2.1481674408578524e-8 (Range (-1.0) 1.0),Parameter "k" 6.392014061803081e-8 (Range (-1.0) 1.0),Parameter "l" 1.0000000132413767 (Range (-1.0) 1.0)] (Mode "bissector_vertical" []),Engine "eulerians" [Parameter "omega" 7.412239314132745 (Range (-180.0) 180.0),Parameter "chi" 89.72020738176312 (Range (-180.0) 180.0),Parameter "phi" 91.03899980444716 (Range (-180.0) 180.0)] (Mode "eulerians" [Parameter "solutions" 1.0 (Range 0.0 1.0)]),Engine "psi" [Parameter "psi" 154.5513657893786 (Range (-180.0) 180.0)] (Mode "psi_vertical_soleil_sirius_kappa" [Parameter "h2" 1.0 (Range (-1.0) 1.0),Parameter "k2" 1.0 (Range (-1.0) 1.0),Parameter "l2" 1.0 (Range (-1.0) 1.0)]),Engine "q2" [Parameter "q" 1.1114190632688228 (Range 0.0 1.0),Parameter "alpha" 89.91560430137815 (Range (-180.0) 180.0)] (Mode "q2" []),Engine "qper_qpar" [Parameter "qper" 1.1114162413072137 (Range (-1.0) 1.0),Parameter "qpar" 2.5045470426602284e-3 (Range (-1.0) 1.0)] (Mode "qper_qpar" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "tth2" [Parameter "tth" 14.824495004588014 (Range (-180.0) 180.0),Parameter "alpha" 89.91560430137815 (Range (-180.0) 180.0)] (Mode "tth2" []),Engine "incidence" [Parameter "incidence" 7.414401593159588 (Range (-180.0) 180.0),Parameter "azimuth" 89.78541978058817 (Range (-180.0) 180.0)] (Mode "incidence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "emergence" [Parameter "emergence" 7.410055570443473 (Range (-180.0) 180.0),Parameter "azimuth" 89.78541978058817 (Range (-180.0) 180.0)] (Mode "emergence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)])] Geometry SOLEIL SIRIUS KAPPA (Source 1.4586370000000007e-9 m) (fromList [-0.5193202,47.97247473743512,134.654265266118,124.92415016158583,-2.23369e-2,29.904632884360968]) (Just [Parameter "mu" (-0.5193202) (Range (-180.0) 180.0),Parameter "komega" 47.97247473743512 (Range (-180.0) 180.0),Parameter "kappa" 134.654265266118 (Range (-180.0) 180.0),Parameter "kphi" 124.92415016158583 (Range (-180.0) 180.0),Parameter "delta" (-2.23369e-2) (Range (-180.0) 180.0),Parameter "gamma" 29.904632884360968 (Range (-180.0) 180.0)]) [Engine "hkl" [Parameter "h" (-1.3839931497468412e-9) (Range (-1.0) 1.0),Parameter "k" (-4.913404854447784e-10) (Range (-1.0) 1.0),Parameter "l" 2.000000003360829 (Range (-1.0) 1.0)] (Mode "bissector_vertical" []),Engine "eulerians" [Parameter "omega" 14.95231642186499 (Range (-180.0) 180.0),Parameter "chi" 89.9575990161042 (Range (-180.0) 180.0),Parameter "phi" 271.9039918460157 (Range (-180.0) 180.0)] (Mode "eulerians" [Parameter "solutions" 1.0 (Range 0.0 1.0)]),Engine "psi" [Parameter "psi" (-26.325999847139332) (Range (-180.0) 180.0)] (Mode "psi_vertical_soleil_sirius_kappa" [Parameter "h2" 1.0 (Range (-1.0) 1.0),Parameter "k2" 1.0 (Range (-1.0) 1.0),Parameter "l2" 1.0 (Range (-1.0) 1.0)]),Engine "q2" [Parameter "q" 2.2228381008394895 (Range 0.0 1.0),Parameter "alpha" 89.96116221471468 (Range (-180.0) 180.0)] (Mode "q2" []),Engine "qper_qpar" [Parameter "qper" 2.222832456913507 (Range (-1.0) 1.0),Parameter "qpar" (-5.009095284686147e-3) (Range (-1.0) 1.0)] (Mode "qper_qpar" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "tth2" [Parameter "tth" 29.90464045486422 (Range (-180.0) 180.0),Parameter "alpha" 89.96116221471468 (Range (-180.0) 180.0)] (Mode "tth2" []),Engine "incidence" [Parameter "incidence" 14.952081490954424 (Range (-180.0) 180.0),Parameter "azimuth" 90.09480115642252 (Range (-180.0) 180.0)] (Mode "incidence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "emergence" [Parameter "emergence" 14.952481262345229 (Range (-180.0) 180.0),Parameter "azimuth" 90.09480115642252 (Range (-180.0) 180.0)] (Mode "emergence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)])] Geometry SOLEIL SIRIUS KAPPA (Source 1.4586370000000007e-9 m) (fromList [-0.5193202,56.25907471532187,133.92128004831832,-55.45556970293517,-2.23369e-2,45.53873596992208]) (Just [Parameter "mu" (-0.5193202) (Range (-180.0) 180.0),Parameter "komega" 56.25907471532187 (Range (-180.0) 180.0),Parameter "kappa" 133.92128004831832 (Range (-180.0) 180.0),Parameter "kphi" (-55.45556970293517) (Range (-180.0) 180.0),Parameter "delta" (-2.23369e-2) (Range (-180.0) 180.0),Parameter "gamma" 45.53873596992208 (Range (-180.0) 180.0)]) [Engine "hkl" [Parameter "h" 8.37724528421826e-9 (Range (-1.0) 1.0),Parameter "k" 2.018612859089285e-8 (Range (-1.0) 1.0),Parameter "l" 2.999999983141756 (Range (-1.0) 1.0)] (Mode "bissector_vertical" []),Engine "eulerians" [Parameter "omega" 22.76936798418434 (Range (-180.0) 180.0),Parameter "chi" 89.64969149765572 (Range (-180.0) 180.0),Parameter "phi" 91.0547235659273 (Range (-180.0) 180.0)] (Mode "eulerians" [Parameter "solutions" 1.0 (Range 0.0 1.0)]),Engine "psi" [Parameter "psi" 154.50191592522592 (Range (-180.0) 180.0)] (Mode "psi_vertical_soleil_sirius_kappa" [Parameter "h2" 1.0 (Range (-1.0) 1.0),Parameter "k2" 1.0 (Range (-1.0) 1.0),Parameter "l2" 1.0 (Range (-1.0) 1.0)]),Engine "q2" [Parameter "q" 3.334257126919726 (Range 0.0 1.0),Parameter "alpha" 89.97807925598289 (Range (-180.0) 180.0)] (Mode "q2" []),Engine "qper_qpar" [Parameter "qper" 3.334248661038927 (Range (-1.0) 1.0),Parameter "qpar" 7.513639271725189e-3 (Range (-1.0) 1.0)] (Mode "qper_qpar" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "tth2" [Parameter "tth" 45.53874024285007 (Range (-180.0) 180.0),Parameter "alpha" 89.97807925598289 (Range (-180.0) 180.0)] (Mode "tth2" []),Engine "incidence" [Parameter "incidence" 22.771374111123095 (Range (-180.0) 180.0),Parameter "azimuth" 89.8380685773065 (Range (-180.0) 180.0)] (Mode "incidence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "emergence" [Parameter "emergence" 22.767244039797937 (Range (-180.0) 180.0),Parameter "azimuth" 89.8380685773065 (Range (-180.0) 180.0)] (Mode "emergence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)])] Geometry SOLEIL SIRIUS KAPPA (Source 1.4586370000000007e-9 m) (fromList [-0.5193202,64.64191214924969,133.78682078017752,-55.41938838621407,-2.23369e-2,62.132688461209455]) (Just [Parameter "mu" (-0.5193202) (Range (-180.0) 180.0),Parameter "komega" 64.64191214924969 (Range (-180.0) 180.0),Parameter "kappa" 133.78682078017752 (Range (-180.0) 180.0),Parameter "kphi" (-55.41938838621407) (Range (-180.0) 180.0),Parameter "delta" (-2.23369e-2) (Range (-180.0) 180.0),Parameter "gamma" 62.132688461209455 (Range (-180.0) 180.0)]) [Engine "hkl" [Parameter "h" 9.177457430250849e-9 (Range (-1.0) 1.0),Parameter "k" 2.5693823994163015e-8 (Range (-1.0) 1.0),Parameter "l" 3.9999999929703476 (Range (-1.0) 1.0)] (Mode "bissector_vertical" []),Engine "eulerians" [Parameter "omega" 31.06634423136446 (Range (-180.0) 180.0),Parameter "chi" 89.5927920859556 (Range (-180.0) 180.0),Parameter "phi" 91.00504369590071 (Range (-180.0) 180.0)] (Mode "eulerians" [Parameter "solutions" 1.0 (Range 0.0 1.0)]),Engine "psi" [Parameter "psi" 154.51996903181714 (Range (-180.0) 180.0)] (Mode "psi_vertical_soleil_sirius_kappa" [Parameter "h2" 1.0 (Range (-1.0) 1.0),Parameter "k2" 1.0 (Range (-1.0) 1.0),Parameter "l2" 1.0 (Range (-1.0) 1.0)]),Engine "q2" [Parameter "q" 4.44567618639551 (Range 0.0 1.0),Parameter "alpha" 89.9881895320358 (Range (-180.0) 180.0)] (Mode "q2" []),Engine "qper_qpar" [Parameter "qper" 4.445664898550648 (Range (-1.0) 1.0),Parameter "qpar" 1.0018187400499787e-2 (Range (-1.0) 1.0)] (Mode "qper_qpar" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "tth2" [Parameter "tth" 62.13269076337942 (Range (-180.0) 180.0),Parameter "alpha" 89.9881895320358 (Range (-180.0) 180.0)] (Mode "tth2" []),Engine "incidence" [Parameter "incidence" 31.068363501362125 (Range (-180.0) 180.0),Parameter "azimuth" 89.83747231179481 (Range (-180.0) 180.0)] (Mode "incidence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "emergence" [Parameter "emergence" 31.064152026450454 (Range (-180.0) 180.0),Parameter "azimuth" 89.83747231179481 (Range (-180.0) 180.0)] (Mode "emergence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)])] Geometry SOLEIL SIRIUS KAPPA (Source 1.4586370000000007e-9 m) (fromList [-0.5193202,73.83399863752925,133.64586701159254,-55.35712475482595,-2.23369e-2,80.33702663350934]) (Just [Parameter "mu" (-0.5193202) (Range (-180.0) 180.0),Parameter "komega" 73.83399863752925 (Range (-180.0) 180.0),Parameter "kappa" 133.64586701159254 (Range (-180.0) 180.0),Parameter "kphi" (-55.35712475482595) (Range (-180.0) 180.0),Parameter "delta" (-2.23369e-2) (Range (-180.0) 180.0),Parameter "gamma" 80.33702663350934 (Range (-180.0) 180.0)]) [Engine "hkl" [Parameter "h" 2.7577312257761425e-9 (Range (-1.0) 1.0),Parameter "k" 7.650403950118726e-9 (Range (-1.0) 1.0),Parameter "l" 4.999999999622215 (Range (-1.0) 1.0)] (Mode "bissector_vertical" []),Engine "eulerians" [Parameter "omega" 40.168513316578995 (Range (-180.0) 180.0),Parameter "chi" 89.53300638651663 (Range (-180.0) 180.0),Parameter "phi" 90.9773899242238 (Range (-180.0) 180.0)] (Mode "eulerians" [Parameter "solutions" 1.0 (Range 0.0 1.0)]),Engine "psi" [Parameter "psi" 154.50326819560394 (Range (-180.0) 180.0)] (Mode "psi_vertical_soleil_sirius_kappa" [Parameter "h2" 1.0 (Range (-1.0) 1.0),Parameter "k2" 1.0 (Range (-1.0) 1.0),Parameter "l2" 1.0 (Range (-1.0) 1.0)]),Engine "q2" [Parameter "q" 5.557095242340622 (Range 0.0 1.0),Parameter "alpha" 89.99619673890915 (Range (-180.0) 180.0)] (Mode "q2" []),Engine "qper_qpar" [Parameter "qper" 5.557081132533362 (Range (-1.0) 1.0),Parameter "qpar" 1.2522734784728349e-2 (Range (-1.0) 1.0)] (Mode "qper_qpar" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "tth2" [Parameter "tth" 80.33702737486469 (Range (-180.0) 180.0),Parameter "alpha" 89.99619673890915 (Range (-180.0) 180.0)] (Mode "tth2" []),Engine "incidence" [Parameter "incidence" 40.17045932119529 (Range (-180.0) 180.0),Parameter "azimuth" 89.82724901343079 (Range (-180.0) 180.0)] (Mode "incidence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "emergence" [Parameter "emergence" 40.16632251480728 (Range (-180.0) 180.0),Parameter "azimuth" 89.82724901343079 (Range (-180.0) 180.0)] (Mode "emergence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)])] Geometry SOLEIL SIRIUS KAPPA (Source 1.4586370000000007e-9 m) (fromList [-0.5193202,84.086619565407,134.11156620489382,125.37371040144704,-2.23369e-2,101.43713587367031]) (Just [Parameter "mu" (-0.5193202) (Range (-180.0) 180.0),Parameter "komega" 84.086619565407 (Range (-180.0) 180.0),Parameter "kappa" 134.11156620489382 (Range (-180.0) 180.0),Parameter "kphi" 125.37371040144704 (Range (-180.0) 180.0),Parameter "delta" (-2.23369e-2) (Range (-180.0) 180.0),Parameter "gamma" 101.43713587367031 (Range (-180.0) 180.0)]) [Engine "hkl" [Parameter "h" 8.392762843275724e-10 (Range (-1.0) 1.0),Parameter "k" 2.459154264227675e-9 (Range (-1.0) 1.0),Parameter "l" 6.0000000015375905 (Range (-1.0) 1.0)] (Mode "bissector_vertical" []),Engine "eulerians" [Parameter "omega" 50.718567936651276 (Range (-180.0) 180.0),Parameter "chi" 89.72999512595882 (Range (-180.0) 180.0),Parameter "phi" 272.0056587726913 (Range (-180.0) 180.0)] (Mode "eulerians" [Parameter "solutions" 1.0 (Range 0.0 1.0)]),Engine "psi" [Parameter "psi" (-26.58708882570157) (Range (-180.0) 180.0)] (Mode "psi_vertical_soleil_sirius_kappa" [Parameter "h2" 1.0 (Range (-1.0) 1.0),Parameter "k2" 1.0 (Range (-1.0) 1.0),Parameter "l2" 1.0 (Range (-1.0) 1.0)]),Engine "q2" [Parameter "q" 6.668514293021504 (Range 0.0 1.0),Parameter "alpha" 90.00451897705055 (Range (-180.0) 180.0)] (Mode "q2" []),Engine "qper_qpar" [Parameter "qper" 6.6684973612522915 (Range (-1.0) 1.0),Parameter "qpar" (-1.5027281967821613e-2) (Range (-1.0) 1.0)] (Mode "qper_qpar" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "tth2" [Parameter "tth" 101.43713499280318 (Range (-180.0) 180.0),Parameter "alpha" 90.00451897705055 (Range (-180.0) 180.0)] (Mode "tth2" []),Engine "incidence" [Parameter "incidence" 50.71877816056822 (Range (-180.0) 180.0),Parameter "azimuth" 90.20844936572345 (Range (-180.0) 180.0)] (Mode "incidence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]),Engine "emergence" [Parameter "emergence" 50.71800112341318 (Range (-180.0) 180.0),Parameter "azimuth" 90.20844936572345 (Range (-180.0) 180.0)] (Mode "emergence" [Parameter "x" 0.0 (Range (-1.0) 1.0),Parameter "y" 1.0 (Range (-1.0) 1.0),Parameter "z" 0.0 (Range (-1.0) 1.0)]) #+END_SRC As we can see the phi and kphi motor switch from time to time to another solution which is at around 180° of the other solutions. #+CAPTION: plot the [0,0,1] -> [0,0,6] trajectory from two different starting point and different step size. [[./figures/sirius-s.svg]] #+CAPTION: plot the [0,0,1] -> [0,0,6] idem previous figure but move the diffractometer. [[./figures/sirius-m.svg]] #+CAPTION: zoom on the 2 solutions. [[./figures/sirius-m-zoom.svg]] #+CAPTION: plot the [0,0,1] -> [0,0,6] for different number of steps [[./figures/traj_n.svg]] *** TODO [0/2] PetraIII **** TODO computation problem Dear Teresa, Using the prruptest.txt ubmatrix I see that the value of psi is offset by 45 degrees. I expect it to be 0 degrees when azimuth reference vector is 0 0 1 that is along the beam. See below thereturned numbers. This might have to do with the definition of the beam axis in the controller. Otherwise now when I change reference vector by 90 degrees the computed value is changed by 90 degrees. That is a progress. Can you contact Frederic and ask him about this ? Best regards, Sonia See below p09/door/haspp09.01 [9]: setaz 1 0 0 p09/door/haspp09.01 [10]: wh Engine: hkl Mode: psi_constant_vertical H K L = 0.00000 3.00605 -0.00000 Ref = 1.00000 0.00000 0.00000 Azimuth (Psi - calculated) = -45.00005 Azimuth (Psi - set) = 0.00000 Wavelength = 2.07957 Delta Theta Chi Phi Mu Gamma 45.77575 22.88783 90.00000 182.85400 0.00000 -0.00000 p09/door/haspp09.01 [11]: setaz 0 0 1 p09/door/haspp09.01 [12]: wh Engine: hkl Mode: psi_constant_vertical H K L = 0.00000 3.00605 -0.00000 Ref = 0.00000 0.00000 1.00000 Azimuth (Psi - calculated) = -135.00005 Azimuth (Psi - set) = 0.00000 Wavelength = 2.07957 Delta Theta Chi Phi Mu Gamma 45.77575 22.88783 90.00000 182.85400 0.00000 -0.00000 where: Azimuth (Psi - calculated) is the value of the pseudomotor psi. Azimuth (Psi - set) is the value set in the parameter psi of the current mode. Hi Frederic, This is the UB matrix: Best regards, Sonia Created at 2015-01-21 12:35 Crystal prruptest Wavelength 2.07957463938 A 8.03656 B 8.03656 C 8.03656 Alpha 90.0 Beta 90.0 Gamma 90.0 R0 0 0.0 1.0 0.0 0 1 0.0 14.8979 90.0 182.854 0.0 29.7959 R1 1 1.0 0.0 1.0 0 1 0.0 14.8979 0.0 182.854 0.0 29.7959 Mode psi_constant_vertical PsiRef 0.0 0.0 1.0 U00 -0.580 U01 0.000 U02 0.525 U10 0.000 U11 0.782 U12 -0.000 U20 -0.525 U21 -0.000 U22 -0.580 Ux 179.999952315 Uy 42.14605 Uz -179.999932647 SaveDirectory /home/p09user/crystals/ **** TODO another question J'ai un probleme avec la position que le controlleur calcule avec la matrice UB que nous t'avons envoye. See sequence of emails echanges avec Teresa. >>>> I am at 0 3.00605 0 with phi -182 and psi calculated is -135 >>>> When I freeze psi at -135 and type ca 0 3.00605 0 the controller >> should return to me the positions at which I am. But no he tells me that I >> have to go to 178 degrees in phi that is turning by 360 degrees. Est-ce un probleme avec la trajectoire selectionnee ? Est-ce qu'il est possible de definir des cut-points comme dans spec avec ta librairie ? *** TODO [2/4] HklParameter - [X] method to use min/max to check for the validity - [X] add a method to get the axis_v and quaternion of the HklAxis this method will return NULL if this is not relevant. hkl_parameter_axis_v_get and hkl_parameter_quaternion_get - [ ] degenerated an axis is degenerated if its position have no effect on the HklPseudoAxis calculus. Add a degenerated member to the axis. that way it would be possible to check a posteriori for this degenerescencence. - [ ] Add a description for each parameters. *** TODO This will help for the documentation and the gui. *** TODO HklGeometryList different method to help select a solution. this select solution can depend on the geometry for example the kappa axis must be in one side of the plane. *** TODO add a fit on the Hklaxis offsets. *** TODO API to put a detector and a sample on the Geometry. *** TODO HklSample **** TODO [#B] unit test: hkl_sample_affine. Check this: lattice=1.540000;1.540000;1.540000;90.000000;90.000000;90.000000;0;0;0;0;0;0 uxuyuz=0.000000;0.000000;0.000000 reflection=1.540000;0.159010;1.256718;0.796660;1;0.000000;0.000000;0.000000;0.000000;0.000000 reflection=1.540000;0.206208;0.342357;-0.080346;1;0.000000;0.000000;0.000000;0.000000;0.000000 reflection=1.540000;0.206208;0.342357;-0.080346;1;0.000000;0.000000;0.000000;0.000000;0.000000 A, B, C, Alpha, Beta, Gamma, Ux, Uy, Uy: 17764892.133, 5793679.092, 15733785.198, 179.997, 179.999,452408725.23, -575727594.04, -1913661011.01 (affine) 1rst finetness all the reflections are non collinear the affine method should warn the user about this. *** TODO HklEngine "zone" *** TODO HklEngine "custom" for now this pseudoaxis let you select the axis you want to use for the computation. *** TODO HklEngine "q/q2" add a "reflectivity" mode This mode should have the surface as parameters and the incident angle is equal to the emergence angle. *** TODO create a macro to help compare two real the right way fabs(a-b) < epsilon * max(1, abs(a), abs(b)) *** TODO add an hkl_sample_set_lattice_unit() *** TODO SOLEIL SIXS **** DONE find the right solutions. :zaxis: The cosinus and sinus properties are not enough to find the solution expected by the users. The idea is to use the Ewalds construction to generate a valid solution from the first one obtain numerically. The basic idea is to rotate the hkl vector around the last axis of the sample holder until it intersect again the Ewalds sphere. Then we just need to fit the detector position. This way the solution can be entirely generic (not geometry specific). Nevertheless it is necessary to propose this only for the hkl pseudo axes. I will add this special feature in the Mode. So it will be possible to add thoses special cases easily. **** TODO Add the DEP diffractometer geometry This diffractometer is a Newport one based on the kappa 6 circles ones. But instead of a kappa head, they use an Hexapod head. This head can be put horizontally or vertically. *** TODO generalisation of the z-axis hkl solver first we need the degenerated member of the Axis. thaht way it could be possible to find the last non degenerated axis for the detector fit. *** TODO investigate the prigo geometry. *** TODO augeas/elektra for the plugin configure part. *** TODO logging **** TODO [1/2] add in a few methods. + [X] hkl_pseudo_axes_values_set + [ ] hkl_sample_affine **** TODO gir logging It would be nice to generate the library logging using the .gir information. So instead of writing the logging code for each method, it would be better to have a generic method for this purpose. **** TODO parsable logging information. A parsable logging format would help to setup some re-play unit test. This way it could help during the developpement process (modification of the hkl internals) to be confident that computation are ok. *** TODO performances + Investigate [[http://liboil.freedesktop.org/wiki/][liboil]] to speed calculation (in HklVector, HklMatrix and HklQuaternion) + Avoid to call =hkl_engine_prepare_internal= at each computation. ** documentation *** TODO [1/6] rewrite documentation in org-mode - [-] embedding code into the org file - [-] [1/4] python - [X] auto generation of the diffractometer descriptions - [ ] trajectories explanations - [ ] trajectories tests. - [ ] unit tests output ? - [ ] asymptote - [X] need to check if templates could be generated using the hkl python binding for all diffractometer geometries. - [ ] need to add a description for the diffractometer, the mode, the parameters. - [ ] need a nice css for the generated doc. - [ ] check if org-info.js could be usefull - [ ] add documentation explaining the sector-cuts a la hkl ** [0/3] gui - [ ] change the color of fitparameter cells if they differ from the current sample values - [ ] check if a [[https://github.com/jonathanslenders/python-prompt-toolkit/tree/master/examples/tutorial][REPL]] could be integrated to provide an autocad like interface. - [ ] add tooltips using hkl_parameter_description_get for the pseudo axes and the mode parameters. ** hkl3d *** TODO add a method to find the 3D models in the right directories. ** packaging *** TODO add a .spec file for rpm generation. hkl-5.0.0.2449/Documentation/Makefile.am0000644000175000017500000000153213236600666017771 0ustar00piccapicca00000000000000SUBDIRS=api figures sphinx AM_LDFLAGS = $(top_builddir)/hkl/libhkl.la dist_html_DATA=hkl.html hkl.html: hkl.org $(srcdir)/hkl-default.el env GI_TYPELIB_PATH=$(top_builddir)/hkl \ $(LIBTOOL) --mode=execute -dlopen $(AM_LDFLAGS) \ $(EMACS) $< --batch -q --load $(srcdir)/hkl-default.el -f org-html-export-to-html --debug-init --kill EXTRA_DIST=hkl-default.el css/style.css CLEANFILES=hkl.html doc-edit: env GI_TYPELIB_PATH=$(top_builddir)/hkl \ $(LIBTOOL) --mode=execute -dlopen $(AM_LDFLAGS) \ $(EMACS) hkl.org.in -q --load $(srcdir)/hkl-default.el doc-show: hkl.html sensible-browser $(builddir)/hkl.html doc-publish: hkl.html env GI_TYPELIB_PATH=$(top_builddir)/hkl \ $(LIBTOOL) --mode=execute -dlopen $(AM_LDFLAGS) \ $(EMACS) $< --batch -q --load $(srcdir)/hkl-default.el -f org-publish-all --debug-init --kill .PHONY: doc-edit doc-show hkl-5.0.0.2449/Documentation/css/0000755000175000017500000000000013237020543016513 5ustar00piccapicca00000000000000hkl-5.0.0.2449/Documentation/css/style.css0000644000175000017500000001501413211074262020365 0ustar00piccapicca00000000000000body { font-family: Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.4; color: #33333f; } code { font-family: "Inconsolata", monospace; font-size: 16px; } p>code, li>code { background-color: #eee; padding: 0.25em; } h1, h2, h3 { font-family: "Roboto Slab", Helvetica, Arial, sans-serif; } h2 { border-bottom: 1px solid #f0c; padding-bottom: 0.5em; font-size: 1.75em; } h3 { margin-top: 2em; font-size: 1.5em; } h4 { font-size: 1.25em; } h5 { font-size: 1em; } h2 code, h3 code, h4 code, h5 code, td code { font-family: inherit !important; font-size: inherit !important; } td code { font-weight: bold; } a:link, a:hover, a:visited { text-decoration: none; color: black; } a:link { background: #ff8; } a:visited { color: #666; background: #ffc; } a:link:hover, a:visited:hover { background: #ff0; } a[href^="http"] { background: #bff; } a[href^="http"]:visited { background: #dff; } a[href^="http"]:link:hover, a[href^="http"]:visited:hover { background: #0ff; } a[href^="http"]:after { content: "\21B3"; background: white; padding-left: 0.2em; } #meta { margin-top: 2em; } #table-of-contents a:link, #table-of-contents a:visited { color: black; background: transparent; } #table-of-contents { line-height: 1.2; } #table-of-contents h2 { border-bottom: 0; } #table-of-contents ul { list-style: none; padding-left:0; font-weight: normal; } #table-of-contents div>ul>li { margin-top: 1em; font-weight: bold; } #table-of-contents .tag { display: none; } #table-of-contents .todo, #table-of-contents .done { font-size: 80%; } #table-of-contents ol>li { margin-top: 1em; } table { width: 100%; } table, th, td { border: 1px solid #666; } th, td { padding: 0.5em; text-align: left; } tbody tr:nth-child(odd) { background-color: #eee; } img { max-width: 90%; } div.notice { position: relative; margin: 0 1.2em; padding: 0.25em 1em; border-left: 4px solid; } table + div.notice { margin-top: 2em; } div.notice a { background: transparent !important; border-bottom: 1px dotted; } div.notice a[href^="http"]:after { background: transparent !important; } div.notice:before { position: absolute; top: 0; right: 0; padding: 0.25em 0.5em 0; font-size: 60%; border-bottom-left-radius: 0.5em; } .notice-warning { background: #fcc; color: #600; } .notice-example { background: #def; color: #069; } .notice-info { background: #efe; color: #060; } .notice-warning a { color: #600; } .notice-example a { color: #069; } .notice-info a { color: #060; } div.notice-warning:before { content: "WARNING"; background: #c99; color: #fcc; } div.notice-example:before { content: "EXAMPLE"; background: #abc; color: #def; } div.notice-info:before { content: "INFO"; background: #9c9; color: #efe; } pre { font-family: Inconsolata; border: 0; box-shadow: none; } pre.example:before { content: "Properties"; display: block; border-bottom: 1px dotted; margin-bottom: 1em; } pre.example { background: #fec; color: #666; font-size: 0.85em; } pre { background-color: #f8f8f8; background-size: 8px 8px; background-image: linear-gradient(135deg, transparent 25%, rgba(0, 0, 0, 0.02) 25%, rgba(0, 0, 0, 0.02) 50%, transparent 50%, transparent 75%, rgba(0, 0, 0, 0.02) 75%, rgba(0, 0, 0, 0.02)); } pre.src { padding: 0.5em; } pre.src:before { display: block; position: absolute; background-color: #ccccd0; top: 0; right: 0; padding: 0.25em 0.5em; border-bottom-left-radius: 8px; border: 0; color: white; font-size: 80%; } pre.src-plantuml:before { content: "UML"; } pre.src-javascript:before { content: "JS"; } pre.src-clojure:before { content: "CLJ"; } pre.src-c:before { content: "C"; } span.org-string { color: #f94; } span.org-keyword { color: #c07; } span.org-variable-name { color: #f04; } span.org-clojure-keyword { color: #09f; } span.org-comment, span.org-comment-delimiter { color: #999; } span.org-rainbow-delimiters-depth-1, span.org-rainbow-delimiters-depth-5 { color: #666; } span.org-rainbow-delimiters-depth-2, span.org-rainbow-delimiters-depth-6 { color: #888; } span.org-rainbow-delimiters-depth-3, span.org-rainbow-delimiters-depth-7 { color: #aaa; } span.org-rainbow-delimiters-depth-4, span.org-rainbow-delimiters-depth-8 { color: #ccc; } div.figure { font-size: 0.85em; } .tag { font-family: "Roboto Slab", Helvetica, Arial, sans-serif; font-size: 11px; font-weight: normal; float: right; margin-top: 1em; background: transparent; } .tag span { background: #ccc; padding: 0 0.5em; border-radius: 0.2em; color: white; } .todo, .done { font-family: "Roboto Slab", Helvetica, Arial, sans-serif; font-weight: normal; padding: 0 0.25em; border-radius: 0.2em; } .todo { background: #f04; color: white; } .done { background: #5f7; color: white; } @media screen { h1.title { text-align: left; margin: 1em 0 0 280px; } h2 { margin-top: 3em; } #table-of-contents { position: fixed; top: 0; left: 0; padding: 2em 0 2em 2em; width: 240px; height: 100vh; font-size: 11px; background: #eee; overflow: auto; } #table-of-contents ul>li>ul>li>ul>li { display: none; } #table-of-contents h2 { margin-top: 0; } #table-of-contents code { font-size: 12px; } div.outline-2, #footnotes { margin-left: 280px; max-width: 960px; } } @media screen and (max-width: 1024px) { html, body { font-size: 14px; } #table-of-contents { display: none; } h1.title { margin-left: 5%; } div.outline-2, #footnotes { margin-left: 5%; max-width: 90%; } } @media print { body { color: black; } @page { margin: 25mm; } h2, h3 { page-break-before: always; margin-top: 0; } table { page-break-inside: avoid; } a:visited { color: black; background: #ff8; } a[href^="http"]:visited { background: #bff; } div.notice:before { display: none; } }hkl-5.0.0.2449/Documentation/Makefile.in0000644000175000017500000005545213237017632020010 0ustar00piccapicca00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = Documentation ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_html_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = hkl.org CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(htmldir)" DATA = $(dist_html_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/hkl.org.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASY = @ASY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BULLET_CFLAGS = @BULLET_CFLAGS@ BULLET_LIBS = @BULLET_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMACS = @EMACS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ G3D_CFLAGS = @G3D_CFLAGS@ G3D_LIBS = @G3D_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GNUPLOT = @GNUPLOT@ GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ GOBJECT_LIBS = @GOBJECT_LIBS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTKGLEXT_CFLAGS = @GTKGLEXT_CFLAGS@ GTKGLEXT_LIBS = @GTKGLEXT_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HDF5_CFLAGS = @HDF5_CFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VMAJ = @VMAJ@ YAML_CFLAGS = @YAML_CFLAGS@ YAML_LIBS = @YAML_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ release_info = @release_info@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ version_info = @version_info@ SUBDIRS = api figures sphinx AM_LDFLAGS = $(top_builddir)/hkl/libhkl.la dist_html_DATA = hkl.html EXTRA_DIST = hkl-default.el css/style.css CLEANFILES = hkl.html all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Documentation/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Documentation/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): hkl.org: $(top_builddir)/config.status $(srcdir)/hkl.org.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_htmlDATA: $(dist_html_DATA) @$(NORMAL_INSTALL) @list='$(dist_html_DATA)'; test -n "$(htmldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done uninstall-dist_htmlDATA: @$(NORMAL_UNINSTALL) @list='$(dist_html_DATA)'; test -n "$(htmldir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(htmldir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(htmldir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dist_htmlDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-dist_htmlDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_htmlDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-dist_htmlDATA .PRECIOUS: Makefile hkl.html: hkl.org $(srcdir)/hkl-default.el env GI_TYPELIB_PATH=$(top_builddir)/hkl \ $(LIBTOOL) --mode=execute -dlopen $(AM_LDFLAGS) \ $(EMACS) $< --batch -q --load $(srcdir)/hkl-default.el -f org-html-export-to-html --debug-init --kill doc-edit: env GI_TYPELIB_PATH=$(top_builddir)/hkl \ $(LIBTOOL) --mode=execute -dlopen $(AM_LDFLAGS) \ $(EMACS) hkl.org.in -q --load $(srcdir)/hkl-default.el doc-show: hkl.html sensible-browser $(builddir)/hkl.html doc-publish: hkl.html env GI_TYPELIB_PATH=$(top_builddir)/hkl \ $(LIBTOOL) --mode=execute -dlopen $(AM_LDFLAGS) \ $(EMACS) $< --batch -q --load $(srcdir)/hkl-default.el -f org-publish-all --debug-init --kill .PHONY: doc-edit doc-show # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: hkl-5.0.0.2449/configure0000755000175000017500000251645413237017626015052 0ustar00piccapicca00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for hkl 5.0.0.2449. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: picca@synchrotron-soleil.fr about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='hkl' PACKAGE_TARNAME='hkl' PACKAGE_VERSION='5.0.0.2449' PACKAGE_STRING='hkl 5.0.0.2449' PACKAGE_BUGREPORT='picca@synchrotron-soleil.fr' PACKAGE_URL='' ac_unique_file="config.h.in" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS HDF5_LIBS HDF5_CFLAGS CONTRIB_FALSE CONTRIB_TRUE GOBJECT_LIBS GOBJECT_CFLAGS HAVE_INTROSPECTION_FALSE HAVE_INTROSPECTION_TRUE INTROSPECTION_MAKEFILE INTROSPECTION_LIBS INTROSPECTION_CFLAGS INTROSPECTION_TYPELIBDIR INTROSPECTION_GIRDIR INTROSPECTION_GENERATE INTROSPECTION_COMPILER INTROSPECTION_SCANNER GTKGLEXT_LIBS GTKGLEXT_CFLAGS GLU_LIBS GLU_CFLAGS GTK_LIBS GTK_CFLAGS GUI_FALSE GUI_TRUE YAML_LIBS YAML_CFLAGS BULLET_LIBS BULLET_CFLAGS G3D_LIBS G3D_CFLAGS HKL3D_FALSE HKL3D_TRUE GTK_DOC_USE_REBASE_FALSE GTK_DOC_USE_REBASE_TRUE GTK_DOC_USE_LIBTOOL_FALSE GTK_DOC_USE_LIBTOOL_TRUE GTK_DOC_BUILD_PDF_FALSE GTK_DOC_BUILD_PDF_TRUE GTK_DOC_BUILD_HTML_FALSE GTK_DOC_BUILD_HTML_TRUE ENABLE_GTK_DOC_FALSE ENABLE_GTK_DOC_TRUE HAVE_GTK_DOC_FALSE HAVE_GTK_DOC_TRUE GTKDOC_DEPS_LIBS GTKDOC_DEPS_CFLAGS HTML_DIR GTKDOC_MKPDF GTKDOC_REBASE GTKDOC_CHECK_PATH GTKDOC_CHECK GNUPLOT EMACS ASY HKL_DOC_FALSE HKL_DOC_TRUE LOGGING_FALSE LOGGING_TRUE LIBOBJS ALLOCA GLIB_COMPILE_RESOURCES GLIB_MKENUMS GOBJECT_QUERY GLIB_GENMARSHAL GLIB_LIBS GLIB_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG GSL_LIBS GSL_CFLAGS GSL_CONFIG VMAJ release_info version_info CXXCPP LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL ac_ct_AR AR DLLTOOL OBJDUMP NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL RANLIB LN_S CPP am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock with_gsl_prefix with_gsl_exec_prefix enable_gsltest enable_glibtest enable_logging enable_hkl_doc with_html_dir enable_gtk_doc enable_gtk_doc_html enable_gtk_doc_pdf enable_hkl3d enable_gui enable_introspection enable_contrib ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CXX CXXFLAGS CCC CPP LT_SYS_LIBRARY_PATH CXXCPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR GTKDOC_DEPS_CFLAGS GTKDOC_DEPS_LIBS G3D_CFLAGS G3D_LIBS BULLET_CFLAGS BULLET_LIBS GTK_CFLAGS GTK_LIBS GLU_CFLAGS GLU_LIBS GTKGLEXT_CFLAGS GTKGLEXT_LIBS GOBJECT_CFLAGS GOBJECT_LIBS HDF5_CFLAGS HDF5_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures hkl 5.0.0.2449 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/hkl] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of hkl 5.0.0.2449:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-gsltest Do not try to compile and run a test GSL program --disable-glibtest do not try to compile and run a test GLIB program --enable-logging enable the glib logging --disable-hkl-doc build documentation --enable-gtk-doc use gtk-doc to build documentation [[default=no]] --enable-gtk-doc-html build documentation in html format [[default=yes]] --enable-gtk-doc-pdf build documentation in pdf format [[default=no]] --enable-hkl3d compile the hkl3d library --disable-gui do not compile the gui interface --enable-introspection=[no/auto/yes] Enable introspection for this build --enable-contrib compile the contrib part Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-gsl-prefix=PFX Prefix where GSL is installed (optional) --with-gsl-exec-prefix=PFX Exec prefix where GSL is installed (optional) --with-html-dir=PATH path to installed docs Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags CPP C preprocessor LT_SYS_LIBRARY_PATH User-defined run-time library search path. CXXCPP C++ preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path GTKDOC_DEPS_CFLAGS C compiler flags for GTKDOC_DEPS, overriding pkg-config GTKDOC_DEPS_LIBS linker flags for GTKDOC_DEPS, overriding pkg-config G3D_CFLAGS C compiler flags for G3D, overriding pkg-config G3D_LIBS linker flags for G3D, overriding pkg-config BULLET_CFLAGS C compiler flags for BULLET, overriding pkg-config BULLET_LIBS linker flags for BULLET, overriding pkg-config GTK_CFLAGS C compiler flags for GTK, overriding pkg-config GTK_LIBS linker flags for GTK, overriding pkg-config GLU_CFLAGS C compiler flags for GLU, overriding pkg-config GLU_LIBS linker flags for GLU, overriding pkg-config GTKGLEXT_CFLAGS C compiler flags for GTKGLEXT, overriding pkg-config GTKGLEXT_LIBS linker flags for GTKGLEXT, overriding pkg-config GOBJECT_CFLAGS C compiler flags for GOBJECT, overriding pkg-config GOBJECT_LIBS linker flags for GOBJECT, overriding pkg-config HDF5_CFLAGS C compiler flags for HDF5, overriding pkg-config HDF5_LIBS linker flags for HDF5, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF hkl configure 5.0.0.2449 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------------------ ## ## Report this to picca@synchrotron-soleil.fr ## ## ------------------------------------------ ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_find_intX_t LINENO BITS VAR # ----------------------------------- # Finds a signed integer type with width BITS, setting cache variable VAR # accordingly. ac_fn_c_find_intX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 $as_echo_n "checking for int$2_t... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in int$2_t 'int' 'long int' \ 'long long int' 'short int' 'signed char'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int main () { static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int main () { static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else case $ac_type in #( int$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if eval test \"x\$"$3"\" = x"no"; then : else break fi done fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_intX_t # ac_fn_c_find_uintX_t LINENO BITS VAR # ------------------------------------ # Finds an unsigned integer type with width BITS, setting cache variable VAR # accordingly. ac_fn_c_find_uintX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 $as_echo_n "checking for uint$2_t... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : case $ac_type in #( uint$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if eval test \"x\$"$3"\" = x"no"; then : else break fi done fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_uintX_t cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by hkl $as_me 5.0.0.2449, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" ac_aux_dir= for ac_dir in config "$srcdir"/config; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. am__api_version='1.15' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='hkl' VERSION='5.0.0.2449' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar plaintar pax cpio none' # The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 $as_echo_n "checking whether UID '$am_uid' is supported by ustar format... " >&6; } if test $am_uid -le $am_max_uid; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } _am_tools=none fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 $as_echo_n "checking whether GID '$am_gid' is supported by ustar format... " >&6; } if test $am_gid -le $am_max_gid; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } _am_tools=none fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 $as_echo_n "checking how to create a ustar tar archive... " >&6; } # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_ustar-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do { echo "$as_me:$LINENO: $_am_tar --version" >&5 ($_am_tar --version) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && break done am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x ustar -w "$$tardir"' am__tar_='pax -L -x ustar -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H ustar -L' am__tar_='find "$tardir" -print | cpio -o -H ustar -L' am__untar='cpio -i -H ustar -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_ustar}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -rf conftest.dir if test -s conftest.tar; then { echo "$as_me:$LINENO: $am__untar &5 ($am__untar &5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 (cat conftest.dir/file) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir if ${am_cv_prog_tar_ustar+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_prog_tar_ustar=$_am_tool fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 $as_echo "$am_cv_prog_tar_ustar" >&6; } # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # Checks for programs. for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 $as_echo_n "checking for $CC option to accept ISO C99... " >&6; } if ${ac_cv_prog_cc_c99+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static void test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str; int number; float fnumber; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); } int main () { // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ; return 0; } _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c99" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c99" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 $as_echo "$ac_cv_prog_cc_c99" >&6; } ;; esac if test "x$ac_cv_prog_cc_c99" != xno; then : fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.6' macro_revision='2.4.6' ltmain=$ac_aux_dir/ltmain.sh # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case $ECHO in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n "$lt_cv_sys_max_cmd_len"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 $as_echo "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 $as_echo_n "checking for a working dd... " >&6; } if ${ac_cv_path_lt_DD+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then ac_path_lt_DD_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in dd; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi $ac_path_lt_DD_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_lt_DD"; then : fi else ac_cv_path_lt_DD=$lt_DD fi rm -f conftest.i conftest2.i conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 $as_echo "$ac_cv_path_lt_DD" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 $as_echo_n "checking how to truncate binary pipes... " >&6; } if ${lt_cv_truncate_bin+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 $as_echo "$lt_cv_truncate_bin" >&6; } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[012][,.]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done func_stripname_cnf () { case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%$2\$%%"`;; esac } # func_stripname_cnf # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac else pic_mode=default fi # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac else enable_fast_install=yes fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 $as_echo_n "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. if test "${with_aix_soname+set}" = set; then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; *) as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 ;; esac lt_cv_with_aix_soname=$with_aix_soname else if ${lt_cv_with_aix_soname+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 $as_echo "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o func_cc_basename $compiler cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/${ac_tool_prefix}file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC=$CC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test yes = "$GCC"; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi lt_prog_compiler_pic='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test no = "$hard_links"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs=yes ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) export_dynamic_flag_spec='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test no = "$ld_shlibs"; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct=no hardcode_direct_absolute=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' $wl-bernotok' allow_undefined_flag=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test yes = "$GCC"; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi link_all_deplibs=no else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler ld_shlibs=yes archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' else archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; osf3*) if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test yes = "$GCC"; then wlarc='$wl' archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='$wl-z,text' allow_undefined_flag='$wl-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen=shl_load else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen=dlopen else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi fi fi fi fi fi ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report what library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC func_cc_basename $compiler cc_basename=$func_cc_basename_result if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec_CXX='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. no_undefined_flag_CXX='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' $wl-bernotok' allow_undefined_flag_CXX=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes archive_expsym_cmds_CXX='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='$wl--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" if test yes != "$lt_cv_apple_cc_single_mod"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi else ld_shlibs_CXX=no fi ;; os2*) hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_minus_L_CXX=yes allow_undefined_flag_CXX=unsupported shrext_cmds=.dll archive_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes_CXX=yes ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='$wl-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' export_dynamic_flag_spec_CXX='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='$wl-E' whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then no_undefined_flag_CXX=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='$wl-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='$wl-z,text' allow_undefined_flag_CXX='$wl-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='$wl-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no GCC_CXX=$GXX LD_CXX=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX=$prev$p else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX=$prev$p else postdeps_CXX="${postdeps_CXX} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$predep_objects_CXX"; then predep_objects_CXX=$p else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX=$p else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi lt_prog_compiler_pic_CXX='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static_CXX='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test no = "$hard_links"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs_CXX=no ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec_CXX='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test yes = "$hardcode_automatic_CXX"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct_CXX" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && test no != "$hardcode_minus_L_CXX"; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test relink = "$hardcode_action_CXX" || test yes = "$inherit_rpath_CXX"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## cat >>confdefs.h <<_ACEOF #define VMAJ 5 _ACEOF cat >>confdefs.h <<_ACEOF #define VMIN 0 _ACEOF cat >>confdefs.h <<_ACEOF #define VMIC 0 _ACEOF cat >>confdefs.h <<_ACEOF #define VREV 2449 _ACEOF version_info="5:0:0" release_info="" ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## VMAJ=5 # activate all the warnings ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking CFLAGS for maximum warnings" >&5 $as_echo_n "checking CFLAGS for maximum warnings... " >&6; } if ${ac_cv_cflags_warn_all+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_cflags_warn_all="no, unknown" ac_save_CFLAGS="$CFLAGS" for ac_arg in "-warn all % -warn all" "-pedantic % -Wall" "-xstrconst % -v" "-std1 % -verbose -w0 -warnprotos" "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" "-ansi -ansiE % -fullwarn" "+ESlit % +w1" "-Xc % -pvctl,fullmsg" "-h conform % -h msglevel 2" # do CFLAGS="$ac_save_CFLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_cflags_warn_all=`echo $ac_arg | sed -e 's,.*% *,,'` ; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done CFLAGS="$ac_save_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cflags_warn_all" >&5 $as_echo "$ac_cv_cflags_warn_all" >&6; } case ".$ac_cv_cflags_warn_all" in .ok|.ok,*) ;; .|.no|.no,*) ;; *) if ${CFLAGS+:} false; then : case " $CFLAGS " in #( *" $ac_cv_cflags_warn_all "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$ac_cv_cflags_warn_all"; } >&5 (: CFLAGS already contains $ac_cv_cflags_warn_all) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append CFLAGS " $ac_cv_cflags_warn_all" { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else CFLAGS=$ac_cv_cflags_warn_all { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking CXXFLAGS for maximum warnings" >&5 $as_echo_n "checking CXXFLAGS for maximum warnings... " >&6; } if ${ac_cv_cxxflags_warn_all+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_cxxflags_warn_all="no, unknown" ac_save_CXXFLAGS="$CXXFLAGS" for ac_arg in "-warn all % -warn all" "-pedantic % -Wall" "-xstrconst % -v" "-std1 % -verbose -w0 -warnprotos" "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" "-ansi -ansiE % -fullwarn" "+ESlit % +w1" "-Xc % -pvctl,fullmsg" "-h conform % -h msglevel 2" # do CXXFLAGS="$ac_save_CXXFLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_cxxflags_warn_all=`echo $ac_arg | sed -e 's,.*% *,,'` ; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done CXXFLAGS="$ac_save_CXXFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxxflags_warn_all" >&5 $as_echo "$ac_cv_cxxflags_warn_all" >&6; } case ".$ac_cv_cxxflags_warn_all" in .ok|.ok,*) ;; .|.no|.no,*) ;; *) if ${CXXFLAGS+:} false; then : case " $CXXFLAGS " in #( *" $ac_cv_cxxflags_warn_all "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : CXXFLAGS already contains \$ac_cv_cxxflags_warn_all"; } >&5 (: CXXFLAGS already contains $ac_cv_cxxflags_warn_all) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append CXXFLAGS " $ac_cv_cxxflags_warn_all" { { $as_echo "$as_me:${as_lineno-$LINENO}: : CXXFLAGS=\"\$CXXFLAGS\""; } >&5 (: CXXFLAGS="$CXXFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else CXXFLAGS=$ac_cv_cxxflags_warn_all { { $as_echo "$as_me:${as_lineno-$LINENO}: : CXXFLAGS=\"\$CXXFLAGS\""; } >&5 (: CXXFLAGS="$CXXFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Checks for libraries. # Check whether --with-gsl-prefix was given. if test "${with_gsl_prefix+set}" = set; then : withval=$with_gsl_prefix; gsl_prefix="$withval" else gsl_prefix="" fi # Check whether --with-gsl-exec-prefix was given. if test "${with_gsl_exec_prefix+set}" = set; then : withval=$with_gsl_exec_prefix; gsl_exec_prefix="$withval" else gsl_exec_prefix="" fi # Check whether --enable-gsltest was given. if test "${enable_gsltest+set}" = set; then : enableval=$enable_gsltest; else enable_gsltest=yes fi if test "x${GSL_CONFIG+set}" != xset ; then if test "x$gsl_prefix" != x ; then GSL_CONFIG="$gsl_prefix/bin/gsl-config" fi if test "x$gsl_exec_prefix" != x ; then GSL_CONFIG="$gsl_exec_prefix/bin/gsl-config" fi fi # Extract the first word of "gsl-config", so it can be a program name with args. set dummy gsl-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GSL_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $GSL_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_GSL_CONFIG="$GSL_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GSL_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GSL_CONFIG" && ac_cv_path_GSL_CONFIG="no" ;; esac fi GSL_CONFIG=$ac_cv_path_GSL_CONFIG if test -n "$GSL_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GSL_CONFIG" >&5 $as_echo "$GSL_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi min_gsl_version=0.2.5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GSL - version >= $min_gsl_version" >&5 $as_echo_n "checking for GSL - version >= $min_gsl_version... " >&6; } no_gsl="" if test "$GSL_CONFIG" = "no" ; then no_gsl=yes else GSL_CFLAGS=`$GSL_CONFIG --cflags` GSL_LIBS=`$GSL_CONFIG --libs` gsl_major_version=`$GSL_CONFIG --version | \ sed 's/^\([0-9]*\).*/\1/'` if test "x${gsl_major_version}" = "x" ; then gsl_major_version=0 fi gsl_minor_version=`$GSL_CONFIG --version | \ sed 's/^\([0-9]*\)\.\{0,1\}\([0-9]*\).*/\2/'` if test "x${gsl_minor_version}" = "x" ; then gsl_minor_version=0 fi gsl_micro_version=`$GSL_CONFIG --version | \ sed 's/^\([0-9]*\)\.\{0,1\}\([0-9]*\)\.\{0,1\}\([0-9]*\).*/\3/'` if test "x${gsl_micro_version}" = "x" ; then gsl_micro_version=0 fi if test "x$enable_gsltest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GSL_CFLAGS" LIBS="$LIBS $GSL_LIBS" rm -f conf.gsltest if test "$cross_compiling" = yes; then : echo $ac_n "cross compiling; assumed OK... $ac_c" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include char* my_strdup (const char *str); char* my_strdup (const char *str) { char *new_str; if (str) { new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); strcpy (new_str, str); } else new_str = NULL; return new_str; } int main (void) { int major = 0, minor = 0, micro = 0; int n; char *tmp_version; system ("touch conf.gsltest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = my_strdup("$min_gsl_version"); n = sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) ; if (n != 2 && n != 3) { printf("%s, bad version string\n", "$min_gsl_version"); exit(1); } if (($gsl_major_version > major) || (($gsl_major_version == major) && ($gsl_minor_version > minor)) || (($gsl_major_version == major) && ($gsl_minor_version == minor) && ($gsl_micro_version >= micro))) { exit(0); } else { exit(1); } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else no_gsl=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gsl" = x ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$GSL_CONFIG" = "no" ; then echo "*** The gsl-config script installed by GSL could not be found" echo "*** If GSL was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the GSL_CONFIG environment variable to the" echo "*** full path to gsl-config." else if test -f conf.gsltest ; then : else echo "*** Could not run GSL test program, checking why..." CFLAGS="$CFLAGS $GSL_CFLAGS" LIBS="$LIBS $GSL_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GSL or finding the wrong" echo "*** version of GSL. If it is not finding GSL, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GSL was incorrectly installed" echo "*** or that you have moved GSL since it was installed. In the latter case, you" echo "*** may want to edit the gsl-config script: $GSL_CONFIG" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi # GSL_CFLAGS="" # GSL_LIBS="" : fi rm -f conf.gsltest # Check whether --enable-glibtest was given. if test "${enable_glibtest+set}" = set; then : enableval=$enable_glibtest; else enable_glibtest=yes fi pkg_config_args=glib-2.0 for module in . do case "$module" in gmodule) pkg_config_args="$pkg_config_args gmodule-2.0" ;; gmodule-no-export) pkg_config_args="$pkg_config_args gmodule-no-export-2.0" ;; gobject) pkg_config_args="$pkg_config_args gobject-2.0" ;; gthread) pkg_config_args="$pkg_config_args gthread-2.0" ;; gio*) pkg_config_args="$pkg_config_args $module-2.0" ;; esac done if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.16 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi no_glib="" if test "x$PKG_CONFIG" = x ; then no_glib=yes PKG_CONFIG=no fi min_glib_version=2.0.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB - version >= $min_glib_version" >&5 $as_echo_n "checking for GLIB - version >= $min_glib_version... " >&6; } if test x$PKG_CONFIG != xno ; then ## don't try to run the test against uninstalled libtool libs if $PKG_CONFIG --uninstalled $pkg_config_args; then echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH" enable_glibtest=no fi if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then : else no_glib=yes fi fi if test x"$no_glib" = x ; then GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0` GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0` GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0` GLIB_COMPILE_RESOURCES=`$PKG_CONFIG --variable=glib_compile_resources gio-2.0` GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args` GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args` glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_glibtest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GLIB_CFLAGS" LIBS="$GLIB_LIBS $LIBS" rm -f conf.glibtest if test "$cross_compiling" = yes; then : echo $ac_n "cross compiling; assumed OK... $ac_c" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { unsigned int major, minor, micro; fclose (fopen ("conf.glibtest", "w")); if (sscanf("$min_glib_version", "%u.%u.%u", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_glib_version"); exit(1); } if ((glib_major_version != $glib_config_major_version) || (glib_minor_version != $glib_config_minor_version) || (glib_micro_version != $glib_config_micro_version)) { printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version, glib_major_version, glib_minor_version, glib_micro_version); printf ("*** was found! If pkg-config was correct, then it is best\n"); printf ("*** to remove the old version of GLib. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); printf("*** to point to the correct configuration files\n"); } else if ((glib_major_version != GLIB_MAJOR_VERSION) || (glib_minor_version != GLIB_MINOR_VERSION) || (glib_micro_version != GLIB_MICRO_VERSION)) { printf("*** GLIB header files (version %d.%d.%d) do not match\n", GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", glib_major_version, glib_minor_version, glib_micro_version); } else { if ((glib_major_version > major) || ((glib_major_version == major) && (glib_minor_version > minor)) || ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GLIB (%u.%u.%u) was found.\n", glib_major_version, glib_minor_version, glib_micro_version); printf("*** You need a version of GLIB newer than %u.%u.%u. The latest version of\n", major, minor, micro); printf("*** GLIB is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n"); printf("*** correct copy of pkg-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else no_glib=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_glib" = x ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)" >&5 $as_echo "yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)" >&6; } : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$PKG_CONFIG" = "no" ; then echo "*** A new enough version of pkg-config was not found." echo "*** See http://www.freedesktop.org/software/pkgconfig/" else if test -f conf.glibtest ; then : else echo "*** Could not run GLIB test program, checking why..." ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GLIB_CFLAGS" LIBS="$LIBS $GLIB_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GLIB or finding the wrong" echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GLIB is incorrectly installed." fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GLIB_CFLAGS="" GLIB_LIBS="" GLIB_GENMARSHAL="" GOBJECT_QUERY="" GLIB_MKENUMS="" GLIB_COMPILE_RESOURCES="" : fi rm -f conf.glibtest # Checks for header files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if ${ac_cv_header_time+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time=yes else ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 $as_echo_n "checking for working alloca.h... " >&6; } if ${ac_cv_working_alloca_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_working_alloca_h=yes else ac_cv_working_alloca_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 $as_echo "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then $as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 $as_echo_n "checking for alloca... " >&6; } if ${ac_cv_func_alloca_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # ifdef HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ void *alloca (size_t); # endif # endif # endif # endif #endif int main () { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_alloca_works=yes else ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 $as_echo "$ac_cv_func_alloca_works" >&6; } if test $ac_cv_func_alloca_works = yes; then $as_echo "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext $as_echo "#define C_ALLOCA 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 $as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } if ${ac_cv_os_cray+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then : ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 $as_echo "$ac_cv_os_cray" >&6; } if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 $as_echo_n "checking stack direction for C alloca... " >&6; } if ${ac_cv_c_stack_direction+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_c_stack_direction=0 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_stack_direction=1 else ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 $as_echo "$ac_cv_c_stack_direction" >&6; } cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF fi for ac_header in fcntl.h float.h limits.h malloc.h memory.h stddef.h stdint.h stdlib.h string.h sys/param.h sys/time.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Checks for typedefs, structures, and compiler characteristics. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac ac_fn_c_find_intX_t "$LINENO" "16" "ac_cv_c_int16_t" case $ac_cv_c_int16_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int16_t $ac_cv_c_int16_t _ACEOF ;; esac ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t" case $ac_cv_c_int32_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int32_t $ac_cv_c_int32_t _ACEOF ;; esac ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t" case $ac_cv_c_int64_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int64_t $ac_cv_c_int64_t _ACEOF ;; esac ac_fn_c_find_intX_t "$LINENO" "8" "ac_cv_c_int8_t" case $ac_cv_c_int8_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int8_t $ac_cv_c_int8_t _ACEOF ;; esac ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" case $ac_cv_c_uint16_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define uint16_t $ac_cv_c_uint16_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" case $ac_cv_c_uint32_t in #( no|yes) ;; #( *) $as_echo "#define _UINT32_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint32_t $ac_cv_c_uint32_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" case $ac_cv_c_uint64_t in #( no|yes) ;; #( *) $as_echo "#define _UINT64_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint64_t $ac_cv_c_uint64_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" case $ac_cv_c_uint8_t in #( no|yes) ;; #( *) $as_echo "#define _UINT8_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint8_t $ac_cv_c_uint8_t _ACEOF ;; esac # Checks for library functions. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 $as_echo_n "checking for error_at_line... " >&6; } if ${ac_cv_lib_error_at_line+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { error_at_line (0, 0, "", 0, "an error occurred"); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_error_at_line=yes else ac_cv_lib_error_at_line=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5 $as_echo "$ac_cv_lib_error_at_line" >&6; } if test $ac_cv_lib_error_at_line = no; then case " $LIBOBJS " in *" error.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS error.$ac_objext" ;; esac fi for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 $as_echo_n "checking for GNU libc compatible malloc... " >&6; } if ${ac_cv_func_malloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_malloc_0_nonnull=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *malloc (); #endif int main () { return ! malloc (0); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_malloc_0_nonnull=yes else ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 $as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } if test $ac_cv_func_malloc_0_nonnull = yes; then : $as_echo "#define HAVE_MALLOC 1" >>confdefs.h else $as_echo "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;; esac $as_echo "#define malloc rpl_malloc" >>confdefs.h fi for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5 $as_echo_n "checking for GNU libc compatible realloc... " >&6; } if ${ac_cv_func_realloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_realloc_0_nonnull=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *realloc (); #endif int main () { return ! realloc (0, 0); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_realloc_0_nonnull=yes else ac_cv_func_realloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5 $as_echo "$ac_cv_func_realloc_0_nonnull" >&6; } if test $ac_cv_func_realloc_0_nonnull = yes; then : $as_echo "#define HAVE_REALLOC 1" >>confdefs.h else $as_echo "#define HAVE_REALLOC 0" >>confdefs.h case " $LIBOBJS " in *" realloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS realloc.$ac_objext" ;; esac $as_echo "#define realloc rpl_realloc" >>confdefs.h fi for ac_func in vprintf do : ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" if test "x$ac_cv_func_vprintf" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VPRINTF 1 _ACEOF ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" if test "x$ac_cv_func__doprnt" = xyes; then : $as_echo "#define HAVE_DOPRNT 1" >>confdefs.h fi fi done for ac_header in vfork.h do : ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" if test "x$ac_cv_header_vfork_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VFORK_H 1 _ACEOF fi done for ac_func in fork vfork do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_fork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 $as_echo_n "checking for working fork... " >&6; } if ${ac_cv_func_fork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_fork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* By Ruediger Kuhlmann. */ return fork () < 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_fork_works=yes else ac_cv_func_fork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 $as_echo "$ac_cv_func_fork_works" >&6; } else ac_cv_func_fork_works=$ac_cv_func_fork fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 $as_echo_n "checking for working vfork... " >&6; } if ${ac_cv_func_vfork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_vfork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default #include #ifdef HAVE_VFORK_H # include #endif /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static void #ifdef __cplusplus sparc_address_test (int arg) # else sparc_address_test (arg) int arg; #endif { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main () { pid_t parent = getpid (); pid_t child; sparc_address_test (0); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; return ( /* Was there some problem with vforking? */ child < 0 /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_vfork_works=yes else ac_cv_func_vfork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 $as_echo "$ac_cv_func_vfork_works" >&6; } fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=$ac_cv_func_vfork { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then $as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h else $as_echo "#define vfork fork" >>confdefs.h fi if test "x$ac_cv_func_fork_works" = xyes; then $as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h fi for ac_func in atexit dup2 fchdir floor getcwd getpagesize gettimeofday isascii memchr memmove memset mkdir pow putenv rmdir select sqrt strchr strcasecmp strdup strerror strncasecmp strrchr strstr strtol strtoul do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # Check whether --enable-logging was given. if test "${enable_logging+set}" = set; then : enableval=$enable_logging; else enable_logging=no fi if test x$enable_logging != xno; then LOGGING_TRUE= LOGGING_FALSE='#' else LOGGING_TRUE='#' LOGGING_FALSE= fi if test -z "$LOGGING_TRUE"; then : $as_echo "#define LOGGING 1" >>confdefs.h fi # Check whether --enable-hkl-doc was given. if test "${enable_hkl_doc+set}" = set; then : enableval=$enable_hkl_doc; else enable_hkl_doc=yes fi if test x$enable_hkl_doc = xyes; then HKL_DOC_TRUE= HKL_DOC_FALSE='#' else HKL_DOC_TRUE='#' HKL_DOC_FALSE= fi if test -z "$HKL_DOC_TRUE"; then : # Extract the first word of "asy", so it can be a program name with args. set dummy asy; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ASY+:} false; then : $as_echo_n "(cached) " >&6 else case $ASY in [\\/]* | ?:[\\/]*) ac_cv_path_ASY="$ASY" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ASY="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_ASY" && ac_cv_path_ASY="echo" ;; esac fi ASY=$ac_cv_path_ASY if test -n "$ASY"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ASY" >&5 $as_echo "$ASY" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "emacs", so it can be a program name with args. set dummy emacs; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_EMACS+:} false; then : $as_echo_n "(cached) " >&6 else case $EMACS in [\\/]* | ?:[\\/]*) ac_cv_path_EMACS="$EMACS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_EMACS="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_EMACS" && ac_cv_path_EMACS="no" ;; esac fi EMACS=$ac_cv_path_EMACS if test -n "$EMACS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EMACS" >&5 $as_echo "$EMACS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gnuplot", so it can be a program name with args. set dummy gnuplot; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GNUPLOT+:} false; then : $as_echo_n "(cached) " >&6 else case $GNUPLOT in [\\/]* | ?:[\\/]*) ac_cv_path_GNUPLOT="$GNUPLOT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GNUPLOT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GNUPLOT" && ac_cv_path_GNUPLOT="echo" ;; esac fi GNUPLOT=$ac_cv_path_GNUPLOT if test -n "$GNUPLOT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GNUPLOT" >&5 $as_echo "$GNUPLOT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi gtk_doc_requires="gtk-doc >= 1.9" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gtk-doc" >&5 $as_echo_n "checking for gtk-doc... " >&6; } if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_doc_requires\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_doc_requires") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then have_gtk_doc=yes else have_gtk_doc=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gtk_doc" >&5 $as_echo "$have_gtk_doc" >&6; } if test "$have_gtk_doc" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will not be able to create source packages with 'make dist' because $gtk_doc_requires is not found." >&5 $as_echo "$as_me: WARNING: You will not be able to create source packages with 'make dist' because $gtk_doc_requires is not found." >&2;} fi # Extract the first word of "gtkdoc-check", so it can be a program name with args. set dummy gtkdoc-check; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_GTKDOC_CHECK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$GTKDOC_CHECK"; then ac_cv_prog_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_GTKDOC_CHECK="gtkdoc-check.test" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi GTKDOC_CHECK=$ac_cv_prog_GTKDOC_CHECK if test -n "$GTKDOC_CHECK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5 $as_echo "$GTKDOC_CHECK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gtkdoc-check", so it can be a program name with args. set dummy gtkdoc-check; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GTKDOC_CHECK_PATH+:} false; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_CHECK_PATH in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_CHECK_PATH="$GTKDOC_CHECK_PATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GTKDOC_CHECK_PATH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_CHECK_PATH=$ac_cv_path_GTKDOC_CHECK_PATH if test -n "$GTKDOC_CHECK_PATH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK_PATH" >&5 $as_echo "$GTKDOC_CHECK_PATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi for ac_prog in gtkdoc-rebase do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GTKDOC_REBASE+:} false; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_REBASE in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_REBASE="$GTKDOC_REBASE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GTKDOC_REBASE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_REBASE=$ac_cv_path_GTKDOC_REBASE if test -n "$GTKDOC_REBASE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_REBASE" >&5 $as_echo "$GTKDOC_REBASE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$GTKDOC_REBASE" && break done test -n "$GTKDOC_REBASE" || GTKDOC_REBASE="true" # Extract the first word of "gtkdoc-mkpdf", so it can be a program name with args. set dummy gtkdoc-mkpdf; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GTKDOC_MKPDF+:} false; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_MKPDF in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_MKPDF="$GTKDOC_MKPDF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GTKDOC_MKPDF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_MKPDF=$ac_cv_path_GTKDOC_MKPDF if test -n "$GTKDOC_MKPDF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_MKPDF" >&5 $as_echo "$GTKDOC_MKPDF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Check whether --with-html-dir was given. if test "${with_html_dir+set}" = set; then : withval=$with_html_dir; else with_html_dir='${datadir}/gtk-doc/html' fi HTML_DIR="$with_html_dir" # Check whether --enable-gtk-doc was given. if test "${enable_gtk_doc+set}" = set; then : enableval=$enable_gtk_doc; else enable_gtk_doc=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build gtk-doc documentation" >&5 $as_echo_n "checking whether to build gtk-doc documentation... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5 $as_echo "$enable_gtk_doc" >&6; } if test "x$enable_gtk_doc" = "xyes" && test "$have_gtk_doc" = "no"; then as_fn_error $? " You must have $gtk_doc_requires installed to build documentation for $PACKAGE_NAME. Please install gtk-doc or disable building the documentation by adding '--disable-gtk-doc' to '$0'." "$LINENO" 5 fi if test "x$PACKAGE_NAME" != "xglib"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKDOC_DEPS" >&5 $as_echo_n "checking for GTKDOC_DEPS... " >&6; } if test -n "$GTKDOC_DEPS_CFLAGS"; then pkg_cv_GTKDOC_DEPS_CFLAGS="$GTKDOC_DEPS_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTKDOC_DEPS_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTKDOC_DEPS_LIBS"; then pkg_cv_GTKDOC_DEPS_LIBS="$GTKDOC_DEPS_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTKDOC_DEPS_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTKDOC_DEPS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>&1` else GTKDOC_DEPS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTKDOC_DEPS_PKG_ERRORS" >&5 : elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : else GTKDOC_DEPS_CFLAGS=$pkg_cv_GTKDOC_DEPS_CFLAGS GTKDOC_DEPS_LIBS=$pkg_cv_GTKDOC_DEPS_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi # Check whether --enable-gtk-doc-html was given. if test "${enable_gtk_doc_html+set}" = set; then : enableval=$enable_gtk_doc_html; else enable_gtk_doc_html=yes fi # Check whether --enable-gtk-doc-pdf was given. if test "${enable_gtk_doc_pdf+set}" = set; then : enableval=$enable_gtk_doc_pdf; else enable_gtk_doc_pdf=no fi if test -z "$GTKDOC_MKPDF"; then enable_gtk_doc_pdf=no fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi if test x$have_gtk_doc = xyes; then HAVE_GTK_DOC_TRUE= HAVE_GTK_DOC_FALSE='#' else HAVE_GTK_DOC_TRUE='#' HAVE_GTK_DOC_FALSE= fi if test x$enable_gtk_doc = xyes; then ENABLE_GTK_DOC_TRUE= ENABLE_GTK_DOC_FALSE='#' else ENABLE_GTK_DOC_TRUE='#' ENABLE_GTK_DOC_FALSE= fi if test x$enable_gtk_doc_html = xyes; then GTK_DOC_BUILD_HTML_TRUE= GTK_DOC_BUILD_HTML_FALSE='#' else GTK_DOC_BUILD_HTML_TRUE='#' GTK_DOC_BUILD_HTML_FALSE= fi if test x$enable_gtk_doc_pdf = xyes; then GTK_DOC_BUILD_PDF_TRUE= GTK_DOC_BUILD_PDF_FALSE='#' else GTK_DOC_BUILD_PDF_TRUE='#' GTK_DOC_BUILD_PDF_FALSE= fi if test -n "$LIBTOOL"; then GTK_DOC_USE_LIBTOOL_TRUE= GTK_DOC_USE_LIBTOOL_FALSE='#' else GTK_DOC_USE_LIBTOOL_TRUE='#' GTK_DOC_USE_LIBTOOL_FALSE= fi if test -n "$GTKDOC_REBASE"; then GTK_DOC_USE_REBASE_TRUE= GTK_DOC_USE_REBASE_FALSE='#' else GTK_DOC_USE_REBASE_TRUE='#' GTK_DOC_USE_REBASE_FALSE= fi # Check whether --enable-hkl3d was given. if test "${enable_hkl3d+set}" = set; then : enableval=$enable_hkl3d; else enable_hkl3d=no fi if test x$enable_hkl3d != xno; then HKL3D_TRUE= HKL3D_FALSE='#' else HKL3D_TRUE='#' HKL3D_FALSE= fi if test -z "$HKL3D_TRUE"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for G3D" >&5 $as_echo_n "checking for G3D... " >&6; } if test -n "$G3D_CFLAGS"; then pkg_cv_G3D_CFLAGS="$G3D_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libg3d >= 0.0.8\""; } >&5 ($PKG_CONFIG --exists --print-errors "libg3d >= 0.0.8") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_G3D_CFLAGS=`$PKG_CONFIG --cflags "libg3d >= 0.0.8" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$G3D_LIBS"; then pkg_cv_G3D_LIBS="$G3D_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libg3d >= 0.0.8\""; } >&5 ($PKG_CONFIG --exists --print-errors "libg3d >= 0.0.8") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_G3D_LIBS=`$PKG_CONFIG --libs "libg3d >= 0.0.8" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then G3D_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libg3d >= 0.0.8" 2>&1` else G3D_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libg3d >= 0.0.8" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$G3D_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libg3d >= 0.0.8) were not met: $G3D_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables G3D_CFLAGS and G3D_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables G3D_CFLAGS and G3D_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else G3D_CFLAGS=$pkg_cv_G3D_CFLAGS G3D_LIBS=$pkg_cv_G3D_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BULLET" >&5 $as_echo_n "checking for BULLET... " >&6; } if test -n "$BULLET_CFLAGS"; then pkg_cv_BULLET_CFLAGS="$BULLET_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"bullet >= 2.82\""; } >&5 ($PKG_CONFIG --exists --print-errors "bullet >= 2.82") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_BULLET_CFLAGS=`$PKG_CONFIG --cflags "bullet >= 2.82" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$BULLET_LIBS"; then pkg_cv_BULLET_LIBS="$BULLET_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"bullet >= 2.82\""; } >&5 ($PKG_CONFIG --exists --print-errors "bullet >= 2.82") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_BULLET_LIBS=`$PKG_CONFIG --libs "bullet >= 2.82" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then BULLET_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "bullet >= 2.82" 2>&1` else BULLET_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "bullet >= 2.82" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$BULLET_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (bullet >= 2.82) were not met: $BULLET_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables BULLET_CFLAGS and BULLET_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables BULLET_CFLAGS and BULLET_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else BULLET_CFLAGS=$pkg_cv_BULLET_CFLAGS BULLET_LIBS=$pkg_cv_BULLET_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing yaml_get_version" >&5 $as_echo_n "checking for library containing yaml_get_version... " >&6; } if ${ac_cv_search_yaml_get_version+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char yaml_get_version (); int main () { return yaml_get_version (); ; return 0; } _ACEOF for ac_lib in '' yaml; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_yaml_get_version=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_yaml_get_version+:} false; then : break fi done if ${ac_cv_search_yaml_get_version+:} false; then : else ac_cv_search_yaml_get_version=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_yaml_get_version" >&5 $as_echo "$ac_cv_search_yaml_get_version" >&6; } ac_res=$ac_cv_search_yaml_get_version if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" for ac_header in yaml.h do : ac_fn_c_check_header_mongrel "$LINENO" "yaml.h" "ac_cv_header_yaml_h" "$ac_includes_default" if test "x$ac_cv_header_yaml_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_YAML_H 1 _ACEOF else as_fn_error $? "Could not find the yaml headers, please install yaml developement files" "$LINENO" 5 fi done else as_fn_error $? "Could not find the libyaml runtime, please install yaml" "$LINENO" 5 fi YAML_CFLAGS="" YAML_LIBS="-lyaml" fi # Check whether --enable-gui was given. if test "${enable_gui+set}" = set; then : enableval=$enable_gui; else enable_gui=yes fi if test x$enable_gui = xyes; then GUI_TRUE= GUI_FALSE='#' else GUI_TRUE='#' GUI_FALSE= fi if test -z "$GUI_TRUE"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5 $as_echo_n "checking for GTK... " >&6; } if test -n "$GTK_CFLAGS"; then pkg_cv_GTK_CFLAGS="$GTK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTK_LIBS"; then pkg_cv_GTK_LIBS="$GTK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-2.0 >= 2.0" 2>&1` else GTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-2.0 >= 2.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTK_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtk+-2.0 >= 2.0) were not met: $GTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GTK_CFLAGS=$pkg_cv_GTK_CFLAGS GTK_LIBS=$pkg_cv_GTK_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi if test -z "$HKL3D_TRUE"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLU" >&5 $as_echo_n "checking for GLU... " >&6; } if test -n "$GLU_CFLAGS"; then pkg_cv_GLU_CFLAGS="$GLU_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu >= 7.7.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu >= 7.7.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_CFLAGS=`$PKG_CONFIG --cflags "glu >= 7.7.1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLU_LIBS"; then pkg_cv_GLU_LIBS="$GLU_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu >= 7.7.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu >= 7.7.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_LIBS=`$PKG_CONFIG --libs "glu >= 7.7.1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLU_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glu >= 7.7.1" 2>&1` else GLU_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glu >= 7.7.1" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLU_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glu >= 7.7.1) were not met: $GLU_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GLU_CFLAGS=$pkg_cv_GLU_CFLAGS GLU_LIBS=$pkg_cv_GLU_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKGLEXT" >&5 $as_echo_n "checking for GTKGLEXT... " >&6; } if test -n "$GTKGLEXT_CFLAGS"; then pkg_cv_GTKGLEXT_CFLAGS="$GTKGLEXT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtkglext-1.0 >= 1.2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtkglext-1.0 >= 1.2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTKGLEXT_CFLAGS=`$PKG_CONFIG --cflags "gtkglext-1.0 >= 1.2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTKGLEXT_LIBS"; then pkg_cv_GTKGLEXT_LIBS="$GTKGLEXT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtkglext-1.0 >= 1.2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtkglext-1.0 >= 1.2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTKGLEXT_LIBS=`$PKG_CONFIG --libs "gtkglext-1.0 >= 1.2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTKGLEXT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtkglext-1.0 >= 1.2.0" 2>&1` else GTKGLEXT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtkglext-1.0 >= 1.2.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTKGLEXT_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtkglext-1.0 >= 1.2.0) were not met: $GTKGLEXT_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTKGLEXT_CFLAGS and GTKGLEXT_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTKGLEXT_CFLAGS and GTKGLEXT_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GTKGLEXT_CFLAGS=$pkg_cv_GTKGLEXT_CFLAGS GTKGLEXT_LIBS=$pkg_cv_GTKGLEXT_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi fi # Check whether --enable-introspection was given. if test "${enable_introspection+set}" = set; then : enableval=$enable_introspection; else enable_introspection=auto fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gobject-introspection" >&5 $as_echo_n "checking for gobject-introspection... " >&6; } case $enable_introspection in #( no) : found_introspection="no (disabled, use --enable-introspection to enable)" ;; #( yes) : if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : else as_fn_error $? "gobject-introspection-1.0 is not installed" "$LINENO" 5 fi if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.7\""; } >&5 ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.7") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then found_introspection=yes else as_fn_error $? "You need to have gobject-introspection >= 0.6.7 installed to build hkl" "$LINENO" 5 fi ;; #( auto) : if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.7\""; } >&5 ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.7") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then found_introspection=yes else found_introspection=no fi enable_introspection=$found_introspection ;; #( *) : as_fn_error $? "invalid argument passed to --enable-introspection, should be one of [no/auto/yes]" "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $found_introspection" >&5 $as_echo "$found_introspection" >&6; } INTROSPECTION_SCANNER= INTROSPECTION_COMPILER= INTROSPECTION_GENERATE= INTROSPECTION_GIRDIR= INTROSPECTION_TYPELIBDIR= if test "x$found_introspection" = "xyes"; then INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0` INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0` INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0` INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0` INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)" INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0` INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0` INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection fi if test "x$found_introspection" = "xyes"; then HAVE_INTROSPECTION_TRUE= HAVE_INTROSPECTION_FALSE='#' else HAVE_INTROSPECTION_TRUE='#' HAVE_INTROSPECTION_FALSE= fi if test -z "$HAVE_INTROSPECTION_TRUE"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GOBJECT" >&5 $as_echo_n "checking for GOBJECT... " >&6; } if test -n "$GOBJECT_CFLAGS"; then pkg_cv_GOBJECT_CFLAGS="$GOBJECT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gobject-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GOBJECT_CFLAGS=`$PKG_CONFIG --cflags "gobject-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GOBJECT_LIBS"; then pkg_cv_GOBJECT_LIBS="$GOBJECT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gobject-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GOBJECT_LIBS=`$PKG_CONFIG --libs "gobject-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GOBJECT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gobject-2.0" 2>&1` else GOBJECT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gobject-2.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GOBJECT_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gobject-2.0) were not met: $GOBJECT_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GOBJECT_CFLAGS and GOBJECT_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GOBJECT_CFLAGS and GOBJECT_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GOBJECT_CFLAGS=$pkg_cv_GOBJECT_CFLAGS GOBJECT_LIBS=$pkg_cv_GOBJECT_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi # Check whether --enable-contrib was given. if test "${enable_contrib+set}" = set; then : enableval=$enable_contrib; else enable_contrib=no fi if test x$enable_contrib != xno; then CONTRIB_TRUE= CONTRIB_FALSE='#' else CONTRIB_TRUE='#' CONTRIB_FALSE= fi if test -z "$CONTRIB_TRUE"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HDF5" >&5 $as_echo_n "checking for HDF5... " >&6; } if test -n "$HDF5_CFLAGS"; then pkg_cv_HDF5_CFLAGS="$HDF5_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"hdf5 >= 1.8.13\""; } >&5 ($PKG_CONFIG --exists --print-errors "hdf5 >= 1.8.13") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_HDF5_CFLAGS=`$PKG_CONFIG --cflags "hdf5 >= 1.8.13" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$HDF5_LIBS"; then pkg_cv_HDF5_LIBS="$HDF5_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"hdf5 >= 1.8.13\""; } >&5 ($PKG_CONFIG --exists --print-errors "hdf5 >= 1.8.13") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_HDF5_LIBS=`$PKG_CONFIG --libs "hdf5 >= 1.8.13" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then HDF5_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "hdf5 >= 1.8.13" 2>&1` else HDF5_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "hdf5 >= 1.8.13" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$HDF5_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (hdf5 >= 1.8.13) were not met: $HDF5_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables HDF5_CFLAGS and HDF5_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables HDF5_CFLAGS and HDF5_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else HDF5_CFLAGS=$pkg_cv_HDF5_CFLAGS HDF5_LIBS=$pkg_cv_HDF5_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi ac_config_files="$ac_config_files Makefile hkl/Makefile hkl/api2/Makefile hkl/ccan/Makefile hkl.pc hkl3d/Makefile hkl3d.pc tests/Makefile tests/bindings/Makefile tests/tap/Makefile Documentation/Makefile Documentation/hkl.org Documentation/api/Makefile Documentation/figures/Makefile Documentation/sphinx/Makefile Documentation/sphinx/source/conf.py gui/Makefile data/Makefile contrib/Makefile contrib/sixs/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LOGGING_TRUE}" && test -z "${LOGGING_FALSE}"; then as_fn_error $? "conditional \"LOGGING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HKL_DOC_TRUE}" && test -z "${HKL_DOC_FALSE}"; then as_fn_error $? "conditional \"HKL_DOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_GTK_DOC_TRUE}" && test -z "${HAVE_GTK_DOC_FALSE}"; then as_fn_error $? "conditional \"HAVE_GTK_DOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then as_fn_error $? "conditional \"ENABLE_GTK_DOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_BUILD_HTML_TRUE}" && test -z "${GTK_DOC_BUILD_HTML_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_BUILD_HTML\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_BUILD_PDF_TRUE}" && test -z "${GTK_DOC_BUILD_PDF_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_BUILD_PDF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_USE_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_USE_REBASE_TRUE}" && test -z "${GTK_DOC_USE_REBASE_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_USE_REBASE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HKL3D_TRUE}" && test -z "${HKL3D_FALSE}"; then as_fn_error $? "conditional \"HKL3D\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GUI_TRUE}" && test -z "${GUI_FALSE}"; then as_fn_error $? "conditional \"GUI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_INTROSPECTION_TRUE}" && test -z "${HAVE_INTROSPECTION_FALSE}"; then as_fn_error $? "conditional \"HAVE_INTROSPECTION\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CONTRIB_TRUE}" && test -z "${CONTRIB_FALSE}"; then as_fn_error $? "conditional \"CONTRIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by hkl $as_me 5.0.0.2449, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ hkl config.status 5.0.0.2449 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ lt_cv_nm_interface \ nm_file_list_spec \ lt_cv_truncate_bin \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ configure_time_dlsearch_path \ configure_time_lt_sys_library_path \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "hkl/Makefile") CONFIG_FILES="$CONFIG_FILES hkl/Makefile" ;; "hkl/api2/Makefile") CONFIG_FILES="$CONFIG_FILES hkl/api2/Makefile" ;; "hkl/ccan/Makefile") CONFIG_FILES="$CONFIG_FILES hkl/ccan/Makefile" ;; "hkl.pc") CONFIG_FILES="$CONFIG_FILES hkl.pc" ;; "hkl3d/Makefile") CONFIG_FILES="$CONFIG_FILES hkl3d/Makefile" ;; "hkl3d.pc") CONFIG_FILES="$CONFIG_FILES hkl3d.pc" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "tests/bindings/Makefile") CONFIG_FILES="$CONFIG_FILES tests/bindings/Makefile" ;; "tests/tap/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tap/Makefile" ;; "Documentation/Makefile") CONFIG_FILES="$CONFIG_FILES Documentation/Makefile" ;; "Documentation/hkl.org") CONFIG_FILES="$CONFIG_FILES Documentation/hkl.org" ;; "Documentation/api/Makefile") CONFIG_FILES="$CONFIG_FILES Documentation/api/Makefile" ;; "Documentation/figures/Makefile") CONFIG_FILES="$CONFIG_FILES Documentation/figures/Makefile" ;; "Documentation/sphinx/Makefile") CONFIG_FILES="$CONFIG_FILES Documentation/sphinx/Makefile" ;; "Documentation/sphinx/source/conf.py") CONFIG_FILES="$CONFIG_FILES Documentation/sphinx/source/conf.py" ;; "gui/Makefile") CONFIG_FILES="$CONFIG_FILES gui/Makefile" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "contrib/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/Makefile" ;; "contrib/sixs/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/sixs/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # The names of the tagged configurations supported by this script. available_tags='CXX ' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shared archive member basename,for filename based shared library versioning on AIX. shared_archive_member_spec=$shared_archive_member_spec # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm into a list of symbols to manually relocate. global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name lister interface. nm_interface=$lt_lt_cv_nm_interface # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and where our libraries should be installed. lt_sysroot=$lt_sysroot # Command to truncate a binary pipe. lt_truncate_bin=$lt_lt_cv_truncate_bin # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Detected run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path # Explicit LT_SYS_LIBRARY_PATH set during ./configure time. configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi hkl-5.0.0.2449/aclocal.m40000644000175000017500000023330013237017624014761 0ustar00piccapicca00000000000000# generated automatically by aclocal 1.15.1 -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_append_flag.html # =========================================================================== # # SYNOPSIS # # AX_APPEND_FLAG(FLAG, [FLAGS-VARIABLE]) # # DESCRIPTION # # FLAG is appended to the FLAGS-VARIABLE shell variable, with a space # added in between. # # If FLAGS-VARIABLE is not specified, the current language's flags (e.g. # CFLAGS) is used. FLAGS-VARIABLE is not changed if it already contains # FLAG. If FLAGS-VARIABLE is unset in the shell, it is set to exactly # FLAG. # # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. # # LICENSE # # Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 7 AC_DEFUN([AX_APPEND_FLAG], [dnl AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_SET_IF AS_VAR_PUSHDEF([FLAGS], [m4_default($2,_AC_LANG_PREFIX[FLAGS])]) AS_VAR_SET_IF(FLAGS,[ AS_CASE([" AS_VAR_GET(FLAGS) "], [*" $1 "*], [AC_RUN_LOG([: FLAGS already contains $1])], [ AS_VAR_APPEND(FLAGS,[" $1"]) AC_RUN_LOG([: FLAGS="$FLAGS"]) ]) ], [ AS_VAR_SET(FLAGS,[$1]) AC_RUN_LOG([: FLAGS="$FLAGS"]) ]) AS_VAR_POPDEF([FLAGS])dnl ])dnl AX_APPEND_FLAG # =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_cflags_warn_all.html # =========================================================================== # # SYNOPSIS # # AX_CFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])] # AX_CXXFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])] # AX_FCFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])] # # DESCRIPTION # # Try to find a compiler option that enables most reasonable warnings. # # For the GNU compiler it will be -Wall (and -ansi -pedantic) The result # is added to the shellvar being CFLAGS, CXXFLAGS, or FCFLAGS by default. # # Currently this macro knows about the GCC, Solaris, Digital Unix, AIX, # HP-UX, IRIX, NEC SX-5 (Super-UX 10), Cray J90 (Unicos 10.0.0.8), and # Intel compilers. For a given compiler, the Fortran flags are much more # experimental than their C equivalents. # # - $1 shell-variable-to-add-to : CFLAGS, CXXFLAGS, or FCFLAGS # - $2 add-value-if-not-found : nothing # - $3 action-if-found : add value to shellvariable # - $4 action-if-not-found : nothing # # NOTE: These macros depend on AX_APPEND_FLAG. # # LICENSE # # Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2010 Rhys Ulerich # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 16 AC_DEFUN([AX_FLAGS_WARN_ALL],[dnl AS_VAR_PUSHDEF([FLAGS],[_AC_LANG_PREFIX[]FLAGS])dnl AS_VAR_PUSHDEF([VAR],[ac_cv_[]_AC_LANG_ABBREV[]flags_warn_all])dnl AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum warnings], VAR,[VAR="no, unknown" ac_save_[]FLAGS="$[]FLAGS" for ac_arg dnl in "-warn all % -warn all" dnl Intel "-pedantic % -Wall" dnl GCC "-xstrconst % -v" dnl Solaris C "-std1 % -verbose -w0 -warnprotos" dnl Digital Unix "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX "-ansi -ansiE % -fullwarn" dnl IRIX "+ESlit % +w1" dnl HP-UX C "-Xc % -pvctl[,]fullmsg" dnl NEC SX-5 (Super-UX 10) "-h conform % -h msglevel 2" dnl Cray C (Unicos) # do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break]) done FLAGS="$ac_save_[]FLAGS" ]) AS_VAR_POPDEF([FLAGS])dnl AX_REQUIRE_DEFINED([AX_APPEND_FLAG]) case ".$VAR" in .ok|.ok,*) m4_ifvaln($3,$3) ;; .|.no|.no,*) m4_default($4,[m4_ifval($2,[AX_APPEND_FLAG([$2], [$1])])]) ;; *) m4_default($3,[AX_APPEND_FLAG([$VAR], [$1])]) ;; esac AS_VAR_POPDEF([VAR])dnl ])dnl AX_FLAGS_WARN_ALL dnl implementation tactics: dnl the for-argument contains a list of options. The first part of dnl these does only exist to detect the compiler - usually it is dnl a global option to enable -ansi or -extrawarnings. All other dnl compilers will fail about it. That was needed since a lot of dnl compilers will give false positives for some option-syntax dnl like -Woption or -Xoption as they think of it is a pass-through dnl to later compile stages or something. The "%" is used as a dnl delimiter. A non-option comment can be given after "%%" marks dnl which will be shown but not added to the respective C/CXXFLAGS. AC_DEFUN([AX_CFLAGS_WARN_ALL],[dnl AC_LANG_PUSH([C]) AX_FLAGS_WARN_ALL([$1], [$2], [$3], [$4]) AC_LANG_POP([C]) ]) AC_DEFUN([AX_CXXFLAGS_WARN_ALL],[dnl AC_LANG_PUSH([C++]) AX_FLAGS_WARN_ALL([$1], [$2], [$3], [$4]) AC_LANG_POP([C++]) ]) AC_DEFUN([AX_FCFLAGS_WARN_ALL],[dnl AC_LANG_PUSH([Fortran]) AX_FLAGS_WARN_ALL([$1], [$2], [$3], [$4]) AC_LANG_POP([Fortran]) ]) # =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_require_defined.html # =========================================================================== # # SYNOPSIS # # AX_REQUIRE_DEFINED(MACRO) # # DESCRIPTION # # AX_REQUIRE_DEFINED is a simple helper for making sure other macros have # been defined and thus are available for use. This avoids random issues # where a macro isn't expanded. Instead the configure script emits a # non-fatal: # # ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found # # It's like AC_REQUIRE except it doesn't expand the required macro. # # Here's an example: # # AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG]) # # LICENSE # # Copyright (c) 2014 Mike Frysinger # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 2 AC_DEFUN([AX_REQUIRE_DEFINED], [dnl m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])]) ])dnl AX_REQUIRE_DEFINED # Configure paths for GLIB # Owen Taylor 1997-2001 dnl AM_PATH_GLIB_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if gmodule, gobject, dnl gthread, or gio is specified in MODULES, pass to pkg-config dnl AC_DEFUN([AM_PATH_GLIB_2_0], [dnl dnl Get the cflags and libraries from pkg-config dnl AC_ARG_ENABLE(glibtest, [ --disable-glibtest do not try to compile and run a test GLIB program], , enable_glibtest=yes) pkg_config_args=glib-2.0 for module in . $4 do case "$module" in gmodule) pkg_config_args="$pkg_config_args gmodule-2.0" ;; gmodule-no-export) pkg_config_args="$pkg_config_args gmodule-no-export-2.0" ;; gobject) pkg_config_args="$pkg_config_args gobject-2.0" ;; gthread) pkg_config_args="$pkg_config_args gthread-2.0" ;; gio*) pkg_config_args="$pkg_config_args $module-2.0" ;; esac done PKG_PROG_PKG_CONFIG([0.16]) no_glib="" if test "x$PKG_CONFIG" = x ; then no_glib=yes PKG_CONFIG=no fi min_glib_version=ifelse([$1], ,2.0.0,$1) AC_MSG_CHECKING(for GLIB - version >= $min_glib_version) if test x$PKG_CONFIG != xno ; then ## don't try to run the test against uninstalled libtool libs if $PKG_CONFIG --uninstalled $pkg_config_args; then echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH" enable_glibtest=no fi if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then : else no_glib=yes fi fi if test x"$no_glib" = x ; then GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0` GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0` GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0` GLIB_COMPILE_RESOURCES=`$PKG_CONFIG --variable=glib_compile_resources gio-2.0` GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args` GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args` glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_glibtest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GLIB_CFLAGS" LIBS="$GLIB_LIBS $LIBS" dnl dnl Now check if the installed GLIB is sufficiently new. (Also sanity dnl checks the results of pkg-config to some extent) dnl rm -f conf.glibtest AC_TRY_RUN([ #include #include #include int main () { unsigned int major, minor, micro; fclose (fopen ("conf.glibtest", "w")); if (sscanf("$min_glib_version", "%u.%u.%u", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_glib_version"); exit(1); } if ((glib_major_version != $glib_config_major_version) || (glib_minor_version != $glib_config_minor_version) || (glib_micro_version != $glib_config_micro_version)) { printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version, glib_major_version, glib_minor_version, glib_micro_version); printf ("*** was found! If pkg-config was correct, then it is best\n"); printf ("*** to remove the old version of GLib. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); printf("*** to point to the correct configuration files\n"); } else if ((glib_major_version != GLIB_MAJOR_VERSION) || (glib_minor_version != GLIB_MINOR_VERSION) || (glib_micro_version != GLIB_MICRO_VERSION)) { printf("*** GLIB header files (version %d.%d.%d) do not match\n", GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", glib_major_version, glib_minor_version, glib_micro_version); } else { if ((glib_major_version > major) || ((glib_major_version == major) && (glib_minor_version > minor)) || ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GLIB (%u.%u.%u) was found.\n", glib_major_version, glib_minor_version, glib_micro_version); printf("*** You need a version of GLIB newer than %u.%u.%u. The latest version of\n", major, minor, micro); printf("*** GLIB is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n"); printf("*** correct copy of pkg-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } ],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_glib" = x ; then AC_MSG_RESULT(yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$PKG_CONFIG" = "no" ; then echo "*** A new enough version of pkg-config was not found." echo "*** See http://www.freedesktop.org/software/pkgconfig/" else if test -f conf.glibtest ; then : else echo "*** Could not run GLIB test program, checking why..." ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GLIB_CFLAGS" LIBS="$LIBS $GLIB_LIBS" AC_TRY_LINK([ #include #include ], [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GLIB or finding the wrong" echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GLIB is incorrectly installed."]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GLIB_CFLAGS="" GLIB_LIBS="" GLIB_GENMARSHAL="" GOBJECT_QUERY="" GLIB_MKENUMS="" GLIB_COMPILE_RESOURCES="" ifelse([$3], , :, [$3]) fi AC_SUBST(GLIB_CFLAGS) AC_SUBST(GLIB_LIBS) AC_SUBST(GLIB_GENMARSHAL) AC_SUBST(GOBJECT_QUERY) AC_SUBST(GLIB_MKENUMS) AC_SUBST(GLIB_COMPILE_RESOURCES) rm -f conf.glibtest ]) # Configure path for the GNU Scientific Library # Christopher R. Gabriel , April 2000 AC_DEFUN([AX_PATH_GSL], [ AC_ARG_WITH(gsl-prefix,[ --with-gsl-prefix=PFX Prefix where GSL is installed (optional)], gsl_prefix="$withval", gsl_prefix="") AC_ARG_WITH(gsl-exec-prefix,[ --with-gsl-exec-prefix=PFX Exec prefix where GSL is installed (optional)], gsl_exec_prefix="$withval", gsl_exec_prefix="") AC_ARG_ENABLE(gsltest, [ --disable-gsltest Do not try to compile and run a test GSL program], , enable_gsltest=yes) if test "x${GSL_CONFIG+set}" != xset ; then if test "x$gsl_prefix" != x ; then GSL_CONFIG="$gsl_prefix/bin/gsl-config" fi if test "x$gsl_exec_prefix" != x ; then GSL_CONFIG="$gsl_exec_prefix/bin/gsl-config" fi fi AC_PATH_PROG(GSL_CONFIG, gsl-config, no) min_gsl_version=ifelse([$1], ,0.2.5,$1) AC_MSG_CHECKING(for GSL - version >= $min_gsl_version) no_gsl="" if test "$GSL_CONFIG" = "no" ; then no_gsl=yes else GSL_CFLAGS=`$GSL_CONFIG --cflags` GSL_LIBS=`$GSL_CONFIG --libs` gsl_major_version=`$GSL_CONFIG --version | \ sed 's/^\([[0-9]]*\).*/\1/'` if test "x${gsl_major_version}" = "x" ; then gsl_major_version=0 fi gsl_minor_version=`$GSL_CONFIG --version | \ sed 's/^\([[0-9]]*\)\.\{0,1\}\([[0-9]]*\).*/\2/'` if test "x${gsl_minor_version}" = "x" ; then gsl_minor_version=0 fi gsl_micro_version=`$GSL_CONFIG --version | \ sed 's/^\([[0-9]]*\)\.\{0,1\}\([[0-9]]*\)\.\{0,1\}\([[0-9]]*\).*/\3/'` if test "x${gsl_micro_version}" = "x" ; then gsl_micro_version=0 fi if test "x$enable_gsltest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GSL_CFLAGS" LIBS="$LIBS $GSL_LIBS" rm -f conf.gsltest AC_TRY_RUN([ #include #include #include char* my_strdup (const char *str); char* my_strdup (const char *str) { char *new_str; if (str) { new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); strcpy (new_str, str); } else new_str = NULL; return new_str; } int main (void) { int major = 0, minor = 0, micro = 0; int n; char *tmp_version; system ("touch conf.gsltest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = my_strdup("$min_gsl_version"); n = sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) ; if (n != 2 && n != 3) { printf("%s, bad version string\n", "$min_gsl_version"); exit(1); } if (($gsl_major_version > major) || (($gsl_major_version == major) && ($gsl_minor_version > minor)) || (($gsl_major_version == major) && ($gsl_minor_version == minor) && ($gsl_micro_version >= micro))) { exit(0); } else { exit(1); } } ],, no_gsl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gsl" = x ; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$GSL_CONFIG" = "no" ; then echo "*** The gsl-config script installed by GSL could not be found" echo "*** If GSL was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the GSL_CONFIG environment variable to the" echo "*** full path to gsl-config." else if test -f conf.gsltest ; then : else echo "*** Could not run GSL test program, checking why..." CFLAGS="$CFLAGS $GSL_CFLAGS" LIBS="$LIBS $GSL_LIBS" AC_TRY_LINK([ #include ], [ return 0; ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GSL or finding the wrong" echo "*** version of GSL. If it is not finding GSL, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GSL was incorrectly installed" echo "*** or that you have moved GSL since it was installed. In the latter case, you" echo "*** may want to edit the gsl-config script: $GSL_CONFIG" ]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi # GSL_CFLAGS="" # GSL_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(GSL_CFLAGS) AC_SUBST(GSL_LIBS) rm -f conf.gsltest ]) AU_ALIAS([AM_PATH_GSL], [AX_PATH_GSL]) dnl -*- mode: autoconf -*- dnl Copyright 2009 Johan Dahlin dnl dnl This file is free software; the author(s) gives unlimited dnl permission to copy and/or distribute it, with or without dnl modifications, as long as this notice is preserved. dnl # serial 1 m4_define([_GOBJECT_INTROSPECTION_CHECK_INTERNAL], [ AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first AC_BEFORE([LT_INIT],[$0])dnl setup libtool first dnl enable/disable introspection m4_if([$2], [require], [dnl enable_introspection=yes ],[dnl AC_ARG_ENABLE(introspection, AS_HELP_STRING([--enable-introspection[=@<:@no/auto/yes@:>@]], [Enable introspection for this build]),, [enable_introspection=auto]) ])dnl AC_MSG_CHECKING([for gobject-introspection]) dnl presence/version checking AS_CASE([$enable_introspection], [no], [dnl found_introspection="no (disabled, use --enable-introspection to enable)" ],dnl [yes],[dnl PKG_CHECK_EXISTS([gobject-introspection-1.0],, AC_MSG_ERROR([gobject-introspection-1.0 is not installed])) PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], found_introspection=yes, AC_MSG_ERROR([You need to have gobject-introspection >= $1 installed to build AC_PACKAGE_NAME])) ],dnl [auto],[dnl PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], found_introspection=yes, found_introspection=no) dnl Canonicalize enable_introspection enable_introspection=$found_introspection ],dnl [dnl AC_MSG_ERROR([invalid argument passed to --enable-introspection, should be one of @<:@no/auto/yes@:>@]) ])dnl AC_MSG_RESULT([$found_introspection]) INTROSPECTION_SCANNER= INTROSPECTION_COMPILER= INTROSPECTION_GENERATE= INTROSPECTION_GIRDIR= INTROSPECTION_TYPELIBDIR= if test "x$found_introspection" = "xyes"; then INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0` INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0` INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0` INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0` INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)" INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0` INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0` INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection fi AC_SUBST(INTROSPECTION_SCANNER) AC_SUBST(INTROSPECTION_COMPILER) AC_SUBST(INTROSPECTION_GENERATE) AC_SUBST(INTROSPECTION_GIRDIR) AC_SUBST(INTROSPECTION_TYPELIBDIR) AC_SUBST(INTROSPECTION_CFLAGS) AC_SUBST(INTROSPECTION_LIBS) AC_SUBST(INTROSPECTION_MAKEFILE) AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes") ]) dnl Usage: dnl GOBJECT_INTROSPECTION_CHECK([minimum-g-i-version]) AC_DEFUN([GOBJECT_INTROSPECTION_CHECK], [ _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1]) ]) dnl Usage: dnl GOBJECT_INTROSPECTION_REQUIRE([minimum-g-i-version]) AC_DEFUN([GOBJECT_INTROSPECTION_REQUIRE], [ _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1], [require]) ]) dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- dnl serial 11 (pkg-config-0.29) dnl dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR # Copyright (C) 2002-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.15.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_COND_IF -*- Autoconf -*- # Copyright (C) 2008-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_COND_IF # _AM_COND_ELSE # _AM_COND_ENDIF # -------------- # These macros are only used for tracing. m4_define([_AM_COND_IF]) m4_define([_AM_COND_ELSE]) m4_define([_AM_COND_ENDIF]) # AM_COND_IF(COND, [IF-TRUE], [IF-FALSE]) # --------------------------------------- # If the shell condition COND is true, execute IF-TRUE, otherwise execute # IF-FALSE. Allow automake to learn about conditional instantiating macros # (the AC_CONFIG_FOOS). AC_DEFUN([AM_COND_IF], [m4_ifndef([_AM_COND_VALUE_$1], [m4_fatal([$0: no such condition "$1"])])dnl _AM_COND_IF([$1])dnl if test -z "$$1_TRUE"; then : m4_n([$2])[]dnl m4_ifval([$3], [_AM_COND_ELSE([$1])dnl else $3 ])dnl _AM_COND_ENDIF([$1])dnl fi[]dnl ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/gtk-doc.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) hkl-5.0.0.2449/m4/0000755000175000017500000000000013237020535013433 5ustar00piccapicca00000000000000hkl-5.0.0.2449/m4/gtk-doc.m40000644000175000017500000001066013216240766015237 0ustar00piccapicca00000000000000# -*- mode: autoconf -*- # # gtk-doc.m4 - configure macro to check for gtk-doc # Copyright (C) 2003 James Henstridge # 2007-2017 Stefan Sauer # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # As a special exception, the above copyright owner gives unlimited # permission to copy, distribute and modify the configure scripts that # are the output of Autoconf when processing the Macro. You need not # follow the terms of the GNU General Public License when using or # distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # serial 2 dnl Usage: dnl GTK_DOC_CHECK([minimum-gtk-doc-version]) AC_DEFUN([GTK_DOC_CHECK], [ AC_REQUIRE([PKG_PROG_PKG_CONFIG]) AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first ifelse([$1],[],[gtk_doc_requires="gtk-doc"],[gtk_doc_requires="gtk-doc >= $1"]) AC_MSG_CHECKING([for gtk-doc]) PKG_CHECK_EXISTS([$gtk_doc_requires],[have_gtk_doc=yes],[have_gtk_doc=no]) AC_MSG_RESULT($have_gtk_doc) if test "$have_gtk_doc" = "no"; then AC_MSG_WARN([ You will not be able to create source packages with 'make dist' because $gtk_doc_requires is not found.]) fi dnl check for tools we added during development dnl Use AC_CHECK_PROG to avoid the check target using an absolute path that dnl may not be writable by the user. Currently, automake requires that the dnl test name must end in '.test'. dnl https://bugzilla.gnome.org/show_bug.cgi?id=701638 AC_CHECK_PROG([GTKDOC_CHECK],[gtkdoc-check],[gtkdoc-check.test]) AC_PATH_PROG([GTKDOC_CHECK_PATH],[gtkdoc-check]) AC_PATH_PROGS([GTKDOC_REBASE],[gtkdoc-rebase],[true]) AC_PATH_PROG([GTKDOC_MKPDF],[gtkdoc-mkpdf]) dnl for overriding the documentation installation directory AC_ARG_WITH([html-dir], AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),, [with_html_dir='${datadir}/gtk-doc/html']) HTML_DIR="$with_html_dir" AC_SUBST([HTML_DIR]) dnl enable/disable documentation building AC_ARG_ENABLE([gtk-doc], AS_HELP_STRING([--enable-gtk-doc], [use gtk-doc to build documentation [[default=no]]]),, [enable_gtk_doc=no]) AC_MSG_CHECKING([whether to build gtk-doc documentation]) AC_MSG_RESULT($enable_gtk_doc) if test "x$enable_gtk_doc" = "xyes" && test "$have_gtk_doc" = "no"; then AC_MSG_ERROR([ You must have $gtk_doc_requires installed to build documentation for $PACKAGE_NAME. Please install gtk-doc or disable building the documentation by adding '--disable-gtk-doc' to '[$]0'.]) fi dnl don't check for glib if we build glib if test "x$PACKAGE_NAME" != "xglib"; then dnl don't fail if someone does not have glib PKG_CHECK_MODULES(GTKDOC_DEPS, glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0,,[:]) fi dnl enable/disable output formats AC_ARG_ENABLE([gtk-doc-html], AS_HELP_STRING([--enable-gtk-doc-html], [build documentation in html format [[default=yes]]]),, [enable_gtk_doc_html=yes]) AC_ARG_ENABLE([gtk-doc-pdf], AS_HELP_STRING([--enable-gtk-doc-pdf], [build documentation in pdf format [[default=no]]]),, [enable_gtk_doc_pdf=no]) if test -z "$GTKDOC_MKPDF"; then enable_gtk_doc_pdf=no fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi AC_SUBST([AM_DEFAULT_VERBOSITY]) AM_CONDITIONAL([HAVE_GTK_DOC], [test x$have_gtk_doc = xyes]) AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes]) AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes]) AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes]) AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"]) AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"]) ]) hkl-5.0.0.2449/m4/ltversion.m40000644000175000017500000000127313237017573015735 0ustar00piccapicca00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 4179 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.6]) m4_define([LT_PACKAGE_REVISION], [2.4.6]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.6' macro_revision='2.4.6' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) hkl-5.0.0.2449/m4/libtool.m40000644000175000017500000112617113237017572015361 0ustar00piccapicca00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ]) # serial 58 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_PREPARE_CC_BASENAME # ----------------------- m4_defun([_LT_PREPARE_CC_BASENAME], [ # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in @S|@*""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } ])# _LT_PREPARE_CC_BASENAME # _LT_CC_BASENAME(CC) # ------------------- # It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, # but that macro is also expanded into generated libtool script, which # arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], [m4_require([_LT_PREPARE_CC_BASENAME])dnl AC_REQUIRE([_LT_DECL_SED])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl func_cc_basename $1 cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the 'libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to 'config.status' so that its # declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags='_LT_TAGS'dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into 'config.status', and then the shell code to quote escape them in # for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ '$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test 0 != $[#] do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try '$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 _LT_COPYING _LT_LIBTOOL_TAGS # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE _LT_PREPARE_MUNGE_PATH_LIST _LT_PREPARE_CC_BASENAME # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[[012]][[,.]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test yes = "$lt_cv_ld_force_load"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script that will find a shell with a builtin # printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ]) if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) ]) ]) ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links=nottested if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test no = "$hard_links"; then AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_PREPARE_MUNGE_PATH_LIST # --------------------------- # Make sure func_munge_path_list() is defined correctly. m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], [[# func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x@S|@2 in x) ;; *:) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" ;; x:*) eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; *::*) eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" ;; *) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; esac } ]])# _LT_PREPARE_PATH_LIST # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown AC_ARG_VAR([LT_SYS_LIBRARY_PATH], [User-defined run-time library search path.]) case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a[(]lib.so.V[)]' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], [Detected run-time system search path for libraries]) _LT_DECL([], [configure_time_lt_sys_library_path], [2], [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program that can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$1"; then lt_cv_path_MAGIC_CMD=$ac_dir/"$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program that can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], [if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi]) rm -f conftest.i conftest2.i conftest.out]) ])# _LT_PATH_DD # _LT_CMD_TRUNCATE # ---------------- # find command to truncate a binary pipe m4_defun([_LT_CMD_TRUNCATE], [m4_require([_LT_PATH_DD]) AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) _LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], [Command to truncate a binary pipe]) ])# _LT_CMD_TRUNCATE # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # _LT_DLL_DEF_P([FILE]) # --------------------- # True iff FILE is a Windows DLL '.def' file. # Keep in sync with func_dll_def_p in the libtool script AC_DEFUN([_LT_DLL_DEF_P], [dnl test DEF = "`$SED -n dnl -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl -e q dnl Only consider the first "real" line $1`" dnl ])# _LT_DLL_DEF_P # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], [Transform the output of nm into a list of symbols to manually relocate]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([nm_interface], [lt_cv_nm_interface], [1], [The name lister interface]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS=$save_LDFLAGS]) if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi _LT_TAGVAR(link_all_deplibs, $1)=no else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(ld_shlibs, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; osf3*) if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test yes = "$GCC"; then wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC=$lt_save_CC ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(GCC, $1)=$GXX _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case @S|@2 in .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)=$prev$p else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$G77 _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test 10 -lt "$lt_ac_count" && break lt_ac_count=`expr $lt_ac_count + 1` if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS hkl-5.0.0.2449/m4/ltsugar.m40000644000175000017500000001044013237017573015365 0ustar00piccapicca00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59, which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) hkl-5.0.0.2449/m4/ltoptions.m40000644000175000017500000003426213237017572015746 0ustar00piccapicca00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 8 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option '$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the 'shared' and # 'disable-shared' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the 'static' and # 'disable-static' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the 'fast-install' # and 'disable-fast-install' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- # implement the --with-aix-soname flag, and support the `aix-soname=aix' # and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT # is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) AC_ARG_WITH([aix-soname], [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], [case $withval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]) ;; esac lt_cv_with_aix_soname=$with_aix_soname], [AC_CACHE_VAL([lt_cv_with_aix_soname], [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) with_aix_soname=$lt_cv_with_aix_soname]) AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac _LT_DECL([], [shared_archive_member_spec], [0], [Shared archive member basename, for filename based shared library versioning on AIX])dnl ])# _LT_WITH_AIX_SONAME LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. # MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac], [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) hkl-5.0.0.2449/m4/lt~obsolete.m40000644000175000017500000001377413237017573016273 0ustar00piccapicca00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software # Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) hkl-5.0.0.2449/ChangeLog0000644000175000017500000600521513237020571014676 0ustar00piccapicca00000000000000# Generated by Makefile. Do not edit. commit 07496021022d7948ef5151c4f2e267b7578af22a Author: Picca Frédéric-Emmanuel Date: Thu Feb 8 08:35:55 2018 +0100 [hkl] remove all 64bits warnings gui/hkl-gui-pseudoaxes.c | 14 +++++++------- gui/hkl-gui.c | 3 ++- hkl/hkl-detector.c | 2 +- hkl/hkl-pseudoaxis.c | 4 ++-- hkl/hkl-trajectory.c | 4 ++-- hkl3d/hkl3d.cpp | 6 +++--- 6 files changed, 17 insertions(+), 16 deletions(-) commit f0f64a916f49a454f94d8812084c6ebeb18b02ca Author: Picca Frédéric-Emmanuel Date: Thu Feb 8 08:10:36 2018 +0100 [ccan] increase the stack size to fix an FTBFS. hkl/ccan/generator/generator.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1459ffb0788becc232a00a953b30005b33492506 Author: Picca Frédéric-Emmanuel Date: Wed Feb 7 14:09:10 2018 +0100 [buildsys] re-activate the script pre-processing Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 269f6aaf60f97d9c15000291319ab9fff3651103 Author: Picca Frédéric-Emmanuel Date: Thu Jan 4 15:10:18 2018 +0100 [hkl] move all the computational functions in their own files hkl/Makefile.am | 2 + hkl/hkl-pseudoaxis-common-hkl.c | 179 ++------------------------------ hkl/hkl-pseudoaxis-common-private.h | 111 ++++++++++++++++++++ hkl/hkl-pseudoaxis-common.c | 202 ++++++++++++++++++++++++++++++++++++ 4 files changed, 326 insertions(+), 168 deletions(-) commit 7fba8c4c7f568470839377170ce52801d3b99b06 Author: Picca Frédéric-Emmanuel Date: Thu Jan 4 14:31:45 2018 +0100 upgrading copyright year from 2017 to 2018 Documentation/figures/sirius.c | 2 +- Documentation/hkl-default.el | 2 +- contrib/haskell/data/gprof2dot.py | 2 +- contrib/haskell/src/hkl.hs | 2 +- contrib/sixs/hkl3d.c | 2 +- gui/hkl-gui-3d.c | 2 +- gui/hkl-gui-3d.h | 2 +- gui/hkl-gui-macros.h | 2 +- gui/hkl-gui.c | 2 +- gui/hkl-gui.h | 2 +- hkl.h | 2 +- hkl/api2/hkl2.h | 2 +- hkl/hkl-axis-private.h | 2 +- hkl/hkl-axis.c | 2 +- hkl/hkl-binding-private.h | 2 +- hkl/hkl-binding.c | 2 +- hkl/hkl-detector-factory.c | 2 +- hkl/hkl-detector-private.h | 2 +- hkl/hkl-detector.c | 2 +- hkl/hkl-engine-2c.c | 2 +- hkl/hkl-engine-e4c.c | 2 +- hkl/hkl-engine-e6c.c | 2 +- hkl/hkl-engine-k4c.c | 2 +- hkl/hkl-engine-k6c.c | 2 +- hkl/hkl-engine-petra3-p08-lisa.c | 2 +- hkl/hkl-engine-petra3-p09-eh2.c | 2 +- hkl/hkl-engine-soleil-sirius-turret.c | 2 +- hkl/hkl-engine-soleil-sixs-med.c | 2 +- hkl/hkl-engine-template.c | 2 +- hkl/hkl-engine-zaxis.c | 2 +- hkl/hkl-factory-private.h | 2 +- hkl/hkl-factory.c | 2 +- hkl/hkl-geometry-private.h | 2 +- hkl/hkl-geometry.c | 2 +- hkl/hkl-interval-private.h | 2 +- hkl/hkl-interval.c | 2 +- hkl/hkl-lattice-private.h | 2 +- hkl/hkl-lattice.c | 2 +- hkl/hkl-macros-private.h | 2 +- hkl/hkl-macros.c | 2 +- hkl/hkl-matrix-private.h | 2 +- hkl/hkl-matrix.c | 2 +- hkl/hkl-parameter-private.h | 2 +- hkl/hkl-parameter.c | 2 +- hkl/hkl-pseudoaxis-auto-private.h | 2 +- hkl/hkl-pseudoaxis-auto.c | 2 +- hkl/hkl-pseudoaxis-common-eulerians-private.h | 2 +- hkl/hkl-pseudoaxis-common-eulerians.c | 2 +- hkl/hkl-pseudoaxis-common-hkl-private.h | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 2 +- hkl/hkl-pseudoaxis-common-psi-private.h | 2 +- hkl/hkl-pseudoaxis-common-psi.c | 2 +- hkl/hkl-pseudoaxis-common-q-private.h | 2 +- hkl/hkl-pseudoaxis-common-q.c | 2 +- hkl/hkl-pseudoaxis-common-readonly-private.h | 2 +- hkl/hkl-pseudoaxis-common-readonly.c | 2 +- hkl/hkl-pseudoaxis-common-tth-private.h | 2 +- hkl/hkl-pseudoaxis-common-tth.c | 2 +- hkl/hkl-pseudoaxis-private.h | 2 +- hkl/hkl-pseudoaxis.c | 2 +- hkl/hkl-quaternion-private.h | 2 +- hkl/hkl-quaternion.c | 2 +- hkl/hkl-sample-private.h | 2 +- hkl/hkl-sample.c | 2 +- hkl/hkl-source-private.h | 2 +- hkl/hkl-source.c | 2 +- hkl/hkl-trajectory-private.h | 2 +- hkl/hkl-trajectory.c | 2 +- hkl/hkl-types.c | 2 +- hkl/hkl-types.h | 2 +- hkl/hkl-unit-private.h | 2 +- hkl/hkl-unit.c | 2 +- hkl/hkl-vector-private.h | 2 +- hkl/hkl-vector.c | 2 +- hkl3d/hkl3d.h | 2 +- tests/hkl-axis-t.c | 2 +- tests/hkl-bench-t.c | 2 +- tests/hkl-detector-t.c | 2 +- tests/hkl-geometry-t.c | 2 +- tests/hkl-interval-t.c | 2 +- tests/hkl-lattice-t.c | 2 +- tests/hkl-matrix-t.c | 2 +- tests/hkl-parameter-t.c | 2 +- tests/hkl-pseudoaxis-e4ch-t.c | 2 +- tests/hkl-pseudoaxis-e4cv-t.c | 2 +- tests/hkl-pseudoaxis-e6c-t.c | 2 +- tests/hkl-pseudoaxis-k4cv-t.c | 2 +- tests/hkl-pseudoaxis-k6c-t.c | 2 +- tests/hkl-pseudoaxis-soleil-sirius-kappa-t.c | 2 +- tests/hkl-pseudoaxis-t.c | 2 +- tests/hkl-pseudoaxis-zaxis-t.c | 2 +- tests/hkl-quaternion-t.c | 2 +- tests/hkl-sample-t.c | 2 +- tests/hkl-source-t.c | 2 +- tests/hkl-unit-t.c | 2 +- tests/hkl-vector-t.c | 2 +- tests/hkl3d-test-t.c | 2 +- tests/tap/hkl-tap.h | 2 +- 98 files changed, 98 insertions(+), 98 deletions(-) commit ae5a0004a5ee8335b96b2b16f9d0589bf54ba3b7 Author: Picca Frédéric-Emmanuel Date: Thu Jan 4 08:55:34 2018 +0100 [hk] rename all the internal struct Make them easier to remember. hkl/hkl-pseudoaxis-common-hkl.c | 223 ++++++++++++++++++++-------------------- 1 file changed, 114 insertions(+), 109 deletions(-) commit 00eddf84acbb7e6a4a7a449f7385361ce8f88900 Author: Picca Frédéric-Emmanuel Date: Wed Jan 3 23:08:18 2018 +0100 [hkl] factorization in emergence_fixed hkl/hkl-pseudoaxis-common-hkl.c | 72 +++++++++++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 25 deletions(-) commit 12d7eb03c3bc0b0764cc31a8a11793d433357dc9 Author: Picca Frédéric-Emmanuel Date: Wed Jan 3 17:58:55 2018 +0100 [hkl] more factorization... hkl/hkl-pseudoaxis-common-hkl.c | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) commit a957db970eb011582074c59ac9910c96c23600b3 Author: Picca Frédéric-Emmanuel Date: Wed Jan 3 17:35:12 2018 +0100 [hkl] more factorization in the hkl engines hkl/hkl-pseudoaxis-common-hkl.c | 46 +++++++++++++---------------------------- 1 file changed, 14 insertions(+), 32 deletions(-) commit 5c4e9047aeb5bf48bc9e3191eb4740500858aea4 Author: Picca Frédéric-Emmanuel Date: Wed Jan 3 16:33:42 2018 +0100 [hkl] factorize the psi_constant_vertical method hkl/hkl-pseudoaxis-common-hkl.c | 207 ++++++++++++++++++++++------------------ 1 file changed, 116 insertions(+), 91 deletions(-) commit 8bfbac118eb392ed428b50421e60d0a803b1036e Author: Picca Frédéric-Emmanuel Date: Sun Dec 31 18:30:36 2017 +0100 [hkl] more factorisation in _double_diffraction hkl/hkl-pseudoaxis-common-hkl.c | 112 +++++++++++++++++++++------------------- 1 file changed, 58 insertions(+), 54 deletions(-) commit 4f08f5a0234014f3159096604271f89594e14717 Author: Picca Frédéric-Emmanuel Date: Sun Dec 31 10:23:58 2017 +0100 [hkl] created an HklEngineHklInternalW struct and _hklW method This will allow to factorize computation between hkl modes. hkl/hkl-pseudoaxis-common-hkl.c | 64 ++++++++++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 20 deletions(-) commit 44ed6f03002d961b93720c4d976fd9c98da1c339 Author: Picca Frédéric-Emmanuel Date: Sat Dec 30 22:08:42 2017 +0100 [hkl] factorize a bit the hkl part hkl/hkl-pseudoaxis-common-hkl.c | 52 +++++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 17 deletions(-) commit ece52c007d5a14908b72185929e847ad11c3f869 Author: Picca Frédéric-Emmanuel Date: Sat Dec 30 22:05:00 2017 +0100 [buildsys] fix the unit test hkl/hkl-engine-petra3-p08-lisa.c | 2 +- tests/Makefile.am | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) commit 6cadf4eecafb0ba29c4c482d5fca522529905c0c Author: Picca Frédéric-Emmanuel Date: Sun Dec 24 11:03:39 2017 +0100 [doc] update the documentation. NEWS | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) commit 9d77a2602bf01218d335cb5ecbd5a6930f8e1ad3 Author: Picca Frédéric-Emmanuel Date: Sat Dec 23 23:37:35 2017 +0100 [buildsys] do not regenerate the .dat files Documentation/figures/Makefile.am | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) commit 151e8365106608e6d0bfaea2cf601d8a61b526ed Author: Picca Frédéric-Emmanuel Date: Sat Dec 23 12:20:50 2017 +0100 [hkl] hyde most symbols Documentation/figures/Makefile.am | 8 +++++++- gui/Makefile.am | 1 - hkl.h | 2 ++ hkl/Makefile.am | 2 +- hkl/api2/Makefile.am | 5 ++++- hkl/hkl-binding.c | 3 ++- hkl/hkl-macros-private.h | 15 ++++++++++++++- hkl/hkl-macros.c | 16 +--------------- hkl/hkl-trajectory.c | 1 + hkl/hkl-unit-private.h | 31 ++++++++++++++++++++++++++++++- hkl/hkl-unit.c | 31 ------------------------------- tests/Makefile.am | 5 +++-- 12 files changed, 65 insertions(+), 55 deletions(-) commit b5f3fa15aa8d165bd5890e2272c03e495223e0a7 Author: Picca Frédéric-Emmanuel Date: Sat Dec 23 12:20:09 2017 +0100 [hkl] typo hkl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e6dbde809c12f725ad48ca86c7267204da26ea87 Author: Picca Frédéric-Emmanuel Date: Mon Dec 4 10:38:34 2017 +0100 [buildsys] add the sirius figures dependencies Documentation/figures/Makefile.am | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 0f84bcae97ca12dbb0f8f40fa4bb8553e6c8a49b Author: Picca Frédéric-Emmanuel Date: Sun Dec 3 10:30:19 2017 +0100 [buildsys] move the ghkl manpages at the right place This way it will be possible to build the documentation independently. This will simplify the Debian packaging. Documentation/Makefile.am | 2 -- gui/Makefile.am | 2 ++ {Documentation => gui}/ghkl.1 | 0 3 files changed, 2 insertions(+), 2 deletions(-) commit 190c20a8abdc19067d36df699645e630ca95359a Author: Picca Frédéric-Emmanuel Date: Sat Dec 2 22:27:32 2017 +0100 [doc] add the gnuplot files. the org-mode gnuplot hang during the sbuild process Documentation/figures/Makefile.am | 16 ++++++++-- Documentation/figures/sirius-m-zoom.gnuplot | 13 ++++++++ Documentation/figures/sirius-m.gnuplot | 10 ++++++ Documentation/figures/sirius-s.gnuplot | 10 ++++++ Documentation/figures/traj_n.gnuplot | 7 +++++ Documentation/hkl.org.in | 48 +++-------------------------- configure.ac | 2 +- 7 files changed, 58 insertions(+), 48 deletions(-) commit fe6aedad472f4fbfc5709619350538f72fdb870f Author: Picca Frédéric-Emmanuel Date: Sat Dec 2 16:18:06 2017 +0100 [doc] fix figure generation with asy Documentation/figures/B_a.asy | 2 ++ Documentation/figures/B_b.asy | 3 +++ Documentation/figures/qper_qpar.asy | 3 +++ Documentation/figures/zaxis.asy | 5 +++-- 4 files changed, 11 insertions(+), 2 deletions(-) commit eb16beb5e964af0dd7f65b0a83e06b092caff539 Author: Picca Frédéric-Emmanuel Date: Sat Dec 2 15:03:29 2017 +0100 [buildsys] fix the release target Makefile.am | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit c5f86fd4c795b1dfc99fb120c45f25e25538a7d5 Author: Picca Frédéric-Emmanuel Date: Sat Dec 2 14:24:30 2017 +0100 pre-release gui/hkl-gui.c | 164 ++++++++--------- hkl/hkl-axis.c | 10 +- hkl/hkl-engine-petra3-p08-lisa.c | 386 +++++++++++++++++++-------------------- hkl/hkl-parameter.c | 2 +- tests/hkl-lattice-t.c | 14 +- tests/tap/basic.h | 18 +- 6 files changed, 297 insertions(+), 297 deletions(-) commit b1c0c09be0f119d4b696bb84c1179cf7857d37b6 Author: Picca Frédéric-Emmanuel Date: Sat Dec 2 13:40:02 2017 +0100 [contrib][six] restore at the right place contrib/{python => }/sixs/Makefile.am | 0 contrib/{python => }/sixs/hkl3d.c | 0 2 files changed, 0 insertions(+), 0 deletions(-) commit 59c950a08f70aaa9151a5442abe1da61d072373a Author: Picca Frédéric-Emmanuel Date: Sat Dec 2 12:38:35 2017 +0100 [hkl] updated ccan hkl/ccan/Makefile.am | 34 +++++++++++----------- hkl/ccan/configurator.c | 2 ++ hkl/ccan/darray/darray.h | 76 ++++++++++++++++++++++++++---------------------- 3 files changed, 61 insertions(+), 51 deletions(-) commit 228b4e0cb1849f683be6483707140c31d62756aa Author: Picca Frédéric-Emmanuel Date: Sat Dec 2 12:33:53 2017 +0100 [hkl] updated INSTALL file INSTALL | 320 ++++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 159 insertions(+), 161 deletions(-) commit 7c53552f451edca75fc5635fdd3537d58ed0e46c Author: Picca Frédéric-Emmanuel Date: Sat Dec 2 12:33:37 2017 +0100 [hkl] remove an useless fprintf hkl/api2/hkl2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit df37f0e7e9a9dc5fc304195cba74dff3cfa2731b Author: Picca Frédéric-Emmanuel Date: Tue Nov 21 16:35:38 2017 +0100 [contrib][diffabs] add the 20170063 project contrib/python/20170063.py | 254 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 254 insertions(+) commit 62f28309a5aa1fcf2ced1cf0321dd8a2d4984d31 Author: Picca Frédéric-Emmanuel Date: Tue Nov 21 13:52:54 2017 +0100 [contrib][mars] integrate the samples. contrib/python/mars.py | 218 ++++++++++++++++++++++++++----------------------- 1 file changed, 117 insertions(+), 101 deletions(-) commit dd6e94d2a10ddcd5114b19b4c2c392b6b406f98e Author: Picca Frédéric-Emmanuel Date: Tue Nov 21 10:38:49 2017 +0100 [contrib][python] reorganise with the common part contrib/python/{cristal => }/common.py | 0 contrib/python/{mars/20160800.py => mars.py} | 0 contrib/python/{cristal => }/mythen.py | 0 3 files changed, 0 insertions(+), 0 deletions(-) commit 1e4df1afecf9f05d86bb8b1e89443a926a74f43f Author: akira Date: Thu Nov 16 21:21:56 2017 +0100 [contrib][cristal] add the mythen calibration contrib/python/cristal/common.py | 68 +++++++++ contrib/python/cristal/mythen.py | 306 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 374 insertions(+) commit 1b5cffc92d57c179d575a0ff5d44cd07f16fbf0c Author: akira Date: Thu Nov 16 10:50:22 2017 +0100 [contrib][python] reorganize has a python module contrib/{ => python}/cirpad/blender_pyfai.py | 0 contrib/{ => python}/mars/20160800.py | 0 contrib/{ => python}/sixs/Makefile.am | 0 contrib/{ => python}/sixs/hkl3d.c | 0 contrib/{ => python}/swing/pinhole1.smv | Bin contrib/{ => python}/swing/plot.py | 0 6 files changed, 0 insertions(+), 0 deletions(-) commit 7c4c84036c59ddd28976f8423cd8efd7cacb2a22 Author: Picca Frédéric-Emmanuel Date: Tue Nov 14 15:08:11 2017 +0100 [contrib][mars] more type hinting and create a MultiCalib class contrib/mars/20160800.py | 201 +++++++++++++++++++++++++++-------------------- 1 file changed, 115 insertions(+), 86 deletions(-) commit 30aca20d61aabdc2d07612dbca2045b07ddbdc2d Author: Picca Frédéric-Emmanuel Date: Mon Nov 13 16:32:22 2017 +0100 [contrib][mars] reworked the mars script in order to use H5PathWithAttribute contrib/mars/20160800.py | 129 +++++++++++++++++++++++------------------------ 1 file changed, 63 insertions(+), 66 deletions(-) commit 559df55fa251e09792efa31900ff797aa6cf3872 Author: Picca Frédéric-Emmanuel Date: Wed Oct 18 10:36:56 2017 +0200 [contrib][diffabs] add hamon scripts using pyFAI multicalib contrib/diffabs/hamon.py | 311 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 311 insertions(+) commit 882b2df2cfa30674edff45bc1bb71650ef3df7eb Author: Picca Frédéric-Emmanuel Date: Mon Oct 16 19:20:30 2017 +0200 [contrib][mars] use get_item for tx contrib/mars/20160800.py | 48 ++++++++++++++++++++++-------------------------- 1 file changed, 22 insertions(+), 26 deletions(-) commit f969a2c0a9721ee25c7f7f12ce336aa801ba3871 Author: Picca Frédéric-Emmanuel Date: Mon Oct 16 19:02:17 2017 +0200 [contrib][mars] rename H5OptionalItemValue -> H5PathOptionalItemValue contrib/mars/20160800.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) commit 9081ac75a27468872b7c7ef8f71868ac32f5b2ad Author: Picca Frédéric-Emmanuel Date: Mon Oct 16 18:53:52 2017 +0200 [contrib][mars] rework in order to use the DataSource contrib/mars/20160800.py | 52 ++++++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 26 deletions(-) commit 40f4c93297f3f12d560b3b91331b52ebef0cedfc Author: Picca Frédéric-Emmanuel Date: Mon Oct 16 18:02:13 2017 +0200 [contrib][mars] wip integrate contrib/mars/20160800.py | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) commit 5e6d45c63ad18920df02b3cc798d0754983885b9 Author: Picca Frédéric-Emmanuel Date: Mon Oct 16 17:15:01 2017 +0200 [contrib][mars] add the first working version for the tx,tz calibration contrib/mars/20160800.py | 54 ++++++++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 20 deletions(-) commit d7fd84e1b7bd1eb411812f25161b51fc9a6d5d8c Author: Picca Frédéric-Emmanuel Date: Mon Oct 16 16:31:33 2017 +0200 [contrib][mars] add the 20160800 project contrib/mars/20160800.py | 285 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 285 insertions(+) commit aa14402d9485335904f62970974eaf2afda80769 Author: Picca Frédéric-Emmanuel Date: Tue Aug 15 10:40:21 2017 +0200 [hkl] remove a bunch of warnings hkl/hkl-engine-soleil-sixs-med.c | 4 ---- hkl/hkl-geometry-private.h | 16 ++++++++-------- hkl/hkl-geometry.c | 2 ++ 3 files changed, 10 insertions(+), 12 deletions(-) commit c18ea35f9b8563d521b077cd576dc45515ec8f03 Author: Picca Frédéric-Emmanuel Date: Mon Aug 14 19:05:29 2017 +0200 wip petra3 p01 Documentation/figures/sirius.c | 7 +++-- hkl/api2/hkl2.c | 43 +++++++++++++++++----------- hkl/api2/hkl2.h | 13 +++++++-- hkl/hkl-engine-e4c.c | 10 +++---- tests/hkl-pseudoaxis-e4ch-t.c | 35 +++++++++++++++++++++- tests/hkl-pseudoaxis-soleil-sirius-kappa-t.c | 12 ++++---- 6 files changed, 87 insertions(+), 33 deletions(-) commit eb4d5398e340416f69cbf137cfb75e0ac4cea434 Author: Picca Frédéric-Emmanuel Date: Mon Aug 14 10:52:29 2017 +0200 [doc] update changelog Documentation/hkl.org.in | 7 +++++++ 1 file changed, 7 insertions(+) commit 98573f2933dca2ca2ef5f2973b2ca8c47bdb0cfa Merge: d39a9ed5 568d17d2 Author: Picca Frédéric-Emmanuel Date: Mon Aug 14 10:33:01 2017 +0200 Merge branch 'maint' into next # Conflicts: # Documentation/Makefile.am # hkl/pom.xml commit 568d17d2334c3ac01e6da3c21c95248a65c73fde Author: Picca Frédéric-Emmanuel Date: Tue May 17 19:19:24 2016 +0200 [buildsys] add a publish target for the org-mode documentation Documentation/Makefile.am | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 94f91ddbcd15785c134491ed68adffa389b1fad6 Author: Picca Frédéric-Emmanuel Date: Sun Aug 13 11:03:50 2017 +0200 [hkl3d] fix FTBFS with 2.86.1 hkl3d/hkl3d.cpp | 43 ++++++++++--------------------------------- tests/hkl3d-test-t.c | 33 ++++++++++++++++++++------------- 2 files changed, 30 insertions(+), 46 deletions(-) commit 2a58a31c5f81e23dd97ed10dad5c3284910475d6 Author: Picca Frédéric-Emmanuel Date: Sun Aug 13 10:47:41 2017 +0200 [hkl3d] use HKL_ARG_NONNULL and HKLAPI like for hkl library hkl3d/hkl3d.cpp | 6 ------ hkl3d/hkl3d.h | 51 +++++++++++++++++++++++++++------------------------ 2 files changed, 27 insertions(+), 30 deletions(-) commit d39a9ed5a2985c528fbd3614e95566aa47ee2c73 Author: Picca Frédéric-Emmanuel Date: Thu Jun 29 18:39:50 2017 +0200 [contrib][haskell] use Glob to find all .nxs in a directory. contrib/haskell/src/Hkl/Projects/Mars/Romeden.hs | 137 ++--------------------- 1 file changed, 8 insertions(+), 129 deletions(-) commit ee31085e466d2c4c76c6a52299e7fa6f876fc551 Author: Picca Frédéric-Emmanuel Date: Sun Jul 30 22:46:43 2017 +0200 [contrib][haskell] Hkl.Script contrib/haskell/src/Hkl/Script.hs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit bca44b6c9baeace6904c6d0ac2283be81c3a0000 Author: Picca Frédéric-Emmanuel Date: Sun Jul 30 21:54:04 2017 +0200 [contrib][haskell] Hkl.Nxs contrib/haskell/src/Hkl/Nxs.hs | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) commit 681717d49e07d9ed4a7a68b8eec8fbd04cdb9bb4 Author: Picca Frédéric-Emmanuel Date: Sun Jul 30 21:38:14 2017 +0200 [contrib][haskell] Hkl.Flat contrib/haskell/src/Hkl/Flat.hs | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) commit 60afa70dacd29ba8e70b8834fe516d1257d1bc46 Author: Picca Frédéric-Emmanuel Date: Sun Jul 30 20:24:14 2017 +0200 [contrib][haskell] Hkl.Edf contrib/haskell/src/Hkl/Edf.hs | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) commit 9f28f0872cf07d8e299eeae2ee66e9898b6d5eb8 Author: Picca Frédéric-Emmanuel Date: Sun Jul 30 20:13:50 2017 +0200 [contrib][haskell] Hkl.Xrd.Calibration contrib/haskell/src/Hkl/Xrd/Calibration.hs | 66 ++++++++++++++++++++++++++---- 1 file changed, 58 insertions(+), 8 deletions(-) commit 5dbb21169bb85680ed4c7c5ad91b7966fb750941 Author: Picca Frédéric-Emmanuel Date: Sun Jul 30 20:13:35 2017 +0200 [contrib][haskell] Hkl.Xrd.OneD contrib/haskell/src/Hkl/Xrd/OneD.hs | 68 ++++++++++++++++++++++++++----------- 1 file changed, 49 insertions(+), 19 deletions(-) commit 45418c9cf5c5d8c4f09a188b83cf95c8a23e90a2 Author: Picca Frédéric-Emmanuel Date: Sun Jul 30 19:04:42 2017 +0200 [contrib][haskell] Hkl.Xrd.ZeroD contrib/haskell/src/Hkl/Xrd/ZeroD.hs | 39 ++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 20 deletions(-) commit 87295997e5d4b95e38886b43fb3943f0ceafd10b Author: Picca Frédéric-Emmanuel Date: Sun Jul 30 19:04:25 2017 +0200 [contrib][haskell] Hkl.Xrd.OneD contrib/haskell/src/Hkl/Xrd/OneD.hs | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) commit 3050d7e1b769938c613a9762802618993d1b0635 Author: Picca Frédéric-Emmanuel Date: Sun Jul 30 19:04:07 2017 +0200 [contrib][haskell] Hkl.Utils contrib/haskell/src/Hkl/Utils.hs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) commit 0222249d79a8ffa6b9c09fe01eba4d4de6232ace Author: Picca Frédéric-Emmanuel Date: Sun Jul 30 19:03:51 2017 +0200 [contrib][haskell] Hkl.Types.Parameter contrib/haskell/src/Hkl/Types/Parameter.hsc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 7f90b886bd626d443c3dacb941f10d30793b95e7 Author: Picca Frédéric-Emmanuel Date: Sun Jul 30 19:03:26 2017 +0200 [contrib][haskell] PyFAI.Detector contrib/haskell/src/Hkl/PyFAI/Detector.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 4239c73402e9872416990b6ea683605e7a723fe6 Author: Picca Frédéric-Emmanuel Date: Sun Jul 30 19:03:12 2017 +0200 [contrib][haskell] Calib contrib/haskell/src/Hkl/PyFAI/Calib.hs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit d5812a81a8024e21b435e26f856e3061565e7ec6 Author: Picca Frédéric-Emmanuel Date: Sun Jul 30 19:02:58 2017 +0200 [contrib][haskell] Sixs contrib/haskell/src/Hkl/Projects/Sixs.hs | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) commit 10caaf9554da3836ce690e2bdd61b7db64805870 Author: Picca Frédéric-Emmanuel Date: Sun Jul 30 19:02:41 2017 +0200 [contrib][haskell] H5 contrib/haskell/src/Hkl/H5.hs | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) commit 94d12d8a40a060dcbdde06f71be38e95064f67b6 Author: Picca Frédéric-Emmanuel Date: Sun Jul 30 19:02:26 2017 +0200 [contrib][haskell] Engine contrib/haskell/src/Hkl/Engine.hs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit 0bd92effc2cdcef781d4f5a9381489f66a85c2b8 Author: Picca Frédéric-Emmanuel Date: Sun Jul 30 19:02:09 2017 +0200 [contrib][haskell] Detector contrib/haskell/src/Hkl/Detector.hs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 3badbf01ac770b6c8f8e3f42e3c3757c5f83fa77 Author: Picca Frédéric-Emmanuel Date: Sun Jul 30 11:43:13 2017 +0200 [contrib][haskell] use a bunch of other -Wxxx options -Wincomplete-uni-patterns -Wincomplete-record-updates -Wmissing-import-lists contrib/haskell/hkl.cabal | 2 +- contrib/haskell/src/Hkl/C/Sample.hsc | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) commit 882473b16e80188f6fb1b6c0ac49f2f4576fd7ba Author: Picca Frédéric-Emmanuel Date: Fri Jun 30 16:40:24 2017 +0200 [contrib][haskell] better dummy filter for the charlier data's contrib/haskell/src/Hkl/Projects/Diffabs/Charlier.hs | 6 +++++- contrib/haskell/src/Hkl/Xrd/OneD.hs | 4 ++-- contrib/haskell/src/xrd.hs | 4 ++-- 3 files changed, 9 insertions(+), 5 deletions(-) commit 8f5f4b051f7b9b89f7057b96f3cafd3cb2122ac8 Author: Picca Frédéric-Emmanuel Date: Fri Jun 30 15:49:03 2017 +0200 [contrib][haskell] more todo for melle contrib/haskell/src/Hkl/Projects/Diffabs/Melle.hs | 24 ++++++++++++++++------- contrib/haskell/src/xrd.hs | 4 ++-- 2 files changed, 19 insertions(+), 9 deletions(-) commit 8af786da2cf25eb7c321f051111409c31b0f13e0 Author: Picca Frédéric-Emmanuel Date: Thu Jun 29 16:20:29 2017 +0200 [contrib][haskell] add more images for romeden contrib/haskell/src/Hkl/Projects/Mars/Romeden.hs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) commit 0d2cd9ef6a5b51bfc23b2cab7944d2649ffe0ad2 Author: Picca Frédéric-Emmanuel Date: Thu Jun 29 10:21:22 2017 +0200 [contrib][haskell] simplify romeden using nxEntries function contrib/haskell/src/Hkl/Projects/Diffabs/Melle.hs | 8 +--- contrib/haskell/src/Hkl/Projects/Mars/Romeden.hs | 50 +++++++++++------------ contrib/haskell/src/xrd.hs | 4 +- 3 files changed, 29 insertions(+), 33 deletions(-) commit 0afaeb821cad4ccc127297852059543a38a47b44 Author: Picca Frédéric-Emmanuel Date: Wed Jun 28 15:33:50 2017 +0200 [contrib][haskell] work on the h5iterate contrib/haskell/src/Hkl/H5.hs | 75 ++++++++++++++++++++--- contrib/haskell/src/Hkl/Projects/Diffabs/Melle.hs | 8 ++- 2 files changed, 72 insertions(+), 11 deletions(-) commit 121b90bf82223d60520022285f57241086b237f7 Author: Picca Frédéric-Emmanuel Date: Tue Jun 27 17:46:14 2017 +0200 [contrib][haskell] add the melle session4 calibration. contrib/haskell/src/Hkl/Projects/Diffabs/Melle.hs | 99 ++++++++++++++++++++++- 1 file changed, 96 insertions(+), 3 deletions(-) commit 2c1bbfbcade7d1e096e303778316644b2c5f43ff Author: Picca Frédéric-Emmanuel Date: Tue Jun 27 11:58:20 2017 +0200 [contrib][haskell] add the melle scans contrib/haskell/src/Hkl/Projects/Diffabs/Melle.hs | 101 ++++++++++++---------- 1 file changed, 57 insertions(+), 44 deletions(-) commit 27c20af75ee6f5a7eaee59540437b45102029fb4 Author: Picca Frédéric-Emmanuel Date: Tue Jun 27 11:05:05 2017 +0200 [contrib][haskell] start to work on the melle project contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/H5.hs | 26 ++- contrib/haskell/src/Hkl/Projects/Diffabs.hs | 2 +- contrib/haskell/src/Hkl/Projects/Diffabs/Melle.hs | 271 ++++++++++++++++++---- contrib/haskell/src/Hkl/Projects/Mars/Romeden.hs | 16 +- contrib/haskell/src/Hkl/Xrd/Mesh.hs | 2 +- contrib/haskell/src/xrd.hs | 6 +- 7 files changed, 259 insertions(+), 65 deletions(-) commit 7f33cd9da27e41d6d1461602644e30867f5e48cb Author: Picca Frédéric-Emmanuel Date: Thu Jun 22 16:10:41 2017 +0200 [contrib][haskell] use juicipixels in order to extract file as tiff contrib/haskell/hkl.cabal | 3 + contrib/haskell/src/Hkl.hs | 1 + contrib/haskell/src/Hkl/Nxs.hs | 53 ++++++++++++++++- contrib/haskell/src/Hkl/Projects/Mars.hs | 1 + contrib/haskell/src/Hkl/Projects/Mars/Romeden.hs | 76 ++++++++++++++++++------ contrib/haskell/src/Hkl/Tiff.hs | 10 ++++ contrib/haskell/src/xrd.hs | 3 +- 7 files changed, 124 insertions(+), 23 deletions(-) commit c4b8b6fd74eb7adb70870c8ff16a4edd90e4f06a Author: Picca Frédéric-Emmanuel Date: Mon Jun 19 10:36:43 2017 +0200 [contrib][haskell] add more todo contrib/haskell/src/Hkl/Projects/Mars/Romeden.hs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) commit 07dfe473004f6c78c0105a421c574cea91e00b09 Author: Picca Frédéric-Emmanuel Date: Fri Jun 16 15:53:52 2017 +0200 [contrib][haskell] add the Romeden project todo contrib/haskell/src/Hkl/Projects/Mars/Romeden.hs | 116 +++++++++++++++++++++++ 1 file changed, 116 insertions(+) commit 8e1595ade3953526027b71b290c6568d56210d4d Author: Picca Frédéric-Emmanuel Date: Fri Jun 16 15:24:13 2017 +0200 [contrib][haskell] add the Mars Schlegel project contrib/haskell/hkl.cabal | 3 + contrib/haskell/src/Hkl/Edf.hs | 48 +-------- contrib/haskell/src/Hkl/Nxs.hs | 5 + contrib/haskell/src/Hkl/Projects.hs | 1 + contrib/haskell/src/Hkl/Projects/Mars.hs | 3 + contrib/haskell/src/Hkl/Projects/Mars/Schlegel.hs | 110 ++++++++++++++++++++ contrib/haskell/src/Hkl/PyFAI/Calibrant.hs | 3 +- contrib/haskell/src/Hkl/PyFAI/Poni.hs | 3 + contrib/haskell/src/Hkl/Xrd.hs | 1 + contrib/haskell/src/Hkl/Xrd/Calibration.hs | 27 ++--- contrib/haskell/src/Hkl/Xrd/OneD.hs | 2 +- contrib/haskell/src/Hkl/Xrd/ZeroD.hs | 119 ++++++++++++++++++++++ contrib/haskell/src/xrd.hs | 3 +- 13 files changed, 268 insertions(+), 60 deletions(-) commit cd1852360bfbb3dbda14a2bc42ec8eb4166f6dfb Author: Picca Frédéric-Emmanuel Date: Tue Jun 6 14:08:06 2017 +0200 [contrib][haskell] the calibration function is now customizable contrib/haskell/src/Hkl/Xrd/Calibration.hs | 63 ++++++++++++++++++------------ 1 file changed, 37 insertions(+), 26 deletions(-) commit f4f018f84fe9a13c8b7fc277c0ce294d1c71d538 Author: Picca Frédéric-Emmanuel Date: Tue May 30 12:17:27 2017 +0200 [contrib][haskell] convert the Pose type into a data type contrib/haskell/src/Hkl/Projects/D2AM/XRD.hs | 2 +- .../haskell/src/Hkl/Projects/Diffabs/Charlier.hs | 2 +- contrib/haskell/src/Hkl/Projects/Diffabs/Hamon.hs | 2 +- contrib/haskell/src/Hkl/Projects/Diffabs/IRDRx.hs | 2 +- contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 2 +- .../haskell/src/Hkl/Projects/Diffabs/Martinetto.hs | 2 +- contrib/haskell/src/Hkl/PyFAI/Poni.hs | 4 ++-- contrib/haskell/src/Hkl/PyFAI/PoniExt.hs | 5 +++-- contrib/haskell/src/Hkl/Xrd/Calibration.hs | 17 +++++++++-------- contrib/haskell/src/Hkl/Xrd/Mesh.hs | 12 +++++++----- contrib/haskell/src/Hkl/Xrd/OneD.hs | 21 +++++++++++---------- 11 files changed, 38 insertions(+), 33 deletions(-) commit d2e2f7bbfa32925aaee0cbd8550feb8aa278276a Author: Picca Frédéric-Emmanuel Date: Tue May 30 11:27:49 2017 +0200 [contrib][haskell] rename OutputBaseDir -> AbsDirPath in order to prepare for ghc path module contrib/haskell/src/Hkl/Types.hs | 7 +++---- contrib/haskell/src/Hkl/Xrd/Calibration.hs | 8 ++++---- contrib/haskell/src/Hkl/Xrd/Mesh.hs | 8 ++++---- contrib/haskell/src/Hkl/Xrd/OneD.hs | 18 ++++++++---------- 4 files changed, 19 insertions(+), 22 deletions(-) commit 8dd21dfaccb1d66948da3a5a59bfe8840920b8c2 Author: Picca Frédéric-Emmanuel Date: Tue May 30 11:07:56 2017 +0200 [contrib][haskell] move OutputBaseDir and SampleName into Types.hs contrib/haskell/src/Hkl/Types.hs | 8 ++++++++ contrib/haskell/src/Hkl/Xrd/Calibration.hs | 4 ++-- contrib/haskell/src/Hkl/Xrd/OneD.hs | 3 --- 3 files changed, 10 insertions(+), 5 deletions(-) commit 38b675a53309c0496a294fd653d666882718c8a8 Author: Picca Frédéric-Emmanuel Date: Tue May 30 09:26:31 2017 +0200 [contrib][haskell] use applicative where it makes sense contrib/haskell/src/Hkl/Xrd/Calibration.hs | 24 +++++++++++++----------- contrib/haskell/src/Hkl/Xrd/OneD.hs | 16 +++++++++------- 2 files changed, 22 insertions(+), 18 deletions(-) commit 2e6f994e89071f94dc527cb0ce4e86be65e788ff Author: Picca Frédéric-Emmanuel Date: Mon May 29 18:32:27 2017 +0200 [contrib][haskell] remove an useless variable contrib/haskell/src/Hkl/Xrd/OneD.hs | 2 -- 1 file changed, 2 deletions(-) commit afa7fc11a91ce262967a7d47b498aeaf3461f036 Author: Picca Frédéric-Emmanuel Date: Wed May 24 16:03:55 2017 +0200 [control][haskell] todo contrib/haskell/src/Hkl/Xrd/OneD.hs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 30b36050ea3d5a675c1c3931619f5f7c106841cd Author: Picca Frédéric-Emmanuel Date: Wed May 24 12:02:32 2017 +0200 [contrib][haskell] use an ADetector in the PoniFile contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/PyFAI.hs | 1 + contrib/haskell/src/Hkl/PyFAI/Calib.hs | 5 +-- contrib/haskell/src/Hkl/PyFAI/Detector.hs | 18 +++++++++++ contrib/haskell/src/Hkl/PyFAI/Poni.hs | 51 ++++++++++++++++++++++++------- 5 files changed, 63 insertions(+), 13 deletions(-) commit 743ad246cb4f5dfc290bd66c6489e6f30cffbc5c Author: Picca Frédéric-Emmanuel Date: Wed May 24 09:04:34 2017 +0200 [contrib][haskell] use the WaveLength type in the Poni contrib/haskell/src/Hkl/PyFAI/Poni.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit b3fbbf580890cc546d30eb231485cd3eb7138f8a Author: Picca Frédéric-Emmanuel Date: Wed May 24 08:53:46 2017 +0200 [contrib][haskell] typo contrib/haskell/src/Hkl/Projects/Diffabs/Hamon.hs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit e870eaad6f96f8c0b11925705c7c7de0c87b1ef4 Author: Picca Frédéric-Emmanuel Date: Tue May 23 16:11:06 2017 +0200 [contrib][haskell] rework a bit the calib script contrib/haskell/src/Hkl/PyFAI/Calib.hs | 3 +++ contrib/haskell/src/Hkl/Xrd/Calibration.hs | 14 ++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) commit d8fbd7fdb8536d169711e71a1e6c256cde752b18 Author: Picca Frédéric-Emmanuel Date: Tue May 23 15:44:41 2017 +0200 [contrib][haskell] read the wavelength from the enxus file during calibration contrib/haskell/src/Hkl/PyFAI/Calib.hs | 6 ++++++ contrib/haskell/src/Hkl/Xrd/Calibration.hs | 30 ++++++++++++++++++++++++++---- 2 files changed, 32 insertions(+), 4 deletions(-) commit 3cf3a1caa2c04bc21182f588c404fe98605aebdc Author: Picca Frédéric-Emmanuel Date: Tue May 23 13:36:38 2017 +0200 [contrib][haskell] add a Calibrant to the XrdCalibration contrib/haskell/hkl.cabal | 3 ++- contrib/haskell/src/Hkl/Projects/D2AM/XRD.hs | 1 + contrib/haskell/src/Hkl/Projects/Diffabs/Charlier.hs | 1 + contrib/haskell/src/Hkl/Projects/Diffabs/Hamon.hs | 1 + contrib/haskell/src/Hkl/Projects/Diffabs/Hercules.hs | 1 + contrib/haskell/src/Hkl/Projects/Diffabs/IRDRx.hs | 1 + contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 1 + contrib/haskell/src/Hkl/Projects/Diffabs/Martinetto.hs | 1 + contrib/haskell/src/Hkl/PyFAI.hs | 3 ++- contrib/haskell/src/Hkl/PyFAI/{Detector.hs => Calib.hs} | 6 +++++- contrib/haskell/src/Hkl/PyFAI/Calibrant.hs | 9 +++++++++ contrib/haskell/src/Hkl/Xrd/Calibration.hs | 11 ++++++----- 12 files changed, 31 insertions(+), 8 deletions(-) commit c6003b7916715c741aedc8fb3c976c003701b30a Author: Picca Frédéric-Emmanuel Date: Tue May 23 13:10:51 2017 +0200 [contrib][haskell] put the detector in the XRDCalibration data contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/Projects/D2AM/XRD.hs | 5 ++-- .../haskell/src/Hkl/Projects/Diffabs/Charlier.hs | 5 ++-- contrib/haskell/src/Hkl/Projects/Diffabs/Hamon.hs | 5 ++-- .../haskell/src/Hkl/Projects/Diffabs/Hercules.hs | 5 ++-- contrib/haskell/src/Hkl/Projects/Diffabs/IRDRx.hs | 5 ++-- contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 5 ++-- .../haskell/src/Hkl/Projects/Diffabs/Martinetto.hs | 5 ++-- contrib/haskell/src/Hkl/PyFAI.hs | 1 + contrib/haskell/src/Hkl/PyFAI/Detector.hs | 15 ++++++++++++ contrib/haskell/src/Hkl/Xrd/Calibration.hs | 27 +++++++++++----------- 11 files changed, 52 insertions(+), 27 deletions(-) commit e72e1c7a53d9df9d12d3f92e03f2c5d02a18c30f Author: Picca Frédéric-Emmanuel Date: Tue May 23 11:10:35 2017 +0200 [contrib][haskell] save the scripts with the right FileMode contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/Script.hs | 14 +++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) commit 68b133fe8761147f7b09e827e7619973d934f32f Author: Picca Frédéric-Emmanuel Date: Mon May 22 16:51:29 2017 +0200 [contrib][haskell] add the Hamon project contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/Projects/Diffabs.hs | 1 + contrib/haskell/src/Hkl/Projects/Diffabs/Hamon.hs | 133 ++++++++++++++++++++++ contrib/haskell/src/Hkl/Script.hs | 6 +- contrib/haskell/src/Hkl/Xrd/Calibration.hs | 25 +++- contrib/haskell/src/xrd.hs | 3 +- 6 files changed, 162 insertions(+), 7 deletions(-) commit aefcceed718b0b7f28aea73b245d76aee434f5c3 Author: Picca Frédéric-Emmanuel Date: Sat May 20 15:23:21 2017 +0200 [doc] use a simpler css and add the right mathjax cdn in ordert o use an https adress Documentation/Makefile.am | 2 +- Documentation/css/style.css | 445 +++++++++++++++++++++++++++++++++++++++++++ Documentation/hkl-default.el | 18 +- Documentation/hkl.org.in | 10 +- 4 files changed, 462 insertions(+), 13 deletions(-) commit b38e28a8dbef1b859382d2ad32298d762fed9402 Author: Picca Frédéric-Emmanuel Date: Wed May 17 18:42:27 2017 +0200 [hkl] add the hkl_geometry_[ki/kf]_get method The purpose is to factorize the pseudo axes computation for each diffractometers. hkl/hkl-engine-k6c.c | 2 +- hkl/hkl-engine-petra3-p08-lisa.c | 60 ++++++++++++++++++++++++++---------- hkl/hkl-geometry-private.h | 33 +++++++++++++++++++- hkl/hkl-geometry.c | 11 +++++++ hkl/hkl-pseudoaxis-common-hkl.c | 32 +++++++++---------- hkl/hkl-pseudoaxis-common-psi.c | 22 +++++++------ hkl/hkl-pseudoaxis-common-q.c | 24 ++++++++------- hkl/hkl-pseudoaxis-common-readonly.c | 4 +-- hkl/hkl-pseudoaxis-common-tth.c | 4 +-- 9 files changed, 132 insertions(+), 60 deletions(-) commit 40f6c6aa3532d2f8886e06db23e11d89f6d39d70 Author: Picca Frédéric-Emmanuel Date: Mon May 15 18:42:31 2017 +0200 [hkl] add vtable to HklGeometry and add [sample|detector]_holder_get The idea is to let the geometry declare what is the sample detector and what is the detector holder. hkl/hkl-detector.c | 4 +-- hkl/hkl-engine-2c.c | 2 +- hkl/hkl-engine-e4c.c | 6 ++-- hkl/hkl-engine-e6c.c | 2 +- hkl/hkl-engine-k4c.c | 2 +- hkl/hkl-engine-k6c.c | 9 ++--- hkl/hkl-engine-petra3-p08-lisa.c | 27 ++++++++++++--- hkl/hkl-engine-petra3-p09-eh2.c | 2 +- hkl/hkl-engine-soleil-sirius-turret.c | 2 +- hkl/hkl-engine-soleil-sixs-med.c | 6 ++-- hkl/hkl-engine-template.c | 2 +- hkl/hkl-engine-zaxis.c | 2 +- hkl/hkl-geometry-private.h | 38 ++++++++++++++++++++- hkl/hkl-geometry.c | 24 ++++++++++--- hkl/hkl-pseudoaxis-common-hkl.c | 63 +++++++++++++++++++---------------- hkl/hkl-pseudoaxis-common-readonly.c | 6 ++-- hkl/hkl-sample-private.h | 1 + hkl/hkl-sample.c | 15 ++++++--- tests/hkl-detector-t.c | 4 +-- tests/hkl-geometry-t.c | 24 ++++++------- 20 files changed, 162 insertions(+), 79 deletions(-) commit b6e722920a70af0b036ab205e0e6f9c6789801dd Author: Picca Frédéric-Emmanuel Date: Sat May 6 11:34:37 2017 +0200 [hkl] remove a bunch of warning (gcc-6) hkl/hkl-pseudoaxis-private.h | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) commit a1cf790ccfc187a49c5dd91556d146461c4243d0 Author: Picca Frédéric-Emmanuel Date: Fri May 5 16:11:08 2017 +0200 [hkl] add an hkl_translation_transformation_apply This allow to create a generic way to compute geometry transformations. It was necessary to add a new HklRotationWithOrigin HklParameter type hkl/hkl-axis-private.h | 20 ++++- hkl/hkl-axis.c | 159 +++++++++++++++++++++++++++++++++++---- hkl/hkl-engine-petra3-p08-lisa.c | 10 +-- hkl/hkl-geometry-private.h | 9 +++ hkl/hkl-geometry.c | 33 ++++++++ hkl/hkl-parameter-private.h | 13 +++- hkl/hkl-parameter.c | 13 ++++ hkl/hkl-pseudoaxis-common-hkl.c | 1 + 8 files changed, 235 insertions(+), 23 deletions(-) commit 5a742729f9d21ef63c5f6b01359cebd955dc398e Author: Picca Frédéric-Emmanuel Date: Thu May 4 16:07:51 2017 +0200 [hkl] factorize the hkl_geometry_add_[rotation|translation] -> axis hkl/hkl-geometry.c | 77 ++++++++++----------------------------------- hkl/hkl-parameter-private.h | 2 +- hkl/hkl-parameter.c | 4 +-- 3 files changed, 20 insertions(+), 63 deletions(-) commit af3e7ff0ebd2627eb7bd39b362e8e31a462b1f98 Author: Picca Frédéric-Emmanuel Date: Thu May 4 15:21:47 2017 +0200 [hkl] add the hkl_parameter_transformation_cmp method this allow to compare the translation rotation and tell if they are compatible hkl/hkl-axis.c | 25 +++++++++++++++++++++++-- hkl/hkl-parameter-private.h | 12 +++++++++++- hkl/hkl-parameter.c | 14 ++++++++++++++ tests/hkl-axis-t.c | 36 ++++++++++++++++++++++++++++++++++-- 4 files changed, 82 insertions(+), 5 deletions(-) commit 8fd6c235cc17b571d4842341c7a6a10403308fd2 Author: Picca Frédéric-Emmanuel Date: Wed May 3 22:27:38 2017 +0200 [hkl] remove a bunch of gcc-6 warnings Documentation/figures/Makefile.am | 3 ++- hkl/hkl-geometry.c | 3 --- hkl/hkl-sample.c | 16 +--------------- 3 files changed, 3 insertions(+), 19 deletions(-) commit 73109f5b5082b96abcdafb1cf50d24a33d21e2eb Author: Picca Frédéric-Emmanuel Date: Mon Apr 17 10:05:08 2017 +0200 [hkl] fix compilator warnings hkl/hkl-lattice.c | 4 ---- hkl/hkl-pseudoaxis.c | 2 -- 2 files changed, 6 deletions(-) commit 8ddf5407fec893c8bdebda2f22a51a651d8cb003 Author: Picca Frédéric-Emmanuel Date: Wed May 3 17:04:17 2017 +0200 [hkl] fix the lisa hkl computation by using SI values. beware the si parameterrs should be compatible with the wavelength value hkl/hkl-engine-petra3-p08-lisa.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit c06414491a3c95b9e1f69bf2d70ec9628766f92f Author: Picca Frédéric-Emmanuel Date: Wed May 3 16:52:51 2017 +0200 [test] add the test for the translations and correct a bunch of errors now the hkl_geometry_update take into account only rotation before a translation. Add an hkl_unit_length_meter unit rename hkl_holder_add_rotation_axis -> hkl_holder_add_rotation and change the signature. Now we need to give the user unit of each axis. hkl.h | 102 ++++++++++----------- hkl/hkl-axis.c | 1 + hkl/hkl-engine-2c.c | 4 +- hkl/hkl-engine-e4c.c | 24 ++--- hkl/hkl-engine-e6c.c | 12 +-- hkl/hkl-engine-k4c.c | 8 +- hkl/hkl-engine-k6c.c | 24 ++--- hkl/hkl-engine-petra3-p08-lisa.c | 10 +-- hkl/hkl-engine-petra3-p09-eh2.c | 14 +-- hkl/hkl-engine-soleil-sirius-turret.c | 14 +-- hkl/hkl-engine-soleil-sixs-med.c | 36 ++++---- hkl/hkl-engine-template.c | 12 +-- hkl/hkl-engine-zaxis.c | 10 +-- hkl/hkl-geometry-private.h | 20 ++--- hkl/hkl-geometry.c | 63 ++++++------- hkl/hkl-parameter-private.h | 2 +- hkl/hkl-unit-private.h | 1 + tests/hkl-axis-t.c | 99 +++++++++++++-------- tests/hkl-detector-t.c | 4 +- tests/hkl-geometry-t.c | 161 ++++++++++++++++++++-------------- 20 files changed, 335 insertions(+), 286 deletions(-) commit d0b47d0b03da3206c7fb61b670154772e1321d79 Author: Picca Frédéric-Emmanuel Date: Tue May 2 15:48:50 2017 +0200 [hkl] factorization of the hkl_holder_add_xxx created a common hkl_holder_add_axis_if_not_present method. hkl/hkl-geometry.c | 52 ++++++++++++++++++++++++---------------------------- 1 file changed, 24 insertions(+), 28 deletions(-) commit 1982ad71107af6bd9bee73e45a4cbb3dba01d90a Author: Picca Frédéric-Emmanuel Date: Tue May 2 15:10:03 2017 +0200 [hkl] nwo the translation should works for the petra3 p08 lisa gonio hkl/hkl-engine-petra3-p08-lisa.c | 2 +- hkl/hkl-geometry-private.h | 6 ++++ hkl/hkl-geometry.c | 64 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 1 deletion(-) commit ca72d8a283eecf10089b2be17432151c40265a99 Author: Picca Frédéric-Emmanuel Date: Tue May 2 14:53:02 2017 +0200 [hkl] add the HklTranslation parameter type and its constructor hkl_parameter_new_translation hkl/hkl-axis-private.h | 7 +++++ hkl/hkl-axis.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) commit 1a83e5dc1be03ba13dc2f2e04c15d4c3dee06058 Author: Picca Frédéric-Emmanuel Date: Thu Apr 27 17:23:56 2017 +0200 [hkl] rename hkl_parameter_new_axis -> hkl_parameter_new_rotation We will prepare the arrival of translation in the code in order to deal with the p08 lisa setup hkl/hkl-axis-private.h | 2 +- hkl/hkl-axis.c | 2 +- hkl/hkl-geometry.c | 8 ++------ tests/hkl-axis-t.c | 14 +++++++------- 4 files changed, 11 insertions(+), 15 deletions(-) commit ca732979bfde95db48b090cb6373281d2d076598 Author: Picca Frédéric-Emmanuel Date: Thu Apr 27 15:35:36 2017 +0200 [hkl] rewrite the unit code and add a milli meter unit for petra3 p08 lisa hkl/hkl-unit-private.h | 38 +++++++++----- hkl/hkl-unit.c | 140 +++++++++++++------------------------------------ 2 files changed, 59 insertions(+), 119 deletions(-) commit b6d13c33fcdcbee0133b0404317dc408dd6d3b7e Author: Picca Frédéric-Emmanuel Date: Thu Apr 27 09:50:17 2017 +0200 [hkl] it is better to get the axis via there names. hkl/hkl-engine-petra3-p08-lisa.c | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) commit b97aee13b4e8f91ca82dc290094648731204d977 Author: Picca Frédéric-Emmanuel Date: Wed Apr 26 16:40:58 2017 +0200 [hkl] the hkl read part of petra3 p08 lisa should be ok hkl.h | 4 +++ hkl/hkl-engine-petra3-p08-lisa.c | 56 +++++++++++++++++++++++++++++----------- 2 files changed, 45 insertions(+), 15 deletions(-) commit 93c0be8496238504d58ede1ad852ab06026bbd2d Author: Picca Frédéric-Emmanuel Date: Wed Apr 26 11:40:56 2017 +0200 [hkl] add mode lisa informations hkl/hkl-engine-petra3-p08-lisa.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) commit fb9f00cab7d805d9f4522f7063925b8350ad3058 Author: Picca Frédéric-Emmanuel Date: Wed Apr 26 10:43:57 2017 +0200 [hkl] add a few lisa informations hkl/hkl-engine-petra3-p08-lisa.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) commit 2ab09f8e9c70965194dad127e2d4fec2c7eada0d Author: Picca Frédéric-Emmanuel Date: Wed Apr 26 10:16:16 2017 +0200 [doc] fix the sirius starting point for the 2nd solution. Documentation/figures/sirius.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 67d79a55cdaff0cba2117f02601340f0e2fc6684 Author: Picca Frédéric-Emmanuel Date: Tue Apr 25 11:25:59 2017 +0200 [hkl] wip P08 lisa on the hkl read part hkl/Makefile.am | 1 + hkl/hkl-engine-petra3-p08-lisa.c | 298 +++++++++++++++----------------- hkl/hkl-pseudoaxis-common-hkl-private.h | 2 + hkl/hkl-pseudoaxis-common-hkl.c | 2 +- 4 files changed, 144 insertions(+), 159 deletions(-) commit 93c9cd03799a4802518b24cc46e1fda7f4d32057 Author: Picca Frédéric-Emmanuel Date: Mon Apr 24 16:15:09 2017 +0200 [doc] add a plot showing trajectories of different number of steps. Documentation/figures/Makefile.am | 4 +- Documentation/figures/sirius.c | 85 ++++++++++++++++++++++++++++++++++++++- Documentation/hkl.org.in | 13 ++++++ 3 files changed, 98 insertions(+), 4 deletions(-) commit b321fcc07051fa0dba84c64b47fd9de18fe34c6f Author: Picca Frédéric-Emmanuel Date: Mon Apr 24 15:01:29 2017 +0200 [hkl] remove memory leaks hkl/api2/hkl2.c | 3 ++- hkl/hkl-pseudoaxis-common-readonly.c | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) commit 4303a459783b6891fcfddb98a513ab319a19f3c1 Author: Picca Frédéric-Emmanuel Date: Mon Apr 24 13:58:57 2017 +0200 [doc] put the gnuplot files into the org file Documentation/figures/Makefile.am | 18 ++++----------- Documentation/figures/sirius-m.gnuplot | 10 --------- Documentation/figures/sirius-s.gnuplot | 10 --------- Documentation/hkl-default.el | 3 ++- Documentation/hkl.org.in | 41 ++++++++++++++++++++++++++++++---- 5 files changed, 43 insertions(+), 39 deletions(-) commit bfb2c5d97af94e4cd35bbee74ec083f26d25087b Author: Picca Frédéric-Emmanuel Date: Mon Apr 24 11:14:04 2017 +0200 [hkl] add comments to the petra3 p08 lisa code. hkl/hkl-engine-petra3-p08-lisa.c | 296 +++++++++++++++++++++++++++++++++------ 1 file changed, 255 insertions(+), 41 deletions(-) commit 3e6e1a53d8d002c31bba75a9a7a25a0f945b0fb2 Author: Picca Frédéric-Emmanuel Date: Fri Apr 21 17:11:25 2017 +0200 [hkl] add an api2 and pass the distcheck Documentation/figures/Makefile.am | 49 ++++- Documentation/figures/sirius.c | 126 +++++++++++ configure.ac | 1 + hkl/Makefile.am | 2 +- hkl/api2/Makefile.am | 14 ++ hkl/api2/hkl2.c | 314 +++++++++++++++++++++++++++ hkl/api2/hkl2.h | 299 +++++++++++++++++++++++++ tests/Makefile.am | 1 + tests/hkl-pseudoaxis-soleil-sirius-kappa-t.c | 237 +------------------- tests/tap/hkl-tap.c | 127 ----------- tests/tap/hkl-tap.h | 207 +----------------- 11 files changed, 805 insertions(+), 572 deletions(-) commit bc140f9935db85cbd199b20f7d4a8ac215498646 Author: Picca Frédéric-Emmanuel Date: Fri Apr 21 14:19:36 2017 +0200 [hkl] It is important to move the diffractometer during a trajectory calculation. Documentation/figures/Makefile.am | 13 +++++--- Documentation/figures/sirius-m.gnuplot | 10 ++++++ .../figures/{sirius.gnuplot => sirius-s.gnuplot} | 6 ++-- Documentation/hkl.org.in | 5 ++- tests/hkl-pseudoaxis-soleil-sirius-kappa-t.c | 37 ++++++++++++++++++---- 5 files changed, 56 insertions(+), 15 deletions(-) commit d75b3d16b25b82036244288699f424394189c4df Author: Picca Frédéric-Emmanuel Date: Fri Apr 21 11:33:34 2017 +0200 [hkl] add the trajectory plot when moving the diffractometer Documentation/figures/Makefile.am | 9 ++- Documentation/figures/sirius.gnuplot | 10 +++ Documentation/hkl.org.in | 6 +- Makefile.am | 2 +- configure.ac | 2 + tests/hkl-pseudoaxis-soleil-sirius-kappa-t.c | 105 ++++++++++++++++++++++++--- 6 files changed, 120 insertions(+), 14 deletions(-) commit 880e3a1e9c860873e98f6b45562fd7b4ed7982ab Author: Picca Frédéric-Emmanuel Date: Thu Apr 20 11:53:53 2017 +0200 [hkl] use a generator for the trajectory test INSTALL | 12 +- Makefile.am | 8 +- hkl/ccan/Makefile.am | 32 +- hkl/ccan/alignof/LICENSE | 1 + hkl/ccan/alignof/alignof.h | 20 ++ hkl/ccan/coroutine/LICENSE | 1 + hkl/ccan/coroutine/coroutine.c | 229 ++++++++++++ hkl/ccan/coroutine/coroutine.h | 260 ++++++++++++++ hkl/ccan/cppmagic/LICENSE | 1 + hkl/ccan/cppmagic/cppmagic.h | 191 ++++++++++ hkl/ccan/generator/LICENSE | 1 + hkl/ccan/generator/generator.c | 55 +++ hkl/ccan/generator/generator.h | 220 ++++++++++++ hkl/ccan/ptrint/LICENSE | 1 + hkl/ccan/ptrint/ptrint.h | 35 ++ hkl/ccan/typesafe_cb/LICENSE | 1 + hkl/ccan/typesafe_cb/typesafe_cb.h | 134 +++++++ hkl/hkl-geometry-private.h | 2 +- hkl/hkl-geometry.c | 2 +- hkl/licenses/LGPL-2.1 | 510 +++++++++++++++++++++++++++ tests/hkl-pseudoaxis-soleil-sirius-kappa-t.c | 148 +++++--- 21 files changed, 1798 insertions(+), 66 deletions(-) commit 50f5e5e2226f7f100bb01b8e8cc00258d9c53621 Author: Picca Frédéric-Emmanuel Date: Fri Mar 24 16:54:29 2017 +0100 [contrib][haskell] work on the sirius bug Documentation/hkl.org.in | 47 ++++++++++---------- contrib/haskell/src/Hkl/Detector.hs | 3 ++ contrib/haskell/src/ghkl.hs | 87 +++++++++++++++++-------------------- 3 files changed, 67 insertions(+), 70 deletions(-) commit 25ec0763ed8c80bb232cb3f5b39dbe5ff810ade0 Author: Picca Frédéric-Emmanuel Date: Fri Mar 24 10:19:19 2017 +0100 [contrib][haskell] comment contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 1 - 1 file changed, 1 deletion(-) commit a0e5eb801509154cbbcac75a4e8e9b8b081986ad Author: Picca Frédéric-Emmanuel Date: Tue Apr 18 15:23:05 2017 +0200 [hkl] simulate the trajectory by moving the diffracotmeter between each step. tests/hkl-pseudoaxis-soleil-sirius-kappa-t.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 334b57f6d0e64962957c3835853f2e12a21fe101 Author: Picca Frédéric-Emmanuel Date: Tue Apr 18 10:41:28 2017 +0200 [hkl] put the trajectory code in its own hkl-trajectory files. This API is for now only private. hkl/Makefile.am | 2 + hkl/hkl-trajectory-private.h | 61 ++++++++++++ hkl/hkl-trajectory.c | 139 ++++++++++++++++++++++++++ tests/hkl-pseudoaxis-soleil-sirius-kappa-t.c | 144 +-------------------------- 4 files changed, 204 insertions(+), 142 deletions(-) commit 1f73a245c770c1deed25c4fce3796d6db359922d Author: teresa Date: Wed Apr 5 11:35:56 2017 +0200 Template for petra3-p08-lisa engine hkl/hkl-engine-petra3-p08-lisa.c | 424 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 424 insertions(+) commit 2985a2fd2899010b474ca1ebecdb3b99c789f6c8 Author: Picca Frédéric-Emmanuel Date: Thu Apr 6 13:35:04 2017 +0200 [wip] trajectory tests/hkl-pseudoaxis-soleil-sirius-kappa-t.c | 46 +++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 4 deletions(-) commit 5a3bfbf98dab2b58914e404be4caa1958bbf081b Author: Picca Frédéric-Emmanuel Date: Fri Mar 31 18:11:31 2017 +0200 [tests] add stats in order to check if a trajectory is ok. tests/hkl-pseudoaxis-soleil-sirius-kappa-t.c | 113 ++++++++++++++++++++++++++- 1 file changed, 112 insertions(+), 1 deletion(-) commit 6a2381b53026029dd4db2880dd5489f624bdb577 Author: Picca Frédéric-Emmanuel Date: Fri Mar 31 14:53:23 2017 +0200 [tests] add Engine and Mode type tests/hkl-pseudoaxis-soleil-sirius-kappa-t.c | 77 ++++++++++++++++++++++++---- 1 file changed, 66 insertions(+), 11 deletions(-) commit 573b3932e5afd2d424924dd3ac1de7d6152ecbf4 Author: Picca Frédéric-Emmanuel Date: Fri Mar 31 11:16:06 2017 +0200 [ccan] updated hkl/ccan/autodata/autodata.c | 2 +- hkl/ccan/configurator.c | 254 ++++++++++++++++++++++++++--------------- hkl/ccan/list/list.h | 23 +++- hkl/ccan/ptr_valid/ptr_valid.c | 11 +- hkl/ccan/str/str.h | 2 +- 5 files changed, 193 insertions(+), 99 deletions(-) commit 82098a03d934ba73b0b13b18e04e19a728e29e54 Author: Picca Frédéric-Emmanuel Date: Wed Apr 5 18:46:41 2017 +0200 [contrib][haskell] do not expose a bunch of modules contrib/haskell/src/Hkl/C.hsc | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) commit 4171ad7c851760a35b8aaeb40d2707f6263ce709 Author: Picca Frédéric-Emmanuel Date: Wed Apr 5 18:41:42 2017 +0200 [contrib][haskell] add the Hkl.C.EngineList module contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/C.hsc | 36 +------------------ contrib/haskell/src/Hkl/C/EngineList.hsc | 60 ++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 35 deletions(-) commit b6bddad8aa9581278b618e2340ac34fc8eca782e Author: Picca Frédéric-Emmanuel Date: Wed Apr 5 17:41:01 2017 +0200 [contrib][haskell] add the Hkl.C.Engine contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/C.hsc | 60 ++------------------------ contrib/haskell/src/Hkl/C/Engine.hsc | 81 ++++++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+), 57 deletions(-) commit 48c6f17eeb32ad8e580f394609aea5eea6f9e594 Author: Picca Frédéric-Emmanuel Date: Wed Apr 5 17:23:06 2017 +0200 [contrib][haskell] add Hkl.C.Detector and Hkl.C.GeometryList contrib/haskell/hkl.cabal | 2 + contrib/haskell/src/Hkl/C.hsc | 112 +-------------------------- contrib/haskell/src/Hkl/C/Detector.hsc | 41 ++++++++++ contrib/haskell/src/Hkl/C/Geometry.hsc | 2 - contrib/haskell/src/Hkl/C/GeometryList.hsc | 120 +++++++++++++++++++++++++++++ 5 files changed, 166 insertions(+), 111 deletions(-) commit e5b824cc295476a107bcbe19cb671e3ec008c68a Author: Picca Frédéric-Emmanuel Date: Wed Apr 5 15:27:52 2017 +0200 [contrib][haskell] add the Hkl.C.Sample module contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/C.hsc | 67 +------------------------- contrib/haskell/src/Hkl/C/Sample.hsc | 93 ++++++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+), 65 deletions(-) commit dca88928cc4595dfdd8ea62da45b1f94864ab4e3 Author: Picca Frédéric-Emmanuel Date: Wed Apr 5 14:56:33 2017 +0200 [contrib][haskell] add the Hkl.C.Lattice module contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/C.hsc | 78 +----------------------- contrib/haskell/src/Hkl/C/Geometry.hsc | 4 +- contrib/haskell/src/Hkl/C/Lattice.hsc | 106 +++++++++++++++++++++++++++++++++ 4 files changed, 111 insertions(+), 78 deletions(-) commit d3bcb70c9fdb7622800c8c1502393309dfa57658 Author: Picca Frédéric-Emmanuel Date: Thu Mar 30 15:10:29 2017 +0200 [tests] add the hkl-pseudoaxis-soleil-sirius-kappa tests tests/Makefile.am | 15 +++-- tests/hkl-pseudoaxis-soleil-sirius-kappa-t.c | 96 ++++++++++++++++++++++++++++ tests/tap/hkl-tap.c | 16 +++-- tests/tap/hkl-tap.h | 18 ++++++ 4 files changed, 132 insertions(+), 13 deletions(-) commit df1f08dc680fcf1486c77ad39b997378a7704329 Author: Picca Frédéric-Emmanuel Date: Thu Mar 30 14:10:11 2017 +0200 [tests] add the Zaxis constructor tests/hkl-pseudoaxis-zaxis-t.c | 16 ++++------------ tests/tap/hkl-tap.c | 4 ++++ tests/tap/hkl-tap.h | 16 ++++++++++++++++ 3 files changed, 24 insertions(+), 12 deletions(-) commit ce1ad09520d99cd1562fbb086e1a6ea24ca792d0 Author: Picca Frédéric-Emmanuel Date: Thu Mar 30 14:00:47 2017 +0200 [tests] add the K6c constructor tests/hkl-pseudoaxis-k6c-t.c | 30 ++++++++++++------------------ tests/tap/hkl-tap.c | 4 ++++ tests/tap/hkl-tap.h | 18 ++++++++++++++++++ 3 files changed, 34 insertions(+), 18 deletions(-) commit 47635a274d91938c8b7d0e3b785c9d1716e67505 Author: Picca Frédéric-Emmanuel Date: Thu Mar 30 13:48:40 2017 +0200 [tests] add the K4cv and K4ch constructors tests/hkl-pseudoaxis-k4cv-t.c | 21 +++++++++------------ tests/tap/hkl-tap.c | 8 ++++++++ tests/tap/hkl-tap.h | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 12 deletions(-) commit fb7aa6122863497313703dfe2e223cc2df3aa763 Author: Picca Frédéric-Emmanuel Date: Thu Mar 30 13:33:33 2017 +0200 [test] add the E6c constructor tests/hkl-pseudoaxis-e6c-t.c | 39 +++++++++++++++------------------------ tests/tap/hkl-tap.c | 4 ++++ tests/tap/hkl-tap.h | 20 +++++++++++++++++++- 3 files changed, 38 insertions(+), 25 deletions(-) commit 7a2891a0ff780d14f45ed80658e89f3048532350 Author: Picca Frédéric-Emmanuel Date: Thu Mar 30 13:18:03 2017 +0200 [test] add the E4ch and E4cv geometry constructors remove also plenty of uninitialized warnings tests/hkl-pseudoaxis-e4ch-t.c | 47 ++++++++++++------------------ tests/hkl-pseudoaxis-e4cv-t.c | 68 ++++++++++++++++++------------------------- tests/tap/hkl-tap.c | 49 ++++++++++++++++++------------- tests/tap/hkl-tap.h | 51 ++++++++++++++++++++++---------- 4 files changed, 112 insertions(+), 103 deletions(-) commit 263952aeb01cf35f3cefdea7edfc270cb5ed8d2d Author: Picca Frédéric-Emmanuel Date: Thu Mar 30 10:28:30 2017 +0200 [test] add a newEngines method tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 13 ++----------- tests/tap/hkl-tap.c | 13 +++++++++++++ tests/tap/hkl-tap.h | 4 ++++ 3 files changed, 19 insertions(+), 11 deletions(-) commit 94c18d0b5cbe393846b5c8f15d862f3f027d1917 Author: Picca Frédéric-Emmanuel Date: Wed Mar 29 15:05:53 2017 +0200 [tests] add struct Geometry in order to factorize tests. tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 23 +++++++------- tests/tap/hkl-tap.c | 35 +++++++++++++++++---- tests/tap/hkl-tap.h | 53 +++++++++++++++++++++++++++----- 3 files changed, 86 insertions(+), 25 deletions(-) commit 099a5fb4f4a353a912f87265dc18676810ba4d34 Author: Picca Frédéric-Emmanuel Date: Wed Mar 29 09:12:29 2017 +0200 [tests] create a struct Sample in order to setup a sample easily tests/Makefile.am | 2 +- tests/hkl-pseudoaxis-e4ch-t.c | 12 +++---- tests/hkl-pseudoaxis-e4cv-t.c | 12 +++---- tests/hkl-pseudoaxis-e6c-t.c | 49 +++++++++++---------------- tests/hkl-pseudoaxis-k4cv-t.c | 6 ++-- tests/hkl-pseudoaxis-k6c-t.c | 8 ++--- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 39 +++++++++++---------- tests/hkl-pseudoaxis-t.c | 2 +- tests/hkl-pseudoaxis-zaxis-t.c | 21 +++++------- tests/tap/hkl-tap.c | 58 ++++++++++++++++++++++++++++++++ tests/tap/hkl-tap.h | 40 ++++++++++++++++++++++ 11 files changed, 167 insertions(+), 82 deletions(-) commit 02a796458f9fb0ee79078bee7a67672ff577fbe6 Author: Picca Frédéric-Emmanuel Date: Sat Mar 25 12:42:20 2017 +0100 [contrib][haskell] Storable instance for Geometry contrib/haskell/src/Hkl/C.hsc | 4 +- contrib/haskell/src/Hkl/C/Geometry.hsc | 84 +++++++++++++++++----------------- 2 files changed, 45 insertions(+), 43 deletions(-) commit b2c145afd2720f1adf85b4212f2acb7ad6c6cc71 Author: Picca Frédéric-Emmanuel Date: Sat Mar 25 09:02:23 2017 +0100 [contrib][haskell] add a DArray type contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/C.hsc | 45 +++++++++++----------------------- contrib/haskell/src/Hkl/C/DArray.hsc | 25 +++++++++++++++++++ contrib/haskell/src/Hkl/C/Geometry.hsc | 38 +++++++++++----------------- 4 files changed, 54 insertions(+), 55 deletions(-) commit 9f024dd0d5fddbb455c067c49f824d8006c67779 Author: Picca Frédéric-Emmanuel Date: Sat Mar 25 08:23:12 2017 +0100 [contrib][haskell] add peek/poke for Source contrib/haskell/src/Hkl/C/Geometry.hsc | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) commit 68c1c2e567b6424e8afcbbe3c4c5561c08f06fc2 Author: Picca Frédéric-Emmanuel Date: Sat Mar 25 08:03:20 2017 +0100 [contrib][haskell] no more HklGeometry type contrib/haskell/src/Hkl/C.hsc | 8 ++++---- contrib/haskell/src/Hkl/C/Geometry.hsc | 28 +++++++++++++--------------- 2 files changed, 17 insertions(+), 19 deletions(-) commit 7441f294128b7244612f1f82e2ec09de2e0653dd Author: Picca Frédéric-Emmanuel Date: Sat Mar 25 07:55:00 2017 +0100 [contrib][haskell] create the Hkl.C.Geometry module contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/C.hsc | 108 +------------------ contrib/haskell/src/Hkl/C/Geometry.hsc | 189 +++++++++++++++++++++++++++++++++ contrib/haskell/src/Hkl/PyFAI/Poni.hs | 5 +- contrib/haskell/src/Hkl/Types.hs | 34 ------ 5 files changed, 196 insertions(+), 141 deletions(-) commit 7a5f4b0b1551af6728a2ca9c4b4e23584e1bc5e2 Author: Picca Frédéric-Emmanuel Date: Thu Mar 23 14:13:43 2017 +0100 [contrib][haskell] reduce duplication in Laure.hs contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 70 ++++++++--------------- 1 file changed, 24 insertions(+), 46 deletions(-) commit 2092d944de6b9f3871b0c284ed0d93b11f4a34f3 Author: Picca Frédéric-Emmanuel Date: Thu Mar 23 13:40:17 2017 +0100 [contrib][haskell] set a poni with initial values In order to simplify the xrd calibration. It can be necessary to set the initial values of the reference PoniExt. First time used by the Hercules project. contrib/haskell/src/Hkl/Projects/D2AM/XRD.hs | 2 +- .../haskell/src/Hkl/Projects/Diffabs/Charlier.hs | 2 +- .../haskell/src/Hkl/Projects/Diffabs/Hercules.hs | 36 +++++++++++++--------- contrib/haskell/src/Hkl/Projects/Diffabs/IRDRx.hs | 2 +- contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 2 +- .../haskell/src/Hkl/Projects/Diffabs/Martinetto.hs | 2 +- contrib/haskell/src/Hkl/PyFAI/Poni.hs | 31 +++++++++++++++---- contrib/haskell/src/Hkl/PyFAI/PoniExt.hs | 31 +++++++++++++++---- contrib/haskell/src/Hkl/Xrd/Mesh.hs | 2 +- contrib/haskell/src/Hkl/Xrd/OneD.hs | 8 ++--- 10 files changed, 81 insertions(+), 37 deletions(-) commit f11944170dfdd65a64a3c99ba3056fbec1309aef Author: Picca Frédéric-Emmanuel Date: Thu Mar 23 10:45:23 2017 +0100 [contrib][haskell] reorganisation of the poni part contrib/haskell/src/Hkl/PyFAI/Poni.hs | 81 ++++++++++++++++++++++++++---- contrib/haskell/src/Hkl/PyFAI/PoniExt.hs | 56 ++++----------------- contrib/haskell/src/Hkl/Xrd/Calibration.hs | 20 -------- 3 files changed, 81 insertions(+), 76 deletions(-) commit ea745dd71016f58ea726cfd051b370a58ace8b79 Author: Picca Frédéric-Emmanuel Date: Wed Mar 22 15:23:16 2017 +0100 fix all display errors in the documentation Documentation/hkl.org.in | 99 ++++++++++++++++++++++++------------------------ 1 file changed, 49 insertions(+), 50 deletions(-) commit f7019a0b3ae8c1338775e0b094c34b98aa307f65 Author: Picca Frédéric-Emmanuel Date: Wed Mar 22 14:47:26 2017 +0100 [contrib][haskell] add missing data's from Hercules contrib/haskell/src/Hkl/Projects/Diffabs/Hercules.hs | 1 + 1 file changed, 1 insertion(+) commit 2fb311babb6f80d901e316b7e39575142ca7cc8b Author: Picca Frédéric-Emmanuel Date: Wed Mar 22 14:46:02 2017 +0100 created a doc-publish target in order to publish the doc Documentation/Makefile.am | 5 +++++ Documentation/hkl-default.el | 22 +++++++++++++++++++++- Documentation/hkl.org.in | 1 - 3 files changed, 26 insertions(+), 2 deletions(-) commit e2d916815f3054124ebf65b5d292c21dc1662302 Author: Picca Frédéric-Emmanuel Date: Wed Mar 22 10:45:32 2017 +0100 [contrib][haskell] factorize beamlineUpper contrib/haskell/src/Hkl/Projects/Diffabs/Charlier.hs | 5 ----- contrib/haskell/src/Hkl/Projects/Diffabs/Hercules.hs | 4 ---- contrib/haskell/src/Hkl/Projects/Diffabs/IRDRx.hs | 4 ---- contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 4 ---- contrib/haskell/src/Hkl/Projects/Diffabs/Martinetto.hs | 4 ---- contrib/haskell/src/Hkl/Types.hs | 6 ++++++ 6 files changed, 6 insertions(+), 21 deletions(-) commit 9fc2d73c7105f5f31a100b1d1a005479439918ac Author: Picca Frédéric-Emmanuel Date: Wed Mar 22 10:39:41 2017 +0100 [contrib][haskell] add the Hercules project. Add also the script extractEdf used to extract the images for the calibration. contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/Projects/Diffabs.hs | 1 + .../haskell/src/Hkl/Projects/Diffabs/Hercules.hs | 163 +++++++++++++++++++++ contrib/haskell/src/Hkl/Xrd/Calibration.hs | 56 ++++++- contrib/haskell/src/Hkl/Xrd/OneD.hs | 3 + contrib/haskell/src/xrd.hs | 9 +- 6 files changed, 227 insertions(+), 6 deletions(-) commit c01cffc0aee7d48e1ba585f31e1cc15869830e55 Author: Picca Frédéric-Emmanuel Date: Mon Mar 20 13:44:53 2017 +0100 [contrib][haskell] fix the dummy code contrib/haskell/src/Hkl/Xrd/OneD.hs | 10 +++++----- contrib/haskell/src/xrd.hs | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) commit fae54231ab5dc4eb90866f8df725b3c47df98182 Author: Picca Frédéric-Emmanuel Date: Mon Mar 20 09:50:07 2017 +0100 [contrib][haskell] added an PyVal class in order to simplify python scripting contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/Flat.hs | 14 ++++----- contrib/haskell/src/Hkl/Python.hs | 30 +++++++++++++++++++ contrib/haskell/src/Hkl/Xrd/Mesh.hs | 20 ++++++------- contrib/haskell/src/Hkl/Xrd/OneD.hs | 60 ++++++++++++++++++------------------- 5 files changed, 78 insertions(+), 47 deletions(-) commit e04a40ee3ad6390595ea3f79131afc761a0e652f Author: Picca Frédéric-Emmanuel Date: Fri Mar 17 14:13:43 2017 +0100 [contrib][haskell] factorize the mesh python script contrib/haskell/src/Hkl/Xrd/Mesh.hs | 109 ++++++++++++------------------------ 1 file changed, 37 insertions(+), 72 deletions(-) commit 06955450ce2105bbdc03f55618e12b6fa493b090 Author: Picca Frédéric-Emmanuel Date: Fri Mar 17 13:57:10 2017 +0100 [contrib][haskell] use dummies in order to improve speed contrib/haskell/src/Hkl/Projects/D2AM/XRD.hs | 4 +- .../haskell/src/Hkl/Projects/Diffabs/Charlier.hs | 4 +- contrib/haskell/src/Hkl/Projects/Diffabs/IRDRx.hs | 6 +- contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 4 +- .../haskell/src/Hkl/Projects/Diffabs/Martinetto.hs | 4 +- .../haskell/src/Hkl/PyFAI/AzimuthalIntegrator.hs | 2 +- contrib/haskell/src/Hkl/Xrd/Mesh.hs | 32 +++++---- contrib/haskell/src/Hkl/Xrd/OneD.hs | 83 +++++++++++++--------- contrib/haskell/src/xrd.hs | 6 +- 9 files changed, 82 insertions(+), 63 deletions(-) commit a401ce7f4415c6b89664f6abd16c4a3026d6cbdc Author: Picca Frédéric-Emmanuel Date: Thu Mar 16 15:40:46 2017 +0100 [contrib][haskell] add bench for a fly mesh contrib/haskell/src/Hkl/Projects/Diffabs/IRDRx.hs | 2 ++ 1 file changed, 2 insertions(+) commit 0ee095b1400790514c94299e59859ed9b2ee420c Author: Picca Frédéric-Emmanuel Date: Thu Mar 16 15:20:48 2017 +0100 [contrib][haskell] fix the mesh python script contrib/haskell/src/Hkl/Xrd/Mesh.hs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 229166421d867dc02774fb9c5e9f6bb92fef0be7 Author: Picca Frédéric-Emmanuel Date: Thu Mar 16 09:24:38 2017 +0100 add emergence to e4cv diffractometers Documentation/hkl.org.in | 2 ++ hkl/hkl-engine-e4c.c | 2 ++ hkl/pom.xml | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) commit 8996421ff7f4d44d122efd97f5ccf6e2c8f521ac Author: Picca Frédéric-Emmanuel Date: Thu Mar 16 08:41:25 2017 +0100 [contrib][haskell] add the XrdMeshFly (to test) contrib/haskell/hkl.cabal | 3 +- contrib/haskell/src/Hkl/Projects/Diffabs/IRDRx.hs | 6 +- contrib/haskell/src/Hkl/Xrd/Mesh.hs | 266 ++++++++++++---------- contrib/haskell/src/xrd.hs | 7 +- 4 files changed, 155 insertions(+), 127 deletions(-) commit 789e8244e6ded09c9557a8565016b67b56143d52 Author: Picca Frédéric-Emmanuel Date: Tue Mar 14 15:26:18 2017 +0100 [contrib][haskell] take into account the length of the lists. contrib/haskell/src/Hkl/Xrd/OneD.hs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 590424e1b1b4e400dd12db2fa54881ecc07b76a7 Author: Picca Frédéric-Emmanuel Date: Tue Mar 14 14:13:24 2017 +0100 [contrib][haskell] idem for the integrateMesh method contrib/haskell/src/Hkl/Projects/Diffabs/Charlier.hs | 3 +-- contrib/haskell/src/Hkl/Projects/Diffabs/IRDRx.hs | 3 +-- contrib/haskell/src/Hkl/Xrd/Mesh.hs | 16 ++++++++++------ 3 files changed, 12 insertions(+), 10 deletions(-) commit aee1ceb8403dbcd62f30c8ebfd398e35ec39f69f Author: Picca Frédéric-Emmanuel Date: Tue Mar 14 14:00:33 2017 +0100 [contrib][haskell] simplify the user script by hiding the map calls contrib/haskell/src/Hkl/Projects/D2AM/XRD.hs | 4 +-- contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 5 ++-- .../haskell/src/Hkl/Projects/Diffabs/Martinetto.hs | 8 +++--- contrib/haskell/src/Hkl/Xrd/OneD.hs | 29 ++++++++++++---------- 4 files changed, 23 insertions(+), 23 deletions(-) commit 4ffe0c18c8c19487906fd34bf2e554c67d726083 Author: Picca Frédéric-Emmanuel Date: Tue Mar 14 13:50:45 2017 +0100 [contrib][haskell] do a profilling of all the python scripts contrib/haskell/data/gprof2dot.py | 3293 +++++++++++++++++++++ contrib/haskell/hkl.cabal | 2 + contrib/haskell/src/Hkl/Flat.hs | 1 - contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 1 - contrib/haskell/src/Hkl/Script.hs | 29 +- 5 files changed, 3318 insertions(+), 8 deletions(-) commit 4fdb6233e744b3efffa9bbe7c54d1ad674320239 Author: Picca Frédéric-Emmanuel Date: Tue Mar 14 10:19:41 2017 +0100 [contrib][haskell] factorize the substract python script contrib/haskell/src/Hkl/Xrd/OneD.hs | 80 +++++++++++++------------------------ 1 file changed, 27 insertions(+), 53 deletions(-) commit 97f9fea556a160127f4a8991d45a82d61f975a07 Author: Picca Frédéric-Emmanuel Date: Mon Mar 13 16:30:43 2017 +0100 [contrib][haskell] add the substractMulti method contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 7 +-- contrib/haskell/src/Hkl/Xrd/OneD.hs | 66 +++++++++++++++++++++++ 2 files changed, 68 insertions(+), 5 deletions(-) commit 06c856d6af6177e6109608c61e3d468da8ff08e2 Author: Picca Frédéric-Emmanuel Date: Mon Mar 13 15:04:58 2017 +0100 [contrib][haskell] fix the flat correction also for integrate contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 2 +- contrib/haskell/src/Hkl/Xrd/OneD.hs | 23 ++++++++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) commit 6d6797268a8ea5564fab2396616c1479f4fa3a88 Author: Picca Frédéric-Emmanuel Date: Mon Mar 13 14:05:17 2017 +0100 [contrib][haskell] save a gnuplot file also for the substraction contrib/haskell/src/Hkl/Xrd/OneD.hs | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) commit 8d9b527043c39e51e7f9485d8e12dd939047d23d Author: Picca Frédéric-Emmanuel Date: Mon Mar 13 13:40:23 2017 +0100 [contrib][haskell] implement the substract method contrib/haskell/hkl.cabal | 2 +- contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 6 +- contrib/haskell/src/Hkl/Xrd/OneD.hs | 100 +++++++++++++++++++--- 3 files changed, 93 insertions(+), 15 deletions(-) commit ca25897bd5e874952e2ba0c0abeedd0348804156 Author: Picca Frédéric-Emmanuel Date: Sat Mar 11 11:36:48 2017 +0100 [contrib][haskell] use GADTs for the Lattice contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl.hs | 1 + contrib/haskell/src/Hkl/C.hsc | 27 +++++++++------- contrib/haskell/src/Hkl/Lattice.hs | 63 +++++++++++++++++++++++++++++++++++++ contrib/haskell/src/Hkl/Types.hs | 44 ++++---------------------- contrib/haskell/src/Hkl/Xrd/OneD.hs | 2 +- contrib/haskell/src/ghkl.hs | 2 +- 7 files changed, 88 insertions(+), 52 deletions(-) commit 3ccf125cec5278934b147ef90dba8a6c485e8532 Author: Picca Frédéric-Emmanuel Date: Tue Nov 29 15:56:35 2016 +0100 [contrib][haskell] add test from sirius for numeric stability Documentation/hkl.org.in | 22 +++++++++++++++++ contrib/haskell/src/Hkl/C.hsc | 7 ++++++ contrib/haskell/src/ghkl.hs | 57 ++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 82 insertions(+), 4 deletions(-) commit 87dcf531cdf8051b0a5f8c8002ed6488f000281a Author: Picca Frédéric-Emmanuel Date: Tue Nov 29 15:08:16 2016 +0100 [contib][haskell] add the SoleilSiriusKappa geometry contrib/haskell/src/Hkl/Types.hs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit b8f28c8adc33de6a4ffeead923c9b1e19e5b53c8 Author: Picca Frédéric-Emmanuel Date: Sun Nov 27 18:07:43 2016 +0100 fix logging hkl/hkl-pseudoaxis.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit d41c365eb8ceba97d031fa34954afed622727559 Author: Picca Frédéric-Emmanuel Date: Tue Apr 26 16:48:00 2016 +0200 update the pom.xml file with the ICA version hkl/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2621b21dedc84b954c7648c393a44fd969948bf9 Author: Picca Frédéric-Emmanuel Date: Tue Mar 7 17:40:54 2017 +0100 [contrib][haskell] reorg contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 30 ++++++++++++----------- 1 file changed, 16 insertions(+), 14 deletions(-) commit 6e2adbe49faa83ed9c8299c982d3dab49783172a Author: Picca Frédéric-Emmanuel Date: Tue Mar 7 16:41:16 2017 +0100 [contrib][haskell] use the Gnuplot script type contrib/haskell/src/Hkl/Xrd/OneD.hs | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) commit dc16d8781f492ee05832eae8b5bd605788058362 Author: Picca Frédéric-Emmanuel Date: Tue Mar 7 16:38:50 2017 +0100 [contrib][haskell] add the gnuplot script type contrib/haskell/src/Hkl/Script.hs | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) commit bc57f41c725019383be27d75f270dc461ab5ec0a Author: Picca Frédéric-Emmanuel Date: Tue Mar 7 10:18:12 2017 +0100 [contrib][haskell] prepare for the air substraction contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 95 ++++++++++++----------- 1 file changed, 50 insertions(+), 45 deletions(-) commit 7c2046889b3484cbd836b5a26d6733f156d9d121 Author: Picca Frédéric-Emmanuel Date: Tue Mar 7 09:28:04 2017 +0100 [contrib][haskell] use the XrdMeshParams type .../haskell/src/Hkl/Projects/Diffabs/Charlier.hs | 2 +- contrib/haskell/src/Hkl/Projects/Diffabs/IRDRx.hs | 2 +- contrib/haskell/src/Hkl/Xrd/Mesh.hs | 27 ++++++++++++---------- 3 files changed, 17 insertions(+), 14 deletions(-) commit ce142bc2bffdc6426b52228219a8dde36fe2dc36 Author: Picca Frédéric-Emmanuel Date: Tue Mar 7 09:21:14 2017 +0100 [contrib][haskell] use the XrdOneDParams contrib/haskell/src/Hkl/Projects/D2AM/XRD.hs | 7 ++-- contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 6 +-- .../haskell/src/Hkl/Projects/Diffabs/Martinetto.hs | 2 +- contrib/haskell/src/Hkl/Xrd/OneD.hs | 46 +++++++++++----------- 4 files changed, 30 insertions(+), 31 deletions(-) commit 6e9a4bef900c89612349b2d684a0d8f7a73527f2 Author: Picca Frédéric-Emmanuel Date: Mon Mar 6 17:11:38 2017 +0100 [contrib][haskell] integrate parameters has a type XrdOneDParams contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 3 ++- .../haskell/src/Hkl/Projects/Diffabs/Martinetto.hs | 5 ++-- contrib/haskell/src/Hkl/Xrd/OneD.hs | 31 ++++++++++++---------- 3 files changed, 21 insertions(+), 18 deletions(-) commit 1eba2e28c6e7eb2d9f05a35b1ef783b05e0134d8 Author: Picca Frédéric-Emmanuel Date: Mon Mar 6 16:51:57 2017 +0100 [contrib][haskell] add the possibility to select the pyFAI integration method contrib/haskell/hkl.cabal | 1 + .../haskell/src/Hkl/Projects/Diffabs/Charlier.hs | 3 ++- contrib/haskell/src/Hkl/Projects/Diffabs/IRDRx.hs | 3 ++- contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 9 ++++++- .../haskell/src/Hkl/Projects/Diffabs/Martinetto.hs | 3 ++- contrib/haskell/src/Hkl/PyFAI.hs | 1 + .../haskell/src/Hkl/PyFAI/AzimuthalIntegrator.hs | 18 +++++++++++++ contrib/haskell/src/Hkl/Xrd/Mesh.hs | 30 +++++++++++++--------- contrib/haskell/src/Hkl/Xrd/OneD.hs | 24 ++++++++--------- 9 files changed, 64 insertions(+), 28 deletions(-) commit 97adef304924bdcfa92bdbb8c27821a1084365d4 Author: Picca Frédéric-Emmanuel Date: Mon Mar 6 13:11:06 2017 +0100 [contrib][haskell] parallelize integrate contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 6ec6a155262ac93d218f8a006071108c79a6579c Author: Picca Frédéric-Emmanuel Date: Mon Mar 6 11:30:54 2017 +0100 [contirb][haskell] update the integrate multi in order to have a list of mask instead of the same mask contrib/haskell/src/Hkl/Xrd/OneD.hs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) commit cd6e8ea5fb327e0d67f3a95a3e011f78ff04a005 Author: Picca Frédéric-Emmanuel Date: Mon Mar 6 10:27:09 2017 +0100 [contrib][haskell] add the flat everywhere contrib/haskell/src/Hkl/Flat.hs | 9 ++- contrib/haskell/src/Hkl/Projects/D2AM/XRD.hs | 3 +- .../haskell/src/Hkl/Projects/Diffabs/Charlier.hs | 3 +- contrib/haskell/src/Hkl/Projects/Diffabs/IRDRx.hs | 4 +- contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 31 +++++---- .../haskell/src/Hkl/Projects/Diffabs/Martinetto.hs | 6 +- contrib/haskell/src/Hkl/Script.hs | 9 ++- contrib/haskell/src/Hkl/Utils.hs | 2 - contrib/haskell/src/Hkl/Xrd/Mesh.hs | 22 ++++--- contrib/haskell/src/Hkl/Xrd/OneD.hs | 77 ++++++++++++---------- 10 files changed, 98 insertions(+), 68 deletions(-) commit a9be5efacbbc30762a7dd40c40722246bc8aa892 Author: Picca Frédéric-Emmanuel Date: Wed Mar 1 16:18:44 2017 +0100 [contrib][haskell] replace saveScript by hasContent contrib/haskell/src/Hkl/Utils.hs | 44 ++++++------------------------------- contrib/haskell/src/Hkl/Xrd/Mesh.hs | 2 +- contrib/haskell/src/Hkl/Xrd/OneD.hs | 6 ++--- 3 files changed, 11 insertions(+), 41 deletions(-) commit 65bc38ebf30f99cc1a2e74ee48b32ff6f04be98f Author: Picca Frédéric-Emmanuel Date: Wed Mar 1 16:05:50 2017 +0100 [contrib][haskell] use the SCript type everywhere contrib/haskell/src/Hkl/Flat.hs | 3 +- contrib/haskell/src/Hkl/Script.hs | 6 ++ contrib/haskell/src/Hkl/Xrd/Mesh.hs | 98 ++++++++++++++++---------------- contrib/haskell/src/Hkl/Xrd/OneD.hs | 109 ++++++++++++++++-------------------- 4 files changed, 103 insertions(+), 113 deletions(-) commit 3fe59dd13ab5291b103f9ebf763d287a67d6cf3c Author: Picca Frédéric-Emmanuel Date: Wed Mar 1 13:44:18 2017 +0100 [contrib][haskell] add the Flat computation contrib/haskell/hkl.cabal | 2 + contrib/haskell/src/Hkl.hs | 2 + contrib/haskell/src/Hkl/Flat.hs | 71 ++++++++++++++++++++ contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 82 ++++++++++++----------- contrib/haskell/src/Hkl/Script.hs | 61 +++++++++++++++++ 5 files changed, 180 insertions(+), 38 deletions(-) commit 441f2f7615c351fa18c01560c7d09d01f3ccabdb Author: Picca Frédéric-Emmanuel Date: Sun Mar 5 10:24:19 2017 +0100 [contrib][haskell] migrate the glade ui files to Gtk3 contrib/haskell/data/3d3.ui | 251 ++++ contrib/haskell/data/ghkl3.ui | 2537 +++++++++++++++++++++++++++++++++++++++ contrib/haskell/data/pseudo3.ui | 240 ++++ contrib/haskell/hkl.cabal | 3 + 4 files changed, 3031 insertions(+) commit 6b6e5e4d28fb975593d7fcd6fe8cea9405717897 Author: Picca Frédéric-Emmanuel Date: Tue Feb 28 15:10:51 2017 +0100 [contrib][haskell] add the Laure flat informations contrib/haskell/src/Hkl/Nxs.hs | 3 +++ contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 29 ++++++++++++++++------- 2 files changed, 23 insertions(+), 9 deletions(-) commit 2745591df24cc3b794647a7b7a08098e85ed6ba0 Author: Picca Frédéric-Emmanuel Date: Tue Feb 28 13:57:13 2017 +0100 [contrib][haskell] move all the DataFrameH5Path -> H5 managment into Nxs contrib/haskell/src/Hkl/Nxs.hs | 80 +++++++++++++++++++++++++++++++++++++ contrib/haskell/src/Hkl/Xrd/Mesh.hs | 51 ----------------------- contrib/haskell/src/Hkl/Xrd/OneD.hs | 28 +------------ 3 files changed, 81 insertions(+), 78 deletions(-) commit 505bc84b15aab3c39ba1103e1d5e921e3aafea5c Author: Picca Frédéric-Emmanuel Date: Mon Feb 27 16:16:57 2017 +0100 [contrib][haskell] use Nxs in Mesh .../haskell/src/Hkl/Projects/Diffabs/Charlier.hs | 30 +-- contrib/haskell/src/Hkl/Projects/Diffabs/IRDRx.hs | 8 +- contrib/haskell/src/Hkl/Xrd/Mesh.hs | 206 +++++++++++---------- contrib/haskell/src/Hkl/Xrd/OneD.hs | 6 +- 4 files changed, 135 insertions(+), 115 deletions(-) commit cb83fb4db387581d42a9c5b06ccf3aa0d64599d9 Author: Picca Frédéric-Emmanuel Date: Sun Feb 26 19:08:06 2017 +0100 [contrib][haskell] prepare for the Nxs migration of the Mesh code contrib/haskell/src/Hkl/Nxs.hs | 35 +++++++++++- .../haskell/src/Hkl/Projects/Diffabs/Charlier.hs | 4 +- contrib/haskell/src/Hkl/Projects/Diffabs/IRDRx.hs | 4 +- contrib/haskell/src/Hkl/Xrd/Mesh.hs | 66 +++++++++++----------- contrib/haskell/src/Hkl/Xrd/OneD.hs | 2 +- 5 files changed, 73 insertions(+), 38 deletions(-) commit ef4735b0d7a071b2f8e1dcd05f7c7f8a14cc4ec5 Author: Picca Frédéric-Emmanuel Date: Fri Feb 24 16:58:14 2017 +0100 [contrib][haskell] create the Hkl.Nxs module contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl.hs | 1 + contrib/haskell/src/Hkl/Nxs.hs | 59 ++++++++++++++++++++++ .../haskell/src/Hkl/Projects/Diffabs/Charlier.hs | 2 +- contrib/haskell/src/Hkl/Projects/Diffabs/IRDRx.hs | 2 +- contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 4 +- .../haskell/src/Hkl/Projects/Diffabs/Martinetto.hs | 4 +- contrib/haskell/src/Hkl/Xrd/Calibration.hs | 3 +- contrib/haskell/src/Hkl/Xrd/Mesh.hs | 1 + contrib/haskell/src/Hkl/Xrd/OneD.hs | 52 ++----------------- 10 files changed, 75 insertions(+), 54 deletions(-) commit f686eb5eeacf8859bddc1788a8ebf2ce4ee15177 Author: Picca Frédéric-Emmanuel Date: Fri Feb 24 15:02:54 2017 +0100 [contrib][haskell] prepare the flat calculation. .../haskell/src/Hkl/Projects/Diffabs/Charlier.hs | 2 +- contrib/haskell/src/Hkl/Projects/Diffabs/IRDRx.hs | 2 +- contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 6 +- .../haskell/src/Hkl/Projects/Diffabs/Martinetto.hs | 4 +- contrib/haskell/src/Hkl/Xrd/Calibration.hs | 4 +- contrib/haskell/src/Hkl/Xrd/OneD.hs | 66 ++++++++++++++-------- 6 files changed, 50 insertions(+), 34 deletions(-) commit a15deeaa42e1b5f042c20d205d0876058441e27e Author: Picca Frédéric-Emmanuel Date: Fri Feb 24 13:57:45 2017 +0100 [contrib][haskell] reorg contrib/haskell/src/Hkl/Xrd/OneD.hs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 0c8d60d6351042d626aa9fa893fb264b23dc2fe5 Author: Picca Frédéric-Emmanuel Date: Thu Feb 23 16:16:13 2017 +0100 [contrib][haskell] remove the NxEntry field in the Nxs type use only the mkNxs "constructor" instead of the default constructor contrib/haskell/src/Hkl/Projects/Diffabs/IRDRx.hs | 27 ++--- contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 8 +- .../haskell/src/Hkl/Projects/Diffabs/Martinetto.hs | 124 ++++++++++----------- contrib/haskell/src/Hkl/Xrd/Calibration.hs | 2 +- contrib/haskell/src/Hkl/Xrd/OneD.hs | 16 +-- 5 files changed, 79 insertions(+), 98 deletions(-) commit ada19d628e8424c4a85d251ff6cc4f14036e6219 Author: Picca Frédéric-Emmanuel Date: Thu Feb 23 15:07:02 2017 +0100 [contrib][haskell] merge the withH5File into the withDataFrameH5 contrib/haskell/src/Hkl/H5.hs | 6 ++++ contrib/haskell/src/Hkl/Xrd/OneD.hs | 58 +++++++++++++++++++------------------ 2 files changed, 36 insertions(+), 28 deletions(-) commit aebe23fac90cebdab3a392865883d48022181e1b Author: Picca Frédéric-Emmanuel Date: Thu Feb 23 14:38:25 2017 +0100 [contrib][haskell] put also the File in the DataFrameH5 contrib/haskell/src/Hkl/Xrd/OneD.hs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit eb24a6e644ca9be1970a8c97a160dd911e9b529c Author: Picca Frédéric-Emmanuel Date: Tue Feb 21 14:51:37 2017 +0100 [contrib][haskell] skip also for multi geometry contrib/haskell/src/Hkl/Xrd/OneD.hs | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) commit fabb24463ae9caa56b7e4d6b04443bbbbbb0109b Author: Picca Frédéric-Emmanuel Date: Tue Feb 21 14:25:34 2017 +0100 [contrib][haskell] add the capability to skip frames in integrate' contrib/haskell/src/Hkl/Projects/D2AM/XRD.hs | 5 +++- contrib/haskell/src/Hkl/Projects/Diffabs/IRDRx.hs | 5 +++- contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 7 +++-- .../haskell/src/Hkl/Projects/Diffabs/Martinetto.hs | 33 ++++++++++++---------- contrib/haskell/src/Hkl/Xrd/OneD.hs | 29 +++++++++++++------ 5 files changed, 52 insertions(+), 27 deletions(-) commit f0a961e34073720aa6d69e46b0707003b3b90b0d Author: Picca Frédéric-Emmanuel Date: Tue Feb 21 10:11:05 2017 +0100 [contrib][haskell] add all the Laure samples contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 169 +++++++++++----------- contrib/haskell/src/Hkl/Xrd/OneD.hs | 8 +- 2 files changed, 90 insertions(+), 87 deletions(-) commit 10b9544022daca4f5d9d8fe71a1c82ecd229f91f Author: Picca Frédéric-Emmanuel Date: Fri Feb 3 13:52:12 2017 +0100 [contrib][haskell] wip flyscan mesh contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/DataSource.hs | 5 + contrib/haskell/src/Hkl/Projects/Diffabs.hs | 1 + contrib/haskell/src/Hkl/Projects/Diffabs/Laure.hs | 205 ++++++++++++++++++++++ contrib/haskell/src/xrd.hs | 3 +- 5 files changed, 214 insertions(+), 1 deletion(-) commit da4f50c22fc7d1f3e811320d44f43a98b49393a9 Author: Picca Frédéric-Emmanuel Date: Sun Feb 19 14:36:33 2017 +0100 [contrib][haskell] refactor the DataFrameH5Path remove all accessor for now .../haskell/src/Hkl/Projects/Diffabs/Charlier.hs | 10 +++--- contrib/haskell/src/Hkl/Projects/Diffabs/IRDRx.hs | 10 +++--- .../haskell/src/Hkl/Projects/Diffabs/Martinetto.hs | 36 +++++++++++----------- contrib/haskell/src/Hkl/Xrd/Calibration.hs | 10 +++--- contrib/haskell/src/Hkl/Xrd/OneD.hs | 19 ++++++------ 5 files changed, 42 insertions(+), 43 deletions(-) commit 918a6e9c946af6f092350f71f33a1d7c332224ce Author: Picca Frédéric-Emmanuel Date: Sun Feb 19 14:10:51 2017 +0100 [contrib][hakell] use Datasource in Hkl.Xrd.OneD contrib/haskell/src/Hkl/Xrd/OneD.hs | 62 +++++++++++++++---------------------- 1 file changed, 25 insertions(+), 37 deletions(-) commit 8bd13dd94e72c891b63085616a2bc22f459a6aa4 Author: Picca Frédéric-Emmanuel Date: Sun Feb 19 13:45:40 2017 +0100 [contrib][haskell] use Datasource contrib/haskell/src/Hkl/Xrd/Mesh.hs | 32 ++++++++++---------------------- 1 file changed, 10 insertions(+), 22 deletions(-) commit 76be94f1497bc9d203bf01e9d129af81b1634e24 Author: Picca Frédéric-Emmanuel Date: Sun Feb 19 13:37:11 2017 +0100 [contrib][haskell] move all projects under the Hkl.Projects module contrib/haskell/hkl.cabal | 16 +-- contrib/haskell/src/Hkl.hs | 6 +- contrib/haskell/src/Hkl/D2AM.hs | 3 - contrib/haskell/src/Hkl/Diffabs.hs | 6 - contrib/haskell/src/Hkl/Projects.hs | 5 + contrib/haskell/src/Hkl/Projects/D2AM.hs | 3 + contrib/haskell/src/Hkl/{ => Projects}/D2AM/XRD.hs | 2 +- contrib/haskell/src/Hkl/Projects/Diffabs.hs | 6 + .../src/Hkl/{ => Projects}/Diffabs/Charlier.hs | 10 +- .../src/Hkl/{ => Projects}/Diffabs/IRDRx.hs | 12 +- .../src/Hkl/{ => Projects}/Diffabs/Martinetto.hs | 9 +- .../src/Hkl/{ => Projects}/Diffabs/Melle.hs | 9 +- contrib/haskell/src/Hkl/Projects/Sixs.hs | 128 ++++++++++++++++++++ contrib/haskell/src/Hkl/PyFAI.hs | 1 + contrib/haskell/src/Hkl/Sixs.hs | 131 --------------------- contrib/haskell/src/Hkl/Xrd/Calibration.hs | 1 - contrib/haskell/src/Hkl/Xrd/Mesh.hs | 1 - contrib/haskell/src/Hkl/Xrd/OneD.hs | 1 - contrib/haskell/src/hkl3d.hs | 2 +- contrib/haskell/src/xrd.hs | 2 +- 20 files changed, 166 insertions(+), 188 deletions(-) commit fef3c94e8a9c28529b95bd74f4791369ff7caea2 Author: Picca Frédéric-Emmanuel Date: Sun Feb 19 09:02:40 2017 +0100 [contrib][haskell] add the DataSource type contrib/haskell/hkl.cabal | 2 +- contrib/haskell/src/Hkl.hs | 1 - contrib/haskell/src/Hkl/Calibration.hs | 132 -------------------------- contrib/haskell/src/Hkl/DataSource.hs | 46 +++++++++ contrib/haskell/src/Hkl/Diffabs/Charlier.hs | 1 + contrib/haskell/src/Hkl/Diffabs/IRDRx.hs | 1 + contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 1 + contrib/haskell/src/Hkl/H5.hs | 4 + contrib/haskell/src/Hkl/Sixs.hs | 2 + contrib/haskell/src/Hkl/Types.hs | 18 ---- contrib/haskell/src/Hkl/Xrd/Calibration.hs | 1 + contrib/haskell/src/Hkl/Xrd/Mesh.hs | 1 + contrib/haskell/src/Hkl/Xrd/OneD.hs | 21 ++-- 13 files changed, 69 insertions(+), 162 deletions(-) commit d476011bef2cf955ca8c3d67ead9d406483f612d Author: Picca Frédéric-Emmanuel Date: Fri Feb 3 09:44:48 2017 +0100 [contrib][haskell] wip flyscan mesh contrib/haskell/src/Hkl/Calibration.hs | 35 ++-- contrib/haskell/src/Hkl/Diffabs/Charlier.hs | 29 ++-- contrib/haskell/src/Hkl/Diffabs/IRDRx.hs | 64 +++++-- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 16 +- contrib/haskell/src/Hkl/Diffabs/Melle.hs | 2 +- contrib/haskell/src/Hkl/H5.hs | 3 + contrib/haskell/src/Hkl/Sixs.hs | 35 ++-- contrib/haskell/src/Hkl/Types.hs | 17 +- contrib/haskell/src/Hkl/Xrd/Calibration.hs | 5 +- contrib/haskell/src/Hkl/Xrd/Mesh.hs | 233 ++++++++++++++++++-------- contrib/haskell/src/Hkl/Xrd/OneD.hs | 15 +- contrib/haskell/src/xrd.hs | 4 +- 12 files changed, 300 insertions(+), 158 deletions(-) commit 872af31b5964a6128b478655228f2e9656e0c4d3 Author: Picca Frédéric-Emmanuel Date: Thu Jan 26 15:25:38 2017 +0100 [contrib][haskell] first working mesh contrib/haskell/src/Hkl/Diffabs/Charlier.hs | 34 +++- contrib/haskell/src/Hkl/Types.hs | 7 +- contrib/haskell/src/Hkl/Utils.hs | 38 ++++- contrib/haskell/src/Hkl/Xrd/Mesh.hs | 233 +++++++++++++--------------- 4 files changed, 179 insertions(+), 133 deletions(-) commit be67f14aa56966173857ca05921edccc98aa1472 Author: Picca Frédéric-Emmanuel Date: Tue Jan 24 11:08:50 2017 +0100 [contrib][haskell] rename and reoganise XRD -> Xrd contrib/haskell/hkl.cabal | 6 +- contrib/haskell/src/Hkl/D2AM/XRD.hs | 3 +- contrib/haskell/src/Hkl/Diffabs/Charlier.hs | 5 +- contrib/haskell/src/Hkl/Diffabs/IRDRx.hs | 3 +- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 3 +- contrib/haskell/src/Hkl/Xrd.hs | 5 + .../haskell/src/Hkl/{XRD => Xrd}/Calibration.hs | 4 +- contrib/haskell/src/Hkl/Xrd/Mesh.hs | 222 +++++++++++++++++++++ contrib/haskell/src/Hkl/{XRD.hs => Xrd/OneD.hs} | 168 +--------------- 9 files changed, 243 insertions(+), 176 deletions(-) commit 6e5056c441cb81f95dc357bf5ebe3bd6d7741e8b Author: Picca Frédéric-Emmanuel Date: Tue Jan 24 10:27:48 2017 +0100 wip mesh contrib/haskell/hkl.cabal | 3 +- contrib/haskell/src/Hkl/Diffabs.hs | 3 +- contrib/haskell/src/Hkl/Diffabs/Charlier.hs | 147 +++++++++++++++ contrib/haskell/src/Hkl/Diffabs/Melle.hs | 65 ++++--- contrib/haskell/src/Hkl/H5.hs | 14 ++ contrib/haskell/src/Hkl/XRD.hs | 277 +++++++++++++++++----------- contrib/haskell/src/xrd.hs | 3 +- 7 files changed, 369 insertions(+), 143 deletions(-) commit 2c173825f5ebf1844c86537f6c61aa5ba5e05644 Author: Picca Frédéric-Emmanuel Date: Tue Jan 17 14:03:42 2017 +0100 [contrib][haskell] start to work on the non aborted scans. these scans contain Nan values at the end. So we just need to break the stream when we encounter a Nan contrib/haskell/hkl.cabal | 12 +++-- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 7 +-- contrib/haskell/src/Hkl/Diffabs/Melle.hs | 32 +++++++------- contrib/haskell/src/Hkl/XRD.hs | 64 ++++++++++++++++----------- contrib/haskell/src/xrd.hs | 4 +- 5 files changed, 65 insertions(+), 54 deletions(-) commit af91414c7644610d166acbdb8a6c2696bfb02cb9 Author: Picca Frédéric-Emmanuel Date: Mon Jan 2 11:25:15 2017 +0100 upgrading copyright year from 2016 to 2017 Documentation/hkl-default.el | 2 +- contrib/haskell/src/hkl.hs | 2 +- contrib/sixs/hkl3d.c | 2 +- gui/hkl-gui-3d.c | 2 +- gui/hkl-gui-3d.h | 2 +- gui/hkl-gui-macros.h | 2 +- gui/hkl-gui.c | 2 +- gui/hkl-gui.h | 2 +- hkl.h | 2 +- hkl/hkl-axis-private.h | 2 +- hkl/hkl-axis.c | 2 +- hkl/hkl-binding-private.h | 2 +- hkl/hkl-binding.c | 2 +- hkl/hkl-detector-factory.c | 2 +- hkl/hkl-detector-private.h | 2 +- hkl/hkl-detector.c | 2 +- hkl/hkl-engine-2c.c | 2 +- hkl/hkl-engine-e4c.c | 2 +- hkl/hkl-engine-e6c.c | 2 +- hkl/hkl-engine-k4c.c | 2 +- hkl/hkl-engine-k6c.c | 2 +- hkl/hkl-engine-petra3-p09-eh2.c | 2 +- hkl/hkl-engine-soleil-sirius-turret.c | 2 +- hkl/hkl-engine-soleil-sixs-med.c | 2 +- hkl/hkl-engine-template.c | 2 +- hkl/hkl-engine-zaxis.c | 2 +- hkl/hkl-factory-private.h | 2 +- hkl/hkl-factory.c | 2 +- hkl/hkl-geometry-private.h | 2 +- hkl/hkl-geometry.c | 2 +- hkl/hkl-interval-private.h | 2 +- hkl/hkl-interval.c | 2 +- hkl/hkl-lattice-private.h | 2 +- hkl/hkl-lattice.c | 2 +- hkl/hkl-macros-private.h | 2 +- hkl/hkl-macros.c | 2 +- hkl/hkl-matrix-private.h | 2 +- hkl/hkl-matrix.c | 2 +- hkl/hkl-parameter-private.h | 2 +- hkl/hkl-parameter.c | 2 +- hkl/hkl-pseudoaxis-auto-private.h | 2 +- hkl/hkl-pseudoaxis-auto.c | 2 +- hkl/hkl-pseudoaxis-common-eulerians-private.h | 2 +- hkl/hkl-pseudoaxis-common-eulerians.c | 2 +- hkl/hkl-pseudoaxis-common-hkl-private.h | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 2 +- hkl/hkl-pseudoaxis-common-psi-private.h | 2 +- hkl/hkl-pseudoaxis-common-psi.c | 2 +- hkl/hkl-pseudoaxis-common-q-private.h | 2 +- hkl/hkl-pseudoaxis-common-q.c | 2 +- hkl/hkl-pseudoaxis-common-readonly-private.h | 2 +- hkl/hkl-pseudoaxis-common-readonly.c | 2 +- hkl/hkl-pseudoaxis-common-tth-private.h | 2 +- hkl/hkl-pseudoaxis-common-tth.c | 2 +- hkl/hkl-pseudoaxis-private.h | 2 +- hkl/hkl-pseudoaxis.c | 2 +- hkl/hkl-quaternion-private.h | 2 +- hkl/hkl-quaternion.c | 2 +- hkl/hkl-sample-private.h | 2 +- hkl/hkl-sample.c | 2 +- hkl/hkl-source-private.h | 2 +- hkl/hkl-source.c | 2 +- hkl/hkl-types.c | 2 +- hkl/hkl-types.h | 2 +- hkl/hkl-unit-private.h | 2 +- hkl/hkl-unit.c | 2 +- hkl/hkl-vector-private.h | 2 +- hkl/hkl-vector.c | 2 +- hkl3d/hkl3d.h | 2 +- tests/hkl-axis-t.c | 2 +- tests/hkl-bench-t.c | 2 +- tests/hkl-detector-t.c | 2 +- tests/hkl-geometry-t.c | 2 +- tests/hkl-interval-t.c | 2 +- tests/hkl-lattice-t.c | 2 +- tests/hkl-matrix-t.c | 2 +- tests/hkl-parameter-t.c | 2 +- tests/hkl-pseudoaxis-e4ch-t.c | 2 +- tests/hkl-pseudoaxis-e4cv-t.c | 2 +- tests/hkl-pseudoaxis-e6c-t.c | 2 +- tests/hkl-pseudoaxis-k4cv-t.c | 2 +- tests/hkl-pseudoaxis-k6c-t.c | 2 +- tests/hkl-pseudoaxis-t.c | 2 +- tests/hkl-pseudoaxis-zaxis-t.c | 2 +- tests/hkl-quaternion-t.c | 2 +- tests/hkl-sample-t.c | 2 +- tests/hkl-source-t.c | 2 +- tests/hkl-unit-t.c | 2 +- tests/hkl-vector-t.c | 2 +- tests/hkl3d-test-t.c | 2 +- tests/tap/hkl-tap.h | 2 +- 91 files changed, 91 insertions(+), 91 deletions(-) commit 81485b556a45c8c8e6f5c30575017e171d28796e Author: Picca Frédéric-Emmanuel Date: Wed Dec 14 18:43:01 2016 +0100 pom.xml 5.1.1 hkl/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e5837cd2a368dce083cf7f4ca42049dc4dffdf1f Author: Picca Frédéric-Emmanuel Date: Wed Dec 14 16:25:49 2016 +0100 [contrib][haskell] create the multi.py script for edf files contrib/haskell/src/Hkl/XRD.hs | 58 +++++++++++++++++++++++++++++++++--------- 1 file changed, 46 insertions(+), 12 deletions(-) commit 5e6a691789eabfb9710cce4d37dc898aa1092aef Author: Picca Frédéric-Emmanuel Date: Wed Dec 14 15:03:33 2016 +0100 [contrib][haskell] add a generic saveScript method and use it contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/D2AM/XRD.hs | 2 +- contrib/haskell/src/Hkl/Utils.hs | 16 +++++++++++++++ contrib/haskell/src/Hkl/XRD.hs | 39 ++++++++++++++++++++----------------- 4 files changed, 39 insertions(+), 19 deletions(-) commit 779abdc061065ff7205919bf58f67fcfb268f8b7 Author: Picca Frédéric-Emmanuel Date: Tue Dec 13 14:54:10 2016 +0100 wip [contrib][haskell] add the multi integration for Edf contrib/haskell/src/Hkl/D2AM/XRD.hs | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) commit 7035339ee1e2d9f0b499d834079175a7042da768 Author: Picca Frédéric-Emmanuel Date: Tue Dec 13 14:30:05 2016 +0100 [contrib][haskell] prepare for multi integration with edf contrib/haskell/src/Hkl/D2AM/XRD.hs | 12 +++++++++--- contrib/haskell/src/Hkl/Diffabs/IRDRx.hs | 15 ++++++++++----- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 15 ++++++++++----- contrib/haskell/src/Hkl/XRD.hs | 25 ++++++++++++++++++------- contrib/haskell/src/Hkl/XRD/Calibration.hs | 1 - 5 files changed, 47 insertions(+), 21 deletions(-) commit f283378db94f69508d2a13e265813a87b7c35ceb Author: Picca Frédéric-Emmanuel Date: Tue Dec 13 13:42:56 2016 +0100 [contrib][haskell] add the xrd calibration with edf files contrib/haskell/hkl.cabal | 2 + contrib/haskell/src/Hkl.hs | 1 + contrib/haskell/src/Hkl/D2AM.hs | 3 + contrib/haskell/src/Hkl/D2AM/XRD.hs | 76 ++++++++ contrib/haskell/src/Hkl/Diffabs/IRDRx.hs | 8 +- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 8 +- contrib/haskell/src/Hkl/Diffabs/Melle.hs | 247 +++++++++++++------------- contrib/haskell/src/Hkl/Edf.hs | 29 ++- contrib/haskell/src/Hkl/XRD.hs | 226 ++++++++++++----------- contrib/haskell/src/Hkl/XRD/Calibration.hs | 30 ++-- contrib/haskell/src/xrd.hs | 3 +- 11 files changed, 372 insertions(+), 261 deletions(-) commit 2e4a099cb2609653f259ce7a4486c80c66e651c2 Author: Picca Frédéric-Emmanuel Date: Fri Dec 9 16:38:57 2016 +0100 [contrib][haskell] wip Signed-off-by: Picca Frédéric-Emmanuel contrib/haskell/hkl.cabal | 3 +- contrib/haskell/src/Hkl/Diffabs.hs | 3 +- contrib/haskell/src/Hkl/Diffabs/IRDRx.hs | 8 ++ contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 4 + contrib/haskell/src/Hkl/Diffabs/Melle.hs | 147 ++++++++++++++++++++++++++ contrib/haskell/src/Hkl/XRD.hs | 105 +++++++++++++++++- contrib/haskell/src/xrd.hs | 5 +- 7 files changed, 269 insertions(+), 6 deletions(-) commit 25a2e7ce845e1adf918ec5955be5dcab0f15061e Author: Picca Frédéric-Emmanuel Date: Tue Dec 6 11:42:57 2016 +0100 [contrib][swing] ccd calibration contrib/swing/pinhole1.smv | Bin 0 -> 33554944 bytes contrib/swing/plot.py | 12 ++++++++++++ 2 files changed, 12 insertions(+) commit 4cc275d37ac63944accc970e83a356aee781517a Author: Picca Frédéric-Emmanuel Date: Mon Dec 5 15:51:12 2016 +0100 [contrib][haskell] reorganisation before XRD mesh work contrib/haskell/src/Hkl/XRD.hs | 131 +++++++++++++++++++++-------------------- 1 file changed, 66 insertions(+), 65 deletions(-) commit af0df2f97d3c7f700ec12f8c624f7609efafc7ee Author: Picca Frédéric-Emmanuel Date: Mon Dec 5 15:35:48 2016 +0100 [contrib][haskell] no more Bin contrib/haskell/src/Hkl/Diffabs/IRDRx.hs | 4 ++-- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 4 ++-- contrib/haskell/src/Hkl/XRD.hs | 16 ++++++---------- 3 files changed, 10 insertions(+), 14 deletions(-) commit bd5341b818c2022d8ecb968bcdec5778e5b3aa36 Author: Picca Frédéric-Emmanuel Date: Mon Dec 5 15:31:39 2016 +0100 [contrib][haskell] use DIM1 instead of Bin to express the array size contrib/haskell/src/Hkl/Diffabs/IRDRx.hs | 40 ++++--------------------- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 5 ++-- contrib/haskell/src/Hkl/XRD.hs | 42 +++++++++++++-------------- contrib/haskell/src/xrd.hs | 4 +-- 4 files changed, 32 insertions(+), 59 deletions(-) commit 74acd6952297ac150a226fe59f661f603f172c85 Author: Picca Frédéric-Emmanuel Date: Mon Dec 5 14:23:39 2016 +0100 [contrib][haskell] start to use the repa shape In order to prepare the diftomo for multi dimension scans. Start to use the Repa.Shape. contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/XRD.hs | 43 +++++++++++++++++++++--------------------- 2 files changed, 23 insertions(+), 21 deletions(-) commit a911d2ad5b34b4944e2eb2843bc4942000a053b3 Author: Picca Frédéric-Emmanuel Date: Sun Dec 11 11:06:06 2016 +0100 [contrib][haskell] add Edf support contrib/haskell/hkl.cabal | 10 ++-- contrib/haskell/src/Hkl/Edf.hs | 106 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+), 4 deletions(-) commit fbec2c073d3961473ec23921237785cbff3dbd18 Author: Picca Frédéric-Emmanuel Date: Sun Nov 27 18:07:43 2016 +0100 fix logging hkl/hkl-pseudoaxis.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f63e22c969450a26e12cf6267118c484a17e442b Author: Picca Frédéric-Emmanuel Date: Tue Nov 22 18:05:29 2016 +0100 [contrib][haskell] TODO deal with the radial_range ??? contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 2 ++ contrib/haskell/src/Hkl/XRD.hs | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) commit 6c4e03837ad5675b8172aa1d361182a0676e8577 Author: Picca Frédéric-Emmanuel Date: Tue Nov 22 11:56:01 2016 +0100 [contrib][haskell] add the MultiGeometry support contrib/haskell/src/Hkl/Diffabs/IRDRx.hs | 5 +- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 51 +++++++------ contrib/haskell/src/Hkl/XRD.hs | 104 +++++++++++++++++++++++--- contrib/haskell/src/xrd.hs | 9 ++- 4 files changed, 131 insertions(+), 38 deletions(-) commit ec380a4ab31b619542eb03ad78c9316d9a93ab76 Author: Picca Frédéric-Emmanuel Date: Tue Nov 15 11:23:06 2016 +0100 [contrib][haskell] add the irdrx files contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/Diffabs.hs | 1 + contrib/haskell/src/Hkl/Diffabs/IRDRx.hs | 144 ++++++++++++++++++++++++++ contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 4 +- contrib/haskell/src/Hkl/XRD.hs | 9 +- contrib/haskell/src/xrd.hs | 3 +- 6 files changed, 156 insertions(+), 6 deletions(-) commit 3a3ef8d33abfbdc0409180038fbcce39f3543a51 Author: Picca Frédéric-Emmanuel Date: Thu Nov 3 15:11:20 2016 +0100 [contrib][haskell] use StandAloneDeriving for GADTs contrib/haskell/src/Hkl/Detector.hs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit 9728dc969ab58ba0041ccdc7794f5709ea0f83a1 Author: Picca Frédéric-Emmanuel Date: Fri Oct 28 15:45:40 2016 +0200 [contrib][haskell] support hmatrix 0.15 -> 0.17 contrib/haskell/src/Hkl/XRD/Calibration.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 7d4d7c4cf70dc3fa49e1051a1f6d474d5edb3340 Author: Picca Frédéric-Emmanuel Date: Tue Oct 25 18:34:38 2016 +0200 [contrib][haskell] add the a26, f30 and r35n1 samples contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 63 ++++++++++++++++++++++----- 1 file changed, 51 insertions(+), 12 deletions(-) commit e87f09bab21f1846bf9505a036be841d67bb9a75 Author: Picca Frédéric-Emmanuel Date: Mon Oct 24 10:43:14 2016 +0200 [contrib][haskell] integrate also the CeO2 sample contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 101 ++++++++++++-------------- 1 file changed, 48 insertions(+), 53 deletions(-) commit 751155d57f917bfecb001e5c04a37537e18b0da2 Author: Picca Frédéric-Emmanuel Date: Mon Oct 24 10:42:57 2016 +0200 [contrib][haskell] simplify xrd contrib/haskell/src/xrd.hs | 62 ---------------------------------------------- 1 file changed, 62 deletions(-) commit 6a239f471c78f095ebd0c1dbf87082c739135966 Author: Picca Frédéric-Emmanuel Date: Mon Oct 24 10:42:15 2016 +0200 [contrib][haskell] open the NeXuS file in read-only mode some files are read-only and opening them in 'rw' failed. contrib/haskell/src/Hkl/XRD.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 36624b707f25bf0d16edcc3a67d22db6964e5209 Author: Picca Frédéric-Emmanuel Date: Mon Oct 24 10:13:03 2016 +0200 [contrib][haskell] fix for ghc < 7.10 contrib/haskell/src/Hkl/XRD.hs | 2 +- contrib/haskell/src/Hkl/XRD/Calibration.hs | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) commit 745e98f87183193b97a988f3ec895c6afd9f0c9f Author: Picca Frédéric-Emmanuel Date: Mon Oct 24 10:07:32 2016 +0200 [contrib][haskell] xrf -> xrd contrib/haskell/hkl.cabal | 4 ++-- contrib/haskell/src/{xrf.hs => xrd.hs} | 0 2 files changed, 2 insertions(+), 2 deletions(-) commit ed42a9066637357c31d67842dbd1ac14c072ed57 Author: Picca Frédéric-Emmanuel Date: Mon Oct 10 11:00:08 2016 +0200 [contrib][haskell] fix the gnuplot file generation contrib/haskell/src/Hkl/XRD.hs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit 8b3d5405a8ed7e07c7bf52f422455111058b4415 Author: Picca Frédéric-Emmanuel Date: Sun Oct 23 14:15:13 2016 +0200 [contrib][haskell] add the ZAXIS diffractometer contrib/haskell/src/Hkl.hs | 1 + contrib/haskell/src/Hkl/Types.hs | 4 +- contrib/haskell/src/ghkl.hs | 109 +++++++++++++++++---------------------- 3 files changed, 50 insertions(+), 64 deletions(-) commit 99f650d9ccc6160288fa6f3094cc2d99e0591d56 Author: Picca Frédéric-Emmanuel Date: Sun Oct 23 13:44:00 2016 +0200 [contrib][haskell] add the xrf executable contrib/haskell/hkl.cabal | 23 +++++++++++++++ contrib/haskell/src/xrf.hs | 71 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) commit df7a73b03718aaf30a547a8becb316e309c1a87f Author: Picca Frédéric-Emmanuel Date: Sun Oct 23 09:22:31 2016 +0200 [contrib][haskell] compile with hmatrix >= 0.17 contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 4 ++-- contrib/haskell/src/Hkl/MyMatrix.hs | 2 +- contrib/haskell/src/Hkl/XRD/Calibration.hs | 7 +------ 3 files changed, 4 insertions(+), 9 deletions(-) commit 3b653ae3513f2b0241c848b189b2a2cee40b4b77 Author: Picca Frédéric-Emmanuel Date: Tue Oct 4 18:32:07 2016 +0200 [contrib][haskell] more implicite imports contrib/haskell/src/Hkl/Calibration.hs | 1 + contrib/haskell/src/Hkl/H5.hs | 1 - contrib/haskell/src/Hkl/Sixs.hs | 1 + contrib/haskell/src/Hkl/XRD.hs | 142 +++++++++++++++-------------- contrib/haskell/src/Hkl/XRD/Calibration.hs | 1 + 5 files changed, 79 insertions(+), 67 deletions(-) commit 67a62257ab83daac7cc146db997ee8f7346461d2 Author: Picca Frédéric-Emmanuel Date: Tue Oct 4 18:10:17 2016 +0200 [contrib][haskell] explicite imports contrib/haskell/src/Hkl/XRD/Calibration.hs | 75 ++++++++++++++++++------------ 1 file changed, 44 insertions(+), 31 deletions(-) commit d218c0352b2997f409aa364fae0b4c7136a12457 Author: Picca Frédéric-Emmanuel Date: Sat Oct 1 15:14:15 2016 +0200 [contrib][haskell] comment contrib/haskell/src/Hkl/Detector.hs | 2 ++ 1 file changed, 2 insertions(+) commit 08fff431279373daf2e6911b526160021abbda73 Author: Picca Frédéric-Emmanuel Date: Sat Oct 1 15:09:54 2016 +0200 [contrib][haskell] hlint contrib/haskell/src/Hkl/XRD/Calibration.hs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit c94c006a9332fe31f75de103c31f366e9d517d77 Author: Picca Frédéric-Emmanuel Date: Sat Oct 1 15:08:56 2016 +0200 [contrib][haskell] Xpad pixels size is always 130e-6 contrib/haskell/src/Hkl/Detector.hs | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) commit 0244df1b114e666dd92086d857e16746e5ead711 Author: Picca Frédéric-Emmanuel Date: Sat Oct 1 13:29:58 2016 +0200 [contrib][haskell] Add the ImXpadS140 detector contrib/haskell/src/Hkl/C.hsc | 6 +-- contrib/haskell/src/Hkl/Detector.hs | 83 ++++++++++++++++++------------------- 2 files changed, 44 insertions(+), 45 deletions(-) commit 9342820d871e70ce50fe993e60b3b88bece64866 Author: Picca Frédéric-Emmanuel Date: Fri Sep 30 20:27:24 2016 +0200 [contrib][haskell] reorganisation of the code contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 3 +- contrib/haskell/src/Hkl/PyFAI/Poni.hs | 46 +++--- contrib/haskell/src/Hkl/XRD.hs | 163 ++-------------------- contrib/haskell/src/Hkl/XRD/Calibration.hs | 194 ++++++++++++++++++++++++++ 5 files changed, 230 insertions(+), 177 deletions(-) commit 7bd8cba87f1ed399592871684762ff6e7caa6acb Author: Picca Frédéric-Emmanuel Date: Fri Sep 30 14:33:59 2016 +0200 [contrib][haskell] doc contrib/haskell/src/Hkl/XRD.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 2f1e7bbbc5f82eef1b5d33b210f4e6070ec4eee7 Author: Picca Frédéric-Emmanuel Date: Thu Sep 29 08:43:48 2016 +0200 [contrib][haskell] create types for the calibration optimisation contrib/haskell/src/Hkl/XRD.hs | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) commit c2071dfbfa3b1f96a07636ba530289cf0d3858c6 Author: Picca Frédéric-Emmanuel Date: Thu Sep 29 08:31:40 2016 +0200 [contrib][haskll] reduce the number of lines :) contrib/haskell/src/Hkl/PyFAI/Poni.hs | 4 ++-- contrib/haskell/src/Hkl/XRD.hs | 11 ++++------- 2 files changed, 6 insertions(+), 9 deletions(-) commit 0b09c11e8582a420c301c5fc065a3990c101e95e Author: Picca Frédéric-Emmanuel Date: Wed Sep 28 17:59:28 2016 +0200 [contrib][haskell] continu improving the calibration speed contrib/haskell/src/Hkl/XRD.hs | 73 ++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 35 deletions(-) commit 81364da3b04063902a884335b33b6ce658d47bbd Author: Picca Frédéric-Emmanuel Date: Wed Sep 28 16:14:35 2016 +0200 [contrib][haskell] interpolate the detector coordinates contrib/haskell/src/Hkl/Detector.hs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) commit cf1715ee90046452552ccf010ac71221a6ccc6dd Author: Picca Frédéric-Emmanuel Date: Wed Sep 28 14:48:41 2016 +0200 [contrib][haskell] more simplification contrib/haskell/src/Hkl/Detector.hs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit f3d2d4ab222e2778c7d04c4a7d21f10040a0bb6d Author: Picca Frédéric-Emmanuel Date: Wed Sep 28 14:14:53 2016 +0200 [contrib][haskell] fix the width of the Xpad32 and improve the speed contrib/haskell/src/Hkl/Detector.hs | 76 +++++---------------------- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 2 +- 2 files changed, 13 insertions(+), 65 deletions(-) commit 851124553c77d0fc2e6a99a05648ae064b440820 Author: Picca Frédéric-Emmanuel Date: Tue Sep 27 21:13:09 2016 +0200 [contrib][haskell] add the useHMatrixGsl option and simplify profiling contrib/haskell/hkl.cabal | 72 ++++++++++++++++++----------------------------- 1 file changed, 28 insertions(+), 44 deletions(-) commit 5a0c86c5231aed06cd97964c1e014cd9a8253731 Author: Picca Frédéric-Emmanuel Date: Tue Sep 27 16:24:30 2016 +0200 [contrib][haskell] improve the calibration time contrib/haskell/hkl.cabal | 31 +++++++++++++++++++++++----- contrib/haskell/src/Hkl/Detector.hs | 40 ++++++++++++++++++++++++++++++++++++- contrib/haskell/src/Hkl/XRD.hs | 9 +++++---- 3 files changed, 70 insertions(+), 10 deletions(-) commit d6398df0643125477d8eede07a1265e67bfc1f56 Author: Picca Frédéric-Emmanuel Date: Tue Sep 27 09:51:04 2016 +0200 [contrib][haskell] optimize the calibration contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 2 +- contrib/haskell/src/Hkl/XRD.hs | 58 ++++++++++++++------------- 2 files changed, 32 insertions(+), 28 deletions(-) commit 293a0c6f0c02db8bf6587bcc7075f5c3e601b5c1 Author: Picca Frédéric-Emmanuel Date: Mon Sep 26 15:55:10 2016 +0200 [contrib][haskell] optimise by using the minimizeV method contrib/haskell/src/Hkl/XRD.hs | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) commit 658c2c199fb2dde48b043071525a0e6a2662fcea Author: Picca Frédéric-Emmanuel Date: Mon Sep 26 14:32:48 2016 +0200 [contrib][haskell] first calibration with all the images. contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 3 ++- contrib/haskell/src/Hkl/XRD.hs | 10 ++++++++-- contrib/haskell/src/ghkl.hs | 4 ++-- 3 files changed, 12 insertions(+), 5 deletions(-) commit 1ae47f9d369e1c049c29a2da31144e4a7a148564 Author: Picca Frédéric-Emmanuel Date: Mon Sep 26 10:15:14 2016 +0200 [contrib][haskell] fix for hmatrix < 0.17 contrib/haskell/hkl.cabal | 2 +- contrib/haskell/src/Hkl/XRD.hs | 21 +++++++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) commit 6bbac0b6df73822023b722002fbf3c9873bb7ad2 Author: Picca Frédéric-Emmanuel Date: Sat Sep 24 16:36:50 2016 +0200 [contrib][haskell] make it compiles on Debian unstable contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/Detector.hs | 32 ++++++++++++--------- contrib/haskell/src/Hkl/XRD.hs | 57 +++++++++++++++++++++---------------- 3 files changed, 52 insertions(+), 38 deletions(-) commit a10dde3df1efa8aa2b5d2df5b7e6bda1ac334f21 Author: Picca Frédéric-Emmanuel Date: Fri Sep 23 15:06:52 2016 +0200 [contrib][haskell] generate a gnuplot script for each sample. contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 3 +- contrib/haskell/src/Hkl/XRD.hs | 164 +++++++++++++++++--------- 2 files changed, 107 insertions(+), 60 deletions(-) commit 9919923416fc99c0cea8ce6646b3394e3b7aefdd Author: Picca Frédéric-Emmanuel Date: Tue Sep 20 13:45:53 2016 +0200 [contrib][haskell] the integration is back to normal. Now that the Xpad_flat was corrected we have very nice spectra contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 3 ++- contrib/haskell/src/Hkl/PyFAI/Poni.hs | 4 ++-- contrib/haskell/src/ghkl.hs | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) commit e3215664bebb2c37020499c6636ebed4f65566c7 Merge: 764f78d7 8ae5f1fc Author: Picca Frédéric-Emmanuel Date: Mon Sep 19 22:18:12 2016 +0200 release commit 8ae5f1fc5513e890913762937b7e851eae302c29 Author: Picca Frédéric-Emmanuel Date: Mon Sep 19 22:18:12 2016 +0200 pre-release gui/hkl-gui.c | 164 +++--- hkl3d/hkl3d.cpp | 1728 +++++++++++++++++++++++++++---------------------------- hkl3d/hkl3d.h | 272 ++++----- 3 files changed, 1082 insertions(+), 1082 deletions(-) commit 213021ad4a4095a91f07ee686c135c7afa15c598 Author: Picca Frédéric-Emmanuel Date: Mon Sep 19 22:13:47 2016 +0200 [hkl] set the right indentation and use it Documentation/hkl-default.el | 5 +++++ scripts/indent | 2 +- scripts/indent-c++ | 2 +- tests/bindings/Makefile.am | 2 +- tests/bindings/polarisation.py | 18 +++++++++++++++++- 5 files changed, 25 insertions(+), 4 deletions(-) commit 513b6f76e3c706d9bfb9b78444e582e747f95026 Author: Picca Frédéric-Emmanuel Date: Mon Sep 19 20:28:14 2016 +0200 [buildsys] fix python tests in order to find crystal.ini tests/bindings/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e45cc44f20d4395b4503719e3f6c9944e2a0cc5c Author: Picca Frédéric-Emmanuel Date: Mon Sep 19 19:08:19 2016 +0200 [hkl] add lifting_detector for petraIII P09-EH2 hkl/hkl-engine-petra3-p09-eh2.c | 60 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) commit ab9bedf245f3187dcee289532a0ca2315748124b Author: Picca Frédéric-Emmanuel Date: Fri Sep 16 16:44:35 2016 +0200 [contrib][haskell] wip calibration of the xpad32... contrib/haskell/src/Hkl/C.hsc | 4 +- contrib/haskell/src/Hkl/Detector.hs | 58 +++++++++++++++++++++++---- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 12 +++--- contrib/haskell/src/Hkl/MyMatrix.hs | 4 +- contrib/haskell/src/Hkl/PyFAI/Poni.hs | 46 +++++++++------------ contrib/haskell/src/Hkl/XRD.hs | 11 ++--- contrib/haskell/src/ghkl.hs | 4 +- 7 files changed, 89 insertions(+), 50 deletions(-) commit 3ce4df029e350b0cbc8663638b2945099b944796 Author: Picca Frédéric-Emmanuel Date: Fri Sep 16 14:22:06 2016 +0200 [contrib][haskell] fix the pyFAI -> hkl convertion matrix contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 4 ++-- contrib/haskell/src/Hkl/MyMatrix.hs | 8 ++++---- contrib/haskell/src/ghkl.hs | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) commit 1c4a24567e2c5388e9a142651490fef30f1bc021 Author: Picca Frédéric-Emmanuel Date: Thu Sep 15 10:24:59 2016 +0200 [contrib][haskell] style contrib/haskell/src/Hkl/PyFAI/PoniExt.hs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 22931b64ccfd9fda689a5ef22e6787702d0f599b Author: Picca Frédéric-Emmanuel Date: Wed Sep 14 16:41:11 2016 +0200 [contrib][haskell] reorg contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 13 +++--- contrib/haskell/src/Hkl/PyFAI/Poni.hs | 57 +++++++++++++-------------- contrib/haskell/src/Hkl/PyFAI/PoniExt.hs | 5 ++- 3 files changed, 38 insertions(+), 37 deletions(-) commit 50f506e259669e28a0443aec56c68d9812832490 Author: Picca Frédéric-Emmanuel Date: Wed Sep 14 14:32:00 2016 +0200 [cotnrib][haskell] create the Hkl.PyFAI.PoniExt module contrib/haskell/hkl.cabal | 2 +- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 32 ++++++----- contrib/haskell/src/Hkl/MyMatrix.hs | 18 +++++++ contrib/haskell/src/Hkl/PyFAI/Poni.hs | 78 ++++++++++++--------------- contrib/haskell/src/Hkl/PyFAI/PoniExt.hs | 55 +++++++++++++++++++ contrib/haskell/src/Hkl/Types.hs | 1 - contrib/haskell/src/Hkl/Types/PyFAI.hs | 26 --------- contrib/haskell/src/Hkl/XRD.hs | 30 ++++------- 8 files changed, 138 insertions(+), 104 deletions(-) commit 969818dcdc3d2f584024f16e4e59fab4a6d9f0b9 Author: Picca Frédéric-Emmanuel Date: Tue Sep 13 15:44:19 2016 +0200 [contrib][haskell] add a Detector type for xpad32, zerod contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/C.hsc | 29 ++++++------- contrib/haskell/src/Hkl/Detector.hs | 27 ++++++++++++ contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 10 ++++- contrib/haskell/src/Hkl/PyFAI/Npt.hs | 14 +++--- contrib/haskell/src/Hkl/PyFAI/Poni.hs | 10 +++-- contrib/haskell/src/Hkl/Types.hs | 10 ----- contrib/haskell/src/Hkl/XRD.hs | 62 ++++++++++++++------------- 8 files changed, 95 insertions(+), 68 deletions(-) commit 251ddb8b9704fa6dcc8a7385ea74ff2e1e723030 Author: Picca Frédéric-Emmanuel Date: Fri Sep 9 13:58:33 2016 +0200 [contrib][haskell] first calibration with all images contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 14 ++++--- contrib/haskell/src/Hkl/MyMatrix.hs | 30 ++++++++++++++ contrib/haskell/src/Hkl/PyFAI/Poni.hs | 39 +++++++++---------- contrib/haskell/src/Hkl/Types/PyFAI.hs | 9 +---- contrib/haskell/src/Hkl/XRD.hs | 56 ++++++++++++++++++++++++--- 6 files changed, 111 insertions(+), 38 deletions(-) commit b14acfe494a6b1b7aad018d8d57b55151b994c4a Author: Picca Frédéric-Emmanuel Date: Wed Sep 7 11:09:25 2016 +0200 [contrib][haskell] start to implement the calibration algo contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 43 ++++++++++++++--- contrib/haskell/src/Hkl/XRD.hs | 68 ++++++++++++++++++++++++++- contrib/haskell/src/ghkl.hs | 4 +- 3 files changed, 105 insertions(+), 10 deletions(-) commit 2c75bdebf7543420f62b27a1f445803ea185178c Author: Picca Frédéric-Emmanuel Date: Tue Sep 6 15:57:26 2016 +0200 [contrib][haskell] the right poni entry is the last one. contrib/haskell/src/Hkl/XRD.hs | 2 +- contrib/haskell/src/ghkl.hs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) commit 6e8956aaab3a66c8cf790c4072d3be77aaadd717 Author: Picca Frédéric-Emmanuel Date: Tue Sep 6 09:36:36 2016 +0200 [contrib][haskell] rename a variable contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit d3f23521a117e700da3114e2f3f8e0e7782fb085 Author: Picca Frédéric-Emmanuel Date: Mon Sep 5 16:18:23 2016 +0200 [contrib][haskell] parse all the martinetto npt files contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) commit 4894d8181c70984518f4c295a58879255cb5defa Author: Picca Frédéric-Emmanuel Date: Mon Sep 5 16:02:32 2016 +0200 [contrib][haskell] add the npt parser contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/Diffabs.hs | 1 - contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 17 +++-- contrib/haskell/src/Hkl/PyFAI.hs | 1 + contrib/haskell/src/Hkl/PyFAI/Npt.hs | 99 +++++++++++++++++++++++++++ contrib/haskell/src/ghkl.hs | 3 +- 6 files changed, 111 insertions(+), 11 deletions(-) commit a75ef8fb03c1d26911be78a788fd6a1c310a9d5c Author: Picca Frédéric-Emmanuel Date: Mon Sep 5 12:22:36 2016 +0200 [contrib][haskell] create a pyFAI module in order to add xy files contrib/haskell/hkl.cabal | 3 +- contrib/haskell/src/Hkl/PyFAI.hs | 160 +--------------------------------- contrib/haskell/src/Hkl/PyFAI/Poni.hs | 159 +++++++++++++++++++++++++++++++++ 3 files changed, 163 insertions(+), 159 deletions(-) commit 975aae5b964a9a2af68e6832e17dd888c5205e8a Author: Picca Frédéric-Emmanuel Date: Mon Sep 5 12:11:15 2016 +0200 [contrib][haskell] created an XRD module from the martinetto code contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 275 +----------------------- contrib/haskell/src/Hkl/XRD.hs | 294 ++++++++++++++++++++++++++ 3 files changed, 298 insertions(+), 272 deletions(-) commit 8ab5380092f09480439c720d4b981a43c0446d75 Author: Picca Frédéric-Emmanuel Date: Mon Sep 5 11:42:04 2016 +0200 [contrib][haskell] add the detecteor mask contrib/haskell/hkl.cabal | 4 ++-- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 21 +++++++++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) commit 41dffb4c7d602c4401260b410f03ea2ae6e0e201 Author: Picca Frédéric-Emmanuel Date: Fri Sep 2 11:40:48 2016 +0200 [contrib][haskell] add a method in order to flip the poni contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 6 ++++-- contrib/haskell/src/Hkl/PyFAI.hs | 13 ++++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) commit 0862cdc2fd877f774b09dc98456064dedb5a7a21 Author: Picca Frédéric-Emmanuel Date: Fri Sep 2 11:25:44 2016 +0200 [contirb][haskell] replace all mapM_ by a concurrent version contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 3fdfbc5049a4403ff2070a136899c6a206af6303 Author: Picca Frédéric-Emmanuel Date: Fri Sep 2 11:17:52 2016 +0200 [contrib][haskell] add the threshold and the bins in the new XrdNxs type contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 128 +++++++++++++++++--------- 1 file changed, 82 insertions(+), 46 deletions(-) commit d64be7fae6d666c0982668a9995da6b8ede0acf8 Author: Picca Frédéric-Emmanuel Date: Thu Sep 1 13:54:09 2016 +0200 [contrib][haskell] execute the integration in multiple threads contrib/haskell/hkl.cabal | 7 +++++-- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 26 +++++++++++++++++--------- 2 files changed, 22 insertions(+), 11 deletions(-) commit 61f0b96e85e6bf000f54f101c18f4fb5c24de3d1 Author: Picca Frédéric-Emmanuel Date: Mon Aug 29 12:00:22 2016 +0200 [contib][haskell] compile on jessie and remove warnings contrib/haskell/hkl.cabal | 2 +- contrib/haskell/src/Hkl/C.hsc | 4 ++-- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 4 ++-- contrib/haskell/src/Hkl/PyFAI.hs | 15 ++++++++------- 4 files changed, 13 insertions(+), 12 deletions(-) commit f2e2b859598c6b2b658392307ee351f0c074f2f8 Author: Picca Frédéric-Emmanuel Date: Sun Jul 31 14:11:37 2016 +0200 [contrib/haskell] factorize the h5path in Martinetto contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 199 +++----------------------- 1 file changed, 20 insertions(+), 179 deletions(-) commit ed566077b8638fc75c6bd9fc8a43023064be6de3 Author: Picca Frédéric-Emmanuel Date: Sun Jul 31 10:50:06 2016 +0200 [contrib/haskell] XRF -> XRD contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 60 +++++++++++++-------------- 1 file changed, 30 insertions(+), 30 deletions(-) commit ca381e126304ba270f7b7554803a51a250139ee3 Author: Picca Frédéric-Emmanuel Date: Sun Jul 31 10:46:01 2016 +0200 [contrib/haskell] remove all warnings in the library contrib/haskell/hkl.cabal | 2 +- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 162 ++++++++++---------------- 2 files changed, 60 insertions(+), 104 deletions(-) commit a9dd9e220ef06672cc4ab29c0b6efde7756b7a27 Author: Picca Frédéric-Emmanuel Date: Sat Jul 30 18:59:14 2016 +0200 [contrib/haskell] user pipes(safe in order to manage resources. contrib/haskell/hkl.cabal | 2 + contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 87 ++++++++++++++------------- 2 files changed, 48 insertions(+), 41 deletions(-) commit cc4dbbc4ac2a88e0d565e338f460d0cc65e39351 Author: Picca Frédéric-Emmanuel Date: Fri Jul 29 14:35:06 2016 +0200 [contrib/haskell] set the right wavelength when integrating with pyFAI contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 3 +++ 1 file changed, 3 insertions(+) commit f72e7591289c1e8fb0ecc5f85202db6be76126bd Author: picca Date: Fri Jul 29 14:12:58 2016 +0200 [contrib/haskell] use OverloadedStrings to simplify code contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) commit d53c85caf48889ffef0dcacaa17a82a410452907 Author: picca Date: Fri Jul 29 11:13:25 2016 +0200 [contrib/haskell] make it compiles on stretch contrib/haskell/src/Hkl/C.hsc | 2 +- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 2 +- contrib/haskell/src/Hkl/PyFAI.hs | 26 ++++++++++++++------------ contrib/haskell/src/Hkl/Types/PyFAI.hs | 2 +- 4 files changed, 17 insertions(+), 15 deletions(-) commit f9f33109115c6565031ce1c30d24d7979f0e3ddc Author: Picca Frédéric-Emmanuel Date: Wed Jul 27 17:32:51 2016 +0200 [contrib/haskell] pyFAI integrator first version contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 134 ++++++++++++++++++++------ contrib/haskell/src/Hkl/PyFAI.hs | 7 +- 2 files changed, 109 insertions(+), 32 deletions(-) commit 6d27177fd061165ff2ff19b4984575cdf4a8ac23 Author: Picca Frédéric-Emmanuel Date: Wed Jul 27 15:13:05 2016 +0200 [contrib/haskell] hlint + saves consumer -> savePonies Pipe contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) commit 99400dc5ef269cdaa1fcb52fb6faf32a626deadf Author: Picca Frédéric-Emmanuel Date: Wed Jul 27 14:20:38 2016 +0200 [contrib][haskell] fix the getPoniExtRef method contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) commit dffa6b2f59d0e33a14a2774b1d4fca97393672b3 Author: Picca Frédéric-Emmanuel Date: Tue Jul 26 17:01:16 2016 +0200 [contrib] reorg + code contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 275 +++++++++++++------------- 1 file changed, 141 insertions(+), 134 deletions(-) commit 45d2fd09c2159d0795bdc7c28b40bc3e8b611fdd Author: Picca Frédéric-Emmanuel Date: Tue Jul 26 16:27:50 2016 +0200 [contrib) add all samples and unconnect from ruche contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 227 ++++++++++++++++++++++++-- 1 file changed, 213 insertions(+), 14 deletions(-) commit adaad448a01f0243dd1a66a6b0f106e6a9dbf351 Author: Picca Frédéric-Emmanuel Date: Tue Jul 26 14:46:52 2016 +0200 [contrib] treament of multiple nxs files for samples (difftomo) add XRFRef, XRFSample class in order to deal with this. contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 144 ++++++++++++++++++-------- 2 files changed, 103 insertions(+), 42 deletions(-) commit 36ab23590ab18ca0509036c6af1fa5d3c21dd080 Author: Picca Frédéric-Emmanuel Date: Tue Jul 26 10:52:10 2016 +0200 [contrib] save all ponies in /tmp for now contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 43 ++++++++++++++++----------- 1 file changed, 26 insertions(+), 17 deletions(-) commit c2ed01ea8801f2964218d17bf4a37d531dab44aa Author: Picca Frédéric-Emmanuel Date: Tue Jul 26 09:55:26 2016 +0200 [contrib] use the changeBase in rotatePoniEntry contrib/haskell/src/Hkl/PyFAI.hs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit b0d56e97727889134e1f9240c74eeca8b4c20940 Author: Picca Frédéric-Emmanuel Date: Mon Jul 25 18:27:05 2016 +0200 [contrib] add a method to write a poni contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 14 +++++++++++--- contrib/haskell/src/Hkl/PyFAI.hs | 24 +++++++++++++++++++++++- 2 files changed, 34 insertions(+), 4 deletions(-) commit 75c21fc6d97206518e4764c9665930d2945fc2f8 Author: Picca Frédéric-Emmanuel Date: Mon Jul 25 15:52:36 2016 +0200 [contrib] compute the poniext for each step of a scan contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 63 +++++++++++++++------------ 1 file changed, 35 insertions(+), 28 deletions(-) commit bda6bb07c181d2a7e6c6c694f6c01f2d96b1e082 Author: Picca Frédéric-Emmanuel Date: Mon Jul 25 14:03:22 2016 +0200 [contrib] treatment of hkl and pyFAI basis when rotating a Poni contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 10 ++++----- contrib/haskell/src/Hkl/PyFAI.hs | 29 ++++++++++++++++++++++----- contrib/haskell/src/Hkl/Types/PyFAI.hs | 9 ++++++++- 3 files changed, 37 insertions(+), 11 deletions(-) commit 706fe2e97f2d6207db6fac91b0a0c0add816ae7e Author: Picca Frédéric-Emmanuel Date: Mon Jul 25 13:24:47 2016 +0200 [contrib] add a computeNewPoni in order to produce a popni for each step of a scan. contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) commit 4a6468d3a7c0521988e44fedc1b739eac009c0ed Author: Picca Frédéric-Emmanuel Date: Mon Jul 25 11:53:26 2016 +0200 [contrib] read the ref poni for real contrib/haskell/hkl.cabal | 6 +- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 148 +++++++++++++++----------- contrib/haskell/src/Hkl/PyFAI.hs | 6 +- contrib/haskell/src/Hkl/Types.hs | 5 - 4 files changed, 89 insertions(+), 76 deletions(-) commit e97ee25fc6c6f231ce0a10647c8b117041d29082 Author: Picca Frédéric-Emmanuel Date: Fri Jul 22 16:56:50 2016 +0200 [contrib] put a Factory in the Geometry type contrib/haskell/src/Hkl/C.hsc | 57 ++++++++++++++------------- contrib/haskell/src/Hkl/Calibration.hs | 2 +- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 4 +- contrib/haskell/src/Hkl/Sixs.hs | 2 +- contrib/haskell/src/Hkl/Types.hs | 11 ++++++ 5 files changed, 45 insertions(+), 31 deletions(-) commit b1d7779c029d8f4a4da86b8d05d99b4085205785 Author: Picca Frédéric-Emmanuel Date: Fri Jul 22 14:09:02 2016 +0200 [contrib] create the poni used for ref. contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 62 ++++++++++++++++----------- contrib/haskell/src/Hkl/Types.hs | 16 ++++++- 2 files changed, 51 insertions(+), 27 deletions(-) commit bb7cc511eb5d351d4a4071383be2288eeb4ab209 Author: Picca Frédéric-Emmanuel Date: Fri Jul 22 10:52:54 2016 +0200 [contrib] hlint contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 16 ++++++---------- contrib/haskell/src/Hkl/PyFAI.hs | 10 +++++----- contrib/haskell/src/Hkl/Types.hs | 2 -- 3 files changed, 11 insertions(+), 17 deletions(-) commit 21db474a297999c8a7bd258f3898bfbc5604a404 Author: Picca Frédéric-Emmanuel Date: Thu Jul 21 17:35:34 2016 +0200 [contrib] wip martinetto contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 69b7fdea4ef9688088ade85b6ab26be2c52cd8b4 Author: Picca Frédéric-Emmanuel Date: Thu Jul 21 14:54:20 2016 +0200 [contrib] detector rotation matrix for each position of the scan Create a type for the factory. contrib/haskell/src/Hkl/C.hsc | 116 +++++++++++++++++--------- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 56 ++++--------- contrib/haskell/src/Hkl/PyFAI.hs | 4 +- contrib/haskell/src/Hkl/Types.hs | 15 ++-- 4 files changed, 106 insertions(+), 85 deletions(-) commit 5b945ba181eb2c0b70c9610d4ded8756b37aaa43 Author: Picca Frédéric-Emmanuel Date: Mon Jul 18 16:26:16 2016 +0200 [contrib] add a way to rotate a poniEntry contrib/haskell/src/Hkl/PyFAI.hs | 58 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) commit 6e7668fb97c4c83c6f9c499276396e3cfe893d09 Author: Picca Frédéric-Emmanuel Date: Wed Jul 6 15:11:34 2016 +0200 [contrib] rework the martinetto main contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 73 ++++++++++---------- contrib/haskell/src/ghkl.hs | 99 ++++++++++++++------------- 2 files changed, 86 insertions(+), 86 deletions(-) commit aff933ce901f621de11df0c523a230c84dbe6ff2 Author: Picca Frédéric-Emmanuel Date: Wed Jul 6 14:04:40 2016 +0200 [contrib] haskell refactoring contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 60 ++++++++++++++------------- 1 file changed, 32 insertions(+), 28 deletions(-) commit 4224a8cee480dab082ba11a8efa22160b986f00a Author: Picca Frédéric-Emmanuel Date: Wed Jul 6 13:48:48 2016 +0200 [contrib] wip martinetto contrib/haskell/src/Hkl/Diffabs.hs | 136 +------------------ contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 182 +++++++++++++++++++++++--- 2 files changed, 166 insertions(+), 152 deletions(-) commit f9442d35bfeb231b813b31e29bc49f011ef315fc Author: Picca Frédéric-Emmanuel Date: Mon Jul 4 15:51:43 2016 +0200 [contrib] put the martinetto code in its own module contrib/haskell/hkl.cabal | 2 + contrib/haskell/src/Hkl/Diffabs.hs | 4 +- contrib/haskell/src/Hkl/Diffabs/Martinetto.hs | 81 +++++++++++++++++++++++++++ contrib/haskell/src/ghkl.hs | 27 +-------- 4 files changed, 87 insertions(+), 27 deletions(-) commit 77a28ec07e55716b9ed215766c9992e02355f097 Author: Picca Frédéric-Emmanuel Date: Mon Jul 4 11:20:06 2016 +0200 [contrib] parse latest poni files contrib/haskell/hkl.cabal | 2 ++ contrib/haskell/src/Hkl/PyFAI.hs | 4 ++-- contrib/haskell/src/ghkl.hs | 23 ++++++++++++++++++----- 3 files changed, 22 insertions(+), 7 deletions(-) commit 450bccb29ea83816b626cf1d999c93c384dc78ce Author: Picca Frédéric-Emmanuel Date: Sat Jul 2 15:17:29 2016 +0200 [contrib] add units in the poni file contrib/haskell/src/Hkl/PyFAI.hs | 30 ++++++++++++++++++++---------- contrib/haskell/src/Hkl/Types/PyFAI.hs | 20 ++++++++++---------- 2 files changed, 30 insertions(+), 20 deletions(-) commit 017b9b85dc4ee93b6650c19ba9bab79eaa8d231e Author: Picca Frédéric-Emmanuel Date: Sat Jul 2 14:36:24 2016 +0200 [contrib] parse the pyFAI ponifiles contrib/haskell/src/Hkl/PyFAI.hs | 41 +++++++++++++++++----------------- contrib/haskell/src/Hkl/Types/PyFAI.hs | 10 ++++++--- contrib/haskell/src/ghkl.hs | 4 +++- 3 files changed, 31 insertions(+), 24 deletions(-) commit 04d3a68a545e1b18622d692fba2866c4cd0fa8ba Author: Picca Frédéric-Emmanuel Date: Tue Jun 28 17:02:58 2016 +0200 [wip][contrib] parse poni file contrib/haskell/hkl.cabal | 10 +++++++-- contrib/haskell/src/Hkl.hs | 1 + contrib/haskell/src/Hkl/PyFAI.hs | 37 ++++++++++++++++++++++++++++++++++ contrib/haskell/src/Hkl/Types/PyFAI.hs | 21 ++++++++++++------- contrib/haskell/src/ghkl.hs | 16 +++++++++++++-- 5 files changed, 74 insertions(+), 11 deletions(-) commit 1a24786b744fe5ebb2eb9bba5eea385f5c76652b Author: Picca Frédéric-Emmanuel Date: Tue Jun 28 14:41:58 2016 +0200 [contrib] add a PyFAI module contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/Types.hs | 1 + contrib/haskell/src/Hkl/Types/PyFAI.hs | 15 +++++++++++++++ 3 files changed, 17 insertions(+) commit 44557a8e56f9fc54ae7da2e4f958ef936b5aa2bc Author: Picca Frédéric-Emmanuel Date: Tue Jun 28 14:32:57 2016 +0200 [contrib] put Parameter into it's own module contrib/haskell/hkl.cabal | 3 +- contrib/haskell/src/Hkl/C.hsc | 44 --------------- contrib/haskell/src/Hkl/Engine.hs | 1 - contrib/haskell/src/Hkl/Types.hs | 44 +++++++-------- contrib/haskell/src/Hkl/Types/Parameter.hsc | 85 +++++++++++++++++++++++++++++ 5 files changed, 108 insertions(+), 69 deletions(-) commit 99cf1a4428fb7b4c843fef605e4e7e6b289ddd79 Author: Picca Frédéric-Emmanuel Date: Mon Jun 27 19:16:42 2016 +0200 [contrib] declare Storable Parameter contrib/haskell/hkl.cabal | 2 +- contrib/haskell/src/Hkl/C.hsc | 119 ++++++++++++++++----------------- contrib/haskell/src/Hkl/Calibration.hs | 2 +- contrib/haskell/src/Hkl/Diffabs.hs | 2 +- contrib/haskell/src/Hkl/Sixs.hs | 2 +- contrib/haskell/src/Hkl/Types.hs | 1 + contrib/haskell/src/ghkl.hs | 4 ++ 7 files changed, 65 insertions(+), 67 deletions(-) commit 21fc182277386cbb9b2a1b78f8d098fe2514f97a Author: Picca Frédéric-Emmanuel Date: Tue Jun 7 18:56:15 2016 +0200 [hkl] update ccan hkl/ccan/list/list.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a2681be516abe65a0ba12121cb3b4907f3a5a6ef Author: Picca Frédéric-Emmanuel Date: Tue Jun 7 10:39:39 2016 +0200 [tests] work in progress on the polarisation with petraIII tests/bindings/Makefile.am | 2 +- tests/bindings/crystal.ini | 27 ++++ tests/bindings/polarisation.py | 335 +++++++++++++++++++++++++++++++++++------ 3 files changed, 314 insertions(+), 50 deletions(-) commit 6d1c79a8696f0755e9bd748593cc373732003a29 Author: Picca Frédéric-Emmanuel Date: Tue Jun 7 10:23:46 2016 +0200 [hkl] add hkl_matrix_dup unit test tests/hkl-matrix-t.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) commit 14d53ea3e343aa5e632fa68910d6befbf7a0a3c5 Author: Picca Frédéric-Emmanuel Date: Tue Jun 7 10:22:55 2016 +0200 [hkl] apply clean-all script gui/hkl-gui-3d-gl.c | 76 +- gui/hkl-gui-3d.c | 84 +- gui/hkl-gui-pseudoaxes.c | 8 +- gui/hkl-gui.c | 42 +- hkl.h | 4 +- hkl/hkl-binding.c | 2 +- hkl/hkl-pseudoaxis-common-hkl-private.h | 4 +- hkl/hkl-pseudoaxis-common-readonly-private.h | 4 +- hkl3d/hkl3d.cpp | 1728 +++++++++++------------ hkl3d/hkl3d.h | 272 ++-- tests/hkl-bench-t.c | 4 +- tests/hkl-lattice-t.c | 104 +- tests/hkl-pseudoaxis-e4ch-t.c | 10 +- tests/hkl-pseudoaxis-e4cv-t.c | 6 +- tests/hkl-pseudoaxis-e6c-t.c | 10 +- tests/hkl-pseudoaxis-k4cv-t.c | 8 +- tests/hkl-pseudoaxis-k6c-t.c | 4 +- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 4 +- tests/hkl-pseudoaxis-zaxis-t.c | 2 +- tests/hkl-sample-t.c | 8 +- tests/runtests.c | 1960 +++++++++++++------------- tests/tap/basic.c | 930 ++++++------ tests/tap/basic.h | 48 +- tests/tap/float.c | 32 +- tests/tap/float.h | 4 +- tests/tap/hkl-tap.c | 6 +- 26 files changed, 2682 insertions(+), 2682 deletions(-) commit 6c387bf4afa6827874291b1bca562a3c29ec7ce3 Author: Picca Frédéric-Emmanuel Date: Mon Jun 6 13:26:09 2016 +0200 [hkl] updated clean-all script scripts/clean-all | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 46b76d4ef40d7c2333ce74c9be57fb296de8cc47 Author: Picca Frédéric-Emmanuel Date: Mon Jun 6 11:32:13 2016 +0200 [gui] now it is possible to set the mode parameters gui/hkl-gui-pseudoaxes.c | 36 ++++++++++++++++++++++++++++++++++++ gui/pseudo.ui | 1 + 2 files changed, 37 insertions(+) commit b013a18c7f6943968800f65e4a47a7135a4c7002 Author: Picca Frédéric-Emmanuel Date: Thu Jun 2 17:43:43 2016 +0200 [hkl] add the ca method in the polarisation script tests/bindings/polarisation.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) commit d6c5ba1e1defe3d003385b4ba6695617261679f3 Author: Picca Frédéric-Emmanuel Date: Wed Jun 1 15:17:10 2016 +0200 [hkl] add the wavelength in polarisation.py tests/bindings/polarisation.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) commit 363fda9454b58d563f1896be86a7be37fdf98609 Author: Picca Frédéric-Emmanuel Date: Tue May 24 11:26:18 2016 +0200 [hkl] polarisation use reflections in order to compute the UB matrix. tests/bindings/polarisation.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) commit f3a1b00dd0bd7142c84b0264c579add15092f736 Author: Picca Frédéric-Emmanuel Date: Mon May 23 16:21:54 2016 +0200 [contrib] extract the ub matrix contrib/haskell/src/Hkl/H5.hs | 9 ++++++++- contrib/haskell/src/Hkl/Sixs.hs | 4 ++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit a04d21fb1f6b4f98749555552df1f3fb989db208 Author: Picca Frédéric-Emmanuel Date: Mon May 23 14:55:35 2016 +0200 [contrib] use Data.Vector.Storable in get_position contrib/haskell/hkl.cabal | 2 ++ contrib/haskell/src/Hkl/C.hsc | 17 ++++++++++------- contrib/haskell/src/Hkl/Calibration.hs | 5 +++-- contrib/haskell/src/Hkl/Diffabs.hs | 5 +++-- contrib/haskell/src/Hkl/H5.hs | 13 +++++-------- contrib/haskell/src/Hkl/Sixs.hs | 5 +++-- contrib/haskell/src/Hkl/Types.hs | 3 ++- contrib/haskell/src/ghkl.hs | 4 +++- 8 files changed, 31 insertions(+), 23 deletions(-) commit a8fda906e2e10cd74d565030b00dc7300d8808d0 Author: Picca Frédéric-Emmanuel Date: Mon May 23 12:21:23 2016 +0200 [contrib] style contrib/haskell/src/Hkl/H5.hs | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) commit b1001db3866adad2645ebc691533f80c485c88c8 Author: Picca Frédéric-Emmanuel Date: Mon May 23 12:08:48 2016 +0200 [contrib] no more Bindings.HDF5.Raw contrib/haskell/src/Hkl/Calibration.hs | 14 +++++++------- contrib/haskell/src/Hkl/Diffabs.hs | 14 +++++++------- contrib/haskell/src/Hkl/H5.hs | 14 ++------------ contrib/haskell/src/Hkl/Sixs.hs | 10 +++++----- 4 files changed, 21 insertions(+), 31 deletions(-) commit 00912a5c8100d1b4a71cec551a31d9982253ad66 Author: Picca Frédéric-Emmanuel Date: Mon May 23 12:05:23 2016 +0200 [contrib] use readDatasetInto contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl/H5.hs | 58 +++++++++++++++++++------------------------ 2 files changed, 26 insertions(+), 33 deletions(-) commit 469c86610a7de617eb45533f1c9d4f96b2caa04e Author: Picca Frédéric-Emmanuel Date: Fri May 20 16:08:58 2016 +0200 [contrib] simplification contrib/haskell/src/Hkl/H5.hs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit f05ca26f04630214818a9ca454b86b74d7e1f1c8 Author: Picca Frédéric-Emmanuel Date: Fri May 20 16:01:36 2016 +0200 [contrib] remove useless code contrib/haskell/src/Hkl/H5.hs | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) commit aa4f5e497e9e53de866a75d4f55ca399ceb62b38 Author: Picca Frédéric-Emmanuel Date: Fri May 20 16:00:21 2016 +0200 [contrib] use closeTypeID contrib/haskell/src/Hkl/H5.hs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) commit 6fa7f2dbe52fe6a91a2648f8eabbe081bb391b42 Author: Picca Frédéric-Emmanuel Date: Fri May 20 15:51:59 2016 +0200 [contrib] getSimpleDataspaceExtentNPoints contrib/haskell/src/Hkl/H5.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 1d1fa47cbea84b06b4b98e857e3bc2f81781d4d8 Author: Picca Frédéric-Emmanuel Date: Fri May 20 15:47:32 2016 +0200 [contrib] use closeDataspace contrib/haskell/src/Hkl/H5.hs | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) commit 9615ca67c5e555cefa612703059ed427625151d5 Author: Picca Frédéric-Emmanuel Date: Fri May 20 15:41:32 2016 +0200 [contrib] use createSimpleDataspace contrib/haskell/src/Hkl/H5.hs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit 3256c92a991b4a9df0f27b51c94c4d13e888455e Author: Picca Frédéric-Emmanuel Date: Fri May 20 15:27:45 2016 +0200 [contrib) use selectHyperslab contrib/haskell/src/Hkl/H5.hs | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) commit 29766815357b53ba8769b04500000555b36f97f3 Author: Picca Frédéric-Emmanuel Date: Fri May 20 15:15:12 2016 +0200 [contrib] use Dataset methods contrib/haskell/src/Hkl/H5.hs | 44 ++++++++++++++++++++----------------------- 1 file changed, 20 insertions(+), 24 deletions(-) commit 6009078289e6e7e33bd05cc93a554819ed70962c Author: Picca Frédéric-Emmanuel Date: Fri May 20 14:36:19 2016 +0200 [contrib] hs-hdf5 use Dataset contrib/haskell/src/Hkl/Calibration.hs | 67 +++++++++++++++---------------- contrib/haskell/src/Hkl/Diffabs.hs | 73 ++++++++++++++++------------------ contrib/haskell/src/Hkl/H5.hs | 61 ++++++++++------------------ contrib/haskell/src/Hkl/Sixs.hs | 63 ++++++++++++++--------------- 4 files changed, 119 insertions(+), 145 deletions(-) commit b78f3e66eca6dc10ef1e748cf3cc5214c39f0e77 Author: Picca Frédéric-Emmanuel Date: Fri May 20 14:07:37 2016 +0200 [contrib] use hdf5 binding (openFile) contrib/haskell/hkl.cabal | 2 ++ contrib/haskell/src/Hkl/Calibration.hs | 4 ++-- contrib/haskell/src/Hkl/Diffabs.hs | 4 ++-- contrib/haskell/src/Hkl/H5.hs | 38 ++++++++++++++-------------------- contrib/haskell/src/Hkl/Sixs.hs | 4 ++-- contrib/haskell/src/hkl3d.hs | 5 +++-- 6 files changed, 27 insertions(+), 30 deletions(-) commit 5e0a35c4929a051872f8d0bd35e61defcd0c1eb4 Author: Picca Frédéric-Emmanuel Date: Thu May 19 13:44:39 2016 +0200 [contrib] remove comments contrib/haskell/src/Hkl/Diffabs.hs | 111 ------------------------------------- contrib/haskell/src/Hkl/H5.hs | 41 -------------- contrib/haskell/src/Hkl/Sixs.hs | 110 ------------------------------------ 3 files changed, 262 deletions(-) commit 81f5b14670d19f9e83ada922d58eccb0b9f33dc1 Author: Picca Frédéric-Emmanuel Date: Thu May 19 13:44:07 2016 +0200 [contrib] add the Calibration module contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl.hs | 22 ++---- contrib/haskell/src/Hkl/Calibration.hs | 132 +++++++++++++++++++++++++++++++++ contrib/haskell/src/hkl3d.hs | 4 +- 4 files changed, 143 insertions(+), 16 deletions(-) commit 24bb6880e4a184840fd2bc7854bbb6d0db1cbb1d Author: Picca Frédéric-Emmanuel Date: Tue May 17 18:52:30 2016 +0200 [buildsys] add a release target Makefile.am | 15 ++++++++++++++- scripts/clean-all | 4 ++-- 2 files changed, 16 insertions(+), 3 deletions(-) commit 15a128980fa79c1735922b9fb25995aa31113ed4 Author: Picca Frédéric-Emmanuel Date: Wed May 4 16:39:28 2016 +0200 [contrib] simplification of the blender code contrib/cirpad/blender_pyfai.py | 198 ++++++++++++++-------------------------- 1 file changed, 71 insertions(+), 127 deletions(-) commit fd95e64799823057a6360550faf119af5e6e4a68 Author: Picca Frédéric-Emmanuel Date: Wed May 4 13:05:40 2016 +0200 [contrib] first blender script for pyfai detectors contrib/cirpad/blender_pyfai.py | 414 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 414 insertions(+) commit 7f0c7773e15f4d6d78f759127ebc3b01b75fd30b Author: Picca Frédéric-Emmanuel Date: Wed May 4 09:59:47 2016 +0200 [buildsys] fix x.pc.in file for multi-arch headers files Documentation/hkl.org.in | 6 ++++++ hkl.pc.in | 6 +++--- hkl3d.pc.in | 8 ++++---- 3 files changed, 13 insertions(+), 7 deletions(-) commit 0afeeb3e949f58e1bc700ccff6b32314a284cc2b Author: Picca Frédéric-Emmanuel Date: Thu Apr 28 08:59:18 2016 +0200 post release commit Documentation/hkl.org.in | 1 + 1 file changed, 1 insertion(+) commit 764f78d732d5a0181902bc11029fafad80ef1bbd Merge: 37484987 140965b3 Author: Picca Frédéric-Emmanuel Date: Wed Apr 27 09:05:13 2016 +0200 Merge branch 'next' into maint commit 140965b367de780f549a5bde7063284012d6e00c Author: Picca Frédéric-Emmanuel Date: Wed Apr 27 09:04:05 2016 +0200 [todo] fix the q/q2 engines. Documentation/hkl.org.in | 7 +++++++ 1 file changed, 7 insertions(+) commit d2c8bb1a7673c37e6189b396c8b6269858807b49 Author: Picca Frédéric-Emmanuel Date: Wed Apr 27 08:40:31 2016 +0200 [hkl] remove gobject-introspection warnings hkl/hkl-binding.c | 52 +++++++++++++--------------------------------------- 1 file changed, 13 insertions(+), 39 deletions(-) commit 9425ab8209f6b92fbcd8251baddc1f8b51f119a5 Author: Picca Frédéric-Emmanuel Date: Wed Apr 27 08:32:11 2016 +0200 [buildsys] reactivate the patch level version number configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 02b7c0e1b5307737d09b6b032845a4f97447daeb Author: Picca Frédéric-Emmanuel Date: Tue Apr 26 19:36:17 2016 +0200 [ccan] update the ccan part hkl/ccan/configurator.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) commit 374849879c0c24a5089a5d30513504130b89f4d3 Author: Picca Frédéric-Emmanuel Date: Tue Apr 26 16:48:00 2016 +0200 update the pom.xml file with the ICA version hkl/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 51a0f1f39aa8ce0d1bafc53c641870788d3c0349 Author: Picca Frédéric-Emmanuel Date: Tue Apr 26 16:25:58 2016 +0200 [hkl] add the soleil sirius turret basepitch axis. Documentation/hkl.org.in | 2 ++ hkl/hkl-axis-private.h | 4 ++-- hkl/hkl-axis.c | 20 +++++++++----------- hkl/hkl-engine-soleil-sirius-turret.c | 17 +++++++++++------ hkl/hkl-geometry-private.h | 3 +++ hkl/hkl-geometry.c | 14 +++++++++++--- tests/hkl-axis-t.c | 21 ++++++++------------- 7 files changed, 46 insertions(+), 35 deletions(-) commit e414c32b4efde13005062115fd5fff128511aca3 Author: Picca Frédéric-Emmanuel Date: Mon Apr 25 16:33:50 2016 +0200 [doc] updated for the sample/detector rotation. Documentation/hkl.org.in | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) commit eb892077154a86a8524e70cc97762f3cb462a1cd Author: Picca Frédéric-Emmanuel Date: Wed Apr 20 14:49:08 2016 +0200 [binding] add hkl_quaternion_to_matrix in order to convert quaternion to matrix hkl.h | 5 +++-- hkl/Makefile.am | 1 + hkl/hkl-binding-private.h | 6 ++++++ hkl/hkl-binding.c | 22 ++++++++++++++++++++++ hkl/hkl-quaternion.c | 2 +- tests/bindings/polarisation.py | 21 ++++++++++----------- tests/bindings/python.py | 4 ++++ 7 files changed, 47 insertions(+), 14 deletions(-) commit ffbb045aa27270c41b0c782a094e9094d1a77805 Author: Picca Frédéric-Emmanuel Date: Fri Apr 15 18:13:14 2016 +0200 [hkl] add hkl_geometry_[sample/detector]_rotation_get hkl.h | 8 +++- hkl/hkl-binding-private.h | 6 +++ hkl/hkl-binding.c | 38 ++++++++++++++++++ hkl/hkl-geometry.c | 34 +++++++++++++++++ hkl/hkl-types.h | 3 ++ tests/bindings/Makefile.am | 2 +- tests/bindings/polarisation.py | 87 ++++++++++++++++++++++++++++++++++++++++++ tests/bindings/python.py | 11 ++++++ tests/hkl-geometry-t.c | 33 +++++++++++++++- 9 files changed, 219 insertions(+), 3 deletions(-) commit 1901ca074ec3dce4432e99cd9b6c8ac3079ef6c7 Merge: 18999cbd 49fb23d4 Author: System User Date: Tue Apr 12 14:25:13 2016 +0200 Merge branch 'maint' into next Conflicts: Documentation/hkl.org.in commit 18999cbd9d680fbfaeb8f3f296df828f468cd2d3 Author: System User Date: Tue Apr 12 14:23:48 2016 +0200 [contrib] sixs test contrib/haskell/src/ghkl.hs | 56 ++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 26 deletions(-) commit 49fb23d4583014e18fd476ca97a5151b9b95e19c Author: System User Date: Thu Apr 7 10:59:22 2016 +0200 [hkl] add milliradians as unit for the sirius geometries hkl/hkl-unit-private.h | 4 +++- hkl/hkl-unit.c | 36 ++++++++++++++++++++++++++++++++++++ tests/hkl-unit-t.c | 15 ++++++++++++++- 3 files changed, 53 insertions(+), 2 deletions(-) commit e022885edce8016289d2fa9a827d68b17a7c597d Author: System User Date: Thu Apr 7 09:11:22 2016 +0200 [buildsys] fix the tests Makefile.am tests/Makefile.am | 1 - 1 file changed, 1 deletion(-) commit 7412f521b6a615e79a9c40296c7815f4631ff38a Author: Picca Frédéric-Emmanuel Date: Wed Apr 6 14:29:38 2016 +0200 [contrib] remove useless code contrib/haskell/src/Hkl/C.hsc | 5 ----- 1 file changed, 5 deletions(-) commit 6ddb79a651420975623e493cd99ee436bfd1eaa1 Author: Picca Frédéric-Emmanuel Date: Thu Mar 31 17:07:07 2016 +0200 [contrib] add the H5Dataspace type contrib/haskell/src/Hkl/H5.hs | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) commit bd12befc93a6668bbbd0f7b65e56198599bf9db0 Author: Picca Frédéric-Emmanuel Date: Thu Mar 31 16:53:54 2016 +0200 [contrib] reorg contrib/haskell/src/Hkl/H5.hs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) commit 0e26a5d49df1acc21be8f31ffe457ae4f776be8f Author: Picca Frédéric-Emmanuel Date: Thu Mar 31 16:53:42 2016 +0200 [contrib] add the H5DataType type contrib/haskell/src/Hkl/H5.hs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) commit 1eb35bbe94408919a6610e4930edc02dc10180e4 Author: Picca Frédéric-Emmanuel Date: Thu Mar 31 16:43:56 2016 +0200 [contrib] add H5Dataset type contrib/haskell/src/Hkl/Diffabs.hs | 19 ++++++------- contrib/haskell/src/Hkl/H5.hs | 56 ++++++++++++++++++++------------------ contrib/haskell/src/Hkl/Sixs.hs | 17 ++++++------ 3 files changed, 47 insertions(+), 45 deletions(-) commit 8debf44835c9ea119db412b728318a19a4503a95 Author: Picca Frédéric-Emmanuel Date: Thu Mar 31 16:16:22 2016 +0200 [contrib] start to create types on top of HId_t contrib/haskell/src/Hkl/Diffabs.hs | 32 +++++++++++++------------- contrib/haskell/src/Hkl/H5.hs | 47 +++++++++++++++++++++++++------------- contrib/haskell/src/Hkl/Sixs.hs | 30 ++++++++++++------------ 3 files changed, 62 insertions(+), 47 deletions(-) commit efebfe84c068983d3128d955b8e8fd5856596ab9 Author: Picca Frédéric-Emmanuel Date: Thu Mar 31 12:23:36 2016 +0200 [contrib] style contrib/haskell/src/Hkl/Diffabs.hs | 5 +++-- contrib/haskell/src/Hkl/Sixs.hs | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) commit 41879ed55e7e73a5d18d1472ceaa19dedddc4bb0 Author: Picca Frédéric-Emmanuel Date: Thu Mar 31 12:01:39 2016 +0200 [contrib] extract the geometry from hdf5 for Diffabs contrib/haskell/src/Hkl/Diffabs.hs | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) commit 0e760739c1177a18472aa917b781072bd387e51a Author: Picca Frédéric-Emmanuel Date: Thu Mar 31 11:59:26 2016 +0200 [contrib] remove all warnings contrib/haskell/hkl.cabal | 8 +-- contrib/haskell/src/Hkl.hs | 4 ++ contrib/haskell/src/Hkl/C.hsc | 104 +++++++++++++++++++++---------------- contrib/haskell/src/Hkl/Diffabs.hs | 66 ++++++++++++----------- contrib/haskell/src/Hkl/Sixs.hs | 33 +++++++----- contrib/haskell/src/ghkl.hs | 13 +++-- contrib/haskell/src/hkl3d.hs | 3 +- 7 files changed, 131 insertions(+), 100 deletions(-) commit 626b239aeb6e52e1c7ae30d7461dad969d133c1b Author: Picca Frédéric-Emmanuel Date: Thu Mar 31 09:59:46 2016 +0200 [contrib] style, documentation, remove useless code contrib/haskell/hkl.cabal | 85 ++++++------------- contrib/haskell/src/Hkl/Diffractometer.hs | 107 ----------------------- contrib/haskell/src/Hkl/Engine.hs | 29 ++++--- contrib/haskell/src/Hkl/H5.hs | 55 ++++++------ contrib/haskell/src/Hkl/Lattice.hs | 61 -------------- contrib/haskell/src/Hkl/Sixs.hs | 136 +++++++++++++----------------- contrib/haskell/src/Hkl/Source.hs | 24 ------ contrib/haskell/src/Hkl/Transformation.hs | 58 ------------- contrib/haskell/src/Hkl/Types.hs | 131 ++++++++++++++++++---------- 9 files changed, 214 insertions(+), 472 deletions(-) commit ed05942f6d4697ec380498dbc27d94020a739048 Author: System User Date: Wed Mar 30 16:26:46 2016 +0200 [contrib] use maybe instead of defining maybeIO contrib/haskell/src/Hkl/H5.hs | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) commit 51598378b38b323cfa6aaaf7dcc968aa7dac5869 Author: System User Date: Wed Mar 30 12:51:36 2016 +0200 [contrib] add the maybeIO contrib/haskell/src/Hkl/H5.hs | 84 +++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 44 deletions(-) commit 983c962980ab1a61033bddd4a0c9c88bec6c0f76 Author: System User Date: Wed Mar 30 10:46:50 2016 +0200 [contrib] factorize the get_position' method contrib/haskell/src/Hkl/Diffabs.hs | 9 --------- contrib/haskell/src/Hkl/H5.hs | 11 +++++++++++ contrib/haskell/src/Hkl/Sixs.hs | 9 --------- 3 files changed, 11 insertions(+), 18 deletions(-) commit b17f5d9dbf3b9806a359437a8a6d00b26b2903b0 Author: System User Date: Wed Mar 30 10:42:37 2016 +0200 [contrib] read the geometry from the h5 file contrib/haskell/src/Hkl/Sixs.hs | 14 ++++++++------ contrib/haskell/src/hkl3d.hs | 4 ++-- 2 files changed, 10 insertions(+), 8 deletions(-) commit 2dad8951098e21c96c2d8286c229475d84399bd9 Author: System User Date: Wed Mar 30 10:26:10 2016 +0200 [contrib] migrate sixs code to the new h5 methods contrib/haskell/hkl.cabal | 1 + contrib/haskell/src/Hkl.hs | 2 + contrib/haskell/src/Hkl/Diffabs.hs | 8 +-- contrib/haskell/src/Hkl/Sixs.hs | 143 +++++++++++++++++++------------------ contrib/haskell/src/Hkl/Types.hs | 6 ++ 5 files changed, 84 insertions(+), 76 deletions(-) commit 6eb582f92b2c22b9b9528248c663a84a301f19ed Author: Picca Frédéric-Emmanuel Date: Tue Mar 29 16:56:39 2016 +0200 [contrib] rework the get_position to managed all the errors contrib/haskell/src/Hkl/H5.hs | 60 ++++++++++++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 20 deletions(-) commit 5ec55569c62339a7af0663dbb97473d54dc219c9 Author: Picca Frédéric-Emmanuel Date: Tue Mar 29 16:00:40 2016 +0200 [contrib] add withDataspace contrib/haskell/src/Hkl/H5.hs | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) commit 572687b06698fd882a1fc396b88ce7f12e23d547 Author: Picca Frédéric-Emmanuel Date: Tue Mar 29 15:04:03 2016 +0200 [contrib] add a lenH5Dataspace contrib/haskell/src/Hkl/Diffabs.hs | 5 +---- contrib/haskell/src/Hkl/H5.hs | 19 ++++++++++++------- contrib/haskell/src/Hkl/Sixs.hs | 2 +- 3 files changed, 14 insertions(+), 12 deletions(-) commit 3734649b2cc8d4ac1302a63ae6825a73d40f1edb Author: Picca Frédéric-Emmanuel Date: Tue Mar 29 14:27:14 2016 +0200 [contrib] add a closeH5Dataset contrib/haskell/src/Hkl/Diffabs.hs | 24 ++++++++++------------- contrib/haskell/src/Hkl/H5.hs | 39 ++++++++++++++++++++++++-------------- 2 files changed, 35 insertions(+), 28 deletions(-) commit 33262633367bcba249ae6f026cc5c4b2a9353e21 Author: Picca Frédéric-Emmanuel Date: Tue Mar 29 11:21:11 2016 +0200 [contrib] add an openH5Dataset contrib/haskell/src/Hkl/Diffabs.hs | 23 ++++++++++------------- contrib/haskell/src/Hkl/H5.hs | 7 +++++++ 2 files changed, 17 insertions(+), 13 deletions(-) commit 0176aec8cdd7bcce4266e5e92c460d09e92f9113 Author: Picca Frédéric-Emmanuel Date: Mon Mar 28 11:13:05 2016 +0200 [contrib] deal with the h5 file error contrib/haskell/src/Hkl/H5.hs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) commit 2a0353e1951584b17edc0cee0ca0544ec7e2b8fe Author: Picca Frédéric-Emmanuel Date: Sat Mar 26 20:15:39 2016 +0100 [contrib] create a withH5File method contrib/haskell/src/Hkl/Diffabs.hs | 41 +++++++++++++++++++------------------- contrib/haskell/src/Hkl/H5.hs | 7 ++++++- 2 files changed, 26 insertions(+), 22 deletions(-) commit 7746ea10aadecefb12a8303c56ab0654457c7e77 Author: Picca Frédéric-Emmanuel Date: Fri Mar 25 21:56:47 2016 +0100 [contrib] deal with the extended dimensions contrib/haskell/src/Hkl/Diffabs.hs | 45 +++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 20 deletions(-) commit 83072a11336762f4000254174c338b89d8f19990 Author: Picca Frédéric-Emmanuel Date: Fri Mar 25 21:23:31 2016 +0100 [contrib] deal with the get_positions errors contrib/haskell/src/Hkl/Diffabs.hs | 18 ++++++++++++------ contrib/haskell/src/Hkl/H5.hs | 11 +++++++---- contrib/haskell/src/Hkl/Sixs.hs | 20 +++++++++++--------- 3 files changed, 30 insertions(+), 19 deletions(-) commit 7b9ec191e7a3075da14c3842f28f94f93be45e36 Author: Picca Frédéric-Emmanuel Date: Fri Mar 25 19:46:19 2016 +0100 [contrib] deal with non existing dataset contrib/haskell/src/Hkl/Diffabs.hs | 83 ++++++++++++++++++++++---------------- 1 file changed, 48 insertions(+), 35 deletions(-) commit b91c533241e8d785bd3d8b74e915ac2d4798c437 Author: Picca Frédéric-Emmanuel Date: Fri Mar 25 19:45:58 2016 +0100 [contrib] hkl3d on sixs and diffabs contrib/haskell/hkl.cabal | 23 +++- contrib/haskell/src/Hkl/Diffabs.hs | 236 ++++++++++++++++++++++++++++++++++ contrib/haskell/src/Hkl/Engine.hs | 4 +- contrib/haskell/src/Hkl/H5.hs | 88 +++++++++++++ contrib/haskell/src/Hkl/Sixs.hs | 251 +++++++++++++++++++++++++++++++++++++ contrib/haskell/src/ghkl.hs | 2 +- contrib/haskell/src/hkl3d.hs | 8 ++ 7 files changed, 607 insertions(+), 5 deletions(-) commit b1bd169bf361db7318c2ea99146b31f1dba9ac21 Author: System User Date: Thu Feb 25 16:41:21 2016 +0100 [hkl] filter the solution at the end with the real range. Documentation/hkl.org.in | 4 ++++ hkl/hkl-geometry-private.h | 2 ++ hkl/hkl-geometry.c | 23 ++++++++++++++++++++++- hkl/hkl-parameter-private.h | 4 ++++ hkl/hkl-parameter.c | 14 ++++++++++++++ tests/Makefile.am | 1 + tests/hkl-geometry-t.c | 12 ++++++------ 7 files changed, 53 insertions(+), 7 deletions(-) commit d79ed76ede7c8498df45f0e33dbc54a411436198 Author: Picca Frédéric-Emmanuel Date: Thu Feb 25 11:00:41 2016 +0100 [hkl] logging even if there is no error for debugging purpose hkl/hkl-pseudoaxis.c | 6 ++++++ 1 file changed, 6 insertions(+) commit c99f983d6cbbf30cc9c63eb437b7ca7bcc013766 Author: Picca Frédéric-Emmanuel Date: Tue Feb 23 21:36:44 2016 +0100 [contrib] use hmatrix instead of normal list contrib/haskell/hkl.cabal | 3 ++- contrib/haskell/src/Hkl/Engine.hs | 37 ++++++++++++------------------------- contrib/haskell/src/ghkl.hs | 8 ++++++-- 3 files changed, 20 insertions(+), 28 deletions(-) commit 334b1c353eb007db0a03c0eefd0fdd0a9f21aef1 Author: Picca Frédéric-Emmanuel Date: Tue Feb 23 19:14:02 2016 +0100 [contrib] fix the fromToPipe contrib/haskell/src/Hkl/Engine.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 617ef6a4e3514a208aff81667fe86fe44115538d Author: System User Date: Tue Feb 23 16:51:06 2016 +0100 [contrib] add the fromToPipe contrib/haskell/src/Hkl/Engine.hs | 19 ++++++++++++------- contrib/haskell/src/ghkl.hs | 6 ++---- 2 files changed, 14 insertions(+), 11 deletions(-) commit 7904867314d37e94c1f13733991653f3fc61403e Author: System User Date: Tue Feb 23 15:48:50 2016 +0100 [contrib] doc contrib/haskell/src/Hkl/C.hsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8297807d52fb7690087b204365e71498bab71896 Author: System User Date: Tue Feb 23 15:48:41 2016 +0100 [contrib] add an enginesTrajectoryPipe contrib/haskell/src/Hkl/Engine.hs | 8 ++++++++ contrib/haskell/src/ghkl.hs | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) commit 6b2581e680471f3861c51dc7d7e4f98177a648be Author: Picca Frédéric-Emmanuel Date: Sat Feb 20 15:23:23 2016 +0100 [contrib] first working pipe contrib/haskell/hkl.cabal | 4 ++++ contrib/haskell/src/Hkl/C.hsc | 53 +++++++++++++++++++++++++++++++++++++++++-- contrib/haskell/src/ghkl.hs | 13 +++++++---- 3 files changed, 64 insertions(+), 6 deletions(-) commit 5d2e95a2ad037639b2232845afc5113a2557263f Author: System User Date: Wed Feb 17 11:33:41 2016 +0100 [contrib] add the withLAttice method contrib/haskell/src/Hkl/C.hsc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 586ae9996d5cb045028ff236e92d06992c63c5b8 Author: System User Date: Wed Feb 17 11:29:06 2016 +0100 [contrib] add withEngineList contrib/haskell/src/Hkl/C.hsc | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) commit 672262d44a0e547dfb85f14caf9dafcd4ef5c338 Author: System User Date: Wed Feb 17 11:01:39 2016 +0100 [contrib] add withDetector contrib/haskell/src/Hkl/C.hsc | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) commit f9b8b9c76da89080090eee5c297b314d1723926a Author: System User Date: Wed Feb 17 10:56:04 2016 +0100 [contrib] add withSample contrib/haskell/src/Hkl/C.hsc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) commit e72ca34beff87dfa4dff4d173e0004f502cc092d Author: System User Date: Wed Feb 17 10:54:50 2016 +0100 [contrib] add withGeometry and use it contrib/haskell/src/Hkl/C.hsc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) commit c50d88fe6893ff8e815c6eb7e5b7c906fdf60e98 Author: System User Date: Wed Feb 17 10:31:06 2016 +0100 [contrib] comment and remove useless part of the cabal file contrib/haskell/hkl.cabal | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) commit 97d5ab6a19e131d811ecc5534991b359252751d0 Author: Picca Frédéric-Emmanuel Date: Tue Feb 16 22:57:43 2016 +0100 [contrib] less do :) contrib/haskell/src/Hkl/C.hsc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 23c4a43a94e1e95d585fc9dd57ad200326c8a748 Author: System User Date: Tue Feb 16 18:29:00 2016 +0100 [contrib] add a solveTraj method this is much more efficient and better since the computation is done moving from one position to the other. contrib/haskell/src/Hkl/C.hsc | 47 ++++++++++++++++++++++++++++++++----------- contrib/haskell/src/ghkl.hs | 10 ++++----- 2 files changed, 40 insertions(+), 17 deletions(-) commit b990ef03da4e1163e2a4b5f646cce61a230fff4c Author: System User Date: Tue Feb 16 12:34:50 2016 +0100 [contrib] compute a trajectory contrib/haskell/hkl.cabal | 9 +++++++-- contrib/haskell/src/Hkl.hs | 2 ++ contrib/haskell/src/Hkl/C.hsc | 6 ++++++ contrib/haskell/src/Hkl/Engine.hs | 25 +++++++++++++++++++++++++ contrib/haskell/src/Hkl/Types.hs | 3 +++ contrib/haskell/src/ghkl.hs | 13 ++++++++++--- 6 files changed, 53 insertions(+), 5 deletions(-) commit 3228b06e37ecff68c66d6f938229621d33a214cf Author: Picca Frédéric-Emmanuel Date: Mon Feb 15 20:25:34 2016 +0100 [contrib] add the ux uy uz to the sample contrib/haskell/src/Hkl/C.hsc | 147 ++++++++++++++++++++++++++++----------- contrib/haskell/src/Hkl/Types.hs | 2 +- contrib/haskell/src/ghkl.hs | 4 ++ 3 files changed, 110 insertions(+), 43 deletions(-) commit f0bc3b65da908d6cc7978ff48b4935e48f4c09f3 Author: Picca Frédéric-Emmanuel Date: Sun Feb 14 09:24:17 2016 +0100 [contrib] add the solve method. contrib/haskell/hkl.cabal | 2 + contrib/haskell/src/Hkl/C.hsc | 125 +++++++++++++++++++++++++++++++++--------- contrib/haskell/src/ghkl.hs | 9 +++ 3 files changed, 109 insertions(+), 27 deletions(-) commit b6a9d1d2f7d017518c454fab1b6a6276ed44430a Author: Picca Frédéric-Emmanuel Date: Wed Feb 10 09:15:59 2016 +0100 [contrib] make it works with jessie contrib/haskell/hkl.cabal | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 92aaeb60e0e094aba9d87c6a6fbc46f5b87db6c9 Author: Picca Frédéric-Emmanuel Date: Tue Feb 9 15:58:30 2016 +0100 [hkl] hkl_vector_init is now public and usable in the bindings Documentation/hkl.org.in | 2 ++ hkl.h | 2 ++ hkl/Makefile.am | 1 + hkl/hkl-vector-private.h | 2 -- tests/bindings/python.py | 4 ++++ 5 files changed, 9 insertions(+), 2 deletions(-) commit 4a98986e8f3ac77bf46ae82fdc99f3c7b954047f Author: Picca Frédéric-Emmanuel Date: Tue Feb 9 21:45:13 2016 +0100 [contrib] add the Engine and Mode types contrib/haskell/src/Hkl/C.hsc | 41 ++++++++++--- contrib/haskell/src/Hkl/Types.hs | 8 +++ contrib/haskell/src/ghkl.hs | 122 ++------------------------------------- 3 files changed, 46 insertions(+), 125 deletions(-) commit 8c99e66f5c04dfaebbfe2c0b8eb6e353e7298cac Author: Picca Frédéric-Emmanuel Date: Sun Feb 7 22:37:30 2016 +0100 [contrib] hlint contrib/haskell/src/Hkl/C.hsc | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) commit 359e1442a9f6df0f6e6ca7398a5aacd8dcb30476 Author: Picca Frédéric-Emmanuel Date: Sun Feb 7 18:05:28 2016 +0100 [contrib] use for real the lattice of Sample contrib/haskell/src/Hkl/C.hsc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) commit c8e42b69693c0d7de86e32d97711bdbf4144ac1b Author: Picca Frédéric-Emmanuel Date: Sun Feb 7 17:36:32 2016 +0100 [contrib] use dimensional in the Source contrib/haskell/src/Hkl/C.hsc | 4 ++-- contrib/haskell/src/Hkl/Types.hs | 2 +- contrib/haskell/src/ghkl.hs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) commit 91b9af8142a89e3a3cad8476b7d6516dd9750768 Author: Picca Frédéric-Emmanuel Date: Sun Feb 7 17:30:20 2016 +0100 [contrib] all Lattice can now be convert to HklLattice contrib/haskell/src/Hkl/C.hsc | 71 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) commit c0b77216d269a564ab0533132913d85a6c19b622 Author: Picca Frédéric-Emmanuel Date: Sun Feb 7 16:41:28 2016 +0100 [contrib] hide the Hkl... types except the factory - do not import Hkl qualified - add a lattice to the sample (for now not used) contrib/haskell/src/Hkl/C.hsc | 11 +++++++++- contrib/haskell/src/Hkl/Types.hs | 45 ++++++++++++++++++---------------------- contrib/haskell/src/ghkl.hs | 21 +++++++++---------- 3 files changed, 40 insertions(+), 37 deletions(-) commit f0570a01c2d17a3c8198b0a67bcad576700fa839 Author: Picca Frédéric-Emmanuel Date: Sun Feb 7 16:23:08 2016 +0100 [contrib] add the Lattice type contrib/haskell/hkl.cabal | 5 ++++- contrib/haskell/src/Hkl.hs | 6 +++--- contrib/haskell/src/Hkl/Types.hs | 13 +++++++++++++ 3 files changed, 20 insertions(+), 4 deletions(-) commit cc20d648cb7d959a5c4d7cd74db6cb314e85173c Author: Picca Frédéric-Emmanuel Date: Sun Feb 7 16:11:26 2016 +0100 [contrib] no more foreignptr in the Sample type contrib/haskell/src/Hkl/C.hsc | 22 ++++++++-------------- contrib/haskell/src/Hkl/Types.hs | 3 ++- contrib/haskell/src/ghkl.hs | 27 ++++++++++++--------------- 3 files changed, 22 insertions(+), 30 deletions(-) commit aa1c42e6536e762bdbe6ffc261839e84d4175b9f Author: Picca Frédéric-Emmanuel Date: Sun Feb 7 15:24:19 2016 +0100 [contrib] merge DArray, C -> C contrib/haskell/hkl.cabal | 4 +- contrib/haskell/src/Hkl.hs | 2 - contrib/haskell/src/Hkl/C.hs | 57 --------------------------- contrib/haskell/src/Hkl/{DArray.hsc => C.hsc} | 55 ++++++++++++++++++++++++-- 4 files changed, 54 insertions(+), 64 deletions(-) commit aea6051409f8a54b3178f358a1cd274eb8f436d4 Author: Picca Frédéric-Emmanuel Date: Sun Feb 7 15:03:59 2016 +0100 [contrib] remove engineListInit contrib/haskell/src/Hkl/DArray.hsc | 47 ++++++++++++++------------------------ 1 file changed, 17 insertions(+), 30 deletions(-) commit d5c17f384b9321db5d689a9c52ab0a5a473b3e82 Author: Picca Frédéric-Emmanuel Date: Sun Feb 7 14:53:56 2016 +0100 [contrib] no more EngineList type for now contrib/haskell/src/Hkl/DArray.hsc | 23 +++++++++++------------ contrib/haskell/src/Hkl/Types.hs | 1 - 2 files changed, 11 insertions(+), 13 deletions(-) commit 9052b1ec29ee89c0a25ece0baadd42218db9cd52 Author: Picca Frédéric-Emmanuel Date: Sun Feb 7 14:38:06 2016 +0100 [contrib] no need of an Engine type for now contrib/haskell/src/Hkl/C.hs | 8 -------- contrib/haskell/src/Hkl/DArray.hsc | 25 +++++++++++++++---------- contrib/haskell/src/Hkl/Types.hs | 1 - 3 files changed, 15 insertions(+), 19 deletions(-) commit cf4ddf2f3b7eb7056e64b976e0e9a2daad72e563 Author: Picca Frédéric-Emmanuel Date: Sun Feb 7 14:04:49 2016 +0100 [contrib] no more ForeignPtr in the Detector type contrib/haskell/src/Hkl/C.hs | 15 --------------- contrib/haskell/src/Hkl/DArray.hsc | 29 +++++++++++++++++++++++++---- contrib/haskell/src/Hkl/Types.hs | 4 +++- contrib/haskell/src/ghkl.hs | 5 +---- 4 files changed, 29 insertions(+), 24 deletions(-) commit 09b112365a9032d41a4f7ee0877a5ae489d3b397 Author: Picca Frédéric-Emmanuel Date: Sun Feb 7 13:36:53 2016 +0100 [contrib] no more ForeignPtr embeded into the Geometry type contrib/haskell/src/Hkl/DArray.hsc | 35 ++++++++++++++++++----------------- contrib/haskell/src/Hkl/Types.hs | 7 ++----- contrib/haskell/src/ghkl.hs | 4 +--- 3 files changed, 21 insertions(+), 25 deletions(-) commit 2d45be210402e3aad9ed3f2d6098700a4553cdb5 Author: Picca Frédéric-Emmanuel Date: Sun Feb 7 12:09:38 2016 +0100 [contrib] add a compute method contrib/haskell/src/Hkl/C.hs | 31 ------------------------------- contrib/haskell/src/Hkl/DArray.hsc | 38 +++++++++++++++++++++++++++++++++++++- contrib/haskell/src/ghkl.hs | 8 ++------ 3 files changed, 39 insertions(+), 38 deletions(-) commit 35d2390e330f238c1ac0adfa06de4e7ae20d684f Author: Picca Frédéric-Emmanuel Date: Sun Feb 7 11:51:34 2016 +0100 [contrib] put the axis positions also into the Geometry contrib/haskell/src/Hkl/C.hs | 31 +----------------- contrib/haskell/src/Hkl/DArray.hsc | 65 ++++++++++++++++++++++++++------------ contrib/haskell/src/Hkl/Types.hs | 5 ++- contrib/haskell/src/ghkl.hs | 7 ++-- 4 files changed, 53 insertions(+), 55 deletions(-) commit bca77245d5db5b904683b3e120eef7da221cf868 Author: Picca Frédéric-Emmanuel Date: Sun Feb 7 11:26:08 2016 +0100 [contrib] put a source into the Geometry contrib/haskell/src/Hkl/C.hs | 21 ++++++++++++++++----- contrib/haskell/src/Hkl/DArray.hsc | 24 +++++------------------- contrib/haskell/src/Hkl/Types.hs | 6 +++++- contrib/haskell/src/ghkl.hs | 3 +-- 4 files changed, 27 insertions(+), 27 deletions(-) commit 7b5ab3ac5ea8532a7f373697053e332312f9b2ce Author: Picca Frédéric-Emmanuel Date: Sun Feb 7 11:03:36 2016 +0100 [contrib] remove for now the accessor of the Parameter contrib/haskell/src/Hkl/DArray.hsc | 2 +- contrib/haskell/src/Hkl/Types.hs | 10 +++++----- contrib/haskell/src/ghkl.hs | 7 ++++--- 3 files changed, 10 insertions(+), 9 deletions(-) commit 90d93ea2cee9b18846c59b326cf93d163ccea2d8 Author: Picca Frédéric-Emmanuel Date: Sun Feb 7 10:36:34 2016 +0100 [contrib] All C Hkl types are named Hkl... for consistancy contrib/haskell/src/Hkl/C.hs | 33 +++++++++++++++++---------------- contrib/haskell/src/Hkl/DArray.hsc | 25 +++++++++++++------------ contrib/haskell/src/Hkl/Types.hs | 6 ++++-- 3 files changed, 34 insertions(+), 30 deletions(-) commit 4a551464242137b066bd1f6d3c8e2bc840645016 Author: Picca Frédéric-Emmanuel Date: Sat Feb 6 10:36:20 2016 +0100 [contrib] better doc dot eh C binding contrib/haskell/src/Hkl/DArray.hsc | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) commit 07ce5d788f7858038fb14052e73fbbb1a54edecd Author: Picca Frédéric-Emmanuel Date: Sat Feb 6 10:29:20 2016 +0100 [contrib] it is now possible to get and set the wavelength contrib/haskell/src/Hkl/DArray.hsc | 32 ++++++++++++++++++++++++++------ contrib/haskell/src/ghkl.hs | 31 +++++++++++++++---------------- 2 files changed, 41 insertions(+), 22 deletions(-) commit 4c42aee1efb08f24ec2aa3c30ba7e8b2da463bf8 Author: Picca Frédéric-Emmanuel Date: Sat Feb 6 09:30:33 2016 +0100 [contrib] first pseudo axes computation with the haskell binding contrib/haskell/src/Hkl/DArray.hsc | 12 ++++++++++++ contrib/haskell/src/ghkl.hs | 10 +++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) commit 4af21b252954ec405b8637a465a1045b3bf5ca1d Author: Picca Frédéric-Emmanuel Date: Thu Feb 4 16:32:43 2016 +0100 [doc] explain how to test the python binding directly from the sources Documentation/hkl.org.in | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 9a422669005f8d008f68ca9945a562a8f2aac468 Author: Picca Frédéric-Emmanuel Date: Thu Feb 4 15:19:09 2016 +0100 [doc] use an external css for now. a local css solution should be a lot better. the look and feel of this org-mode theme is nice, but it use external links. Documentation/hkl.org.in | 8 ++++++++ 1 file changed, 8 insertions(+) commit 85a1f4b2e4784233c4d0480eb8f4b5911b8a3337 Author: Picca Frédéric-Emmanuel Date: Thu Feb 4 15:16:52 2016 +0100 [doc] explain better how to contribut via git send-email Documentation/hkl.org.in | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) commit 4ffc095ea83a62c5a88f22f33a0d64c7d724fb14 Author: Picca Frédéric-Emmanuel Date: Thu Feb 4 11:18:11 2016 +0100 upgrading copyright year from 2015 to 2016 Documentation/hkl-default.el | 2 +- contrib/haskell/src/Hkl/Diffractometer.hs | 2 +- contrib/haskell/src/Hkl/Lattice.hs | 2 +- contrib/haskell/src/Hkl/Source.hs | 2 +- contrib/haskell/src/Hkl/Transformation.hs | 2 +- contrib/haskell/src/hkl.hs | 2 +- contrib/sixs/hkl3d.c | 2 +- gui/hkl-gui-3d.c | 2 +- gui/hkl-gui-3d.h | 2 +- gui/hkl-gui-macros.h | 2 +- gui/hkl-gui.c | 2 +- gui/hkl-gui.h | 2 +- hkl.h | 2 +- hkl/hkl-axis-private.h | 2 +- hkl/hkl-axis.c | 2 +- hkl/hkl-binding-private.h | 2 +- hkl/hkl-binding.c | 2 +- hkl/hkl-detector-factory.c | 2 +- hkl/hkl-detector-private.h | 2 +- hkl/hkl-detector.c | 2 +- hkl/hkl-engine-2c.c | 2 +- hkl/hkl-engine-e4c.c | 2 +- hkl/hkl-engine-e6c.c | 2 +- hkl/hkl-engine-k4c.c | 2 +- hkl/hkl-engine-k6c.c | 2 +- hkl/hkl-engine-petra3-p09-eh2.c | 2 +- hkl/hkl-engine-soleil-sirius-turret.c | 2 +- hkl/hkl-engine-soleil-sixs-med.c | 2 +- hkl/hkl-engine-template.c | 2 +- hkl/hkl-engine-zaxis.c | 2 +- hkl/hkl-factory-private.h | 2 +- hkl/hkl-factory.c | 2 +- hkl/hkl-geometry-private.h | 2 +- hkl/hkl-geometry.c | 2 +- hkl/hkl-interval-private.h | 2 +- hkl/hkl-interval.c | 2 +- hkl/hkl-lattice-private.h | 2 +- hkl/hkl-lattice.c | 2 +- hkl/hkl-macros-private.h | 2 +- hkl/hkl-macros.c | 2 +- hkl/hkl-matrix-private.h | 2 +- hkl/hkl-matrix.c | 2 +- hkl/hkl-parameter-private.h | 2 +- hkl/hkl-parameter.c | 2 +- hkl/hkl-pseudoaxis-auto-private.h | 2 +- hkl/hkl-pseudoaxis-auto.c | 2 +- hkl/hkl-pseudoaxis-common-eulerians-private.h | 2 +- hkl/hkl-pseudoaxis-common-eulerians.c | 2 +- hkl/hkl-pseudoaxis-common-hkl-private.h | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 2 +- hkl/hkl-pseudoaxis-common-psi-private.h | 2 +- hkl/hkl-pseudoaxis-common-psi.c | 2 +- hkl/hkl-pseudoaxis-common-q-private.h | 2 +- hkl/hkl-pseudoaxis-common-q.c | 2 +- hkl/hkl-pseudoaxis-common-readonly-private.h | 2 +- hkl/hkl-pseudoaxis-common-readonly.c | 2 +- hkl/hkl-pseudoaxis-common-tth-private.h | 2 +- hkl/hkl-pseudoaxis-common-tth.c | 2 +- hkl/hkl-pseudoaxis-private.h | 2 +- hkl/hkl-pseudoaxis.c | 2 +- hkl/hkl-quaternion-private.h | 2 +- hkl/hkl-quaternion.c | 2 +- hkl/hkl-sample-private.h | 2 +- hkl/hkl-sample.c | 2 +- hkl/hkl-source-private.h | 2 +- hkl/hkl-source.c | 2 +- hkl/hkl-types.c | 2 +- hkl/hkl-types.h | 2 +- hkl/hkl-unit-private.h | 2 +- hkl/hkl-unit.c | 2 +- hkl/hkl-vector-private.h | 2 +- hkl/hkl-vector.c | 2 +- hkl3d/hkl3d.h | 2 +- tests/hkl-axis-t.c | 2 +- tests/hkl-bench-t.c | 2 +- tests/hkl-detector-t.c | 2 +- tests/hkl-geometry-t.c | 2 +- tests/hkl-interval-t.c | 2 +- tests/hkl-lattice-t.c | 2 +- tests/hkl-matrix-t.c | 2 +- tests/hkl-parameter-t.c | 2 +- tests/hkl-pseudoaxis-e4ch-t.c | 2 +- tests/hkl-pseudoaxis-e4cv-t.c | 2 +- tests/hkl-pseudoaxis-e6c-t.c | 2 +- tests/hkl-pseudoaxis-k4cv-t.c | 2 +- tests/hkl-pseudoaxis-k6c-t.c | 2 +- tests/hkl-pseudoaxis-t.c | 2 +- tests/hkl-pseudoaxis-zaxis-t.c | 2 +- tests/hkl-quaternion-t.c | 2 +- tests/hkl-sample-t.c | 2 +- tests/hkl-source-t.c | 2 +- tests/hkl-unit-t.c | 2 +- tests/hkl-vector-t.c | 2 +- tests/hkl3d-test-t.c | 2 +- tests/tap/hkl-tap.h | 2 +- 95 files changed, 95 insertions(+), 95 deletions(-) commit 4db315eaf36a6e182773767b86ee1e68605a8c85 Author: Picca Frédéric-Emmanuel Date: Thu Feb 4 11:17:49 2016 +0100 [scripts] update the copyright script scripts/update_copyright_year | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1696780e3deca5541c2fa3e441870690164f627d Author: Picca Frédéric-Emmanuel Date: Thu Feb 4 11:10:59 2016 +0100 [doc] rename default.el -> hkl-default.el Add the copyright and inhibit the startup screen. Remove elint warnings Documentation/Makefile.am | 8 +++--- Documentation/default.el | 25 ------------------- Documentation/hkl-default.el | 58 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 29 deletions(-) commit d0ecf7598f1aa6c49f98fa42d95964ad45811aba Merge: d508aab9 0f55f422 Author: Picca Frédéric-Emmanuel Date: Thu Feb 4 10:34:55 2016 +0100 Merge branch 'maint' into next commit d508aab92c0338bc573d357848da564e257a6671 Author: Picca Frédéric-Emmanuel Date: Thu Feb 4 10:33:17 2016 +0100 [contrib] make it compiles with ghc >= 7.6 contrib/haskell/src/Hkl/C.hs | 1 + 1 file changed, 1 insertion(+) commit 124edbd6bff8d8f2fb35cbeb67fce8499bd8481e Author: Picca Frédéric-Emmanuel Date: Wed Feb 3 15:51:56 2016 +0100 [contrib] add missing file contrib/haskell/src/Hkl.hs | 9 +++++++++ 1 file changed, 9 insertions(+) commit 069398d5faf8c16a8e4672755044629f96ad8a54 Author: Picca Frédéric-Emmanuel Date: Wed Feb 3 13:26:30 2016 +0100 [contrib] relax the base dependency in order to compile on jessie contrib/haskell/hkl.cabal | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit a86175827cd7c49361bfb4e9ac9e3f57dea80628 Author: Picca Frédéric-Emmanuel Date: Mon Feb 1 20:56:45 2016 +0100 [contrib] add the geometryAxisValuesGet method contrib/haskell/src/Hkl/DArray.hsc | 19 +++++++++++++++++++ contrib/haskell/src/ghkl.hs | 2 ++ 2 files changed, 21 insertions(+) commit e25a90f475ae378905b3ee880e0755199b3e9ed5 Author: Picca Frédéric-Emmanuel Date: Mon Feb 1 19:12:23 2016 +0100 [contrib] add the geometryAxesGet method contrib/haskell/src/Hkl/C.hs | 1 - contrib/haskell/src/Hkl/DArray.hsc | 93 ++++++++++++++++++++++++-------------- contrib/haskell/src/Hkl/Types.hs | 4 ++ contrib/haskell/src/ghkl.hs | 4 +- 4 files changed, 65 insertions(+), 37 deletions(-) commit 96196ea95657d4b80fce55e8ea8ad92aebcbdbbb Author: Picca Frédéric-Emmanuel Date: Mon Feb 1 17:43:58 2016 +0100 [contrib] parameter contain name, value, range contrib/haskell/src/Hkl/DArray.hsc | 44 +++++++++++++++++++++++++------------- contrib/haskell/src/Hkl/Types.hs | 7 +++++- contrib/haskell/src/ghkl.hs | 4 +++- 3 files changed, 38 insertions(+), 17 deletions(-) commit 3484ef0dc9cd2bfb1c66c78e4ef1dbcf53a2e7c4 Author: Picca Frédéric-Emmanuel Date: Mon Feb 1 12:57:52 2016 +0100 [contrib] expose only the engineListPseudoAxesGet method contrib/haskell/src/Hkl/DArray.hsc | 9 ++++++++- contrib/haskell/src/ghkl.hs | 3 +-- 2 files changed, 9 insertions(+), 3 deletions(-) commit 458d09eab82ab11b404985cd85decf71f827e341 Author: Picca Frédéric-Emmanuel Date: Mon Feb 1 11:46:54 2016 +0100 [contrib] add the enginePseudoAxesGet method contrib/haskell/src/Hkl/C.hs | 23 ++++++++++++----------- contrib/haskell/src/Hkl/DArray.hsc | 37 +++++++++++++++++++++++++++++++++++-- contrib/haskell/src/Hkl/Types.hs | 14 +++++++++++--- contrib/haskell/src/ghkl.hs | 7 +++---- 4 files changed, 61 insertions(+), 20 deletions(-) commit e21df17b167fdf96739bc93cf2ac5695dbc5674c Author: Picca Frédéric-Emmanuel Date: Sat Jan 30 23:44:42 2016 +0100 [contrib] add the engineListget method contrib/haskell/hkl.cabal | 10 ++++---- contrib/haskell/src/Hkl/C.hs | 49 +++++++++++++++----------------------- contrib/haskell/src/Hkl/DArray.hsc | 22 +++++++++++++++++ contrib/haskell/src/Hkl/Types.hs | 27 +++++++++++++++++++++ contrib/haskell/src/ghkl.hs | 9 ++++++- 5 files changed, 81 insertions(+), 36 deletions(-) commit b75f3d4346340fd50b41d66e72756a73a0a0b972 Author: Picca Frédéric-Emmanuel Date: Sat Jan 30 11:01:36 2016 +0100 [contrib] deal with HklSample null pointer contrib/haskell/src/Hkl/C.hs | 15 +++++++++++---- contrib/haskell/src/ghkl.hs | 27 ++++++++++++++++++--------- 2 files changed, 29 insertions(+), 13 deletions(-) commit 955edb7df66ffdcf1ea8368a946964f365711644 Author: Picca Frédéric-Emmanuel Date: Wed Jan 27 21:50:56 2016 +0100 [contrib] better haskell binding contrib/haskell/src/Hkl/C.hs | 130 +++++++++++++++++++++++++++++++++++++------ contrib/haskell/src/ghkl.hs | 84 ++++++++++++++++------------ 2 files changed, 160 insertions(+), 54 deletions(-) commit 90af1ccd258bbd7406b41f4877b0093a6162ce0e Author: Picca Frédéric-Emmanuel Date: Sun Jan 24 12:22:50 2016 +0100 [contrib] now the gui is contructed using ghkl.ui contrib/haskell/hkl.cabal | 42 ++++++++++++++++++++++++------------------ contrib/haskell/src/ghkl.hs | 12 +++++++++++- 2 files changed, 35 insertions(+), 19 deletions(-) commit b2e2b1aa7b1d6071f31221e3f22afab8f6be2b00 Author: Picca Frédéric-Emmanuel Date: Sun Jan 24 11:41:47 2016 +0100 [contrib] first working haskell binding for the HklFactory class contrib/haskell/hkl.cabal | 23 ++--- contrib/haskell/src/Hkl/C.hs | 37 ++++++++ contrib/haskell/src/ghkl.hs | 195 +++++++++++++++++-------------------------- 3 files changed, 121 insertions(+), 134 deletions(-) commit 0f55f4221c4b9fc5bcf774e2de25464382ac4770 Author: Picca Frédéric-Emmanuel Date: Fri Jan 22 15:27:57 2016 +0100 [hkl] add emergence_fixed to the SOLEIL SIXS MED 2+3 diffractometer hkl/hkl-engine-soleil-sixs-med.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) commit 1615c8e3078f1925a88986b69079816b7b384613 Author: Picca Frédéric-Emmanuel Date: Wed Jan 20 17:03:31 2016 +0100 [changelog] add the emergence_fixed mode Documentation/hkl.org.in | 2 ++ 1 file changed, 2 insertions(+) commit 4851097b74fc8be7ff6c38ab0a67d456ad0a9711 Author: Picca Frédéric-Emmanuel Date: Wed Jan 20 17:00:20 2016 +0100 [hkl] add the emergence_fixed mode to the med2+2 diffractometer hkl/hkl-engine-soleil-sixs-med.c | 18 +++- hkl/hkl-pseudoaxis-common-hkl-private.h | 40 +++++++- hkl/hkl-pseudoaxis-common-hkl.c | 156 +++++++++++++++++++++++++++++++- 3 files changed, 208 insertions(+), 6 deletions(-) commit febfd71dc2a1425590a5ebe2440756358ec63791 Author: Picca Frédéric-Emmanuel Date: Sun Jan 10 17:40:42 2016 +0100 [haskell] reorganise and add a working cabal file contrib/haskell/hkl.cabal | 20 +++++- contrib/haskell/{ => src}/Hkl/Diffractometer.hs | 0 contrib/haskell/{ => src}/Hkl/Lattice.hs | 0 contrib/haskell/{ => src}/Hkl/Source.hs | 0 contrib/haskell/{ => src}/Hkl/Transformation.hs | 0 contrib/haskell/{Hkl => src}/Tango/DeviceProxy.hsc | 2 +- contrib/haskell/{ => src}/ghkl.hs | 0 contrib/haskell/{ => src}/hkl.hs | 0 hkl/ccan/configurator.c | 72 +++++++++++++++++----- hkl/ccan/list/list.h | 4 +- hkl/ccan/noerr/noerr.c | 8 +++ hkl/ccan/noerr/noerr.h | 8 +++ 12 files changed, 94 insertions(+), 20 deletions(-) commit 66ec8f6fefcbb3d9cdfed90e6a5db26164a8b082 Author: Picca Frédéric-Emmanuel Date: Sun Jan 10 17:15:50 2016 +0100 add the ghkl.hs file contrib/haskell/ghkl.hs | 153 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) commit 599e0459638271861fe14012508af9b116d3baae Author: Picca Frédéric-Emmanuel Date: Sun Jan 10 14:28:16 2016 +0100 add htango contrib/haskell/Hkl/Tango/DeviceProxy.hsc | 47 +++ contrib/haskell/LICENSE | 674 ++++++++++++++++++++++++++++++ contrib/haskell/Setup.hs | 2 + contrib/haskell/hkl.cabal | 73 ++++ 4 files changed, 796 insertions(+) commit 1f372068998e8e3a6707b53ec54bbc57c5efa6de Author: System User Date: Tue Dec 8 12:24:07 2015 +0100 add the emergence read-only with the right default values for the surface. hkl/hkl-engine-e4c.c | 6 ++++-- hkl/hkl-engine-e6c.c | 6 ++++-- hkl/hkl-engine-k4c.c | 6 ++++-- hkl/hkl-engine-k6c.c | 6 ++++-- hkl/hkl-engine-soleil-sirius-turret.c | 6 ++++-- hkl/hkl-engine-soleil-sixs-med.c | 22 ++++++++++++++++++++-- hkl/hkl-engine-template.c | 6 ++++-- hkl/hkl-engine-zaxis.c | 6 ++++-- hkl/hkl-pseudoaxis-common-readonly-private.h | 22 +++++++++++++--------- 9 files changed, 61 insertions(+), 25 deletions(-) commit 10835375405580de3d2d7b29ea42b041f8e0107f Author: Picca Frédéric-Emmanuel Date: Thu Dec 3 15:36:22 2015 +0100 [buildsys] update the version number 5.0.0.patch level configure.ac | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit a04b379ce093fa6eb44b939e4b35b3200f234931 Author: Picca Frédéric-Emmanuel Date: Thu Dec 3 15:34:10 2015 +0100 [contrib] read the axes of the diffractometers from the hdf5 file contrib/sixs/hkl3d.c | 106 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 92 insertions(+), 14 deletions(-) commit 3afda3da716d0bae553aca6eb443ae22305bde1c Author: Picca Frédéric-Emmanuel Date: Wed Dec 2 11:39:00 2015 +0100 release 5.0.0 configure.ac | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 75dd633d2ebd6f7a0976d877a5e4dff2c206a495 Author: Picca Frédéric-Emmanuel Date: Wed Dec 2 11:32:42 2015 +0100 [pom] 5.0.0-SNAPSHOT -> 5.0.0 hkl/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 733ebc1870580ec3f11f161e4125618eb87c7bb9 Author: Picca Frédéric-Emmanuel Date: Tue Dec 1 16:21:52 2015 +0100 [sixs] hkl3d in C the idea is to use directly the Hkl objects in order to compute the hkl coordinates of each pixel of 2D detectors. Once implemented in C, I will have my reference implementation, and I will be able to benchmark other implementations. (binocular, pymca, ...) Makefile.am | 3 + configure.ac | 13 +++ contrib/Makefile.am | 1 + contrib/sixs/Makefile.am | 27 +++++ contrib/sixs/hkl3d.c | 266 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 310 insertions(+) commit b91e8bdfacf636ddf3a30492a530dafe10b74653 Author: Picca Frédéric-Emmanuel Date: Thu Nov 19 13:19:57 2015 +0100 [buildsys] remove the lcov support configure.ac | 72 ------------------------------------------------------------ 1 file changed, 72 deletions(-) commit 616ce607628b094864570eebb9a955bf0aba2100 Author: Picca Frédéric-Emmanuel Date: Thu Nov 19 13:17:57 2015 +0100 [contrib] move the haskell code into a subdirectory contrib/{ => haskell}/Hkl/Diffractometer.hs | 0 contrib/{ => haskell}/Hkl/Lattice.hs | 0 contrib/{ => haskell}/Hkl/Source.hs | 0 contrib/{ => haskell}/Hkl/Transformation.hs | 0 contrib/{ => haskell}/hkl.hs | 0 5 files changed, 0 insertions(+), 0 deletions(-) commit 2494fd582d3f953473e86ce6fd4ca85940339a9d Author: Picca Frédéric-Emmanuel Date: Tue Nov 17 12:22:18 2015 +0100 [pom] shared library hkl/pom.xml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit b1276312cfcbeba26caf6a02d795a899623ade07 Author: Picca Frédéric-Emmanuel Date: Tue Nov 17 11:30:51 2015 +0100 [pom] activate logging and remove binding specific file. hkl/pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) commit b5d7930ee6c6b370df60436deec03b57692067b5 Author: Picca Frédéric-Emmanuel Date: Sun Nov 15 09:28:29 2015 +0100 fix the pkg-config file which require glib-2.0 hkl.pc.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d2621ea1ebe5d15a5ee4841949c4e38da8299401 Author: Picca Frédéric-Emmanuel Date: Wed Nov 4 11:30:01 2015 +0100 pom pom pom pom hkl/pom.xml | 7 +++++ ica/rhel4/hkl/ccan/ccan_config.h | 67 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) commit cf2d96018b8501e3c5f07244015addb2e52b79ec Merge: c0e78687 9ddaabb8 Author: System User Date: Wed Oct 7 15:33:02 2015 +0200 Merge branch 'maint' into next Conflicts: hkl/hkl-pseudoaxis-soleil-sixs-med.c hkl/pom.xml commit 9ddaabb8df833cb834b966c65364eba8cda94076 Author: Picca Frédéric-Emmanuel Date: Tue Oct 6 14:59:01 2015 +0200 add two modes for the soleil sixs med diffractometers. hkl/hkl-pseudoaxis-soleil-sixs-med.c | 23 +++++++++++++++++++++++ hkl/pom.xml | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) commit c0e786876229811d66bffa1297141161ceb16b8b Author: Picca Frédéric-Emmanuel Date: Tue Oct 6 14:38:43 2015 +0200 [wip] haskell code with a Tree contrib/Hkl/Diffractometer.hs | 107 +++++++++++++++++++++++++++++ contrib/Hkl/Lattice.hs | 61 +++++++++++++++++ contrib/Hkl/Source.hs | 24 +++++++ contrib/Hkl/Transformation.hs | 58 ++++++++++++++++ contrib/hkl.hs | 153 +++--------------------------------------- 5 files changed, 259 insertions(+), 144 deletions(-) commit e846b2a6e553396e2830434f988e54b55162ef2b Author: Picca Frédéric-Emmanuel Date: Thu Aug 27 21:45:40 2015 +0200 [todo] reflectivity for the q/q2 engine Documentation/hkl.org.in | 3 +++ 1 file changed, 3 insertions(+) commit c9ecb718a50d3b0b98a54c7b969ae1c701c619a5 Author: picca Date: Wed Jul 15 22:01:21 2015 +0200 [buildsys] add the ccan_config.h public header and use it. Documentation/hkl.org.in | 3 + Makefile.am | 16 +- configure.ac | 17 -- hkl/ccan/Makefile.am | 34 ++- hkl/ccan/array_size/array_size.h | 2 +- hkl/ccan/autodata/autodata.h | 2 +- hkl/ccan/check_type/check_type.h | 2 +- hkl/ccan/compiler/compiler.h | 2 +- hkl/ccan/configurator.c | 570 +++++++++++++++++++++++++++++++++++ hkl/ccan/container_of/container_of.h | 38 ++- hkl/ccan/darray/darray.h | 11 +- hkl/ccan/list/list.h | 225 ++++++++++++-- hkl/ccan/ptr_valid/ptr_valid.h | 2 +- hkl/ccan/str/debug.c | 2 +- hkl/ccan/str/str.h | 2 +- 15 files changed, 860 insertions(+), 68 deletions(-) commit 4d42d11689419ad948b68cb9d90735c94acb0175 Author: Picca Frédéric-Emmanuel Date: Fri Jul 10 15:03:42 2015 +0200 [buildsys] use autoscan to add missing checks configure.ac | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 47d2e15cbb535d7d820e965dae912a8ec32f6254 Author: Picca Frédéric-Emmanuel Date: Thu Jul 9 16:05:58 2015 +0200 [hkl] remove a bunch of warnings. this help found a few mistakes in the test suite. configure.ac | 4 + gui/hkl-gui-3d-gl.c | 4 - gui/hkl-gui-3d.c | 14 +--- gui/hkl-gui-pseudoaxes.c | 3 - gui/hkl-gui.c | 88 +++++++++----------- hkl/hkl-engine-soleil-sixs-med.c | 2 - hkl/hkl-geometry-private.h | 2 +- hkl/hkl-geometry.c | 5 +- hkl/hkl-lattice-private.h | 2 +- hkl/hkl-lattice.c | 2 + hkl/hkl-parameter-private.h | 13 +-- hkl/hkl-parameter.c | 2 + hkl/hkl-pseudoaxis-auto-private.h | 18 ++-- hkl/hkl-pseudoaxis-common-hkl.c | 5 +- hkl/hkl-pseudoaxis-private.h | 6 +- hkl/hkl-pseudoaxis.c | 7 +- hkl/hkl-sample-private.h | 4 +- hkl/hkl-sample.c | 10 ++- hkl3d/hkl3d.cpp | 69 ++++++---------- hkl3d/hkl3d.h | 6 +- tests/hkl-axis-t.c | 2 +- tests/hkl-bench-t.c | 25 +++--- tests/hkl-detector-t.c | 14 ++-- tests/hkl-geometry-t.c | 138 ++++++++++++++++++------------- tests/hkl-interval-t.c | 2 +- tests/hkl-lattice-t.c | 9 +- tests/hkl-matrix-t.c | 3 +- tests/hkl-parameter-t.c | 2 +- tests/hkl-pseudoaxis-e4ch-t.c | 66 +++++++-------- tests/hkl-pseudoaxis-e4cv-t.c | 54 ++++++------ tests/hkl-pseudoaxis-e6c-t.c | 90 ++++++++++---------- tests/hkl-pseudoaxis-k4cv-t.c | 16 ++-- tests/hkl-pseudoaxis-k6c-t.c | 33 ++++---- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 23 +++--- tests/hkl-pseudoaxis-t.c | 21 ++--- tests/hkl-pseudoaxis-zaxis-t.c | 6 +- tests/hkl-quaternion-t.c | 3 +- tests/hkl-sample-t.c | 2 +- tests/hkl-source-t.c | 2 +- tests/hkl-unit-t.c | 5 +- tests/hkl-vector-t.c | 2 +- tests/hkl3d-test-t.c | 41 +++++---- 42 files changed, 401 insertions(+), 424 deletions(-) commit 0d8c857dce96f065f064e08adc4b5a3f6d4eef4a Author: Picca Frédéric-Emmanuel Date: Wed Jul 8 10:23:38 2015 +0200 [hkl3d] chdir -> fchdir hkl3d/hkl3d.cpp | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) commit a8b3983979daf871585ecadce7919dbaeeea52cf Author: Picca Frédéric-Emmanuel Date: Tue Jul 7 16:54:11 2015 +0200 [buildsys] update to c-tap-hardness 3.3 this way a verbose mode can be use during the build process. tests/Makefile.am | 2 +- tests/runtests.c | 460 +++++++++++++++++++++++++++++------------ tests/tap/basic.c | 590 +++++++++++++++++++++++++++++++++++++++-------------- tests/tap/basic.h | 81 ++++++-- tests/tap/float.c | 17 +- tests/tap/float.h | 4 +- tests/tap/macros.h | 15 +- 7 files changed, 849 insertions(+), 320 deletions(-) commit 2a343da4d52486f050d3eb40de05d9aa92ebffd2 Author: Picca Frédéric-Emmanuel Date: Tue Jul 7 13:33:57 2015 +0200 [hkl] fix an unit test error triggered on the sparc architecture. Documentation/hkl.org.in | 3 +++ tests/hkl-pseudoaxis-t.c | 2 ++ 2 files changed, 5 insertions(+) commit 827528b7eab8eea02db241c88c883b60149b1872 Author: Picca Frédéric-Emmanuel Date: Fri Jul 3 15:43:48 2015 +0200 [hkl] no more PATH_MAX Documentation/hkl.org.in | 3 +++ hkl3d/hkl3d.cpp | 5 +++-- 2 files changed, 6 insertions(+), 2 deletions(-) commit 1363d413b31233f1c76c8e01269c83a668702595 Author: Picca Frédéric-Emmanuel Date: Fri Jul 3 14:05:19 2015 +0200 [hkl] fix an unit test issue discovered on small endian arch Documentation/hkl.org.in | 4 ++++ hkl/hkl-interval.c | 3 ++- tests/hkl-interval-t.c | 24 ++++++++++++------------ 3 files changed, 18 insertions(+), 13 deletions(-) commit 36f1889f95f664c8cfdd3a928f5d2fb1666a3a37 Author: Picca Frédéric-Emmanuel Date: Tue Jun 30 14:47:53 2015 +0200 release Documentation/hkl.org.in | 1 + 1 file changed, 1 insertion(+) commit 026c105555c6ef9de9bb2ae816c8aa28d3c39012 Author: Picca Frédéric-Emmanuel Date: Fri Jun 26 16:10:43 2015 +0200 indentation gui/hkl-gui-3d-gl.h | 26 +++++++++++++------------- gui/hkl-gui-pseudoaxes.h | 2 -- gui/hkl-gui.h | 4 ---- hkl/hkl-engine-k4c.c | 1 - hkl/hkl-engine-template.c | 1 - hkl/hkl-geometry-private.h | 1 + hkl/hkl-interval.c | 2 +- hkl/hkl-lattice.c | 4 ++-- hkl/hkl-pseudoaxis-auto.c | 22 +++++++++++----------- hkl/hkl-pseudoaxis-common-eulerians.c | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 2 +- hkl/hkl-pseudoaxis-common-readonly-private.h | 4 ++-- hkl/hkl-pseudoaxis-common-tth.c | 12 ++++++------ hkl/hkl-pseudoaxis-private.h | 2 +- hkl/hkl-pseudoaxis.c | 12 ++++++------ hkl/hkl-sample.c | 4 ++-- hkl/hkl-types.c | 2 +- 17 files changed, 48 insertions(+), 55 deletions(-) commit af0508e561facb7d149665ef4357fcd03af923c2 Author: Picca Frédéric-Emmanuel Date: Tue Jun 23 15:54:57 2015 +0200 [doc] explaination of the pseudo axes calculation. this is a preliminary description. Documentation/hkl.org.in | 15 +++++++++++++++ 1 file changed, 15 insertions(+) commit 6d6ca23af57014a7ed6ede8606baef6542aa8e72 Author: Picca Frédéric-Emmanuel Date: Tue Jun 23 09:05:26 2015 +0200 [doc] corrections Documentation/hkl.org.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit defa03acf7758f4943022218bf01817df080a2c1 Author: Picca Frédéric-Emmanuel Date: Mon Jun 22 14:46:58 2015 +0200 [hkl] Add the emergence engine Documentation/hkl.org.in | 7 +- hkl/hkl-engine-e4c.c | 15 +-- hkl/hkl-engine-e6c.c | 13 ++- hkl/hkl-engine-k4c.c | 13 ++- hkl/hkl-engine-k6c.c | 14 ++- hkl/hkl-engine-soleil-sirius-turret.c | 13 ++- hkl/hkl-engine-soleil-sixs-med.c | 10 +- hkl/hkl-engine-template.c | 13 ++- hkl/hkl-engine-zaxis.c | 13 ++- hkl/hkl-pseudoaxis-common-readonly-private.h | 36 +++++-- hkl/hkl-pseudoaxis-common-readonly.c | 144 +++++++++++++++++++++++++-- tests/bindings/python.py | 2 +- tests/hkl-pseudoaxis-t.c | 5 +- 13 files changed, 232 insertions(+), 66 deletions(-) commit 05d02559b02e35626fd4932302951b587743ce62 Author: Picca Frédéric-Emmanuel Date: Mon May 4 11:31:47 2015 +0200 [ghkl] fix for real the 3d model access gui/hkl-gui-macros.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 31abe8d63738dfc2c4e69b2635932cf8dbccb75a Author: Picca Frédéric-Emmanuel Date: Mon May 4 11:20:41 2015 +0200 [hkl] post release actions Documentation/hkl.org.in | 1 + 1 file changed, 1 insertion(+) commit 926aabb78c5d91447aa6e7c426f8d6888d866103 Author: Picca Frédéric-Emmanuel Date: Mon May 4 10:38:02 2015 +0200 [doc] spell Documentation/hkl.org.in | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) commit c177b5fcc3c8b7b810bb80db507bd338fc8c23e7 Author: Picca Frédéric-Emmanuel Date: Mon May 4 09:56:58 2015 +0200 [hkl] fix a bug in the hkl_engine_parameter_set method also expose this method in the binding for petraIII Documentation/hkl.org.in | 2 ++ hkl/hkl-pseudoaxis.c | 5 +++-- tests/hkl-pseudoaxis-t.c | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) commit b8eeb6221e68706e7fa26b54b6e92d37bfd74ddc Author: Picca Frédéric-Emmanuel Date: Fri Apr 24 14:37:43 2015 +0200 [hkl] engine q refactoring this is just to use the n_x, n_y, n_z parameters in the mode methods. This way the compiler catche the parameter error everywhere. The only brittle part is contained in the mode constructor. hkl/hkl-pseudoaxis-common-q-private.h | 4 ---- hkl/hkl-pseudoaxis-common-q.c | 32 ++++++++++++++++++++++------ hkl/hkl-pseudoaxis-common-readonly-private.h | 10 +++++++++ hkl/hkl-pseudoaxis-common-readonly.c | 9 -------- 4 files changed, 36 insertions(+), 19 deletions(-) commit 2156fd6ea7e1c68b7e9d16eae70a55aec9aa209a Author: picca Date: Thu Apr 23 15:41:05 2015 +0200 [hkl] eulerians engine reworked created an HklModeEulerians to expose in the structure the solutions parameter. Use directly this parameter in the code instead of relying on the parameter order available in the parameters vector. this way we will catch mode errors during the build. hkl/hkl-pseudoaxis-common-eulerians-private.h | 11 ----- hkl/hkl-pseudoaxis-common-eulerians.c | 70 ++++++++++++++++----------- 2 files changed, 42 insertions(+), 39 deletions(-) commit 9f6c34321f1be4fd1780dc57006738b79f9eb830 Author: picca Date: Thu Apr 23 10:01:43 2015 +0200 [hkl] use #define AXIS "axis" Documentation/hkl.org.in | 5 +- hkl/hkl-engine-2c.c | 14 +-- hkl/hkl-engine-e4c.c | 74 +++++++-------- hkl/hkl-engine-e6c.c | 82 ++++++++--------- hkl/hkl-engine-k4c.c | 32 +++---- hkl/hkl-engine-k6c.c | 169 ++++++++++++++++++---------------- hkl/hkl-engine-petra3-p09-eh2.c | 65 +++++++------ hkl/hkl-engine-soleil-sirius-turret.c | 34 ++++--- hkl/hkl-engine-soleil-sixs-med.c | 97 +++++++++---------- hkl/hkl-engine-template.c | 12 +-- hkl/hkl-engine-zaxis.c | 30 +++--- 11 files changed, 321 insertions(+), 293 deletions(-) commit 873b91bd76162c06e5394f8612656acf7b8dd292 Author: picca Date: Wed Apr 22 15:32:19 2015 +0200 [hkl] comments hkl/hkl-engine-e4c.c | 8 ++++---- hkl/hkl-engine-e6c.c | 20 ++++++-------------- hkl/hkl-engine-k6c.c | 10 +++++++--- 3 files changed, 17 insertions(+), 21 deletions(-) commit a0d493ba697cc6d075a482a40109db5844355f23 Author: picca Date: Wed Apr 22 15:19:02 2015 +0200 [hkl] add the incidence pseudo axis engine Documentation/Makefile.am | 2 +- Documentation/hkl.org.in | 9 +- hkl/Makefile.am | 2 + hkl/hkl-engine-e4c.c | 21 ++- hkl/hkl-engine-e6c.c | 17 +++ hkl/hkl-engine-k4c.c | 15 ++ hkl/hkl-engine-k6c.c | 197 ++++++++++++++------------- hkl/hkl-engine-soleil-sirius-turret.c | 16 ++- hkl/hkl-engine-soleil-sixs-med.c | 21 +++ hkl/hkl-engine-template.c | 10 ++ hkl/hkl-engine-zaxis.c | 13 ++ hkl/hkl-pseudoaxis-common-hkl-private.h | 22 +-- hkl/hkl-pseudoaxis-common-q.c | 17 +-- hkl/hkl-pseudoaxis-common-readonly-private.h | 78 +++++++++++ hkl/hkl-pseudoaxis-common-readonly.c | 183 +++++++++++++++++++++++++ hkl/hkl-pseudoaxis-private.h | 14 +- tests/bindings/python.py | 3 +- tests/hkl-pseudoaxis-t.c | 7 +- 18 files changed, 506 insertions(+), 141 deletions(-) commit be0c3a16220d6479603422d75f35dce8510273c7 Author: Picca Frédéric-Emmanuel Date: Fri Apr 3 19:36:38 2015 +0200 [todo] optimisation idea for the hkl_engine_prepare_internal method Documentation/hkl.org.in | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 6bbcfc91989957c8cc585a99fdd640e0067dcfd7 Author: Picca Frédéric-Emmanuel Date: Fri Apr 3 19:32:46 2015 +0200 [buildsystem] rename editdoc and showdoc -> doc-edit and doc-show Use also the sensible-browser instead of hardcoding iceweasel. Documentation/Makefile.am | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit e3b29200acae81876a9beff38ddd027a95b03483 Author: Picca Frédéric-Emmanuel Date: Fri Apr 3 19:22:33 2015 +0200 [doc] document the new tth2 engine Documentation/hkl.org.in | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) commit 735565dc1d60b5c98620a279fc044d416d8cdd88 Author: Picca Frédéric-Emmanuel Date: Fri Apr 3 18:54:15 2015 +0200 [contrib] generic computeHkl method contrib/hkl.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 39fa20e107043f13e56960707eccbe51fe5a8dfa Author: Picca Frédéric-Emmanuel Date: Fri Apr 3 15:06:07 2015 +0200 [hkl] finale step, pseudo axes are shared between engines. hkl/hkl-pseudoaxis-private.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit 81f0582b6f95e2977b1ebc8f6ca693eae4788f8d Author: Picca Frédéric-Emmanuel Date: Fri Apr 3 12:00:41 2015 +0200 [tests] another memory leak tests/hkl-pseudoaxis-t.c | 1 + 1 file changed, 1 insertion(+) commit 030a32b32a821a82d74aa0c94fcd3f8d6912f065 Author: Picca Frédéric-Emmanuel Date: Fri Apr 3 11:52:47 2015 +0200 [hkl] transfer the ownership of the pseudo axes into the HklEngineList hkl/hkl-pseudoaxis-private.h | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) commit c0946ae7eb734f0ec8386bbfc42aa821ec9d2726 Author: Picca Frédéric-Emmanuel Date: Fri Apr 3 11:42:19 2015 +0200 [tests] memory leak tests/hkl-bench-t.c | 1 + 1 file changed, 1 insertion(+) commit fe9d31105d0e0871b78fb7c672e729775b8e2473 Author: Picca Frédéric-Emmanuel Date: Fri Apr 3 10:47:59 2015 +0200 [hkl] no more hkl_engine_list_add method the logic was moved into the hkl_engine_init method. The modification was done with a .cocci file. hkl/hkl-engine-e4c.c | 18 +++++++++--------- hkl/hkl-engine-e6c.c | 10 +++++----- hkl/hkl-engine-k4c.c | 8 ++++---- hkl/hkl-engine-k6c.c | 24 ++++++++++++------------ hkl/hkl-engine-petra3-p09-eh2.c | 2 +- hkl/hkl-engine-soleil-sirius-turret.c | 8 ++++---- hkl/hkl-engine-soleil-sixs-med.c | 24 ++++++++++++------------ hkl/hkl-engine-template.c | 10 +++++----- hkl/hkl-engine-zaxis.c | 8 ++++---- hkl/hkl-pseudoaxis-private.h | 24 ++---------------------- scripts/enginelist.cocci | 6 ++++++ 11 files changed, 64 insertions(+), 78 deletions(-) commit f1faf7aa8f071d76fe1a9022a314ba14aeb58778 Author: Picca Frédéric-Emmanuel Date: Fri Apr 3 10:26:15 2015 +0200 [hkl] set the engines in the hkl_engine_init method. the idea is to remove the hkl_engine_list_add method which is redundant with the HklEngine constructor. the HklEngine is just an internal thing with no existance without an HklEngineList. hkl/hkl-pseudoaxis-common-eulerians.c | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 2 +- hkl/hkl-pseudoaxis-common-psi.c | 2 +- hkl/hkl-pseudoaxis-common-q.c | 6 +++--- hkl/hkl-pseudoaxis-common-tth.c | 2 +- hkl/hkl-pseudoaxis-private.h | 10 ++++------ hkl/hkl-pseudoaxis.c | 5 ----- 7 files changed, 11 insertions(+), 18 deletions(-) commit 312125d4a965072d3d01dde79923f9d575bf67df Author: Picca Frédéric-Emmanuel Date: Thu Apr 2 16:42:44 2015 +0200 [hkl] prepare for common storage of pseudo_axes now the engine_list is provided to the HklEngine constructor. This way it will be possible to share pseudo_axies between multiple HklEngine, by storing the peudo axes into the HklEngineList. the modification is not yet done. But this was the first step. hkl/hkl-engine-e4c.c | 26 ++++++++--------- hkl/hkl-engine-e6c.c | 18 ++++++------ hkl/hkl-engine-k4c.c | 16 +++++------ hkl/hkl-engine-k6c.c | 40 +++++++++++++-------------- hkl/hkl-engine-petra3-p09-eh2.c | 6 ++-- hkl/hkl-engine-soleil-sirius-turret.c | 12 ++++---- hkl/hkl-engine-soleil-sixs-med.c | 36 ++++++++++++------------ hkl/hkl-engine-template.c | 18 ++++++------ hkl/hkl-engine-zaxis.c | 12 ++++---- hkl/hkl-pseudoaxis-common-eulerians-private.h | 4 +-- hkl/hkl-pseudoaxis-common-eulerians.c | 8 +++--- hkl/hkl-pseudoaxis-common-hkl-private.h | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 8 +++--- hkl/hkl-pseudoaxis-common-psi-private.h | 2 +- hkl/hkl-pseudoaxis-common-psi.c | 4 +-- hkl/hkl-pseudoaxis-common-q-private.h | 6 ++-- hkl/hkl-pseudoaxis-common-q.c | 16 +++++------ hkl/hkl-pseudoaxis-common-tth-private.h | 2 +- hkl/hkl-pseudoaxis-common-tth.c | 6 ++-- hkl/hkl-pseudoaxis-private.h | 3 ++ 20 files changed, 124 insertions(+), 121 deletions(-) commit 85a010281dedb18132e58a954628d63f4795b468 Author: Picca Frédéric-Emmanuel Date: Thu Apr 2 13:51:33 2015 +0200 upgrading copyright year from 2014 to 2015 gui/hkl-gui-3d.c | 2 +- gui/hkl-gui-3d.h | 2 +- gui/hkl-gui-macros.h | 2 +- gui/hkl-gui.c | 2 +- gui/hkl-gui.h | 2 +- hkl.h | 2 +- hkl/hkl-axis-private.h | 2 +- hkl/hkl-axis.c | 2 +- hkl/hkl-binding-private.h | 2 +- hkl/hkl-binding.c | 2 +- hkl/hkl-detector-factory.c | 2 +- hkl/hkl-detector-private.h | 2 +- hkl/hkl-detector.c | 2 +- hkl/hkl-engine-2c.c | 2 +- hkl/hkl-engine-e4c.c | 2 +- hkl/hkl-engine-e6c.c | 2 +- hkl/hkl-engine-k4c.c | 2 +- hkl/hkl-engine-k6c.c | 2 +- hkl/hkl-engine-petra3-p09-eh2.c | 2 +- hkl/hkl-engine-soleil-sirius-turret.c | 2 +- hkl/hkl-engine-soleil-sixs-med.c | 2 +- hkl/hkl-engine-template.c | 2 +- hkl/hkl-engine-zaxis.c | 2 +- hkl/hkl-factory-private.h | 2 +- hkl/hkl-factory.c | 2 +- hkl/hkl-geometry-private.h | 2 +- hkl/hkl-geometry.c | 2 +- hkl/hkl-interval-private.h | 2 +- hkl/hkl-interval.c | 2 +- hkl/hkl-lattice-private.h | 2 +- hkl/hkl-lattice.c | 2 +- hkl/hkl-macros-private.h | 2 +- hkl/hkl-macros.c | 2 +- hkl/hkl-matrix-private.h | 2 +- hkl/hkl-matrix.c | 2 +- hkl/hkl-parameter-private.h | 2 +- hkl/hkl-parameter.c | 2 +- hkl/hkl-pseudoaxis-auto-private.h | 2 +- hkl/hkl-pseudoaxis-auto.c | 2 +- hkl/hkl-pseudoaxis-common-eulerians-private.h | 2 +- hkl/hkl-pseudoaxis-common-eulerians.c | 2 +- hkl/hkl-pseudoaxis-common-hkl-private.h | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 2 +- hkl/hkl-pseudoaxis-common-psi-private.h | 2 +- hkl/hkl-pseudoaxis-common-psi.c | 2 +- hkl/hkl-pseudoaxis-common-q-private.h | 2 +- hkl/hkl-pseudoaxis-common-q.c | 2 +- hkl/hkl-pseudoaxis-common-tth-private.h | 2 +- hkl/hkl-pseudoaxis-common-tth.c | 2 +- hkl/hkl-pseudoaxis-private.h | 2 +- hkl/hkl-pseudoaxis.c | 2 +- hkl/hkl-quaternion-private.h | 2 +- hkl/hkl-quaternion.c | 2 +- hkl/hkl-sample-private.h | 2 +- hkl/hkl-sample.c | 2 +- hkl/hkl-source-private.h | 2 +- hkl/hkl-source.c | 2 +- hkl/hkl-types.c | 2 +- hkl/hkl-types.h | 2 +- hkl/hkl-unit-private.h | 2 +- hkl/hkl-unit.c | 2 +- hkl/hkl-vector-private.h | 2 +- hkl/hkl-vector.c | 2 +- hkl3d/hkl3d.h | 2 +- tests/hkl-axis-t.c | 2 +- tests/hkl-bench-t.c | 2 +- tests/hkl-detector-t.c | 2 +- tests/hkl-geometry-t.c | 2 +- tests/hkl-interval-t.c | 2 +- tests/hkl-lattice-t.c | 2 +- tests/hkl-matrix-t.c | 2 +- tests/hkl-parameter-t.c | 2 +- tests/hkl-pseudoaxis-e4ch-t.c | 2 +- tests/hkl-pseudoaxis-e4cv-t.c | 2 +- tests/hkl-pseudoaxis-e6c-t.c | 2 +- tests/hkl-pseudoaxis-k4cv-t.c | 2 +- tests/hkl-pseudoaxis-k6c-t.c | 2 +- tests/hkl-pseudoaxis-t.c | 2 +- tests/hkl-pseudoaxis-zaxis-t.c | 2 +- tests/hkl-quaternion-t.c | 2 +- tests/hkl-sample-t.c | 2 +- tests/hkl-source-t.c | 2 +- tests/hkl-unit-t.c | 2 +- tests/hkl-vector-t.c | 2 +- tests/hkl3d-test-t.c | 2 +- tests/tap/hkl-tap.h | 2 +- 86 files changed, 86 insertions(+), 86 deletions(-) commit cc6bf9537202a2d816039ae519797b5f909056b3 Author: Picca Frédéric-Emmanuel Date: Thu Apr 2 13:49:22 2015 +0200 [hkl] remove the HklPseudoAxis struct HklParameter is enough. hkl/hkl-pseudoaxis-common-eulerians.c | 29 +++++++--------- hkl/hkl-pseudoaxis-common-hkl.c | 35 +++++++++---------- hkl/hkl-pseudoaxis-common-psi.c | 11 +++--- hkl/hkl-pseudoaxis-common-q.c | 50 +++++++++++++-------------- hkl/hkl-pseudoaxis-common-tth.c | 20 +++++------ hkl/hkl-pseudoaxis-private.h | 65 ++--------------------------------- 6 files changed, 68 insertions(+), 142 deletions(-) commit 331d3174a48f1319131bf2c4ac5617d174403152 Author: Picca Frédéric-Emmanuel Date: Thu Apr 2 13:47:53 2015 +0200 add the tth2 engine Documentation/hkl.org.in | 6 +- hkl/Makefile.am | 4 +- hkl/hkl-engine-e6c.c | 4 +- hkl/hkl-engine-k6c.c | 5 +- hkl/hkl-engine-soleil-sirius-turret.c | 4 +- hkl/hkl-engine-soleil-sixs-med.c | 6 +- hkl/hkl-engine-template.c | 4 +- hkl/hkl-engine-zaxis.c | 4 +- hkl/hkl-pseudoaxis-common-tth-private.h | 35 +++++++ hkl/hkl-pseudoaxis-common-tth.c | 175 ++++++++++++++++++++++++++++++++ 10 files changed, 239 insertions(+), 8 deletions(-) commit 333621d583f778d33d6f55deb548f5d968554a27 Author: Picca Frédéric-Emmanuel Date: Tue Mar 24 17:01:04 2015 +0100 [hkl] expose hkl_sample_reflection_flag/geometry_get/set in the bindings Documentation/hkl.org.in | 15 +++++++++++++++ hkl/hkl-sample.c | 28 ++++++++++++++++------------ tests/bindings/python.py | 8 ++++++++ 3 files changed, 39 insertions(+), 12 deletions(-) commit 25a3bdb746bc486c3e88ef2a2f91ddb67e4d2b32 Author: Picca Frédéric-Emmanuel Date: Tue Mar 24 16:29:20 2015 +0100 [hkl] expose hkl_lattice_x_get/set in the bindings Documentation/hkl.org.in | 3 +++ hkl/hkl-lattice.c | 24 ++++++++++++------------ tests/bindings/python.py | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 12 deletions(-) commit b0457c7035737aeca188c31c2ce28931cd1c666b Author: Picca Frédéric-Emmanuel Date: Tue Mar 24 14:39:23 2015 +0100 [hkl] add the hkl_engine_dependencies_get method Documentation/Makefile.am | 4 +++- Documentation/hkl.org.in | 24 ++++++++++++++++--- hkl.h | 10 ++++++++ hkl/hkl-pseudoaxis-common-eulerians.c | 5 ++-- hkl/hkl-pseudoaxis-common-hkl.c | 5 ++-- hkl/hkl-pseudoaxis-common-psi.c | 5 ++-- hkl/hkl-pseudoaxis-common-q.c | 15 +++++++----- hkl/hkl-pseudoaxis-private.h | 4 ++++ hkl/hkl-pseudoaxis.c | 15 ++++++++++++ tests/bindings/python.py | 5 ++++ tests/hkl-pseudoaxis-t.c | 44 +++++++++++++++++++++++++++++++---- 11 files changed, 116 insertions(+), 20 deletions(-) commit b8808b8745f54de2ab524016350a1dc55dbbdbb4 Author: Picca Frédéric-Emmanuel Date: Tue Mar 10 20:34:43 2015 +0100 [contrib] add a commad line now it is possible to compute any hkl coordinates with hkl ca h k l contrib/hkl.hs | 58 +++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 13 deletions(-) commit 9c2539c8dcb83ce5feada415d70b473982759bd1 Author: Picca Frédéric-Emmanuel Date: Tue Mar 10 17:01:45 2015 +0100 [hkl] add the hkl_lattice_volume_get update also the hkl_lattice_x_set to compute the volume. Documentation/hkl.org.in | 26 ++++++++++++++++-- hkl.h | 2 ++ hkl/hkl-lattice-private.h | 1 + hkl/hkl-lattice.c | 69 +++++++++++++++++++++++++++++++++-------------- tests/bindings/python.py | 3 +++ tests/hkl-lattice-t.c | 27 +++++++++++++++++-- 6 files changed, 104 insertions(+), 24 deletions(-) commit 0d6317eaad135a726cd30005bf64a8182349f06f Author: Picca Frédéric-Emmanuel Date: Mon Mar 9 09:07:32 2015 +0100 [hkl] fix the 3d model access when installed gui/hkl-gui-macros.h | 5 ++++- gui/hkl-gui.c | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-) commit 4672c5bae937371ce3d6088a64571ec6d8c38b1b Author: Picca Frédéric-Emmanuel Date: Thu Mar 5 10:03:38 2015 +0100 [hkl] expose the hkl_engine_parameters_values_get/set hkl/hkl-binding-private.h | 3 +++ hkl/hkl-binding.c | 31 +++++++++++++++++++++++++++++++ hkl/hkl-pseudoaxis.c | 2 +- tests/bindings/python.py | 13 +++++++++++++ 4 files changed, 48 insertions(+), 1 deletion(-) commit 0f7a9a6cdba4b2717d61a36c38881eb5fac97652 Author: Picca Frédéric-Emmanuel Date: Tue Mar 3 13:43:16 2015 +0100 [hkl] typo hkl/hkl-pseudoaxis.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit cb767015602f504d67f8c832b6eab9b6120d27c4 Author: Picca Frédéric-Emmanuel Date: Sun Feb 15 20:38:29 2015 +0100 [contrib] optimisation contrib/hkl.hs | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) commit 9c012f1c54fa1926576eef98904b24153bf61652 Author: Picca Frédéric-Emmanuel Date: Sun Feb 15 16:09:33 2015 +0100 [contrib] use (*~~) and (/~~) instead of from/toAngles contrib/hkl.hs | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) commit cf55537fc7bdf259ceceb48e317f65a4791c747b Author: Picca Frédéric-Emmanuel Date: Sun Feb 15 16:02:24 2015 +0100 [contrib] start to implement a mode contrib/hkl.hs | 60 +++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 17 deletions(-) commit 6e799b92f1f547ec95271053cd95b477560e9f2e Author: Picca Frédéric-Emmanuel Date: Sun Feb 15 14:27:08 2015 +0100 [contrib] use splitAt instead of multiple type conversion contrib/hkl.hs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit fa56fb814a96b300b353e38a81592304f8837a6e Author: Picca Frédéric-Emmanuel Date: Sun Feb 15 12:20:21 2015 +0100 [contrib] factorize the [Double] -> [Angle Double] transformation contrib/hkl.hs | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) commit 07ff156a7cd37c84845448cacf983e7e9a924325 Author: Picca Frédéric-Emmanuel Date: Sun Feb 15 11:21:16 2015 +0100 [contrib] first implementation of the computAngles contrib/hkl.hs | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) commit c3eddeb5a09c3ddf85cff3f96d7c33458b5261e4 Author: Picca Frédéric-Emmanuel Date: Sat Feb 14 22:45:18 2015 +0100 [contrib] a [Transformation] is also a Transformation contrib/hkl.hs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) commit bd5bdea1ac74e74533f915aa56ae4c0e91fbba23 Author: Picca Frédéric-Emmanuel Date: Sat Feb 14 22:21:40 2015 +0100 [contrib] add a computeHkl method and a Diffractometer data type contrib/hkl.hs | 104 +++++++++++++++++++++++++++------------------------------ 1 file changed, 49 insertions(+), 55 deletions(-) commit 8b475de993c7c57624d5250ebad8fe6e353ba981 Author: Picca Frédéric-Emmanuel Date: Sat Feb 14 21:35:21 2015 +0100 [contrib] compute hkl from the angles contrib/hkl.hs | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) commit 46842a74e2348a2d1513157d3c42096b3b62390b Author: Picca Frédéric-Emmanuel Date: Wed Feb 11 09:54:09 2015 +0100 [gui] fix a segfault forgot a NULL termination in g_build_filename gui/hkl-gui-macros.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b1db84c1e4ade71ea77b3f4ff3baf9c01efe612f Author: Picca Frédéric-Emmanuel Date: Sun Feb 1 20:59:01 2015 +0100 [contrib] use directly zipWith instead of a dedicated function contrib/hkl.hs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) commit 28c09e22da66da2b5127857e4a9e66e60b823a20 Author: Picca Frédéric-Emmanuel Date: Sun Feb 1 18:55:10 2015 +0100 [contrib] create an UB Transformation contrib/hkl.hs | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) commit 1dc4292033f4dcc1c9ebbf235b7b2ac80169781d Author: Picca Frédéric-Emmanuel Date: Sun Feb 1 17:02:24 2015 +0100 [contrib] move to amodel where all transfortion are vector-> vector contrib/hkl.hs | 46 ++++++++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 24 deletions(-) commit 9caed653799351d27ffb3d782858e431a6a5d353 Author: Picca Frédéric-Emmanuel Date: Sun Feb 1 10:11:17 2015 +0100 [contrib] add units in the haskell code contrib/hkl.hs | 121 ++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 72 insertions(+), 49 deletions(-) commit e046b25683e11cf0f6838f1d9b6464b1b78ae324 Author: Picca Frédéric-Emmanuel Date: Fri Jan 30 16:20:34 2015 +0100 [gui] for now no mime-type gui/ghkl.desktop | 1 - 1 file changed, 1 deletion(-) commit 6da389880f17c0413b29f0912da0fca2849363c7 Author: Picca Frédéric-Emmanuel Date: Fri Jan 30 16:05:48 2015 +0100 [tests] fix a bug triggered by stack protection tests/hkl-pseudoaxis-t.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit d2d8b3c78cb8356ba59da9f1f5d6a4b841915f69 Author: Picca Frédéric-Emmanuel Date: Fri Jan 30 14:32:44 2015 +0100 [buildsystem] force link with g++ when libhkl3d is involved. gui/Makefile.am | 4 ++++ tests/Makefile.am | 3 +++ 2 files changed, 7 insertions(+) commit 75ff100c4a7997f667c57f88914917a419157d34 Author: Picca Frédéric-Emmanuel Date: Fri Jan 30 13:55:54 2015 +0100 [hkl3d] do not install the libhkl3d library for now hkl3d/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit af635b1ebdbb04172579035e4974ee499d14bb89 Author: Picca Frédéric-Emmanuel Date: Fri Jan 30 12:15:22 2015 +0100 [tests] fix the tests when no X is available. Documentation/sphinx/source/pyplots/trajectory.py | 2 ++ Documentation/sphinx/source/pyplots/trajectory_full.py | 2 ++ Documentation/sphinx/source/pyplots/trajectory_simple.py | 2 ++ 3 files changed, 6 insertions(+) commit 2b2531c8d01eea14abb3e3912731fc927eba5128 Author: Picca Frédéric-Emmanuel Date: Sun Jan 25 20:16:07 2015 +0100 [contrib] create a transformation type contrib/hkl.hs | 52 ++++++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 24 deletions(-) commit b0e5fc6fa9efa1eb774e0ef8a5b02e9afed8358a Author: Picca Frédéric-Emmanuel Date: Sun Jan 25 17:31:43 2015 +0100 [contrib] create a Lattice type with all the known type contrib/hkl.hs | 53 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 20 deletions(-) commit 8c7fdf080422b70c58bd7f45fbfc5d1da2664cd1 Author: Picca Frédéric-Emmanuel Date: Sun Jan 25 11:15:40 2015 +0100 [contrib] work a bit on the haskell implementation this long term project will help to produce a better design for the libhkl contrib/hkl.hs | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ contrib/hkl.lhs | 64 ---------------------------------------- 2 files changed, 90 insertions(+), 64 deletions(-) commit bf268fd5c24ea3e753bf831a21a8c6df038c7f2d Author: Picca Frédéric-Emmanuel Date: Sat Jan 24 11:24:03 2015 +0100 [doc] style Documentation/hkl.org.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 73c6c23c0e21411090f7f86a1e03991368821624 Author: Picca Frédéric-Emmanuel Date: Sat Jan 24 11:20:02 2015 +0100 [doc] add Howto's to add a diffractometer and work on the documentation Documentation/hkl.org.in | 51 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 15 deletions(-) commit bb5f2aa6bf74cf9941dd5cd88a31f5b67b88276d Author: Picca Frédéric-Emmanuel Date: Sat Jan 24 09:58:57 2015 +0100 [doc] rework the gui todos and add the tooltips. Documentation/hkl.org.in | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) commit 148575f020e5555d90f64c3c52ccac9c215bb133 Author: Picca Frédéric-Emmanuel Date: Sat Jan 24 09:07:53 2015 +0100 [hkl] use M_SQRT1_2 instead of non const expression (clang error) tests/hkl-axis-t.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit c945bc432db86904481220c821c3d21b90cd83d0 Author: picca Date: Fri Jan 23 16:34:41 2015 +0100 [todo] add more todo about the petraIII problems Documentation/hkl.org.in | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) commit 6e284614ee0b896529ab9a213ee4408fa56d707f Author: picca Date: Fri Jan 23 16:33:56 2015 +0100 [doc] generate the pseudo axis and parameter description Documentation/Makefile.am | 10 +++++++- Documentation/default.el | 4 ++-- Documentation/hkl.org.in | 41 ++++++++++++++++++++++----------- hkl.h | 6 ++--- hkl/hkl-binding-private.h | 2 +- hkl/hkl-binding.c | 2 +- hkl/hkl-pseudoaxis-common-hkl-private.h | 8 +++---- hkl/hkl-pseudoaxis-common-hkl.c | 2 +- hkl/hkl-pseudoaxis-common-q.c | 8 +++---- hkl/hkl-pseudoaxis.c | 4 ++-- tests/bindings/python.py | 12 ++++++---- 11 files changed, 62 insertions(+), 37 deletions(-) commit 241aafccddf9b728d18ba4e5994e972c1fbf3f3c Author: picca Date: Fri Jan 23 15:05:44 2015 +0100 [tests] add better binding check for all lists tests/bindings/python.py | 3 +++ 1 file changed, 3 insertions(+) commit ef00049a9c9cc9a353940ccc810cdee04cb8698a Author: picca Date: Fri Jan 23 13:39:25 2015 +0100 [binding] expose hkl_engine_parameter_get so it is possible to use this to document the engine mode parameters hkl/hkl-pseudoaxis.c | 2 +- tests/bindings/python.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) commit 23b1c1aac8e77778c8a65176df91ad42d98d441a Author: picca Date: Fri Jan 23 11:51:47 2015 +0100 [hkl] factorize the constant_(omega|chi|phi)_parameters hkl/hkl-engine-k4c.c | 18 +++++-------- hkl/hkl-engine-k6c.c | 48 +++++++++++---------------------- hkl/hkl-pseudoaxis-common-hkl-private.h | 48 ++++++++++++++++++++------------- 3 files changed, 52 insertions(+), 62 deletions(-) commit 8c2d67518eb8c75dcee8e1370f3cd6afd39825b8 Author: picca Date: Fri Jan 23 11:46:42 2015 +0100 [hkl] add the constant_incidence parameters description hkl/hkl-engine-k6c.c | 20 ++++---------------- hkl/hkl-pseudoaxis-common-hkl-private.h | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 16 deletions(-) commit 064a793b02f2c8b49e4ae739e1742f16a1f9dcc7 Author: picca Date: Fri Jan 23 10:35:22 2015 +0100 [hkl] factorize also the psi_constant_vertical parameters for e6c hkl/hkl-engine-e6c.c | 7 +---- hkl/hkl-pseudoaxis-common-hkl-private.h | 49 +++++++++++++++++---------------- 2 files changed, 26 insertions(+), 30 deletions(-) commit 17c7a98858f2ad566f46294c926bf3c56eeb4eab Author: picca Date: Fri Jan 23 10:06:30 2015 +0100 [hkl] factorize the psi_parameters for the psi engine. during thie refactoring I renamed the parameters so they match the psi_constant_xxx mode of the hkl engine. It will be easier to understand the these parameters are equivalent. hkl/hkl-engine-e4c.c | 8 ++------ hkl/hkl-engine-e6c.c | 8 ++------ hkl/hkl-engine-k4c.c | 8 ++------ hkl/hkl-engine-k6c.c | 16 ++++------------ hkl/hkl-engine-template.c | 8 ++------ hkl/hkl-pseudoaxis-common-psi-private.h | 18 ++++++++++++++++++ 6 files changed, 30 insertions(+), 36 deletions(-) commit 0dde5c60a89dcd5c235ba2a9153dfe937169bc5d Author: picca Date: Fri Jan 23 09:45:25 2015 +0100 [doc] fix the distcheck target Documentation/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit f3aeac9a287842ae95e4768db398c6fd172455ea Author: picca Date: Fri Jan 23 09:03:50 2015 +0100 [todo] more information about the computing problem of PetraIII Documentation/hkl.org.in | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) commit 2fe29270d6ba59cba2ed2bcaf07c3a35c6953ab2 Author: picca Date: Fri Jan 23 09:03:25 2015 +0100 [hkl] factorize the psi_constant_parameters hkl/hkl-engine-e4c.c | 10 ++-------- hkl/hkl-engine-e6c.c | 9 ++------- hkl/hkl-engine-k4c.c | 9 ++------- hkl/hkl-engine-k6c.c | 18 ++++-------------- hkl/hkl-pseudoaxis-common-hkl-private.h | 22 ++++++++++++++++++++++ 5 files changed, 32 insertions(+), 36 deletions(-) commit 8970375aaae09d71dc0df8648169ef3b9df3e35b Author: picca Date: Thu Jan 22 14:22:23 2015 +0100 [hkl] set the eulerian solutions parameter description hkl/hkl-pseudoaxis-common-eulerians.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 8480f586139f18c74304acb5c298bd5a154064c4 Author: picca Date: Thu Jan 22 14:21:34 2015 +0100 [hkl] factorize the double_diffraction_parameters (with description) hkl/hkl-engine-e4c.c | 9 ++------- hkl/hkl-engine-e6c.c | 17 ++++------------- hkl/hkl-engine-k4c.c | 8 ++------ hkl/hkl-engine-k6c.c | 32 ++++++++------------------------ hkl/hkl-pseudoaxis-common-hkl-private.h | 19 +++++++++++++++++++ 5 files changed, 35 insertions(+), 50 deletions(-) commit 14ea2092422f8d109e77556010c0e4aec609a9c5 Author: picca Date: Thu Jan 22 14:20:04 2015 +0100 [hkl] set the description of all PseudoAxis hkl/hkl-pseudoaxis-common-eulerians.c | 12 +++++++++--- hkl/hkl-pseudoaxis-common-hkl.c | 15 +++++++++++--- hkl/hkl-pseudoaxis-common-psi.c | 4 +++- hkl/hkl-pseudoaxis-common-q.c | 37 ++++++++++++++++++++++++++++------- 4 files changed, 54 insertions(+), 14 deletions(-) commit cd4dca754a9b245763e3380c151fd39d6ddee028 Author: picca Date: Thu Jan 22 13:00:41 2015 +0100 [hkl] add the hkl_parameter_description_get method hkl.h | 2 ++ hkl/hkl-lattice.c | 21 +++++++++++++++------ hkl/hkl-parameter-private.h | 5 +++-- hkl/hkl-parameter.c | 19 +++++++++++++++++-- hkl/hkl-sample.c | 9 ++++++--- tests/hkl-parameter-t.c | 36 +++++++++++++++++++----------------- 6 files changed, 62 insertions(+), 30 deletions(-) commit 83ff394e628177f760b2c5c6e65aad80a5dfdfef Author: picca Date: Thu Jan 22 10:20:31 2015 +0100 [todo] add new informations for the petraIII problem. Documentation/hkl.org.in | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) commit 8701faf27699cdba0c227bc041c82797ce0b5b68 Author: Ken L Date: Thu Jan 22 11:25:02 2015 -0500 axes_(names|values) -> axis_(names|values) Documentation/sphinx/source/bindings/python.py | 18 +++++----- Documentation/sphinx/source/pyplots/trajectory.py | 8 ++--- .../sphinx/source/pyplots/trajectory_full.py | 8 ++--- .../sphinx/source/pyplots/trajectory_simple.py | 14 ++++---- gui/hkl-gui-pseudoaxes.c | 4 +-- gui/hkl-gui.c | 22 ++++++------- hkl.h | 18 +++++----- hkl/hkl-binding-private.h | 10 +++--- hkl/hkl-binding.c | 38 +++++++++++----------- hkl/hkl-geometry.c | 12 +++---- hkl/hkl-pseudoaxis-common-hkl.c | 2 +- hkl/hkl-pseudoaxis-private.h | 14 ++++---- hkl/hkl-pseudoaxis.c | 28 ++++++++-------- tests/bindings/python.py | 24 +++++++------- tests/bindings/trajectory.py | 12 +++---- tests/hkl-bench-t.c | 8 ++--- tests/hkl-geometry-t.c | 16 ++++----- tests/hkl-pseudoaxis-e4ch-t.c | 8 ++--- tests/hkl-pseudoaxis-e4cv-t.c | 8 ++--- tests/hkl-pseudoaxis-e6c-t.c | 16 ++++----- tests/hkl-pseudoaxis-k4cv-t.c | 4 +-- tests/hkl-pseudoaxis-k6c-t.c | 4 +-- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 8 ++--- tests/hkl-pseudoaxis-t.c | 34 +++++++++---------- tests/hkl-pseudoaxis-zaxis-t.c | 2 +- tests/tap/hkl-tap.c | 4 +-- 26 files changed, 172 insertions(+), 172 deletions(-) commit 91042e9be687fb5343bb9b9ec55ed73633eb8f5b Author: Ken L Date: Thu Jan 22 10:44:53 2015 -0500 mesured -> measured hkl.h | 2 +- hkl/hkl-sample.c | 8 ++++---- tests/bindings/python.py | 4 ++-- tests/hkl-sample-t.c | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) commit 0d20c51641b9f9c445abf68cc603ae5efeaf6dc9 Author: Picca Frédéric-Emmanuel Date: Wed Jan 21 16:39:52 2015 +0100 [todo] problem with the petraIII diffractometer. Documentation/hkl.org.in | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) commit 5d8b4a1811d2cdf240a89a84b8782a31ab04a7f3 Author: Picca Frédéric-Emmanuel Date: Wed Jan 21 10:11:49 2015 +0100 add --disable-hkl-doc option to no build the documentation Documentation/hkl.org.in | 42 +++++++++++++++++++++++------------------- Makefile.am | 5 ++++- configure.ac | 24 +++++++++++------------- 3 files changed, 38 insertions(+), 33 deletions(-) commit 1185bfae4cd2e407177fd6e13de6822420996286 Author: Picca Frédéric-Emmanuel Date: Wed Jan 21 08:52:11 2015 +0100 expose the hkl_geometry_wavelength_get into the binding thanks Ken Lauer, for the issue. hkl/hkl-geometry.c | 2 +- tests/bindings/python.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) commit 97d290ff3ba4d8325b21b3ab5e3f39869abe914d Author: Picca Frédéric-Emmanuel Date: Sat Jan 17 20:03:51 2015 +0100 [doc] use org-info.js for now org-info is not embeded. Documentation/hkl.org.in | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) commit 6a2025a251e517e0afe1c97985e10ee4baa0d84d Author: Picca Frédéric-Emmanuel Date: Sat Jan 17 20:02:56 2015 +0100 [doc] fix the Makefile rules Documentation/Makefile.am | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit be51577505bafb6f5807b808bdb1319fef8fe2e1 Author: Picca Frédéric-Emmanuel Date: Sat Jan 17 12:01:54 2015 +0100 [doc] use mathjax when exporting the org documentation Documentation/Makefile.am | 14 ++-- Documentation/hkl.org.in | 2 +- org-doc.make | 176 ---------------------------------------------- 3 files changed, 7 insertions(+), 185 deletions(-) commit 05a5669a462ab24373c4783760c13f0e932c7815 Author: picca Date: Fri Jan 16 16:38:31 2015 +0100 [todo] add unit test for hkl_sample_affine. Documentation/hkl.org.in | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) commit 625eac4ec27cf6103fa0537b9902a4ff7c156fe6 Author: picca Date: Fri Jan 16 09:37:02 2015 +0100 [doc] set a correct mailto link for the bug reporting. Documentation/hkl.org.in | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) commit b310fe6b9ccacd185aab96434054cce34976d028 Author: picca Date: Fri Jan 16 09:36:23 2015 +0100 [doc] typo Documentation/hkl.org.in | 1 - 1 file changed, 1 deletion(-) commit c13509bcfaf7aade27cf2153c6cca29f882fee1f Author: picca Date: Fri Jan 16 09:36:11 2015 +0100 [doc] better TODO for the documentation Documentation/hkl.org.in | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) commit c39817295a5a3d87b2873a564e1c35da81b58fcb Author: picca Date: Thu Jan 15 16:49:09 2015 +0100 [doc] reword Documentation/hkl.org.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 04f184e83bea7961444880df867c7401cab4c0e6 Author: picca Date: Thu Jan 15 16:44:42 2015 +0100 TODO HklParameter description. Documentation/hkl.org.in | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit fa8b02bce12dca123542e4ec8ccae64a6024d9dc Author: picca Date: Thu Jan 15 16:42:47 2015 +0100 use the hkl_parameter_quaternion_get in the hkl3d library this way no need to access the private HklAxis part from hkl3d. hkl3d/hkl3d.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) commit 6bb26914a92a6a5c5320bbce7ae7f551cd3ea925 Author: picca Date: Thu Jan 15 16:34:35 2015 +0100 add hkl_parameter_axis_v_get and hkl_parameter_quaternion_get Documentation/hkl.org.in | 28 +++-- hkl.h | 28 +++++ hkl/hkl-axis.c | 14 ++- hkl/hkl-matrix-private.h | 1 - hkl/hkl-parameter-private.h | 39 ++++-- hkl/hkl-parameter.c | 22 ++++ hkl/hkl-pseudoaxis-common-hkl-private.h | 13 -- hkl/hkl-quaternion-private.h | 6 - hkl/hkl-types.c | 1 + hkl/hkl-vector-private.h | 17 --- tests/bindings/python.py | 26 +++- tests/hkl-axis-t.c | 206 ++++++++++++++++---------------- tests/hkl-parameter-t.c | 18 ++- tests/tap/hkl-tap.c | 17 +++ tests/tap/hkl-tap.h | 3 + 15 files changed, 271 insertions(+), 168 deletions(-) commit c03066355fc358609e3167ca22654d1a1834c57b Author: picca Date: Wed Jan 14 16:02:56 2015 +0100 fix the disctcheck target for the org-mode documentation Documentation/Makefile.am | 16 +++-- org-doc.make | 176 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 187 insertions(+), 5 deletions(-) commit f1fe69052cc992f024945a929d2d602bdf55f8d8 Author: picca Date: Tue Jan 13 16:09:57 2015 +0100 add the default.el file to export the hkl.org. Documentation/default.el | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) commit 4399db59a51f3ace8d5295b39202dd84ed85382b Author: picca Date: Tue Jan 13 16:08:44 2015 +0100 move the TODO file into hkl.org.in Documentation/hkl.org.in | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ TODO | 71 ------------------------------------------------ 2 files changed, 71 insertions(+), 71 deletions(-) commit e5fcc6a1dab01b07b75f7ae6647d56b182265d1f Author: picca Date: Tue Jan 13 15:55:43 2015 +0100 generate the diffractometer description using the python binding we introspect the library to generate the Diffractometers section Documentation/Makefile.am | 4 +- Documentation/hkl.org.in | 1258 ++------------------------------------------- 2 files changed, 50 insertions(+), 1212 deletions(-) commit 18061c91e103522ec4ef9a7cb8ddf2f489d2fbbd Author: picca Date: Tue Jan 13 11:49:57 2015 +0100 fix all the references Documentation/hkl.org.in | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) commit e948755950f2e2ca74a47652f4b80458546f3bc2 Author: picca Date: Tue Jan 13 11:25:11 2015 +0100 indent hkl.org.in Documentation/hkl.org.in | 1439 +++++++++++++++++++--------------------------- 1 file changed, 581 insertions(+), 858 deletions(-) commit 02f76c5a4588b1be3f82ff198d90efb27b1e6a32 Author: picca Date: Tue Jan 13 11:16:10 2015 +0100 fix all the equations in the org-mode file Documentation/hkl.org.in | 331 +++++++++++++++++++++++++++++++---------------- 1 file changed, 218 insertions(+), 113 deletions(-) commit ed198b9619b9cd6d5cb036c1599e6630c1205fa9 Author: picca Date: Mon Jan 12 16:01:39 2015 +0100 use babel for all the shell scripts Documentation/hkl.org.in | 90 ++++++++++++++++++++++++------------------------ 1 file changed, 45 insertions(+), 45 deletions(-) commit 8b755cf9eea9b3ab8a2cce9197af266f01dc5524 Author: picca Date: Mon Jan 12 15:57:25 2015 +0100 remove the old lyx code now part of hkl.org Documentation/hkl.lyx | 3402 ------------------------------------------------- 1 file changed, 3402 deletions(-) commit ba7eba6af3d37a890dcd79c97d6472c2f3f53b50 Author: picca Date: Mon Jan 12 15:56:59 2015 +0100 put the hkl.org file at the right place and fix the figure inclusion Documentation/Makefile.am | 6 +-- Documentation/hkl.org.in | 113 +++++++++++++++++++--------------------------- configure.ac | 6 +++ 3 files changed, 55 insertions(+), 70 deletions(-) commit 7733a326c7861e889403f0a50b40b6dc659074ee Author: picca Date: Mon Jan 12 11:11:11 2015 +0100 add the hkl.org file with all the documentation Documentation/Makefile.am | 5 + Documentation/hkl.org.in | 2138 +++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 1 + 3 files changed, 2144 insertions(+) commit 159e2f3f8aa475217c044afb0ffbc3bc73ca2726 Author: Picca Frédéric-Emmanuel Date: Mon Jan 12 07:24:14 2015 +0100 update the NEWS and TODO files NEWS | 4 +++- TODO | 71 +++++++++++++++++++++++++++++++++++++++++++++----------------------- 2 files changed, 50 insertions(+), 25 deletions(-) commit 9fcb33894c5591eca8edd40bc62dd37d9a8cf3c7 Author: picca Date: Fri Jan 9 15:28:25 2015 +0100 typo hkl/hkl-pseudoaxis.c | 3 --- 1 file changed, 3 deletions(-) commit cf635233a0a589f72b1b73379e784d9e4dbc1b64 Author: picca Date: Fri Jan 9 14:47:19 2015 +0100 fix a segfault in the gui gui/hkl-gui.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) commit 70ff43eccd1ce407254c0b2ed921b7bde167727e Author: picca Date: Fri Jan 9 14:31:15 2015 +0100 add an --enable-logging to activate the logging in the hkl library For now this is optional to avoid the perfomance impact. I do not have numbers for now but I prefer to make this optional in a first time. I am not really happy with the implementation of the logging. Only one method is instrumented for now hkl_engine_pseudo_axes_values_set configure.ac | 49 +++++++++++++++++++++++++++++++++---------------- hkl/hkl-pseudoaxis.c | 40 +++++++++++++++++++++++----------------- 2 files changed, 56 insertions(+), 33 deletions(-) commit f09b45ea8bc0733ad37ec3f9ee04ee07096594c9 Author: picca Date: Wed Jan 7 15:20:52 2015 +0100 remove a bunch of warning during the compilation hkl.h | 4 ++-- hkl/hkl-binding.c | 3 +-- hkl/hkl-factory.c | 4 ++-- hkl/hkl-geometry.c | 3 --- hkl/hkl-pseudoaxis.c | 1 - hkl/hkl-types.c | 1 + hkl/hkl-types.h | 37 ++++++++++++++++++++----------------- 7 files changed, 26 insertions(+), 27 deletions(-) commit b1ac77679017c16f00f886ecc9a02abb6a263825 Author: picca Date: Wed Jan 7 11:57:20 2015 +0100 reworks the NEWS file NEWS | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) commit 184629e2b99612c7b99fd6a40417a0612048b2cd Author: picca Date: Wed Jan 7 11:08:32 2015 +0100 fix a segmentation fault with the HklSampleReflection in the binding. - test deletion of objects in the python binding. - rewrite the hkl-type.c with a macro to be a lot more maintainable. - use a fake ref and unref method for the HklSampleReflection type. - fix all the binding test of the documentation Documentation/sphinx/Makefile.am | 6 +- Documentation/sphinx/source/bindings/python.py | 2 +- Documentation/sphinx/source/pyplots/trajectory.py | 2 +- .../sphinx/source/pyplots/trajectory_full.py | 2 +- .../sphinx/source/pyplots/trajectory_simple.py | 5 +- hkl/hkl-binding-private.h | 2 +- hkl/hkl-binding.c | 8 +- hkl/hkl-sample.c | 2 +- hkl/hkl-types.c | 243 +++------------------ hkl/hkl-types.h | 9 - tests/bindings/python.py | 18 +- 11 files changed, 60 insertions(+), 239 deletions(-) commit 2baed83926a1c9520f9c62bea73b614c497fab57 Author: picca Date: Tue Jan 6 09:36:31 2015 +0100 fix the reference manual Documentation/api/hkl-docs.sgml | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) commit 4225df2bd442d695dd9fe07caf778eb2cd6b3005 Author: Picca Frédéric-Emmanuel Date: Tue Dec 23 16:53:41 2014 +0100 do not install the hkl3d.pc Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit d4f7ed4de1de7e89fd00303f5d545ec58a3befd6 Author: Picca Frédéric-Emmanuel Date: Tue Dec 23 16:49:36 2014 +0100 remove the embeded bullet library. this will reduce the work for the packaging. Documentation/sphinx/source/development.rst | 7 +- Makefile.am | 2 +- configure.ac | 89 +- gui/Makefile.am | 10 +- hkl3d/Makefile.am | 28 +- hkl3d/bullet/AUTHORS | 22 - hkl3d/bullet/BulletLicense.txt | 18 - hkl3d/bullet/COPYING | 674 ----- hkl3d/bullet/ChangeLog | 755 ------ hkl3d/bullet/Doxyfile | 768 ------ hkl3d/bullet/LICENSE | 19 - hkl3d/bullet/Makefile.am | 3 - hkl3d/bullet/NEWS | 4 - hkl3d/bullet/README | 7 - hkl3d/bullet/RELEASING.TXT | 34 - hkl3d/bullet/VERSION | 1 - hkl3d/bullet/bullet.pc | 11 - hkl3d/bullet/src/Bullet-C-Api.h | 176 -- .../BroadphaseCollision/btAxisSweep3.cpp | 37 - .../BroadphaseCollision/btAxisSweep3.h | 1051 -------- .../BroadphaseCollision/btBroadphaseInterface.h | 82 - .../BroadphaseCollision/btBroadphaseProxy.cpp | 17 - .../BroadphaseCollision/btBroadphaseProxy.h | 270 -- .../BroadphaseCollision/btCollisionAlgorithm.cpp | 23 - .../BroadphaseCollision/btCollisionAlgorithm.h | 80 - .../BulletCollision/BroadphaseCollision/btDbvt.cpp | 1295 --------- .../BulletCollision/BroadphaseCollision/btDbvt.h | 1256 --------- .../BroadphaseCollision/btDbvtBroadphase.cpp | 796 ------ .../BroadphaseCollision/btDbvtBroadphase.h | 146 -- .../BroadphaseCollision/btDispatcher.cpp | 22 - .../BroadphaseCollision/btDispatcher.h | 110 - .../BroadphaseCollision/btMultiSapBroadphase.cpp | 489 ---- .../BroadphaseCollision/btMultiSapBroadphase.h | 151 -- .../BroadphaseCollision/btOverlappingPairCache.cpp | 633 ----- .../BroadphaseCollision/btOverlappingPairCache.h | 469 ---- .../btOverlappingPairCallback.h | 40 - .../BroadphaseCollision/btQuantizedBvh.cpp | 1375 ---------- .../BroadphaseCollision/btQuantizedBvh.h | 579 ----- .../BroadphaseCollision/btSimpleBroadphase.cpp | 349 --- .../BroadphaseCollision/btSimpleBroadphase.h | 171 -- .../CollisionDispatch/SphereTriangleDetector.cpp | 201 -- .../CollisionDispatch/SphereTriangleDetector.h | 51 - .../btActivatingCollisionAlgorithm.cpp | 47 - .../btActivatingCollisionAlgorithm.h | 36 - .../btBox2dBox2dCollisionAlgorithm.cpp | 435 ---- .../btBox2dBox2dCollisionAlgorithm.h | 66 - .../btBoxBoxCollisionAlgorithm.cpp | 85 - .../CollisionDispatch/btBoxBoxCollisionAlgorithm.h | 66 - .../CollisionDispatch/btBoxBoxDetector.cpp | 718 ----- .../CollisionDispatch/btBoxBoxDetector.h | 44 - .../CollisionDispatch/btCollisionConfiguration.h | 48 - .../CollisionDispatch/btCollisionCreateFunc.h | 45 - .../CollisionDispatch/btCollisionDispatcher.cpp | 310 --- .../CollisionDispatch/btCollisionDispatcher.h | 172 -- .../CollisionDispatch/btCollisionObject.cpp | 116 - .../CollisionDispatch/btCollisionObject.h | 524 ---- .../CollisionDispatch/btCollisionWorld.cpp | 1513 ----------- .../CollisionDispatch/btCollisionWorld.h | 509 ---- .../btCompoundCollisionAlgorithm.cpp | 353 --- .../btCompoundCollisionAlgorithm.h | 86 - .../btConvex2dConvex2dAlgorithm.cpp | 247 -- .../btConvex2dConvex2dAlgorithm.h | 95 - .../btConvexConcaveCollisionAlgorithm.cpp | 312 --- .../btConvexConcaveCollisionAlgorithm.h | 116 - .../CollisionDispatch/btConvexConvexAlgorithm.cpp | 679 ----- .../CollisionDispatch/btConvexConvexAlgorithm.h | 109 - .../btConvexPlaneCollisionAlgorithm.cpp | 155 -- .../btConvexPlaneCollisionAlgorithm.h | 84 - .../btDefaultCollisionConfiguration.cpp | 298 --- .../btDefaultCollisionConfiguration.h | 135 - .../btEmptyCollisionAlgorithm.cpp | 34 - .../CollisionDispatch/btEmptyCollisionAlgorithm.h | 54 - .../CollisionDispatch/btGhostObject.cpp | 171 -- .../CollisionDispatch/btGhostObject.h | 175 -- .../CollisionDispatch/btInternalEdgeUtility.cpp | 842 ------ .../CollisionDispatch/btInternalEdgeUtility.h | 46 - .../CollisionDispatch/btManifoldResult.cpp | 135 - .../CollisionDispatch/btManifoldResult.h | 128 - .../btSimulationIslandManager.cpp | 443 ---- .../CollisionDispatch/btSimulationIslandManager.h | 81 - .../btSphereBoxCollisionAlgorithm.cpp | 260 -- .../btSphereBoxCollisionAlgorithm.h | 75 - .../btSphereSphereCollisionAlgorithm.cpp | 105 - .../btSphereSphereCollisionAlgorithm.h | 66 - .../btSphereTriangleCollisionAlgorithm.cpp | 84 - .../btSphereTriangleCollisionAlgorithm.h | 69 - .../CollisionDispatch/btUnionFind.cpp | 82 - .../CollisionDispatch/btUnionFind.h | 129 - .../CollisionShapes/btBox2dShape.cpp | 42 - .../BulletCollision/CollisionShapes/btBox2dShape.h | 363 --- .../BulletCollision/CollisionShapes/btBoxShape.cpp | 41 - .../BulletCollision/CollisionShapes/btBoxShape.h | 318 --- .../CollisionShapes/btBvhTriangleMeshShape.cpp | 466 ---- .../CollisionShapes/btBvhTriangleMeshShape.h | 139 - .../CollisionShapes/btCapsuleShape.cpp | 171 -- .../CollisionShapes/btCapsuleShape.h | 173 -- .../CollisionShapes/btCollisionMargin.h | 26 - .../CollisionShapes/btCollisionShape.cpp | 119 - .../CollisionShapes/btCollisionShape.h | 150 -- .../CollisionShapes/btCompoundShape.cpp | 356 --- .../CollisionShapes/btCompoundShape.h | 212 -- .../CollisionShapes/btConcaveShape.cpp | 27 - .../CollisionShapes/btConcaveShape.h | 60 - .../CollisionShapes/btConeShape.cpp | 143 - .../BulletCollision/CollisionShapes/btConeShape.h | 103 - .../CollisionShapes/btConvex2dShape.cpp | 92 - .../CollisionShapes/btConvex2dShape.h | 80 - .../CollisionShapes/btConvexHullShape.cpp | 211 -- .../CollisionShapes/btConvexHullShape.h | 120 - .../CollisionShapes/btConvexInternalShape.cpp | 151 -- .../CollisionShapes/btConvexInternalShape.h | 202 -- .../CollisionShapes/btConvexPointCloudShape.cpp | 157 -- .../CollisionShapes/btConvexPointCloudShape.h | 105 - .../CollisionShapes/btConvexPolyhedron.cpp | 185 -- .../CollisionShapes/btConvexPolyhedron.h | 54 - .../CollisionShapes/btConvexShape.cpp | 429 --- .../CollisionShapes/btConvexShape.h | 82 - .../CollisionShapes/btConvexTriangleMeshShape.cpp | 315 --- .../CollisionShapes/btConvexTriangleMeshShape.h | 75 - .../CollisionShapes/btCylinderShape.cpp | 279 -- .../CollisionShapes/btCylinderShape.h | 200 -- .../CollisionShapes/btEmptyShape.cpp | 50 - .../BulletCollision/CollisionShapes/btEmptyShape.h | 70 - .../CollisionShapes/btHeightfieldTerrainShape.cpp | 411 --- .../CollisionShapes/btHeightfieldTerrainShape.h | 161 -- .../BulletCollision/CollisionShapes/btMaterial.h | 35 - .../CollisionShapes/btMinkowskiSumShape.cpp | 60 - .../CollisionShapes/btMinkowskiSumShape.h | 60 - .../CollisionShapes/btMultiSphereShape.cpp | 167 -- .../CollisionShapes/btMultiSphereShape.h | 99 - .../btMultimaterialTriangleMeshShape.cpp | 45 - .../btMultimaterialTriangleMeshShape.h | 120 - .../CollisionShapes/btOptimizedBvh.cpp | 391 --- .../CollisionShapes/btOptimizedBvh.h | 65 - .../CollisionShapes/btPolyhedralConvexShape.cpp | 338 --- .../CollisionShapes/btPolyhedralConvexShape.h | 112 - .../btScaledBvhTriangleMeshShape.cpp | 123 - .../CollisionShapes/btScaledBvhTriangleMeshShape.h | 93 - .../CollisionShapes/btShapeHull.cpp | 170 -- .../BulletCollision/CollisionShapes/btShapeHull.h | 59 - .../CollisionShapes/btSphereShape.cpp | 71 - .../CollisionShapes/btSphereShape.h | 73 - .../CollisionShapes/btStaticPlaneShape.cpp | 107 - .../CollisionShapes/btStaticPlaneShape.h | 103 - .../CollisionShapes/btStridingMeshInterface.cpp | 379 --- .../CollisionShapes/btStridingMeshInterface.h | 162 -- .../CollisionShapes/btTetrahedronShape.cpp | 218 -- .../CollisionShapes/btTetrahedronShape.h | 74 - .../CollisionShapes/btTriangleBuffer.cpp | 35 - .../CollisionShapes/btTriangleBuffer.h | 69 - .../CollisionShapes/btTriangleCallback.cpp | 28 - .../CollisionShapes/btTriangleCallback.h | 42 - .../CollisionShapes/btTriangleIndexVertexArray.cpp | 95 - .../CollisionShapes/btTriangleIndexVertexArray.h | 131 - .../btTriangleIndexVertexMaterialArray.cpp | 86 - .../btTriangleIndexVertexMaterialArray.h | 84 - .../CollisionShapes/btTriangleInfoMap.h | 240 -- .../CollisionShapes/btTriangleMesh.cpp | 140 - .../CollisionShapes/btTriangleMesh.h | 69 - .../CollisionShapes/btTriangleMeshShape.cpp | 211 -- .../CollisionShapes/btTriangleMeshShape.h | 89 - .../CollisionShapes/btTriangleShape.h | 182 -- .../CollisionShapes/btUniformScalingShape.cpp | 160 -- .../CollisionShapes/btUniformScalingShape.h | 87 - hkl3d/bullet/src/BulletCollision/Doxyfile | 746 ------ .../src/BulletCollision/Gimpact/btBoxCollision.h | 647 ----- .../src/BulletCollision/Gimpact/btClipPolygon.h | 182 -- .../Gimpact/btContactProcessing.cpp | 181 -- .../BulletCollision/Gimpact/btContactProcessing.h | 145 -- .../src/BulletCollision/Gimpact/btGImpactBvh.cpp | 498 ---- .../src/BulletCollision/Gimpact/btGImpactBvh.h | 396 --- .../Gimpact/btGImpactCollisionAlgorithm.cpp | 904 ------- .../Gimpact/btGImpactCollisionAlgorithm.h | 306 --- .../BulletCollision/Gimpact/btGImpactMassUtil.h | 60 - .../Gimpact/btGImpactQuantizedBvh.cpp | 528 ---- .../Gimpact/btGImpactQuantizedBvh.h | 372 --- .../src/BulletCollision/Gimpact/btGImpactShape.cpp | 203 -- .../src/BulletCollision/Gimpact/btGImpactShape.h | 1171 --------- .../Gimpact/btGenericPoolAllocator.cpp | 283 -- .../Gimpact/btGenericPoolAllocator.h | 163 -- .../BulletCollision/Gimpact/btGeometryOperations.h | 212 -- .../src/BulletCollision/Gimpact/btQuantization.h | 88 - .../BulletCollision/Gimpact/btTriangleShapeEx.cpp | 218 -- .../BulletCollision/Gimpact/btTriangleShapeEx.h | 180 -- .../bullet/src/BulletCollision/Gimpact/gim_array.h | 326 --- .../Gimpact/gim_basic_geometry_operations.h | 543 ---- .../src/BulletCollision/Gimpact/gim_bitset.h | 123 - .../BulletCollision/Gimpact/gim_box_collision.h | 590 ----- .../src/BulletCollision/Gimpact/gim_box_set.cpp | 182 -- .../src/BulletCollision/Gimpact/gim_box_set.h | 674 ----- .../src/BulletCollision/Gimpact/gim_clip_polygon.h | 210 -- .../src/BulletCollision/Gimpact/gim_contact.cpp | 146 -- .../src/BulletCollision/Gimpact/gim_contact.h | 164 -- .../src/BulletCollision/Gimpact/gim_geom_types.h | 97 - .../src/BulletCollision/Gimpact/gim_geometry.h | 42 - .../src/BulletCollision/Gimpact/gim_hash_table.h | 902 ------- .../src/BulletCollision/Gimpact/gim_linear_math.h | 1573 ----------- .../bullet/src/BulletCollision/Gimpact/gim_math.h | 157 -- .../src/BulletCollision/Gimpact/gim_memory.cpp | 135 - .../src/BulletCollision/Gimpact/gim_memory.h | 190 -- .../src/BulletCollision/Gimpact/gim_radixsort.h | 406 --- .../BulletCollision/Gimpact/gim_tri_collision.cpp | 640 ----- .../BulletCollision/Gimpact/gim_tri_collision.h | 379 --- .../btContinuousConvexCollision.cpp | 243 -- .../btContinuousConvexCollision.h | 59 - .../NarrowPhaseCollision/btConvexCast.cpp | 20 - .../NarrowPhaseCollision/btConvexCast.h | 73 - .../btConvexPenetrationDepthSolver.h | 42 - .../btDiscreteCollisionDetectorInterface.h | 91 - .../NarrowPhaseCollision/btGjkConvexCast.cpp | 176 -- .../NarrowPhaseCollision/btGjkConvexCast.h | 50 - .../NarrowPhaseCollision/btGjkEpa2.cpp | 989 ------- .../NarrowPhaseCollision/btGjkEpa2.h | 75 - .../btGjkEpaPenetrationDepthSolver.cpp | 66 - .../btGjkEpaPenetrationDepthSolver.h | 43 - .../NarrowPhaseCollision/btGjkPairDetector.cpp | 457 ---- .../NarrowPhaseCollision/btGjkPairDetector.h | 103 - .../NarrowPhaseCollision/btManifoldPoint.h | 158 -- .../btMinkowskiPenetrationDepthSolver.cpp | 362 --- .../btMinkowskiPenetrationDepthSolver.h | 40 - .../NarrowPhaseCollision/btPersistentManifold.cpp | 260 -- .../NarrowPhaseCollision/btPersistentManifold.h | 232 -- .../NarrowPhaseCollision/btPointCollector.h | 64 - .../btPolyhedralContactClipping.cpp | 360 --- .../btPolyhedralContactClipping.h | 46 - .../NarrowPhaseCollision/btRaycastCallback.cpp | 177 -- .../NarrowPhaseCollision/btRaycastCallback.h | 72 - .../btSimplexSolverInterface.h | 63 - .../btSubSimplexConvexCast.cpp | 160 -- .../NarrowPhaseCollision/btSubSimplexConvexCast.h | 50 - .../btVoronoiSimplexSolver.cpp | 609 ----- .../NarrowPhaseCollision/btVoronoiSimplexSolver.h | 179 -- .../Character/btCharacterControllerInterface.h | 46 - .../Character/btKinematicCharacterController.cpp | 641 ----- .../Character/btKinematicCharacterController.h | 162 -- .../ConstraintSolver/btConeTwistConstraint.cpp | 1127 -------- .../ConstraintSolver/btConeTwistConstraint.h | 346 --- .../ConstraintSolver/btConstraintSolver.h | 52 - .../ConstraintSolver/btContactConstraint.cpp | 178 -- .../ConstraintSolver/btContactConstraint.h | 71 - .../ConstraintSolver/btContactSolverInfo.h | 87 - .../ConstraintSolver/btGeneric6DofConstraint.cpp | 1070 -------- .../ConstraintSolver/btGeneric6DofConstraint.h | 614 ----- .../btGeneric6DofSpringConstraint.cpp | 172 -- .../btGeneric6DofSpringConstraint.h | 97 - .../ConstraintSolver/btHinge2Constraint.cpp | 66 - .../ConstraintSolver/btHinge2Constraint.h | 58 - .../ConstraintSolver/btHingeConstraint.cpp | 1033 -------- .../ConstraintSolver/btHingeConstraint.h | 381 --- .../ConstraintSolver/btJacobianEntry.h | 156 -- .../ConstraintSolver/btPoint2PointConstraint.cpp | 230 -- .../ConstraintSolver/btPoint2PointConstraint.h | 161 -- .../btSequentialImpulseConstraintSolver.cpp | 1239 --------- .../btSequentialImpulseConstraintSolver.h | 128 - .../ConstraintSolver/btSliderConstraint.cpp | 857 ------ .../ConstraintSolver/btSliderConstraint.h | 333 --- .../ConstraintSolver/btSolve2LinearConstraint.cpp | 255 -- .../ConstraintSolver/btSolve2LinearConstraint.h | 107 - .../BulletDynamics/ConstraintSolver/btSolverBody.h | 191 -- .../ConstraintSolver/btSolverConstraint.h | 96 - .../ConstraintSolver/btTypedConstraint.cpp | 214 -- .../ConstraintSolver/btTypedConstraint.h | 436 ---- .../ConstraintSolver/btUniversalConstraint.cpp | 87 - .../ConstraintSolver/btUniversalConstraint.h | 62 - .../src/BulletDynamics/Dynamics/Bullet-C-API.cpp | 405 --- .../BulletDynamics/Dynamics/btActionInterface.h | 46 - .../Dynamics/btContinuousDynamicsWorld.cpp | 196 -- .../Dynamics/btContinuousDynamicsWorld.h | 46 - .../Dynamics/btDiscreteDynamicsWorld.cpp | 1348 ---------- .../Dynamics/btDiscreteDynamicsWorld.h | 200 -- .../src/BulletDynamics/Dynamics/btDynamicsWorld.h | 151 -- .../src/BulletDynamics/Dynamics/btRigidBody.cpp | 402 --- .../src/BulletDynamics/Dynamics/btRigidBody.h | 691 ----- .../Dynamics/btSimpleDynamicsWorld.cpp | 280 -- .../Dynamics/btSimpleDynamicsWorld.h | 89 - .../BulletDynamics/Vehicle/btRaycastVehicle.cpp | 771 ------ .../src/BulletDynamics/Vehicle/btRaycastVehicle.h | 236 -- .../BulletDynamics/Vehicle/btVehicleRaycaster.h | 35 - .../src/BulletDynamics/Vehicle/btWheelInfo.cpp | 56 - .../src/BulletDynamics/Vehicle/btWheelInfo.h | 119 - .../GpuSoftBodySolvers/CPU/btSoftBodySolverData.h | 744 ------ .../CPU/btSoftBodySolver_CPU.cpp | 979 ------- .../GpuSoftBodySolvers/CPU/btSoftBodySolver_CPU.h | 370 --- hkl3d/bullet/src/BulletMultiThreaded/HeapManager.h | 117 - .../src/BulletMultiThreaded/Makefile.original | 187 -- hkl3d/bullet/src/BulletMultiThreaded/MiniCL.cpp | 517 ---- .../BulletMultiThreaded/MiniCLTask/MiniCLTask.cpp | 74 - .../BulletMultiThreaded/MiniCLTask/MiniCLTask.h | 62 - .../BulletMultiThreaded/MiniCLTaskScheduler.cpp | 519 ---- .../src/BulletMultiThreaded/MiniCLTaskScheduler.h | 194 -- .../src/BulletMultiThreaded/PlatformDefinitions.h | 99 - .../src/BulletMultiThreaded/PosixThreadSupport.cpp | 399 --- .../src/BulletMultiThreaded/PosixThreadSupport.h | 142 - .../src/BulletMultiThreaded/PpuAddressSpace.h | 37 - .../SequentialThreadSupport.cpp | 169 -- .../BulletMultiThreaded/SequentialThreadSupport.h | 96 - .../SpuCollisionObjectWrapper.cpp | 48 - .../SpuCollisionObjectWrapper.h | 40 - .../SpuCollisionTaskProcess.cpp | 317 --- .../BulletMultiThreaded/SpuCollisionTaskProcess.h | 163 -- .../SpuContactManifoldCollisionAlgorithm.cpp | 69 - .../SpuContactManifoldCollisionAlgorithm.h | 120 - .../src/BulletMultiThreaded/SpuDoubleBuffer.h | 126 - .../bullet/src/BulletMultiThreaded/SpuFakeDma.cpp | 215 -- hkl3d/bullet/src/BulletMultiThreaded/SpuFakeDma.h | 135 - .../SpuGatheringCollisionDispatcher.cpp | 275 -- .../SpuGatheringCollisionDispatcher.h | 72 - .../src/BulletMultiThreaded/SpuLibspe2Support.cpp | 257 -- .../src/BulletMultiThreaded/SpuLibspe2Support.h | 180 -- .../SpuNarrowPhaseCollisionTask/Box.h | 167 -- .../SpuCollisionShapes.cpp | 302 --- .../SpuCollisionShapes.h | 128 - .../SpuContactResult.cpp | 248 -- .../SpuNarrowPhaseCollisionTask/SpuContactResult.h | 106 - .../SpuConvexPenetrationDepthSolver.h | 51 - .../SpuGatheringCollisionTask.cpp | 1412 ---------- .../SpuGatheringCollisionTask.h | 140 - .../SpuNarrowPhaseCollisionTask/SpuLocalSupport.h | 19 - .../SpuMinkowskiPenetrationDepthSolver.cpp | 348 --- .../SpuMinkowskiPenetrationDepthSolver.h | 48 - .../SpuPreferredPenetrationDirections.h | 70 - .../SpuNarrowPhaseCollisionTask/boxBoxDistance.cpp | 1160 --------- .../SpuNarrowPhaseCollisionTask/boxBoxDistance.h | 65 - .../SpuNarrowPhaseCollisionTask/readme.txt | 1 - .../SpuSampleTask/SpuSampleTask.cpp | 214 -- .../SpuSampleTask/SpuSampleTask.h | 54 - .../BulletMultiThreaded/SpuSampleTask/readme.txt | 1 - .../BulletMultiThreaded/SpuSampleTaskProcess.cpp | 222 -- .../src/BulletMultiThreaded/SpuSampleTaskProcess.h | 153 -- hkl3d/bullet/src/BulletMultiThreaded/SpuSync.h | 149 -- hkl3d/bullet/src/BulletMultiThreaded/TrbDynBody.h | 79 - hkl3d/bullet/src/BulletMultiThreaded/TrbStateVec.h | 339 --- .../src/BulletMultiThreaded/Win32ThreadSupport.cpp | 446 ---- .../src/BulletMultiThreaded/Win32ThreadSupport.h | 138 - .../BulletMultiThreaded/btGpu3DGridBroadphase.cpp | 590 ----- .../BulletMultiThreaded/btGpu3DGridBroadphase.h | 138 - .../btGpu3DGridBroadphaseSharedCode.h | 430 --- .../btGpu3DGridBroadphaseSharedDefs.h | 61 - .../btGpu3DGridBroadphaseSharedTypes.h | 67 - .../bullet/src/BulletMultiThreaded/btGpuDefines.h | 211 -- .../src/BulletMultiThreaded/btGpuUtilsSharedCode.h | 55 - .../src/BulletMultiThreaded/btGpuUtilsSharedDefs.h | 52 - .../btParallelConstraintSolver.cpp | 1389 ---------- .../btParallelConstraintSolver.h | 285 -- .../btThreadSupportInterface.cpp | 22 - .../BulletMultiThreaded/btThreadSupportInterface.h | 85 - .../vectormath/scalar/cpp/boolInVec.h | 225 -- .../vectormath/scalar/cpp/floatInVec.h | 343 --- .../vectormath/scalar/cpp/mat_aos.h | 1630 ------------ .../vectormath/scalar/cpp/quat_aos.h | 433 --- .../vectormath/scalar/cpp/vec_aos.h | 1426 ---------- .../vectormath/scalar/cpp/vectormath_aos.h | 1872 ------------- .../src/BulletMultiThreaded/vectormath2bullet.h | 73 - hkl3d/bullet/src/LinearMath/btAabbUtil2.h | 236 -- hkl3d/bullet/src/LinearMath/btAlignedAllocator.cpp | 182 -- hkl3d/bullet/src/LinearMath/btAlignedAllocator.h | 107 - hkl3d/bullet/src/LinearMath/btAlignedObjectArray.h | 471 ---- hkl3d/bullet/src/LinearMath/btConvexHull.cpp | 1174 --------- hkl3d/bullet/src/LinearMath/btConvexHull.h | 241 -- .../bullet/src/LinearMath/btConvexHullComputer.cpp | 2749 -------------------- hkl3d/bullet/src/LinearMath/btConvexHullComputer.h | 103 - hkl3d/bullet/src/LinearMath/btDefaultMotionState.h | 40 - hkl3d/bullet/src/LinearMath/btGeometryUtil.cpp | 185 -- hkl3d/bullet/src/LinearMath/btGeometryUtil.h | 42 - hkl3d/bullet/src/LinearMath/btHashMap.h | 450 ---- hkl3d/bullet/src/LinearMath/btIDebugDraw.h | 417 --- hkl3d/bullet/src/LinearMath/btList.h | 73 - hkl3d/bullet/src/LinearMath/btMatrix3x3.h | 771 ------ hkl3d/bullet/src/LinearMath/btMinMax.h | 71 - hkl3d/bullet/src/LinearMath/btMotionState.h | 40 - hkl3d/bullet/src/LinearMath/btPoolAllocator.h | 121 - hkl3d/bullet/src/LinearMath/btQuadWord.h | 180 -- hkl3d/bullet/src/LinearMath/btQuaternion.h | 433 --- hkl3d/bullet/src/LinearMath/btQuickprof.cpp | 565 ---- hkl3d/bullet/src/LinearMath/btQuickprof.h | 196 -- hkl3d/bullet/src/LinearMath/btRandom.h | 42 - hkl3d/bullet/src/LinearMath/btScalar.h | 522 ---- hkl3d/bullet/src/LinearMath/btSerializer.cpp | 832 ------ hkl3d/bullet/src/LinearMath/btSerializer.h | 655 ----- hkl3d/bullet/src/LinearMath/btStackAlloc.h | 116 - hkl3d/bullet/src/LinearMath/btTransform.h | 307 --- hkl3d/bullet/src/LinearMath/btTransformUtil.h | 228 -- hkl3d/bullet/src/LinearMath/btVector3.h | 766 ------ hkl3d/bullet/src/Makefile.am | 358 --- hkl3d/bullet/src/btBulletCollisionCommon.h | 69 - hkl3d/bullet/src/btBulletDynamicsCommon.h | 49 - hkl3d/hkl3d.cpp | 8 +- tests/Makefile.am | 6 +- 388 files changed, 28 insertions(+), 104964 deletions(-) commit e9a43f6129700071fcef8dfb345e70b8d6147b1b Author: Picca Frédéric-Emmanuel Date: Tue Dec 23 15:59:18 2014 +0100 prepare the NEWS file for the release NEWS | 67 ++++++++++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 42 insertions(+), 25 deletions(-) commit e2f678644e9af6d578fac2fde590602d45a726f3 Author: Picca Frédéric-Emmanuel Date: Tue Dec 23 13:01:19 2014 +0100 remove an inconsistancy between the C-API and the bindings. Documentation/sphinx/source/bindings/python.py | 2 +- Documentation/sphinx/source/pyplots/trajectory_full.py | 2 +- hkl/hkl-binding-private.h | 6 ------ hkl/hkl-binding.c | 15 --------------- hkl/hkl-geometry.c | 2 +- tests/bindings/python.py | 2 +- tests/bindings/trajectory.py | 2 +- 7 files changed, 5 insertions(+), 26 deletions(-) commit 367d2097d1b9fedc81a592211b5bc89d14b9f1de Author: Picca Frédéric-Emmanuel Date: Tue Dec 23 12:52:07 2014 +0100 export the pseudo_axes_names in the bindings hkl/hkl-binding-private.h | 3 +++ hkl/hkl-binding.c | 16 ++++++++++++++++ hkl/hkl-pseudoaxis.c | 2 +- tests/bindings/python.py | 1 + 4 files changed, 21 insertions(+), 1 deletion(-) commit 67a98667c8ce8f2f5a8f2ad1cd5ca844a51f8a3f Author: Picca Frédéric-Emmanuel Date: Tue Dec 23 11:47:33 2014 +0100 fix the documentation now the check target verify that the embeded python code is ok Documentation/sphinx/Makefile.am | 21 +- Documentation/sphinx/source/bindings/python.py | 29 +- Documentation/sphinx/source/development.rst | 477 +++------------------ .../sphinx/source/pyplots/trajectory_full.py | 27 +- .../sphinx/source/pyplots/trajectory_simple.py | 27 +- hkl/hkl-engine-template.c | 164 +++---- 6 files changed, 210 insertions(+), 535 deletions(-) commit d00d42f4e40a1791ab8bed61718db5531e799269 Author: Picca Frédéric-Emmanuel Date: Fri Dec 19 16:55:16 2014 +0100 improve the template hkl/hkl-engine-template.c | 235 ++++++---------------------------------------- 1 file changed, 29 insertions(+), 206 deletions(-) commit d58be53dd40166a4d72dd2f286e8ed604eba27a5 Author: Picca Frédéric-Emmanuel Date: Fri Dec 19 16:23:08 2014 +0100 add a diffractometer's template file for documentation this file is also compiled during the build process to ensure that it can be used by users to add a new diffractometer. hkl/Makefile.am | 4 + hkl/hkl-engine-template.c | 399 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 403 insertions(+) commit ecd831108d721bd5ee6b52aa998b9749332029db Author: Picca Frédéric-Emmanuel Date: Thu Dec 18 15:24:14 2014 +0100 dedup the k6c and k4c kappa_2_kappap method hkl/hkl-engine-k4c.c | 17 ----------------- hkl/hkl-engine-k6c.c | 17 ----------------- hkl/hkl-pseudoaxis-common-eulerians-private.h | 3 +++ hkl/hkl-pseudoaxis-common-eulerians.c | 17 +++++++++++++++++ 4 files changed, 20 insertions(+), 34 deletions(-) commit fc35217aaedf58b2ca7525a7e3728ecac07b6045 Author: Picca Frédéric-Emmanuel Date: Thu Dec 18 09:43:42 2014 +0100 just reorganisation and add a few missing static hkl/Makefile.am | 2 +- hkl/hkl-engine-e4c.c | 12 +- hkl/hkl-engine-e6c.c | 4 +- hkl/hkl-engine-k4c.c | 129 ++++++++++----------- hkl/hkl-engine-k6c.c | 8 +- ...engine-petra3.c => hkl-engine-petra3-p09-eh2.c} | 84 +++++++------- hkl/hkl-engine-soleil-sirius-turret.c | 2 +- hkl/hkl-engine-soleil-sixs-med.c | 10 +- hkl/hkl-engine-zaxis.c | 38 +++--- 9 files changed, 136 insertions(+), 153 deletions(-) commit 1352e6bf6a24f8aa438469ccbd09ccccc5d0ee5b Author: Picca Frédéric-Emmanuel Date: Wed Dec 17 21:54:58 2014 +0100 put the zaxis diffractometers into it's own file hkl/Makefile.am | 3 +- ...l-pseudoaxis-zaxis-hkl.c => hkl-engine-zaxis.c} | 65 +++++++++++++++++++--- hkl/hkl-factory.c | 62 --------------------- hkl/hkl-pseudoaxis-zaxis-private.h | 33 ----------- 4 files changed, 57 insertions(+), 106 deletions(-) commit 2db9162ac2e2aa1b50879f7649836312cb17bdfa Author: Picca Frédéric-Emmanuel Date: Wed Dec 17 21:30:02 2014 +0100 put the soleil sixs med diffractometers into it's own file hkl/Makefile.am | 3 +- ...eil-sixs-med.c => hkl-engine-soleil-sixs-med.c} | 174 +++++++++++++++++++-- hkl/hkl-factory.c | 156 ------------------ hkl/hkl-pseudoaxis-soleil-sixs-med-private.h | 38 ----- 4 files changed, 159 insertions(+), 212 deletions(-) commit e67fbc0262bcc4c94339ee4c247a74ce3c160d55 Author: Picca Frédéric-Emmanuel Date: Wed Dec 17 21:19:02 2014 +0100 put the soleil sirius turret diffractometers into it's own file hkl/Makefile.am | 3 +- hkl/hkl-engine-soleil-sirius-turret.c | 105 ++++++++++++++++++++++ hkl/hkl-factory.c | 51 ----------- hkl/hkl-pseudoaxis-soleil-sirius-turret-private.h | 33 ------- hkl/hkl-pseudoaxis-soleil-sirius-turret.c | 57 ------------ 5 files changed, 106 insertions(+), 143 deletions(-) commit 7c648a7fbe0b3bcc4a14bdee6c03d8ff0463efcc Author: Picca Frédéric-Emmanuel Date: Wed Dec 17 21:06:43 2014 +0100 put the petra3 diffractometers into it's own file hkl/Makefile.am | 3 +- ...pseudoaxis-petra3-hkl.c => hkl-engine-petra3.c} | 62 +++++++++++++++++++--- hkl/hkl-factory.c | 51 ------------------ hkl/hkl-pseudoaxis-petra3-private.h | 33 ------------ 4 files changed, 55 insertions(+), 94 deletions(-) commit 9cf81ca9c2c63c8827e90cc091974c4ab8cc2a79 Author: Picca Frédéric-Emmanuel Date: Wed Dec 17 16:24:57 2014 +0100 put the k6c diffractometer family into it's own file hkl/Makefile.am | 4 +- hkl/{hkl-pseudoaxis-k6c-hkl.c => hkl-engine-k6c.c} | 245 +++++++++++++++++++-- hkl/hkl-factory.c | 157 ------------- hkl/hkl-pseudoaxis-k6c-private.h | 37 ---- hkl/hkl-pseudoaxis-k6c-psi.c | 93 -------- 5 files changed, 229 insertions(+), 307 deletions(-) commit c23090e19788f8cd3eec59414f6203a68c265c31 Author: Picca Frédéric-Emmanuel Date: Wed Dec 17 15:56:15 2014 +0100 put the e6c diffractometer into it's own file hkl/Makefile.am | 4 +- hkl/{hkl-pseudoaxis-e6c-hkl.c => hkl-engine-e6c.c} | 105 +++++++++++++++++++-- hkl/hkl-factory.c | 53 ----------- hkl/hkl-pseudoaxis-e6c-private.h | 34 ------- hkl/hkl-pseudoaxis-e6c-psi.c | 66 ------------- 5 files changed, 96 insertions(+), 166 deletions(-) commit e94032963201554debe6a18715979446e489a504 Author: Picca Frédéric-Emmanuel Date: Wed Dec 17 15:38:05 2014 +0100 put all the k4c diffractometer into it's own file hkl/Makefile.am | 4 +- ...{hkl-pseudoaxis-k4cv-hkl.c => hkl-engine-k4c.c} | 153 +++++++++++++++++++-- hkl/hkl-factory.c | 83 ----------- hkl/hkl-pseudoaxis-k4cv-private.h | 34 ----- hkl/hkl-pseudoaxis-k4cv-psi.c | 65 --------- 5 files changed, 143 insertions(+), 196 deletions(-) commit a6bd565e4bdcc828e3871b28bb0832316718bf76 Author: Picca Frédéric-Emmanuel Date: Wed Dec 17 15:20:58 2014 +0100 put the e4c diffractometer family into it's own file hkl/Makefile.am | 4 +- hkl/hkl-engine-e4c.c | 344 +++++++++++++++++++++++++++++++++++++++ hkl/hkl-factory.c | 141 ---------------- hkl/hkl-pseudoaxis-e4c-hkl.c | 178 -------------------- hkl/hkl-pseudoaxis-e4c-private.h | 34 ---- hkl/hkl-pseudoaxis-e4c-psi.c | 57 ------- 6 files changed, 345 insertions(+), 413 deletions(-) commit cc40715bbacbe6ce1c254b5d6e8ba2d84d9d983e Author: Picca Frédéric-Emmanuel Date: Wed Dec 17 14:50:39 2014 +0100 put the twoC diffractometer into it's own file hkl/Makefile.am | 1 + hkl/hkl-engine-2c.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++ hkl/hkl-factory-private.h | 10 ++++++++ hkl/hkl-factory.c | 50 +------------------------------------ 4 files changed, 75 insertions(+), 49 deletions(-) commit 71cbece4b394829bc2220771e295060c5338f470 Author: Picca Frédéric-Emmanuel Date: Tue Oct 14 21:38:09 2014 +0200 add the begining of an haskell implementation of hkl contrib/hkl.lhs | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) commit 3eddf7c4262bd318d0c48f53f1036ca8dc67afd9 Author: Picca Frédéric-Emmanuel Date: Sat Oct 11 19:11:40 2014 +0200 now the gui can find the .ui files when installed TODO | 4 +- gui/Makefile.am | 1 + gui/hkl-gui-3d.c | 97 +++++------ gui/hkl-gui-macros.h | 52 ++++++ gui/hkl-gui-pseudoaxes.c | 23 +-- gui/hkl-gui.c | 433 ++++++++++++++++++++++++----------------------- gui/hkl-gui.h | 8 - gui/pseudo.ui | 12 +- 8 files changed, 340 insertions(+), 290 deletions(-) commit eead998dafd5f68519ce8652fff7f9c681bef63b Author: Picca Frédéric-Emmanuel Date: Fri Oct 10 16:43:13 2014 +0200 wip logging (unactivated for now) it was just added for a test in the tango devices. TODO | 3 ++- hkl/Makefile.am | 1 + hkl/hkl-geometry.c | 10 +++++----- hkl/hkl-pseudoaxis.c | 42 ++++++++++++++++++++++++++++++++++-------- 4 files changed, 42 insertions(+), 14 deletions(-) commit 1f2928a9a6f3d2c4550bbce6dc3b4763ab6d1a49 Merge: b2c47317 db074524 Author: Picca Frédéric-Emmanuel Date: Wed Oct 8 21:23:52 2014 +0200 Merge branch 'maint' into next commit b2c473171eb9286b8d6e4df5313c9d50cd120680 Author: Picca Frédéric-Emmanuel Date: Tue Oct 7 15:05:13 2014 +0200 editing the pseudo axes panel display the raised errors. gui/hkl-gui-pseudoaxes.c | 63 +++++++++++++++------------------------ gui/hkl-gui-pseudoaxes.h | 2 ++ gui/hkl-gui.c | 77 ++++++++++++++++++++++++++++++++++-------------- 3 files changed, 80 insertions(+), 62 deletions(-) commit a68301e83ceead0cb67d25fa70b90de0daeb6776 Author: Picca Frédéric-Emmanuel Date: Tue Oct 7 14:08:32 2014 +0200 display the error when no computation is done. gui/hkl-gui.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit dacfd2e4e0f4a3ec8ae62b3ea96ed3681eff7b9a Author: Picca Frédéric-Emmanuel Date: Fri Oct 3 16:33:41 2014 +0200 remove all the c++ part of the gui. configure.ac | 3 - gui/Makefile.am | 18 +- gui/{hkl3d/hkl3d-gui-gl.c => hkl-gui-3d-gl.c} | 2 +- gui/{hkl3d/hkl3d-gui-gl.h => hkl-gui-3d-gl.h} | 0 gui/hkl-gui-3d.c | 14 +- gui/hkl-gui-3d.h | 57 -- gui/hkl-gui.c | 12 +- gui/hkl3d/GL_ShapeDrawer.cpp | 805 -------------------------- gui/hkl3d/GL_ShapeDrawer.h | 111 ---- gui/hkl3d/Makefile.am | 47 -- gui/hkl3d/hkl3d-gui-model.cpp | 407 ------------- gui/hkl3d/hkl3d-gui-model.h | 121 ---- gui/hkl3d/hkl3d-gui-scene.cpp | 486 ---------------- gui/hkl3d/hkl3d-gui-scene.h | 120 ---- gui/hkl3d/hkl3d-gui-view.cpp | 222 ------- gui/hkl3d/hkl3d-gui-view.h | 109 ---- gui/hkl3d/texture.c | 42 -- gui/hkl3d/texture.h | 30 - gui/hkl3d/trackball.c | 323 ----------- gui/hkl3d/trackball.h | 77 --- 20 files changed, 22 insertions(+), 2984 deletions(-) commit 49736e293ed32ff36586e13fd89ab98e029b9a93 Author: Picca Frédéric-Emmanuel Date: Fri Oct 3 14:52:02 2014 +0200 add a few togglebutton for the 3d view (reset and aabb) gui/3d.ui | 32 +++++++++++++ gui/hkl-gui-3d.c | 138 +++++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 135 insertions(+), 35 deletions(-) commit 57ceace375f76278e23696a0e0b863c114793a4a Author: Picca Frédéric-Emmanuel Date: Thu Oct 2 21:42:28 2014 +0200 draw the aabb boxes gui/hkl-gui-3d.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ hkl3d/hkl3d.cpp | 14 ++++++++++ hkl3d/hkl3d.h | 1 + 3 files changed, 97 insertions(+) commit 0521911a1a13a46f7ae1a776bb7d6575294325d5 Author: Picca Frédéric-Emmanuel Date: Mon Sep 29 16:48:39 2014 +0200 better 3d shift (should be enhanced) gui/hkl-gui-3d.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 695f4cc3d3006d5ee6b02c74b08758575a20f493 Author: Picca Frédéric-Emmanuel Date: Mon Sep 29 16:38:43 2014 +0200 add draw_collision gui/hkl-gui-3d.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 83 insertions(+), 6 deletions(-) commit 78e8e2c0916e1c2a641108f770f4d01a1a91f3b9 Author: Picca Frédéric-Emmanuel Date: Mon Sep 29 15:42:57 2014 +0200 add the 3d object selection gui/hkl-gui-3d.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 83 insertions(+), 2 deletions(-) commit 3dac7b9288d0d49ec588af6fcd4c036d52941268 Author: Picca Frédéric-Emmanuel Date: Mon Sep 29 15:10:17 2014 +0200 wip migrate 3d scene to C gui/3d.ui | 12 +- gui/Makefile.am | 5 +- gui/hkl-gui-3d.c | 344 ++++++++++++++++++++++++++++++++++++++++++++++- gui/hkl3d/hkl3d-gui-gl.c | 8 +- 4 files changed, 355 insertions(+), 14 deletions(-) commit ecc3f6f0b791b642c1122ddd130d63cc09a708c8 Author: Picca Frédéric-Emmanuel Date: Thu Sep 25 09:49:42 2014 +0200 re-add the c++ 3d part gui/3d.ui | 179 ++-- gui/Makefile.am | 27 +- gui/g3d.vapi | 55 -- gui/gl.vapi | 1402 ---------------------------- gui/glu.vapi | 301 ------ gui/glut.vapi | 611 ------------ gui/glx.vapi | 202 ---- gui/gtkglext-1.0.vapi | 373 -------- gui/hkl-gui-3d.c | 508 ++++++++++ gui/hkl-gui-3d.h | 109 +++ gui/hkl-gui-3d.vala | 271 ------ gui/hkl-gui-pseudoaxes.c | 1 - gui/hkl-gui.c | 339 +++---- gui/hkl-gui.h | 8 + gui/hkl-gui.vala | 2075 ----------------------------------------- gui/hkl.vapi | 190 ---- gui/hkl3d-gui-model.vala | 527 ----------- gui/hkl3d-gui-scene.vala | 373 -------- gui/hkl3d-gui-view.vala | 218 ----- gui/hkl3d.vapi | 110 --- gui/hkl3d/Makefile.am | 24 +- gui/hkl3d/hkl3d-gui-model.cpp | 407 ++++++++ gui/hkl3d/hkl3d-gui-model.h | 121 +++ gui/hkl3d/hkl3d-gui-scene.cpp | 486 ++++++++++ gui/hkl3d/hkl3d-gui-scene.h | 120 +++ gui/hkl3d/hkl3d-gui-view.cpp | 222 +++++ gui/hkl3d/hkl3d-gui-view.h | 109 +++ gui/trackball.vapi | 36 - hkl3d/hkl3d.cpp | 15 + 29 files changed, 2354 insertions(+), 7065 deletions(-) commit db074524dc45608f238add5caf1d0bf2bfdc5c66 Author: Picca Frédéric-Emmanuel Date: Mon Sep 22 14:54:11 2014 +0200 release the 4.0.9 version hkl/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 41a52f52cbbe3345484a99f1d341e7241a19bd16 Author: Picca Frédéric-Emmanuel Date: Mon Sep 22 14:46:00 2014 +0200 fix the SOLEIL sirius kappa géométrie pseudo axes. delta is in the horizontal plan (not the vertical one). hkl/hkl-pseudoaxis-factory.c | 9 +- hkl/hkl-pseudoaxis-k6c-hkl.c | 214 +++++++++++++++++++++++++++++++++++++++++++ hkl/hkl-pseudoaxis-k6c-psi.c | 17 ++++ hkl/hkl-pseudoaxis-k6c.h | 3 + 4 files changed, 242 insertions(+), 1 deletion(-) commit b3c9d6029fc81d973ae027750a47f1b9f9996bb1 Merge: ce4c831e 79e37666 Author: Picca Frédéric-Emmanuel Date: Mon Sep 15 16:38:07 2014 +0200 wip Merge branch 'next' into gtk Conflicts: gui/hkl-gui-3d.cpp gui/hkl-gui-3d.h gui/hkl-gui-callbacks.cpp gui/hkl-gui-modelcolumns.h gui/hkl-gui-pseudoaxes.cpp gui/hkl-gui-pseudoaxes.h gui/hkl-gui.cpp gui/hkl-gui.h gui/hkl3d/hkl3d-gui-model.cpp gui/hkl3d/hkl3d-gui-model.h gui/hkl3d/hkl3d-gui-scene.cpp gui/hkl3d/hkl3d-gui-scene.h gui/hkl3d/hkl3d-gui-view.cpp gui/hkl3d/hkl3d-gui-view.h hkl.h hkl/hkl-binding-private.h hkl/hkl-pseudoaxis-common-hkl.c hkl/hkl-pseudoaxis.c hkl/hkl-sample.c tests/hkl-sample-t.c commit 79e37666ba17baba279fa000c95fe5c781698e6c Author: Picca Frédéric-Emmanuel Date: Fri Sep 12 14:06:36 2014 +0200 fix the refactoring script scripts/refactoring | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a9b9635ef9331156a24492094d5b0a90eb0df7a3 Author: Picca Frédéric-Emmanuel Date: Thu Sep 11 11:54:57 2014 +0200 refactor using detector.cocci @@ @@ -hkl_detector_idx_set(...); @@ identifier detector; @@ HklDetector *detector; ... - 0 == detector->idx + 1 == detector->idx gui/hkl-gui.cpp | 1 - hkl.h | 2 -- hkl/hkl-detector.c | 14 +------------- scripts/detector.cocci | 14 ++++++++++++++ scripts/refactoring | 6 +++--- tests/bindings/python.py | 6 ------ tests/bindings/trajectory.py | 1 - tests/hkl-bench-t.c | 2 -- tests/hkl-detector-t.c | 9 +++++++-- tests/hkl-pseudoaxis-e4ch-t.c | 6 ------ tests/hkl-pseudoaxis-e4cv-t.c | 6 ------ tests/hkl-pseudoaxis-e6c-t.c | 5 ----- tests/hkl-pseudoaxis-k4cv-t.c | 3 --- tests/hkl-pseudoaxis-k6c-t.c | 4 ---- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 2 -- tests/hkl-pseudoaxis-t.c | 3 --- tests/hkl-pseudoaxis-zaxis-t.c | 1 - tests/hkl-sample-t.c | 7 ------- 18 files changed, 25 insertions(+), 67 deletions(-) commit e9883e5f6082f987ece17721037ba55d6a46eff1 Author: Picca Frédéric-Emmanuel Date: Mon Sep 8 13:29:24 2014 +0200 simplify the axes_names_get unit test and use the TEST_FOREACH_MODE macro tests/hkl-pseudoaxis-t.c | 66 ++++++++++++++++++++---------------------------- 1 file changed, 28 insertions(+), 38 deletions(-) commit a21f43b3711baeed8b786988c5ede352262b7255 Author: Picca Frédéric-Emmanuel Date: Mon Sep 8 13:15:46 2014 +0200 add the HklEngine parameters unit tests hkl/hkl-pseudoaxis.c | 6 +++-- tests/hkl-pseudoaxis-t.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 66 insertions(+), 3 deletions(-) commit c6f5a20a1753f97497419800c0678e05e47a24aa Author: Picca Frédéric-Emmanuel Date: Mon Sep 8 12:09:51 2014 +0200 add the hkl_egnine_current_mode_get/set tests tests/hkl-pseudoaxis-t.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) commit 5f9c48a39607c8e81fcd5492772a64a766bc8795 Author: Picca Frédéric-Emmanuel Date: Mon Sep 8 11:43:25 2014 +0200 refactor using diag.cocci @@ identifier res; expression E; @@ ( res &= DIAG(E); | -res &= E; +res &= DIAG(E); ) scripts/diag.cocci | 13 ++++++++ scripts/refactoring | 6 ++-- tests/hkl-pseudoaxis-e4ch-t.c | 28 ++++++++--------- tests/hkl-pseudoaxis-e4cv-t.c | 30 +++++++++--------- tests/hkl-pseudoaxis-e6c-t.c | 52 ++++++++++++++------------------ tests/hkl-pseudoaxis-k4cv-t.c | 10 +++--- tests/hkl-pseudoaxis-k6c-t.c | 14 ++++----- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 2 +- tests/hkl-pseudoaxis-zaxis-t.c | 2 +- tests/hkl-unit-t.c | 9 +++--- tests/hkl3d-test-t.c | 21 +++++++------ 11 files changed, 98 insertions(+), 89 deletions(-) commit ad332d062ff7427fb7e7d908e0855ad1bbb32dde Author: Picca Frédéric-Emmanuel Date: Mon Sep 8 11:24:59 2014 +0200 move the DAIG macro into the hkl-tap.h header. This way it will be possible to use it everywhere in the tests tests/hkl-pseudoaxis-t.c | 10 ---------- tests/tap/hkl-tap.h | 11 +++++++++++ 2 files changed, 11 insertions(+), 10 deletions(-) commit d5614417c569af92e6358f2a9df4a40b979178ba Author: Picca Frédéric-Emmanuel Date: Tue Sep 2 21:40:42 2014 +0200 refactor using OK.cocci @@ identifier res, f; expression E; @@ ( res &= DIAG(E); | -res &= E; +res &= DIAG(E); ) hkl/hkl-pseudoaxis-auto-private.h | 1 + hkl/hkl-pseudoaxis-common-hkl-private.h | 1 + scripts/OK.cocci | 13 ++++ scripts/refactoring | 3 +- tests/hkl-pseudoaxis-t.c | 103 ++++++++++++++++---------------- 5 files changed, 69 insertions(+), 52 deletions(-) commit de7e77691f3d20382b973a24ee53769e118961f2 Author: Picca Frédéric-Emmanuel Date: Tue Sep 2 16:24:26 2014 +0200 better diagnostique during test for loop tests/Makefile.am | 2 +- tests/hkl-pseudoaxis-t.c | 46 +++++++++++++++++++++++++--------------------- 2 files changed, 26 insertions(+), 22 deletions(-) commit a610d680e148a1c2d1c547f744081979c1eb8f79 Author: Picca Frédéric-Emmanuel Date: Tue Sep 2 13:33:27 2014 +0200 modify the refactoring path to use cocci files scripts/refactoring | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit ceb1f416ce75ee0e1a0ffad6d36a9ff330eb03c4 Author: Picca Frédéric-Emmanuel Date: Tue Sep 2 13:25:11 2014 +0200 rewrite the HklEngine check for all mode tests/hkl-pseudoaxis-t.c | 249 +++++++++++++++++++++-------------------------- 1 file changed, 112 insertions(+), 137 deletions(-) commit 6e6f0eb789fe922222c0463c43f129ecf0f2f9a1 Author: Picca Frédéric-Emmanuel Date: Tue Sep 2 10:29:52 2014 +0200 add the hkl_engine_initialized unit test tests/hkl-pseudoaxis-t.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) commit 967a5f8d8948b4b4293efbbcd31407fa95802b16 Author: Picca Frédéric-Emmanuel Date: Tue Sep 2 10:07:45 2014 +0200 rework the hkl_engine_capabilities unit test tests/hkl-pseudoaxis-t.c | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) commit e272b8bbb7c776b110f0da8aeb8e0d5510a44ef1 Author: Picca Frédéric-Emmanuel Date: Tue Sep 2 09:49:04 2014 +0200 add hkl_engine_pseudo_axis_get GError unit test tests/hkl-pseudoaxis-t.c | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) commit 10479d607cff479a4936d76777be5b80243dbfdf Author: Picca Frédéric-Emmanuel Date: Mon Sep 1 16:57:43 2014 +0200 rework and add the pseudoaxis GError unit test tests/hkl-pseudoaxis-t.c | 230 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 160 insertions(+), 70 deletions(-) commit 22c69ea33f567b1acc7183d6f8ecfc88c0e90c4e Author: Picca Frédéric-Emmanuel Date: Mon Sep 1 15:32:47 2014 +0200 fix warning in lattice test tests/hkl-lattice-t.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit ee1d127dd40ccae39e303d2cf8bcfb6e13de072e Author: Picca Frédéric-Emmanuel Date: Mon Sep 1 15:29:19 2014 +0200 use is_matrix everywhere first use of the coccinelle software to do this change, except the #include addition. scripts/is_matrix.spatch | 14 ++++++++++++++ tests/hkl-lattice-t.c | 5 +++-- tests/hkl-quaternion-t.c | 3 ++- tests/hkl-sample-t.c | 14 +++++++------- 4 files changed, 26 insertions(+), 10 deletions(-) commit 4fc8bf5ec1d9824a242c55ebb7b4114db4a332ac Author: Picca Frédéric-Emmanuel Date: Mon Sep 1 14:40:48 2014 +0200 add hkl-sample unit test with GError hkl/hkl-sample-private.h | 13 +++ hkl/hkl-sample.c | 210 +++++++++++++++++++++++++++++++---------------- tests/hkl-sample-t.c | 161 +++++++++++++++++++++++++----------- tests/tap/hkl-tap.c | 23 ++++++ tests/tap/hkl-tap.h | 3 + 5 files changed, 288 insertions(+), 122 deletions(-) commit 96c7b0eb5ce747b56ac447a25bbedff5c4ff9459 Author: Picca Frédéric-Emmanuel Date: Sat Aug 9 10:32:44 2014 +0200 get rid of all warning generated by unuser-result in hkl-sample-t tests/hkl-sample-t.c | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) commit 6559108a0e7f2e46bd5ad23db2f670e4ef4e288e Author: Picca Frédéric-Emmanuel Date: Fri Aug 8 17:30:04 2014 +0200 add HKL_WARN_UNUSED_RESULT for the public API if an hkl user does not use a return value from a method marked with this attribute, a warning is displayed during the compilation. for now only the method throwing a GError are instrumented. It is a good reminder to deal with the GError. BEWARE this warn is not activated for the libhkl compilation itself using the CFLAGS -Wno-unused-result. hkl.h | 73 +++++++++++++++++++++++++++++++-------------------------- hkl/Makefile.am | 3 ++- 2 files changed, 42 insertions(+), 34 deletions(-) commit a1aed94bc236e6ddcecdd9ea8739bfc2f64765c7 Author: Picca Frédéric-Emmanuel Date: Fri Aug 8 16:46:19 2014 +0200 typo tests/hkl-lattice-t.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 305d3d741e4b8804793f0ac41316b325244a9a64 Author: Picca Frédéric-Emmanuel Date: Fri Aug 8 16:44:32 2014 +0200 Add all the lattice Error check hkl/hkl-parameter-private.h | 1 + tests/hkl-lattice-t.c | 132 ++++++++++++++++++++++++++++++++++---------- 2 files changed, 103 insertions(+), 30 deletions(-) commit 405bc6411a7cb6e5ce3588f7dc5f9db9ae46cadb Author: Picca Frédéric-Emmanuel Date: Fri Aug 8 14:13:02 2014 +0200 replace g_return_val_if_fail by hkl_error when relevant In case of programming error the programm stop with an abort. Using gdb you can obtain a backtrace with 'bt' command. This hkl_error is like assert except that it is not possible to get rid of them with NDEBUG. Recoverable errors (not due to programming error) are reported via the usual GError system. hkl/hkl-axis.c | 4 ++-- hkl/hkl-binding.c | 2 +- hkl/hkl-geometry.c | 12 ++++++------ hkl/hkl-lattice.c | 18 +++++++++--------- hkl/hkl-macros-private.h | 6 ++++++ hkl/hkl-parameter-private.h | 4 ++-- hkl/hkl-parameter.c | 2 +- hkl/hkl-pseudoaxis-auto-private.h | 2 +- hkl/hkl-pseudoaxis-auto.c | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 2 +- hkl/hkl-pseudoaxis-common-psi.c | 2 +- hkl/hkl-pseudoaxis-private.h | 4 ++-- hkl/hkl-pseudoaxis.c | 24 ++++++++++++------------ hkl/hkl-sample.c | 10 +++++----- tests/hkl-geometry-t.c | 3 +-- 15 files changed, 51 insertions(+), 46 deletions(-) commit 3d3ab4a7358c1b691c0c1bcc1025a8019ab83957 Author: Picca Frédéric-Emmanuel Date: Thu Aug 7 16:48:16 2014 +0200 add all HklGeometry error tests hkl/hkl-geometry.c | 3 ++- tests/hkl-geometry-t.c | 47 +++++++++++++++++++++++++++++------------------ 2 files changed, 31 insertions(+), 19 deletions(-) commit 8d5f2194fe38d13dc4c7928d02bf95d45247b59b Author: Picca Frédéric-Emmanuel Date: Thu Aug 7 16:08:20 2014 +0200 add all HklParameter tests tests/hkl-parameter-t.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 412cbe4a8582de54112ceedafcbeb040188f468e Author: Picca Frédéric-Emmanuel Date: Thu Aug 7 14:37:29 2014 +0200 rename hkl_factory_axes_names_get -> hkl_geometry_axes_names_get gui/hkl-gui-modelcolumns.h | 4 ++-- gui/hkl-gui.cpp | 8 ++++---- hkl.h | 7 ++++--- hkl/hkl-binding-private.h | 7 ++++--- hkl/hkl-binding.c | 18 +++++++++--------- hkl/hkl-factory-private.h | 12 ++++++++++++ hkl/hkl-factory.c | 25 ------------------------- hkl/hkl-geometry.c | 14 ++++++++++++++ tests/bindings/python.py | 8 +------- tests/bindings/trajectory.py | 8 ++++---- tests/hkl-pseudoaxis-t.c | 5 ++++- 11 files changed, 58 insertions(+), 58 deletions(-) commit defdc993693be7c258bfb3b06e2c3d9f499a8043 Author: Frédéric-Emmanuel PICCA Date: Fri Jul 11 16:36:55 2014 +0200 add an unit test for the soleil med 2+3 diffractometer. hkl/hkl-pseudoaxis-auto-private.h | 2 +- hkl/hkl-pseudoaxis-auto.c | 33 ++++++++++++++- hkl/hkl-pseudoaxis-common-hkl.c | 4 +- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 12 +++--- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 69 +++++++++++++++++++++++++++++++- 5 files changed, 108 insertions(+), 12 deletions(-) commit 46ca796c6d93bd594389214c07e1a2fbe1e558b1 Author: cristal Date: Thu Jul 10 13:49:20 2014 +0200 remove the hkl_engine_list_pseudo_axis_get_by_name hkl.h | 4 ---- hkl/hkl-pseudoaxis.c | 35 ----------------------------------- 2 files changed, 39 deletions(-) commit a9a85663ed5dd8686b0cd84aa7bd07be4069e482 Author: cristal Date: Thu Jul 10 10:55:09 2014 +0200 hkl_geometry_new_copy is now part of the public API hkl.h | 2 ++ hkl/hkl-geometry-private.h | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) commit e716485b9b6338c3d004e0a4199879b2d713c1c8 Author: cristal Date: Thu Jul 10 10:47:47 2014 +0200 now the hkl_lattice_get/get take an HklUnitEnum. hkl.h | 5 ++-- hkl/hkl-lattice.c | 53 +++++++++++++++++++++++---------- tests/bindings/python.py | 22 +++++++------- tests/bindings/trajectory.py | 12 ++++---- tests/hkl-lattice-t.c | 70 +++++++++++++++++++++++--------------------- tests/hkl-sample-t.c | 5 ++-- 6 files changed, 96 insertions(+), 71 deletions(-) commit 1b5e517ce4fd7bc0509ed022b525c96aa4b35a4a Author: cristal Date: Wed Jul 9 16:09:40 2014 +0200 change the HklEngineInfo pseudo_axes from const char * -> darray_string hkl/hkl-pseudoaxis-common-eulerians.c | 4 +--- hkl/hkl-pseudoaxis-common-hkl.c | 3 +-- hkl/hkl-pseudoaxis-common-psi.c | 3 +-- hkl/hkl-pseudoaxis-common-q.c | 9 +++------ hkl/hkl-pseudoaxis-private.h | 3 +-- hkl/hkl-pseudoaxis.c | 10 +++++----- 6 files changed, 12 insertions(+), 20 deletions(-) commit ccf4b097757a9a2ddefc6c8f79fe26f290eb5901 Author: cristal Date: Wed Jul 9 15:43:47 2014 +0200 remove hkl_return_val_if_fail by its glib counterpart hkl/hkl-macros-private.h | 2 -- hkl/hkl-pseudoaxis-auto-private.h | 2 +- hkl/hkl-pseudoaxis-auto.c | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 2 +- hkl/hkl-pseudoaxis-common-psi.c | 2 +- hkl/hkl-pseudoaxis-private.h | 4 ++-- hkl/hkl-pseudoaxis.c | 2 +- 7 files changed, 7 insertions(+), 9 deletions(-) commit 766277463be6e0c0c25b3a78d5ccfe1bbe523954 Author: cristal Date: Wed Jul 9 15:05:33 2014 +0200 change the signature of the hkl_factory_axes_names_get now it return a darray_string gui/hkl-gui-modelcolumns.h | 8 ++++---- gui/hkl-gui.cpp | 42 +++++++++++++++++++++++------------------- hkl.h | 3 +-- hkl/hkl-binding-private.h | 3 +++ hkl/hkl-binding.c | 21 +++++++++++++++++++++ hkl/hkl-factory.c | 26 +++++++++++--------------- tests/hkl-pseudoaxis-t.c | 16 ++++++++-------- 7 files changed, 71 insertions(+), 48 deletions(-) commit 2acc64c6600646e2d57ddd95736013a5b1a791a8 Author: cristal Date: Wed Jul 9 14:28:21 2014 +0200 rename hkl_factory_name -> hkl_factory_name_get for consistency gui/hkl-gui.cpp | 2 +- hkl.h | 2 +- hkl/hkl-binding.c | 2 +- hkl/hkl-factory.c | 2 +- hkl/hkl-geometry.c | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) commit d76ba68747646261b77a6c557cfad50d4aea7f41 Author: cristal Date: Wed Jul 9 14:12:44 2014 +0200 rework the sample reflection part to be similar to HklGeometryList rename hkl_sample_first_reflection_get -> hkl_sample_reflections_first_get rename hkl_sample_next_reflection_get -> hkl_sample_reflections_next_get add hkl_sample_n_reflections_get which return the number of reflection in the list HKL_SAMPLE_REFLECTIONS_FOREACH maxro to iterate over the reflections gui/hkl-gui-callbacks.cpp | 4 ++-- gui/hkl-gui.cpp | 4 ++-- hkl.h | 14 ++++++++++---- hkl/hkl-sample-private.h | 1 + hkl/hkl-sample.c | 27 ++++++++++++++++++++++----- tests/hkl-sample-t.c | 13 +++++++++---- 6 files changed, 46 insertions(+), 17 deletions(-) commit 0e23d738e1d4fbfd7077ca9ee08cdb5ace7d957a Author: cristal Date: Wed Jul 9 13:46:28 2014 +0200 make the HklDetector copy constructor public hkl.h | 6 ++++-- hkl/hkl-detector-private.h | 2 -- 2 files changed, 4 insertions(+), 4 deletions(-) commit 95b91bb89bd1ecb3f5fe103566eebd6f254f542a Author: cristal Date: Wed Jul 9 12:39:45 2014 +0200 add hkl_geometry_axes_values_get/set hkl.h | 9 ++++++++ hkl/hkl-binding-private.h | 12 ++++------ hkl/hkl-binding.c | 33 ++++----------------------- hkl/hkl-geometry.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++ hkl/hkl-pseudoaxis.c | 6 ++--- tests/hkl-geometry-t.c | 33 ++++++++++++++------------- 6 files changed, 96 insertions(+), 55 deletions(-) commit dd5f6536e6516ed01a0cf9e1dd2872c66932b5e3 Author: cristal Date: Wed Jul 9 10:47:23 2014 +0200 (add hkl_engine_axes_names_get now an HklEngine can return a darray_string of the axes involve where reading or writing on it. hkl.h | 9 +++- hkl/hkl-binding-private.h | 4 ++ hkl/hkl-binding.c | 21 ++++++++++ hkl/hkl-macros-private.h | 2 + hkl/hkl-pseudoaxis-auto-private.h | 9 ++-- hkl/hkl-pseudoaxis-auto.c | 13 +++--- hkl/hkl-pseudoaxis-common-eulerians.c | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 26 ++++++------ hkl/hkl-pseudoaxis-common-psi.c | 2 +- hkl/hkl-pseudoaxis-common-q.c | 6 +-- hkl/hkl-pseudoaxis-e4c-hkl.c | 21 ++++++---- hkl/hkl-pseudoaxis-e4c-psi.c | 2 +- hkl/hkl-pseudoaxis-e6c-hkl.c | 65 ++++++++++++++++------------ hkl/hkl-pseudoaxis-e6c-psi.c | 5 ++- hkl/hkl-pseudoaxis-k4cv-hkl.c | 12 +++--- hkl/hkl-pseudoaxis-k4cv-psi.c | 2 +- hkl/hkl-pseudoaxis-k6c-hkl.c | 70 ++++++++++++++++++------------- hkl/hkl-pseudoaxis-k6c-psi.c | 5 ++- hkl/hkl-pseudoaxis-petra3-hkl.c | 35 +++++++++------- hkl/hkl-pseudoaxis-private.h | 32 +++++++------- hkl/hkl-pseudoaxis-soleil-sirius-turret.c | 5 ++- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 52 +++++++++++++---------- hkl/hkl-pseudoaxis-zaxis-hkl.c | 7 ++-- hkl/hkl-pseudoaxis.c | 43 +++++++++++++++---- tests/bindings/python.py | 6 ++- tests/hkl-pseudoaxis-t.c | 59 +++++++++++++++++++++++++- 26 files changed, 344 insertions(+), 171 deletions(-) commit 4553826ef069e20bce620bdd212d5b91b1b63187 Author: cristal Date: Tue Jul 8 14:41:05 2014 +0200 move the HklPseudoAxis class into the hkl-pseudoaxis-private part hkl.h | 1 - hkl/hkl-pseudoaxis-private.h | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) commit 9abe58b717c585d67e225678233d5eb27f3e1164 Author: Picca Frédéric-Emmanuel Date: Sun Jul 6 22:02:36 2014 +0200 (wip) rework of the pseudo axis part now the set method return the HklGeometryList. It is now the responsability of the API user to release the memory by calling hkl_geometry_list_free on the returned geometries. fix the hkl-pseudoaxis-e6c petra2_3 test by using hkl_method_set_hkl_real for the psi_constant_vertical_mode_operations. This setter compute also a set of solutions by using the z-axis strategie which consist in a rotation of the sample around the latest axis and a fit of the detector position. move the hkl_pseudo...randomize methodes into the hkl tap library instead of the public API. - Add the HklEngine Capabilities you can get them with hkl_engine_capabilities_get this tells you if an HklEngine is READABLE, WRITABLE, INITIALIZABLE - add a new hkl_engine_initialized_get/set if an HklEngine is INITIALIZABLE you can set the value to TRUE. depending on the Mode, this can changes the mode parameters, save the diffractometer current position, ... Documentation/sphinx/source/development.rst | 2 +- Documentation/sphinx/source/test.py | 2 +- gui/hkl-gui-callbacks.cpp | 27 +- gui/hkl-gui-pseudoaxes.cpp | 20 +- gui/hkl-gui.cpp | 19 +- gui/hkl-gui.h | 2 +- hkl.h | 66 +-- hkl/hkl-binding-private.h | 4 - hkl/hkl-binding.c | 59 --- hkl/hkl-geometry-private.h | 2 - hkl/hkl-pseudoaxis-auto-private.h | 89 ++-- hkl/hkl-pseudoaxis-auto.c | 38 +- hkl/hkl-pseudoaxis-common-eulerians.c | 12 +- hkl/hkl-pseudoaxis-common-hkl-private.h | 16 +- hkl/hkl-pseudoaxis-common-hkl.c | 116 +++--- hkl/hkl-pseudoaxis-common-psi.c | 79 ++-- hkl/hkl-pseudoaxis-common-q.c | 12 +- hkl/hkl-pseudoaxis-e4c-hkl.c | 34 +- hkl/hkl-pseudoaxis-e4c-psi.c | 2 +- hkl/hkl-pseudoaxis-e6c-hkl.c | 65 +-- hkl/hkl-pseudoaxis-e6c-psi.c | 2 +- hkl/hkl-pseudoaxis-k4cv-hkl.c | 30 +- hkl/hkl-pseudoaxis-k4cv-psi.c | 2 +- hkl/hkl-pseudoaxis-k6c-hkl.c | 72 ++-- hkl/hkl-pseudoaxis-k6c-psi.c | 2 +- hkl/hkl-pseudoaxis-petra3-hkl.c | 35 +- hkl/hkl-pseudoaxis-private.h | 622 +++++++++++++++++++++------- hkl/hkl-pseudoaxis-soleil-sirius-turret.c | 5 +- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 15 +- hkl/hkl-pseudoaxis-zaxis-hkl.c | 10 +- hkl/hkl-pseudoaxis.c | 509 ++++++----------------- tests/bindings/Makefile.am | 2 +- tests/bindings/python.py | 33 +- tests/bindings/trajectory.py | 11 +- tests/hkl-bench-t.c | 55 +-- tests/hkl-pseudoaxis-e4ch-t.c | 108 ++--- tests/hkl-pseudoaxis-e4cv-t.c | 101 ++--- tests/hkl-pseudoaxis-e6c-t.c | 144 +++---- tests/hkl-pseudoaxis-k4cv-t.c | 80 ++-- tests/hkl-pseudoaxis-k6c-t.c | 109 +++-- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 19 +- tests/hkl-pseudoaxis-t.c | 70 +++- tests/hkl-pseudoaxis-zaxis-t.c | 15 +- tests/tap/hkl-tap.c | 57 ++- tests/tap/hkl-tap.h | 8 +- 45 files changed, 1442 insertions(+), 1340 deletions(-) commit 54c71cf33c5525b5fec485cc4e05173f7f502f9c Author: Frédéric-Emmanuel PICCA Date: Mon Jun 23 10:36:28 2014 +0200 run ccan-update this is to prepare the inclusion of htable in the futur. hkl/ccan/Makefile.am | 22 ++-- hkl/ccan/autodata/autodata.h | 3 +- hkl/ccan/compiler/compiler.h | 30 +++-- hkl/ccan/container_of/container_of.h | 2 +- hkl/ccan/list/list.h | 91 ++++++++++---- hkl/ccan/str/LICENSE | 1 + hkl/ccan/str/debug.c | 108 +++++++++++++++++ hkl/ccan/str/str.c | 13 ++ hkl/ccan/str/str.h | 228 +++++++++++++++++++++++++++++++++++ hkl/ccan/str/str_debug.h | 30 +++++ 10 files changed, 484 insertions(+), 44 deletions(-) commit 94cb46bab46a187f6a507269f7d31b1906693687 Author: Picca Frédéric-Emmanuel Date: Sun Jun 22 23:32:42 2014 +0200 Rework the unit part of the hkl library Prepare the final API for the inclusion of the udunits library. This will allow to set the user unit prefered output of the instrumented methods. until now this was mostly used for radian to degree convertion. But we can imagine other convertions in the futur. the binding API also changed gui/hkl-gui-callbacks.cpp | 66 ++++++------- gui/hkl-gui-modelcolumns.h | 2 +- gui/hkl-gui-pseudoaxes.cpp | 11 ++- gui/hkl-gui.cpp | 128 +++++++++++++------------ hkl.h | 59 +++++++----- hkl/hkl-axis.c | 25 +---- hkl/hkl-binding-private.h | 17 ++-- hkl/hkl-binding.c | 59 +++++------- hkl/hkl-factory.c | 30 +++--- hkl/hkl-geometry-private.h | 3 - hkl/hkl-geometry.c | 53 +++++------ hkl/hkl-lattice.c | 123 ++++++++++++++---------- hkl/hkl-parameter-private.h | 26 ++---- hkl/hkl-parameter.c | 155 +++++++++++++++---------------- hkl/hkl-pseudoaxis-auto.c | 1 + hkl/hkl-pseudoaxis-common-eulerians.c | 9 +- hkl/hkl-pseudoaxis-common-hkl.c | 20 ++-- hkl/hkl-pseudoaxis-private.h | 3 +- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 6 +- hkl/hkl-pseudoaxis.c | 17 ++-- hkl/hkl-sample.c | 86 ++++++++--------- hkl/hkl-unit-private.h | 2 +- tests/bindings/python.py | 31 +++---- tests/bindings/trajectory.py | 18 ++-- tests/hkl-axis-t.c | 64 ++++++------- tests/hkl-bench-t.c | 10 +- tests/hkl-detector-t.c | 4 +- tests/hkl-geometry-t.c | 65 ++++++------- tests/hkl-lattice-t.c | 131 +++++++++++++------------- tests/hkl-parameter-t.c | 12 +-- tests/hkl-pseudoaxis-e4ch-t.c | 62 +++++++------ tests/hkl-pseudoaxis-e4cv-t.c | 52 +++++------ tests/hkl-pseudoaxis-e6c-t.c | 54 +++++------ tests/hkl-pseudoaxis-k4cv-t.c | 12 +-- tests/hkl-pseudoaxis-k6c-t.c | 19 ++-- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 12 ++- tests/hkl-pseudoaxis-t.c | 7 +- tests/hkl-pseudoaxis-zaxis-t.c | 10 +- tests/hkl-sample-t.c | 94 ++++++++++++------- tests/hkl3d-test-t.c | 27 +++--- tests/tap/hkl-tap.c | 4 +- 41 files changed, 817 insertions(+), 772 deletions(-) commit 44e92c5c15ab05fd489e47bac08bb7b2527c6f25 Author: Picca Frédéric-Emmanuel Date: Sun Jun 22 08:25:14 2014 +0200 Add all the GError were it can be usefull for the final API also solve two bugs - an wrong #if -> #ifdef for debugging purpose - another ... variadic issue int -> float in the bench test I should really remove this hkl_geometry_set_values_unit_v method for the final API Documentation/api/hkl-docs.sgml | 3 +- gui/hkl-gui-callbacks.cpp | 93 +++++++++------ gui/hkl-gui-pseudoaxes.cpp | 16 +-- gui/hkl-gui.cpp | 12 +- hkl.h | 119 ++++++++++++------- hkl/hkl-axis.c | 31 +++-- hkl/hkl-binding-private.h | 3 +- hkl/hkl-binding.c | 14 ++- hkl/hkl-factory.c | 2 +- hkl/hkl-geometry-private.h | 17 ++- hkl/hkl-geometry.c | 120 ++++++++++++++++--- hkl/hkl-lattice-private.h | 11 ++ hkl/hkl-lattice.c | 168 +++++++++++++++++--------- hkl/hkl-parameter-private.h | 40 +++++-- hkl/hkl-parameter.c | 53 ++++++--- hkl/hkl-pseudoaxis-common-hkl.c | 2 +- hkl/hkl-pseudoaxis-private.h | 41 ++++--- hkl/hkl-pseudoaxis.c | 198 ++++++++++++++++++++++--------- hkl/hkl-sample-private.h | 11 ++ hkl/hkl-sample.c | 106 +++++++++++++---- tests/hkl-axis-t.c | 10 +- tests/hkl-bench-t.c | 19 +-- tests/hkl-geometry-t.c | 102 ++++++++++++++-- tests/hkl-lattice-t.c | 57 +++++++-- tests/hkl-parameter-t.c | 33 +++++- tests/hkl-pseudoaxis-e4ch-t.c | 55 ++++----- tests/hkl-pseudoaxis-e4cv-t.c | 55 ++++----- tests/hkl-pseudoaxis-e6c-t.c | 63 +++++----- tests/hkl-pseudoaxis-k4cv-t.c | 30 ++--- tests/hkl-pseudoaxis-k6c-t.c | 43 +++---- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 8 +- tests/hkl-pseudoaxis-t.c | 2 +- tests/hkl-pseudoaxis-zaxis-t.c | 11 +- tests/hkl-sample-t.c | 121 ++++++++++--------- 34 files changed, 1139 insertions(+), 530 deletions(-) commit bb13ab9901ae5f55f360ad01428f7a9192d603ed Author: Frédéric-Emmanuel PICCA Date: Tue Jun 17 16:03:37 2014 +0200 use TRUE/FALSE from Glib instead of HKL_TRUE/FALSE Documentation/sphinx/source/development.rst | 6 ++-- hkl.h | 3 -- hkl/hkl-axis.c | 20 ++++++------ hkl/hkl-detector.c | 4 +-- hkl/hkl-geometry.c | 16 ++++----- hkl/hkl-interval.c | 6 ++-- hkl/hkl-lattice.c | 34 ++++++++++---------- hkl/hkl-matrix.c | 12 +++---- hkl/hkl-parameter-private.h | 16 ++++----- hkl/hkl-parameter.c | 4 +-- hkl/hkl-pseudoaxis-auto-private.h | 4 +-- hkl/hkl-pseudoaxis-auto.c | 24 +++++++------- hkl/hkl-pseudoaxis-common-eulerians.c | 12 +++---- hkl/hkl-pseudoaxis-common-hkl.c | 24 +++++++------- hkl/hkl-pseudoaxis-common-psi.c | 16 ++++----- hkl/hkl-pseudoaxis-common-q.c | 6 ++-- hkl/hkl-pseudoaxis-private.h | 12 +++---- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 6 ++-- hkl/hkl-pseudoaxis.c | 50 ++++++++++++++--------------- hkl/hkl-quaternion.c | 6 ++-- hkl/hkl-sample.c | 16 ++++----- hkl/hkl-source.c | 6 ++-- hkl/hkl-unit.c | 12 +++---- hkl/hkl-vector.c | 24 +++++++------- tests/hkl-axis-t.c | 22 ++++++------- tests/hkl-bench-t.c | 2 +- tests/hkl-geometry-t.c | 10 +++--- tests/hkl-interval-t.c | 28 ++++++++-------- tests/hkl-lattice-t.c | 16 ++++----- tests/hkl-matrix-t.c | 14 ++++---- tests/hkl-parameter-t.c | 36 ++++++++++----------- tests/hkl-pseudoaxis-e4ch-t.c | 24 +++++++------- tests/hkl-pseudoaxis-e4cv-t.c | 24 +++++++------- tests/hkl-pseudoaxis-e6c-t.c | 24 +++++++------- tests/hkl-pseudoaxis-k4cv-t.c | 12 +++---- tests/hkl-pseudoaxis-k6c-t.c | 16 ++++----- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 4 +-- tests/hkl-pseudoaxis-t.c | 12 +++---- tests/hkl-pseudoaxis-zaxis-t.c | 6 ++-- tests/hkl-quaternion-t.c | 18 +++++------ tests/hkl-sample-t.c | 10 +++--- tests/hkl-source-t.c | 6 ++-- tests/hkl-unit-t.c | 4 +-- tests/hkl-vector-t.c | 4 +-- tests/tap/hkl-tap.c | 2 +- 45 files changed, 315 insertions(+), 318 deletions(-) commit 394a29feb6579a84260d8aef04911c074be3e0a3 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 17 15:57:59 2014 +0200 rename HKL_BEGIN/END_DECLS -> G_BEGIN/END_DECLS Documentation/sphinx/source/development.rst | 4 ++-- hkl.h | 13 ++----------- hkl/hkl-axis-private.h | 4 ++-- hkl/hkl-binding-private.h | 4 ++-- hkl/hkl-detector-private.h | 4 ++-- hkl/hkl-factory-private.h | 4 ++-- hkl/hkl-geometry-private.h | 4 ++-- hkl/hkl-interval-private.h | 6 +++--- hkl/hkl-lattice-private.h | 4 ++-- hkl/hkl-macros-private.h | 6 +++--- hkl/hkl-matrix-private.h | 4 ++-- hkl/hkl-parameter-private.h | 4 ++-- hkl/hkl-pseudoaxis-auto-private.h | 4 ++-- hkl/hkl-pseudoaxis-common-eulerians-private.h | 4 ++-- hkl/hkl-pseudoaxis-common-psi-private.h | 4 ++-- hkl/hkl-pseudoaxis-common-q-private.h | 4 ++-- hkl/hkl-pseudoaxis-e4c-private.h | 6 +++--- hkl/hkl-pseudoaxis-e6c-private.h | 6 +++--- hkl/hkl-pseudoaxis-k4cv-private.h | 6 +++--- hkl/hkl-pseudoaxis-k6c-private.h | 6 +++--- hkl/hkl-pseudoaxis-petra3-private.h | 6 +++--- hkl/hkl-pseudoaxis-private.h | 4 ++-- hkl/hkl-pseudoaxis-soleil-sirius-turret-private.h | 4 ++-- hkl/hkl-pseudoaxis-soleil-sixs-med-private.h | 6 +++--- hkl/hkl-pseudoaxis-zaxis-private.h | 6 +++--- hkl/hkl-quaternion-private.h | 6 +++--- hkl/hkl-sample-private.h | 4 ++-- hkl/hkl-source-private.h | 6 +++--- hkl/hkl-unit-private.h | 6 +++--- hkl/hkl-vector-private.h | 6 +++--- tests/tap/hkl-tap.h | 4 ++-- 31 files changed, 75 insertions(+), 84 deletions(-) commit 9859742e524517d100451a7da65fb552d0a4165d Author: Frédéric-Emmanuel PICCA Date: Tue Jun 17 15:45:50 2014 +0200 rename HklError -> GError now GLib is a required dependency. It was tested with the RHEL4 version 2.3.4. So this should not be problematic Documentation/sphinx/source/development.rst | 5 +- NEWS | 2 +- configure.ac | 4 +- gui/hkl-gui.cpp | 4 +- gui/hkl-gui.h | 2 +- hkl.h | 25 +-- hkl/Makefile.am | 13 +- hkl/hkl-axis.c | 4 +- hkl/hkl-binding.c | 20 +- hkl/hkl-error-private.h | 72 ------ hkl/hkl-error.c | 335 ---------------------------- hkl/hkl-parameter-private.h | 8 +- hkl/hkl-parameter.c | 4 +- hkl/hkl-pseudoaxis-auto-private.h | 21 +- hkl/hkl-pseudoaxis-auto.c | 24 +- hkl/hkl-pseudoaxis-common-eulerians.c | 25 ++- hkl/hkl-pseudoaxis-common-hkl-private.h | 6 +- hkl/hkl-pseudoaxis-common-hkl.c | 43 +++- hkl/hkl-pseudoaxis-common-psi.c | 48 +++- hkl/hkl-pseudoaxis-common-q.c | 6 +- hkl/hkl-pseudoaxis-private.h | 33 ++- hkl/hkl-pseudoaxis.c | 64 ++++-- hkl/hkl-types.c | 13 -- hkl/hkl-types.h | 4 - tests/Makefile.am | 6 +- tests/hkl-error-t.c | 122 ---------- tests/tap/Makefile.am | 4 +- 27 files changed, 242 insertions(+), 675 deletions(-) commit af5978fce0dc396e8c4a4abefeefacd8b0c8e832 Author: Frédéric-Emmanuel PICCA Date: Mon Jun 16 12:33:46 2014 +0200 rename hkl_engine_parameters_set -> hkl_engine_parameters_values_set hkl.h | 6 +++--- hkl/hkl-pseudoaxis.c | 8 ++++---- tests/hkl-pseudoaxis-e4ch-t.c | 14 +++++++------- tests/hkl-pseudoaxis-e4cv-t.c | 16 ++++++++-------- tests/hkl-pseudoaxis-e6c-t.c | 16 ++++++++-------- 5 files changed, 30 insertions(+), 30 deletions(-) commit 0ac9e22294c48615e8a817c4c1c646fa8f872c64 Author: Frédéric-Emmanuel PICCA Date: Mon Jun 16 13:05:27 2014 +0200 add a few test to the python binding for engine parameters hkl/hkl-binding-private.h | 4 ++-- tests/bindings/python.py | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) commit 5270c9f771f99d620845fa0485256c93c1fcd9c7 Author: Frédéric-Emmanuel PICCA Date: Mon Jun 16 11:11:58 2014 +0200 fix the refactoring script to work directly form its directory scripts/refactoring | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 3dc6576ac7241752d2b9d8aa42e98801e1fd2a76 Author: Frédéric-Emmanuel PICCA Date: Mon Jun 16 13:01:03 2014 +0200 rename hkl_engine_modes_get -> hkl_engine_modes_names_get add also a gdb target to the binding test (this way it is easyer to debug segfaut in the python part. gui/hkl-gui-pseudoaxes.cpp | 2 +- hkl.h | 2 +- hkl/hkl-binding-private.h | 4 ++-- hkl/hkl-binding.c | 6 +++--- hkl/hkl-pseudoaxis.c | 4 ++-- tests/bindings/Makefile.am | 5 ++++- tests/bindings/python.py | 8 ++++---- tests/bindings/trajectory.py | 2 +- tests/hkl-bench-t.c | 4 ++-- tests/hkl-pseudoaxis-e4ch-t.c | 6 +++--- tests/hkl-pseudoaxis-e4cv-t.c | 6 +++--- tests/hkl-pseudoaxis-e6c-t.c | 4 ++-- tests/hkl-pseudoaxis-k4cv-t.c | 6 +++--- tests/hkl-pseudoaxis-k6c-t.c | 6 +++--- tests/hkl-pseudoaxis-t.c | 2 +- 15 files changed, 35 insertions(+), 32 deletions(-) commit cccb4c2b169cd3098fd744d1d0774c9f79dfb1a0 Author: Frédéric-Emmanuel PICCA Date: Mon Jun 16 10:38:24 2014 +0200 fix the distcheck target with a working graphic card it is now possible to regenerate the documentation figures. Documentation/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 442ebce07ded84269838435f847d739b1ad243ff Author: Picca Frédéric-Emmanuel Date: Wed Jun 4 18:59:20 2014 +0200 comment and todo for optimisation on my T40 this todo seems to produce a big increase of time in the bench hkl.h | 1 + 1 file changed, 1 insertion(+) commit 28eac129b2c804d29793722602fa688cd6cc105e Author: Picca Frédéric-Emmanuel Date: Wed Jun 4 12:16:58 2014 +0200 get rid of all the hkl_parameter_list methods hkl/hkl-binding.c | 92 ++++------------------------- hkl/hkl-parameter-private.h | 29 +--------- hkl/hkl-parameter.c | 125 ---------------------------------------- hkl/hkl-pseudoaxis-common-psi.c | 12 ++-- hkl/hkl-pseudoaxis-k4cv-hkl.c | 30 ++-------- hkl/hkl-pseudoaxis-k6c-hkl.c | 29 +++------- hkl/hkl-pseudoaxis-private.h | 14 ++++- hkl/hkl-pseudoaxis.c | 15 ++++- 8 files changed, 57 insertions(+), 289 deletions(-) commit bebff6f4681465f2f96ac10a5d757b159813478e Author: Picca Frédéric-Emmanuel Date: Wed Jun 4 09:48:48 2014 +0200 forgot one file hkl/hkl-pseudoaxis-soleil-sirius-turret.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 624e2ec04d191c347fa6a69b68c863a91afce8ea Author: Picca Frédéric-Emmanuel Date: Wed Jun 4 09:44:07 2014 +0200 upgrading copyright year from 2013 to 2014 gui/hkl-gui-3d.cpp | 2 +- gui/hkl-gui-3d.h | 2 +- gui/hkl-gui-callbacks.cpp | 2 +- gui/hkl-gui-modelcolumns.h | 2 +- gui/hkl-gui-pseudoaxes.cpp | 2 +- gui/hkl-gui-pseudoaxes.h | 2 +- gui/hkl-gui.cpp | 2 +- gui/hkl-gui.h | 2 +- gui/hkl3d/GL_ShapeDrawer.cpp | 2 +- gui/hkl3d/GL_ShapeDrawer.h | 2 +- gui/hkl3d/hkl3d-gui-model.cpp | 2 +- gui/hkl3d/hkl3d-gui-model.h | 2 +- gui/hkl3d/hkl3d-gui-scene.cpp | 2 +- gui/hkl3d/hkl3d-gui-scene.h | 2 +- gui/hkl3d/hkl3d-gui-view.cpp | 2 +- gui/hkl3d/hkl3d-gui-view.h | 2 +- gui/main.cpp | 2 +- hkl.h | 2 +- hkl/hkl-axis-private.h | 2 +- hkl/hkl-axis.c | 2 +- hkl/hkl-binding-private.h | 2 +- hkl/hkl-binding.c | 2 +- hkl/hkl-detector-factory.c | 2 +- hkl/hkl-detector-private.h | 2 +- hkl/hkl-detector.c | 2 +- hkl/hkl-factory-private.h | 2 +- hkl/hkl-factory.c | 2 +- hkl/hkl-geometry-private.h | 2 +- hkl/hkl-geometry.c | 2 +- hkl/hkl-interval-private.h | 2 +- hkl/hkl-interval.c | 2 +- hkl/hkl-lattice-private.h | 2 +- hkl/hkl-lattice.c | 2 +- hkl/hkl-macros-private.h | 2 +- hkl/hkl-macros.c | 2 +- hkl/hkl-matrix-private.h | 2 +- hkl/hkl-matrix.c | 2 +- hkl/hkl-parameter-private.h | 2 +- hkl/hkl-parameter.c | 2 +- hkl/hkl-pseudoaxis-auto-private.h | 2 +- hkl/hkl-pseudoaxis-auto.c | 2 +- hkl/hkl-pseudoaxis-common-eulerians-private.h | 2 +- hkl/hkl-pseudoaxis-common-eulerians.c | 2 +- hkl/hkl-pseudoaxis-common-hkl-private.h | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 2 +- hkl/hkl-pseudoaxis-common-psi-private.h | 2 +- hkl/hkl-pseudoaxis-common-psi.c | 2 +- hkl/hkl-pseudoaxis-common-q-private.h | 2 +- hkl/hkl-pseudoaxis-common-q.c | 2 +- hkl/hkl-pseudoaxis-e4c-hkl.c | 2 +- hkl/hkl-pseudoaxis-e4c-private.h | 2 +- hkl/hkl-pseudoaxis-e4c-psi.c | 2 +- hkl/hkl-pseudoaxis-e6c-hkl.c | 2 +- hkl/hkl-pseudoaxis-e6c-private.h | 2 +- hkl/hkl-pseudoaxis-e6c-psi.c | 2 +- hkl/hkl-pseudoaxis-k4cv-hkl.c | 2 +- hkl/hkl-pseudoaxis-k4cv-private.h | 2 +- hkl/hkl-pseudoaxis-k4cv-psi.c | 2 +- hkl/hkl-pseudoaxis-k6c-hkl.c | 2 +- hkl/hkl-pseudoaxis-k6c-private.h | 2 +- hkl/hkl-pseudoaxis-k6c-psi.c | 2 +- hkl/hkl-pseudoaxis-petra3-hkl.c | 2 +- hkl/hkl-pseudoaxis-petra3-private.h | 2 +- hkl/hkl-pseudoaxis-private.h | 2 +- hkl/hkl-pseudoaxis-soleil-sixs-med-private.h | 2 +- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 2 +- hkl/hkl-pseudoaxis-zaxis-hkl.c | 2 +- hkl/hkl-pseudoaxis-zaxis-private.h | 2 +- hkl/hkl-pseudoaxis.c | 2 +- hkl/hkl-quaternion-private.h | 2 +- hkl/hkl-quaternion.c | 2 +- hkl/hkl-sample-private.h | 2 +- hkl/hkl-sample.c | 2 +- hkl/hkl-source-private.h | 2 +- hkl/hkl-source.c | 2 +- hkl/hkl-types.c | 2 +- hkl/hkl-types.h | 2 +- hkl/hkl-unit-private.h | 2 +- hkl/hkl-unit.c | 2 +- hkl/hkl-vector-private.h | 2 +- hkl/hkl-vector.c | 2 +- hkl3d/hkl3d.h | 2 +- tests/hkl-axis-t.c | 2 +- tests/hkl-bench-t.c | 2 +- tests/hkl-detector-t.c | 2 +- tests/hkl-error-t.c | 2 +- tests/hkl-geometry-t.c | 2 +- tests/hkl-interval-t.c | 2 +- tests/hkl-lattice-t.c | 2 +- tests/hkl-matrix-t.c | 2 +- tests/hkl-parameter-t.c | 2 +- tests/hkl-pseudoaxis-e4ch-t.c | 2 +- tests/hkl-pseudoaxis-e4cv-t.c | 2 +- tests/hkl-pseudoaxis-e6c-t.c | 2 +- tests/hkl-pseudoaxis-k4cv-t.c | 2 +- tests/hkl-pseudoaxis-k6c-t.c | 2 +- tests/hkl-pseudoaxis-t.c | 2 +- tests/hkl-pseudoaxis-zaxis-t.c | 2 +- tests/hkl-quaternion-t.c | 2 +- tests/hkl-sample-t.c | 2 +- tests/hkl-source-t.c | 2 +- tests/hkl-unit-t.c | 2 +- tests/hkl-vector-t.c | 2 +- tests/hkl3d-test-t.c | 2 +- tests/tap/hkl-tap.h | 2 +- 105 files changed, 105 insertions(+), 105 deletions(-) commit c06a86c321e3eef55d63e996bca18b00652c4f38 Author: Picca Frédéric-Emmanuel Date: Wed Jun 4 09:43:49 2014 +0200 add the update_copyright_year script this script set the last copyright year with the current one. scripts/update_copyright_year | 8 ++++++++ 1 file changed, 8 insertions(+) commit 3f2786fd9791eb2aef1cef2c8ae1edfdb04aefc6 Author: Frédéric-Emmanuel PICCA Date: Mon Jun 2 11:29:48 2014 +0200 rename hkl_engine_parameters_get -> hkl_engine_parameters_names_get gui/hkl-gui-pseudoaxes.cpp | 2 +- gui/hkl-gui.cpp | 2 +- hkl.h | 2 +- hkl/hkl-binding.c | 6 +++--- hkl/hkl-pseudoaxis.c | 4 ++-- tests/hkl-bench-t.c | 4 ++-- tests/hkl-pseudoaxis-e4ch-t.c | 2 +- tests/hkl-pseudoaxis-e4cv-t.c | 2 +- tests/hkl-pseudoaxis-e6c-t.c | 2 +- tests/hkl-pseudoaxis-k4cv-t.c | 4 ++-- tests/hkl-pseudoaxis-k6c-t.c | 4 ++-- 11 files changed, 17 insertions(+), 17 deletions(-) commit 6a36918327b8228ef213259bf40cf17d0ed54ec5 Author: Picca Frédéric-Emmanuel Date: Wed May 21 18:41:06 2014 +0200 rename hkl_engine_pseudo_axes_get -> hkl_engine_pseudo_axes_names_get gui/hkl-gui-pseudoaxes.cpp | 2 +- gui/hkl-gui.cpp | 2 +- hkl.h | 2 +- hkl/hkl-pseudoaxis.c | 4 ++-- tests/hkl-pseudoaxis-t.c | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) commit 6fb3c8fe217e1db4a457151496027559a3b84732 Author: Picca Frédéric-Emmanuel Date: Wed May 21 18:23:50 2014 +0200 typo hkl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d18d82f2f49405a068c8b5d922ce95cbaa301089 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 3 15:48:20 2014 +0200 HklParameterList is now private gui/hkl-gui-callbacks.cpp | 10 ++- gui/hkl-gui-modelcolumns.h | 8 +- gui/hkl-gui-pseudoaxes.cpp | 12 +-- gui/hkl-gui.cpp | 26 +++---- gui/hkl-gui.h | 2 +- hkl.h | 38 +++++----- hkl/Makefile.am | 5 +- hkl/hkl-binding-private.h | 12 +-- hkl/hkl-binding.c | 29 +++++++ hkl/hkl-geometry-private.h | 1 + hkl/hkl-parameter-private.h | 21 +++++- hkl/hkl-pseudoaxis-private.h | 5 +- hkl/hkl-pseudoaxis.c | 126 ++++++++++++++++++++++++++++++- tests/bindings/python.py | 9 ++- tests/hkl-bench-t.c | 21 +++--- tests/hkl-pseudoaxis-e4ch-t.c | 34 ++++----- tests/hkl-pseudoaxis-e4cv-t.c | 30 +++----- tests/hkl-pseudoaxis-e6c-t.c | 55 ++++++++------ tests/hkl-pseudoaxis-k4cv-t.c | 19 ++--- tests/hkl-pseudoaxis-k6c-t.c | 26 +++---- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 17 ++--- tests/hkl-pseudoaxis-t.c | 40 +++++----- tests/hkl-pseudoaxis-zaxis-t.c | 6 +- tests/tap/hkl-tap.c | 17 ++--- 24 files changed, 354 insertions(+), 215 deletions(-) commit 5c5ad1d7c527d46b69322204ee135d34d6eff416 Author: Frédéric-Emmanuel PICCA Date: Thu Apr 17 15:54:35 2014 +0200 now the HklMode struct is a private struct Documentation/Makefile.am | 4 +- Documentation/sphinx/source/development.rst | 1 + gui/hkl-gui-callbacks.cpp | 8 +- gui/hkl-gui-modelcolumns.h | 6 +- gui/hkl-gui-pseudoaxes.cpp | 52 ++++----- gui/hkl-gui-pseudoaxes.h | 32 +++--- gui/hkl-gui.cpp | 18 ++-- hkl.h | 34 +++--- hkl/hkl-binding-private.h | 10 +- hkl/hkl-binding.c | 33 +++--- hkl/hkl-pseudoaxis-common-eulerians.c | 2 +- hkl/hkl-pseudoaxis-common-q.c | 6 +- hkl/hkl-pseudoaxis-e4c-hkl.c | 2 +- hkl/hkl-pseudoaxis-e4c-psi.c | 2 +- hkl/hkl-pseudoaxis-e6c-hkl.c | 2 +- hkl/hkl-pseudoaxis-e6c-psi.c | 2 +- hkl/hkl-pseudoaxis-k4cv-hkl.c | 2 +- hkl/hkl-pseudoaxis-k4cv-psi.c | 2 +- hkl/hkl-pseudoaxis-k6c-hkl.c | 2 +- hkl/hkl-pseudoaxis-k6c-psi.c | 2 +- hkl/hkl-pseudoaxis-petra3-hkl.c | 2 +- hkl/hkl-pseudoaxis-private.h | 19 +++- hkl/hkl-pseudoaxis-soleil-sirius-turret.c | 2 +- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 6 +- hkl/hkl-pseudoaxis-zaxis-hkl.c | 2 +- hkl/hkl-pseudoaxis.c | 160 ++++++++++++++++++++-------- tests/bindings/python.py | 25 +---- tests/bindings/trajectory.py | 4 +- tests/hkl-bench-t.c | 25 +++-- tests/hkl-pseudoaxis-e4ch-t.c | 55 ++++------ tests/hkl-pseudoaxis-e4cv-t.c | 65 +++++------ tests/hkl-pseudoaxis-e6c-t.c | 101 ++++++++---------- tests/hkl-pseudoaxis-k4cv-t.c | 39 ++++--- tests/hkl-pseudoaxis-k6c-t.c | 49 +++++---- tests/hkl-pseudoaxis-t.c | 10 +- 35 files changed, 434 insertions(+), 352 deletions(-) commit 6ce8ae801e350d525c4e4b9907b58a6bca51851e Author: Frédéric-Emmanuel PICCA Date: Wed Apr 2 10:59:52 2014 +0200 add the reactoring script you can use it to rename a method refactoring scripts/refactoring | 2 ++ 1 file changed, 2 insertions(+) commit fac96a7df303d40bc6bf199907655afa01a23985 Author: Frédéric-Emmanuel PICCA Date: Wed Apr 2 10:58:59 2014 +0200 use list and design an iterator interface for the HklGeometryList no more darray for the HklGeometryLis structure. it was not efficient. now the interface use hkl_geometry_list_n_items_get hkl_geometry_list_items_first_get hkl_geometry_list_items_next_get and a foreach macro HKL_GEOMETRY_LIST_FOREACH gui/hkl-gui.cpp | 9 +- hkl.h | 16 ++- hkl/hkl-binding.c | 7 +- hkl/hkl-geometry-private.h | 5 +- hkl/hkl-geometry.c | 167 ++++++++++++++++++++----------- hkl/hkl-pseudoaxis-common-hkl.c | 15 ++- hkl/hkl-pseudoaxis.c | 16 ++- tests/bindings/trajectory.py | 3 +- tests/hkl-bench-t.c | 7 +- tests/hkl-geometry-t.c | 16 +-- tests/hkl-pseudoaxis-e4ch-t.c | 28 +++--- tests/hkl-pseudoaxis-e4cv-t.c | 28 +++--- tests/hkl-pseudoaxis-e6c-t.c | 48 ++++----- tests/hkl-pseudoaxis-k4cv-t.c | 35 +++---- tests/hkl-pseudoaxis-k6c-t.c | 36 +++---- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 11 +- tests/hkl-pseudoaxis-t.c | 7 +- tests/hkl-pseudoaxis-zaxis-t.c | 7 +- 18 files changed, 251 insertions(+), 210 deletions(-) commit edeb17ef82ef9f7c27bd827214d0279ee84a5ea8 Author: Picca Frédéric-Emmanuel Date: Thu Mar 20 17:02:09 2014 +0100 remove unsafe hkl_geometry_axes_get method replace it with hkl_factory_axes_get which return a list of axis names. fix also the python.py unit test for the Factory part. gui/hkl-gui-callbacks.cpp | 6 ++-- gui/hkl-gui-modelcolumns.h | 10 +++---- gui/hkl-gui.cpp | 50 ++++++++++++++++++-------------- gui/hkl-gui.h | 1 + hkl.h | 5 ++-- hkl/hkl-factory.c | 48 ++++++++++++++++++++++++++++++ hkl/hkl-geometry.c | 5 ---- tests/Makefile.am | 2 -- tests/bindings/python.py | 25 +++++++++++----- tests/hkl-pseudoaxis-e6c-t.c | 18 +++++++----- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 8 ++--- tests/hkl3d-test-t.c | 4 +-- 12 files changed, 121 insertions(+), 61 deletions(-) commit 76993475c362342c902dd82243ff5804217f2107 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 10 15:43:52 2014 +0100 remove a bunch of warning const_cast<> arounf the HklSampleReflections gui/hkl-gui-callbacks.cpp | 3 ++- gui/hkl-gui.cpp | 5 +++-- hkl/hkl-binding.c | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) commit fa784e202ff87b4114d7d952088abe668791eddc Author: Frédéric-Emmanuel PICCA Date: Mon Mar 10 13:36:53 2014 +0100 rename hkl_engine_list_get_pseudo_axis_by_name -> hkl_engine_list_pseudo_axis_get_by_name hkl.h | 2 +- hkl/hkl-pseudoaxis.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) commit 566ef8dc5b0fe30f187392367be4675462c12712 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 10 12:02:38 2014 +0100 rename hkl_engine_list_get_by_name -> hkl_engine_list_engine_get_by_name hkl.h | 2 +- hkl/hkl-pseudoaxis.c | 4 ++-- tests/bindings/python.py | 4 ++-- tests/bindings/trajectory.py | 2 +- tests/hkl-bench-t.c | 4 ++-- tests/hkl-pseudoaxis-e4ch-t.c | 12 ++++++------ tests/hkl-pseudoaxis-e4cv-t.c | 12 ++++++------ tests/hkl-pseudoaxis-e6c-t.c | 14 +++++++------- tests/hkl-pseudoaxis-k4cv-t.c | 6 +++--- tests/hkl-pseudoaxis-k6c-t.c | 8 ++++---- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 2 +- tests/hkl-pseudoaxis-zaxis-t.c | 2 +- 12 files changed, 36 insertions(+), 36 deletions(-) commit 71e7da00f8d2c904aa1301d8272a6343110363bb Author: Frédéric-Emmanuel PICCA Date: Mon Mar 10 11:56:31 2014 +0100 rename hkl_engine_list_get_geometry -> hkl_engine_list_geometry_get hkl.h | 4 ++-- hkl/hkl-pseudoaxis.c | 4 ++-- tests/hkl-pseudoaxis-t.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) commit b2efda75fdce92d74420ea6eee51c2ee5428ee7a Author: Frédéric-Emmanuel PICCA Date: Mon Mar 10 11:48:05 2014 +0100 rename hkl_engine_list_geometries -> hkl_engine_list_geometries_get gui/hkl-gui.cpp | 2 +- hkl.h | 2 +- hkl/hkl-pseudoaxis.c | 4 ++-- tests/bindings/python.py | 2 +- tests/bindings/trajectory.py | 2 +- tests/hkl-bench-t.c | 2 +- tests/hkl-pseudoaxis-e4ch-t.c | 8 ++++---- tests/hkl-pseudoaxis-e4cv-t.c | 8 ++++---- tests/hkl-pseudoaxis-e6c-t.c | 8 ++++---- tests/hkl-pseudoaxis-k4cv-t.c | 6 +++--- tests/hkl-pseudoaxis-k6c-t.c | 6 +++--- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 2 +- tests/hkl-pseudoaxis-t.c | 2 +- tests/hkl-pseudoaxis-zaxis-t.c | 2 +- 14 files changed, 28 insertions(+), 28 deletions(-) commit a4a8814235f59aab6c2296e5303f2606f712155a Author: Frédéric-Emmanuel PICCA Date: Mon Mar 10 11:40:40 2014 +0100 rename hkl_engine_list_engines -> hkl_engine_list_engines_get gui/hkl-gui.cpp | 4 ++-- hkl.h | 2 +- hkl/hkl-binding-private.h | 2 +- hkl/hkl-binding.c | 6 +++--- hkl/hkl-pseudoaxis.c | 4 ++-- tests/bindings/python.py | 2 +- tests/bindings/trajectory.py | 2 +- tests/hkl-pseudoaxis-t.c | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) commit 227ad3603429fe598968e45e652a14c5981d4a4e Author: Frédéric-Emmanuel PICCA Date: Mon Mar 10 11:23:06 2014 +0100 rename hkl_engine_engines -> hkl_engine_engines_get gui/hkl-gui-pseudoaxes.cpp | 2 +- hkl.h | 2 +- hkl/hkl-pseudoaxis.c | 4 ++-- tests/bindings/trajectory.py | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) commit 0858f1dcc42aa53ba42bc8794767ff3601c8ca78 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 10 11:14:42 2014 +0100 rename hkl_engine_modes -> hkl_engine_modes_get gui/hkl-gui-pseudoaxes.cpp | 2 +- hkl.h | 2 +- hkl/hkl-binding-private.h | 9 ++++----- hkl/hkl-binding.c | 8 ++++---- hkl/hkl-pseudoaxis.c | 4 ++-- tests/bindings/python.py | 4 ++-- tests/bindings/trajectory.py | 2 +- tests/hkl-bench-t.c | 4 ++-- tests/hkl-pseudoaxis-e4ch-t.c | 6 +++--- tests/hkl-pseudoaxis-e4cv-t.c | 6 +++--- tests/hkl-pseudoaxis-e6c-t.c | 4 ++-- tests/hkl-pseudoaxis-k4cv-t.c | 6 +++--- tests/hkl-pseudoaxis-k6c-t.c | 6 +++--- tests/hkl-pseudoaxis-t.c | 2 +- 14 files changed, 32 insertions(+), 33 deletions(-) commit 7158a6bdf484696589eb7c4e71df0fe039aa41fd Author: Frédéric-Emmanuel PICCA Date: Mon Mar 10 10:44:59 2014 +0100 rename hkl_engine_mode -> hkl_engine_mode_get gui/hkl-gui-pseudoaxes.cpp | 2 +- gui/hkl-gui.cpp | 2 +- hkl.h | 2 +- hkl/hkl-pseudoaxis.c | 4 ++-- tests/bindings/python.py | 4 ++-- tests/hkl-pseudoaxis-e4ch-t.c | 6 +++--- tests/hkl-pseudoaxis-e4cv-t.c | 6 +++--- tests/hkl-pseudoaxis-e6c-t.c | 16 ++++++++-------- 8 files changed, 21 insertions(+), 21 deletions(-) commit 66a7e7f28731c7e778762dd942216a3614c34f06 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 10 10:36:25 2014 +0100 rename hkl_engine_pseudo_axes -> hkl_engine_pseudo_axes_get gui/hkl-gui-pseudoaxes.cpp | 2 +- gui/hkl-gui.cpp | 2 +- hkl.h | 2 +- hkl/hkl-pseudoaxis.c | 4 ++-- tests/hkl-bench-t.c | 4 ++-- tests/hkl-pseudoaxis-e4ch-t.c | 8 ++++---- tests/hkl-pseudoaxis-e4cv-t.c | 8 ++++---- tests/hkl-pseudoaxis-e6c-t.c | 8 ++++---- tests/hkl-pseudoaxis-k4cv-t.c | 4 ++-- tests/hkl-pseudoaxis-k6c-t.c | 4 ++-- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 2 +- tests/hkl-pseudoaxis-t.c | 2 +- tests/hkl-pseudoaxis-zaxis-t.c | 2 +- tests/tap/hkl-tap.c | 4 ++-- 14 files changed, 28 insertions(+), 28 deletions(-) commit 6a3e4632f9362edf69cb069cedabeec75f8ce5c0 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 10 10:30:30 2014 +0100 rename hkl_engine_name -> hkl_engine_name_get gui/hkl-gui-pseudoaxes.cpp | 2 +- hkl.h | 2 +- hkl/hkl-pseudoaxis.c | 4 ++-- tests/bindings/python.py | 2 +- tests/bindings/trajectory.py | 2 +- tests/hkl-bench-t.c | 2 +- tests/hkl-pseudoaxis-t.c | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) commit 8ca435103c900ad83eaeeb2a8de9775cf42e9841 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 10 10:24:06 2014 +0100 rename hkl_mode_parameters -> hkl_mode_parameters_get gui/hkl-gui-pseudoaxes.cpp | 2 +- gui/hkl-gui.cpp | 2 +- hkl.h | 2 +- hkl/hkl-pseudoaxis.c | 4 ++-- tests/bindings/python.py | 2 +- tests/hkl-bench-t.c | 2 +- tests/hkl-pseudoaxis-e4ch-t.c | 8 ++++---- tests/hkl-pseudoaxis-e4cv-t.c | 8 ++++---- tests/hkl-pseudoaxis-e6c-t.c | 18 +++++++++--------- tests/hkl-pseudoaxis-k4cv-t.c | 4 ++-- tests/hkl-pseudoaxis-k6c-t.c | 4 ++-- tests/hkl-pseudoaxis-t.c | 2 +- 12 files changed, 29 insertions(+), 29 deletions(-) commit 757c9520625bfe42d2ca845173ba5af9483973fe Author: Frédéric-Emmanuel PICCA Date: Mon Mar 10 10:14:48 2014 +0100 rename hkl_mode_name -> hkl_mode_name_get INSTALL | 12 ++++++------ gui/hkl-gui-pseudoaxes.cpp | 2 +- hkl.h | 2 +- hkl/hkl-pseudoaxis.c | 4 ++-- tests/bindings/python.py | 2 +- tests/bindings/trajectory.py | 4 ++-- tests/hkl-bench-t.c | 2 +- tests/hkl-pseudoaxis-k6c-t.c | 4 ++-- tests/hkl-pseudoaxis-t.c | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) commit 82bcd55e1d7159633be79697f1bf6f001cb1a930 Author: Picca Frédéric-Emmanuel Date: Thu Feb 27 22:04:36 2014 +0100 release the 4.0.8 version configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bc01bb4eb17b8e817ab3f930cb2508e1515b7c5c Merge: c66e4376 50622f45 Author: Frédéric-Emmanuel PICCA Date: Thu Feb 27 16:57:24 2014 +0100 Merge branch 'maint' into next Conflicts: TODO hkl/hkl-geometry-factory.c hkl/hkl-geometry-factory.h hkl/hkl-geometry-private.h hkl/hkl-pseudoaxis-factory.c hkl/pom.xml commit 50622f450b08645952775ed54ead6bb97c484c96 Author: Frédéric-Emmanuel PICCA Date: Thu Feb 27 14:47:07 2014 +0100 add the SOLEIL SIRIUS KAPPA diffractometer .../source/diffractometers/soleil_sirius_kappa.rst | 179 +++++++++++++++++++++ Documentation/sphinx/source/index.rst | 1 + hkl/hkl-geometry-factory.c | 24 +++ hkl/hkl-geometry-factory.h | 1 + hkl/hkl-geometry.h | 3 +- hkl/hkl-pseudoaxis-auto.c | 2 +- hkl/hkl-pseudoaxis-factory.c | 2 + hkl/pom.xml | 2 +- test/hkl-test-pseudoaxis.c | 9 ++ 9 files changed, 220 insertions(+), 3 deletions(-) commit 0b84fdc2a32c34b7daaa88685f2c58392444b750 Author: Frédéric-Emmanuel PICCA Date: Tue Feb 25 14:55:28 2014 +0100 add the soleil sirius turret documentation .../diffractometers/soleil_sirius_turret.rst | 61 ++++++++++++++++++++++ Documentation/sphinx/source/index.rst | 1 + 2 files changed, 62 insertions(+) commit ce4c831ece2e34b4a2958e149a1f74c8995c8420 Author: Picca Frédéric-Emmanuel Date: Thu Feb 6 14:46:42 2014 +0100 implemente the ux_uy_uz toggled gui/ghkl.ui | 9 ++++ gui/hkl-gui.c | 140 +++++++++++++--------------------------------------------- 2 files changed, 39 insertions(+), 110 deletions(-) commit 3b26c7ad3c470642ec39ee182ed740f3856e4c1b Author: Picca Frédéric-Emmanuel Date: Thu Feb 6 13:46:12 2014 +0100 remove useless code gui/hkl-gui.c | 92 ----------------------------------------------------------- 1 file changed, 92 deletions(-) commit db639e3ab9365f874de19888f5ad7e8cbbd712ed Author: Picca Frédéric-Emmanuel Date: Thu Feb 6 12:58:05 2014 +0100 implemente the checkbutton toggled gui/ghkl.ui | 6 + gui/hkl-gui.c | 382 +++++++--------------------------------------------------- 2 files changed, 49 insertions(+), 339 deletions(-) commit 92d387b720960e1140236d308dc56da66a85c9c7 Author: Picca Frédéric-Emmanuel Date: Thu Feb 6 12:22:25 2014 +0100 add the sample refine callback gui/ghkl.ui | 9 +++++++- gui/hkl-gui.c | 71 +++++++++++++++++------------------------------------------ 2 files changed, 28 insertions(+), 52 deletions(-) commit 9f84769fb2faafa40409a120d4595874c29421cd Author: Picca Frédéric-Emmanuel Date: Thu Feb 6 12:14:18 2014 +0100 add the UB busing et levy computation gui/ghkl.ui | 61 ++++------------------------- gui/hkl-gui.c | 120 ++++++++++++++++++++++++++++++++++------------------------ 2 files changed, 79 insertions(+), 102 deletions(-) commit a5c324989b9ccfbe0b71fa03f430cd7060871adf Author: Frédéric-Emmanuel PICCA Date: Wed Feb 5 16:53:45 2014 +0100 add the error handling to the hkl_sample_UB_set method gui/ghkl.ui | 8 + gui/hkl-gui.c | 354 +++---------------------------- hkl.h | 4 +- hkl/hkl-binding-private.h | 5 + hkl/hkl-binding.c | 50 +++++ hkl/hkl-sample.c | 9 +- tests/hkl-pseudoaxis-e6c-t.c | 4 +- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 2 +- tests/hkl-pseudoaxis-zaxis-t.c | 2 +- tests/hkl-sample-t.c | 5 +- 10 files changed, 108 insertions(+), 335 deletions(-) commit 9bd9e473e26511fd8e565b12ab0146c59dd76dfd Author: Frédéric-Emmanuel PICCA Date: Mon Feb 3 13:51:21 2014 +0100 add callback for ux, uy, uz gui/ghkl.ui | 3 +++ gui/hkl-gui.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) commit faafb652fefadaee926a03a7f6dbc42c77de29ed Author: Frédéric-Emmanuel PICCA Date: Wed Jan 29 16:36:42 2014 +0100 reorganise the UB matrix display gui/ghkl.ui | 1385 +++++++++++++++++++++++++++++++-------------------------- gui/hkl-gui.c | 54 +-- 2 files changed, 765 insertions(+), 674 deletions(-) commit c6f464ffdf3d2902be1fbdc92a704d097946515e Author: Frédéric-Emmanuel PICCA Date: Tue Jan 28 14:58:31 2014 +0100 FitParameters where wrong at the startup. gui/hkl-gui.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) commit 0856572ae0693249207fed095f453adbeea5c058 Author: Picca Frédéric-Emmanuel Date: Mon Jan 27 16:37:35 2014 +0100 just ui reorganisation on the notebook gui/ghkl.ui | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) commit f3db2262252d6b9ef6540eba494c3c8ea6fa86e6 Author: Picca Frédéric-Emmanuel Date: Mon Jan 27 16:17:01 2014 +0100 add the callback for the wavelength gui/ghkl.ui | 2 ++ gui/hkl-gui.c | 105 ++++++++++++++++++++++++++++------------------------------ 2 files changed, 52 insertions(+), 55 deletions(-) commit 0bb0955b7c266227a65372a2a4419411a318543b Author: Picca Frédéric-Emmanuel Date: Mon Jan 27 15:14:24 2014 +0100 typo gui/hkl-gui.c | 1 - 1 file changed, 1 deletion(-) commit 2193c11031ca52e239ca5b2d0a216a785e57a8ac Author: Picca Frédéric-Emmanuel Date: Mon Jan 27 15:14:14 2014 +0100 for now the wave length does not deserve a dedicated panel gui/ghkl.ui | 171 +++++++++++++++++++++++++++++------------------------------- 1 file changed, 84 insertions(+), 87 deletions(-) commit 57b36313f582f5f37cf74956daa781caf1a74054 Author: Picca Frédéric-Emmanuel Date: Mon Jan 27 14:29:20 2014 +0100 fix a bug when selecting a new crystal gui/hkl-gui.c | 82 +++++++++++++++++++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 39 deletions(-) commit a7288ae25dd717c89a77ee00d1b128e89da41b88 Author: Picca Frédéric-Emmanuel Date: Mon Jan 27 12:43:49 2014 +0100 now the first visible panel is the crystal one. gui/ghkl.ui | 86 ++++++++++++++++++++++++++++++------------------------------- 1 file changed, 43 insertions(+), 43 deletions(-) commit 05be4b8accc35d8b00d2d089d23ccc14e71c1968 Author: Picca Frédéric-Emmanuel Date: Mon Jan 27 12:14:03 2014 +0100 remove the pseudo_axes_parameter treeview (useless) gui/ghkl.ui | 146 +++++--------------- gui/hkl-gui.c | 418 ---------------------------------------------------------- 2 files changed, 35 insertions(+), 529 deletions(-) commit 72891529f487fd15bbaf039900d270e462a9aa62 Author: Picca Frédéric-Emmanuel Date: Mon Jan 27 11:30:54 2014 +0100 remove more usless code gui/hkl-gui.c | 2 -- 1 file changed, 2 deletions(-) commit 08fda072487343f89a8147a0b36cf30833675cc4 Author: Frédéric-Emmanuel PICCA Date: Fri Jan 24 14:55:24 2014 +0100 add the set_crystal parameters gui/ghkl.ui | 66 ++++++++++ gui/hkl-gui.c | 398 ++++++++++++++++++++-------------------------------------- 2 files changed, 203 insertions(+), 261 deletions(-) commit 59f71fc5a0a1c30d7836c26b19380969eb02b23b Author: Frédéric-Emmanuel PICCA Date: Fri Jan 24 09:36:20 2014 +0100 typo gui/hkl-gui.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 180497ebb698eb02cb46317e324916b0e5aff3ae Author: Picca Frédéric-Emmanuel Date: Thu Jan 23 21:30:23 2014 +0100 remove more useless code gui/hkl-gui.c | 362 ---------------------------------------------------------- 1 file changed, 362 deletions(-) commit c265e5f6fa2599847d6f948f6e153fa9f72a1a63 Author: Picca Frédéric-Emmanuel Date: Thu Jan 23 21:22:27 2014 +0100 update_UB gui/hkl-gui.c | 395 ++++++++-------------------------------------------------- 1 file changed, 52 insertions(+), 343 deletions(-) commit 2d1c7e093f09fcf03c246321ca07298d7d93ae13 Author: Picca Frédéric-Emmanuel Date: Thu Jan 23 20:49:36 2014 +0100 add the update_ux_uy_yz gui/hkl-gui.c | 142 +++++++++++++--------------------------------------------- 1 file changed, 30 insertions(+), 112 deletions(-) commit e59a96f11213ffe305a9a55ccdd4ef7ec38f1070 Author: Picca Frédéric-Emmanuel Date: Thu Jan 23 19:59:19 2014 +0100 add the lattice part gui/hkl-gui.c | 687 ++++++---------------------------------------------------- 1 file changed, 64 insertions(+), 623 deletions(-) commit f5a5de229d7ffc5697e56406029c021dfaee961d Author: Picca Frédéric-Emmanuel Date: Thu Jan 23 15:19:48 2014 +0100 remove useless code gui/hkl-gui.c | 500 ---------------------------------------------------------- 1 file changed, 500 deletions(-) commit 7d39ac5b784b1e468cfbb0f17e942df2ac30e940 Author: Picca Frédéric-Emmanuel Date: Thu Jan 23 11:41:24 2014 +0100 now deleting a reflevion is working gui/ghkl.ui | 64 ++++++++++------------------------------------------------- gui/hkl-gui.c | 4 ++-- 2 files changed, 12 insertions(+), 56 deletions(-) commit 6a766ea943933950ddd1c938e6dbee59da190fdd Author: Picca Frédéric-Emmanuel Date: Wed Jan 22 22:12:42 2014 +0100 fix a bug in the reflection gui/hkl-gui.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) commit 0a71a0ecf3354cdbc99d990598c67ca22e33d07a Author: Frédéric-Emmanuel PICCA Date: Wed Jan 22 16:53:00 2014 +0100 more check gui/hkl-gui.c | 67 ++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 36 insertions(+), 31 deletions(-) commit e595ae52643b8066ddf5b23becc8885a24e3d80a Author: Frédéric-Emmanuel PICCA Date: Wed Jan 22 16:34:05 2014 +0100 add the crystal del gui/ghkl.ui | 1 + gui/hkl-gui.c | 81 ++++++++++++++++++++++++++++++----------------------------- 2 files changed, 42 insertions(+), 40 deletions(-) commit ccbcab403e5211b8492b562164ca4b20a5cd8010 Author: Frédéric-Emmanuel PICCA Date: Wed Jan 22 15:38:05 2014 +0100 implemente the cursor changed of the crystals gui/ghkl.ui | 1 + gui/hkl-gui.c | 166 +++++++++++++++++++--------------------------------------- 2 files changed, 54 insertions(+), 113 deletions(-) commit 5130c3b2d205251efbd024bc7c3d2507ad429408 Author: Frédéric-Emmanuel PICCA Date: Wed Jan 22 15:02:48 2014 +0100 copy_crystal is working gui/ghkl.ui | 1 + gui/hkl-gui.c | 168 ++++++++++++---------------------------------------------- 2 files changed, 35 insertions(+), 134 deletions(-) commit 28a091d29564f328e83d8befcc991a07c4c37820 Author: Frédéric-Emmanuel PICCA Date: Wed Jan 22 11:24:34 2014 +0100 now we can add samples gui/ghkl.ui | 1 + gui/hkl-gui.c | 178 +++++++++++++++++++++++++--------------------------------- 2 files changed, 77 insertions(+), 102 deletions(-) commit 918264ee07650163d63ccb087f852f9c6ee454eb Author: Frédéric-Emmanuel PICCA Date: Wed Jan 22 10:09:02 2014 +0100 add the crystal treeview and liststore gui/ghkl.ui | 161 ++++++++++++++++++++++ gui/hkl-gui.c | 425 +++++++++------------------------------------------------- 2 files changed, 225 insertions(+), 361 deletions(-) commit 28d0ecafda2baa9cd225b2148fc47f6fcdd8b00a Author: Picca Frédéric-Emmanuel Date: Mon Jan 20 21:21:15 2014 +0100 add the hkl_gui_window_toolbutton_del_reflection_clicked_cb gui/ghkl.ui | 1 + gui/hkl-gui.c | 499 +++++++++++++--------------------------------------------- 2 files changed, 108 insertions(+), 392 deletions(-) commit f99f78b706d7e6e0e9803a80de4d95afbe20ca18 Author: Picca Frédéric-Emmanuel Date: Sat Jan 18 18:51:37 2014 +0100 add toolbutton_goto_reflection_clicked_cb gui/ghkl.ui | 1 + gui/hkl-gui.c | 256 ++++++++++++++++------------------------------------------ 2 files changed, 70 insertions(+), 187 deletions(-) commit d23fef6565c47226dc8d7014a49033692a94f084 Author: Picca Frédéric-Emmanuel Date: Sat Jan 18 17:18:05 2014 +0100 add the toolbutton_add_reflection_clicked_cb callback gui/ghkl.ui | 1 + gui/hkl-gui.c | 93 ++++++++++++++++++++--------------------------------------- 2 files changed, 32 insertions(+), 62 deletions(-) commit 0efdbfb201795264dfe960a528f2e30f078a41be Author: Picca Frédéric-Emmanuel Date: Sat Jan 18 16:37:44 2014 +0100 add the treeview_reflections_key_press_event_cb gui/ghkl.ui | 7 +++++++ gui/hkl-gui.c | 30 +++++++++--------------------- 2 files changed, 16 insertions(+), 21 deletions(-) commit e7c5829cfd5b476b8e363b76e2108c287832d5fc Author: Picca Frédéric-Emmanuel Date: Sat Jan 18 16:04:47 2014 +0100 set up the treeview reflections gui/ghkl.ui | 154 +- gui/hkl-gui.c | 4748 ++++++++++++++++++++++++--------------------------------- 2 files changed, 2109 insertions(+), 2793 deletions(-) commit ce36bebd09bfe05a125fba378d41013aa3e27de5 Author: Picca Frédéric-Emmanuel Date: Sat Jan 18 16:04:09 2014 +0100 remove useless code gui/hkl-gui-pseudoaxes.c | 2 -- gui/hkl-gui.c | 55 ------------------------------------------------ 2 files changed, 57 deletions(-) commit 9ca28e992cd8ddffa3eca4665b90d415a85d53ca Author: Picca Frédéric-Emmanuel Date: Sat Jan 18 14:30:18 2014 +0100 reorganization of hkl-gui.c gui/hkl-gui.c | 1099 +++++++++++++++++++++++++++------------------------------ 1 file changed, 529 insertions(+), 570 deletions(-) commit 74ac219a2d19b643793717510c84db250ccaae9b Author: Picca Frédéric-Emmanuel Date: Sat Jan 18 13:39:19 2014 +0100 reorganize the code gui/hkl-gui-pseudoaxes.c | 123 ++++++++++++++++++++++------------------------- 1 file changed, 57 insertions(+), 66 deletions(-) commit 464006aa03613180f6e8d7d27ea8c97217064f23 Author: Picca Frédéric-Emmanuel Date: Sat Jan 18 12:09:22 2014 +0100 define HKL_GUI_ENGINE_GET_PRIVATE and use it gui/hkl-gui-pseudoaxes.c | 60 +++++++++++++++--------------------------------- 1 file changed, 18 insertions(+), 42 deletions(-) commit 58a9d31d5a3cafb8b5dce69655e2eb16b215abac Author: Picca Frédéric-Emmanuel Date: Sat Jan 18 11:40:41 2014 +0100 silent for now the diffractometer when the computation is not possible gui/hkl-gui.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit b031e959c9166e189654912b1a60769206d881f1 Author: Picca Frédéric-Emmanuel Date: Sat Jan 18 11:40:11 2014 +0100 trailling spaces gui/hkl-gui.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit d4ddb094b8d21e9beac394ac510d6ec24c2c1dc4 Author: Picca Frédéric-Emmanuel Date: Sat Jan 18 11:40:00 2014 +0100 forgot an hkl_gui_window_update_pseudo_axes_frames gui/hkl-gui.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4cb3879b20b6a905a5a55b7dfe3decac8a7058c1 Author: Picca Frédéric-Emmanuel Date: Sat Jan 18 11:39:23 2014 +0100 rewrite the HklGuiEngine following the GObject tutorial gui/hkl-gui-pseudoaxes.c | 73 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 54 insertions(+), 19 deletions(-) commit 744ddb9a168b4ef1e2b804288a9b2611fca74fbb Author: Picca Frédéric-Emmanuel Date: Mon Jan 13 20:51:56 2014 +0100 fix a bug with the gobject property gui/hkl-gui.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 957892edd5ced8b5ceb68917c482d752930f6b10 Author: Picca Frédéric-Emmanuel Date: Sat Jan 11 16:34:42 2014 +0100 now the computation in the pseudo_frames raise also the error. gui/hkl-gui-pseudoaxes.c | 28 +++++--- gui/hkl-gui.c | 184 +++++++++++++++++++++++++++-------------------- 2 files changed, 125 insertions(+), 87 deletions(-) commit 4af266b313259fe3d8f682cd9fe4a10fa98cbebf Author: Frédéric-Emmanuel PICCA Date: Wed Jan 8 18:02:48 2014 +0100 wip pseudo frames before reorganisation gui/hkl-gui-pseudoaxes.c | 74 ++++++++++++++-------- gui/hkl-gui.c | 156 +++++++++++++++++++++-------------------------- 2 files changed, 115 insertions(+), 115 deletions(-) commit 2d991257432c87f3c827fc7e8ceb3d5047e74180 Author: Frédéric-Emmanuel PICCA Date: Wed Jan 8 10:48:35 2014 +0100 now the mode is well reflected in the combobox gui/hkl-gui-pseudoaxes.c | 329 +++++++++++++++++++++++------------------------ 1 file changed, 159 insertions(+), 170 deletions(-) commit 383fd25602cfab37979a0927253dcd805142b7bc Author: Frédéric-Emmanuel PICCA Date: Wed Jan 8 10:25:11 2014 +0100 format and remove some useless code gui/hkl-gui.c | 323 ++++++---------------------------------------------------- 1 file changed, 30 insertions(+), 293 deletions(-) commit b07c34475a910420ade2556679f7c1f350a0964d Author: Frédéric-Emmanuel PICCA Date: Wed Jan 8 10:11:18 2014 +0100 better error message handling in the gui gui/hkl-gui.c | 54 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 13 deletions(-) commit 24a1ba4c50b583db4eeed2ba6735a0f4bdd4c049 Author: Frédéric-Emmanuel PICCA Date: Wed Jan 8 10:10:45 2014 +0100 better error message when using hkl engine hkl.h | 1 + hkl/hkl-pseudoaxis-common-hkl.c | 39 ++++++++++++++++++++++++++++++----- hkl/hkl-pseudoaxis-common-q-private.h | 2 ++ hkl/hkl-pseudoaxis-common-q.c | 12 ++++++++--- hkl/hkl-pseudoaxis.c | 10 ++++++++- 5 files changed, 55 insertions(+), 9 deletions(-) commit 2910d60245a03849c161134f9faa55b596c2bd0d Author: Frédéric-Emmanuel PICCA Date: Tue Jan 7 11:55:33 2014 +0100 reset the pseudo axis value if the computation failed if the computation failed, the expected value should be restored to allow futur computation. Otherwise the list_tree and the hkl internal are not synchronized. gui/hkl-gui.c | 4 ++++ 1 file changed, 4 insertions(+) commit 7172fa4884764f51546a9aeeab3776829d44b5e8 Author: Frédéric-Emmanuel PICCA Date: Tue Jan 7 11:42:52 2014 +0100 add an içnfor bar to give the user some feddback about the computation gui/ghkl.ui | 39 +++++++++++++++++++++---- gui/hkl-gui.c | 91 +++++++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 93 insertions(+), 37 deletions(-) commit e3f379b47c7a5243fb258079056306ee66c1aec1 Author: Frédéric-Emmanuel PICCA Date: Tue Jan 7 10:21:31 2014 +0100 cleaner code for hkl_gui_window_update_solutions gui/hkl-gui.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) commit 3ffc5166812e2f763ee8d97d95acee9bd5833b63 Author: Frédéric-Emmanuel PICCA Date: Mon Jan 6 17:05:57 2014 +0100 add the solution part gui/ghkl.ui | 4 +- gui/hkl-gui.c | 735 ++++++++++++++-------------------------------------------- 2 files changed, 180 insertions(+), 559 deletions(-) commit f755789e85f7f863fda6ea93e67c238c01f9e58b Author: Frédéric-Emmanuel PICCA Date: Mon Jan 6 13:34:03 2014 +0100 add the pseudo axes INSTALL | 12 +- configure.ac | 2 +- gui/ghkl.ui | 169 +++++++++--- gui/hkl-gui.c | 840 ++++++++------------------------------------------------ gui/pseudo.ui | 68 ++--- hkl/hkl-types.c | 1 - 6 files changed, 299 insertions(+), 793 deletions(-) commit 0e25b32e79e6c42b0b3d51cad2662503bea453f4 Author: Picca Frédéric-Emmanuel Date: Mon Jan 6 08:42:57 2014 +0100 wip gui/ghkl.ui | 23 +- gui/hkl-gui.c | 1046 +++++++++++++++++---------------------------------------- gui/pseudo.ui | 50 +-- 3 files changed, 366 insertions(+), 753 deletions(-) commit 7311dfb420a77fb0218c7f27c20cc77264b40be9 Merge: 8688c93a c66e4376 Author: Picca Frédéric-Emmanuel Date: Sun Jan 5 15:58:30 2014 +0100 Merge branch 'next' into gtk Conflicts: configure.ac gui/Makefile.am gui/hkl-gui-3d.cpp gui/hkl-gui-3d.h gui/hkl-gui-callbacks.cpp gui/hkl-gui-modelcolumns.h gui/hkl-gui-pseudoaxes.cpp gui/hkl-gui-pseudoaxes.h gui/hkl-gui.cpp gui/hkl-gui.h gui/hkl3d/hkl3d-gui-model.cpp gui/hkl3d/hkl3d-gui-model.h gui/hkl3d/hkl3d-gui-scene.cpp gui/hkl3d/hkl3d-gui-scene.h gui/hkl3d/hkl3d-gui-view.cpp gui/hkl3d/hkl3d-gui-view.h gui/trackball.vapi hkl3d/bullet/src/Makefile.am hkl3d/hkl3d.cpp hkl3d/hkl3d.h test/hkl/axis-t.c test/hkl/lattice-t.c test/hkl/pseudoaxis-e4cv-t.c test/hkl/pseudoaxis-e6c-t.c test/hkl/pseudoaxis-k4cv-t.c test/hkl/pseudoaxis-k6c-t.c test/hkl/pseudoaxis-t.c test/hkl/sample-t.c tests/hkl-geometry-t.c tests/hkl-parameter-t.c tests/hkl-vector-t.c tests/runtests.c tests/tap/basic.c tests/tap/basic.h tests/tap/libtap.sh commit c66e43766d2aaf04eadf2ad2780d5179dba483b5 Author: Picca Frédéric-Emmanuel Date: Sun Dec 29 14:21:45 2013 +0100 clean-all INSTALL | 4 ++-- gui/hkl-gui.h | 2 +- hkl/hkl-binding.c | 1 - hkl/hkl-factory.c | 6 +++--- hkl/hkl-matrix.c | 2 +- hkl/hkl-parameter-private.h | 6 +++--- hkl/hkl-parameter.c | 4 ++-- hkl/hkl-sample.c | 2 +- scripts/clean-all | 6 ++++-- 9 files changed, 17 insertions(+), 16 deletions(-) commit 29dd8a7e44a384ecb01f3f387f764434a90f0202 Merge: f5c116a1 7c302b91 Author: Picca Frédéric-Emmanuel Date: Sun Dec 29 11:31:38 2013 +0100 Merge branch 'maint' into next Conflicts: hkl/Makefile.am hkl/hkl-geometry-factory.c hkl/hkl-geometry-factory.h hkl/hkl-geometry-private.h hkl/hkl-pseudoaxis-factory.c hkl/pom.xml commit f5c116a1bdef94ef2d999d4751523dbfda067759 Author: Picca Frédéric-Emmanuel Date: Tue Dec 17 22:27:10 2013 +0100 update ccan hkl/ccan/list/list.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit be3a6967942b5b4eaa73035c05e9fd64dfcf990b Author: Frédéric-Emmanuel PICCA Date: Mon Oct 7 15:34:07 2013 +0200 add the TODO list for sirius TODO | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) commit 7c302b91e2a893cf5e1ba1bb41e37ca45b716480 Author: Frédéric-Emmanuel PICCA Date: Mon Oct 7 15:30:46 2013 +0200 update the pom.xml 4.0.6 -> 4.0.7 hkl/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 94d97c72691021a3ada50cae2df74dbb8759c0e6 Author: Frédéric-Emmanuel PICCA Date: Mon Oct 7 15:09:58 2013 +0200 add the sirius turret geometry hkl/Makefile.am | 8 +++-- hkl/hkl-geometry-factory.c | 19 ++++++++++++ hkl/hkl-geometry-factory.h | 1 + hkl/hkl-geometry.h | 3 +- hkl/hkl-pseudoaxis-factory.c | 5 +++ hkl/hkl-pseudoaxis-soleil-sirius-turret.c | 51 +++++++++++++++++++++++++++++++ hkl/hkl-pseudoaxis-soleil-sirius-turret.h | 33 ++++++++++++++++++++ test/hkl-test-pseudoaxis.c | 9 ++++++ 8 files changed, 125 insertions(+), 4 deletions(-) commit ec683db8d110083cc1e2af1dbac74f5cf709191c Author: Picca Frédéric-Emmanuel Date: Sun Sep 22 19:59:48 2013 +0200 use the new list_next from ccan hkl.h | 6 +++--- hkl/hkl-sample.c | 11 ++++------- 2 files changed, 7 insertions(+), 10 deletions(-) commit d9b07271dee955716e3b6a1e5cbe7ae7632a1eec Author: Picca Frédéric-Emmanuel Date: Sun Sep 22 19:34:44 2013 +0200 update ccan hkl/ccan/list/list.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) commit 04cfaf020898969848adc8383926d8548c036298 Author: Picca Frédéric-Emmanuel Date: Sun Sep 22 18:30:47 2013 +0200 we are using subdir-objects so add the options configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d5d86aae223c857d78c7090c481ad8f3d89f0540 Author: Picca Frédéric-Emmanuel Date: Sun Sep 22 17:26:01 2013 +0200 fix the header with the help of iwyu hkl.h | 9 +++---- hkl/Makefile.am | 9 ++++++- hkl/hkl-axis-private.h | 8 +++--- hkl/hkl-axis.c | 23 ++++++++++------- hkl/hkl-binding-private.h | 6 ++--- hkl/hkl-binding.c | 25 +++++++++++-------- hkl/hkl-detector-factory.c | 6 ++--- hkl/hkl-detector-private.h | 5 +++- hkl/hkl-detector.c | 12 ++++++--- hkl/hkl-error.c | 13 ++++++---- hkl/hkl-factory.c | 32 ++++++++++++------------ hkl/hkl-geometry-private.h | 11 +++++--- hkl/hkl-geometry.c | 35 ++++++++++++++++---------- hkl/hkl-interval-private.h | 2 +- hkl/hkl-interval.c | 9 ++++--- hkl/hkl-lattice.c | 17 +++++++------ hkl/hkl-macros-private.h | 3 ++- hkl/hkl-macros.c | 9 +++---- hkl/hkl-matrix.c | 15 +++++------ hkl/hkl-parameter-private.h | 13 +++++----- hkl/hkl-parameter.c | 13 +++++++--- hkl/hkl-pseudoaxis-auto-private.h | 16 +++++++----- hkl/hkl-pseudoaxis-auto.c | 29 ++++++++++++++------- hkl/hkl-pseudoaxis-common-eulerians-private.h | 3 ++- hkl/hkl-pseudoaxis-common-eulerians.c | 19 +++++++++----- hkl/hkl-pseudoaxis-common-hkl-private.h | 4 ++- hkl/hkl-pseudoaxis-common-hkl.c | 36 +++++++++++++++++++-------- hkl/hkl-pseudoaxis-common-psi-private.h | 10 ++++---- hkl/hkl-pseudoaxis-common-psi.c | 32 ++++++++++++++++-------- hkl/hkl-pseudoaxis-common-q.c | 28 ++++++++++++++------- hkl/hkl-pseudoaxis-e4c-hkl.c | 19 ++++++++------ hkl/hkl-pseudoaxis-e4c-private.h | 2 +- hkl/hkl-pseudoaxis-e4c-psi.c | 12 ++++----- hkl/hkl-pseudoaxis-e6c-hkl.c | 18 ++++++++------ hkl/hkl-pseudoaxis-e6c-private.h | 2 +- hkl/hkl-pseudoaxis-e6c-psi.c | 11 ++++---- hkl/hkl-pseudoaxis-k4cv-hkl.c | 17 +++++++------ hkl/hkl-pseudoaxis-k4cv-private.h | 2 +- hkl/hkl-pseudoaxis-k4cv-psi.c | 11 ++++---- hkl/hkl-pseudoaxis-k6c-hkl.c | 26 ++++++++++++------- hkl/hkl-pseudoaxis-k6c-private.h | 2 +- hkl/hkl-pseudoaxis-k6c-psi.c | 11 ++++---- hkl/hkl-pseudoaxis-petra3-hkl.c | 14 ++++++----- hkl/hkl-pseudoaxis-petra3-private.h | 2 +- hkl/hkl-pseudoaxis-private.h | 17 +++++++------ hkl/hkl-pseudoaxis-soleil-sixs-med-private.h | 2 +- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 23 ++++++++++++----- hkl/hkl-pseudoaxis-zaxis-hkl.c | 15 +++++------ hkl/hkl-pseudoaxis-zaxis-private.h | 2 +- hkl/hkl-pseudoaxis.c | 23 +++++++++-------- hkl/hkl-quaternion-private.h | 8 +++--- hkl/hkl-quaternion.c | 18 +++++++------- hkl/hkl-sample-private.h | 8 +++--- hkl/hkl-sample.c | 34 +++++++++++++++++-------- hkl/hkl-source-private.h | 4 ++- hkl/hkl-source.c | 12 +++++---- hkl/hkl-type-builtins.h.template | 4 ++- hkl/hkl-types.c | 16 ++++++++---- hkl/hkl-types.h | 7 +++--- hkl/hkl-unit-private.h | 2 +- hkl/hkl-unit.c | 12 ++++----- hkl/hkl-vector-private.h | 6 ++--- hkl/hkl-vector.c | 18 +++++++------- 63 files changed, 502 insertions(+), 330 deletions(-) commit 9b3f95021c6f5b591d47768c3d2526c42e96973d Author: Picca Frédéric-Emmanuel Date: Mon Aug 26 11:12:48 2013 +0200 fix the distcheck due to gtk-doc Documentation/api/Makefile.am | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 609734e4ce18cc7e2fa46d20ada6f3199e0a8505 Author: Picca Frédéric-Emmanuel Date: Mon Aug 26 09:41:46 2013 +0200 fix the dependencies between hkl-type-builtins.c and hkl-type-builtins.h hkl/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5eaae18bd4203fb67901770f262647cb0ca4d470 Author: Picca Frédéric-Emmanuel Date: Mon Aug 26 09:41:16 2013 +0200 no need to put into git the hkl-type-* autogenerated files hkl/hkl-type-builtins.c | 27 --------------------------- hkl/hkl-type-builtins.h | 19 ------------------- 2 files changed, 46 deletions(-) commit 214b76b0f06e272e7dc4af5aa7de518c6bd8ab72 Author: Picca Frédéric-Emmanuel Date: Mon Aug 26 09:40:38 2013 +0200 remove useless gtk-doc files since we can rebuilt them Documentation/api/Makefile.am | 6 +- Documentation/api/hkl-docs.sgml | 73 ++++--- Documentation/api/hkl-sections.txt | 434 ------------------------------------- Documentation/api/hkl.types | 0 4 files changed, 46 insertions(+), 467 deletions(-) commit 439a7ab96f3f72664b17f1e063603a98c4db54e9 Author: Picca Frédéric-Emmanuel Date: Mon Aug 26 08:58:57 2013 +0200 remove the texinfo documentation Documentation/Makefile.am | 2 - Documentation/hkl.texi | 900 ---------------------------------------------- 2 files changed, 902 deletions(-) commit 4896e99f93044f072ea8a4ce89c8ebbcb06cd20c Author: Picca Frédéric-Emmanuel Date: Wed Jul 17 15:18:22 2013 +0200 export the reciprocal lattice method hkl/hkl-lattice.c | 11 ++++++----- tests/bindings/python.py | 4 ++++ 2 files changed, 10 insertions(+), 5 deletions(-) commit 4fd00ca81dee14f600e3455bd6b17696a45a407f Author: Picca Frédéric-Emmanuel Date: Wed Jul 17 15:02:58 2013 +0200 export a few method into the binding hkl_sample_compute_UB_busing_levy hkl_sample_affine hkl_sample_get_reflection_mesured_angle hkl_sample_get_reflection_theoretical_angle hkl/hkl-sample.c | 38 +++++++++++++++++++------------------- tests/bindings/python.py | 14 +++++++++----- 2 files changed, 28 insertions(+), 24 deletions(-) commit 3907b5835ed03db0b4b4f8ab789c0735a704a420 Author: Picca Frédéric-Emmanuel Date: Wed Jul 17 14:52:52 2013 +0200 check that the sample.copy() method is working tests/bindings/python.py | 7 +++++++ 1 file changed, 7 insertions(+) commit 4d200454b738652d9e2d2fff31e4415cf9c5698a Author: Picca Frédéric-Emmanuel Date: Wed Jul 17 14:41:39 2013 +0200 now the get/set_hkl method of the HklSampleReflection are exposed into the binding hkl/hkl-sample.c | 24 ++++++++++++------------ tests/bindings/python.py | 12 ++++++++++-- 2 files changed, 22 insertions(+), 14 deletions(-) commit 5cd80efd92d2c8747c8c69fa61f8b34f9f8e3fcd Author: Picca Frédéric-Emmanuel Date: Wed Jul 17 14:30:46 2013 +0200 now add_reflection and del_reflection are working gui/hkl-gui-callbacks.cpp | 3 ++- hkl.h | 5 +++-- hkl/hkl-binding-private.h | 5 +++++ hkl/hkl-binding.c | 28 ++++++++++++++++++++++++++++ hkl/hkl-sample.c | 26 +++++++++++++++++--------- tests/bindings/python.py | 10 ++++------ tests/hkl-sample-t.c | 5 ++++- 7 files changed, 63 insertions(+), 19 deletions(-) commit 2b0830e235181c8757a4cd6e64ebebce11565625 Author: Picca Frédéric-Emmanuel Date: Sun Jul 7 22:53:20 2013 +0200 provide a few method for the binding hkl/hkl-binding-private.h | 6 +++++ hkl/hkl-binding.c | 24 +++++++++++++++++++ hkl/hkl-matrix.c | 3 ++- hkl/hkl-parameter.c | 4 ++-- hkl/hkl-sample.c | 59 ++++++++++++++++++++++++++++------------------- tests/bindings/python.py | 33 ++++++++++++++++++++++++++ 6 files changed, 102 insertions(+), 27 deletions(-) commit accefa127aa8da0c70910ef6f383267af45f90c1 Author: Frédéric-Emmanuel PICCA Date: Mon Jun 24 13:15:57 2013 +0200 the geometry stored into the reflection is accessibleo only using the get /set method hkl.h | 2 +- hkl/hkl-sample.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit e0f4cc0ad47d7bf46d4e3ebe7e25a28929f50281 Author: Frédéric-Emmanuel PICCA Date: Mon Jun 24 11:21:44 2013 +0200 remove from git the .gir file hkl/Hkl-5.0.gir | 2490 ------------------------------------------------------- 1 file changed, 2490 deletions(-) commit 0be8b2b3529cf181d6fe55c61e99fca1ca00a25b Author: Picca Frédéric-Emmanuel Date: Sun Jun 23 22:01:57 2013 +0200 fix a few segfault in ghkl gui/hkl-gui-modelcolumns.h | 3 ++- gui/hkl-gui.cpp | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) commit 59c6e9a5623676953adcc6dc0b4cd55e070d3408 Author: Picca Frédéric-Emmanuel Date: Sun Jun 23 17:36:46 2013 +0200 use the right version number until we release 5.0.0 configure.ac | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit d7fd1980a9a16d46b914d664937d064540c62f70 Author: Picca Frédéric-Emmanuel Date: Sun Jun 23 17:18:50 2013 +0200 typo hkl.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit d8087b837eb17c2a5e4c0dd9cbe3594ce5e2b5e7 Author: Picca Frédéric-Emmanuel Date: Sun Jun 23 17:16:14 2013 +0200 the ux, uy, uz getter are now const it is not possible to modify the sample internal without a setter. gui/ghkl.ui | 6 +++--- gui/hkl-gui-callbacks.cpp | 40 +++++++++++++--------------------------- gui/hkl-gui.cpp | 24 ++++++++++++------------ gui/hkl-gui.h | 12 ++++++------ hkl.h | 6 +++--- hkl/Hkl-5.0.gir | 12 ++++++------ hkl/hkl-sample.c | 18 ++++++------------ 7 files changed, 49 insertions(+), 69 deletions(-) commit e892bc6e17752736987855181f83b77c2ca44912 Author: Picca Frédéric-Emmanuel Date: Sun Jun 23 16:37:59 2013 +0200 use const for the lattice get/set sample method this way it is not possible to modify the sample internals via the getter. the setter is now mendatory. gui/hkl-gui-callbacks.cpp | 111 ++++++++++------------------------------- gui/hkl-gui.cpp | 9 ++-- hkl.h | 8 ++- hkl/Hkl-5.0.gir | 63 +++++++++++++++++++++-- hkl/hkl-lattice.c | 41 ++++++++++++--- hkl/hkl-sample.c | 6 +-- tests/bindings/python.py | 25 ++++++++-- tests/hkl-pseudoaxis-e6c-t.c | 16 +++--- tests/hkl-pseudoaxis-zaxis-t.c | 11 ++-- tests/hkl-sample-t.c | 44 +++++++--------- 10 files changed, 180 insertions(+), 154 deletions(-) commit d1334e203bde1d3d3ace35f623717acd50a62597 Author: Picca Frédéric-Emmanuel Date: Sat Jun 22 11:16:05 2013 +0200 use the local headers instead of the system one where it is relevant hkl/hkl-parameter.c | 2 +- hkl/hkl-pseudoaxis-common-eulerians.c | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 2 +- hkl/hkl-pseudoaxis-common-psi.c | 2 +- hkl/hkl-pseudoaxis-common-q.c | 2 +- hkl/hkl-pseudoaxis-e4c-hkl.c | 2 +- hkl/hkl-pseudoaxis-e4c-psi.c | 2 +- hkl/hkl-pseudoaxis-e6c-hkl.c | 2 +- hkl/hkl-pseudoaxis-e6c-psi.c | 2 +- hkl/hkl-pseudoaxis-k4cv-hkl.c | 2 +- hkl/hkl-pseudoaxis-k4cv-psi.c | 2 +- hkl/hkl-pseudoaxis-k6c-hkl.c | 2 +- hkl/hkl-pseudoaxis-k6c-psi.c | 2 +- hkl/hkl-pseudoaxis-petra3-hkl.c | 2 +- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 2 +- hkl/hkl-pseudoaxis-zaxis-hkl.c | 2 +- hkl/hkl-source.c | 3 ++- hkl/hkl-types.c | 5 ++--- tests/hkl-axis-t.c | 4 ++-- tests/hkl-bench-t.c | 2 +- tests/hkl-detector-t.c | 2 +- tests/hkl-error-t.c | 2 +- tests/hkl-geometry-t.c | 2 +- tests/hkl-interval-t.c | 2 +- tests/hkl-lattice-t.c | 2 +- tests/hkl-matrix-t.c | 2 +- tests/hkl-parameter-t.c | 2 +- tests/hkl-pseudoaxis-e4ch-t.c | 2 +- tests/hkl-pseudoaxis-e4cv-t.c | 2 +- tests/hkl-pseudoaxis-e6c-t.c | 2 +- tests/hkl-pseudoaxis-k4cv-t.c | 2 +- tests/hkl-pseudoaxis-k6c-t.c | 2 +- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 2 +- tests/hkl-pseudoaxis-t.c | 2 +- tests/hkl-pseudoaxis-zaxis-t.c | 2 +- tests/hkl-quaternion-t.c | 2 +- tests/hkl-sample-t.c | 2 +- tests/hkl-source-t.c | 4 ++-- tests/hkl-unit-t.c | 2 +- tests/hkl-vector-t.c | 2 +- 40 files changed, 44 insertions(+), 44 deletions(-) commit ecccaebfde99ac8434e71c1c1e8aac29573b46f1 Author: Picca Frédéric-Emmanuel Date: Sat Jun 22 09:36:59 2013 +0200 remove the bool type this C99 type is unknown of gobject-introspection. hkl.h | 17 ++++++++--------- hkl/Hkl-5.0.gir | 40 ++++++++++++---------------------------- hkl/hkl-parameter.c | 8 ++++---- hkl/hkl-sample.c | 4 ++-- 4 files changed, 26 insertions(+), 43 deletions(-) commit 1a62b3f5a05db0bf1d3a0b318f15811a9098f62b Author: Picca Frédéric-Emmanuel Date: Sat Jun 22 09:06:29 2013 +0200 remove the version number from the hkl.h header once I figured out what is the right way to provide this number, I will add it. hkl.h | 7 ------- 1 file changed, 7 deletions(-) commit c35fee0fcd94739e4bb196f08758909110e414bc Author: Picca Frédéric-Emmanuel Date: Fri Jun 21 19:54:19 2013 +0200 now distcheck is working hkl/Makefile.am | 2 +- tests/Makefile.am | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) commit 52610211fa6df8844204c9ad23d66b5f8fb563d3 Author: Picca Frédéric-Emmanuel Date: Fri Jun 21 19:22:22 2013 +0200 install all the headers under hkl- @VMAJ@ this way it will be possible to install in parallel different major version of the hkl library. Makefile.am | 11 ++++++++--- configure.ac | 39 ++++++++++++++++++++++++++++++++++++--- hkl.pc.in | 2 +- hkl/Makefile.am | 25 +++++++++++-------------- hkl/ccan/Makefile.am | 2 +- 5 files changed, 57 insertions(+), 22 deletions(-) commit 15176995943856b7a4be301c66a8c8defd2bfdfa Author: Picca Frédéric-Emmanuel Date: Fri Jun 21 18:12:23 2013 +0200 activtable the -visibility=hiden flag - fix a few method visibility - deactive the hkl3d test since it is broken due to some symbols problem with c++. configure.ac | 8 +++---- hkl.h | 12 +++++----- hkl/Hkl-5.0.gir | 18 +++++++++++++++ hkl/Makefile.am | 1 + hkl/hkl-binding-private.h | 22 +++++++++---------- hkl/hkl-geometry.c | 19 ++++++++++++++++ hkl/hkl-type-builtins.h | 2 +- hkl/hkl-type-builtins.h.template | 2 +- hkl/hkl-types.h | 34 ++++++++++++++--------------- hkl3d/bullet/src/Makefile.am | 2 +- hkl3d/hkl3d.cpp | 47 +++++++++++++++++++++++++++++++--------- hkl3d/hkl3d.h | 4 ++-- tests/Makefile.am | 2 ++ 13 files changed, 121 insertions(+), 52 deletions(-) commit 0a6f96a7020aad5e2ee2cd74a913b8e5375d5988 Author: Picca Frédéric-Emmanuel Date: Fri Jun 21 14:31:57 2013 +0200 remove a few method from the public API moves them to the hkl-macros-private.h header hkl.h | 65 ++------------------------------- hkl/Hkl-5.0.gir | 10 ------ hkl/Makefile.am | 1 + hkl/hkl-error-private.h | 1 + hkl/hkl-interval.c | 1 + hkl/hkl-macros-private.h | 88 +++++++++++++++++++++++++++++++++++++++++++++ hkl/hkl-macros.c | 1 + hkl/hkl-matrix.c | 1 + hkl/hkl-parameter-private.h | 1 + hkl/hkl-quaternion.c | 1 + hkl/hkl-unit.c | 1 + hkl/hkl-vector.c | 1 + tests/tap/hkl-tap.c | 1 + 13 files changed, 100 insertions(+), 73 deletions(-) commit 78344cffa51dacbae213ad072d4e1cc52fc07a6c Author: Picca Frédéric-Emmanuel Date: Fri Jun 21 14:03:21 2013 +0200 put all the public API into an unit hkl.h header gui/hkl-gui-callbacks.cpp | 4 +- gui/hkl-gui-modelcolumns.h | 2 +- gui/hkl-gui.cpp | 31 +- gui/hkl-gui.h | 2 +- hkl.h | 543 +++++++++++++++++++++++++- hkl/Hkl-5.0.gir | 68 ++++ hkl/Makefile.am | 24 +- hkl/hkl-axis-private.h | 2 +- hkl/hkl-binding-private.h | 2 +- hkl/hkl-binding.c | 3 +- hkl/hkl-detector-factory.c | 3 +- hkl/hkl-detector-factory.h | 38 -- hkl/hkl-detector.h | 41 -- hkl/hkl-error-private.h | 3 +- hkl/hkl-error.h | 38 -- hkl/hkl-factory-private.h | 4 +- hkl/hkl-factory.c | 3 +- hkl/hkl-factory.h | 45 --- hkl/hkl-geometry-private.h | 7 +- hkl/hkl-geometry.h | 76 ---- hkl/hkl-interval-private.h | 2 +- hkl/hkl-lattice-private.h | 4 +- hkl/hkl-lattice.h | 73 ---- hkl/hkl-macros.c | 3 +- hkl/hkl-macros.h | 159 -------- hkl/hkl-matrix-private.h | 2 +- hkl/hkl-matrix.c | 3 +- hkl/hkl-matrix.h | 54 --- hkl/hkl-parameter-private.h | 6 +- hkl/hkl-parameter.h | 87 ----- hkl/hkl-pseudoaxis-common-eulerians-private.h | 2 +- hkl/hkl-pseudoaxis-common-q-private.h | 2 +- hkl/hkl-pseudoaxis-private.h | 4 +- hkl/hkl-pseudoaxis.h | 115 ------ hkl/hkl-quaternion-private.h | 3 +- hkl/hkl-quaternion.c | 2 +- hkl/hkl-sample-private.h | 5 +- hkl/hkl-sample.c | 3 +- hkl/hkl-sample.h | 124 ------ hkl/hkl-type-builtins.c | 2 +- hkl/hkl-type-builtins.h | 2 +- hkl/hkl-unit-private.h | 2 +- hkl/hkl-vector-private.h | 4 +- tests/hkl-pseudoaxis-e4ch-t.c | 2 +- tests/hkl-pseudoaxis-e4cv-t.c | 2 +- tests/hkl-pseudoaxis-e6c-t.c | 2 +- tests/hkl-pseudoaxis-k4cv-t.c | 2 +- tests/hkl-pseudoaxis-k6c-t.c | 2 +- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 2 +- tests/hkl-pseudoaxis-zaxis-t.c | 2 +- tests/tap/Makefile.am | 8 +- tests/tap/{hkl.c => hkl-tap.c} | 4 +- tests/tap/{hkl.h => hkl-tap.h} | 11 +- 53 files changed, 682 insertions(+), 957 deletions(-) commit b88034c233faf4f26de9bc8f3472155e845f6e30 Author: Picca Frédéric-Emmanuel Date: Fri Jun 21 12:45:01 2013 +0200 part of the HklError API is now public gui/hkl-gui.cpp | 2 +- hkl/Hkl-5.0.gir | 392 ++++------------------------------ hkl/Makefile.am | 1 + hkl/hkl-binding.c | 1 + hkl/hkl-error-private.h | 72 +++++++ hkl/hkl-error.c | 13 +- hkl/hkl-error.h | 36 +--- hkl/hkl-pseudoaxis-auto-private.h | 1 + hkl/hkl-pseudoaxis-auto.c | 1 + hkl/hkl-pseudoaxis-common-eulerians.c | 1 + hkl/hkl-pseudoaxis-common-hkl.c | 1 + hkl/hkl-pseudoaxis-common-psi.c | 1 + hkl/hkl-pseudoaxis.c | 1 + hkl/hkl-types.c | 1 + tests/hkl-error-t.c | 2 + 15 files changed, 133 insertions(+), 393 deletions(-) commit 611fbae474d69164098866ce0b29156bbd513ab3 Author: Picca Frédéric-Emmanuel Date: Fri Jun 21 12:31:00 2013 +0200 fix a missing stdio.h in hkl-geometry.h hkl/hkl-geometry.h | 1 + 1 file changed, 1 insertion(+) commit 291ec10c5c03332eedff84dbd65fd6b1b48143cd Author: Picca Frédéric-Emmanuel Date: Fri Jun 21 12:12:21 2013 +0200 HklVector is private hkl/Hkl-5.0.gir | 633 +---------------------------- hkl/Makefile.am | 8 +- hkl/hkl-axis-private.h | 2 +- hkl/hkl-matrix-private.h | 2 +- hkl/hkl-matrix.c | 2 +- hkl/hkl-quaternion-private.h | 11 +- hkl/hkl-quaternion.c | 2 +- hkl/hkl-source-private.h | 2 +- hkl/{hkl-vector.h => hkl-vector-private.h} | 4 +- hkl/hkl-vector.c | 2 +- tests/hkl-vector-t.c | 2 +- 11 files changed, 23 insertions(+), 647 deletions(-) commit fcafa97c8738d00738d437afbaaf19ef11b76638 Author: Picca Frédéric-Emmanuel Date: Fri Jun 21 12:03:32 2013 +0200 HklUnit is private hkl/Hkl-5.0.gir | 98 ++-------------------------------- hkl/Makefile.am | 6 +-- hkl/hkl-lattice.c | 2 +- hkl/hkl-parameter-private.h | 2 +- hkl/hkl-type-builtins.c | 18 ------- hkl/hkl-type-builtins.c.template | 1 - hkl/hkl-type-builtins.h | 4 -- hkl/{hkl-unit.h => hkl-unit-private.h} | 6 +-- hkl/hkl-unit.c | 3 +- tests/hkl-unit-t.c | 2 +- 10 files changed, 15 insertions(+), 127 deletions(-) commit c685b927c015e7d2625f6c0eaa451ee86413bfd0 Author: Picca Frédéric-Emmanuel Date: Fri Jun 21 11:51:46 2013 +0200 HklQuaternion is private hkl/Hkl-5.0.gir | 262 +-------------------- hkl/Makefile.am | 4 +- hkl/hkl-axis-private.h | 7 +- hkl/hkl-geometry-private.h | 3 +- hkl/{hkl-quaternion.h => hkl-quaternion-private.h} | 0 hkl/hkl-quaternion.c | 2 +- hkl/hkl-types.c | 12 - hkl/hkl-types.h | 3 - hkl/hkl-vector.c | 2 +- tests/hkl-quaternion-t.c | 2 +- 10 files changed, 9 insertions(+), 288 deletions(-) commit a72bf8e4aba6b90733bb74604b0058abb4658023 Author: Picca Frédéric-Emmanuel Date: Fri Jun 21 11:44:37 2013 +0200 HklInterval is now private hkl/Hkl-5.0.gir | 270 ------------------------- hkl/Makefile.am | 4 +- hkl/{hkl-interval.h => hkl-interval-private.h} | 6 +- hkl/hkl-interval.c | 2 +- hkl/hkl-parameter-private.h | 6 +- hkl/hkl-types.c | 12 -- hkl/hkl-types.h | 3 - tests/hkl-interval-t.c | 2 +- 8 files changed, 9 insertions(+), 296 deletions(-) commit 2e16e91ff4448d4603caa326ee3191bf71715324 Author: Picca Frédéric-Emmanuel Date: Fri Jun 21 11:34:52 2013 +0200 Hklsource is private hkl/Hkl-5.0.gir | 159 +---------------------------- hkl/Makefile.am | 6 +- hkl/hkl-geometry-private.h | 8 +- hkl/{hkl-source.h => hkl-source-private.h} | 8 +- hkl/hkl-types.c | 12 --- hkl/hkl-types.h | 3 - 6 files changed, 15 insertions(+), 181 deletions(-) commit 249f2c9df0fa2677b1273151bd71210d9f611961 Author: Picca Frédéric-Emmanuel Date: Wed Jun 19 22:48:54 2013 +0200 clean the hkl-matrix.h header remove the useless stdio.h and hkl-vector.h hkl/Hkl-5.0.gir | 1278 ++++++++++++++++++++++++++++++++++++--------- hkl/hkl-lattice-private.h | 2 + hkl/hkl-matrix.h | 8 +- tests/hkl-vector-t.c | 2 + 4 files changed, 1045 insertions(+), 245 deletions(-) commit 1c46d77815b3fcb805b48d2558656c0a17eb58b9 Author: Frédéric-Emmanuel PICCA Date: Wed Jun 19 16:09:58 2013 +0200 now the internal of the HklMatrix is completly private gui/hkl-gui-callbacks.cpp | 39 +++-- gui/hkl-gui.cpp | 22 +-- hkl.h | 1 + hkl/Hkl-5.0.gir | 245 ++++++++++--------------------- hkl/Makefile.am | 1 + hkl/hkl-lattice.c | 7 +- hkl/hkl-matrix-private.h | 65 ++++++++ hkl/hkl-matrix.c | 74 +++++++++- hkl/hkl-matrix.h | 50 ++----- hkl/hkl-quaternion.c | 8 +- hkl/hkl-sample-private.h | 1 + hkl/hkl-vector.c | 6 +- tests/hkl-lattice-t.c | 35 +++-- tests/hkl-matrix-t.c | 2 + tests/hkl-pseudoaxis-e6c-t.c | 24 +-- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 7 +- tests/hkl-pseudoaxis-zaxis-t.c | 7 +- tests/hkl-quaternion-t.c | 15 +- tests/hkl-sample-t.c | 48 +++--- tests/hkl-vector-t.c | 10 +- 20 files changed, 359 insertions(+), 308 deletions(-) commit abfe3d4ebbbd02e61b69b75ae0887e4cbb95d35c Author: Frédéric-Emmanuel PICCA Date: Tue Jun 18 17:15:31 2013 +0200 struct HklLattice is now private. gui/hkl-gui-callbacks.cpp | 70 ++++++++++++++---- gui/hkl-gui.cpp | 80 +++++++++++++-------- hkl/Hkl-5.0.gir | 180 +++++++++++++++++++++++++++------------------- hkl/Makefile.am | 1 + hkl/hkl-lattice-private.h | 49 +++++++++++++ hkl/hkl-lattice.c | 116 +++++++++++++++++++++++++++++- hkl/hkl-lattice.h | 50 +++++++------ hkl/hkl-sample.c | 1 + hkl/hkl-types.c | 1 + tests/hkl-lattice-t.c | 108 ++++++++++++++-------------- tests/hkl-sample-t.c | 24 +++---- 11 files changed, 474 insertions(+), 206 deletions(-) commit 9c905da584ab939517f1626c31ea892d91a5a23f Author: Frédéric-Emmanuel PICCA Date: Thu Jun 13 13:46:37 2013 +0200 now all the sample API is "clean" gui/hkl-gui-callbacks.cpp | 11 +- hkl/Hkl-5.0.gir | 1360 +++++++++------------------------------------ hkl/hkl-sample-private.h | 4 - hkl/hkl-sample.c | 26 +- hkl/hkl-sample.h | 10 +- tests/hkl-sample-t.c | 72 ++- 6 files changed, 343 insertions(+), 1140 deletions(-) commit cf3915a88c9e59b1764626f58da7c5b24d8327b7 Author: Picca Frédéric-Emmanuel Date: Sun Jun 9 21:09:53 2013 +0200 clean the hkl-sample part hkl/hkl-sample-private.h | 7 ------- hkl/hkl-sample.c | 3 --- hkl/hkl-sample.h | 9 ++------- 3 files changed, 2 insertions(+), 17 deletions(-) commit 813370a42b3604c8377e182cceb7276a143243a8 Author: Picca Frédéric-Emmanuel Date: Sun Jun 9 20:52:27 2013 +0200 use a ccan list for the sample reflections INSTALL | 8 +- Makefile.am | 2 +- gui/hkl-gui-callbacks.cpp | 47 +- gui/hkl-gui-modelcolumns.h | 2 + gui/hkl-gui.cpp | 11 +- hkl/Hkl-5.0.gir | 1372 +++++++++++++++++++++++++++++++++++--------- hkl/ccan/Makefile.am | 2 + hkl/ccan/list/LICENSE | 1 + hkl/ccan/list/list.c | 43 ++ hkl/ccan/list/list.h | 563 ++++++++++++++++++ hkl/hkl-sample-private.h | 19 +- hkl/hkl-sample.c | 165 ++---- hkl/hkl-sample.h | 27 +- tests/hkl-sample-t.c | 42 +- 14 files changed, 1831 insertions(+), 473 deletions(-) commit aa9049686b0eaa577c2228449fd77d75caa21049 Author: Frédéric-Emmanuel PICCA Date: Fri May 31 10:55:01 2013 +0200 move to hkl_sample_UB_get/set gui/hkl-gui-callbacks.cpp | 2 +- gui/hkl-gui.cpp | 2 +- hkl/Hkl-5.0.gir | 61 ++++++++++++++++++++--------------------------- hkl/hkl-lattice.c | 2 +- hkl/hkl-sample-private.h | 4 ---- hkl/hkl-sample.c | 28 ++++++++-------------- hkl/hkl-sample.h | 4 ++-- tests/hkl-sample-t.c | 2 +- 8 files changed, 42 insertions(+), 63 deletions(-) commit eb0080ad4bb2919e9a689df9c9c6b9a969d1b363 Author: Frédéric-Emmanuel PICCA Date: Thu May 30 13:51:49 2013 +0200 now we have an hkl_sample_U_get/set method remove the hkl_sample_set_U_from_euler, use HklMatrix method then the hkl_sample_U_set method. gui/hkl-gui-callbacks.cpp | 10 ++++--- hkl/Hkl-5.0.gir | 46 +++++++++++++++++--------------- hkl/hkl-matrix.c | 15 +++++++++++ hkl/hkl-matrix.h | 2 ++ hkl/hkl-sample-private.h | 3 --- hkl/hkl-sample.c | 24 +++-------------- hkl/hkl-sample.h | 5 ++-- tests/hkl-pseudoaxis-e6c-t.c | 15 +++++++---- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 4 ++- tests/hkl-pseudoaxis-zaxis-t.c | 4 ++- 10 files changed, 69 insertions(+), 59 deletions(-) commit b056fa1008e62c0ea05d3e84e6ee3bd8b174fc5f Author: Frédéric-Emmanuel PICCA Date: Wed May 29 15:56:22 2013 +0200 create the hkl_sample_lattice_set method Documentation/sphinx/source/bindings/python.py | 10 ++-- Documentation/sphinx/source/pyplots/trajectory.py | 10 ++-- .../sphinx/source/pyplots/trajectory_full.py | 10 ++-- .../sphinx/source/pyplots/trajectory_simple.py | 10 ++-- gui/hkl-gui-callbacks.cpp | 31 ++++++----- hkl/Hkl-5.0.gir | 60 ++++++++++------------ hkl/hkl-lattice.c | 20 +++++++- hkl/hkl-lattice.h | 2 + hkl/hkl-sample-private.h | 12 ----- hkl/hkl-sample.c | 32 +++--------- hkl/hkl-sample.h | 4 +- tests/bindings/python.py | 20 +++++--- tests/bindings/trajectory.py | 10 ++-- tests/hkl-pseudoaxis-e6c-t.c | 18 ++++--- tests/hkl-pseudoaxis-zaxis-t.c | 13 +++-- tests/hkl-sample-t.c | 18 ++++--- 16 files changed, 146 insertions(+), 134 deletions(-) commit c9c5a9bb70ca81abaabd8ba6ee5f4fea92679e00 Author: Frédéric-Emmanuel PICCA Date: Wed May 29 10:45:33 2013 +0200 rename hkl_sample_set_name into hkl_sample_name_set for consistency gui/hkl-gui-callbacks.cpp | 4 ++-- hkl/Hkl-5.0.gir | 26 +++++++++++++------------- hkl/hkl-sample-private.h | 2 +- hkl/hkl-sample.c | 4 ++-- hkl/hkl-sample.h | 17 +++++++++++------ 5 files changed, 29 insertions(+), 24 deletions(-) commit e1efd72e6464b533c7b7b19c46529957f695b2ba Author: Frédéric-Emmanuel PICCA Date: Wed May 29 10:19:36 2013 +0200 remove the HklSampleType enum Documentation/sphinx/source/bindings/python.py | 2 +- Documentation/sphinx/source/pyplots/trajectory.py | 2 +- .../sphinx/source/pyplots/trajectory_full.py | 2 +- .../sphinx/source/pyplots/trajectory_simple.py | 2 +- Documentation/sphinx/source/test.py | 2 +- gui/hkl-gui-callbacks.cpp | 2 +- gui/hkl-gui.cpp | 2 +- hkl/Hkl-5.0.gir | 1285 ++++---------------- hkl/hkl-sample-private.h | 3 +- hkl/hkl-sample.c | 4 +- hkl/hkl-sample.h | 6 +- hkl/hkl-type-builtins.c | 15 - hkl/hkl-type-builtins.h | 4 - tests/bindings/python.py | 4 +- tests/bindings/trajectory.py | 2 +- tests/hkl-bench-t.c | 4 +- tests/hkl-pseudoaxis-e4ch-t.c | 12 +- tests/hkl-pseudoaxis-e4cv-t.c | 12 +- tests/hkl-pseudoaxis-e6c-t.c | 10 +- tests/hkl-pseudoaxis-k4cv-t.c | 6 +- tests/hkl-pseudoaxis-k6c-t.c | 8 +- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 2 +- tests/hkl-pseudoaxis-t.c | 2 +- tests/hkl-pseudoaxis-zaxis-t.c | 2 +- tests/hkl-sample-t.c | 18 +- 25 files changed, 304 insertions(+), 1109 deletions(-) commit 027b3fb69eb5f2f81525d66094a6301c33e37332 Author: Picca Frédéric-Emmanuel Date: Tue May 28 22:49:12 2013 +0200 HklSample struct is no more exposed gui/hkl-gui-callbacks.cpp | 97 ++++++++++++------- gui/hkl-gui.cpp | 76 +++++++++------ gui/hkl-gui.h | 1 + hkl/Hkl-5.0.gir | 207 ++++++++++++++++++++++++++++++++++------ hkl/hkl-parameter.c | 25 +++++ hkl/hkl-parameter.h | 4 + hkl/hkl-pseudoaxis-common-hkl.c | 1 + hkl/hkl-pseudoaxis-common-psi.c | 2 +- hkl/hkl-sample-private.h | 13 +++ hkl/hkl-sample.c | 132 +++++++++++++++++++++++++ hkl/hkl-sample.h | 43 ++++----- tests/bindings/python.py | 2 +- tests/hkl-sample-t.c | 82 +++++++++------- 13 files changed, 528 insertions(+), 157 deletions(-) commit 25d135e97c89e2d10f58b0090be499ecdaf24b28 Author: Picca Frédéric-Emmanuel Date: Wed May 22 13:31:08 2013 +0200 HklSampleRection is now an opac struct. gui/hkl-gui-callbacks.cpp | 33 ++++++++-------- gui/hkl-gui.cpp | 11 ++++-- hkl/Hkl-5.0.gir | 98 +++++++++++++++++++---------------------------- hkl/hkl-sample-private.h | 14 ++++--- hkl/hkl-sample.c | 60 ++++++++++++++++++++++------- hkl/hkl-sample.h | 35 +++++++++-------- tests/hkl-sample-t.c | 2 +- 7 files changed, 138 insertions(+), 115 deletions(-) commit e6199cda30aaf0fd2a31456253b34c21c3a0e3ba Author: Picca Frédéric-Emmanuel Date: Tue May 21 17:05:59 2013 +0200 autopep8 Documentation/sphinx/source/pyplots/trajectory.py | 9 +++++---- Documentation/sphinx/source/pyplots/trajectory_full.py | 4 ++-- Documentation/sphinx/source/pyplots/trajectory_simple.py | 3 ++- tests/bindings/python.py | 10 ++++++---- tests/bindings/trajectory.py | 6 ++++-- 5 files changed, 19 insertions(+), 13 deletions(-) commit 7fda3edbbd686c982255ee472c646c34dd3a8e29 Author: Picca Frédéric-Emmanuel Date: Tue May 21 17:05:47 2013 +0200 removed the HklSampleList. users should deal them self with multiple samples, the way they want. I do not want to enforce a way to deal with these mutiple samples. gui/hkl-gui-callbacks.cpp | 189 +++++++++++++------------------- gui/hkl-gui.cpp | 77 +++++++------ gui/hkl-gui.h | 5 +- hkl/Hkl-5.0.gir | 212 ------------------------------------ hkl/Makefile.am | 3 +- hkl/hkl-sample-private.h | 99 +++++++++++++++++ hkl/hkl-sample.c | 267 +--------------------------------------------- hkl/hkl-sample.h | 40 +------ hkl/hkl-types.c | 13 +-- hkl/hkl-types.h | 3 - tests/hkl-sample-t.c | 81 +------------- 11 files changed, 222 insertions(+), 767 deletions(-) commit edf2f6f6b12102edf5f14babeceee1e08b982256 Author: Picca Frédéric-Emmanuel Date: Fri May 17 09:43:48 2013 +0200 move the public API of HklParameterList with the hkl_parameter_list_xxx_get/set hkl/Hkl-5.0.gir | 50 ++++++++++++++++++++--------------------- hkl/hkl-binding-private.h | 2 +- hkl/hkl-binding.c | 14 ++++++------ hkl/hkl-parameter-private.h | 4 ++-- hkl/hkl-parameter.c | 12 +++++----- hkl/hkl-parameter.h | 2 +- hkl/hkl-pseudoaxis-common-psi.c | 4 ++-- hkl/hkl-pseudoaxis-k4cv-hkl.c | 12 +++++----- hkl/hkl-pseudoaxis-k6c-hkl.c | 8 +++---- tests/hkl-bench-t.c | 4 ++-- tests/hkl-pseudoaxis-e4ch-t.c | 30 ++++++++++++------------- tests/hkl-pseudoaxis-e4cv-t.c | 32 +++++++++++++------------- tests/hkl-pseudoaxis-e6c-t.c | 24 ++++++++++---------- tests/hkl-pseudoaxis-k4cv-t.c | 6 ++--- tests/hkl-pseudoaxis-k6c-t.c | 8 +++---- tests/hkl-pseudoaxis-zaxis-t.c | 4 ++-- tests/tap/hkl.c | 2 +- 17 files changed, 109 insertions(+), 109 deletions(-) commit f5d49b594260191c4a6356f23d7a347a1d1abbab Author: Picca Frédéric-Emmanuel Date: Fri May 17 09:09:00 2013 +0200 now HklParameterList is an obscure struct not exposed to the public API. in fact this structure is nothing else than a darray_parameter. But to expose this struct in the binding we need a namespace so we need this Hklxxx name. gui/hkl-gui-pseudoaxes.cpp | 2 +- gui/hkl-gui.cpp | 2 +- hkl/Hkl-5.0.gir | 130 +++++++------------------------ hkl/hkl-geometry.c | 2 +- hkl/hkl-parameter-private.h | 117 ++-------------------------- hkl/hkl-parameter.c | 86 +++++++++++++------- hkl/hkl-parameter.h | 26 ++----- hkl/hkl-pseudoaxis-private.h | 17 ++-- hkl/hkl-pseudoaxis.c | 5 +- hkl/hkl-unit.c | 4 +- hkl/hkl-vector.c | 2 +- hkl/hkl-vector.h | 4 +- tests/bindings/python.py | 2 +- tests/hkl-bench-t.c | 2 +- tests/hkl-pseudoaxis-e4ch-t.c | 2 +- tests/hkl-pseudoaxis-e4cv-t.c | 2 +- tests/hkl-pseudoaxis-e6c-t.c | 6 +- tests/hkl-pseudoaxis-k4cv-t.c | 4 +- tests/hkl-pseudoaxis-k6c-t.c | 4 +- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 2 +- 20 files changed, 133 insertions(+), 288 deletions(-) commit cfd68467cddf379ec23e449d018898910a925667 Author: Picca Frédéric-Emmanuel Date: Mon May 13 17:59:24 2013 +0200 consistant API for HklParameter hkl_parameter_xxx_get/get gui/hkl-gui-callbacks.cpp | 8 +-- gui/hkl-gui-pseudoaxes.cpp | 8 +-- gui/hkl-gui.cpp | 68 +++++++++---------- hkl/Hkl-5.0.gir | 62 +++++++++--------- hkl/hkl-axis.c | 4 +- hkl/hkl-binding.c | 4 +- hkl/hkl-factory.c | 24 +++---- hkl/hkl-geometry.c | 14 ++-- hkl/hkl-lattice.c | 90 +++++++++++++------------- hkl/hkl-parameter-private.h | 34 ++++++---- hkl/hkl-parameter.c | 24 +++---- hkl/hkl-parameter.h | 12 ++-- hkl/hkl-pseudoaxis-auto.c | 2 +- hkl/hkl-pseudoaxis-common-eulerians.c | 6 +- hkl/hkl-pseudoaxis-common-hkl.c | 14 ++-- hkl/hkl-pseudoaxis-private.h | 4 +- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 6 +- hkl/hkl-sample.c | 68 +++++++++---------- hkl/hkl-type-builtins.c | 1 + hkl/hkl-type-builtins.c.template | 1 + tests/bindings/python.py | 2 +- tests/hkl-axis-t.c | 72 ++++++++++----------- tests/hkl-bench-t.c | 4 +- tests/hkl-detector-t.c | 4 +- tests/hkl-geometry-t.c | 16 ++--- tests/hkl-interval-t.c | 2 + tests/hkl-lattice-t.c | 108 +++++++++++++++---------------- tests/hkl-parameter-t.c | 2 +- tests/hkl-pseudoaxis-e4ch-t.c | 2 +- tests/hkl-pseudoaxis-e4cv-t.c | 2 +- tests/hkl-pseudoaxis-e6c-t.c | 14 ++-- tests/hkl-pseudoaxis-k4cv-t.c | 4 +- tests/hkl-pseudoaxis-k6c-t.c | 6 +- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 2 +- tests/hkl-pseudoaxis-t.c | 8 +-- tests/hkl-sample-t.c | 54 ++++++++-------- tests/hkl-unit-t.c | 2 + tests/tap/hkl.c | 2 +- 38 files changed, 382 insertions(+), 378 deletions(-) commit 6c36c712cfe14dfcb10efd713cfb57e1d2b1640c Author: Picca Frédéric-Emmanuel Date: Fri May 17 08:55:42 2013 +0200 start to work on the HklParameter interface. .../sphinx/source/pyplots/trajectory_full.py | 2 +- .../sphinx/source/pyplots/trajectory_simple.py | 4 +- gui/hkl-gui-callbacks.cpp | 44 ++-- gui/hkl-gui-pseudoaxes.cpp | 4 +- gui/hkl-gui.cpp | 16 +- hkl/Hkl-5.0.gir | 256 ++++----------------- hkl/hkl-axis-private.h | 3 +- hkl/hkl-parameter-private.h | 37 +++ hkl/hkl-parameter.c | 31 +-- hkl/hkl-parameter.h | 58 +---- tests/bindings/python.py | 9 +- tests/bindings/trajectory.py | 6 +- tests/hkl-axis-t.c | 10 +- tests/hkl-geometry-t.c | 14 +- tests/hkl-parameter-t.c | 2 + tests/hkl-pseudoaxis-t.c | 4 +- 16 files changed, 180 insertions(+), 320 deletions(-) commit c09c3e53c0b9f9132f95bceacf6430f05e6c04a0 Author: Picca Frédéric-Emmanuel Date: Sat May 4 18:48:18 2013 +0200 the ccan list module is now useless Makefile.am | 2 +- hkl/ccan/Makefile.am | 8 +- hkl/ccan/list/LICENSE | 1 - hkl/ccan/list/list.c | 43 --- hkl/ccan/list/list.h | 563 -------------------------------------- hkl/hkl-axis.c | 1 + hkl/hkl-geometry.c | 1 + hkl/hkl-parameter-private.h | 1 - hkl/hkl-pseudoaxis-auto-private.h | 1 + hkl/hkl-pseudoaxis.c | 1 + tests/hkl-geometry-t.c | 1 + 11 files changed, 7 insertions(+), 616 deletions(-) commit e0f3656f8f7bbe9d555f99028fe043d8ea3f0cdc Author: Picca Frédéric-Emmanuel Date: Sat May 4 18:21:11 2013 +0200 no more hkl-axis.h Documentation/sphinx/source/pyplots/trajectory.py | 2 +- .../sphinx/source/pyplots/trajectory_full.py | 2 +- .../sphinx/source/pyplots/trajectory_simple.py | 2 +- gui/hkl-gui-callbacks.cpp | 20 +-- gui/hkl-gui-modelcolumns.h | 6 +- gui/hkl-gui.cpp | 26 ++-- hkl/Hkl-5.0.gir | 32 ++--- hkl/Makefile.am | 2 - hkl/hkl-axis-private.h | 5 +- hkl/hkl-axis.c | 4 +- hkl/hkl-axis.h | 41 ------- hkl/hkl-binding.c | 12 +- hkl/hkl-factory.c | 24 ++-- hkl/hkl-geometry-private.h | 9 +- hkl/hkl-geometry.c | 135 ++++++++++----------- hkl/hkl-geometry.h | 7 +- hkl/hkl-parameter-private.h | 2 +- hkl/hkl-parameter.h | 5 +- hkl/hkl-pseudoaxis-common-hkl.c | 20 +-- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 17 +-- hkl/hkl-pseudoaxis.h | 2 +- hkl/hkl-sample.c | 6 +- hkl3d/hkl3d.cpp | 4 +- tests/bindings/python.py | 2 +- tests/bindings/trajectory.py | 6 +- tests/hkl-axis-t.c | 36 +++--- tests/hkl-detector-t.c | 4 +- tests/hkl-geometry-t.c | 16 +-- tests/hkl-pseudoaxis-e6c-t.c | 4 +- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 4 +- tests/hkl3d-test-t.c | 2 +- tests/tap/hkl.c | 6 +- tests/tap/hkl.h | 4 +- 33 files changed, 214 insertions(+), 255 deletions(-) commit 68a6ee8c30a210480cf464ccce9d1a2945f82aae Author: Picca Frédéric-Emmanuel Date: Fri May 3 23:08:42 2013 +0200 create an hkl-axis-private header this is temporary until we use only HklParameter gui/hkl-gui-callbacks.cpp | 2 ++ gui/hkl-gui.cpp | 2 ++ hkl/Hkl-5.0.gir | 9 ------- hkl/Makefile.am | 1 + hkl/hkl-axis-private.h | 41 ++++++++++++++++++++++++++++++++ hkl/hkl-axis.c | 5 ++-- hkl/hkl-axis.h | 11 +-------- hkl/hkl-binding.c | 1 + hkl/hkl-factory.c | 21 ++++++++-------- hkl/hkl-geometry.c | 1 + hkl/hkl-pseudoaxis-common-hkl.c | 1 + hkl/hkl-pseudoaxis-soleil-sixs-med.c | 1 + hkl/hkl-sample.c | 1 + hkl3d/hkl3d.cpp | 1 + tests/hkl-axis-t.c | 1 + tests/hkl-detector-t.c | 1 + tests/hkl-geometry-t.c | 2 ++ tests/hkl-pseudoaxis-e6c-t.c | 4 ++-- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 2 ++ tests/hkl-quaternion-t.c | 2 ++ 20 files changed, 76 insertions(+), 34 deletions(-) commit fd8f271aa6517b032c56a2b70c3553a35d2d0d7c Author: Picca Frédéric-Emmanuel Date: Fri May 3 22:23:35 2013 +0200 remove hkl_axis_new_copy use hkl_parameter_new_copy instead hkl/Hkl-5.0.gir | 10 ---------- hkl/hkl-axis.c | 12 ------------ hkl/hkl-axis.h | 2 -- hkl/hkl-geometry.c | 4 +++- tests/hkl-axis-t.c | 5 ++++- 5 files changed, 7 insertions(+), 26 deletions(-) commit ea6070d77e12e77b91fd562d2a1f08f222ee1604 Author: Picca Frédéric-Emmanuel Date: Fri May 3 22:07:08 2013 +0200 remove hkl_axis_free hkl/Hkl-5.0.gir | 10 ---------- hkl/hkl-axis.c | 5 ----- hkl/hkl-axis.h | 2 -- hkl/hkl-geometry.c | 2 +- 4 files changed, 1 insertion(+), 18 deletions(-) commit f91a329f3ea125e4ef66d028360e3a657e8f50d0 Author: Picca Frédéric-Emmanuel Date: Fri May 3 21:52:56 2013 +0200 remove the hkl_axis_init method hkl/Hkl-5.0.gir | 16 ---------------- hkl/hkl-axis.c | 28 +++++++++++----------------- hkl/hkl-axis.h | 2 -- 3 files changed, 11 insertions(+), 35 deletions(-) commit 4af5a39374f488a0d8e5de67eefb03c3985e6d32 Author: Picca Frédéric-Emmanuel Date: Fri May 3 21:26:32 2013 +0200 create an init_copy method in the HklParameter class hkl/Hkl-5.0.gir | 30 +++++++++++++++++------------- hkl/hkl-axis.c | 15 ++++++++++----- hkl/hkl-axis.h | 2 -- hkl/hkl-geometry.c | 7 ++++--- hkl/hkl-parameter-private.h | 8 ++++++++ hkl/hkl-parameter.c | 10 ++++++++++ hkl/hkl-parameter.h | 2 ++ 7 files changed, 51 insertions(+), 23 deletions(-) commit e8970797992533381b09b686840754ecbe1ca04e Author: Picca Frédéric-Emmanuel Date: Fri May 3 18:01:44 2013 +0200 move the set_value_smallest_in_range into the HklParameter interface hkl/Hkl-5.0.gir | 24 +++++++++++++----------- hkl/hkl-axis.c | 35 ++++++++++++++++++----------------- hkl/hkl-axis.h | 2 -- hkl/hkl-geometry.c | 2 +- hkl/hkl-parameter-private.h | 23 +++++++++++++++-------- hkl/hkl-parameter.c | 9 +++++++++ hkl/hkl-parameter.h | 2 ++ tests/hkl-axis-t.c | 12 ++++++------ 8 files changed, 64 insertions(+), 45 deletions(-) commit 7655801f8a38d0d455e5ba8f0a2c1852b0bba5ad Author: Picca Frédéric-Emmanuel Date: Tue Apr 30 11:48:32 2013 +0200 remove useless declaration from the public API hkl/Hkl-5.0.gir | 2 -- hkl/hkl-geometry-private.h | 1 + hkl/hkl-geometry.h | 3 --- tests/hkl-source-t.c | 2 ++ 4 files changed, 3 insertions(+), 5 deletions(-) commit ac549a85915c50f37586194b8c1539eb1b52b83d Author: Picca Frédéric-Emmanuel Date: Tue Apr 30 11:35:09 2013 +0200 prepare the code for -fvisibility=hidden hkl/hkl-pseudoaxis.c | 15 +++--------- hkl/hkl-pseudoaxis.h | 64 ++++++++++++++++++++++++++-------------------------- 2 files changed, 35 insertions(+), 44 deletions(-) commit 8aa082dcc50bad799b5360454922bd3e14dc081b Author: Picca Frédéric-Emmanuel Date: Tue Apr 30 11:23:38 2013 +0200 detector struct are now privates. Documentation/sphinx/source/bindings/python.py | 4 +- Documentation/sphinx/source/pyplots/trajectory.py | 4 +- .../sphinx/source/pyplots/trajectory_full.py | 6 +- .../sphinx/source/pyplots/trajectory_simple.py | 4 +- gui/hkl-gui.cpp | 4 +- hkl/Hkl-5.0.gir | 120 ++++++++------------- hkl/Makefile.am | 2 + hkl/hkl-detector-factory.c | 1 + hkl/hkl-detector-private.h | 47 ++++++++ hkl/hkl-detector.c | 29 ++--- hkl/hkl-detector.h | 23 ++-- hkl/hkl-geometry-private.h | 15 +-- hkl/hkl-geometry.c | 9 +- hkl/hkl-geometry.h | 110 ++++--------------- hkl/hkl-pseudoaxis-auto-private.h | 1 + hkl/hkl-pseudoaxis.c | 4 +- hkl/hkl-sample.c | 8 +- hkl/hkl-sample.h | 2 +- hkl/hkl-types.c | 4 +- tests/bindings/python.py | 30 ++---- tests/bindings/trajectory.py | 4 +- tests/hkl-bench-t.c | 5 +- tests/hkl-detector-t.c | 2 +- tests/hkl-pseudoaxis-e4ch-t.c | 12 +-- tests/hkl-pseudoaxis-e4cv-t.c | 12 +-- tests/hkl-pseudoaxis-e6c-t.c | 10 +- tests/hkl-pseudoaxis-k4cv-t.c | 6 +- tests/hkl-pseudoaxis-k6c-t.c | 8 +- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 2 +- tests/hkl-pseudoaxis-t.c | 2 +- tests/hkl-pseudoaxis-zaxis-t.c | 2 +- tests/hkl-sample-t.c | 14 +-- 32 files changed, 217 insertions(+), 289 deletions(-) commit 2389c8c1a93f6bb0266e61f73bcb3004f9606adb Author: Picca Frédéric-Emmanuel Date: Tue May 14 14:45:13 2013 +0200 use only glib.h hkl/Hkl-5.0.gir | 1377 +++++++++++++++++++++++++++++++++++---------- hkl/hkl-binding-private.h | 4 +- 2 files changed, 1069 insertions(+), 312 deletions(-) commit cf25c86450c7ccef6ca7d2f1c37d8d2c67f24d06 Author: Frédéric-Emmanuel PICCA Date: Tue Apr 9 16:54:52 2013 +0200 remove the HklGeometryConfig and use the HklFactory instead gui/hkl-gui.cpp | 17 +++--- hkl/Hkl-5.0.gir | 2 - hkl/hkl-factory.c | 128 +++++++++++++++++++++------------------------ hkl/hkl-factory.h | 4 +- hkl/hkl-geometry-private.h | 27 ++-------- hkl/hkl-geometry.c | 19 +++---- hkl/hkl-geometry.h | 1 - tests/hkl-detector-t.c | 4 +- tests/hkl-geometry-t.c | 20 +++---- 9 files changed, 95 insertions(+), 127 deletions(-) commit 100387fdcf8bd86ba72325289258bee784b96b3c Author: Picca Frédéric-Emmanuel Date: Mon Apr 22 23:27:01 2013 +0200 first step for a private HklGeometry gui/hkl-gui-callbacks.cpp | 64 ++-- gui/hkl-gui-modelcolumns.h | 9 +- gui/hkl-gui.cpp | 59 ++-- hkl/Hkl-5.0.gir | 131 ++++++++- hkl/hkl-axis.c | 22 ++ hkl/hkl-axis.h | 10 +- hkl/hkl-binding-private.h | 6 + hkl/hkl-binding.c | 57 ++-- hkl/hkl-detector.c | 2 +- hkl/hkl-factory.c | 24 +- hkl/hkl-geometry-private.h | 20 +- hkl/hkl-geometry.c | 481 +++++++++++++++++-------------- hkl/hkl-geometry.h | 24 +- hkl/hkl-macros.h | 63 ++-- hkl/hkl-pseudoaxis-common-hkl.c | 61 ++-- hkl/hkl-pseudoaxis-common-psi.c | 16 +- hkl/hkl-pseudoaxis-common-q.c | 2 +- hkl/hkl-pseudoaxis-k6c-hkl.c | 4 +- hkl/hkl-pseudoaxis-private.h | 2 + hkl/hkl-pseudoaxis-soleil-sixs-med.c | 15 +- hkl/hkl-pseudoaxis.c | 27 +- hkl/hkl-pseudoaxis.h | 2 + hkl/hkl-sample.c | 21 +- hkl3d/hkl3d.cpp | 20 +- tests/Makefile.am | 6 +- tests/bindings/trajectory.py | 9 +- tests/hkl-axis-t.c | 28 +- tests/hkl-bench-t.c | 11 +- tests/hkl-detector-t.c | 6 +- tests/hkl-geometry-t.c | 50 ++-- tests/hkl-pseudoaxis-e4ch-t.c | 100 ++++--- tests/hkl-pseudoaxis-e4cv-t.c | 32 +- tests/hkl-pseudoaxis-e6c-t.c | 121 ++++---- tests/hkl-pseudoaxis-k4cv-t.c | 54 ++-- tests/hkl-pseudoaxis-k6c-t.c | 63 ++-- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 28 +- tests/hkl-pseudoaxis-t.c | 10 +- tests/hkl-pseudoaxis-zaxis-t.c | 10 +- tests/hkl-sample-t.c | 139 +++++---- tests/hkl3d-test-t.c | 28 +- 40 files changed, 1063 insertions(+), 774 deletions(-) commit d7e4cbd8a052d89921488581ef670b873ebfef76 Author: Picca Frédéric-Emmanuel Date: Wed Apr 17 09:55:39 2013 +0200 to delete hkl/Hkl-5.0.gir | 504 +------------------------------------------ hkl/hkl-detector.c | 2 + hkl/hkl-geometry-private.h | 185 ++++++++++++++++ hkl/hkl-geometry.c | 2 +- hkl/hkl-geometry.h | 159 +++++--------- hkl/hkl-pseudoaxis-private.h | 4 +- hkl/hkl-sample.c | 4 +- hkl/hkl-type-builtins.c | 26 --- hkl/hkl-type-builtins.h | 4 - 9 files changed, 248 insertions(+), 642 deletions(-) commit bc488da1b83aee0ce0b9f27466ade8db3a041e92 Author: Picca Frédéric-Emmanuel Date: Sat Mar 30 18:03:46 2013 +0100 switch to the new factory API and remove the old one Documentation/sphinx/source/bindings/python.py | 7 +- .../sphinx/source/pyplots/trajectory_full.py | 7 +- .../sphinx/source/pyplots/trajectory_simple.py | 7 +- gui/hkl-gui-callbacks.cpp | 11 +- gui/hkl-gui.cpp | 11 +- hkl/Hkl-5.0.gir | 312 ++------------------ hkl/hkl-factory.c | 316 ++++++++++++--------- hkl/hkl-factory.h | 194 +------------ tests/bindings/python.py | 17 +- tests/bindings/trajectory.py | 14 +- tests/hkl-axis-t.c | 1 + tests/hkl-bench-t.c | 18 +- tests/hkl-pseudoaxis-e4ch-t.c | 48 ++-- tests/hkl-pseudoaxis-e4cv-t.c | 48 ++-- tests/hkl-pseudoaxis-e6c-t.c | 40 +-- tests/hkl-pseudoaxis-k4cv-t.c | 24 +- tests/hkl-pseudoaxis-k6c-t.c | 32 +-- tests/hkl-pseudoaxis-soleil-sixs-med-t.c | 8 +- tests/hkl-pseudoaxis-t.c | 122 ++------ tests/hkl-pseudoaxis-zaxis-t.c | 8 +- tests/hkl-sample-t.c | 42 +-- tests/hkl3d-test-t.c | 6 +- 22 files changed, 402 insertions(+), 891 deletions(-) commit f85a7573903e27f1ae9fbab207ee93b8deb7c7e3 Author: Picca Frédéric-Emmanuel Date: Sat Mar 30 17:45:49 2013 +0100 move some code to be more user friendly hkl/hkl-pseudoaxis-auto-private.h | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) commit 68e6229e2499d60cf20236f6e91053ee3e782d0a Author: Picca Frédéric-Emmanuel Date: Sat Mar 30 17:45:03 2013 +0100 fix a bug when DEBUG was set change list -> darray hkl/hkl-pseudoaxis-auto.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 2270e73cdaa27a76e1e9c06258f6b8db16774b21 Author: Picca Frédéric-Emmanuel Date: Sat Mar 30 17:44:00 2013 +0100 fix a bug in the constant_incidence K6C mode the .get method was empty. hkl/hkl-pseudoaxis-common-hkl-private.h | 6 ++++++ hkl/hkl-pseudoaxis-k6c-hkl.c | 6 ++---- 2 files changed, 8 insertions(+), 4 deletions(-) commit 6715594ca1cab6b73695874de34a5d33809ff5a8 Author: Frédéric-Emmanuel PICCA Date: Fri Mar 29 13:42:56 2013 +0100 now use constructor for the hkl_engine_list_xxx hkl/hkl-factory.c | 333 ++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 238 insertions(+), 95 deletions(-) commit feb9e34fa5c0a25b33d410976737fb01e83f9a90 Author: Frédéric-Emmanuel PICCA Date: Fri Mar 29 11:37:43 2013 +0100 remove the CREATE_CONSTRUCTOR in favor of futur hkl_geometry_new_xxx hkl/hkl-factory.c | 167 ++++++++++++++++++++++++------------------------------ hkl/hkl-factory.h | 4 +- 2 files changed, 75 insertions(+), 96 deletions(-) commit 649fa8da98c0b7959af8af970ac4e603db085907 Author: Picca Frédéric-Emmanuel Date: Wed Mar 27 17:31:47 2013 +0100 clean does not remove the figures (it takes time to rebuild) Documentation/figures/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d2a263957909971304b19e5dd0c82225244de31d Author: Frédéric-Emmanuel PICCA Date: Tue Mar 26 18:03:25 2013 +0100 add autodata since it seems to work with gcc and clang Makefile.am | 2 +- configure.ac | 18 ++ hkl/Hkl-5.0.gir | 5 + hkl/Makefile.am | 1 + hkl/ccan/Makefile.am | 7 + hkl/ccan/autodata/LICENSE | 1 + hkl/ccan/autodata/autodata.c | 80 +++++++++ hkl/ccan/autodata/autodata.h | 108 ++++++++++++ hkl/ccan/compiler/LICENSE | 1 + hkl/ccan/compiler/compiler.h | 217 ++++++++++++++++++++++++ hkl/ccan/list/list.h | 90 ++++++++++ hkl/ccan/noerr/LICENSE | 1 + hkl/ccan/noerr/noerr.c | 43 +++++ hkl/ccan/noerr/noerr.h | 33 ++++ hkl/ccan/ptr_valid/LICENSE | 1 + hkl/ccan/ptr_valid/ptr_valid.c | 339 ++++++++++++++++++++++++++++++++++++ hkl/ccan/ptr_valid/ptr_valid.h | 229 +++++++++++++++++++++++++ hkl/hkl-binding.c | 18 +- hkl/hkl-factory-private.h | 34 ++++ hkl/hkl-factory.c | 377 ++++++++++++++++++++++++----------------- hkl/hkl-factory.h | 2 + 21 files changed, 1440 insertions(+), 167 deletions(-) commit a5135f4e8f3923888f6aa89792b38f87ea51fcc2 Author: Frédéric-Emmanuel PICCA Date: Tue Mar 26 15:39:31 2013 +0100 move the geometry-factory and the pseudoaxis-factory inthe same file in order to provide an unifyed factory class, prepare the transition and move all factories in the same hkl-factory unit. hkl.h | 3 +- hkl/Hkl-5.0.gir | 23 ++++ hkl/Makefile.am | 12 +- hkl/hkl-binding-private.h | 7 + hkl/hkl-binding.c | 32 +++++ hkl/{hkl-geometry-factory.c => hkl-factory.c} | 185 +++++++++++++++++++++++++- hkl/{hkl-geometry-factory.h => hkl-factory.h} | 15 ++- hkl/hkl-pseudoaxis-factory.c | 179 ------------------------- hkl/hkl-pseudoaxis-factory.h | 34 ----- tests/bindings/python.py | 15 +++ 10 files changed, 278 insertions(+), 227 deletions(-) commit 90e9dba1f5fed75580b61bbd26ca015c45e66536 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 25 17:43:41 2013 +0100 remove now useless TESTS file tests/Makefile.am | 2 -- tests/TESTS | 22 ---------------------- 2 files changed, 24 deletions(-) commit 90f432f35eae1a8d2ac3fd988457d261b761ca5c Author: Frédéric-Emmanuel PICCA Date: Mon Mar 25 17:38:59 2013 +0100 move the hkl3d test under tests directory configure.ac | 1 - tests/Makefile.am | 16 +++++++++++----- tests/{hkl3d/test-t.c => hkl3d-test-t.c} | 0 tests/hkl3d/Makefile.am | 21 --------------------- 4 files changed, 11 insertions(+), 27 deletions(-) commit 0814b7c21510a9c2059ba050d7fad7f17cc9b943 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 25 14:57:39 2013 +0100 move all hkl tests under tests/ configure.ac | 1 - tests/Makefile.am | 52 +++++++++++++++++++--- tests/{hkl/axis-t.c => hkl-axis-t.c} | 0 tests/{hkl/bench-t.c => hkl-bench-t.c} | 0 tests/{hkl/detector-t.c => hkl-detector-t.c} | 0 tests/{hkl/error-t.c => hkl-error-t.c} | 0 tests/{hkl/geometry-t.c => hkl-geometry-t.c} | 0 tests/{hkl/interval-t.c => hkl-interval-t.c} | 0 tests/{hkl/lattice-t.c => hkl-lattice-t.c} | 0 tests/{hkl/matrix-t.c => hkl-matrix-t.c} | 0 tests/{hkl/parameter-t.c => hkl-parameter-t.c} | 0 ...pseudoaxis-e4ch-t.c => hkl-pseudoaxis-e4ch-t.c} | 0 ...pseudoaxis-e4cv-t.c => hkl-pseudoaxis-e4cv-t.c} | 0 .../pseudoaxis-e6c-t.c => hkl-pseudoaxis-e6c-t.c} | 0 ...pseudoaxis-k4cv-t.c => hkl-pseudoaxis-k4cv-t.c} | 0 .../pseudoaxis-k6c-t.c => hkl-pseudoaxis-k6c-t.c} | 0 ...-med-t.c => hkl-pseudoaxis-soleil-sixs-med-t.c} | 0 tests/{hkl/pseudoaxis-t.c => hkl-pseudoaxis-t.c} | 0 ...eudoaxis-zaxis-t.c => hkl-pseudoaxis-zaxis-t.c} | 0 tests/{hkl/quaternion-t.c => hkl-quaternion-t.c} | 0 tests/{hkl/sample-t.c => hkl-sample-t.c} | 0 tests/{hkl/source-t.c => hkl-source-t.c} | 0 tests/{hkl/unit-t.c => hkl-unit-t.c} | 0 tests/{hkl/vector-t.c => hkl-vector-t.c} | 0 tests/hkl/Makefile.am | 39 ---------------- 25 files changed, 46 insertions(+), 46 deletions(-) commit d200ef67880c145c00d9d65d050220cc887bcf36 Author: Frédéric-Emmanuel PICCA Date: Wed Mar 13 13:36:13 2013 +0100 fix the ccan-update target now the Makefile.in and the Makefile are not erased during an upgrade Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 68df23964052ab3e58466f876bc0bff5320edb82 Author: Picca Frédéric-Emmanuel Date: Sun Mar 24 11:13:34 2013 +0100 switch to c-tap-harness 2.1 Makefile.am | 2 +- configure.ac | 10 +- {test => tests}/Makefile.am | 2 +- {test => tests}/TESTS | 0 {test => tests}/bindings/Makefile.am | 0 {test => tests}/bindings/python.py | 0 {test => tests}/bindings/trajectory.py | 0 {test => tests}/hkl/Makefile.am | 4 +- {test => tests}/hkl/axis-t.c | 0 {test => tests}/hkl/bench-t.c | 0 {test => tests}/hkl/detector-t.c | 0 {test => tests}/hkl/error-t.c | 0 {test => tests}/hkl/geometry-t.c | 1 + {test => tests}/hkl/interval-t.c | 1 + {test => tests}/hkl/lattice-t.c | 1 + {test => tests}/hkl/matrix-t.c | 1 + {test => tests}/hkl/parameter-t.c | 1 + {test => tests}/hkl/pseudoaxis-e4ch-t.c | 0 {test => tests}/hkl/pseudoaxis-e4cv-t.c | 0 {test => tests}/hkl/pseudoaxis-e6c-t.c | 0 {test => tests}/hkl/pseudoaxis-k4cv-t.c | 0 {test => tests}/hkl/pseudoaxis-k6c-t.c | 0 {test => tests}/hkl/pseudoaxis-soleil-sixs-med-t.c | 1 + {test => tests}/hkl/pseudoaxis-t.c | 0 {test => tests}/hkl/pseudoaxis-zaxis-t.c | 0 {test => tests}/hkl/quaternion-t.c | 1 + {test => tests}/hkl/sample-t.c | 1 + {test => tests}/hkl/source-t.c | 1 + {test => tests}/hkl/unit-t.c | 1 + {test => tests}/hkl/vector-t.c | 1 + {test => tests}/hkl3d/Makefile.am | 4 +- {test => tests}/hkl3d/test-t.c | 0 {test => tests}/runtests.c | 479 +++++++++++++++------ {test => tests}/tap/Makefile.am | 5 +- {test => tests}/tap/basic.c | 197 +++++++-- {test => tests}/tap/basic.h | 55 ++- tests/tap/float.c | 67 +++ tests/tap/float.h | 42 ++ {test => tests}/tap/hkl.c | 0 {test => tests}/tap/hkl.h | 0 {test => tests}/tap/libtap.sh | 0 tests/tap/macros.h | 88 ++++ 42 files changed, 740 insertions(+), 226 deletions(-) commit a969372f867880af33f05a25ae7d3c36a41dbd6f Author: Picca Frédéric-Emmanuel Date: Tue Mar 12 11:09:13 2013 +0100 bump the gtk-doc api version to 5 Documentation/api/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 91f3eb5ea2186e2842f8c38fb5f21a53f6a534b3 Author: Picca Frédéric-Emmanuel Date: Tue Mar 12 11:08:04 2013 +0100 do not install the .png thoses png will b einstalled with the sphinx documentation Documentation/figures/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit a501bf97cb828617679815c70af288e58a1974de Author: Picca Frédéric-Emmanuel Date: Tue Mar 12 10:54:06 2013 +0100 move ccan library at the right place Makefile.am | 62 ++++++++++++++++++++------ ccan/Makefile.am | 9 ---- configure.ac | 2 +- gui/Makefile.am | 1 - gui/hkl3d/Makefile.am | 1 - hkl/Makefile.am | 4 +- hkl/ccan/Makefile.am | 19 ++++++++ {ccan => hkl}/ccan/array_size/LICENSE | 0 {ccan => hkl}/ccan/array_size/array_size.h | 2 +- {ccan => hkl}/ccan/build_assert/LICENSE | 0 {ccan => hkl}/ccan/build_assert/build_assert.h | 0 {ccan => hkl}/ccan/check_type/LICENSE | 0 {ccan => hkl}/ccan/check_type/check_type.h | 2 +- {ccan => hkl}/ccan/container_of/LICENSE | 0 {ccan => hkl}/ccan/container_of/container_of.h | 2 +- {ccan => hkl}/ccan/darray/LICENSE | 0 {ccan => hkl}/ccan/darray/darray.h | 0 {ccan => hkl}/ccan/list/LICENSE | 0 {ccan => hkl}/ccan/list/list.c | 0 {ccan => hkl}/ccan/list/list.h | 4 +- hkl/hkl-axis.h | 2 +- hkl/hkl-geometry.h | 2 +- hkl/hkl-parameter-private.h | 2 +- hkl/hkl-parameter.h | 4 +- hkl/hkl-pseudoaxis-common-eulerians.c | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 2 +- hkl/hkl-pseudoaxis-common-psi.c | 2 +- hkl/hkl-pseudoaxis-common-q.c | 2 +- hkl/hkl-pseudoaxis-e4c-hkl.c | 2 +- hkl/hkl-pseudoaxis-e4c-psi.c | 2 +- hkl/hkl-pseudoaxis-e6c-hkl.c | 2 +- hkl/hkl-pseudoaxis-e6c-psi.c | 2 +- hkl/hkl-pseudoaxis-k4cv-hkl.c | 2 +- hkl/hkl-pseudoaxis-k4cv-psi.c | 2 +- hkl/hkl-pseudoaxis-k6c-hkl.c | 2 +- hkl/hkl-pseudoaxis-k6c-psi.c | 2 +- hkl/hkl-pseudoaxis-petra3-hkl.c | 2 +- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 2 +- hkl/hkl-pseudoaxis-zaxis-hkl.c | 2 +- hkl/hkl-pseudoaxis.h | 2 +- {ccan => hkl}/licenses/BSD-MIT | 0 {ccan => hkl}/licenses/CC0 | 0 hkl3d/Makefile.am | 1 - test/hkl/Makefile.am | 1 - test/hkl3d/Makefile.am | 1 - test/tap/Makefile.am | 3 +- 46 files changed, 97 insertions(+), 59 deletions(-) commit 42e6cefff257fbf5dba05205c38891ff629176b3 Author: Picca Frédéric-Emmanuel Date: Sun Mar 10 17:08:06 2013 +0100 remove the autodata module for now Makefile.am | 3 +- ccan/Makefile.am | 7 - ccan/ccan/autodata/LICENSE | 1 - ccan/ccan/autodata/autodata.c | 80 ---------- ccan/ccan/autodata/autodata.h | 108 ------------- ccan/ccan/compiler/LICENSE | 1 - ccan/ccan/compiler/compiler.h | 217 ------------------------- ccan/ccan/noerr/LICENSE | 1 - ccan/ccan/noerr/noerr.c | 43 ----- ccan/ccan/noerr/noerr.h | 33 ---- ccan/ccan/ptr_valid/LICENSE | 1 - ccan/ccan/ptr_valid/ptr_valid.c | 339 ---------------------------------------- ccan/ccan/ptr_valid/ptr_valid.h | 229 --------------------------- 13 files changed, 2 insertions(+), 1061 deletions(-) commit a94c4365a7e06f9df0744e0ffa34f36a834107f6 Author: Picca Frédéric-Emmanuel Date: Sun Mar 10 16:55:05 2013 +0100 remove the non working swig binding for now configure.ac | 13 ------------- hkl/Makefile.am | 21 --------------------- 2 files changed, 34 deletions(-) commit d8bef91639330f8f1c7e19474285b5ca6e26d05c Author: Picca Frédéric-Emmanuel Date: Sun Mar 10 16:08:36 2013 +0100 now the ccan part can be updated with the ccan-update target Makefile.am | 15 ++ ccan/Makefile.am | 23 +- ccan/ccan/array_size/LICENSE | 1 + ccan/{ => ccan}/array_size/array_size.h | 1 + ccan/{darray => ccan/autodata}/LICENSE | 0 ccan/ccan/autodata/autodata.c | 80 +++++++ ccan/ccan/autodata/autodata.h | 108 +++++++++ ccan/ccan/build_assert/LICENSE | 1 + ccan/{ => ccan}/build_assert/build_assert.h | 1 + ccan/ccan/check_type/LICENSE | 1 + ccan/{ => ccan}/check_type/check_type.h | 3 +- ccan/ccan/compiler/LICENSE | 1 + ccan/ccan/compiler/compiler.h | 217 ++++++++++++++++++ ccan/ccan/container_of/LICENSE | 1 + ccan/{ => ccan}/container_of/container_of.h | 1 + ccan/ccan/darray/LICENSE | 1 + ccan/{ => ccan}/darray/darray.h | 2 +- ccan/ccan/list/LICENSE | 1 + ccan/{ => ccan}/list/list.c | 2 +- ccan/{ => ccan}/list/list.h | 6 +- ccan/ccan/noerr/LICENSE | 1 + ccan/ccan/noerr/noerr.c | 43 ++++ ccan/ccan/noerr/noerr.h | 33 +++ ccan/ccan/ptr_valid/LICENSE | 1 + ccan/ccan/ptr_valid/ptr_valid.c | 339 ++++++++++++++++++++++++++++ ccan/ccan/ptr_valid/ptr_valid.h | 229 +++++++++++++++++++ ccan/licenses/BSD-MIT | 17 ++ ccan/licenses/CC0 | 28 +++ gui/Makefile.am | 1 + gui/hkl3d/Makefile.am | 1 + hkl/Makefile.am | 1 + hkl/hkl-macros.h | 2 + hkl/hkl-parameter.h | 2 +- hkl3d/Makefile.am | 1 + test/hkl/Makefile.am | 1 + test/hkl3d/Makefile.am | 3 +- test/tap/Makefile.am | 5 +- 37 files changed, 1157 insertions(+), 17 deletions(-) commit 0c9b350b7bd0a2746dc66883e59f1ed6b99a525b Author: Picca Frédéric-Emmanuel Date: Sat Mar 9 19:19:15 2013 +0100 fix the test suite. hkl3d SUBDIRS was built after . which is wrong. So remove . to avoid this. test/Makefile.am | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 93c9f9e6e091b55f8e1832db965432324271b5d1 Author: Picca Frédéric-Emmanuel Date: Wed Feb 6 20:45:59 2013 +0100 add the med2_3_slits figure Documentation/figures/med2_3_slits.asy | 79 ++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) commit c3425266e928836b743c3345afbe76d67c764655 Author: Frédéric-Emmanuel PICCA Date: Mon Feb 4 17:35:58 2013 +0100 pythn API evolves so the python script of the documentaiton should be fixed Documentation/sphinx/source/pyplots/trajectory_simple.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9dce659205905d1336bb70d73dd497f249177df9 Merge: 86505487 776b3257 Author: Frédéric-Emmanuel PICCA Date: Mon Feb 4 17:26:13 2013 +0100 Merge branch 'maint' into next Conflicts: hkl/Makefile.am hkl/hkl-pseudoaxis-common-q.c hkl/hkl-pseudoaxis-factory.c hkl/hkl-pseudoaxis-soleil-sixs-med.c hkl/pom.xml test/Makefile.am commit 776b32570079571ce35f7a3afa74d78083c6d30e Author: Frédéric-Emmanuel PICCA Date: Mon Feb 4 14:37:24 2013 +0100 add the qper_qpar figure Documentation/figures/Makefile.am | 6 +- Documentation/figures/qper_qpar.asy | 66 ++++++++++++++++++++++ .../sphinx/source/diffractometers/med2_3.rst | 2 +- Documentation/sphinx/source/pseudo.rst | 8 ++- 4 files changed, 77 insertions(+), 5 deletions(-) commit 50df26c679c7f41064b4bd293f3108d93c638f4a Author: Frédéric-Emmanuel PICCA Date: Fri Feb 1 16:54:43 2013 +0100 switch to C99 and release the soleil-six-med qper_qpar test constrain configure.ac | 2 +- hkl/Makefile.am | 2 +- test/Makefile.am | 2 +- test/hkl-test-pseudoaxis-soleil-sixs-med.c | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) commit 8650548748a4477cfa862767ceee78338609568d Author: Frédéric-Emmanuel PICCA Date: Fri Jan 25 18:21:11 2013 +0100 add a non working swig binding configure.ac | 27 +++++++++++++++++++++++++++ hkl/Makefile.am | 22 ++++++++++++++++++++++ 2 files changed, 49 insertions(+) commit 370dcd6bed0b708956b2d6fe26987aa0005fa935 Author: Frédéric-Emmanuel PICCA Date: Tue Nov 6 16:06:00 2012 +0100 add the HklGeometryConfig description member populate it from the documentation the idea is to use this memeber to auto-generate the diffractometer part documentation. This way the descption of a geometry will be coherent in the documentation and in the code. hkl/Hkl-5.0.gir | 203 +++++++++++++++++++++++++++++++++++++++++++++ hkl/hkl-geometry-factory.h | 189 ++++++++++++++++++++++++++++++++++++++--- hkl/hkl-geometry.h | 1 + 3 files changed, 381 insertions(+), 12 deletions(-) commit 12998fb67fdd6890a2e7ba2b6f0abb22214d5cab Author: Picca Frédéric-Emmanuel Date: Wed Jan 30 22:33:28 2013 +0100 add the missing test file test/Makefile.am | 1 + test/hkl-test-pseudoaxis-soleil-sixs-med.c | 106 +++++++++++++++++++++++++++++ test/main.c | 2 +- 3 files changed, 108 insertions(+), 1 deletion(-) commit 9e8639a3e673d6e831795088963b6b000509240d Author: Frédéric-Emmanuel PICCA Date: Wed Jan 30 09:55:21 2013 +0100 unactive for now the soleil-sixs-med-2+3 test until I commit the missing file test/Makefile.am | 1 - test/main.c | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) commit 58729510c1a545bce8fa030bbd9273f95cb91b67 Author: Frédéric-Emmanuel PICCA Date: Wed Jan 30 09:46:31 2013 +0100 now all pseudo axes of the soleil-sixs-med-2-3 diffractometer are using the slits hkl/hkl-pseudoaxis-factory.c | 1 + hkl/hkl-pseudoaxis-soleil-sixs-med.c | 86 +++++++++++++----------------------- hkl/hkl-pseudoaxis-soleil-sixs-med.h | 2 + 3 files changed, 34 insertions(+), 55 deletions(-) commit 57054a57fb77236d670e1111f412700323a75367 Author: Picca Frédéric-Emmanuel Date: Sun Jan 27 12:49:31 2013 +0100 add test for soleil-sixs-med2_3 and fix qper_qpar hkl/Makefile.am | 2 +- hkl/hkl-pseudoaxis-common-q.c | 25 +++++++++++++++++++------ test/Makefile.am | 7 ++++--- test/main.c | 1 + 4 files changed, 25 insertions(+), 10 deletions(-) commit c50ba8a06ad495dd63c95722ae3d4c25bf60c48e Author: Picca Frédéric-Emmanuel Date: Tue Jan 15 21:55:23 2013 +0100 update the pom.xml file for the new release hkl/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 43badf8d5a97de4a319a7464b45c5fd2961a4170 Author: Picca Frédéric-Emmanuel Date: Mon Jan 14 17:35:23 2013 +0100 copyright for 2013 Documentation/sphinx/source/conf.py.in | 2 +- gui/hkl-gui-3d.cpp | 2 +- gui/hkl-gui-3d.h | 2 +- gui/hkl-gui-callbacks.cpp | 2 +- gui/hkl-gui-modelcolumns.h | 2 +- gui/hkl-gui-pseudoaxes.cpp | 2 +- gui/hkl-gui-pseudoaxes.h | 2 +- gui/hkl-gui.cpp | 2 +- gui/hkl-gui.h | 2 +- gui/hkl3d/GL_ShapeDrawer.cpp | 2 +- gui/hkl3d/GL_ShapeDrawer.h | 2 +- gui/hkl3d/hkl3d-gui-model.cpp | 2 +- gui/hkl3d/hkl3d-gui-model.h | 2 +- gui/hkl3d/hkl3d-gui-scene.cpp | 2 +- gui/hkl3d/hkl3d-gui-scene.h | 2 +- gui/hkl3d/hkl3d-gui-view.cpp | 2 +- gui/hkl3d/hkl3d-gui-view.h | 2 +- gui/main.cpp | 2 +- hkl/hkl-axis.c | 2 +- hkl/hkl-axis.h | 2 +- hkl/hkl-binding-private.h | 2 +- hkl/hkl-binding.c | 2 +- hkl/hkl-detector-factory.c | 2 +- hkl/hkl-detector-factory.h | 2 +- hkl/hkl-detector.c | 2 +- hkl/hkl-detector.h | 2 +- hkl/hkl-geometry-factory.c | 2 +- hkl/hkl-geometry-factory.h | 2 +- hkl/hkl-geometry.c | 2 +- hkl/hkl-geometry.h | 2 +- hkl/hkl-interval.c | 2 +- hkl/hkl-interval.h | 2 +- hkl/hkl-lattice.c | 2 +- hkl/hkl-lattice.h | 2 +- hkl/hkl-macros.c | 2 +- hkl/hkl-macros.h | 2 +- hkl/hkl-matrix.c | 2 +- hkl/hkl-matrix.h | 2 +- hkl/hkl-parameter-private.h | 2 +- hkl/hkl-parameter.c | 2 +- hkl/hkl-parameter.h | 2 +- hkl/hkl-pseudoaxis-auto-private.h | 2 +- hkl/hkl-pseudoaxis-auto.c | 2 +- hkl/hkl-pseudoaxis-common-eulerians-private.h | 2 +- hkl/hkl-pseudoaxis-common-eulerians.c | 2 +- hkl/hkl-pseudoaxis-common-hkl-private.h | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 2 +- hkl/hkl-pseudoaxis-common-psi-private.h | 2 +- hkl/hkl-pseudoaxis-common-psi.c | 2 +- hkl/hkl-pseudoaxis-common-q-private.h | 2 +- hkl/hkl-pseudoaxis-common-q.c | 2 +- hkl/hkl-pseudoaxis-e4c-hkl.c | 2 +- hkl/hkl-pseudoaxis-e4c-private.h | 2 +- hkl/hkl-pseudoaxis-e4c-psi.c | 2 +- hkl/hkl-pseudoaxis-e6c-hkl.c | 2 +- hkl/hkl-pseudoaxis-e6c-private.h | 2 +- hkl/hkl-pseudoaxis-e6c-psi.c | 2 +- hkl/hkl-pseudoaxis-factory.c | 2 +- hkl/hkl-pseudoaxis-factory.h | 2 +- hkl/hkl-pseudoaxis-k4cv-hkl.c | 2 +- hkl/hkl-pseudoaxis-k4cv-private.h | 2 +- hkl/hkl-pseudoaxis-k4cv-psi.c | 2 +- hkl/hkl-pseudoaxis-k6c-hkl.c | 2 +- hkl/hkl-pseudoaxis-k6c-private.h | 2 +- hkl/hkl-pseudoaxis-k6c-psi.c | 2 +- hkl/hkl-pseudoaxis-petra3-hkl.c | 2 +- hkl/hkl-pseudoaxis-petra3-private.h | 2 +- hkl/hkl-pseudoaxis-private.h | 2 +- hkl/hkl-pseudoaxis-soleil-sixs-med-private.h | 2 +- hkl/hkl-pseudoaxis-zaxis-hkl.c | 2 +- hkl/hkl-pseudoaxis-zaxis-private.h | 2 +- hkl/hkl-pseudoaxis.c | 2 +- hkl/hkl-pseudoaxis.h | 2 +- hkl/hkl-quaternion.c | 2 +- hkl/hkl-quaternion.h | 2 +- hkl/hkl-sample.c | 2 +- hkl/hkl-sample.h | 2 +- hkl/hkl-source.c | 2 +- hkl/hkl-source.h | 2 +- hkl/hkl-types.c | 2 +- hkl/hkl-types.h | 2 +- hkl/hkl-unit.c | 2 +- hkl/hkl-unit.h | 2 +- hkl/hkl-vector.c | 2 +- hkl/hkl-vector.h | 2 +- test/bindings/python.py | 2 +- test/hkl/axis-t.c | 2 +- test/hkl/bench-t.c | 2 +- test/hkl/detector-t.c | 2 +- test/hkl/error-t.c | 2 +- test/hkl/geometry-t.c | 2 +- test/hkl/interval-t.c | 2 +- test/hkl/lattice-t.c | 2 +- test/hkl/main-t.c | 2 +- test/hkl/matrix-t.c | 2 +- test/hkl/parameter-t.c | 2 +- test/hkl/pseudoaxis-e4ch-t.c | 2 +- test/hkl/pseudoaxis-e4cv-t.c | 2 +- test/hkl/pseudoaxis-e6c-t.c | 2 +- test/hkl/pseudoaxis-k4cv-t.c | 2 +- test/hkl/pseudoaxis-k6c-t.c | 2 +- test/hkl/pseudoaxis-t.c | 2 +- test/hkl/pseudoaxis-zaxis-t.c | 2 +- test/hkl/quaternion-t.c | 2 +- test/hkl/sample-t.c | 2 +- test/hkl/source-t.c | 2 +- test/hkl/unit-t.c | 2 +- test/hkl/vector-t.c | 2 +- test/hkl3d/test-t.c | 2 +- 109 files changed, 109 insertions(+), 109 deletions(-) commit 349b0c37f04f1d0253ec135ca4e5f4a67ce45801 Merge: 11247a9d 07205880 Author: Picca Frédéric-Emmanuel Date: Mon Jan 14 12:28:22 2013 +0100 Merge branch 'maint' into next Conflicts: hkl/hkl-geometry-factory.c hkl/hkl-geometry-factory.h hkl/hkl-geometry.h hkl/hkl-pseudoaxis-common-q-private.h hkl/hkl-pseudoaxis-factory.c hkl/hkl-pseudoaxis-soleil-sixs-med-private.h hkl/hkl-pseudoaxis-soleil-sixs-med.c test/bench.c commit 11247a9de256db36f2d0c03d18aefa77e8af3ab4 Author: Picca Frédéric-Emmanuel Date: Sun Dec 30 18:26:18 2012 +0100 add the HKL_DEPRECATED macros to mark deprecated members and functions hkl/hkl-macros.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) commit 121b45b6bd424f8b687096879be96ebc13d7d07e Author: Picca Frédéric-Emmanuel Date: Sun Dec 30 16:57:41 2012 +0100 HklEngineOperations is now private hkl/Hkl-5.0.gir | 2 -- hkl/hkl-pseudoaxis-private.h | 1 + hkl/hkl-pseudoaxis.h | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) commit 18f9bf140924ff3fb5ab0bca36b001e126604e9f Author: Picca Frédéric-Emmanuel Date: Sun Dec 30 16:49:34 2012 +0100 HklMode expose only a public API and HklModeInfo in now private gui/hkl-gui-pseudoaxes.cpp | 8 +++++--- gui/hkl-gui.cpp | 5 +++-- hkl/Hkl-5.0.gir | 42 +++++++++++++----------------------------- hkl/hkl-pseudoaxis-private.h | 17 +++++++++++++++++ hkl/hkl-pseudoaxis.c | 22 ++++++++++++++++++++++ hkl/hkl-pseudoaxis.h | 21 ++++----------------- test/bindings/python.py | 20 ++++++++++++++++++++ test/bindings/trajectory.py | 4 ++-- test/hkl/bench-t.c | 8 +++++--- test/hkl/pseudoaxis-e4ch-t.c | 22 +++++++++++++--------- test/hkl/pseudoaxis-e4cv-t.c | 29 ++++++++++++++++++----------- test/hkl/pseudoaxis-e6c-t.c | 23 +++++++++++++---------- test/hkl/pseudoaxis-k4cv-t.c | 13 +++++++++---- test/hkl/pseudoaxis-k6c-t.c | 19 +++++++++++++------ test/hkl/pseudoaxis-t.c | 6 +++--- 15 files changed, 160 insertions(+), 99 deletions(-) commit 18a26a250ced536249feba9671e9995ea24f37d9 Author: Picca Frédéric-Emmanuel Date: Sun Dec 30 13:34:11 2012 +0100 HklEngineInod is now private this is an implementation detail. hkl/Hkl-5.0.gir | 11 ----------- hkl/hkl-pseudoaxis-private.h | 8 ++++++++ hkl/hkl-pseudoaxis.h | 7 ------- 3 files changed, 8 insertions(+), 18 deletions(-) commit dea78b96d506a4f7d973c436a7375fb14a600d1b Author: Picca Frédéric-Emmanuel Date: Sun Dec 30 13:27:07 2012 +0100 now HklEngine and HklEngineList expose only a restrained public API gui/hkl-gui-pseudoaxes.cpp | 19 ++++++---- gui/hkl-gui.cpp | 10 +++-- hkl/Hkl-5.0.gir | 87 +++++++++++++++++++++++++------------------ hkl/hkl-binding-private.h | 2 +- hkl/hkl-binding.c | 6 ++- hkl/hkl-parameter.h | 4 +- hkl/hkl-pseudoaxis-private.h | 32 +++++++++++----- hkl/hkl-pseudoaxis.c | 74 ++++++++++++++++++++++++++++++++++-- hkl/hkl-pseudoaxis.h | 26 ++++++------- hkl/hkl-types.c | 22 +++++++++++ hkl/hkl-types.h | 3 ++ test/Makefile.am | 4 +- test/bindings/python.py | 14 ++++--- test/bindings/trajectory.py | 13 +++---- test/hkl/bench-t.c | 36 ++++++++++-------- test/hkl/pseudoaxis-e4ch-t.c | 62 ++++++++++++++++++++---------- test/hkl/pseudoaxis-e4cv-t.c | 57 ++++++++++++++++++---------- test/hkl/pseudoaxis-e6c-t.c | 71 ++++++++++++++++++++++++----------- test/hkl/pseudoaxis-k4cv-t.c | 28 ++++++++++---- test/hkl/pseudoaxis-k6c-t.c | 42 +++++++++++++++------ test/hkl/pseudoaxis-t.c | 47 ++++++++++++----------- test/hkl/pseudoaxis-zaxis-t.c | 6 ++- test/tap/hkl.c | 28 ++++++++------ 23 files changed, 467 insertions(+), 226 deletions(-) commit 2a2c163c8b6ebbf17089a22cfae30658b29c97a8 Author: Picca Frédéric-Emmanuel Date: Fri Nov 2 18:33:02 2012 +0100 be consistant and rename the darray type as explain in the darray exemples hkl/Hkl-5.0.gir | 30 ++++-------------------------- hkl/hkl-pseudoaxis.h | 8 ++++---- 2 files changed, 8 insertions(+), 30 deletions(-) commit 8cfde2224957f5ceae925815a4ab5deae80efbc0 Author: Picca Frédéric-Emmanuel Date: Fri Nov 2 18:16:20 2012 +0100 now the HklEngineList is completely private Documentation/sphinx/source/pyplots/trajectory.py | 2 +- .../sphinx/source/pyplots/trajectory_full.py | 6 +-- .../sphinx/source/pyplots/trajectory_simple.py | 6 +-- gui/hkl-gui-callbacks.cpp | 3 +- gui/hkl-gui-pseudoaxes.cpp | 6 +-- gui/hkl-gui.cpp | 9 ++-- hkl/Hkl-5.0.gir | 63 ++++++++++++++-------- hkl/hkl-binding-private.h | 2 +- hkl/hkl-binding.c | 9 ++-- hkl/hkl-pseudoaxis-private.h | 9 ++++ hkl/hkl-pseudoaxis.c | 56 +++++++++++++++++++ hkl/hkl-pseudoaxis.h | 35 ++++++------ test/bindings/python.py | 6 +-- test/bindings/trajectory.py | 7 ++- test/hkl/bench-t.c | 3 +- test/hkl/pseudoaxis-e4ch-t.c | 18 +++++-- test/hkl/pseudoaxis-e4cv-t.c | 63 ++++++++++++---------- test/hkl/pseudoaxis-e6c-t.c | 32 ++++++----- test/hkl/pseudoaxis-k4cv-t.c | 16 ++++-- test/hkl/pseudoaxis-k6c-t.c | 16 ++++-- test/hkl/pseudoaxis-t.c | 18 +++---- test/hkl/pseudoaxis-zaxis-t.c | 4 +- 22 files changed, 252 insertions(+), 137 deletions(-) commit 07205880efe1252cd12d9a12aafc2f956017c9df Author: Picca Frédéric-Emmanuel Date: Mon Oct 15 20:40:27 2012 +0200 invert the eta_a rotation Documentation/sphinx/source/diffractometers/med2_3.rst | 2 +- hkl/hkl-geometry-factory.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 881ba819a44b71084ad7e1037d4f726cdc4eca3c Author: Picca Frédéric-Emmanuel Date: Sun Oct 14 10:35:29 2012 +0200 create a dedicated HklModeAutoWithInit hkl/Hkl-5.0.gir | 9 ----- hkl/hkl-pseudoaxis-auto-private.h | 74 +++++++++++++++++++++++++++++++++++++++ hkl/hkl-pseudoaxis-auto.c | 13 +++++++ hkl/hkl-pseudoaxis-k6c-hkl.c | 11 +++--- hkl/hkl-pseudoaxis-private.h | 55 +++++++++-------------------- hkl/hkl-pseudoaxis.c | 3 -- hkl/hkl-pseudoaxis.h | 3 -- 7 files changed, 110 insertions(+), 58 deletions(-) commit d89ba8350d8ea3920faa72fb980de6f90a2331e5 Author: Picca Frédéric-Emmanuel Date: Sat Oct 13 10:52:42 2012 +0200 rename the HklMode operations op -> ops hkl/Hkl-5.0.gir | 2 +- hkl/hkl-pseudoaxis-private.h | 4 ++-- hkl/hkl-pseudoaxis.c | 46 ++++++++++++++++++++++---------------------- hkl/hkl-pseudoaxis.h | 2 +- 4 files changed, 27 insertions(+), 27 deletions(-) commit ac115fb74d63846f13c4903179e1a72b9cd442e5 Author: Frédéric-Emmanuel PICCA Date: Thu Oct 11 16:08:56 2012 +0200 add the SOLEIL SIXS med2+3 geometry .../sphinx/source/diffractometers/med2_3.rst | 64 +++++++ Documentation/sphinx/source/index.rst | 1 + hkl/hkl-geometry-factory.c | 21 +++ hkl/hkl-geometry-factory.h | 1 + hkl/hkl-geometry.h | 3 +- hkl/hkl-pseudoaxis-factory.c | 5 + hkl/hkl-pseudoaxis-soleil-sixs-med.c | 183 +++++++++++++++++++++ hkl/hkl-pseudoaxis-soleil-sixs-med.h | 1 + test/hkl-test-pseudoaxis.c | 9 + 9 files changed, 287 insertions(+), 1 deletion(-) commit cf87857bf7f5266de5d00f5728b6b3e66a6930ff Author: Picca Frédéric-Emmanuel Date: Mon Sep 10 22:46:26 2012 +0200 fix a bunch of clang warning hkl/hkl-binding.c | 1 + hkl/hkl-geometry-factory.c | 2 ++ hkl/hkl-pseudoaxis-auto.c | 8 ++++---- hkl/hkl-pseudoaxis-private.h | 2 ++ 4 files changed, 9 insertions(+), 4 deletions(-) commit 4a16c3f755490afb42b20abcfc16543bdcce0204 Author: Picca Frédéric-Emmanuel Date: Mon Sep 10 22:46:42 2012 +0200 use the clean_all script hkl/hkl-binding.c | 4 +-- hkl/hkl-pseudoaxis-auto-private.h | 16 ++++++------ hkl/hkl-pseudoaxis-auto.c | 16 ++++++------ hkl/hkl-pseudoaxis-common-eulerians.c | 20 +++++++-------- hkl/hkl-pseudoaxis-common-hkl-private.h | 24 +++++++++--------- hkl/hkl-pseudoaxis-common-hkl.c | 34 ++++++++++++------------- hkl/hkl-pseudoaxis-common-psi.c | 24 +++++++++--------- hkl/hkl-pseudoaxis-e4c-hkl.c | 12 ++++----- hkl/hkl-pseudoaxis-e6c-hkl.c | 26 +++++++++---------- hkl/hkl-pseudoaxis-k4cv-hkl.c | 12 ++++----- hkl/hkl-pseudoaxis-k6c-hkl.c | 28 ++++++++++----------- hkl/hkl-pseudoaxis-petra3-hkl.c | 14 +++++------ hkl/hkl-pseudoaxis-private.h | 44 ++++++++++++++++----------------- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 6 ++--- hkl/hkl-pseudoaxis-zaxis-hkl.c | 4 +-- hkl/hkl-pseudoaxis.c | 20 +++++++-------- hkl/hkl-pseudoaxis.h | 14 +++++------ 17 files changed, 159 insertions(+), 159 deletions(-) commit 045a73ba81ab8532c3dc71782fd1a85b6136101c Author: Frédéric-Emmanuel PICCA Date: Mon Sep 10 18:46:50 2012 +0200 use darray in the hkl-pseudoaxis.h gui/hkl-gui-callbacks.cpp | 20 +++++------ gui/hkl-gui-pseudoaxes.cpp | 8 ++--- gui/hkl-gui.cpp | 21 ++++++----- hkl/Hkl-5.0.gir | 57 ++++++++++++++++-------------- hkl/hkl-binding.c | 12 +++---- hkl/hkl-geometry.c | 10 +++--- hkl/hkl-geometry.h | 4 +-- hkl/hkl-pseudoaxis-auto.c | 17 ++++----- hkl/hkl-pseudoaxis-common-eulerians.c | 6 ++-- hkl/hkl-pseudoaxis-private.h | 25 +++++++------- hkl/hkl-pseudoaxis.c | 65 +++++++++++++++++------------------ hkl/hkl-pseudoaxis.h | 22 ++++++------ test/bindings/trajectory.py | 2 +- test/hkl/bench-t.c | 21 +++++------ test/hkl/geometry-t.c | 18 +++++----- test/hkl/pseudoaxis-e4ch-t.c | 25 ++++++-------- test/hkl/pseudoaxis-e4cv-t.c | 25 ++++++-------- test/hkl/pseudoaxis-e6c-t.c | 20 +++++------ test/hkl/pseudoaxis-k4cv-t.c | 34 +++++++----------- test/hkl/pseudoaxis-k6c-t.c | 34 +++++++----------- test/hkl/pseudoaxis-t.c | 13 +++---- 21 files changed, 216 insertions(+), 243 deletions(-) commit d24ca1fd6bbaa0439cbc8c184976db2d91b8b422 Author: Frédéric-Emmanuel PICCA Date: Mon Sep 10 16:08:46 2012 +0200 replace list with darray (nicer) Makefile.am | 2 +- ccan/darray/LICENSE | 1 + ccan/darray/darray.h | 348 +++++++++++++++++++++++++++ configure.ac | 2 +- gui/hkl-gui-pseudoaxes.cpp | 24 +- gui/hkl-gui.cpp | 24 +- hkl/Hkl-5.0.gir | 11 +- hkl/hkl-binding.c | 6 +- hkl/hkl-parameter-private.h | 53 ++-- hkl/hkl-parameter.c | 10 +- hkl/hkl-parameter.h | 6 +- hkl/hkl-pseudoaxis-common-eulerians.c | 7 +- hkl/hkl-pseudoaxis-common-hkl.c | 30 +-- hkl/hkl-pseudoaxis-common-q.c | 6 +- hkl/hkl-pseudoaxis-k4cv-private.h | 4 +- hkl/hkl-pseudoaxis-k6c-private.h | 4 +- hkl/hkl-pseudoaxis-soleil-sixs-med-private.h | 4 +- hkl/hkl-pseudoaxis-zaxis-private.h | 2 +- hkl/hkl-pseudoaxis.c | 12 +- test/hkl/bench-t.c | 6 +- test/hkl/pseudoaxis-e4ch-t.c | 2 +- test/hkl/pseudoaxis-e4cv-t.c | 2 +- test/hkl/pseudoaxis-e6c-t.c | 12 +- test/hkl/pseudoaxis-k4cv-t.c | 4 +- test/hkl/pseudoaxis-k6c-t.c | 4 +- test/hkl/pseudoaxis-t.c | 31 ++- test/tap/hkl.c | 4 +- 27 files changed, 494 insertions(+), 127 deletions(-) commit e310187ac002599e2462ee1433b1fbb2ed6ddbbd Author: Frédéric-Emmanuel PICCA Date: Fri Sep 7 15:23:57 2012 +0200 rename HklPseudoAxisEngine -> HklEngine simplicity Documentation/api/hkl-sections.txt | 50 +-- Documentation/hkl.texi | 60 ++-- Documentation/sphinx/source/bindings/python.py | 2 +- Documentation/sphinx/source/development.rst | 60 ++-- Documentation/sphinx/source/test.py | 18 +- TODO | 6 +- gui/hkl-gui-callbacks.cpp | 4 +- gui/hkl-gui-modelcolumns.h | 2 +- gui/hkl-gui-pseudoaxes.cpp | 8 +- gui/hkl-gui-pseudoaxes.h | 4 +- gui/hkl-gui.cpp | 4 +- hkl/Hkl-5.0.gir | 410 ++++++++++++------------- hkl/hkl-binding-private.h | 8 +- hkl/hkl-binding.c | 34 +- hkl/hkl-pseudoaxis-auto-private.h | 2 +- hkl/hkl-pseudoaxis-auto.c | 14 +- hkl/hkl-pseudoaxis-common-eulerians-private.h | 8 +- hkl/hkl-pseudoaxis-common-eulerians.c | 44 +-- hkl/hkl-pseudoaxis-common-hkl-private.h | 14 +- hkl/hkl-pseudoaxis-common-hkl.c | 42 +-- hkl/hkl-pseudoaxis-common-psi-private.h | 8 +- hkl/hkl-pseudoaxis-common-psi.c | 34 +- hkl/hkl-pseudoaxis-common-q-private.h | 12 +- hkl/hkl-pseudoaxis-common-q.c | 116 +++---- hkl/hkl-pseudoaxis-e4c-hkl.c | 22 +- hkl/hkl-pseudoaxis-e4c-private.h | 4 +- hkl/hkl-pseudoaxis-e4c-psi.c | 10 +- hkl/hkl-pseudoaxis-e6c-hkl.c | 36 +-- hkl/hkl-pseudoaxis-e6c-private.h | 4 +- hkl/hkl-pseudoaxis-e6c-psi.c | 10 +- hkl/hkl-pseudoaxis-factory.c | 52 ++-- hkl/hkl-pseudoaxis-k4cv-hkl.c | 34 +- hkl/hkl-pseudoaxis-k4cv-private.h | 4 +- hkl/hkl-pseudoaxis-k4cv-psi.c | 10 +- hkl/hkl-pseudoaxis-k6c-hkl.c | 46 +-- hkl/hkl-pseudoaxis-k6c-private.h | 4 +- hkl/hkl-pseudoaxis-k6c-psi.c | 10 +- hkl/hkl-pseudoaxis-petra3-hkl.c | 24 +- hkl/hkl-pseudoaxis-petra3-private.h | 2 +- hkl/hkl-pseudoaxis-private.h | 54 ++-- hkl/hkl-pseudoaxis-soleil-sixs-med-private.h | 4 +- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 22 +- hkl/hkl-pseudoaxis-zaxis-hkl.c | 12 +- hkl/hkl-pseudoaxis-zaxis-private.h | 2 +- hkl/hkl-pseudoaxis.c | 92 +++--- hkl/hkl-pseudoaxis.h | 32 +- hkl/hkl-types.c | 24 +- hkl/hkl-types.h | 4 +- test/bindings/python.py | 4 +- test/hkl/bench-t.c | 18 +- test/hkl/pseudoaxis-e4ch-t.c | 64 ++-- test/hkl/pseudoaxis-e4cv-t.c | 66 ++-- test/hkl/pseudoaxis-e6c-t.c | 74 ++--- test/hkl/pseudoaxis-k4cv-t.c | 32 +- test/hkl/pseudoaxis-k6c-t.c | 34 +- test/hkl/pseudoaxis-t.c | 16 +- test/hkl/pseudoaxis-zaxis-t.c | 8 +- test/tap/hkl.c | 10 +- test/tap/hkl.h | 6 +- 59 files changed, 903 insertions(+), 911 deletions(-) commit 5a59792a0afce70bc007df3d9985e06f0219f2f2 Author: Frédéric-Emmanuel PICCA Date: Fri Sep 7 13:59:46 2012 +0200 rename HklPseudoAxisEngineMode -> HklMode simplicity :) Documentation/api/hkl-sections.txt | 20 +-- Documentation/hkl.texi | 70 ++++----- Documentation/sphinx/source/development.rst | 70 ++++----- Documentation/sphinx/source/pyplots/trajectory.py | 2 +- .../sphinx/source/pyplots/trajectory_full.py | 2 +- .../sphinx/source/pyplots/trajectory_simple.py | 2 +- gui/hkl-gui-pseudoaxes.cpp | 2 +- gui/hkl-gui-pseudoaxes.h | 2 +- hkl/Hkl-5.0.gir | 169 ++++++++++----------- hkl/hkl-binding.c | 4 +- hkl/hkl-pseudoaxis-auto-private.h | 26 ++-- hkl/hkl-pseudoaxis-auto.c | 20 +-- hkl/hkl-pseudoaxis-common-eulerians.c | 24 +-- hkl/hkl-pseudoaxis-common-hkl-private.h | 28 ++-- hkl/hkl-pseudoaxis-common-hkl.c | 12 +- hkl/hkl-pseudoaxis-common-psi-private.h | 10 +- hkl/hkl-pseudoaxis-common-psi.c | 28 ++-- hkl/hkl-pseudoaxis-common-q.c | 42 ++--- hkl/hkl-pseudoaxis-e4c-hkl.c | 38 ++--- hkl/hkl-pseudoaxis-e4c-private.h | 2 +- hkl/hkl-pseudoaxis-e4c-psi.c | 8 +- hkl/hkl-pseudoaxis-e6c-hkl.c | 80 +++++----- hkl/hkl-pseudoaxis-e6c-private.h | 2 +- hkl/hkl-pseudoaxis-e6c-psi.c | 8 +- hkl/hkl-pseudoaxis-k4cv-hkl.c | 38 ++--- hkl/hkl-pseudoaxis-k4cv-private.h | 2 +- hkl/hkl-pseudoaxis-k4cv-psi.c | 8 +- hkl/hkl-pseudoaxis-k6c-hkl.c | 86 +++++------ hkl/hkl-pseudoaxis-k6c-private.h | 2 +- hkl/hkl-pseudoaxis-k6c-psi.c | 8 +- hkl/hkl-pseudoaxis-petra3-hkl.c | 44 +++--- hkl/hkl-pseudoaxis-petra3-private.h | 2 +- hkl/hkl-pseudoaxis-private.h | 60 ++++---- hkl/hkl-pseudoaxis-soleil-sixs-med-private.h | 2 +- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 22 +-- hkl/hkl-pseudoaxis-zaxis-hkl.c | 14 +- hkl/hkl-pseudoaxis-zaxis-private.h | 2 +- hkl/hkl-pseudoaxis.c | 13 +- hkl/hkl-pseudoaxis.h | 22 +-- test/bindings/python.py | 2 +- test/bindings/trajectory.py | 2 +- test/hkl/bench-t.c | 4 +- test/hkl/pseudoaxis-e4ch-t.c | 6 +- test/hkl/pseudoaxis-e4cv-t.c | 6 +- test/hkl/pseudoaxis-e6c-t.c | 4 +- test/hkl/pseudoaxis-k4cv-t.c | 6 +- test/hkl/pseudoaxis-k6c-t.c | 6 +- test/hkl/pseudoaxis-t.c | 2 +- 48 files changed, 514 insertions(+), 520 deletions(-) commit 970809c1b429665dbd7ce0866e24ebe390432aea Author: Frédéric-Emmanuel PICCA Date: Fri Sep 7 13:11:48 2012 +0200 rename HklPseudoAxisEngineList -> HklEngineList for simplicity. Documentation/api/hkl-sections.txt | 22 +- Documentation/hkl.texi | 8 +- Documentation/sphinx/source/development.rst | 8 +- Documentation/sphinx/source/test.py | 56 ++--- gui/hkl-gui-callbacks.cpp | 12 +- gui/hkl-gui.cpp | 4 +- gui/hkl-gui.h | 2 +- hkl/Hkl-5.0.gir | 326 ++++++++++++++-------------- hkl/hkl-binding-private.h | 2 +- hkl/hkl-binding.c | 6 +- hkl/hkl-pseudoaxis-factory.c | 62 +++--- hkl/hkl-pseudoaxis-factory.h | 2 +- hkl/hkl-pseudoaxis-private.h | 10 +- hkl/hkl-pseudoaxis.c | 58 ++--- hkl/hkl-pseudoaxis.h | 26 +-- hkl/hkl-types.c | 20 +- hkl/hkl-types.h | 4 +- test/hkl/bench-t.c | 22 +- test/hkl/pseudoaxis-e4ch-t.c | 60 ++--- test/hkl/pseudoaxis-e4cv-t.c | 60 ++--- test/hkl/pseudoaxis-e6c-t.c | 64 +++--- test/hkl/pseudoaxis-k4cv-t.c | 30 +-- test/hkl/pseudoaxis-k6c-t.c | 40 ++-- test/hkl/pseudoaxis-t.c | 70 +++--- test/hkl/pseudoaxis-zaxis-t.c | 10 +- 25 files changed, 490 insertions(+), 494 deletions(-) commit 11c20a7d4f963ebb92c7ce2c32ba55b92364f747 Author: Frédéric-Emmanuel PICCA Date: Fri Sep 7 11:06:45 2012 +0200 distcheck is working hkl/Makefile.am | 1 + test/bindings/Makefile.am | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) commit 2fcfd93588251009a6a7ec9b17fae0f1fee8bec4 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 6 13:53:24 2012 +0200 add the mode parameters to the qper_qpar engine NEWS | 11 +++++++++-- hkl/hkl-pseudoaxis-common-q.c | 7 +++++-- 2 files changed, 14 insertions(+), 4 deletions(-) commit f6fca348b3f644841a8065b35fb8db984ad161fa Author: Frédéric-Emmanuel PICCA Date: Thu Sep 6 13:04:10 2012 +0200 small bugfix hkl/hkl-pseudoaxis-common-q.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 351a62de880fcaceb9e684cb75f0a7a23e63f167 Author: Frédéric-Emmanuel PICCA Date: Wed Sep 5 17:34:12 2012 +0200 add the qperqpar pseudo axis Conflicts: hkl/hkl-pseudoaxis-common-q.c hkl/hkl-pseudoaxis-common-q.h test/hkl/bench-t.c Documentation/sphinx/source/pseudo.rst | 23 ++++++- hkl/hkl-pseudoaxis-auto.c | 4 +- hkl/hkl-pseudoaxis-common-q.c | 113 +++++++++++++++++++++++++++++++++ hkl/hkl-pseudoaxis-common-q.h | 7 +- hkl/hkl-pseudoaxis-factory.c | 5 ++ test/bench.c | 15 +++++ 6 files changed, 162 insertions(+), 5 deletions(-) commit 777a730f943463f06c71901205e2c294e3e2bb07 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 6 09:44:47 2012 +0200 fix the gui crash gui/hkl-gui-callbacks.cpp | 37 ++++++++++++++++++++----------------- gui/hkl-gui-modelcolumns.h | 2 ++ gui/hkl-gui.cpp | 1 + 3 files changed, 23 insertions(+), 17 deletions(-) commit b22c0755a7765bf2fe6f44beb7078fe4a7bc2f11 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 6 09:26:33 2012 +0200 add the flymake files to .gitignore .gitignore | 1 + 1 file changed, 1 insertion(+) commit a5e8008425fad784ee9622a20c65a521438b274c Author: Picca Frédéric-Emmanuel Date: Wed Sep 5 21:53:29 2012 +0200 fix a few bug in the gui and the qper_qpar engine gui/hkl-gui.cpp | 2 +- hkl/hkl-pseudoaxis-common-q.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 10216c012e26dd4ce34b82ccfc1c3d7ed3866eb6 Author: Frédéric-Emmanuel PICCA Date: Wed Sep 5 17:34:12 2012 +0200 add the qperqpar pseudo axis Documentation/sphinx/source/pseudo.rst | 23 +++- hkl/hkl-pseudoaxis-auto.c | 4 +- hkl/hkl-pseudoaxis-common-q-private.h | 12 +- hkl/hkl-pseudoaxis-common-q.c | 205 ++++++++++++++++++++++++++++----- hkl/hkl-pseudoaxis-factory.c | 5 + test/hkl/bench-t.c | 1 + 6 files changed, 214 insertions(+), 36 deletions(-) commit 920776a9778ad1db99e441afcb0c364b17444339 Author: Frédéric-Emmanuel PICCA Date: Tue Sep 4 10:11:06 2012 +0200 plot the trajectories for all availables modes. hkl/Hkl-5.0.gir | 15 +++++-- hkl/hkl-binding-private.h | 2 + hkl/hkl-binding.c | 26 ++++++++++-- hkl/hkl-pseudoaxis.c | 5 +-- test/bindings/trajectory.py | 99 ++++++++++++++++++++++++++++++++------------- 5 files changed, 108 insertions(+), 39 deletions(-) commit 18fb59c724aa5aa4b6839d8e7c856a94b6852c12 Author: Frédéric-Emmanuel PICCA Date: Mon Sep 3 17:30:24 2012 +0200 add the possibility to plot only a reduced number of trajectories test/bindings/trajectory.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) commit 789be6a3273170c8f8096556ed2ce808658397ae Author: Frédéric-Emmanuel PICCA Date: Mon Sep 3 17:19:51 2012 +0200 produce a pdf document with the hkl 001 -> 011 trajectories the added trajectory.py file, generates during the make check target, a pdf document which can be use for testing purpose. By looking at the curve it is easyer to identify a problem with the calculation. test/bindings/Makefile.am | 5 ++- test/bindings/trajectory.py | 94 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 1 deletion(-) commit 3639fecb337ab27748ca7068c456edf9dc9d474a Author: Picca Frédéric-Emmanuel Date: Sun Sep 2 19:47:28 2012 +0200 add a few const to the HklGeometry methods hkl/hkl-geometry.c | 42 +++++++++++++++++++++--------------------- hkl/hkl-geometry.h | 13 ++++++++----- 2 files changed, 29 insertions(+), 26 deletions(-) commit 03ae598ad2b921409cfc3e9af5f64b9e82eb3827 Author: Picca Frédéric-Emmanuel Date: Sun Sep 2 19:12:51 2012 +0200 remove a memory leak hkl/hkl-geometry-factory.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 046fe11af038f3edc0a141ddf51d3f7b18d44e68 Author: Picca Frédéric-Emmanuel Date: Tue Aug 28 20:27:44 2012 +0200 use the HklParameterList for the mode parameters I am not very happy with this transformation, the C API is not convenient enough, when it comes to set individual parameters, like in the test suite. gui/hkl-gui-pseudoaxes.cpp | 21 ++- gui/hkl-gui.cpp | 15 +-- hkl/Hkl-5.0.gir | 36 +++--- hkl/hkl-binding.c | 6 +- hkl/hkl-parameter-private.h | 70 ++++------ hkl/hkl-parameter.c | 22 +++- hkl/hkl-parameter.h | 8 +- hkl/hkl-pseudoaxis-auto-private.h | 22 ++-- hkl/hkl-pseudoaxis-auto.c | 17 +-- hkl/hkl-pseudoaxis-common-eulerians-private.h | 10 ++ hkl/hkl-pseudoaxis-common-eulerians.c | 82 ++++++++---- hkl/hkl-pseudoaxis-common-hkl-private.h | 21 ++- hkl/hkl-pseudoaxis-common-hkl.c | 107 +++++++++++----- hkl/hkl-pseudoaxis-common-psi-private.h | 7 + hkl/hkl-pseudoaxis-common-psi.c | 62 +++++---- hkl/hkl-pseudoaxis-common-q-private.h | 3 + hkl/hkl-pseudoaxis-common-q.c | 97 +++++++++----- hkl/hkl-pseudoaxis-k4cv-hkl.c | 30 ++++- hkl/hkl-pseudoaxis-k6c-hkl.c | 43 +++++-- hkl/hkl-pseudoaxis-private.h | 176 ++++++++++++++++---------- hkl/hkl-pseudoaxis.c | 74 +++++------ hkl/hkl-pseudoaxis.h | 9 +- hkl/hkl-sample.c | 8 +- test/hkl/bench-t.c | 14 +- test/hkl/pseudoaxis-e4ch-t.c | 71 +++++------ test/hkl/pseudoaxis-e4cv-t.c | 68 +++++----- test/hkl/pseudoaxis-e6c-t.c | 94 ++++++++------ test/hkl/pseudoaxis-k4cv-t.c | 16 ++- test/hkl/pseudoaxis-k6c-t.c | 18 ++- test/hkl/pseudoaxis-t.c | 35 +++-- test/hkl/pseudoaxis-zaxis-t.c | 2 + test/tap/hkl.c | 14 +- test/tap/hkl.h | 5 +- 33 files changed, 768 insertions(+), 515 deletions(-) commit 073a9ee4c7f978d9de2c57717a46d88945faf26a Author: Picca Frédéric-Emmanuel Date: Tue Aug 28 08:55:41 2012 +0200 add -fpermissive to the C++ code gui/hkl3d/Makefile.am | 1 + hkl3d/Makefile.am | 1 + 2 files changed, 2 insertions(+) commit bcd48cbe2919e4ec1a48f93bfaf1760459493d59 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 27 19:07:36 2012 +0200 Add an HklParameterList and use it for the HklPseudoAxisEngine pseudo_axes at the end we will have different kind of thoses list to standardize the interaction with the hkl library, and also to minimize the public API. fix the WIP .../sphinx/source/pyplots/trajectory_full.py | 4 +- .../sphinx/source/pyplots/trajectory_simple.py | 2 +- gui/hkl-gui-callbacks.cpp | 34 +-- gui/hkl-gui-modelcolumns.h | 6 +- gui/hkl-gui-pseudoaxes.cpp | 23 +- gui/hkl-gui-pseudoaxes.h | 4 +- gui/hkl-gui.cpp | 29 +- gui/hkl-gui.h | 3 +- hkl/Hkl-5.0.gir | 324 +++++++++++---------- hkl/hkl-axis.c | 96 +++--- hkl/hkl-axis.h | 7 +- hkl/hkl-binding-private.h | 21 +- hkl/hkl-binding.c | 133 ++++++--- hkl/hkl-geometry.c | 19 +- hkl/hkl-lattice.c | 36 +-- hkl/hkl-parameter-private.h | 206 ++++++++++++- hkl/hkl-parameter.c | 118 +++++++- hkl/hkl-parameter.h | 46 ++- hkl/hkl-pseudoaxis-auto.c | 3 +- hkl/hkl-pseudoaxis-common-eulerians.c | 6 +- hkl/hkl-pseudoaxis-common-hkl.c | 29 +- hkl/hkl-pseudoaxis-common-psi.c | 4 +- hkl/hkl-pseudoaxis-common-q.c | 8 +- hkl/hkl-pseudoaxis-factory.c | 14 +- hkl/hkl-pseudoaxis-private.h | 81 +----- hkl/hkl-pseudoaxis.c | 137 +++++---- hkl/hkl-pseudoaxis.h | 27 +- hkl/hkl-sample.c | 48 +-- hkl/hkl-types.c | 8 +- test/bindings/python.py | 11 +- test/hkl/axis-t.c | 48 +-- test/hkl/bench-t.c | 14 +- test/hkl/detector-t.c | 4 +- test/hkl/geometry-t.c | 2 +- test/hkl/parameter-t.c | 2 +- test/hkl/pseudoaxis-e4ch-t.c | 66 ++--- test/hkl/pseudoaxis-e4cv-t.c | 66 ++--- test/hkl/pseudoaxis-e6c-t.c | 66 ++--- test/hkl/pseudoaxis-k4cv-t.c | 12 +- test/hkl/pseudoaxis-k6c-t.c | 12 +- test/hkl/pseudoaxis-t.c | 20 +- test/hkl/pseudoaxis-zaxis-t.c | 4 +- test/tap/hkl.c | 10 +- 43 files changed, 1067 insertions(+), 746 deletions(-) commit e7c73595075ff6e6eac6d30899067df398b3ce64 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 27 13:16:37 2012 +0200 remove hkl_axis_is_value_compatible_with_range use hkl_parameter_is_valid instead hkl/Hkl-5.0.gir | 6 ------ hkl/hkl-axis.c | 25 +++++++++++++------------ hkl/hkl-axis.h | 2 -- hkl/hkl-geometry.c | 2 +- hkl/hkl-parameter-private.h | 13 ++++++++++++- hkl/hkl-parameter.c | 6 +----- test/hkl/axis-t.c | 18 +++++++++--------- test/hkl/geometry-t.c | 14 +++++++++----- 8 files changed, 45 insertions(+), 41 deletions(-) commit f77e6e2188fb71e5569eb5d7e64aa368ba86332c Author: Frédéric-Emmanuel PICCA Date: Mon Aug 27 11:45:48 2012 +0200 avoid to update the HklParamete rinternal when doing range mutliplication rotation internals are identical for angle += n * 2pi. So we can avoid the HklParameter update for the rotation. hkl/hkl-geometry.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) commit 3e6eddf47443de0703956c57a78b5078c9c9d6d7 Author: Picca Frédéric-Emmanuel Date: Sun Aug 26 20:46:01 2012 +0200 remove a useless method hkl/Hkl-5.0.gir | 11 ----------- hkl/hkl-axis.c | 8 -------- hkl/hkl-axis.h | 2 -- 3 files changed, 21 deletions(-) commit e331c4bd068a5cb649800028eb16adc295cf7726 Author: Picca Frédéric-Emmanuel Date: Sun Aug 26 20:36:12 2012 +0200 no need to put get_value and get_value_unit in the HklParameterOperations. hkl/hkl-parameter-private.h | 22 +++------------------- hkl/hkl-parameter.c | 7 +++++-- 2 files changed, 8 insertions(+), 21 deletions(-) commit 57fc27236c459010ca55a2d66dfefec5f4ae364c Author: Picca Frédéric-Emmanuel Date: Sun Aug 26 20:19:10 2012 +0200 move hkl_axis_get_value_closest into HklParameter hkl/Hkl-5.0.gir | 25 +++++++------ hkl/hkl-axis.c | 85 +++++++++++++++++++++++---------------------- hkl/hkl-axis.h | 2 -- hkl/hkl-geometry.c | 3 +- hkl/hkl-parameter-private.h | 9 +++++ hkl/hkl-parameter.c | 16 +++++++++ hkl/hkl-parameter.h | 3 ++ test/hkl/axis-t.c | 12 +++++-- 8 files changed, 97 insertions(+), 58 deletions(-) commit e39b3fabd2da7aec8e055fb966f999d48ed20f44 Author: Picca Frédéric-Emmanuel Date: Sun Aug 26 15:08:53 2012 +0200 remove the useless method in HklAxis hkl/Hkl-5.0.gir | 10 ---------- hkl/hkl-axis.c | 7 ------- hkl/hkl-axis.h | 10 ---------- test/hkl/axis-t.c | 19 ++++++++----------- 4 files changed, 8 insertions(+), 38 deletions(-) commit 6717c79f8aa30a625f220f8403363a7edd6a5389 Author: Picca Frédéric-Emmanuel Date: Sun Aug 26 14:54:47 2012 +0200 HklAxis can use the HklParameter internals to avoid the overhead of method call use directly the HklParameter internals. hkl/hkl-axis.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) commit 917d9b1bbf5d2f73cbefdd8bbd6c473af529b068 Author: Picca Frédéric-Emmanuel Date: Sun Aug 26 14:41:30 2012 +0200 remove hkl_axis_is_valid use hkl_parameter_is_valid instead hkl/Hkl-5.0.gir | 5 ----- hkl/hkl-axis.c | 5 ----- hkl/hkl-axis.h | 2 -- hkl/hkl-geometry.c | 2 +- 4 files changed, 1 insertion(+), 13 deletions(-) commit be2933842dd5b5e46abcf81bb745e40286b11b17 Author: Picca Frédéric-Emmanuel Date: Sun Aug 26 14:27:58 2012 +0200 remove hkl_axis_randomize use hkl_parameter_randomize instead hkl/Hkl-5.0.gir | 5 ----- hkl/hkl-axis.c | 27 ++++++++++++++------------- hkl/hkl-axis.h | 2 -- hkl/hkl-geometry.c | 2 +- hkl/hkl-parameter-private.h | 17 +++++++++++++++-- hkl/hkl-parameter.c | 7 +------ 6 files changed, 31 insertions(+), 29 deletions(-) commit cd64a99df9932871f0cca720fdfab02e3c7b4f18 Author: Picca Frédéric-Emmanuel Date: Sun Aug 26 14:04:04 2012 +0200 remove hkl_axis_set_value_unit now use directly hkl_parameter_set_value_unit gui/hkl-gui-callbacks.cpp | 4 ++-- hkl/Hkl-5.0.gir | 16 +++------------- hkl/hkl-axis.c | 12 ++++++------ hkl/hkl-axis.h | 2 -- hkl/hkl-binding.c | 3 ++- hkl/hkl-geometry.c | 3 ++- hkl/hkl-parameter-private.h | 11 ++++++++++- hkl/hkl-parameter.c | 16 +++++----------- hkl/hkl-parameter.h | 2 +- test/hkl/axis-t.c | 34 +++++++++++++++++----------------- 10 files changed, 48 insertions(+), 55 deletions(-) commit 3b96b0e46bf65aa7c3e90ff5126c2f694615f0ff Author: Picca Frédéric-Emmanuel Date: Sun Aug 26 12:22:19 2012 +0200 remove the hkl_axis_set_value now use directly hkl_parameter_set_value hkl/Hkl-5.0.gir | 10 ---------- hkl/hkl-axis.c | 30 +++++++++++++++++------------- hkl/hkl-axis.h | 2 -- hkl/hkl-geometry.c | 10 ++++++---- hkl/hkl-parameter-private.h | 10 +++++++++- hkl/hkl-parameter.c | 3 +-- hkl/hkl-pseudoaxis-auto.c | 3 ++- hkl/hkl-pseudoaxis-common-hkl.c | 7 ++++--- hkl/hkl-pseudoaxis-factory.c | 12 ++++++------ hkl/hkl-pseudoaxis-private.h | 5 +++-- test/hkl/detector-t.c | 4 ++-- test/hkl/geometry-t.c | 2 +- 12 files changed, 51 insertions(+), 47 deletions(-) commit d2d7ea6d32e8ff4763955a31c0d9a1dcf4b099aa Author: Picca Frédéric-Emmanuel Date: Sun Aug 26 11:32:49 2012 +0200 remove all HklAxis method which were in fact HklParameter methods hkl/Hkl-5.0.gir | 44 -------------------------------------------- hkl/hkl-axis.c | 20 -------------------- hkl/hkl-axis.h | 8 -------- hkl/hkl-geometry.c | 2 +- test/hkl/axis-t.c | 10 +++++----- test/hkl/geometry-t.c | 12 ++++++------ 6 files changed, 12 insertions(+), 84 deletions(-) commit 928c6bdc79970da2ed340b8942fae77432c42583 Author: Picca Frédéric-Emmanuel Date: Sun Aug 26 11:21:41 2012 +0200 remove hkl_axis_get/set_changed hkl/Hkl-5.0.gir | 15 --------------- hkl/hkl-axis.c | 10 ---------- hkl/hkl-axis.h | 4 ---- hkl/hkl-geometry.c | 4 ++-- test/hkl/geometry-t.c | 4 ++-- 5 files changed, 4 insertions(+), 33 deletions(-) commit 1bce20b03855514f813afe5017d130f62b6d3f2e Author: Picca Frédéric-Emmanuel Date: Sun Aug 26 10:23:17 2012 +0200 remove hkl_axis_get_name hkl/Hkl-5.0.gir | 5 ----- hkl/hkl-axis.c | 5 ----- hkl/hkl-axis.h | 2 -- hkl/hkl-geometry.c | 8 ++++---- hkl/hkl-sample.c | 2 +- 5 files changed, 5 insertions(+), 17 deletions(-) commit b2d7295407d0aad0b72b9f9168b5ba051e82ad2c Author: Picca Frédéric-Emmanuel Date: Sun Aug 26 10:11:42 2012 +0200 no more hkl_axis_get_value_unit gui/hkl-gui.cpp | 4 ++-- hkl/Hkl-5.0.gir | 31 ++++++++++--------------------- hkl/hkl-axis.c | 7 +------ hkl/hkl-axis.h | 2 -- hkl/hkl-parameter-private.h | 16 +++++++++++++++- hkl/hkl-parameter.c | 33 ++++++++++++++++++++------------- hkl/hkl-parameter.h | 19 +++---------------- test/hkl/axis-t.c | 22 +++++++++++----------- 8 files changed, 62 insertions(+), 72 deletions(-) commit 70485aa23ba94923316ef06727f7def96625acd5 Author: Picca Frédéric-Emmanuel Date: Sat Aug 25 22:15:09 2012 +0200 test get_value hkl/Hkl-5.0.gir | 31 +++++----- hkl/hkl-axis.c | 55 ++++++++--------- hkl/hkl-axis.h | 4 +- hkl/hkl-binding.c | 2 +- hkl/hkl-geometry.c | 19 +++--- hkl/hkl-lattice.c | 106 ++++++++++++++++++--------------- hkl/hkl-parameter-private.h | 8 +-- hkl/hkl-parameter.c | 31 ++++------ hkl/hkl-parameter.h | 19 +++++- hkl/hkl-pseudoaxis-auto.c | 4 +- hkl/hkl-pseudoaxis-common-eulerians.c | 16 +++-- hkl/hkl-pseudoaxis-common-hkl.c | 35 ++++++----- hkl/hkl-pseudoaxis-common-psi.c | 13 ++-- hkl/hkl-pseudoaxis-common-q.c | 1 + hkl/hkl-pseudoaxis-e4c-hkl.c | 13 ++-- hkl/hkl-pseudoaxis-e4c-psi.c | 7 ++- hkl/hkl-pseudoaxis-e6c-hkl.c | 25 ++++---- hkl/hkl-pseudoaxis-e6c-psi.c | 7 ++- hkl/hkl-pseudoaxis-factory.c | 12 ++-- hkl/hkl-pseudoaxis-k4cv-hkl.c | 25 ++++---- hkl/hkl-pseudoaxis-k4cv-psi.c | 7 ++- hkl/hkl-pseudoaxis-k6c-hkl.c | 43 +++++++------- hkl/hkl-pseudoaxis-k6c-psi.c | 7 ++- hkl/hkl-pseudoaxis.c | 4 +- hkl/hkl-sample.c | 65 +++++++++++--------- test/bindings/python.py | 2 +- test/hkl/axis-t.c | 4 +- test/hkl/bench-t.c | 8 +-- test/hkl/geometry-t.c | 14 ++--- test/hkl/lattice-t.c | 108 +++++++++++++++++----------------- test/hkl/parameter-t.c | 11 ++-- test/hkl/pseudoaxis-e4ch-t.c | 68 ++++++++------------- test/hkl/pseudoaxis-e4cv-t.c | 69 ++++++++-------------- test/hkl/pseudoaxis-e6c-t.c | 24 ++++---- test/hkl/pseudoaxis-k4cv-t.c | 4 +- test/hkl/pseudoaxis-k6c-t.c | 4 +- test/hkl/pseudoaxis-t.c | 10 ++-- test/hkl/sample-t.c | 69 +++++++++++----------- test/tap/hkl.c | 7 ++- test/tap/hkl.h | 2 +- 40 files changed, 481 insertions(+), 482 deletions(-) commit b2e0c4f540fcd2f7938a48e8e396252e50468418 Author: Picca Frédéric-Emmanuel Date: Sat Aug 25 12:15:16 2012 +0200 hkl_parameter_init from public -> private hkl/Hkl-5.0.gir | 34 --------------------- hkl/hkl-parameter.c | 76 +++++++++++++++++++--------------------------- hkl/hkl-parameter.h | 5 ---- test/hkl/parameter-t.c | 81 +++++++++++++++++++++++++++----------------------- 4 files changed, 73 insertions(+), 123 deletions(-) commit 384af436c1111750f929c328d28619e4a573eebb Author: Picca Frédéric-Emmanuel Date: Sat Aug 25 11:57:32 2012 +0200 test parameter operations hkl/Hkl-5.0.gir | 15 +++++++++++++++ hkl/hkl-axis.c | 23 ++++++++++++++++------- hkl/hkl-lattice.c | 1 + hkl/hkl-parameter-private.h | 46 +++++++++++++++++++++++++++++++++++++++++++++ hkl/hkl-parameter.c | 14 +++++++++++++- hkl/hkl-parameter.h | 4 ++++ hkl/hkl-sample.c | 1 + 7 files changed, 96 insertions(+), 8 deletions(-) commit e0eb3844e761f5873128cceeb733ef23cd43e14f Author: Picca Frédéric-Emmanuel Date: Sat Aug 25 11:54:37 2012 +0200 .gitignore .gitignore | 1 + 1 file changed, 1 insertion(+) commit e6fcea5fd07baa97e196ca86dd0ae3a3aaed457b Author: Picca Frédéric-Emmanuel Date: Sat Aug 25 10:19:43 2012 +0200 remove an introspection warning - inconsistency the second paramater of the hkl_geometry_distance_xxx method is now consider as the reference HklGeometry to compare with . It is easyer to understand in the rest of the code. hkl/Hkl-5.0.gir | 12 ++++++------ hkl/hkl-geometry.c | 14 ++++++-------- hkl/hkl-geometry.h | 4 ++-- 3 files changed, 14 insertions(+), 16 deletions(-) commit dedbd84d83b24c038e88a5e879642a7d05895df0 Author: Picca Frédéric-Emmanuel Date: Sat Aug 25 10:03:05 2012 +0200 rename in HklParameter parent -> parameter Documentation/sphinx/source/pyplots/trajectory.py | 2 +- Documentation/sphinx/source/pyplots/trajectory_simple.py | 2 +- gui/hkl-gui-pseudoaxes.cpp | 4 ++-- gui/hkl-gui.cpp | 2 +- hkl/hkl-binding.c | 4 ++-- hkl/hkl-pseudoaxis-common-eulerians.c | 6 +++--- hkl/hkl-pseudoaxis-common-hkl.c | 6 +++--- hkl/hkl-pseudoaxis-common-psi.c | 2 +- hkl/hkl-pseudoaxis-common-q.c | 4 ++-- hkl/hkl-pseudoaxis-private.h | 6 +++--- hkl/hkl-pseudoaxis.c | 8 ++++---- hkl/hkl-pseudoaxis.h | 2 +- test/bindings/python.py | 2 +- test/hkl/bench-t.c | 2 +- test/hkl/pseudoaxis-e6c-t.c | 10 +++++----- test/hkl/pseudoaxis-t.c | 10 +++++----- test/tap/hkl.c | 4 ++-- 17 files changed, 38 insertions(+), 38 deletions(-) commit db0a0a9669cae421fd4bc6650833de15fa923f98 Author: Picca Frédéric-Emmanuel Date: Fri Aug 24 23:53:57 2012 +0200 add a few gitignore .gitignore | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit 5065229841b3de48f54eee7955927bd61cc1594f Author: Picca Frédéric-Emmanuel Date: Fri Aug 24 23:53:37 2012 +0200 rename HklAxis->parent_instance into parameter Documentation/sphinx/source/bindings/python.py | 2 +- Documentation/sphinx/source/pyplots/trajectory.py | 4 ++-- Documentation/sphinx/source/pyplots/trajectory_full.py | 2 +- Documentation/sphinx/source/pyplots/trajectory_simple.py | 2 +- hkl/Hkl-5.0.gir | 2 +- hkl/hkl-axis.h | 2 +- hkl/hkl-binding.c | 2 +- hkl/hkl-pseudoaxis-auto.c | 4 ++-- hkl/hkl-pseudoaxis-common-eulerians.c | 6 +++--- test/bindings/python.py | 2 +- 10 files changed, 14 insertions(+), 14 deletions(-) commit 14486185d6f2610f9eb2b60c65ca238de31e05bb Author: Frédéric-Emmanuel PICCA Date: Fri Aug 24 17:25:22 2012 +0200 start to add a few figures for the trajectories explain the problem of the solution 2..n when computing trajectory. It is necessary to use only the first closest solution for now. If we want to provide fully valid trajectory it will be necessary to work on a dedicated trajectory API. Documentation/sphinx/source/bindings/bindings.rst | 109 ++++++++++++++++++++- Documentation/sphinx/source/pyplots/trajectory.py | 40 +++----- .../sphinx/source/pyplots/trajectory_full.py | 66 +++++++++++++ .../sphinx/source/pyplots/trajectory_simple.py | 79 +++++++++++++++ hkl/Hkl-5.0.gir | 1 - hkl/hkl-geometry.c | 8 +- test/bindings/python.py | 3 +- 7 files changed, 270 insertions(+), 36 deletions(-) commit d333c9a934a65e736ca9585a1b6204b95c972714 Author: Frédéric-Emmanuel PICCA Date: Fri Aug 24 09:23:30 2012 +0200 gives access to the hkl_geometry_distance method to bindings d = geometry.distance(geometry2) Documentation/sphinx/source/pyplots/trajectory.py | 4 ++-- hkl/Hkl-5.0.gir | 10 ++++------ hkl/hkl-geometry.c | 8 ++++---- 3 files changed, 10 insertions(+), 12 deletions(-) commit 3a41b7c6e77cb12930bb508be3aa82ce27e33b30 Author: Frédéric-Emmanuel PICCA Date: Thu Aug 23 17:48:50 2012 +0200 add plots to the documentation. Documentation/sphinx/source/bindings/bindings.rst | 5 ++ Documentation/sphinx/source/conf.py.in | 6 +- Documentation/sphinx/source/pyplots/trajectory.py | 99 +++++++++++++++++++++++ sphinx.make | 4 +- test/bindings/python.py | 5 +- 5 files changed, 114 insertions(+), 5 deletions(-) commit a90e5d5cc34068b3bcf53f797b7fc39aafd8544b Author: Frédéric-Emmanuel PICCA Date: Thu Aug 23 13:31:08 2012 +0200 acces to HklGeometry axes member is possible exemple: axes = geometry.axes() Documentation/sphinx/source/bindings/python.py | 85 +++++++++--------- hkl/Hkl-5.0.gir | 97 ++++++++++++++++---- hkl/hkl-binding-private.h | 11 ++- hkl/hkl-binding.c | 117 +++++++++++++++++++++---- hkl/hkl-geometry.h | 6 +- hkl/hkl-pseudoaxis.h | 13 ++- test/bindings/python.py | 46 +++++++--- 7 files changed, 280 insertions(+), 95 deletions(-) commit db9ac07e164a70270980748f339335da6a1418d0 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 22 16:07:30 2012 +0200 now we can get an array of the pseudo axes values with the units exemple engine.get_values_unit() hkl/Hkl-5.0.gir | 25 ++++++++++++++++++++++--- hkl/hkl-binding-private.h | 3 +++ hkl/hkl-binding.c | 23 +++++++++++++++++++++++ hkl/hkl-pseudoaxis.c | 10 +++++----- test/bindings/python.py | 3 ++- 5 files changed, 55 insertions(+), 9 deletions(-) commit 6a95753a9cec70d14631e8add12e2312e9b76fb6 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 22 15:48:23 2012 +0200 get all values of and engine at a time test/bindings/python.py | 4 ++++ 1 file changed, 4 insertions(+) commit 38c659adfe6736d88adccde7c3cfd70872bf9e39 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 22 14:57:01 2012 +0200 improve the documentaiton about the binding hkl_parameter_get_value_unit (skip) -> binding Documentation/sphinx/source/bindings/python.py | 24 ++++++++++++++++++++++++ hkl/Hkl-5.0.gir | 3 +-- hkl/hkl-parameter.c | 4 ++-- 3 files changed, 27 insertions(+), 4 deletions(-) commit 4a5352a3e42de677f32980924377dee679b68757 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 22 14:55:35 2012 +0200 check that pseudo axis value is reachable from the python binding test/bindings/python.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit bf1918b5fbf5e1561bdb0eb3cf6d520d765d54be Author: Frédéric-Emmanuel PICCA Date: Wed Aug 22 14:54:46 2012 +0200 let use the "rad" instead of "" for the angle radian represeantion hkl/hkl-unit.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 52cc6c1c4dd69d74ea63dbe5c0787dad934ccdb3 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 21 18:16:50 2012 +0200 check also that the geometry member of the geometrylistItem is correct test/bindings/python.py | 1 + 1 file changed, 1 insertion(+) commit 495d876c82040116a4affa7d03110df869ab8bc8 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 21 18:11:41 2012 +0200 now we can iterate for each pseudo_axis for pseudo_axis in engine.pseudo_axes(): print pseudo_axis hkl/Hkl-5.0.gir | 10 ++++++++++ hkl/hkl-binding-private.h | 6 ++++++ hkl/hkl-binding.c | 19 +++++++++++++++++++ test/bindings/python.py | 2 ++ 4 files changed, 37 insertions(+) commit c4821e27fbd42df4e99674397bcd2145cf1e3586 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 21 17:10:24 2012 +0200 reorder the python test to follow the alphabetic order test are executed in the alphabetic order. test/bindings/python.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) commit a2b26f0ffac694dab71b615750c9c2f8b433d494 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 21 17:09:46 2012 +0200 move all the binding method into dedicated files hkl/Hkl-5.0.gir | 31 +++++-------- hkl/Makefile.am | 6 ++- hkl/hkl-binding-private.h | 53 +++++++++++++++++++++++ hkl/hkl-binding.c | 108 ++++++++++++++++++++++++++++++++++++++++++++++ hkl/hkl-geometry.c | 47 -------------------- hkl/hkl-geometry.h | 7 --- hkl/hkl-pseudoaxis.c | 30 ------------- hkl/hkl-pseudoaxis.h | 3 -- test/bindings/python.py | 1 + 9 files changed, 178 insertions(+), 108 deletions(-) commit 42c72141321d43962aaf414b22d4d9e2ee2276c2 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 21 14:13:24 2012 +0200 add the .gir file even if this fil is generated, it will be easyer to follow binding evolution when tuning the annotations. hkl/Hkl-5.0.gir | 4267 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 4267 insertions(+) commit 0bb2e3b2cfd726f6c2eb9a007e553a1aaa2c3129 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 21 14:10:30 2012 +0200 remove a few const in the struct xxxInfo this should solve the "assignment of read-only location" when creating copy constructors. hkl/hkl-pseudoaxis.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit a7bac918ce218eb7bff690ad03be7f97fed42946 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 21 13:47:23 2012 +0200 be clear that binding api will not be public in near futur hkl/hkl-geometry.c | 121 ++++++++++++++++++++------------------------------- hkl/hkl-geometry.h | 2 +- hkl/hkl-pseudoaxis.h | 5 +-- 3 files changed, 49 insertions(+), 79 deletions(-) commit 6f60459c0020f6c24038938a7e784cc1be6cec3f Author: Frédéric-Emmanuel PICCA Date: Tue Aug 21 13:46:52 2012 +0200 now it is possible to iterate over HklGeometryListItem exemple: for item in engine.geometries.items(): print item hkl/hkl-geometry.c | 121 +++++++++++++++++++++++++++++------------------- hkl/hkl-geometry.h | 3 ++ test/bindings/python.py | 8 ++-- 3 files changed, 81 insertions(+), 51 deletions(-) commit 6ee47cc9820a93d27a31cce75f80ea95e9fb257c Author: Frédéric-Emmanuel PICCA Date: Tue Aug 21 11:33:16 2012 +0200 add a binding dedicated method to the HklPseudoAxisEngineList now it is possible to iterate on each engine like this for engine in engines.engines(): print engine hkl/hkl-pseudoaxis.c | 30 +++++++++++++++++++++++ hkl/hkl-pseudoaxis.h | 7 ++++++ test/bindings/python.py | 65 ++++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 93 insertions(+), 9 deletions(-) commit e1b4dd8d610469eee847d754ccd7398f5c43200e Author: Frédéric-Emmanuel PICCA Date: Tue Aug 21 09:51:58 2012 +0200 remove the hkl-pseudoaxis-engine-common files (useless) hkl/Makefile.am | 2 - hkl/hkl-pseudoaxis-auto-private.h | 3 ++ hkl/hkl-pseudoaxis-common-eulerians.c | 1 - hkl/hkl-pseudoaxis-common-hkl-private.h | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 3 +- hkl/hkl-pseudoaxis-common-private.h | 47 -------------------- hkl/hkl-pseudoaxis-common-psi.c | 3 +- hkl/hkl-pseudoaxis-common-q.c | 4 +- hkl/hkl-pseudoaxis-common.c | 78 --------------------------------- hkl/hkl-pseudoaxis-private.h | 32 ++++++++++++-- 10 files changed, 36 insertions(+), 139 deletions(-) commit 150541ffc4d1c4fc5bd07ff459833b2d9bd0cdd1 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 21 09:25:37 2012 +0200 the struc _HklPseudoAxisEngineModeOperations is now part of private hkl/hkl-pseudoaxis-private.h | 22 ++++++++++++++++++++++ hkl/hkl-pseudoaxis.h | 22 ---------------------- 2 files changed, 22 insertions(+), 22 deletions(-) commit 5295ef5f4f7fae295d66d31fb334af251a4c2872 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 20 19:05:13 2012 +0200 create an HklPseudoAxisEngineModeInfo for the Automatic modes. hkl/hkl-pseudoaxis-auto-private.h | 26 +++++++++- hkl/hkl-pseudoaxis-auto.c | 35 ++++++++++++-- hkl/hkl-pseudoaxis-common-eulerians.c | 6 +-- hkl/hkl-pseudoaxis-common-psi-private.h | 6 +-- hkl/hkl-pseudoaxis-common-psi.c | 12 ++--- hkl/hkl-pseudoaxis-common-q.c | 8 ++-- hkl/hkl-pseudoaxis-e4c-hkl.c | 36 +++++++------- hkl/hkl-pseudoaxis-e4c-psi.c | 4 +- hkl/hkl-pseudoaxis-e6c-hkl.c | 78 +++++++++++++++--------------- hkl/hkl-pseudoaxis-e6c-psi.c | 6 +-- hkl/hkl-pseudoaxis-k4cv-hkl.c | 36 +++++++------- hkl/hkl-pseudoaxis-k4cv-psi.c | 7 +-- hkl/hkl-pseudoaxis-k6c-hkl.c | 84 ++++++++++++++++----------------- hkl/hkl-pseudoaxis-k6c-psi.c | 7 +-- hkl/hkl-pseudoaxis-petra3-hkl.c | 42 ++++++++--------- hkl/hkl-pseudoaxis-private.h | 9 ---- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 18 +++---- hkl/hkl-pseudoaxis-zaxis-hkl.c | 12 ++--- hkl/hkl-pseudoaxis.c | 6 --- hkl/hkl-pseudoaxis.h | 3 -- 20 files changed, 232 insertions(+), 209 deletions(-) commit 50f29b402a36d5ff0dab0764403b0372a6a463b1 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 20 16:13:55 2012 +0200 reorganisation of the .h files to tighten the dependencies hkl/hkl-pseudoaxis-auto-private.h | 13 ++++++++++++- hkl/hkl-pseudoaxis-common-hkl-private.h | 4 ++-- hkl/hkl-pseudoaxis-common-hkl.c | 9 ++++----- hkl/hkl-pseudoaxis-common-psi.c | 9 +++++---- hkl/hkl-pseudoaxis-common-q.c | 8 +++----- hkl/hkl-pseudoaxis-e4c-hkl.c | 6 +++--- hkl/hkl-pseudoaxis-e4c-psi.c | 6 ++++-- hkl/hkl-pseudoaxis-e6c-hkl.c | 6 +++--- hkl/hkl-pseudoaxis-e6c-psi.c | 5 +++-- hkl/hkl-pseudoaxis-k4cv-hkl.c | 6 +++--- hkl/hkl-pseudoaxis-k4cv-psi.c | 5 +++-- hkl/hkl-pseudoaxis-k6c-hkl.c | 6 +++--- hkl/hkl-pseudoaxis-k6c-psi.c | 5 +++-- hkl/hkl-pseudoaxis-petra3-hkl.c | 6 +++--- hkl/hkl-pseudoaxis-private.h | 16 ---------------- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 6 +++--- hkl/hkl-pseudoaxis-zaxis-hkl.c | 6 +++--- 17 files changed, 60 insertions(+), 62 deletions(-) commit 2c73502582fa6312febc83527e37822520e94821 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 20 14:56:49 2012 +0200 now all code diffractometers specific is private hkl/Makefile.am | 26 +++++++++++----------- ...doaxis-auto.h => hkl-pseudoaxis-auto-private.h} | 0 ...h => hkl-pseudoaxis-common-eulerians-private.h} | 0 ...n-hkl.h => hkl-pseudoaxis-common-hkl-private.h} | 0 ...is-common.h => hkl-pseudoaxis-common-private.h} | 0 ...ommon-q.h => hkl-pseudoaxis-common-q-private.h} | 0 hkl/hkl-pseudoaxis-e4c-hkl.c | 4 ++-- ...eudoaxis-e4c.h => hkl-pseudoaxis-e4c-private.h} | 0 hkl/hkl-pseudoaxis-e4c-psi.c | 2 +- hkl/hkl-pseudoaxis-e6c-hkl.c | 4 ++-- ...eudoaxis-e6c.h => hkl-pseudoaxis-e6c-private.h} | 0 hkl/hkl-pseudoaxis-factory.c | 18 +++++++-------- hkl/hkl-pseudoaxis-k4cv-hkl.c | 4 ++-- ...doaxis-k4cv.h => hkl-pseudoaxis-k4cv-private.h} | 0 hkl/hkl-pseudoaxis-k6c-hkl.c | 4 ++-- ...eudoaxis-k6c.h => hkl-pseudoaxis-k6c-private.h} | 0 hkl/hkl-pseudoaxis-petra3-hkl.c | 4 ++-- ...is-petra3.h => hkl-pseudoaxis-petra3-private.h} | 0 ....h => hkl-pseudoaxis-soleil-sixs-med-private.h} | 0 hkl/hkl-pseudoaxis-soleil-sixs-med.c | 4 ++-- hkl/hkl-pseudoaxis-zaxis-hkl.c | 4 ++-- ...axis-zaxis.h => hkl-pseudoaxis-zaxis-private.h} | 0 22 files changed, 37 insertions(+), 37 deletions(-) commit 94b542291a3ab8e396f2d350b3cea7a9541a41cf Author: Frédéric-Emmanuel PICCA Date: Mon Aug 20 14:19:40 2012 +0200 reactive tests for the euerlain4c diffractometer test/hkl/pseudoaxis-e4cv-t.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) commit 2190b258bb2ce3a36a0f2c7d301bf865cd2b7038 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 20 14:19:04 2012 +0200 fix a warning during the introspection hkl/hkl-pseudoaxis.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d1b8846ca11884227afd2f1ad7fccba76ad6a024 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 20 14:18:02 2012 +0200 update the hkl.h files to expose only the factories. hkl.h | 6 +----- test/hkl/pseudoaxis-e4cv-t.c | 10 ---------- 2 files changed, 1 insertion(+), 15 deletions(-) commit 35483be38b7b7582de676b4b137a0f54acff88e3 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 20 13:55:18 2012 +0200 clean the public header of the pseudo axes. now it is clear to indentify public/private/protected. hkl/hkl-pseudoaxis-auto.c | 1 + hkl/hkl-pseudoaxis-common-eulerians.c | 1 + hkl/hkl-pseudoaxis-common-hkl.c | 1 + hkl/hkl-pseudoaxis-common-q.c | 2 + hkl/hkl-pseudoaxis-private.h | 235 +++++++++++++++++++++++++++ hkl/hkl-pseudoaxis.c | 291 ---------------------------------- hkl/hkl-pseudoaxis.h | 48 +----- test/hkl/pseudoaxis-e4ch-t.c | 13 +- test/hkl/pseudoaxis-e6c-t.c | 13 +- test/hkl/pseudoaxis-k4cv-t.c | 11 +- test/hkl/pseudoaxis-k6c-t.c | 11 +- test/hkl/pseudoaxis-t.c | 25 ++- 12 files changed, 270 insertions(+), 382 deletions(-) commit 71ff328851e5b1ce4cb46c27420a5ec4796f7e65 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 20 11:33:59 2012 +0200 add the test directory to the clean-all script and use it scripts/clean-all | 4 ++-- test/hkl/pseudoaxis-t.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 8a77425a1b81fc6a9183810748769112da6e5120 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 20 11:02:47 2012 +0200 use the clean-all script on all relevant files configure.ac | 2 +- gui/hkl-gui-3d.h | 12 +-- gui/hkl-gui-callbacks.cpp | 2 +- gui/hkl-gui-modelcolumns.h | 100 +++++++++++------------ gui/hkl-gui.cpp | 3 +- hkl/hkl-detector-factory.c | 4 +- hkl/hkl-detector.c | 16 ++-- hkl/hkl-geometry-factory.c | 10 +-- hkl/hkl-geometry.c | 96 +++++++++++----------- hkl/hkl-interval.c | 64 +++++++-------- hkl/hkl-lattice.c | 52 ++++++------ hkl/hkl-matrix.c | 10 +-- hkl/hkl-parameter.c | 90 ++++++++++---------- hkl/hkl-pseudoaxis-common-hkl.c | 42 +++++----- hkl/hkl-pseudoaxis-common-hkl.h | 3 +- hkl/hkl-pseudoaxis-common-q.c | 2 +- hkl/hkl-pseudoaxis-e6c-hkl.c | 2 +- hkl/hkl-pseudoaxis-factory.c | 2 +- hkl/hkl-pseudoaxis-k6c-hkl.c | 2 +- hkl/hkl-pseudoaxis.c | 37 ++++++--- hkl/hkl-quaternion.c | 10 +-- hkl/hkl-sample.c | 176 ++++++++++++++++++++-------------------- hkl/hkl-sample.h | 3 +- hkl/hkl-source.c | 14 ++-- hkl/hkl-source.h | 2 +- hkl/hkl-unit.c | 4 +- hkl/hkl-vector.c | 6 +- 27 files changed, 388 insertions(+), 378 deletions(-) commit e69c69343c3809ebc0ec13658d9fcb78f14886d6 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 20 10:49:34 2012 +0200 fix the yaml configure part configure.ac | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) commit 10588f3b1f8f78008612cbb7223dc803e32daedf Author: Frédéric-Emmanuel PICCA Date: Mon Aug 20 09:38:32 2012 +0200 fix for real the introspection Makefile.am part hkl/Makefile.am | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) commit 53b1afcae2ff99637122fa01d65a4dceacba5c35 Author: Picca Frédéric-Emmanuel Date: Sun Aug 19 22:25:53 2012 +0200 fix the version of the introspection files hkl/Makefile.am | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 5add1f0c67044eef62867050cc59e2dbd3b4ee5e Author: Picca Frédéric-Emmanuel Date: Sun Aug 19 21:04:42 2012 +0200 distcheck is now working ccan/Makefile.am | 10 +++++++++- hkl/Makefile.am | 5 +++-- 2 files changed, 12 insertions(+), 3 deletions(-) commit cc7fe4c59f1e478b1c91ab13e4f5410d6fb7a806 Author: Picca Frédéric-Emmanuel Date: Sun Aug 19 20:40:26 2012 +0200 fix an header hkl/hkl-pseudoaxis-common-psi-private.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit d46fe890051069fc944229d6d3e6afd37c4e1c44 Author: Picca Frédéric-Emmanuel Date: Sun Aug 19 20:40:07 2012 +0200 add the python binding unit test configure.ac | 1 + test/Makefile.am | 3 +++ test/bindings/Makefile.am | 4 +++ test/bindings/python.py | 68 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+) commit c61a0f03918da703ab5bcfffc4c352176b117923 Author: Picca Frédéric-Emmanuel Date: Sun Aug 19 18:27:15 2012 +0200 move a few methods of HklPseudoAxisEngineList in the private header hkl/hkl-pseudoaxis-factory.c | 1 + hkl/hkl-pseudoaxis-private.h | 13 +++++++++++++ hkl/hkl-pseudoaxis.c | 2 +- hkl/hkl-pseudoaxis.h | 9 --------- hkl/hkl-types.c | 1 + 5 files changed, 16 insertions(+), 10 deletions(-) commit 02b467184ea41c9dc2ab0bb3e287462da4dbec71 Author: Picca Frédéric-Emmanuel Date: Sun Aug 19 16:27:15 2012 +0200 start to create hkl-xxx-private.h files at the end only the non-private header will consist of the hkl public API. hkl/Makefile.am | 4 ++-- ...kl-pseudoaxis-common-psi.h => hkl-pseudoaxis-common-psi-private.h} | 0 hkl/hkl-pseudoaxis-common-psi.c | 3 +-- hkl/hkl-pseudoaxis-e4c-psi.c | 2 +- hkl/hkl-pseudoaxis-e6c-psi.c | 2 +- hkl/hkl-pseudoaxis-k4cv-psi.c | 2 +- hkl/hkl-pseudoaxis-k6c-psi.c | 2 +- 7 files changed, 7 insertions(+), 8 deletions(-) commit e20364a046b6f554f571857a1e97275381160569 Author: Picca Frédéric-Emmanuel Date: Sun Aug 19 16:17:38 2012 +0200 now Hklfunction is private hkl/hkl-pseudoaxis-auto.c | 1 + hkl/hkl-pseudoaxis-common-psi.h | 2 +- hkl/hkl-pseudoaxis-private.h | 14 ++++++++++++++ hkl/hkl-pseudoaxis.h | 7 ------- 4 files changed, 16 insertions(+), 8 deletions(-) commit 8bb19bf76fcdf41824691241e09bfa6d6f07be4c Author: Picca Frédéric-Emmanuel Date: Sun Aug 19 12:00:20 2012 +0200 small optimisation hkl/hkl-pseudoaxis-k6c-hkl.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) commit 5b0f28cc95893238b2b670411a9c41937920830c Author: Picca Frédéric-Emmanuel Date: Fri Aug 17 21:33:55 2012 +0200 now HklFunction containt the expected number of axes of the method hkl/hkl-pseudoaxis-auto.c | 21 ++++--- hkl/hkl-pseudoaxis-common-hkl.c | 6 +- hkl/hkl-pseudoaxis-common-hkl.h | 22 ++++++- hkl/hkl-pseudoaxis-common-psi.c | 2 +- hkl/hkl-pseudoaxis-common-psi.h | 7 ++- hkl/hkl-pseudoaxis-common-q.c | 18 ++++-- hkl/hkl-pseudoaxis-e4c-hkl.c | 19 +++--- hkl/hkl-pseudoaxis-e4c-psi.c | 2 +- hkl/hkl-pseudoaxis-e6c-hkl.c | 40 ++++++++----- hkl/hkl-pseudoaxis-e6c-psi.c | 2 +- hkl/hkl-pseudoaxis-k4cv-hkl.c | 68 ++++++++++++++++----- hkl/hkl-pseudoaxis-k4cv-psi.c | 2 +- hkl/hkl-pseudoaxis-k6c-hkl.c | 112 +++++++++++++++++++++++++++-------- hkl/hkl-pseudoaxis-k6c-psi.c | 2 +- hkl/hkl-pseudoaxis-petra3-hkl.c | 28 ++++++--- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 13 ++-- hkl/hkl-pseudoaxis-zaxis-hkl.c | 11 +++- hkl/hkl-pseudoaxis.c | 3 + hkl/hkl-pseudoaxis.h | 9 ++- 19 files changed, 280 insertions(+), 107 deletions(-) commit eb978ef6f3a0ce8f1790d2bbba08d82cc2622551 Author: Picca Frédéric-Emmanuel Date: Fri Aug 17 17:07:32 2012 +0200 put also the parameters in the ModeInfo hkl/hkl-pseudoaxis-common-eulerians.c | 15 +-- hkl/hkl-pseudoaxis-common-psi.c | 25 +---- hkl/hkl-pseudoaxis-common-q.c | 4 +- hkl/hkl-pseudoaxis-e4c-hkl.c | 75 ++++--------- hkl/hkl-pseudoaxis-e4c-psi.c | 7 +- hkl/hkl-pseudoaxis-e6c-hkl.c | 145 +++++++------------------- hkl/hkl-pseudoaxis-e6c-psi.c | 7 +- hkl/hkl-pseudoaxis-k4cv-hkl.c | 98 ++++++----------- hkl/hkl-pseudoaxis-k4cv-psi.c | 7 +- hkl/hkl-pseudoaxis-k6c-hkl.c | 191 ++++++++++------------------------ hkl/hkl-pseudoaxis-k6c-psi.c | 7 +- hkl/hkl-pseudoaxis-petra3-hkl.c | 21 ++-- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 9 +- hkl/hkl-pseudoaxis-zaxis-hkl.c | 6 +- hkl/hkl-pseudoaxis.c | 29 ++---- hkl/hkl-pseudoaxis.h | 10 +- 16 files changed, 204 insertions(+), 452 deletions(-) commit 6f347831706c72d19bdfa2e3cc31d79e40e8409e Author: Picca Frédéric-Emmanuel Date: Fri Aug 17 11:17:41 2012 +0200 use the INFO_xxx methods instead of writing all the time the same thing hkl/hkl-pseudoaxis-common-eulerians.c | 4 +- hkl/hkl-pseudoaxis-common-q.c | 13 +----- hkl/hkl-pseudoaxis-e4c-hkl.c | 36 +++------------ hkl/hkl-pseudoaxis-e4c-psi.c | 6 +-- hkl/hkl-pseudoaxis-e6c-hkl.c | 78 ++++++-------------------------- hkl/hkl-pseudoaxis-e6c-psi.c | 6 +-- hkl/hkl-pseudoaxis-k4cv-hkl.c | 36 +++------------ hkl/hkl-pseudoaxis-k4cv-psi.c | 6 +-- hkl/hkl-pseudoaxis-k6c-hkl.c | 84 ++++++----------------------------- hkl/hkl-pseudoaxis-k6c-psi.c | 6 +-- hkl/hkl-pseudoaxis-petra3-hkl.c | 42 +++--------------- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 18 ++------ hkl/hkl-pseudoaxis-zaxis-hkl.c | 12 +---- hkl/hkl-pseudoaxis.h | 3 ++ 14 files changed, 61 insertions(+), 289 deletions(-) commit 29b7162baf5cea5cc1168da936ce998bc661069e Author: Picca Frédéric-Emmanuel Date: Thu Aug 16 19:08:48 2012 +0200 move the functions in the HklPseudoAxisEngineModeInfo hkl/hkl-pseudoaxis-auto.c | 4 +-- hkl/hkl-pseudoaxis-common-eulerians.c | 1 - hkl/hkl-pseudoaxis-common-psi.c | 8 +++-- hkl/hkl-pseudoaxis-common-psi.h | 2 ++ hkl/hkl-pseudoaxis-common-q.c | 14 +++++---- hkl/hkl-pseudoaxis-e4c-hkl.c | 25 +++++++++++----- hkl/hkl-pseudoaxis-e4c-psi.c | 6 ++-- hkl/hkl-pseudoaxis-e6c-hkl.c | 52 ++++++++++++++++++++++++-------- hkl/hkl-pseudoaxis-e6c-psi.c | 3 ++ hkl/hkl-pseudoaxis-k4cv-hkl.c | 24 +++++++++++---- hkl/hkl-pseudoaxis-k4cv-psi.c | 3 ++ hkl/hkl-pseudoaxis-k6c-hkl.c | 56 ++++++++++++++++++++++++++--------- hkl/hkl-pseudoaxis-k6c-psi.c | 3 ++ hkl/hkl-pseudoaxis-petra3-hkl.c | 28 +++++++++++++----- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 12 ++++++-- hkl/hkl-pseudoaxis-zaxis-hkl.c | 8 +++-- hkl/hkl-pseudoaxis.c | 28 ++++-------------- hkl/hkl-pseudoaxis.h | 9 +++--- 18 files changed, 193 insertions(+), 93 deletions(-) commit b84ec692daefb4e58f440d6e3f251efcd126da04 Author: Picca Frédéric-Emmanuel Date: Thu Aug 16 17:21:20 2012 +0200 add the HklPseudoAxisengineModeInfo structure and use it gui/hkl-gui-pseudoaxes.cpp | 2 +- hkl/hkl-pseudoaxis-auto.c | 4 +- hkl/hkl-pseudoaxis-common-eulerians.c | 43 +-- hkl/hkl-pseudoaxis-common-hkl.c | 51 ++-- hkl/hkl-pseudoaxis-common-hkl.h | 2 +- hkl/hkl-pseudoaxis-common-psi.c | 12 +- hkl/hkl-pseudoaxis-common-psi.h | 5 +- hkl/hkl-pseudoaxis-common-q.c | 86 +++--- hkl/hkl-pseudoaxis-e4c-hkl.c | 223 ++++++++++----- hkl/hkl-pseudoaxis-e4c-psi.c | 26 +- hkl/hkl-pseudoaxis-e6c-hkl.c | 432 +++++++++++++++++++--------- hkl/hkl-pseudoaxis-e6c-psi.c | 35 ++- hkl/hkl-pseudoaxis-k4cv-hkl.c | 243 ++++++++++------ hkl/hkl-pseudoaxis-k4cv-psi.c | 36 ++- hkl/hkl-pseudoaxis-k6c-hkl.c | 512 ++++++++++++++++++++++------------ hkl/hkl-pseudoaxis-k6c-psi.c | 28 +- hkl/hkl-pseudoaxis-petra3-hkl.c | 197 ++++++++----- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 101 ++++--- hkl/hkl-pseudoaxis-zaxis-hkl.c | 72 +++-- hkl/hkl-pseudoaxis.c | 46 +-- hkl/hkl-pseudoaxis.h | 18 +- test/hkl/bench-t.c | 2 +- test/hkl/pseudoaxis-t.c | 4 +- 23 files changed, 1423 insertions(+), 757 deletions(-) commit 44bdd4954c1c2c90fc1244bd2f34b040e1077c0b Author: Picca Frédéric-Emmanuel Date: Wed Aug 15 21:29:50 2012 +0200 error in the k4cv diffractometer hkl/hkl-pseudoaxis-k4cv-hkl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 2ec7ce27b29b70c33b9adda3712544a9f98cf661 Author: Picca Frédéric-Emmanuel Date: Wed Aug 15 15:24:17 2012 +0200 add a command line option of the number of test in pseudoaxis-t you can define the number of test for each mode with the first command ligne arg test/hkl/pseudoaxis-t 1000 test/hkl/pseudoaxis-t.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) commit e04641576d6bfbbaaca75de3d97f95c8a1367642 Author: Picca Frédéric-Emmanuel Date: Wed Aug 15 15:18:43 2012 +0200 for consistancy use CHECK_NAN in each mode. hkl/hkl-pseudoaxis-common-eulerians.c | 60 ++++---- hkl/hkl-pseudoaxis-common-hkl.c | 74 +++------- hkl/hkl-pseudoaxis-common-hkl.h | 2 +- hkl/hkl-pseudoaxis-common-psi.c | 50 +++---- hkl/hkl-pseudoaxis-common-q.c | 42 +++--- hkl/hkl-pseudoaxis-e4c-hkl.c | 16 +-- hkl/hkl-pseudoaxis-e6c-hkl.c | 41 +++--- hkl/hkl-pseudoaxis-k4cv-hkl.c | 167 ++++++++------------- hkl/hkl-pseudoaxis-k6c-hkl.c | 263 ++++++++++++---------------------- hkl/hkl-pseudoaxis-petra3-hkl.c | 27 ++-- hkl/hkl-pseudoaxis-private.h | 6 + hkl/hkl-pseudoaxis-soleil-sixs-med.c | 20 ++- hkl/hkl-pseudoaxis-zaxis-hkl.c | 14 +- hkl/hkl-pseudoaxis.c | 20 +++ hkl/hkl-pseudoaxis.h | 3 + 15 files changed, 321 insertions(+), 484 deletions(-) commit 05301e70d9d840d8bf41fb1b08a5610eab23a414 Author: Picca Frédéric-Emmanuel Date: Wed Aug 15 09:30:53 2012 +0200 add an HklPseudoAxisEngineinfo struct ccan/array_size/array_size.h | 25 +++++++++++++++++ gui/Makefile.am | 3 +- gui/hkl-gui-pseudoaxes.cpp | 2 +- hkl/hkl-parameter.h | 4 +++ hkl/hkl-pseudoaxis-common-eulerians.c | 51 +++++++++++++++------------------ hkl/hkl-pseudoaxis-common-hkl.c | 45 ++++++++++++----------------- hkl/hkl-pseudoaxis-common-psi.c | 29 ++++++++++--------- hkl/hkl-pseudoaxis-common-q.c | 53 ++++++++++++++++------------------- hkl/hkl-pseudoaxis.c | 37 +++++------------------- hkl/hkl-pseudoaxis.h | 13 ++++++--- test/hkl/bench-t.c | 2 +- test/hkl/pseudoaxis-t.c | 2 +- test/tap/hkl.c | 14 ++++----- 13 files changed, 137 insertions(+), 143 deletions(-) commit 85d69265d4b411ef29dd011812b723a3be8a05c8 Author: Picca Frédéric-Emmanuel Date: Sun Aug 12 15:06:03 2012 +0200 use the list in the pseudo axis engine axes. gui/Makefile.am | 3 +-- hkl/Makefile.am | 5 +++- hkl/hkl-axis.h | 2 ++ hkl/hkl-pseudoaxis-auto.c | 32 ++++++++++++++------------ hkl/hkl-pseudoaxis-common-hkl.c | 17 +++++--------- hkl/hkl-pseudoaxis-common-psi.c | 8 ++----- hkl/hkl-pseudoaxis-common-q.c | 11 +++------ hkl/hkl-pseudoaxis-private.h | 41 +++++++++++++++++++++++++++++++++ hkl/hkl-pseudoaxis.c | 51 ++++++++++++++++++++--------------------- hkl/hkl-pseudoaxis.h | 5 ++-- 10 files changed, 103 insertions(+), 72 deletions(-) commit 42b6a37d9cd59b1d95046683efd7abc2311f48e9 Author: Picca Frédéric-Emmanuel Date: Sat Aug 11 23:02:05 2012 +0200 use also the list for the PseudoAxes gui/hkl-gui-pseudoaxes.cpp | 10 ++-- gui/hkl-gui.cpp | 16 +++--- hkl/Makefile.am | 3 +- hkl/hkl-pseudoaxis-common-eulerians.c | 32 ++++++++---- hkl/hkl-pseudoaxis-common-hkl.c | 41 +++++++++------ hkl/hkl-pseudoaxis-common-hkl.h | 9 ++-- hkl/hkl-pseudoaxis-common-psi.c | 14 +++-- hkl/hkl-pseudoaxis-common-q.c | 55 ++++++++++---------- hkl/hkl-pseudoaxis.c | 69 +++++++++++++++---------- hkl/hkl-pseudoaxis.h | 16 ++++-- test/hkl/bench-t.c | 97 +++++++++-------------------------- test/hkl/pseudoaxis-e4ch-t.c | 80 ++++++++++------------------- test/hkl/pseudoaxis-e4cv-t.c | 96 +++++++++++++--------------------- test/hkl/pseudoaxis-e6c-t.c | 77 ++++++++++----------------- test/hkl/pseudoaxis-k4cv-t.c | 50 +++++------------- test/hkl/pseudoaxis-k6c-t.c | 49 +++++------------- test/hkl/pseudoaxis-t.c | 30 ++++++----- test/hkl/pseudoaxis-zaxis-t.c | 14 +++-- test/tap/hkl.c | 52 +++++++++++++++---- test/tap/hkl.h | 6 ++- 20 files changed, 365 insertions(+), 451 deletions(-) commit 5ad3ecddc9db48f7153e610290bdb994abc99325 Author: Picca Frédéric-Emmanuel Date: Thu Aug 9 17:56:45 2012 +0200 use the list for the modes in the PseudoAxisEngine gui/hkl-gui-pseudoaxes.cpp | 18 +++++++++--------- gui/hkl-gui-pseudoaxes.h | 2 ++ gui/pseudo.ui | 32 ++++++++++++++++++++++++++++---- hkl/hkl-pseudoaxis-common-eulerians.c | 5 ++--- hkl/hkl-pseudoaxis-common-q.c | 12 ++++-------- hkl/hkl-pseudoaxis-e4c-hkl.c | 5 ++--- hkl/hkl-pseudoaxis-e4c-psi.c | 7 +++---- hkl/hkl-pseudoaxis-e6c-hkl.c | 6 ++---- hkl/hkl-pseudoaxis-e6c-psi.c | 7 +++---- hkl/hkl-pseudoaxis-k4cv-hkl.c | 5 ++--- hkl/hkl-pseudoaxis-k4cv-psi.c | 7 +++---- hkl/hkl-pseudoaxis-k6c-hkl.c | 5 ++--- hkl/hkl-pseudoaxis-k6c-psi.c | 7 +++---- hkl/hkl-pseudoaxis-petra3-hkl.c | 5 ++--- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 11 ++++------- hkl/hkl-pseudoaxis-zaxis-hkl.c | 5 ++--- hkl/hkl-pseudoaxis.c | 34 +++++++++++++++++++++++++--------- hkl/hkl-pseudoaxis.h | 9 ++++++--- test/hkl/bench-t.c | 22 +++++++++++----------- test/hkl/pseudoaxis-e4ch-t.c | 22 +++++++++++++--------- test/hkl/pseudoaxis-e4cv-t.c | 26 +++++++++++++++----------- test/hkl/pseudoaxis-e6c-t.c | 20 +++++++++++--------- test/hkl/pseudoaxis-k4cv-t.c | 28 +++++++++++++++------------- test/hkl/pseudoaxis-k6c-t.c | 25 ++++++++++++++----------- test/hkl/pseudoaxis-t.c | 7 ++++--- 25 files changed, 187 insertions(+), 145 deletions(-) commit 967e1b44ac73dd1fbbb5c77e1d1021876734259f Author: Picca Frédéric-Emmanuel Date: Sat Aug 4 21:01:15 2012 +0200 use the list in the PseudoAxisEngineList gui/hkl-gui.cpp | 14 ++++++------- hkl/hkl-pseudoaxis.c | 55 +++++++++++++++++++++++-------------------------- hkl/hkl-pseudoaxis.h | 5 +++-- test/hkl/pseudoaxis-t.c | 6 +++--- 4 files changed, 38 insertions(+), 42 deletions(-) commit 4c1ca5c6ad87673852967bb4435d14cb40c38655 Author: Picca Frédéric-Emmanuel Date: Tue Jul 24 22:23:31 2012 +0200 test the list.h from ccan Makefile.am | 4 +- ccan/Makefile.am | 3 + ccan/build_assert/build_assert.h | 39 ++++ ccan/check_type/check_type.h | 63 ++++++ ccan/container_of/container_of.h | 108 +++++++++ ccan/list/list.c | 43 ++++ ccan/list/list.h | 469 +++++++++++++++++++++++++++++++++++++++ configure.ac | 1 + gui/Makefile.am | 5 +- gui/hkl-gui-callbacks.cpp | 13 +- gui/hkl-gui-modelcolumns.h | 2 + gui/hkl-gui-pseudoaxes.cpp | 7 +- gui/hkl-gui.cpp | 15 +- hkl/Makefile.am | 5 +- hkl/hkl-geometry.c | 127 ++++++----- hkl/hkl-geometry.h | 14 +- hkl/hkl-pseudoaxis-common-hkl.c | 12 +- hkl/hkl-pseudoaxis-factory.c | 10 +- hkl/hkl-pseudoaxis.c | 4 +- test/hkl/Makefile.am | 2 +- test/hkl/bench-t.c | 7 +- test/hkl/geometry-t.c | 25 +-- test/hkl/pseudoaxis-e4ch-t.c | 40 ++-- test/hkl/pseudoaxis-e4cv-t.c | 40 ++-- test/hkl/pseudoaxis-e6c-t.c | 54 ++--- test/hkl/pseudoaxis-k4cv-t.c | 30 ++- test/hkl/pseudoaxis-k6c-t.c | 29 ++- test/hkl/pseudoaxis-t.c | 12 +- test/hkl/pseudoaxis-zaxis-t.c | 7 +- test/tap/hkl.c | 1 + 30 files changed, 993 insertions(+), 198 deletions(-) commit 84777a74b060d174acc24280256fa215fa92daf4 Author: Picca Frédéric-Emmanuel Date: Tue Jul 24 11:53:12 2012 +0200 now distcheck is working configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit adc13e2193dd6e3322c95502fd6354a4ed0d7c26 Merge: c0ed0cea 50a84fb0 Author: Picca Frédéric-Emmanuel Date: Tue Jul 24 10:54:14 2012 +0200 Merge branch 'maint' into next Conflicts: TODO configure.ac hkl/hkl-pseudoaxis-e6c-hkl.c test/hkl/pseudoaxis-e6c-t.c test/hkl/pseudoaxis-k6c-t.c commit 50a84fb0aef6f9b7f8766592fdafae65f7a4c42c Author: Picca Frédéric-Emmanuel Date: Sat Jul 21 14:35:27 2012 +0200 better resolution for the figures of the documentation Documentation/figures/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5e69c9ad41e54d4eb40a13452b8e031b3c84cc6c Author: Picca Frédéric-Emmanuel Date: Sat Jul 21 14:35:06 2012 +0200 think about prigo TODO | 1 + 1 file changed, 1 insertion(+) commit ce64b0e6db1804ac4521ba1a161d3cecb2eca708 Author: Frédéric-Emmanuel PICCA Date: Thu Jul 19 15:43:55 2012 +0200 new rc3 for petraIII configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e45d7afea744c130ada17b8965c7af910885697a Author: Frédéric-Emmanuel PICCA Date: Tue Jul 17 17:12:17 2012 +0200 fix the psi_constant_vertical issue found by petraIII (thanks Sonia) in fact instead of computing UB . h, it was h . UB (wrong) very bad error which affect only the psi values (read and write). I added an unitary test from the mail sent by Sonia. the UB initialisation was wrong also so now I use hkl_sample_set_U_from_euler hkl/hkl-pseudoaxis-common-hkl.c | 15 ++- hkl/hkl-pseudoaxis-common-psi.c | 4 +- hkl/hkl-pseudoaxis-e6c-hkl.c | 2 +- test/hkl-test-pseudoaxis-e6c.c | 227 +++++++++++++++++++++++++++++++++++++++- test/hkl-test-pseudoaxis-k6c.c | 3 +- 5 files changed, 238 insertions(+), 13 deletions(-) commit c0ed0cea56675b26ff81ea7c289a5ede9ffff665 Merge: 44502889 86d308a7 Author: Picca Frédéric-Emmanuel Date: Sun Jun 17 23:05:42 2012 +0200 Merge branch 'introspection' into next Conflicts: configure.ac hkl/hkl-geometry-factory.c hkl/hkl-geometry.c hkl/hkl-geometry.h hkl/hkl-pseudoaxis.c hkl/hkl-pseudoaxis.h hkl/hkl-sample.c hkl/hkl-sample.h hkl/hkl-unit.c test/hkl/pseudoaxis-t.c commit 445028891e4d52770bf77d0a798fd32276e95965 Merge: 36c0c659 8c599b9e Author: Picca Frédéric-Emmanuel Date: Sun Jun 17 21:00:31 2012 +0200 Merge branch 'introspection' into next Conflicts: configure.ac gui/hkl-gui-modelcolumns.h gui/hkl-gui.cpp hkl/hkl-geometry-factory.c hkl/hkl-geometry-factory.h hkl/hkl-geometry.c hkl/hkl-geometry.h hkl/hkl-lattice.c hkl/hkl-list.h hkl/hkl-pseudoaxis-auto.c hkl/hkl-pseudoaxis-common-hkl.c hkl/hkl-pseudoaxis-common-psi.c hkl/hkl-pseudoaxis-common-q.c hkl/hkl-pseudoaxis.c hkl/hkl-pseudoaxis.h hkl/hkl-sample.c hkl/hkl-sample.h hkl/hkl-unit.c hkl/pom.xml scripts/clean-all test/hkl/pseudoaxis-t.c commit 86d308a76f2aed87bfb96ab8f408814b0cfb20ed Merge: fc27d4da 8c599b9e Author: Picca Frédéric-Emmanuel Date: Sat Jun 16 15:18:12 2012 +0200 Merge branch 'maint' into introspection commit fc27d4dae74ade6618fe5925eefbfc5efc23c619 Author: Picca Frédéric-Emmanuel Date: Thu Jun 7 22:28:10 2012 +0200 add HklPseudoAxisEngineList introspection Documentation/sphinx/source/bindings/python.py | 1 + Documentation/sphinx/source/test.py | 20 ++- hkl/hkl-detector.c | 22 ++- hkl/hkl-detector.h | 2 + hkl/hkl-geometry.c | 9 + hkl/hkl-pseudoaxis-factory.h | 1 - hkl/hkl-pseudoaxis.c | 239 +++++++++++++++++-------- hkl/hkl-pseudoaxis.h | 15 +- hkl/hkl-sample.c | 5 +- hkl/hkl-types.c | 30 +++- hkl/hkl-types.h | 3 + test/hkl-test-pseudoaxis.c | 26 +++ 12 files changed, 284 insertions(+), 89 deletions(-) commit 8c599b9e92d809aac8a040cc8ee236128409bab7 Author: Picca Frédéric-Emmanuel Date: Mon Mar 19 15:14:35 2012 +0100 first version of the constant_incidence mode for K6C .../sphinx/source/diffractometers/k6c.rst | 19 ++++++ NEWS | 2 + hkl/hkl-pseudoaxis-common.c | 29 ++++++++ hkl/hkl-pseudoaxis-common.h | 9 +++ hkl/hkl-pseudoaxis-k6c-hkl.c | 77 ++++++++++++++++++++++ 5 files changed, 136 insertions(+) commit 2b45fbd5dbc046e6445ac3d2106fdebc27a7519a Author: Frédéric-Emmanuel PICCA Date: Thu Mar 15 11:56:11 2012 +0100 WORK IN PROGRESS Documentation/sphinx/source/bindings/python.py | 11 ++++++ hkl/hkl-geometry.c | 51 +++++++++++++++++++++++++- hkl/hkl-geometry.h | 4 ++ 3 files changed, 64 insertions(+), 2 deletions(-) commit 7b738f9e01bbdde3648cf5f6c5b08adb45c2a60e Author: Frédéric-Emmanuel PICCA Date: Tue Jan 31 16:38:49 2012 +0100 typo hkl/hkl-parameter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6feb14ee6fc0816284b349b4c375a150e7d92bed Author: Frédéric-Emmanuel PICCA Date: Tue Jan 31 16:38:35 2012 +0100 add the HklPseudoAxisEngineList Documentation/sphinx/source/bindings.rst | 34 --------- Documentation/sphinx/source/bindings/bindings.rst | 14 ++++ Documentation/sphinx/source/bindings/python.py | 45 +++++++++++ Documentation/sphinx/source/index.rst | 2 +- INSTALL | 9 ++- hkl/Makefile.am | 2 + hkl/hkl-geometry-factory.c | 4 +- hkl/hkl-pseudoaxis-factory.c | 8 ++ hkl/hkl-pseudoaxis.c | 93 ++++++++++++++++++++++- hkl/hkl-pseudoaxis.h | 14 ++-- hkl/hkl-types.c | 12 +++ hkl/hkl-types.h | 3 + 12 files changed, 191 insertions(+), 49 deletions(-) commit d9757e93042a66a22be4b747efa913a242b6e6ef Author: Frédéric-Emmanuel PICCA Date: Fri Nov 25 16:54:22 2011 +0100 add the HklPseudoAxis struct hkl/Makefile.am | 6 ++++-- hkl/hkl-pseudoaxis.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++-- hkl/hkl-pseudoaxis.h | 37 ++++++++++++++++++++++------------ hkl/hkl-types.c | 12 +++++++++++ hkl/hkl-types.h | 5 ++++- 5 files changed, 99 insertions(+), 18 deletions(-) commit 52b3327bfcf1702bfb6f27f2b66f081798ea1c69 Author: Frédéric-Emmanuel PICCA Date: Tue Nov 15 16:42:31 2011 +0100 add the HklError to the introspection. hkl/Makefile.am | 2 ++ hkl/hkl-error.c | 58 +++++++++++++++++++++++++++------------------------------ hkl/hkl-types.c | 12 ++++++++++++ hkl/hkl-types.h | 3 +++ 4 files changed, 44 insertions(+), 31 deletions(-) commit 72bc4760ac3c40d693ba8bdf46010772934c3209 Author: Picca Frédéric-Emmanuel Date: Sun Nov 13 19:10:18 2011 +0100 add the sample to the introspection Documentation/sphinx/source/bindings.rst | 2 +- hkl/Makefile.am | 2 + hkl/hkl-sample.c | 460 +++++++++++++++++++++++++------ hkl/hkl-sample.h | 37 ++- hkl/hkl-types.c | 36 +++ hkl/hkl-types.h | 9 + 6 files changed, 442 insertions(+), 104 deletions(-) commit 930d24512f0ea00d976cdaa9ee007d9cb6f90e3d Author: Picca Frédéric-Emmanuel Date: Sun Nov 13 18:14:33 2011 +0100 add the HklLattice hkl/Makefile.am | 2 ++ hkl/hkl-lattice.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++----- hkl/hkl-lattice.h | 10 +++--- hkl/hkl-types.c | 12 ++++++++ hkl/hkl-types.h | 3 ++ 5 files changed, 107 insertions(+), 12 deletions(-) commit 9447b54c1e2949810e1ff4a29ff6993e6c7e71ba Author: Picca Frédéric-Emmanuel Date: Sun Nov 13 17:39:16 2011 +0100 add the geometry factory Documentation/sphinx/source/bindings.rst | 10 ++-- hkl/Makefile.am | 2 + hkl/hkl-geometry-factory.c | 86 ++++++++++++++++++++++++-------- hkl/hkl-geometry-factory.h | 3 ++ 4 files changed, 76 insertions(+), 25 deletions(-) commit 421a9aff01ab321a971ca07a128d593e3a6b8610 Author: Picca Frédéric-Emmanuel Date: Sun Nov 13 14:46:55 2011 +0100 add the HklGeoemtry to the introspection hkl/Makefile.am | 2 + hkl/hkl-geometry.c | 293 +++++++++++++++++++++++++++++++++++++++++++++++------ hkl/hkl-geometry.h | 17 ++-- hkl/hkl-types.c | 36 +++++++ hkl/hkl-types.h | 9 ++ 5 files changed, 322 insertions(+), 35 deletions(-) commit 945b75f6fd07cfccc9b7c53cffdc9c4037daf8c6 Author: Picca Frédéric-Emmanuel Date: Wed Nov 9 17:14:27 2011 +0100 add a few more class to the introspection Documentation/sphinx/source/bindings.rst | 19 +++- hkl/Makefile.am | 6 ++ hkl/hkl-interval.c | 163 +++++++++++++++++++++++++++++-- hkl/hkl-interval.h | 18 ++-- hkl/hkl-parameter.c | 154 +++++++++++++++++++++++++---- hkl/hkl-parameter.h | 24 ++--- hkl/hkl-types.c | 36 +++++++ hkl/hkl-types.h | 9 ++ hkl/hkl-unit.c | 57 ++++++++++- hkl/hkl-unit.h | 9 +- 10 files changed, 443 insertions(+), 52 deletions(-) commit c6e861b1204f33d18d985628c3a37c9e753948fd Author: Picca Frédéric-Emmanuel Date: Sun Oct 23 21:18:45 2011 +0200 still working on the introspection hkl/Makefile.am | 3 ++- hkl/hkl-type-builtins.c | 8 +++++--- hkl/hkl-type-builtins.h | 6 +++--- 3 files changed, 10 insertions(+), 7 deletions(-) commit 7ab17d328d6fb0765f4ae731451db0587e7d8f6b Author: Picca Frédéric-Emmanuel Date: Sun Oct 23 18:30:55 2011 +0200 now the introspection infrastructure is there. Documentation/sphinx/source/bindings.rst | 17 +++ Documentation/sphinx/source/index.rst | 1 + Documentation/sphinx/source/test.py | 221 +++++++++++++++++++++++++++++++ configure.ac | 17 +-- hkl/Makefile.am | 51 ++++--- hkl/hkl-detector.c | 38 ++++++ hkl/hkl-sample.h | 10 +- hkl/hkl-source.c | 77 ++++++++++- hkl/hkl-source.h | 6 +- hkl/hkl-type-builtins.c.template | 1 + hkl/hkl-types.c | 24 ++++ hkl/hkl-types.h | 6 + 12 files changed, 432 insertions(+), 37 deletions(-) commit baceddf86f4c2617cb39b43543e7a8ed6c3179b1 Author: Picca Frédéric-Emmanuel Date: Sun Oct 23 11:47:35 2011 +0200 remove the introspection subdirectory hkl/Makefile.am | 23 ++++++------ hkl/hkl-type-builtins.c | 81 ++++++++++++++++++++++++++++++++++++++++ hkl/hkl-type-builtins.c.template | 37 ++++++++++++++++++ hkl/hkl-type-builtins.h | 31 +++++++++++++++ hkl/hkl-type-builtins.h.template | 24 ++++++++++++ hkl/hkl-types.c | 70 ++++++++++++++++++++++++++++++++++ hkl/hkl-types.h | 46 +++++++++++++++++++++++ 7 files changed, 301 insertions(+), 11 deletions(-) commit feaae00ea53b5ac2ca880fc0d0999b27a0c3bdd1 Author: Picca Frédéric-Emmanuel Date: Sun Oct 23 10:36:02 2011 +0200 set up the introspection code configure.ac | 30 +++++++++++--- hkl/Makefile.am | 42 +++++++++++++++---- hkl/hkl-axis.c | 11 +++++ hkl/hkl-axis.h | 2 + hkl/hkl-detector-factory.c | 8 ++++ hkl/hkl-detector-factory.h | 7 +--- hkl/hkl-error.h | 2 +- hkl/hkl-geometry.h | 7 +--- hkl/hkl-matrix.c | 33 +++++++++++++++ hkl/hkl-matrix.h | 4 ++ hkl/hkl-pseudoaxis-common-hkl.c | 46 +++++++++++++++++++-- hkl/hkl-quaternion.c | 31 ++++++++++++++ hkl/hkl-quaternion.h | 4 ++ hkl/hkl-sample.h | 6 +-- hkl/hkl-unit.h | 6 +-- hkl/hkl-vector.c | 90 ++++++++++++++++++++++++++++------------- hkl/hkl-vector.h | 12 +++--- 17 files changed, 273 insertions(+), 68 deletions(-) commit de26b4afc3230599620f32eaa12b25e31b92f732 Author: Picca Frédéric-Emmanuel Date: Sat Oct 8 09:59:57 2011 +0200 start with only the hklVector object hkl/Makefile.am | 10 +++++++--- hkl/hkl-vector.c | 4 ++-- hkl/hkl-vector.h | 10 ++++++++-- 3 files changed, 17 insertions(+), 7 deletions(-) commit 2d8f78270ad4fb6e82556c6a9c4c90425c5535db Author: Picca Frédéric-Emmanuel Date: Sat Oct 1 17:47:36 2011 +0200 fixup! hkl/Makefile.am | 11 +++-------- hkl/hkl-pseudoaxis-common-hkl.c | 10 ++++++++++ 2 files changed, 13 insertions(+), 8 deletions(-) commit 606f224e9921d93c6db49663bdbdb49218e7f032 Author: Picca Frédéric-Emmanuel Date: Sat Oct 1 13:10:50 2011 +0200 add the infrastructure for the gobject-introspection. Makefile.am | 2 +- configure.ac | 5 ++++- hkl/Makefile.am | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) commit a672463176025aa0bedc4b3f27ba7cedae12ba44 Author: Frédéric-Emmanuel PICCA Date: Mon Nov 7 16:42:48 2011 +0100 MED2_2 : alpha axis -> beta axis Documentation/sphinx/source/diffractometers/med2_2.rst | 4 ++-- hkl/hkl-geometry-factory.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 7d748e752a99cc1934160783855394f84efc5695 Author: Picca Frédéric-Emmanuel Date: Sun Oct 23 10:47:51 2011 +0200 MED2_2 : pitch axis -> alpha axis Documentation/sphinx/source/diffractometers/med2_2.rst | 2 +- hkl/hkl-geometry-factory.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) commit f6e93f9fec1ef3584864bc48b00152b9f67e0826 Author: Picca Frédéric-Emmanuel Date: Wed Sep 28 20:48:24 2011 +0200 more traduction Documentation/sphinx/source/introduction.rst | 63 ++++++++++++++-------------- 1 file changed, 31 insertions(+), 32 deletions(-) commit a67c48018678b60970e4345b3daac13dd31bb488 Author: Frédéric-Emmanuel PICCA Date: Tue Oct 11 10:45:58 2011 +0200 * add the reflectivity mode to the MED2+2 .../sphinx/source/diffractometers/med2_2.rst | 8 ++++++ NEWS | 5 ++-- configure.ac | 2 +- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 32 ++++++++++++++++++++++ 4 files changed, 44 insertions(+), 3 deletions(-) commit 69c0694f2e299e9baaa2d71622b0380ece98864b Author: Frédéric-Emmanuel PICCA Date: Thu Oct 6 16:41:29 2011 +0200 the petra3 p09 EH2 phi axis orientation has changed. Documentation/sphinx/source/diffractometers/petra3.rst | 2 +- hkl/hkl-geometry-factory.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 881c7f37c09dc2fffc47b104e4efbf555333d67d Author: Frédéric-Emmanuel PICCA Date: Thu Oct 6 10:28:23 2011 +0200 prepare a rc1 and add a publish target to publish the documentation. Documentation/sphinx/Makefile.am | 3 +++ configure.ac | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) commit 386e83aacb039943a57f8819f07e5784e7886c5a Author: Frédéric-Emmanuel PICCA Date: Thu Oct 6 10:04:38 2011 +0200 add new mode to E6C psi_constant_horizontal and constant_mu_horizontal modes .../sphinx/source/diffractometers/e6c.rst | 22 ++++++++++++++++ NEWS | 2 ++ hkl/hkl-pseudoaxis-e6c-hkl.c | 29 ++++++++++++++++++++++ 3 files changed, 53 insertions(+) commit 9307cd5dcef1a9eb138b903ec6e8653cd4fab1fd Author: Frédéric-Emmanuel PICCA Date: Thu Oct 6 09:47:35 2011 +0200 add the petra3 p09 eh2 diffractometer .../sphinx/source/diffractometers/petra3.rst | 76 +++++++++++ Documentation/sphinx/source/index.rst | 1 + NEWS | 1 + hkl/Makefile.am | 2 + hkl/hkl-geometry-factory.c | 23 +++- hkl/hkl-geometry-factory.h | 3 +- hkl/hkl-geometry.h | 5 +- hkl/hkl-pseudoaxis-factory.c | 6 +- hkl/hkl-pseudoaxis-factory.h | 2 +- hkl/hkl-pseudoaxis-petra3-hkl.c | 151 +++++++++++++++++++++ hkl/hkl-pseudoaxis-petra3.h | 33 +++++ test/hkl-test-pseudoaxis.c | 11 +- 12 files changed, 307 insertions(+), 7 deletions(-) commit bb236948782454e3e3c437c4fae452fb026dab47 Author: Frédéric-Emmanuel PICCA Date: Wed Oct 5 10:29:21 2011 +0200 typo Documentation/figures/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d83aa96675ec60f6d851c75bb8d9ba29c02f2f1c Author: Picca Frédéric-Emmanuel Date: Sun Jul 24 14:28:23 2011 +0200 traduct into english part of the introduction.rst Documentation/sphinx/source/introduction.rst | 101 +++++++++++++-------------- 1 file changed, 49 insertions(+), 52 deletions(-) commit d11d8054dc33d946d4229044c3f769dd1ab60ec8 Author: Picca Frédéric-Emmanuel Date: Sun Jul 17 14:37:10 2011 +0200 add the eulerian to kappa conversion documentation Documentation/figures/Makefile.am | 11 +++- Documentation/figures/e2k_1.asy | 13 +++++ Documentation/figures/e2k_2.asy | 13 +++++ Documentation/figures/e2k_3.asy | 13 +++++ Documentation/figures/e2k_4.asy | 13 +++++ Documentation/figures/eulerians.asy | 36 +++++++++++++ Documentation/sphinx/Makefile.am | 3 +- Documentation/sphinx/source/index.rst | 1 + Documentation/sphinx/source/pseudo.rst | 94 ++++++++++++++++++++++++++++++++++ 9 files changed, 195 insertions(+), 2 deletions(-) commit fe5d7568f600ff56487418a4cdf858e4272a8c12 Author: Frédéric-Emmanuel PICCA Date: Thu Jul 7 14:24:17 2011 +0200 updating the pom.xml for the new version hkl/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 00cb4f82a36e5cfb12a6482f8986eddcfa57fb79 Author: Frédéric-Emmanuel PICCA Date: Thu Jul 7 14:18:53 2011 +0200 add the SOLEIL MED1+2 diffractometer .../sphinx/source/diffractometers/med1_2.rst | 45 ++++++++++++++++++++++ Documentation/sphinx/source/index.rst | 1 + hkl/hkl-geometry-factory.c | 19 +++++++++ hkl/hkl-geometry-factory.h | 1 + hkl/hkl-geometry.h | 3 +- hkl/hkl-pseudoaxis-factory.c | 4 ++ hkl/hkl-pseudoaxis-soleil-sixs-med.c | 23 +++++++++++ hkl/hkl-pseudoaxis-soleil-sixs-med.h | 1 + test/hkl-test-pseudoaxis.c | 11 +++++- 9 files changed, 106 insertions(+), 2 deletions(-) commit 2698d170d14c4628234e5e999814b953fc56b18b Author: Frédéric-Emmanuel PICCA Date: Thu Jul 7 14:12:38 2011 +0200 fix a bug in the documentation of the MED2+2 Documentation/sphinx/source/diffractometers/med2_2.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit df769a7799fdf197de00f68f55b1154b4e6f02a1 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 14 15:03:00 2011 +0200 add the k6c diffractometer figures also modify the axes's colors to be consistant from one diffractometer to the other. Documentation/figures/3S+1D.asy | 2 +- Documentation/figures/Makefile.am | 2 ++ Documentation/figures/k4cv.asy | 4 +-- Documentation/figures/k6c.asy | 35 ++++++++++++++++++++++ .../sphinx/source/diffractometers/k6c.rst | 6 ++++ 5 files changed, 46 insertions(+), 3 deletions(-) commit 91dfb7100dd156374256de98da3d181dce3c73fa Author: Picca Frédéric-Emmanuel Date: Sun Jun 12 16:45:57 2011 +0200 better crystal figure Documentation/figures/crystal.asy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit e1c88da60d42c6f96aff108bda7a23f252521510 Author: Picca Frédéric-Emmanuel Date: Sun Jun 12 16:18:30 2011 +0200 put the diffractometers pictures at the right place. Documentation/sphinx/source/development.rst | 4 ++-- Documentation/sphinx/source/diffractometers/e4cv.rst | 6 +++--- Documentation/sphinx/source/diffractometers/e6c.rst | 6 ++++++ Documentation/sphinx/source/diffractometers/k4cv.rst | 6 +++--- 4 files changed, 14 insertions(+), 8 deletions(-) commit 465d76476821edb8dc9179002d09cb96623a6206 Author: Picca Frédéric-Emmanuel Date: Sun Jun 12 15:30:09 2011 +0200 improve the documentation - document all the diffractomteres geometries and all pseudo axes - document the configure option for the GUI and the documentation Documentation/sphinx/Makefile.am | 8 +- Documentation/sphinx/source/development.rst | 37 ++- Documentation/sphinx/source/diffractometers.rst | 269 --------------------- .../sphinx/source/diffractometers/e4cv.rst | 108 +++++++++ .../sphinx/source/diffractometers/e6c.rst | 138 +++++++++++ .../sphinx/source/diffractometers/k4cv.rst | 127 ++++++++++ .../sphinx/source/diffractometers/k6c.rst | 160 ++++++++++++ .../sphinx/source/diffractometers/mars.rst | 101 ++++++++ .../sphinx/source/diffractometers/med2_2.rst | 46 ++++ .../sphinx/source/diffractometers/zaxis.rst | 55 +++++ Documentation/sphinx/source/index.rst | 8 +- Documentation/sphinx/source/introduction.rst | 47 ++-- 12 files changed, 800 insertions(+), 304 deletions(-) commit 0dea64b3b8457455d31072e0da218b1e4c679a13 Author: Picca Frédéric-Emmanuel Date: Sun Jun 12 11:24:23 2011 +0200 update the doc Documentation/sphinx/source/diffractometers.rst | 104 ++++++++++++------------ 1 file changed, 54 insertions(+), 50 deletions(-) commit 748b2e79c04863ae64b0e8d673f30ccb25acdb9e Author: Picca Frédéric-Emmanuel Date: Sun Jun 12 11:24:08 2011 +0200 add the "pitch" axis to the MED 2_2 diffractometer Documentation/sphinx/source/diffractometers.rst | 11 +++++++---- hkl/hkl-geometry-factory.c | 2 ++ 2 files changed, 9 insertions(+), 4 deletions(-) commit 53cd30679f2d71581a1da40405a1bb58e5e2bc76 Author: Picca Frédéric-Emmanuel Date: Sun Jun 12 11:00:16 2011 +0200 add the indent-c++ scripts for c++ files ;) and use it. gui/ghkl-callbacks.cpp | 12 +++---- gui/ghkl.cpp | 26 +++++++------- gui/modelcolumns.h | 98 +++++++++++++++++++++++++------------------------- gui/pseudoaxesframe.h | 26 +++++++------- scripts/clean-all | 3 +- scripts/indent-c++ | 13 +++++++ 6 files changed, 96 insertions(+), 82 deletions(-) commit 1ffd3c219f9ed10b9194eaa9039bd1b76bbe09fb Author: Picca Frédéric-Emmanuel Date: Sun Jun 12 10:47:54 2011 +0200 add a few scripts to clean the files and indent using emacs. - cleanfile was taken from the linux scripts directory, it removes the trailling spaces. - indent was adapted from a public domain scripts. it use for now emacs (it is my prefered editor) to indent the files. - clean-all use the two previous script to clean most of the C code for now. it would be nice to modify indent which for now depends on my .emacs file. it would be nice also to adapt the indent script for c++ files. hkl/hkl-axis.c | 2 +- hkl/hkl-axis.h | 8 +- hkl/hkl-detector-factory.c | 6 +- hkl/hkl-error.c | 8 +- hkl/hkl-error.h | 2 +- hkl/hkl-geometry-factory.c | 62 ++++++------ hkl/hkl-geometry-factory.h | 2 +- hkl/hkl-geometry.c | 22 ++--- hkl/hkl-lattice.c | 12 +-- hkl/hkl-list.h | 14 +-- hkl/hkl-macros.c | 2 +- hkl/hkl-macros.h | 22 ++--- hkl/hkl-matrix.c | 4 +- hkl/hkl-pseudoaxis-auto.c | 44 ++++----- hkl/hkl-pseudoaxis-common-eulerians.c | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 10 +- hkl/hkl-pseudoaxis-common-hkl.h | 12 +-- hkl/hkl-pseudoaxis-common-psi.c | 12 +-- hkl/hkl-pseudoaxis-common-q.c | 6 +- hkl/hkl-pseudoaxis-common.c | 2 +- hkl/hkl-pseudoaxis-k4cv-hkl.c | 2 +- hkl/hkl-pseudoaxis-k6c-hkl.c | 4 +- hkl/hkl-pseudoaxis.c | 6 +- hkl/hkl-quaternion.c | 2 +- hkl/hkl-sample.c | 8 +- hkl/hkl-source.c | 2 +- hkl/hkl-vector.c | 8 +- scripts/clean-all | 3 + scripts/cleanfile | 176 ++++++++++++++++++++++++++++++++++ scripts/indent | 13 +++ 30 files changed, 335 insertions(+), 143 deletions(-) commit 36c0c65936c81222272b8d9e0a1aa09287d0bd72 Author: Picca Frédéric-Emmanuel Date: Sun Jun 12 10:37:28 2011 +0200 reindent all files with the new script scripts/clean-all hkl/hkl-detector-factory.c | 6 +- hkl/hkl-geometry-factory.c | 66 ++++++++--------- hkl/hkl-geometry.c | 6 +- hkl/hkl-macros.h | 20 +++--- scripts/clean-all | 3 + scripts/cleanfile | 176 +++++++++++++++++++++++++++++++++++++++++++++ scripts/indent | 13 ++++ test/hkl/geometry-t.c | 12 ++-- test/hkl/matrix-t.c | 40 +++++------ test/hkl/parameter-t.c | 24 +++---- test/hkl/quaternion-t.c | 4 +- test/hkl/sample-t.c | 16 ++--- 12 files changed, 289 insertions(+), 97 deletions(-) commit 8e5dc042164f977407321d8ac1192d45ad16a901 Author: Picca Frédéric-Emmanuel Date: Sat Jun 11 22:48:07 2011 +0200 remove plenty of trailling space with the linux cleanfile script gui/hkl-gui.cpp | 18 +++--- gui/hkl3d/GL_ShapeDrawer.cpp | 54 ++++++++--------- gui/hkl3d/GL_ShapeDrawer.h | 9 ++- gui/hkl3d/hkl3d-gui-gl.c | 4 +- gui/hkl3d/hkl3d-gui-model.cpp | 50 ++++++++-------- gui/hkl3d/hkl3d-gui-model.h | 6 +- gui/hkl3d/hkl3d-gui-scene.cpp | 14 ++--- gui/hkl3d/hkl3d-gui-scene.h | 2 +- gui/hkl3d/hkl3d-gui-view.cpp | 10 ++-- gui/hkl3d/hkl3d-gui-view.h | 2 +- gui/hkl3d/texture.c | 1 - gui/hkl3d/trackball.c | 1 - gui/hkl3d/trackball.h | 1 - hkl/hkl-axis.c | 2 +- hkl/hkl-axis.h | 8 +-- hkl/hkl-error.c | 8 +-- hkl/hkl-error.h | 2 +- hkl/hkl-geometry-factory.c | 2 +- hkl/hkl-geometry-factory.h | 2 +- hkl/hkl-geometry.c | 10 ++-- hkl/hkl-geometry.h | 2 +- hkl/hkl-lattice.c | 10 ++-- hkl/hkl-macros.c | 2 +- hkl/hkl-macros.h | 2 +- hkl/hkl-matrix.c | 4 +- hkl/hkl-pseudoaxis-auto.c | 44 +++++++------- hkl/hkl-pseudoaxis-common-eulerians.c | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 10 ++-- hkl/hkl-pseudoaxis-common-hkl.h | 12 ++-- hkl/hkl-pseudoaxis-common-psi.c | 12 ++-- hkl/hkl-pseudoaxis-common-q.c | 4 +- hkl/hkl-pseudoaxis-common.c | 2 +- hkl/hkl-pseudoaxis-k4cv-hkl.c | 2 +- hkl/hkl-pseudoaxis-k6c-hkl.c | 4 +- hkl/hkl-quaternion.c | 2 +- hkl/hkl-sample.c | 8 +-- hkl/hkl-source.c | 2 +- hkl/hkl-unit.c | 4 +- hkl/hkl-vector.c | 4 +- hkl3d/hkl3d.cpp | 106 +++++++++++++++++----------------- hkl3d/hkl3d.h | 1 - test/hkl/geometry-t.c | 2 +- test/hkl/pseudoaxis-e4ch-t.c | 12 ++-- test/hkl/pseudoaxis-e4cv-t.c | 14 ++--- test/hkl/pseudoaxis-e6c-t.c | 4 +- test/hkl/pseudoaxis-k4cv-t.c | 4 +- test/hkl/pseudoaxis-k6c-t.c | 10 ++-- test/hkl/pseudoaxis-t.c | 4 +- test/hkl/unit-t.c | 2 +- test/hkl/vector-t.c | 2 +- test/hkl3d/test-t.c | 4 +- 51 files changed, 248 insertions(+), 255 deletions(-) commit eeea735175081608f5b7984f855d06b68f988b93 Author: Picca Frédéric-Emmanuel Date: Sat Jun 11 17:15:13 2011 +0200 rename HklPseudoAxisMode::axes_names -> axes. hkl/hkl-pseudoaxis-common-hkl.c | 6 +++--- hkl/hkl-pseudoaxis.c | 18 +++++++++--------- hkl/hkl-pseudoaxis.h | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) commit 8c534f8b3f67bd1add0aa3cc44c986b60df1381d Author: Picca Frédéric-Emmanuel Date: Sat Jun 11 15:39:33 2011 +0200 typo hkl/hkl-pseudoaxis-common-hkl.c | 1 + 1 file changed, 1 insertion(+) commit b59989e090c9560662c5d97b1a26cb4bf52f9dff Author: Picca Frédéric-Emmanuel Date: Sat Jun 11 15:39:24 2011 +0200 refactor a part of the HklPseudoAxisEngineMode I decided to inspire myself from this article : http://lwn.net/Articles/444910/ configure.ac | 2 +- hkl/Makefile.am | 2 +- hkl/hkl-pseudoaxis-common-eulerians.c | 9 +++-- hkl/hkl-pseudoaxis-common-hkl.h | 17 ++++++++++ hkl/hkl-pseudoaxis-common-psi.c | 10 ++++-- hkl/hkl-pseudoaxis-common-q.c | 18 ++++++---- hkl/hkl-pseudoaxis-e4c-hkl.c | 24 ++++---------- hkl/hkl-pseudoaxis-e6c-hkl.c | 44 +++++++------------------ hkl/hkl-pseudoaxis-k4cv-hkl.c | 26 ++++----------- hkl/hkl-pseudoaxis-k6c-hkl.c | 52 ++++++++--------------------- hkl/hkl-pseudoaxis-soleil-sixs-med.c | 4 +-- hkl/hkl-pseudoaxis-zaxis-hkl.c | 8 ++--- hkl/hkl-pseudoaxis.c | 62 ++++++++++++++++------------------- hkl/hkl-pseudoaxis.h | 42 +++++++++++++++--------- 14 files changed, 137 insertions(+), 183 deletions(-) commit bc0c76ce06686fc241af6353c1bd43f077cf8011 Author: Frédéric-Emmanuel PICCA Date: Fri Jun 10 14:55:38 2011 +0200 put the diffractometers figures at the right place. Documentation/sphinx/source/diffractometers.rst | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit ca777e0730abee3e6e39bac6e1904bacbc0a0678 Author: Frédéric-Emmanuel PICCA Date: Fri Jun 10 14:42:43 2011 +0200 add the k4cv figure Documentation/figures/Makefile.am | 2 + Documentation/figures/diffractometer.asy | 77 ++++++++++++++++++++++++++------ Documentation/figures/k4cv.asy | 36 +++++++++++++++ 3 files changed, 102 insertions(+), 13 deletions(-) commit a4d3afde63abf984647bef6748542e59b2b6f78e Merge: 31f04fb7 e771ad5e Author: Frédéric-Emmanuel PICCA Date: Thu Jun 9 17:43:24 2011 +0200 Merge branch 'maint' into next Conflicts: Documentation/Makefile.am Documentation/figures/3S+1D.asy Documentation/figures/4S+2D.asy Documentation/figures/Makefile.am Documentation/figures/diffractometer.asy configure.ac commit e771ad5e8de3eaa5cee35e52a1d68baa6f78fa0d Author: Frédéric-Emmanuel PICCA Date: Thu Jun 9 16:38:46 2011 +0200 no more povray figures. Documentation/figures/4S+2D_reciprocal.asy | 58 +++++++++++ Documentation/figures/4S+2D_reciprocal2.asy | 50 ++++++++++ Documentation/figures/4S+2D_reciprocal3.asy | 48 +++++++++ Documentation/figures/4S+2D_reciprocal4.asy | 54 +++++++++++ Documentation/figures/4S+2D_reciproque.pov | 101 ------------------- Documentation/figures/4S+2D_reciproque2.pov | 100 ------------------- Documentation/figures/4S+2D_reciproque3.pov | 112 --------------------- Documentation/figures/4S+2D_reciproque4.pov | 127 ------------------------ Documentation/figures/Makefile.am | 32 +++--- Documentation/figures/arrows.inc | 139 --------------------------- Documentation/figures/bravais.inc | 35 ------- Documentation/figures/cristal.ini | 8 -- Documentation/sphinx/source/introduction.rst | 10 +- configure.ac | 6 -- 14 files changed, 228 insertions(+), 652 deletions(-) commit 81721bafef1e9170b5a211564888e0c747e076a7 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 7 15:32:27 2011 +0200 replace the cristal.pov with crystal.asy Documentation/figures/Makefile.am | 4 +-- Documentation/figures/cristal.pov | 72 --------------------------------------- Documentation/figures/crystal.asy | 52 ++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 74 deletions(-) commit c451c466b477da5d823a25f98f89044a949e51da Author: Frédéric-Emmanuel PICCA Date: Tue Jun 7 14:48:42 2011 +0200 remove useless files Documentation/figures/Makefile.am | 2 -- Documentation/figures/test.pov | 31 ------------------------------- 2 files changed, 33 deletions(-) commit 01f4f42052325703565c861f740246aa5046344d Author: Frédéric-Emmanuel PICCA Date: Tue Jun 7 14:44:23 2011 +0200 add the B_b3_y.asy file Documentation/figures/B_b3_y.asy | 29 ++++++++++++++++ Documentation/figures/B_b3_y.pov | 72 --------------------------------------- Documentation/figures/Makefile.am | 5 +-- 3 files changed, 32 insertions(+), 74 deletions(-) commit e2b421118789ae80c4ce884d5b5a1ca29e01c0d6 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 7 14:18:45 2011 +0200 remove useless povray files Documentation/figures/3S+1D.pov | 164 --------------------------------- Documentation/figures/4S+2D.pov | 187 -------------------------------------- Documentation/figures/Makefile.am | 7 +- 3 files changed, 3 insertions(+), 355 deletions(-) commit 991a69702399dc124e19f0b9ee6301fb7fa05f28 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 7 13:51:51 2011 +0200 now the carrows in the figures are ok Documentation/figures/3S+1D.asy | 30 ++++--- Documentation/figures/4S+2D.asy | 26 +++--- Documentation/figures/diffractometer.asy | 135 +++++++++++-------------------- 3 files changed, 78 insertions(+), 113 deletions(-) commit 245d6389417c346b329aa161c15364b49a4c8d65 Author: Picca Frédéric-Emmanuel Date: Sun Jun 5 21:54:10 2011 +0200 add the arrows to the asymptote figures. Documentation/figures/diffractometer.asy | 54 +++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) commit 98f97399c71aff1fd13faa3b442337ae3091003c Author: Picca Frédéric-Emmanuel Date: Thu Jun 2 16:31:06 2011 +0200 distribute also the sphinx source files. Documentation/sphinx/Makefile.am | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit b2eb707df93ebf662b3eaaeacd8391bf45dc08fa Author: Picca Frédéric-Emmanuel Date: Thu Jun 2 16:16:02 2011 +0200 backport the figures from the next branch Documentation/Makefile.am | 2 +- Documentation/figures/3S+1D.asy | 30 +++++ Documentation/figures/3S+1D.pov | 164 ++++++++++++++++++++++++ Documentation/figures/4S+2D.asy | 30 +++++ Documentation/figures/4S+2D.pov | 187 ++++++++++++++++++++++++++++ Documentation/figures/4S+2D_reciproque.pov | 101 +++++++++++++++ Documentation/figures/4S+2D_reciproque2.pov | 100 +++++++++++++++ Documentation/figures/4S+2D_reciproque3.pov | 112 +++++++++++++++++ Documentation/figures/4S+2D_reciproque4.pov | 127 +++++++++++++++++++ Documentation/figures/B_a.asy | 26 ++++ Documentation/figures/B_b.asy | 23 ++++ Documentation/figures/B_b3_y.pov | 72 +++++++++++ Documentation/figures/Makefile.am | 42 +++++++ Documentation/figures/arrows.inc | 139 +++++++++++++++++++++ Documentation/figures/bravais.inc | 35 ++++++ Documentation/figures/cristal.ini | 8 ++ Documentation/figures/cristal.pov | 72 +++++++++++ Documentation/figures/diffractometer.asy | 120 ++++++++++++++++++ Documentation/figures/test.pov | 31 +++++ Documentation/figures/zaxis.asy | 71 +++++++++++ configure.ac | 13 ++ 21 files changed, 1504 insertions(+), 1 deletion(-) commit fd31a4b7de38b3f41df6bef94d1e5c9f0db028b0 Author: Picca Frédéric-Emmanuel Date: Tue May 31 16:47:31 2011 +0200 update the news file for the sphinx documentation NEWS | 1 + 1 file changed, 1 insertion(+) commit 6d0742d381b5aa143055633bfc238429fb7f5152 Author: Picca Frédéric-Emmanuel Date: Tue May 31 16:03:40 2011 +0200 add the first version of the sphinx documentation at the end it will remain only two systems - api using gtk-doc - html/latex using sphinx Documentation/Makefile.am | 2 +- Documentation/sphinx/Makefile.am | 1 + Documentation/sphinx/source/conf.py.in | 216 +++++++ Documentation/sphinx/source/development.rst | 456 +++++++++++++ Documentation/sphinx/source/diffractometers.rst | 244 +++++++ Documentation/sphinx/source/index.rst | 26 + Documentation/sphinx/source/introduction.rst | 821 ++++++++++++++++++++++++ configure.ac | 2 + sphinx.make | 130 ++++ 9 files changed, 1897 insertions(+), 1 deletion(-) commit 31f04fb7386f340c276f29152460dcbe3590a0c8 Merge: ac1155fa 19fea118 Author: Frédéric-Emmanuel PICCA Date: Tue May 10 11:24:35 2011 +0200 Merge branch 'maint' into next commit 19fea1186e97fa081e427217fcf7238f31e110c2 Author: Frédéric-Emmanuel PICCA Date: Tue May 10 11:24:26 2011 +0200 update the NEWS file for the MARS diffractometer NEWS | 1 + 1 file changed, 1 insertion(+) commit ac1155fac104a7152cfb1f7579eeb72633783624 Merge: 75c01548 bd8933b8 Author: Frédéric-Emmanuel PICCA Date: Tue May 10 11:23:16 2011 +0200 Merge branch 'maint' into next Conflicts: Documentation/hkl.texi hkl/hkl-geometry-factory.c hkl/hkl-geometry-factory.h hkl/hkl-geometry.h hkl/hkl-pseudoaxis-factory.c commit bd8933b8f5f5f45d856c7fee812207931a1fa392 Author: Frédéric-Emmanuel PICCA Date: Tue May 10 11:06:28 2011 +0200 * backport the SOLEIL MARS beamline diffractometer from the next branch Conflicts: Documentation/hkl.texi hkl/hkl-geometry-factory.h hkl/hkl-geometry.h hkl/hkl-pseudoaxis-factory.c Documentation/hkl.texi | 30 ++++++++++++++++++++++++------ hkl/hkl-geometry-factory.c | 18 ++++++++++++++++++ hkl/hkl-geometry-factory.h | 1 + hkl/hkl-geometry.h | 3 ++- hkl/hkl-pseudoaxis-factory.c | 1 + test/hkl-test-pseudoaxis.c | 9 +++++++++ 6 files changed, 55 insertions(+), 7 deletions(-) commit 75c01548f4e66cb47fca070231e108b081c4bf26 Author: Frédéric-Emmanuel PICCA Date: Mon May 9 16:33:58 2011 +0200 * more statistic in the bench test. test/hkl/bench-t.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) commit 8688c93affc233430accc9e040c91980f7207354 Author: Picca Frédéric-Emmanuel Date: Sun May 1 19:53:40 2011 +0200 remove useless files hkl3d/bullet/src/BulletSoftBody/btSoftBody.cpp | 2931 -------------------- hkl3d/bullet/src/BulletSoftBody/btSoftBody.h | 891 ------ .../btSoftBodyConcaveCollisionAlgorithm.cpp | 368 --- .../btSoftBodyConcaveCollisionAlgorithm.h | 153 - .../src/BulletSoftBody/btSoftBodyHelpers.cpp | 1019 ------- .../bullet/src/BulletSoftBody/btSoftBodyHelpers.h | 143 - .../src/BulletSoftBody/btSoftBodyInternals.h | 931 ------- .../btSoftBodyRigidBodyCollisionConfiguration.cpp | 134 - .../btSoftBodyRigidBodyCollisionConfiguration.h | 48 - .../btSoftRigidCollisionAlgorithm.cpp | 82 - .../BulletSoftBody/btSoftRigidCollisionAlgorithm.h | 75 - .../BulletSoftBody/btSoftRigidDynamicsWorld.cpp | 292 -- .../src/BulletSoftBody/btSoftRigidDynamicsWorld.h | 97 - .../btSoftSoftCollisionAlgorithm.cpp | 46 - .../BulletSoftBody/btSoftSoftCollisionAlgorithm.h | 69 - hkl3d/bullet/src/BulletSoftBody/btSparseSDF.h | 306 -- hkl3d/bullet/src/Makefile.am | 22 +- hkl3d/bullet/src/MiniCL/cl.h | 865 ------ hkl3d/bullet/src/MiniCL/cl_MiniCL_Defs.h | 265 -- hkl3d/bullet/src/MiniCL/cl_gl.h | 113 - hkl3d/bullet/src/MiniCL/cl_platform.h | 254 -- 21 files changed, 2 insertions(+), 9102 deletions(-) commit 5347e4ba57784be8d9024aa0337c4041b7c589d1 Merge: 41c90a4c 2165cc97 Author: Picca Frédéric-Emmanuel Date: Sun May 1 18:41:24 2011 +0200 Merge branch 'maint' into next Conflicts: Documentation/hkl.texi NEWS configure.ac hkl/hkl-geometry-factory.c hkl/hkl-geometry-factory.h hkl/hkl-geometry.c hkl/hkl-geometry.h hkl/hkl-pseudoaxis-common-eulerians.c hkl/hkl-pseudoaxis-common-hkl.c hkl/hkl-pseudoaxis-common-q.c hkl/hkl-sample.c hkl/hkl-vector.c hkl/pom.xml test/hkl/pseudoaxis-t.c commit 41c90a4c60c43787b7c185f1f589116055670ae9 Author: Picca Frédéric-Emmanuel Date: Sun May 1 17:13:10 2011 +0200 * remove the bullet soft body library we are not using this part of bullet, so it reduce a bit the compiling time. .../src/BulletSoftBody/btDefaultSoftBodySolver.cpp | 151 - .../src/BulletSoftBody/btDefaultSoftBodySolver.h | 63 - hkl3d/bullet/src/BulletSoftBody/btSoftBody.cpp | 3409 -------------------- hkl3d/bullet/src/BulletSoftBody/btSoftBody.h | 978 ------ .../btSoftBodyConcaveCollisionAlgorithm.cpp | 368 --- .../btSoftBodyConcaveCollisionAlgorithm.h | 153 - hkl3d/bullet/src/BulletSoftBody/btSoftBodyData.h | 217 -- .../src/BulletSoftBody/btSoftBodyHelpers.cpp | 1055 ------ .../bullet/src/BulletSoftBody/btSoftBodyHelpers.h | 143 - .../src/BulletSoftBody/btSoftBodyInternals.h | 916 ------ .../btSoftBodyRigidBodyCollisionConfiguration.cpp | 134 - .../btSoftBodyRigidBodyCollisionConfiguration.h | 48 - .../BulletSoftBody/btSoftBodySolverVertexBuffer.h | 165 - .../bullet/src/BulletSoftBody/btSoftBodySolvers.h | 154 - .../btSoftRigidCollisionAlgorithm.cpp | 84 - .../BulletSoftBody/btSoftRigidCollisionAlgorithm.h | 75 - .../BulletSoftBody/btSoftRigidDynamicsWorld.cpp | 358 -- .../src/BulletSoftBody/btSoftRigidDynamicsWorld.h | 107 - .../btSoftSoftCollisionAlgorithm.cpp | 47 - .../BulletSoftBody/btSoftSoftCollisionAlgorithm.h | 69 - hkl3d/bullet/src/BulletSoftBody/btSparseSDF.h | 306 -- hkl3d/bullet/src/Makefile.am | 27 +- 22 files changed, 2 insertions(+), 9025 deletions(-) commit ab650f37926fad535fb95c691f16f0059fbe396b Author: Picca Frédéric-Emmanuel Date: Sat Apr 30 22:15:14 2011 +0200 * remove useless files hkl3d/bullet/src/MiniCL/MiniCL.cpp | 720 ------------------ hkl3d/bullet/src/MiniCL/MiniCLTask/MiniCLTask.cpp | 74 -- hkl3d/bullet/src/MiniCL/MiniCLTask/MiniCLTask.h | 62 -- hkl3d/bullet/src/MiniCL/MiniCLTaskScheduler.cpp | 519 ------------- hkl3d/bullet/src/MiniCL/MiniCLTaskScheduler.h | 194 ----- hkl3d/bullet/src/MiniCL/cl.h | 867 ---------------------- hkl3d/bullet/src/MiniCL/cl_MiniCL_Defs.h | 329 -------- hkl3d/bullet/src/MiniCL/cl_gl.h | 113 --- hkl3d/bullet/src/MiniCL/cl_platform.h | 254 ------- 9 files changed, 3132 deletions(-) commit fd1cc1f58d59dd6049ee305a40feb3f7ee300049 Author: Picca Frédéric-Emmanuel Date: Sat Apr 30 22:14:07 2011 +0200 * import bullet 2.78 hkl3d/bullet/src/Bullet-C-Api.h | 8 +- .../BroadphaseCollision/btAxisSweep3.h | 4 +- .../BroadphaseCollision/btBroadphaseInterface.h | 6 +- .../BroadphaseCollision/btBroadphaseProxy.h | 6 +- .../BroadphaseCollision/btCollisionAlgorithm.h | 10 +- .../BulletCollision/BroadphaseCollision/btDbvt.cpp | 2 +- .../BroadphaseCollision/btDispatcher.h | 14 +- .../BroadphaseCollision/btOverlappingPairCache.h | 6 +- .../BroadphaseCollision/btQuantizedBvh.h | 6 +- .../BroadphaseCollision/btSimpleBroadphase.h | 6 +- .../CollisionDispatch/SphereTriangleDetector.cpp | 62 +- .../CollisionDispatch/SphereTriangleDetector.h | 6 +- .../btBox2dBox2dCollisionAlgorithm.cpp | 870 +++---- .../btBox2dBox2dCollisionAlgorithm.h | 132 +- .../CollisionDispatch/btBoxBoxCollisionAlgorithm.h | 6 +- .../CollisionDispatch/btBoxBoxDetector.cpp | 14 + .../CollisionDispatch/btBoxBoxDetector.h | 4 +- .../CollisionDispatch/btCollisionConfiguration.h | 1 + .../CollisionDispatch/btCollisionCreateFunc.h | 6 +- .../CollisionDispatch/btCollisionDispatcher.cpp | 15 +- .../CollisionDispatch/btCollisionDispatcher.h | 29 +- .../CollisionDispatch/btCollisionObject.cpp | 1 + .../CollisionDispatch/btCollisionObject.h | 30 +- .../CollisionDispatch/btCollisionWorld.cpp | 455 ++-- .../CollisionDispatch/btCollisionWorld.h | 45 +- .../btCompoundCollisionAlgorithm.cpp | 32 +- .../btCompoundCollisionAlgorithm.h | 6 +- .../btConvex2dConvex2dAlgorithm.cpp | 494 ++-- .../btConvex2dConvex2dAlgorithm.h | 190 +- .../btConvexConcaveCollisionAlgorithm.cpp | 15 +- .../btConvexConcaveCollisionAlgorithm.h | 6 +- .../CollisionDispatch/btConvexConvexAlgorithm.cpp | 109 +- .../CollisionDispatch/btConvexConvexAlgorithm.h | 6 +- .../btConvexPlaneCollisionAlgorithm.h | 6 +- .../CollisionDispatch/btEmptyCollisionAlgorithm.h | 6 +- .../CollisionDispatch/btGhostObject.h | 2 +- .../CollisionDispatch/btInternalEdgeUtility.cpp | 1614 ++++++------ .../CollisionDispatch/btInternalEdgeUtility.h | 92 +- .../CollisionDispatch/btManifoldResult.cpp | 5 +- .../CollisionDispatch/btManifoldResult.h | 6 +- .../btSimulationIslandManager.cpp | 83 +- .../CollisionDispatch/btSimulationIslandManager.h | 6 +- .../btSphereBoxCollisionAlgorithm.h | 6 +- .../btSphereSphereCollisionAlgorithm.h | 6 +- .../btSphereTriangleCollisionAlgorithm.h | 6 +- .../CollisionDispatch/btUnionFind.cpp | 3 +- .../CollisionDispatch/btUnionFind.h | 11 +- .../CollisionShapes/btBox2dShape.cpp | 84 +- .../BulletCollision/CollisionShapes/btBox2dShape.h | 726 +++--- .../BulletCollision/CollisionShapes/btBoxShape.h | 8 +- .../CollisionShapes/btBvhTriangleMeshShape.cpp | 4 +- .../CollisionShapes/btBvhTriangleMeshShape.h | 8 +- .../CollisionShapes/btCollisionMargin.h | 6 +- .../CollisionShapes/btCollisionShape.h | 6 +- .../CollisionShapes/btCompoundShape.cpp | 41 +- .../CollisionShapes/btCompoundShape.h | 18 +- .../CollisionShapes/btConcaveShape.h | 6 +- .../CollisionShapes/btConeShape.cpp | 10 + .../BulletCollision/CollisionShapes/btConeShape.h | 9 +- .../CollisionShapes/btConvex2dShape.cpp | 184 +- .../CollisionShapes/btConvex2dShape.h | 160 +- .../CollisionShapes/btConvexHullShape.cpp | 14 +- .../CollisionShapes/btConvexHullShape.h | 6 +- .../CollisionShapes/btConvexPolyhedron.cpp | 185 ++ .../CollisionShapes/btConvexPolyhedron.h | 54 + .../CollisionShapes/btConvexShape.h | 6 +- .../CollisionShapes/btConvexTriangleMeshShape.h | 6 +- .../CollisionShapes/btCylinderShape.cpp | 61 +- .../CollisionShapes/btCylinderShape.h | 22 +- .../BulletCollision/CollisionShapes/btEmptyShape.h | 6 +- .../CollisionShapes/btHeightfieldTerrainShape.h | 6 +- .../BulletCollision/CollisionShapes/btMaterial.h | 6 +- .../CollisionShapes/btMinkowskiSumShape.h | 6 +- .../CollisionShapes/btMultiSphereShape.h | 6 +- .../btMultimaterialTriangleMeshShape.h | 7 +- .../CollisionShapes/btOptimizedBvh.h | 6 +- .../CollisionShapes/btPolyhedralConvexShape.cpp | 147 +- .../CollisionShapes/btPolyhedralConvexShape.h | 20 +- .../btScaledBvhTriangleMeshShape.cpp | 2 + .../CollisionShapes/btScaledBvhTriangleMeshShape.h | 37 +- .../BulletCollision/CollisionShapes/btShapeHull.h | 6 +- .../CollisionShapes/btSphereShape.h | 6 +- .../CollisionShapes/btStaticPlaneShape.h | 6 +- .../CollisionShapes/btStridingMeshInterface.cpp | 48 + .../CollisionShapes/btStridingMeshInterface.h | 14 +- .../CollisionShapes/btTetrahedronShape.h | 6 +- .../CollisionShapes/btTriangleCallback.h | 6 +- .../CollisionShapes/btTriangleInfoMap.h | 478 ++-- .../CollisionShapes/btTriangleMesh.h | 6 +- .../CollisionShapes/btTriangleMeshShape.h | 6 +- .../CollisionShapes/btTriangleShape.h | 6 +- .../CollisionShapes/btUniformScalingShape.cpp | 69 +- .../src/BulletCollision/Gimpact/btBoxCollision.h | 2 +- .../src/BulletCollision/Gimpact/btClipPolygon.h | 2 +- .../BulletCollision/Gimpact/btContactProcessing.h | 2 +- .../src/BulletCollision/Gimpact/btGImpactBvh.cpp | 2 +- .../src/BulletCollision/Gimpact/btGImpactBvh.h | 6 +- .../Gimpact/btGImpactCollisionAlgorithm.h | 12 +- .../BulletCollision/Gimpact/btGImpactMassUtil.h | 2 +- .../Gimpact/btGImpactQuantizedBvh.cpp | 2 +- .../Gimpact/btGImpactQuantizedBvh.h | 6 +- .../Gimpact/btGenericPoolAllocator.cpp | 2 +- .../Gimpact/btGenericPoolAllocator.h | 2 +- .../BulletCollision/Gimpact/btGeometryOperations.h | 2 +- .../src/BulletCollision/Gimpact/btQuantization.h | 8 +- .../BulletCollision/Gimpact/btTriangleShapeEx.cpp | 2 +- .../BulletCollision/Gimpact/btTriangleShapeEx.h | 8 +- .../bullet/src/BulletCollision/Gimpact/gim_array.h | 2 +- .../Gimpact/gim_basic_geometry_operations.h | 2 +- .../src/BulletCollision/Gimpact/gim_bitset.h | 2 +- .../BulletCollision/Gimpact/gim_box_collision.h | 2 +- .../src/BulletCollision/Gimpact/gim_box_set.h | 2 +- .../src/BulletCollision/Gimpact/gim_clip_polygon.h | 2 +- .../src/BulletCollision/Gimpact/gim_contact.h | 2 +- .../src/BulletCollision/Gimpact/gim_geom_types.h | 2 +- .../src/BulletCollision/Gimpact/gim_geometry.h | 2 +- .../src/BulletCollision/Gimpact/gim_hash_table.h | 2 +- .../src/BulletCollision/Gimpact/gim_linear_math.h | 2 +- .../bullet/src/BulletCollision/Gimpact/gim_math.h | 2 +- .../src/BulletCollision/Gimpact/gim_memory.h | 2 +- .../src/BulletCollision/Gimpact/gim_radixsort.h | 2 +- .../BulletCollision/Gimpact/gim_tri_collision.cpp | 2 +- .../BulletCollision/Gimpact/gim_tri_collision.h | 2 +- .../btContinuousConvexCollision.cpp | 135 +- .../btContinuousConvexCollision.h | 15 +- .../NarrowPhaseCollision/btConvexCast.h | 8 +- .../btConvexPenetrationDepthSolver.h | 6 +- .../btDiscreteCollisionDetectorInterface.h | 8 +- .../NarrowPhaseCollision/btGjkConvexCast.h | 6 +- .../NarrowPhaseCollision/btGjkEpa2.h | 8 +- .../NarrowPhaseCollision/btGjkPairDetector.cpp | 9 +- .../NarrowPhaseCollision/btGjkPairDetector.h | 6 +- .../NarrowPhaseCollision/btManifoldPoint.h | 32 +- .../btMinkowskiPenetrationDepthSolver.h | 6 +- .../NarrowPhaseCollision/btPersistentManifold.h | 48 +- .../NarrowPhaseCollision/btPointCollector.h | 6 +- .../btPolyhedralContactClipping.cpp | 360 +++ .../btPolyhedralContactClipping.h | 46 + .../NarrowPhaseCollision/btRaycastCallback.cpp | 6 +- .../NarrowPhaseCollision/btRaycastCallback.h | 9 +- .../btSimplexSolverInterface.h | 6 +- .../NarrowPhaseCollision/btSubSimplexConvexCast.h | 6 +- .../NarrowPhaseCollision/btVoronoiSimplexSolver.h | 7 +- .../Character/btCharacterControllerInterface.h | 7 +- .../Character/btKinematicCharacterController.cpp | 166 +- .../Character/btKinematicCharacterController.h | 31 +- .../ConstraintSolver/btConeTwistConstraint.cpp | 10 + .../ConstraintSolver/btConeTwistConstraint.h | 22 +- .../ConstraintSolver/btConstraintSolver.h | 6 +- .../ConstraintSolver/btContactConstraint.cpp | 50 +- .../ConstraintSolver/btContactConstraint.h | 9 +- .../ConstraintSolver/btContactSolverInfo.h | 8 +- .../ConstraintSolver/btGeneric6DofConstraint.cpp | 60 +- .../ConstraintSolver/btGeneric6DofConstraint.h | 40 +- .../btGeneric6DofSpringConstraint.cpp | 318 +-- .../btGeneric6DofSpringConstraint.h | 151 +- .../ConstraintSolver/btHinge2Constraint.cpp | 132 +- .../ConstraintSolver/btHinge2Constraint.h | 116 +- .../ConstraintSolver/btHingeConstraint.cpp | 153 +- .../ConstraintSolver/btHingeConstraint.h | 91 +- .../ConstraintSolver/btJacobianEntry.h | 6 +- .../ConstraintSolver/btPoint2PointConstraint.cpp | 1 + .../ConstraintSolver/btPoint2PointConstraint.h | 6 +- .../btSequentialImpulseConstraintSolver.cpp | 111 +- .../btSequentialImpulseConstraintSolver.h | 14 +- .../ConstraintSolver/btSliderConstraint.cpp | 0 .../ConstraintSolver/btSliderConstraint.h | 20 +- .../ConstraintSolver/btSolve2LinearConstraint.h | 6 +- .../ConstraintSolver/btSolverConstraint.h | 4 +- .../ConstraintSolver/btTypedConstraint.cpp | 82 +- .../ConstraintSolver/btTypedConstraint.h | 168 +- .../ConstraintSolver/btUniversalConstraint.cpp | 150 +- .../ConstraintSolver/btUniversalConstraint.h | 122 +- .../BulletDynamics/Dynamics/btActionInterface.h | 96 +- .../Dynamics/btDiscreteDynamicsWorld.cpp | 205 +- .../Dynamics/btDiscreteDynamicsWorld.h | 2 + .../src/BulletDynamics/Dynamics/btDynamicsWorld.h | 5 +- .../src/BulletDynamics/Dynamics/btRigidBody.cpp | 20 +- .../src/BulletDynamics/Dynamics/btRigidBody.h | 43 +- .../Dynamics/btSimpleDynamicsWorld.cpp | 29 +- .../Dynamics/btSimpleDynamicsWorld.h | 8 + .../BulletDynamics/Vehicle/btRaycastVehicle.cpp | 13 + .../src/BulletDynamics/Vehicle/btRaycastVehicle.h | 472 ++-- .../BulletDynamics/Vehicle/btVehicleRaycaster.h | 8 +- .../src/BulletDynamics/Vehicle/btWheelInfo.h | 6 +- .../GpuSoftBodySolvers/CPU/btSoftBodySolverData.h | 744 ++++++ .../CPU/btSoftBodySolver_CPU.cpp | 979 +++++++ .../GpuSoftBodySolvers/CPU/btSoftBodySolver_CPU.h | 370 +++ hkl3d/bullet/src/BulletMultiThreaded/HeapManager.h | 117 + .../src/BulletMultiThreaded/PlatformDefinitions.h | 39 +- .../src/BulletMultiThreaded/PosixThreadSupport.cpp | 164 +- .../src/BulletMultiThreaded/PosixThreadSupport.h | 28 +- .../src/BulletMultiThreaded/PpuAddressSpace.h | 35 +- .../SequentialThreadSupport.cpp | 76 + .../BulletMultiThreaded/SequentialThreadSupport.h | 10 +- .../SpuCollisionObjectWrapper.h | 6 +- .../SpuCollisionTaskProcess.cpp | 1 - .../BulletMultiThreaded/SpuCollisionTaskProcess.h | 6 +- .../SpuContactManifoldCollisionAlgorithm.h | 6 +- .../src/BulletMultiThreaded/SpuDoubleBuffer.h | 20 +- .../bullet/src/BulletMultiThreaded/SpuFakeDma.cpp | 10 +- hkl3d/bullet/src/BulletMultiThreaded/SpuFakeDma.h | 270 +- .../SpuGatheringCollisionDispatcher.cpp | 32 +- .../SpuGatheringCollisionDispatcher.h | 6 +- .../src/BulletMultiThreaded/SpuLibspe2Support.h | 6 +- .../SpuNarrowPhaseCollisionTask/Box.h | 33 +- .../SpuCollisionShapes.h | 8 +- .../SpuContactResult.cpp | 10 +- .../SpuGatheringCollisionTask.cpp | 63 +- .../SpuNarrowPhaseCollisionTask/boxBoxDistance.cpp | 345 +-- .../SpuNarrowPhaseCollisionTask/boxBoxDistance.h | 11 +- .../src/BulletMultiThreaded/SpuSampleTaskProcess.h | 6 +- hkl3d/bullet/src/BulletMultiThreaded/SpuSync.h | 7 +- hkl3d/bullet/src/BulletMultiThreaded/TrbDynBody.h | 79 + hkl3d/bullet/src/BulletMultiThreaded/TrbStateVec.h | 339 +++ .../src/BulletMultiThreaded/Win32ThreadSupport.cpp | 186 +- .../src/BulletMultiThreaded/Win32ThreadSupport.h | 20 +- .../BulletMultiThreaded/btGpu3DGridBroadphase.cpp | 1180 ++++----- .../BulletMultiThreaded/btGpu3DGridBroadphase.h | 276 +- .../btGpu3DGridBroadphaseSharedCode.h | 860 +++--- .../btGpu3DGridBroadphaseSharedDefs.h | 122 +- .../btGpu3DGridBroadphaseSharedTypes.h | 134 +- .../src/BulletMultiThreaded/btGpuUtilsSharedCode.h | 110 +- .../src/BulletMultiThreaded/btGpuUtilsSharedDefs.h | 104 +- .../btParallelConstraintSolver.cpp | 1463 ++++++++++- .../btParallelConstraintSolver.h | 325 ++- .../BulletMultiThreaded/btThreadSupportInterface.h | 43 +- .../src/BulletMultiThreaded/vectormath2bullet.h | 15 +- .../src/BulletSoftBody/btDefaultSoftBodySolver.cpp | 151 ++ .../src/BulletSoftBody/btDefaultSoftBodySolver.h | 63 + hkl3d/bullet/src/BulletSoftBody/btSoftBody.cpp | 704 ++++- hkl3d/bullet/src/BulletSoftBody/btSoftBody.h | 107 +- .../btSoftBodyConcaveCollisionAlgorithm.h | 6 +- hkl3d/bullet/src/BulletSoftBody/btSoftBodyData.h | 217 ++ .../src/BulletSoftBody/btSoftBodyHelpers.cpp | 230 +- .../bullet/src/BulletSoftBody/btSoftBodyHelpers.h | 24 +- .../src/BulletSoftBody/btSoftBodyInternals.h | 31 +- .../BulletSoftBody/btSoftBodySolverVertexBuffer.h | 165 ++ .../bullet/src/BulletSoftBody/btSoftBodySolvers.h | 154 ++ .../btSoftRigidCollisionAlgorithm.cpp | 4 +- .../BulletSoftBody/btSoftRigidCollisionAlgorithm.h | 6 +- .../BulletSoftBody/btSoftRigidDynamicsWorld.cpp | 138 +- .../src/BulletSoftBody/btSoftRigidDynamicsWorld.h | 18 +- .../btSoftSoftCollisionAlgorithm.cpp | 3 +- .../BulletSoftBody/btSoftSoftCollisionAlgorithm.h | 6 +- hkl3d/bullet/src/BulletSoftBody/btSparseSDF.h | 6 +- hkl3d/bullet/src/LinearMath/btAabbUtil2.h | 6 +- hkl3d/bullet/src/LinearMath/btAlignedAllocator.cpp | 25 +- hkl3d/bullet/src/LinearMath/btAlignedObjectArray.h | 9 +- hkl3d/bullet/src/LinearMath/btConvexHull.h | 6 +- .../bullet/src/LinearMath/btConvexHullComputer.cpp | 2749 ++++++++++++++++++++ hkl3d/bullet/src/LinearMath/btConvexHullComputer.h | 103 + hkl3d/bullet/src/LinearMath/btDefaultMotionState.h | 6 +- hkl3d/bullet/src/LinearMath/btHashMap.h | 18 +- hkl3d/bullet/src/LinearMath/btIDebugDraw.h | 109 +- hkl3d/bullet/src/LinearMath/btList.h | 6 +- hkl3d/bullet/src/LinearMath/btMatrix3x3.h | 89 +- hkl3d/bullet/src/LinearMath/btMinMax.h | 12 +- hkl3d/bullet/src/LinearMath/btPoolAllocator.h | 19 + hkl3d/bullet/src/LinearMath/btQuadWord.h | 6 +- hkl3d/bullet/src/LinearMath/btQuaternion.h | 6 +- hkl3d/bullet/src/LinearMath/btQuickprof.cpp | 223 +- hkl3d/bullet/src/LinearMath/btQuickprof.h | 202 +- hkl3d/bullet/src/LinearMath/btRandom.h | 6 +- hkl3d/bullet/src/LinearMath/btScalar.h | 23 +- hkl3d/bullet/src/LinearMath/btSerializer.cpp | 1409 ++++++---- hkl3d/bullet/src/LinearMath/btSerializer.h | 1259 ++++----- hkl3d/bullet/src/LinearMath/btTransform.h | 6 +- hkl3d/bullet/src/LinearMath/btTransformUtil.h | 8 +- hkl3d/bullet/src/LinearMath/btVector3.h | 48 +- hkl3d/bullet/src/Makefile.am | 19 +- hkl3d/bullet/src/MiniCL/MiniCL.cpp | 720 +++++ hkl3d/bullet/src/MiniCL/MiniCLTask/MiniCLTask.cpp | 74 + hkl3d/bullet/src/MiniCL/MiniCLTask/MiniCLTask.h | 62 + hkl3d/bullet/src/MiniCL/MiniCLTaskScheduler.cpp | 519 ++++ hkl3d/bullet/src/MiniCL/MiniCLTaskScheduler.h | 194 ++ hkl3d/bullet/src/MiniCL/cl.h | 2 + hkl3d/bullet/src/MiniCL/cl_MiniCL_Defs.h | 594 +++-- hkl3d/bullet/src/MiniCL/cl_gl.h | 2 +- hkl3d/bullet/src/MiniCL/cl_platform.h | 508 ++-- hkl3d/bullet/src/btBulletCollisionCommon.h | 1 + 281 files changed, 22150 insertions(+), 8371 deletions(-) commit bf1eefe3f020e10d417f1f35cbeb1265e8cf8f18 Author: Picca Frédéric-Emmanuel Date: Fri Apr 29 22:52:51 2011 +0200 * remove a bug triggered by gcc 4.5 test/hkl/unit-t.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) commit 5fcc583f46993de853c522b6095befb5981934d0 Author: Picca Frédéric-Emmanuel Date: Fri Apr 29 22:17:26 2011 +0200 import c-tap-harness 1.7 test/runtests.c | 58 ++++++++++++++++++++++++++++++++++++++++++------------ test/tap/basic.c | 35 ++++++++++++++++---------------- test/tap/basic.h | 35 ++++++++++++++++---------------- test/tap/libtap.sh | 3 ++- 4 files changed, 81 insertions(+), 50 deletions(-) commit 4522007fd73e2aaea30beb226711b879949cb629 Author: Picca Frédéric-Emmanuel Date: Fri Apr 29 22:11:37 2011 +0200 * work in progress gui/Makefile.am | 3 + gui/g3d.vapi | 55 ++++++++++ gui/hkl3d-gui-model.vala | 276 +++++++++++++++++++++-------------------------- gui/hkl3d-gui-scene.vala | 135 +++++++++++------------ gui/hkl3d.vapi | 16 +-- 5 files changed, 251 insertions(+), 234 deletions(-) commit 2165cc97163034a2adaaef5bc4f5f3416a3b5dfe Author: Frédéric-Emmanuel PICCA Date: Fri Apr 29 10:47:18 2011 +0200 * add documentation of the SOLEIL SIXS MED2+2 geometry Documentation/hkl.texi | 54 ++++++++++++++++++++++++++++++++++++++++++++++++-- NEWS | 3 +++ 2 files changed, 55 insertions(+), 2 deletions(-) commit 9a712722c1984b04ea66f3eb516a2825ac366053 Author: Picca Frédéric-Emmanuel Date: Mon Apr 25 12:31:09 2011 +0200 * add the hkl3d-gui-scene.vala configure.ac | 1 + gui/Makefile.am | 17 +- gui/hkl-gui-3d.vala | 17 +- gui/hkl-gui-pseudoaxes.h | 0 gui/hkl-gui-pseudoaxes.vala | 2 +- gui/hkl-gui.vala | 73 ++++-- gui/hkl.vapi | 39 ++- gui/hkl3d-gui-model.vala | 561 ++++++++++++++++++++++++++++++++++++++++++ gui/hkl3d-gui-scene.vala | 382 ++++++++++++++++++++++++++++ gui/hkl3d-gui-view.vala | 218 ++++++++++++++++ gui/hkl3d/Makefile.am | 24 +- gui/hkl3d/hkl3d-gui-model.cpp | 407 ------------------------------ gui/hkl3d/hkl3d-gui-model.h | 121 --------- gui/hkl3d/hkl3d-gui-scene.cpp | 432 -------------------------------- gui/hkl3d/hkl3d-gui-scene.h | 120 --------- gui/hkl3d/hkl3d-gui-view.cpp | 222 ----------------- gui/hkl3d/hkl3d-gui-view.h | 109 -------- gui/trackball.vapi | 36 +++ 18 files changed, 1315 insertions(+), 1466 deletions(-) commit 744156fb0db25b83d18ede8ea249a329351d539f Author: Picca Frédéric-Emmanuel Date: Thu Apr 14 19:54:47 2011 +0200 add also the 4S+2D diffractometer using asymptote. Documentation/figures/3S+1D.asy | 153 ++----------------------------- Documentation/figures/4S+2D.asy | 30 ++++++ Documentation/figures/Makefile.am | 2 + Documentation/figures/diffractometer.asy | 120 ++++++++++++++++++++++++ 4 files changed, 158 insertions(+), 147 deletions(-) commit 2e4cafd68fa149f1d803d7853179be819729768b Author: Picca Frédéric-Emmanuel Date: Thu Apr 14 18:56:47 2011 +0200 add 3S+1D figure implemented with asymptote. Documentation/figures/3S+1D.asy | 171 ++++++++++++++++++++++++++++++++++++++ Documentation/figures/Makefile.am | 2 + 2 files changed, 173 insertions(+) commit 68968287c81e398586c043d612f59d63437e0a36 Author: Picca Frédéric-Emmanuel Date: Mon Apr 11 22:00:37 2011 +0200 convert B_b.pov -> B_b.asy Documentation/figures/B_b.asy | 23 ++++++++++++++++ Documentation/figures/B_b.pov | 58 --------------------------------------- Documentation/figures/Makefile.am | 4 +-- 3 files changed, 25 insertions(+), 60 deletions(-) commit 46a88a65186c2a532d4cd6490ee45c376fdc9610 Author: Picca Frédéric-Emmanuel Date: Mon Apr 11 21:44:47 2011 +0200 * remove useless files Documentation/figures/B_b.py | 25 ----- Documentation/figures/arrows.py | 114 ---------------------- Documentation/figures/bravais.py | 35 ------- Documentation/figures/crystal.py | 36 ------- Documentation/figures/diffractometers.py | 157 ------------------------------- 5 files changed, 367 deletions(-) commit 1d4fa27f537059b2b882054f719e2dda9c5d8b05 Author: Frédéric-Emmanuel PICCA Date: Thu Mar 17 15:03:32 2011 +0100 * when the mode change the geometries list is reset so emit the changed signal. gui/pseudoaxesframe.cpp | 1 + 1 file changed, 1 insertion(+) commit 76e7173875246dc28433bc8b936a477c78d465ed Author: Frédéric-Emmanuel PICCA Date: Thu Mar 17 15:02:50 2011 +0100 * typo hkl/hkl-geometry-factory.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit c43cbe14fe44fae630a8e8b07d7ec5f04d73a30c Author: Frédéric-Emmanuel PICCA Date: Thu Mar 17 15:02:43 2011 +0100 * add the MED2+2 geometry for the SOLEIL SIXS beamline hkl/Makefile.am | 2 ++ hkl/hkl-geometry-factory.c | 16 ++++++++++++ hkl/hkl-geometry-factory.h | 3 ++- hkl/hkl-geometry.h | 3 ++- hkl/hkl-pseudoaxis-factory.c | 5 ++++ hkl/hkl-pseudoaxis-soleil-sixs-med.c | 50 ++++++++++++++++++++++++++++++++++++ hkl/hkl-pseudoaxis-soleil-sixs-med.h | 33 ++++++++++++++++++++++++ test/hkl-test-pseudoaxis.c | 10 ++++++++ 8 files changed, 120 insertions(+), 2 deletions(-) commit 5146fd9cffd7956941595d6ee220ecf4804b9faa Author: Frédéric-Emmanuel PICCA Date: Wed Mar 2 17:36:52 2011 +0100 * set up the error message handling in relevant part of the code. hkl/hkl-macros.h | 2 + hkl/hkl-pseudoaxis-auto.c | 19 +++- hkl/hkl-pseudoaxis-common-eulerians.c | 19 ++-- hkl/hkl-pseudoaxis-common-hkl.c | 188 ++++++++++++++++++---------------- hkl/hkl-pseudoaxis-common-psi.c | 26 +++-- hkl/hkl-pseudoaxis.c | 106 +++++++++---------- 6 files changed, 195 insertions(+), 165 deletions(-) commit 261677bca5893b2b76903178dd044177e21b0d6b Author: Frédéric-Emmanuel PICCA Date: Tue Mar 1 11:36:05 2011 +0100 * remove all references to HKL_SUCCESS and HKL_FAIL now we have only HKL_TRUE and HKL_FALSE. this is less error prone. gui/hkl-gui-callbacks.cpp | 10 +++---- gui/hkl-gui-pseudoaxes.cpp | 4 +-- hkl/hkl-detector.c | 4 +-- hkl/hkl-geometry.c | 18 ++++++------- hkl/hkl-lattice.c | 43 +++++++++++++++-------------- hkl/hkl-macros.h | 3 --- hkl/hkl-parameter.c | 14 +++++----- hkl/hkl-pseudoaxis-auto.c | 20 +++++++------- hkl/hkl-pseudoaxis-common-eulerians.c | 21 +++++++-------- hkl/hkl-pseudoaxis-common-hkl.c | 42 +++++++++++------------------ hkl/hkl-pseudoaxis-common-psi.c | 23 +++++++--------- hkl/hkl-pseudoaxis-common-q.c | 4 +-- hkl/hkl-pseudoaxis-common.c | 4 +-- hkl/hkl-pseudoaxis.c | 21 +++++++-------- hkl/hkl-quaternion.c | 2 +- hkl/hkl-sample.c | 51 ++++++++++++++++------------------- hkl/hkl-source.c | 4 +-- hkl/hkl-vector.c | 15 +++++------ test/hkl/bench-t.c | 2 +- test/hkl/lattice-t.c | 12 ++++----- test/hkl/parameter-t.c | 12 ++++----- test/hkl/pseudoaxis-e4ch-t.c | 37 ++++++++++++------------- test/hkl/pseudoaxis-e4cv-t.c | 36 ++++++++++++------------- test/hkl/pseudoaxis-e6c-t.c | 22 +++++++-------- test/hkl/pseudoaxis-k4cv-t.c | 18 ++++++------- test/hkl/pseudoaxis-k6c-t.c | 22 +++++++-------- test/hkl/pseudoaxis-t.c | 8 +++--- test/hkl/pseudoaxis-zaxis-t.c | 8 +++--- test/hkl/sample-t.c | 4 +-- test/tap/hkl.c | 2 +- 30 files changed, 227 insertions(+), 259 deletions(-) commit 4c11dc3daa28d298eda62c7ea7c74aa41d7708f7 Author: Frédéric-Emmanuel PICCA Date: Mon Feb 28 17:40:50 2011 +0100 * HKL_FAIL = 0 -> HKL_FALSE next step remove the useless HKL_SUCCESS and HKL_FAIL macros. hkl/hkl-macros.h | 2 +- hkl/hkl-sample.c | 18 +++++++++--------- hkl/hkl-sample.h | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) commit e4004b70cf9d7745e93481165cc6c435ddfd5743 Author: Frédéric-Emmanuel PICCA Date: Mon Feb 28 17:01:09 2011 +0100 * HKL_SUCCESS -> HKL_TRUE preparation of the transition. hkl/hkl-lattice.c | 4 +-- hkl/hkl-macros.h | 2 +- hkl/hkl-parameter.c | 2 +- hkl/hkl-pseudoaxis-auto.c | 4 +-- hkl/hkl-pseudoaxis.c | 2 +- hkl/hkl-sample.c | 6 ++--- test/hkl/pseudoaxis-e4ch-t.c | 62 +++++++++++++++++++++---------------------- test/hkl/pseudoaxis-e4cv-t.c | 62 +++++++++++++++++++++---------------------- test/hkl/pseudoaxis-e6c-t.c | 32 +++++++++++----------- test/hkl/pseudoaxis-k4cv-t.c | 22 +++++++-------- test/hkl/pseudoaxis-k6c-t.c | 28 +++++++++---------- test/hkl/pseudoaxis-t.c | 26 +++++++++--------- test/hkl/pseudoaxis-zaxis-t.c | 8 +++--- test/tap/hkl.c | 4 +-- 14 files changed, 132 insertions(+), 132 deletions(-) commit 20fc9d38e3743aa055cbe4c081f3d4a3a596a7bb Author: Frédéric-Emmanuel PICCA Date: Mon Feb 28 15:39:51 2011 +0100 * add the unit test methods test/TESTS | 1 + test/hkl/Makefile.am | 1 + test/hkl/unit-t.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+) commit f4dd9bfe29307b7a89a97928658b3566a6c78287 Author: Frédéric-Emmanuel PICCA Date: Fri Feb 25 14:48:19 2011 +0100 * do not use the tmpl file with gtk-doc configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 45fdea2ff3c2d65c44e700511825b92830827ae5 Author: Frédéric-Emmanuel PICCA Date: Fri Feb 25 14:47:43 2011 +0100 * document a bug requiring a so bump. hkl/hkl-sample.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) commit 5913fafd64ccd3e378a310d09f8406915861bafa Author: Frédéric-Emmanuel PICCA Date: Fri Feb 25 14:46:36 2011 +0100 * remove a few mode warnings hkl/hkl-pseudoaxis-auto.c | 4 ++-- hkl/hkl-pseudoaxis-common-eulerians.c | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 10 +++++----- hkl/hkl-pseudoaxis-common-q.c | 2 +- hkl/hkl-sample.c | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) commit 1192dcc87ecf9f59aa199b9ca78127e7093723ad Author: Frédéric-Emmanuel PICCA Date: Fri Feb 25 11:57:13 2011 +0100 * fix most of the vc9 warnings hkl/hkl-geometry.c | 2 +- hkl/hkl-pseudoaxis-auto.c | 2 +- hkl/hkl-pseudoaxis-common-eulerians.c | 4 ++-- hkl/hkl-pseudoaxis-common-hkl.c | 9 ++++----- 4 files changed, 8 insertions(+), 9 deletions(-) commit fa07e8aef42b69c7ce1b27ee55c7ef248a69b097 Author: Frédéric-Emmanuel PICCA Date: Fri Feb 25 11:21:07 2011 +0100 * update the pom.xml hkl/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5c052d22953d230bab4cb6d72c9b682960208d3c Author: Frédéric-Emmanuel PICCA Date: Fri Feb 25 11:18:44 2011 +0100 * avoid and API breakage. hkl/hkl-pseudoaxis-common-hkl.c | 8 +++--- hkl/hkl-pseudoaxis-common-psi.c | 4 +-- hkl/hkl-pseudoaxis-common-q.c | 4 +-- hkl/hkl-vector.c | 59 +++++++++++++++++++++++++---------------- hkl/hkl-vector.h | 7 +++-- test/hkl-test-vector.c | 2 +- 6 files changed, 50 insertions(+), 34 deletions(-) commit cd266ff75a1f2d6d1f11cfd1050e3d3151ba5e92 Author: Frédéric-Emmanuel PICCA Date: Thu Feb 24 17:31:52 2011 +0100 * pom.xml -> SNAPSHOT hkl/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3e544e1abad9445e51a738ba9896d9ab171afdc4 Author: Frédéric-Emmanuel PICCA Date: Thu Feb 24 17:25:38 2011 +0100 * backport the zaxis computation fix from the next branch hkl/hkl-geometry.c | 26 ++++ hkl/hkl-geometry.h | 2 + hkl/hkl-pseudoaxis-common-hkl.c | 298 +++++++++++++++++++++++++++++++++++++++- hkl/hkl-pseudoaxis-common-hkl.h | 7 + hkl/hkl-pseudoaxis-common-psi.c | 4 +- hkl/hkl-pseudoaxis-common-q.c | 4 +- hkl/hkl-pseudoaxis-zaxis-hkl.c | 2 +- hkl/hkl-vector.c | 94 +++++++++++-- hkl/hkl-vector.h | 11 +- test/hkl-test-vector.c | 2 +- 10 files changed, 430 insertions(+), 20 deletions(-) commit 2ee1e2d7ec73f8c074124e7d4ba69c13e72fc0a9 Merge: a432c89e 33a1243c Author: Frédéric-Emmanuel PICCA Date: Thu Feb 24 14:27:52 2011 +0100 Merge branch 'maint' into next Conflicts: hkl/hkl-pseudoaxis-common-hkl.c test/hkl/pseudoaxis-e6c-t.c commit 33a1243c4c40d8f2e3bafdaf4130ba325d48d7ee Author: Picca Frédéric-Emmanuel Date: Wed Feb 16 13:31:16 2011 +0100 * add mode parameters callbacks in ghkl gui/pseudo.ui | 14 ++++++++------ gui/pseudoaxesframe.cpp | 33 ++++++++++++++++++++++++++++----- gui/pseudoaxesframe.h | 19 +++++++++++++++++++ 3 files changed, 55 insertions(+), 11 deletions(-) commit e50499d2a68eb9914328624f9e9165f14a60a349 Author: Frédéric-Emmanuel PICCA Date: Thu Feb 24 11:32:41 2011 +0100 * better printout for the bench test/bench.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 5a4fefcb69b83b33761b0c0afcddc99ed8766aa4 Author: Frédéric-Emmanuel PICCA Date: Thu Feb 24 11:32:25 2011 +0100 * typo hkl/hkl-pseudoaxis-common-hkl.c | 2 +- hkl/hkl-vector.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit c0005f74fa5e5fcc449a79a0a35e56782c8d0950 Author: Frédéric-Emmanuel PICCA Date: Thu Feb 24 11:32:13 2011 +0100 * proposition of fix for the petra3 psi_constant_vertical problem hkl/hkl-pseudoaxis-common-hkl.c | 43 +++++++++++++++++--------- hkl/hkl-vector.c | 4 +-- test/hkl-test-pseudoaxis-e6c.c | 68 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 98 insertions(+), 17 deletions(-) commit a432c89e28ac0ee41d269a1d00e84e48df23c047 Author: Picca Frédéric-Emmanuel Date: Wed Feb 16 13:31:16 2011 +0100 * add mode parameters callbacks in ghkl gui/hkl-gui-pseudoaxes.cpp | 33 ++++++++++++++++++++++++++++----- gui/hkl-gui-pseudoaxes.h | 19 +++++++++++++++++++ gui/pseudo.ui | 14 ++++++++------ 3 files changed, 55 insertions(+), 11 deletions(-) commit 02f318c9ba5070cb033e4c5ed61662943e578515 Merge: 5cde3bfb e4dae97e Author: Picca Frédéric-Emmanuel Date: Wed Feb 16 11:43:46 2011 +0100 Merge branch 'maint' into next Conflicts: hkl/pom.xml commit 5cde3bfbe96492f599afe967867a609da37fe10b Author: Frédéric-Emmanuel PICCA Date: Mon Jan 31 16:29:36 2011 +0100 * usefull printf when a test fail in the pseudaxis-t method. test/hkl/pseudoaxis-t.c | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-) commit 50baf3426b140b636f68662687505423b6ea60d6 Author: Frédéric-Emmanuel PICCA Date: Mon Jan 31 16:28:58 2011 +0100 * use the set_hkl method also for the reflectivity mode of the zaxis hkl/hkl-pseudoaxis-zaxis-hkl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f5c81dc798fba1cf01873fcad0fd381bbdc99e3d Author: Frédéric-Emmanuel PICCA Date: Mon Jan 31 16:28:25 2011 +0100 * silent the set_hkl method hkl/hkl-pseudoaxis-common-hkl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bc6ff1c1937c9dcf1fcf31f18c559e405dc30c47 Author: Picca Frédéric-Emmanuel Date: Sun Jan 30 21:38:38 2011 +0100 * impreove a bit the set_hkl method hkl/hkl-pseudoaxis-common-hkl.c | 69 ++++++++++++++++++++++++++++++----------- 1 file changed, 51 insertions(+), 18 deletions(-) commit 5ab51a0172f84b044118de230060c754ab6c1611 Author: Picca Frédéric-Emmanuel Date: Sun Jan 23 14:32:39 2011 -0500 * print information to stderr if the pseudoaxes test is ko. test/hkl/pseudoaxis-t.c | 53 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 18 deletions(-) commit a34af06c51888f8ad10e45919f51e93d0cb8839d Author: Frédéric-Emmanuel PICCA Date: Thu Jan 13 16:58:35 2011 +0100 * update the TODO list. TODO | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) commit b172eaca6ed415a1de3b3c360d8822979e54c980 Author: Frédéric-Emmanuel PICCA Date: Thu Jan 13 16:57:42 2011 +0100 * the detector fit method works on 1 and 2 axes. hkl/hkl-pseudoaxis-common-hkl.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit f9c085c0cf08090bba24de29d107693c256758b6 Author: Frédéric-Emmanuel PICCA Date: Thu Jan 13 16:02:59 2011 +0100 * silent pseudoaxis-zaxis-t program test/hkl/pseudoaxis-zaxis-t.c | 1 - 1 file changed, 1 deletion(-) commit e2850cea9fc65fc4856dad0137f2d7418af05282 Author: Frédéric-Emmanuel PICCA Date: Thu Jan 13 15:37:02 2011 +0100 * typo hkl/hkl-pseudoaxis-common-hkl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 764126e3189e8bb37452148a9ed79db5654d67ed Author: Frédéric-Emmanuel PICCA Date: Thu Jan 13 15:36:55 2011 +0100 * I forgot this change. hkl/hkl-pseudoaxis-common-hkl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d0564128efe67761b48ee8605aeebe22dea6b691 Author: Frédéric-Emmanuel PICCA Date: Thu Jan 13 15:28:53 2011 +0100 * prepare a generalisation of the new hkl set method solver for now this is not yet ready for adoption by all the other geometries. especially for the degenerated case of the k6c geometries. this method do not take into account the degenerated axes which cause troubles. (need more investigation) hkl/hkl-pseudoaxis-common-hkl.c | 268 +++++++++++++++++++++++++++++++++++++++- hkl/hkl-pseudoaxis-common-hkl.h | 7 ++ hkl/hkl-pseudoaxis-zaxis-hkl.c | 262 +-------------------------------------- 3 files changed, 272 insertions(+), 265 deletions(-) commit 03308b0c3cf418edbd1821c6a872fa14853299cf Author: Frédéric-Emmanuel PICCA Date: Thu Jan 13 14:47:26 2011 +0100 * better fit of the detector position hkl/hkl-pseudoaxis-zaxis-hkl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 094cf3b362f18caa645d9e49e1d4e6143234cc34 Author: Frédéric-Emmanuel PICCA Date: Thu Jan 13 14:45:04 2011 +0100 * correction in the DEBUG code hkl/hkl-pseudoaxis-zaxis-hkl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 29cfb476e82d9723a815dc9cf3bec06ea74adcf6 Author: Frédéric-Emmanuel PICCA Date: Thu Jan 13 11:34:20 2011 +0100 * remove useless code hkl/hkl-pseudoaxis-zaxis-hkl.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 7164580ee7c81c78e8afd17fc60dafb8fa1e11b9 Author: Frédéric-Emmanuel PICCA Date: Tue Jan 11 17:11:52 2011 +0100 * update the zaxis figure with the right omega axis orientation Documentation/figures/zaxis.asy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3dab73325902abd598c0db7eb46f1391065f84f2 Author: Frédéric-Emmanuel PICCA Date: Tue Jan 11 17:06:33 2011 +0100 * now the test_engines method has a parameter for the number of tests test/hkl/pseudoaxis-t.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) commit d6a18989e2c249dc9ff44cf7a8122ad525049ca1 Author: Frédéric-Emmanuel PICCA Date: Tue Jan 11 17:05:28 2011 +0100 * update the zaxis mode. now it find more solutions. the idea is to use the ewalds sphere to generate a solution from another one. (see the zaxis figure) hkl/hkl-pseudoaxis-zaxis-hkl.c | 304 ++++++++++++++++++++++++++++++++--------- test/hkl/pseudoaxis-zaxis-t.c | 3 +- 2 files changed, 244 insertions(+), 63 deletions(-) commit e85ca0a6536ccfb33a2e95021356e62c86c2035b Author: Frédéric-Emmanuel PICCA Date: Tue Jan 11 16:59:52 2011 +0100 * add oriented_angle_points, rotated_around_line, modify project_on_plan hkl/hkl-pseudoaxis-common-hkl.c | 4 +- hkl/hkl-pseudoaxis-common-psi.c | 4 +- hkl/hkl-pseudoaxis-common-q.c | 4 +- hkl/hkl-vector.c | 95 ++++++++++++++++++++++++++++++++++++----- hkl/hkl-vector.h | 11 ++++- test/hkl/vector-t.c | 55 +++++++++++++++++++++++- 6 files changed, 153 insertions(+), 20 deletions(-) commit b1e64ea2b35dccdb46905c9a6088c387d29ce24e Author: Picca Frédéric-Emmanuel Date: Sun Jan 9 05:02:06 2011 -0500 * povray -> asymptote figure Documentation/figures/B_a.asy | 26 ++++++++++++++ Documentation/figures/B_a.pov | 73 --------------------------------------- Documentation/figures/B_a.py | 43 ----------------------- Documentation/figures/Makefile.am | 4 +-- 4 files changed, 28 insertions(+), 118 deletions(-) commit 8b87f5cd4cd032a095bff175c813cb86ee97faee Author: Picca Frédéric-Emmanuel Date: Sat Jan 8 07:12:43 2011 -0500 * switch to c-tap-harness 1.6 now they added an epsilon in the is_double check, so we can use it instead of my is_double_epsilon test/hkl/axis-t.c | 40 +++++++++--------- test/hkl/geometry-t.c | 28 ++++++------- test/hkl/interval-t.c | 4 +- test/hkl/lattice-t.c | 108 ++++++++++++++++++++++++------------------------ test/hkl/matrix-t.c | 18 ++++---- test/hkl/parameter-t.c | 12 +++--- test/hkl/quaternion-t.c | 16 +++---- test/hkl/sample-t.c | 62 +++++++++++++-------------- test/hkl/source-t.c | 12 +++--- test/hkl/vector-t.c | 30 +++++++------- test/runtests.c | 66 +++++++++++++++++++---------- test/tap/basic.c | 87 ++++++++++++++++++++++---------------- test/tap/basic.h | 23 +++++++++-- test/tap/libtap.sh | 65 ++++++++++++++++++++++++----- 14 files changed, 334 insertions(+), 237 deletions(-) commit f07df8b98a347c403e4534544b4e5ec73f972ff0 Author: Picca Frédéric-Emmanuel Date: Sat Jan 8 06:55:21 2011 -0500 * update the zaxis figure and generate pdf instead of png the png generated files where ugly and depends of a working X server. This should FTBFS during the debian package build (no X available). Now we have nice vertorial 3D figures. Documentation/figures/Makefile.am | 7 ++++--- Documentation/figures/zaxis.asy | 34 ++++++++++++++-------------------- 2 files changed, 18 insertions(+), 23 deletions(-) commit 585d8e247cc01107f82139d5e6f9611fce76c75f Author: Picca Frédéric-Emmanuel Date: Thu Jan 6 15:48:42 2011 -0500 * TO DELETE test/hkl/axis-t.c | 40 ++++++++-------- test/hkl/geometry-t.c | 34 +++++++------- test/hkl/interval-t.c | 4 +- test/hkl/lattice-t.c | 108 +++++++++++++++++++++---------------------- test/hkl/matrix-t.c | 18 ++++---- test/hkl/parameter-t.c | 12 ++--- test/hkl/pseudoaxis-e4cv-t.c | 30 ++++++------ test/hkl/pseudoaxis-e6c-t.c | 16 +++---- test/hkl/pseudoaxis-k4cv-t.c | 20 ++++---- test/hkl/pseudoaxis-k6c-t.c | 22 ++++----- test/hkl/pseudoaxis-t.c | 6 +-- test/hkl/quaternion-t.c | 16 +++---- test/hkl/sample-t.c | 62 ++++++++++++------------- test/hkl/source-t.c | 12 ++--- test/hkl/vector-t.c | 30 ++++++------ test/runtests.c | 66 +++++++++++++++++--------- test/tap/basic.c | 87 +++++++++++++++++++--------------- test/tap/basic.h | 23 +++++++-- test/tap/libtap.sh | 65 +++++++++++++++++++++----- 19 files changed, 384 insertions(+), 287 deletions(-) commit c49422e6e39413950a4ba176a091ce08534938b6 Author: Frédéric-Emmanuel PICCA Date: Thu Jan 6 14:30:03 2011 +0100 * update the zaxis figure and integrate it to the buildsystem. Documentation/figures/Makefile.am | 8 ++++-- Documentation/figures/zaxis.asy | 59 ++++++++++++++++++++++++--------------- README | 12 ++++---- configure.ac | 6 ++++ 4 files changed, 55 insertions(+), 30 deletions(-) commit a16281324308a4411fe43d2316e33749c00834f4 Author: Picca Frédéric-Emmanuel Date: Fri Dec 31 10:09:32 2010 -0500 * work on the 3d gui part, it seems that it compiles now gui/hkl-gui-3d.vala | 131 +++++++++++++++++++++++++++------------------------- gui/hkl3d.vapi | 9 +++- 2 files changed, 75 insertions(+), 65 deletions(-) commit 56a40497dd8da78c4ef8d53c6d892aa5625d390c Author: Picca Frédéric-Emmanuel Date: Thu Dec 30 09:54:13 2010 -0500 * now the signals are ok gui/Makefile.am | 1 + gui/hkl-gui-3d.vala | 2 +- gui/hkl-gui-pseudoaxes.vala | 21 +- gui/hkl-gui.vala | 550 +++++++++++++++++++++++------------------- gui/hkl3d.vapi | 15 +- gui/hkl3d/hkl3d-gui-model.cpp | 6 +- gui/hkl3d/hkl3d-gui-model.h | 8 +- gui/hkl3d/hkl3d-gui-scene.cpp | 2 +- gui/hkl3d/hkl3d-gui-scene.h | 2 +- hkl3d/hkl3d.cpp | 124 +++++----- hkl3d/hkl3d.h | 78 +++--- 11 files changed, 438 insertions(+), 371 deletions(-) commit 5054481f1af5856b70571f61bbd4030238fe4f3a Author: Picca Frédéric-Emmanuel Date: Mon Dec 13 02:25:57 2010 -0500 * improve the zaxis figure. Documentation/figures/zaxis.asy | 55 ++++++++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 17 deletions(-) commit 8186328c020d63405689e03dedfc002bbd9e3c79 Author: Picca Frédéric-Emmanuel Date: Sun Nov 28 16:25:08 2010 -0500 * work in progress for the zaxis solver Documentation/figures/zaxis.asy | 43 +++++++++++++++++++++ hkl/hkl-pseudoaxis-zaxis-hkl.c | 83 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 125 insertions(+), 1 deletion(-) commit 329b9f9f3fc9b7f0eb9d49a1f198cef1a7ed22a9 Author: Frédéric-Emmanuel PICCA Date: Thu Nov 25 10:05:29 2010 +0100 * update the TODO TODO | 55 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 21 deletions(-) commit 4cbfc3f564bfdba49d0e3d5ad0692d87acde5559 Author: Frédéric-Emmanuel PICCA Date: Thu Nov 25 09:35:06 2010 +0100 * add the eulerian test in the bench test/hkl/bench-t.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 71d803ba843d2674da40376d1daa132b70f44d32 Author: Frédéric-Emmanuel PICCA Date: Wed Nov 24 11:37:19 2010 +0100 * now lcov works also with the 1.9 version configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 20b16aa131a4252802c9abfcd4437328ec3fcad6 Author: Frédéric-Emmanuel PICCA Date: Tue Nov 23 16:51:54 2010 +0100 * remove a tabulation indentation. it is not allow to use tabulation in the middle of a comment. test/hkl/pseudoaxis-e4ch-t.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6f45b5678f490b7e5f4a8d76603ff07325b877f9 Author: Frédéric-Emmanuel PICCA Date: Tue Nov 23 16:50:25 2010 +0100 * remove useless comments test/hkl/pseudoaxis-e4ch-t.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) commit 64f38716412610eaf93c5209c4822e549ffa605c Author: Jens Krüger Date: Mon Nov 22 11:30:09 2010 +0100 Improve the use of the povray program. If the configure run does not detect the povray program the echo program will be used as povray. Documentation/figures/Makefile.am | 6 ++++-- configure.ac | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) commit 6f592595064b37cbcef394f18576a037e78c3ff2 Author: Jens Krüger Date: Mon Nov 22 11:30:08 2010 +0100 Add a first test for the E4CH. autogen.sh | 2 +- configure.ac | 2 +- test/TESTS | 1 + test/hkl/Makefile.am | 3 +- test/hkl/pseudoaxis-e4ch-t.c | 430 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 435 insertions(+), 3 deletions(-) commit e4dae97e5b495eaf713c24dc5a38aea1884bbe56 Author: Frédéric-Emmanuel PICCA Date: Fri Nov 12 13:50:02 2010 +0100 * reduce the number of iteration before randomizing the starting point When we try to find the first solution, the starting point is the current position of the diffractometer. If after 100 iterations nothing was found. Just randomize the axes of the diffractometer and restart from this new point. hkl/hkl-pseudoaxis-auto.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e6693cd3194420c9c481160e9bc8bcc76dac08e4 Author: Frédéric-Emmanuel PICCA Date: Fri Oct 22 11:15:31 2010 +0200 * add a zaxis dedicated test method for the hkl pseudo axis test/TESTS | 1 + test/hkl/Makefile.am | 3 +- test/hkl/pseudoaxis-zaxis-t.c | 99 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+), 1 deletion(-) commit b6cf0a892257baaf69a2682bf9c6ebcf15068ee8 Author: Jens Krüger Date: Mon Sep 13 09:21:52 2010 +0200 FIX: error message if m4 directory exists. autogen.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c6f2b24df6b3b32c4605592d3c0f4349e873c24f Author: Picca Frédéric-Emmanuel Date: Thu Sep 23 22:53:35 2010 +0200 * add the --disable-gui and --disable-hkl3d Makefile.am | 2 +- NEWS | 3 ++- configure.ac | 14 +++++++------- 3 files changed, 10 insertions(+), 9 deletions(-) commit 62b405325256f95168478e40d17220307acb68ad Author: Picca Frédéric-Emmanuel Date: Thu Sep 23 22:21:16 2010 +0200 * update the NEWS file NEWS | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit a8206186daf65a1e209d39506aa03710d6574da8 Author: Picca Frédéric-Emmanuel Date: Thu Sep 23 22:13:38 2010 +0200 * remove an useless precision problem test/hkl/pseudoaxis-k6c-t.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit 5ff08efbb0df64637b5bed41052b7bd37f2a8ec5 Author: Picca Frédéric-Emmanuel Date: Thu Sep 23 22:07:34 2010 +0200 * typo hkl/hkl-geometry.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f94484394fe7c839f7b809f7b7fa779abadcce9e Author: Picca Frédéric-Emmanuel Date: Thu Sep 23 22:07:28 2010 +0200 * remove useless methodes of the HklGeometryList gui/hkl-gui.cpp | 2 +- hkl/hkl-geometry.c | 12 ------------ hkl/hkl-geometry.h | 4 ---- hkl/hkl-pseudoaxis.c | 4 ++-- test/hkl/pseudoaxis-e4cv-t.c | 2 +- test/hkl/pseudoaxis-e6c-t.c | 4 ++-- test/hkl/pseudoaxis-k4cv-t.c | 4 ++-- test/hkl/pseudoaxis-k6c-t.c | 4 ++-- test/hkl/pseudoaxis-t.c | 6 +----- 9 files changed, 11 insertions(+), 31 deletions(-) commit 4485226ba023255766d959984396a37b60adaf86 Author: Picca Frédéric-Emmanuel Date: Thu Sep 23 19:53:32 2010 +0200 * add the SOLEIL MARS beamline diffractometer Documentation/hkl.texi | 111 +++++++++---------------------------------- hkl/hkl-geometry-factory.c | 18 +++++++ hkl/hkl-geometry-factory.h | 1 + hkl/hkl-geometry.h | 3 +- hkl/hkl-pseudoaxis-factory.c | 1 + test/hkl/pseudoaxis-t.c | 9 ++++ 6 files changed, 54 insertions(+), 89 deletions(-) commit 98d08f4964aae08879896b401588400e7ee5b961 Author: Picca Frédéric-Emmanuel Date: Thu Sep 23 18:08:24 2010 +0200 * remove all SET_AXES macros hkl/hkl-geometry.c | 18 ++++++++++++++++++ hkl/hkl-geometry.h | 2 ++ test/hkl/bench-t.c | 12 +----------- test/hkl/geometry-t.c | 22 +++++++++++++++++++++- test/hkl/pseudoaxis-e4cv-t.c | 26 +++++++++----------------- test/hkl/pseudoaxis-e6c-t.c | 22 ++++++---------------- test/hkl/pseudoaxis-k4cv-t.c | 10 +--------- test/hkl/pseudoaxis-k6c-t.c | 14 ++------------ 8 files changed, 60 insertions(+), 66 deletions(-) commit 35a211876f44923115ee3e79d1fd9f4596900ea3 Author: Picca Frédéric-Emmanuel Date: Thu Sep 23 17:07:47 2010 +0200 * fix tests when compiled with something different than gcc. due to rounding errors, the number of valid test in the pseudoaxes part were not always the same from one platform to the other. test/hkl/pseudoaxis-e4cv-t.c | 132 +++++++++++++++---------------------- test/hkl/pseudoaxis-e6c-t.c | 66 +++++++------------ test/hkl/pseudoaxis-k4cv-t.c | 69 +++++++------------- test/hkl/pseudoaxis-k6c-t.c | 152 ++++++++----------------------------------- test/hkl/pseudoaxis-t.c | 46 +++++++------ test/tap/Makefile.am | 7 +- test/tap/hkl.c | 40 ++++++++++++ test/tap/hkl.h | 34 ++++++++++ 8 files changed, 230 insertions(+), 316 deletions(-) commit 330628dcbe352e93c2dd6f717988d3b2c064d9f7 Author: Picca Frédéric-Emmanuel Date: Thu Sep 23 14:50:29 2010 +0200 * indentation test/hkl/pseudoaxis-t.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) commit d3c5fc094557e7d18543a205f2256bbc04546c41 Author: Picca Frédéric-Emmanuel Date: Thu Sep 23 14:49:50 2010 +0200 * remove C++ comment format hkl3d/hkl3d.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) commit 80e405011234893f28948702a239a339214c9929 Author: Picca Frédéric-Emmanuel Date: Tue Sep 21 21:50:33 2010 +0200 * remove the useless Hkl3D _context member. hkl3d/hkl3d.cpp | 4 ---- hkl3d/hkl3d.h | 1 - 2 files changed, 5 deletions(-) commit 067a699d7092b780139168a4b9ce40be85376917 Author: Picca Frédéric-Emmanuel Date: Tue Sep 21 21:46:53 2010 +0200 * only renames gui/hkl-gui-3d.cpp | 30 ++++---- gui/hkl-gui-3d.h | 4 +- gui/hkl3d/hkl3d-gui-model.cpp | 34 ++++----- hkl3d/hkl3d.cpp | 165 +++++++++++++++++++++--------------------- hkl3d/hkl3d.h | 38 +++++----- test/hkl3d/test-t.c | 16 ++-- 6 files changed, 143 insertions(+), 144 deletions(-) commit e47e17e1fa5a0ea639ca05a78eb7e5a6c9880d81 Author: Picca Frédéric-Emmanuel Date: Tue Sep 21 20:53:56 2010 +0200 * put the model in the Hkl3Config. hkl3d/hkl3d.cpp | 39 ++++++++++++++++++++++----------------- hkl3d/hkl3d.h | 1 + 2 files changed, 23 insertions(+), 17 deletions(-) commit c59926b8e20392de4a83b0c57a3378361268401c Author: Picca Frédéric-Emmanuel Date: Tue Sep 21 19:41:21 2010 +0200 * add a config reference in the Hkl3DObject to simplify the code hkl3d/hkl3d.cpp | 35 +++++++++++++++-------------------- hkl3d/hkl3d.h | 2 +- 2 files changed, 16 insertions(+), 21 deletions(-) commit 7029b31556630d19793e34a3b79bf58f22b204c7 Author: Picca Frédéric-Emmanuel Date: Tue Sep 21 19:40:43 2010 +0200 * typo hkl3d/hkl3d.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b4e0b0c91136dfbc82558ab855ab27bf4b6d5a5f Author: Picca Frédéric-Emmanuel Date: Tue Sep 21 19:40:26 2010 +0200 * try to clarify the hkl3d_connect_object_to_axis method. hkl3d/hkl3d.cpp | 47 ++++++++++++++++++++++++----------------------- hkl3d/hkl3d.h | 2 +- 2 files changed, 25 insertions(+), 24 deletions(-) commit 3991d9015f2af9d6ee55495ce46c7cb2b184dadb Author: Picca Frédéric-Emmanuel Date: Tue Sep 21 16:35:39 2010 +0200 * rewrote the hkl3d_axis_detach_object hkl3d/hkl3d.cpp | 31 ++++++++++++------------------- test/hkl3d/test-t.c | 1 + 2 files changed, 13 insertions(+), 19 deletions(-) commit 179d2d73a6ce7d3a499c3f56cbc63c24ba315b66 Author: Picca Frédéric-Emmanuel Date: Mon Sep 20 17:10:14 2010 +0200 * remove the hkl3d_geometry_remove_object method hkl3d/hkl3d.cpp | 34 ++++++++++------------------------ hkl3d/hkl3d.h | 1 + 2 files changed, 11 insertions(+), 24 deletions(-) commit fe9146efc6a007cfa2eaf6e06505b51927e0804b Author: Picca Frédéric-Emmanuel Date: Sat Sep 18 12:31:07 2010 +0200 * remove an useless variable hkl3d/hkl3d.cpp | 9 ++++----- hkl3d/hkl3d.h | 1 - test/hkl3d/test-t.c | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) commit 6510d4a3f3df15e641e473cbcdfeed1f0707fd2e Author: Picca Frédéric-Emmanuel Date: Sat Sep 18 12:11:48 2010 +0200 * better explaination of the apply_transformation algo hkl3d/hkl3d.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 64a485565afe853b49dd526cf873ea2ef2594e9c Author: Picca Frédéric-Emmanuel Date: Sat Sep 18 11:55:15 2010 +0200 * typo hkl3d/hkl3d.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 7efe4c658bdb42d7078bf94d0e2abec615a1da99 Author: Picca Frédéric-Emmanuel Date: Sat Sep 18 11:34:06 2010 +0200 * remove useless variable hkl3d/hkl3d.cpp | 1 - hkl3d/hkl3d.h | 1 - 2 files changed, 2 deletions(-) commit 68d2be8dd2dd5e3d0ba6149f9bf253c978eb1c10 Author: Picca Frédéric-Emmanuel Date: Sat Sep 18 11:33:56 2010 +0200 * move the apply transformation from Hkl3D to Hkl3DGeometry hkl3d/hkl3d.cpp | 61 +++++++++++++++++++++++++++++++-------------------------- hkl3d/hkl3d.h | 2 +- 2 files changed, 34 insertions(+), 29 deletions(-) commit 134318d0136ff49f00cb34056cec1766796482e6 Author: Picca Frédéric-Emmanuel Date: Sat Sep 18 11:18:22 2010 +0200 * move the HklGeometry in the Hkl3DGeometry hkl3d/hkl3d.cpp | 49 ++++++++++++++++++++++++------------------------- hkl3d/hkl3d.h | 4 ++-- test/hkl3d/test-t.c | 14 +++++++------- 3 files changed, 33 insertions(+), 34 deletions(-) commit 986660920a9b54e784945cc83d48b2ff1d819c08 Author: Picca Frédéric-Emmanuel Date: Sat Sep 18 10:44:16 2010 +0200 * doc: explain why only one model instead of one per filename hkl3d/hkl3d.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit ea97ef1479de60d63e73bc90bd9cf4fd3d9edf11 Author: Picca Frédéric-Emmanuel Date: Sat Sep 18 10:35:11 2010 +0200 * replace the meaningless init_internal with a config constructor easier to understand hkl3d/hkl3d.cpp | 91 +++++++++++++++++++++++++-------------------------------- 1 file changed, 40 insertions(+), 51 deletions(-) commit a8d26c6c7812915fc5f1453c262ce698c6b630e9 Author: Picca Frédéric-Emmanuel Date: Sat Sep 18 10:02:43 2010 +0200 * declare typedef for all struct and use it. gui/hkl3d/hkl3d-gui-model.cpp | 6 +-- gui/hkl3d/hkl3d-gui-model.h | 8 +-- gui/hkl3d/hkl3d-gui-scene.cpp | 2 +- gui/hkl3d/hkl3d-gui-scene.h | 2 +- hkl3d/hkl3d.cpp | 122 +++++++++++++++++++++--------------------- hkl3d/hkl3d.h | 80 ++++++++++++++------------- test/hkl3d/test-t.c | 12 ++--- 7 files changed, 120 insertions(+), 112 deletions(-) commit b01401357262335aebfe91d6b641bbb03b27e217 Author: Picca Frédéric-Emmanuel Date: Sat Sep 18 09:42:17 2010 +0200 * work in progress configure.ac | 1 + gui/Makefile.am | 14 +- gui/gl.vapi | 1402 ++++++++++++++++++++ gui/glu.vapi | 301 +++++ gui/glut.vapi | 611 +++++++++ gui/glx.vapi | 202 +++ gui/gtkglext-1.0.vapi | 373 ++++++ gui/hkl-gui-3d.cpp | 244 ---- gui/hkl-gui-3d.h | 91 -- gui/hkl-gui-3d.vala | 261 ++++ ...seudoaxesframe.vala => hkl-gui-pseudoaxes.vala} | 0 gui/{ghkl.vala => hkl-gui.vala} | 0 gui/hkl.vapi | 12 +- gui/hkl3d.vapi | 104 ++ hkl3d/hkl3d.h | 6 + 15 files changed, 3274 insertions(+), 348 deletions(-) commit 8e6fc58522ecef974258b508fadf7ba3a20a9f72 Merge: 66cdb7ec 7402e4e7 Author: Picca Frédéric-Emmanuel Date: Thu Sep 16 23:03:21 2010 +0200 Merge branch 'next' into gtk Conflicts: configure.ac gui/Makefile.am gui/hkl-gui-callbacks.cpp gui/hkl-gui-modelcolumns.h gui/hkl-gui-pseudoaxes.cpp gui/hkl-gui-pseudoaxes.h gui/hkl-gui.cpp gui/hkl-gui.h gui/main.cpp commit 66cdb7ec98e86f9c8565eae79331629424c2f85a Author: Picca Frédéric-Emmanuel Date: Tue Sep 14 18:38:12 2010 +0200 * remove useless code gui/ghkl.vala | 6 ------ 1 file changed, 6 deletions(-) commit 90ccacd8bbd4bdc2fbaf50fd1eace9e74417e2f7 Author: Picca Frédéric-Emmanuel Date: Sun Sep 12 12:26:08 2010 +0200 * finish the transition to vala code for the interface gui/Makefile.am | 3 +- gui/ghkl-callbacks.c | 1262 ------------------------------------------------- gui/ghkl-callbacks.h | 199 -------- gui/ghkl.h | 243 ---------- gui/ghkl.vala | 9 + gui/main.c | 39 -- gui/pseudoaxesframe.h | 55 --- 7 files changed, 10 insertions(+), 1800 deletions(-) commit c9960f95ec610541ab49b1ff0c00ed612d5888e5 Author: Picca Frédéric-Emmanuel Date: Sun Sep 12 10:53:34 2010 +0200 * fix the pseudo axes frames gui/ghkl.vala | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit 34ee59fa605d8321ae03e8ccba5c53f7c657e976 Author: Picca Frédéric-Emmanuel Date: Fri Sep 10 11:35:27 2010 +0200 * work in progress gui/ghkl.vala | 255 +++++++++++++++++++++++------------------------ gui/hkl.vapi | 8 +- gui/pseudoaxesframe.vala | 10 +- 3 files changed, 134 insertions(+), 139 deletions(-) commit 7402e4e761d2730005337bdf03b121c28e54d81d Author: Picca Frédéric-Emmanuel Date: Tue Sep 7 10:17:04 2010 +0200 * now the bench test take an argument for the number of iteration bench-t n test/hkl/bench-t.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) commit 3f6f13f2a409a40eb83765eb1ff0dd2d241f0947 Author: Picca Frédéric-Emmanuel Date: Mon Sep 6 07:44:55 2010 +0200 * still work in progress configure.ac | 1 + gui/Makefile.am | 8 +- gui/ghkl.vala | 1161 +++++++++++++++++++++------------------------- gui/hkl.vapi | 99 ++-- gui/main.c | 2 +- gui/pseudoaxesframe.vala | 4 + 6 files changed, 602 insertions(+), 673 deletions(-) commit dc78a4db56705a166031a02cc399f1b97363269b Author: Picca Frédéric-Emmanuel Date: Thu Sep 2 23:26:15 2010 +0200 * still working gui/ghkl.vala | 371 ++++++++++++++++++++++++----------------------------- gui/hkl.vapi | 31 ++++- hkl/hkl-interval.c | 2 +- 3 files changed, 198 insertions(+), 206 deletions(-) commit b4f0936b93dee22d50b5478f89c713d01273605c Author: Picca Frédéric-Emmanuel Date: Wed Sep 1 22:46:29 2010 +0200 * still working gui/ghkl.vala | 518 +++++++++++++++++++++++++--------------------------------- gui/hkl.vapi | 32 +++- 2 files changed, 256 insertions(+), 294 deletions(-) commit 942a49a3e34d929a987ef42756ca18b0a3125f64 Author: Picca Frédéric-Emmanuel Date: Tue Aug 31 22:59:31 2010 +0200 * still working gui/ghkl.vala | 60 +++++++++++++++++++++++++++-------------------------------- gui/hkl.vapi | 2 ++ 2 files changed, 29 insertions(+), 33 deletions(-) commit 93d19e6182a143bbac4adcbc4080330124bf6645 Author: Picca Frédéric-Emmanuel Date: Mon Aug 30 22:47:07 2010 +0200 * DELETE work in progress gui/ghkl.vala | 761 ++++++++++++++++++++++------------------------------------ gui/hkl.vapi | 36 +++ 2 files changed, 322 insertions(+), 475 deletions(-) commit 703e8046a9d57f58aa944506b83ffaedc3aa768a Author: Frédéric-Emmanuel PICCA Date: Mon Aug 30 18:24:51 2010 +0200 * TO DELETE work in progress gui/Makefile.am | 3 +- gui/ghkl.c | 1349 ------------------------------------------------------- gui/ghkl.vala | 1289 +++++++++++++++++++++++++++++++++++++++++++++------- gui/hkl.vapi | 68 +++ 4 files changed, 1191 insertions(+), 1518 deletions(-) commit f35055c053d0713c8b939b81d2ea69b63676bdef Author: Frédéric-Emmanuel PICCA Date: Mon Aug 30 16:31:25 2010 +0200 * release the 4.0.3 for soleil hkl/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b23aa06dd7941f1fa60e13d6284999ef925b95c5 Author: Picca Frédéric-Emmanuel Date: Sun Aug 29 23:19:30 2010 +0200 * work in progress configure.ac | 1 + gui/Makefile.am | 8 +- gui/ghkl.c | 5 +- gui/ghkl.vala | 1453 +++++++++++++++++++++++++++++++++++++++++++++- gui/hkl.vapi | 71 +++ gui/modelcolumns.h | 161 ----- gui/pseudoaxesframe.c | 234 -------- gui/pseudoaxesframe.vala | 213 +++++++ 8 files changed, 1720 insertions(+), 426 deletions(-) commit be344c27456256f466bae55ebea866ea6eae0d9b Author: Picca Frédéric-Emmanuel Date: Sun Aug 29 13:15:31 2010 +0200 * typo hkl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4e1415b78d28dadeccb711e860610a76a6cb7e46 Author: Picca Frédéric-Emmanuel Date: Sun Aug 29 13:12:04 2010 +0200 * refactoring of the hkl3d tests test/Makefile.am | 4 +- test/TESTS | 18 ++ test/hkl/Makefile.am | 55 +++-- test/hkl/{hkl-test-axis.c => axis-t.c} | 105 ++++----- test/hkl/{bench.c => bench-t.c} | 7 +- test/hkl/{hkl-test-detector.c => detector-t.c} | 47 ++-- test/hkl/{hkl-test-error.c => error-t.c} | 69 +++--- test/hkl/{hkl-test-geometry.c => geometry-t.c} | 137 +++++------- test/hkl/hkl-test-lattice.c | 237 --------------------- test/hkl/hkl-test-parameter.c | 141 ------------ test/hkl/hkl-test.c | 108 ---------- test/hkl/hkl-test.h | 115 ---------- test/hkl/{hkl-test-interval.c => interval-t.c} | 188 +++++++--------- test/hkl/lattice-t.c | 222 +++++++++++++++++++ test/hkl/{main.c => main-t.c} | 0 test/hkl/{hkl-test-matrix.c => matrix-t.c} | 101 ++++----- test/hkl/parameter-t.c | 130 +++++++++++ ...-test-pseudoaxis-e4cv.c => pseudoaxis-e4cv-t.c} | 99 ++++----- ...kl-test-pseudoaxis-e6c.c => pseudoaxis-e6c-t.c} | 55 ++--- ...-test-pseudoaxis-k4cv.c => pseudoaxis-k4cv-t.c} | 67 +++--- ...kl-test-pseudoaxis-k6c.c => pseudoaxis-k6c-t.c} | 76 +++---- test/hkl/{hkl-test-pseudoaxis.c => pseudoaxis-t.c} | 56 ++--- test/hkl/{hkl-test-quaternion.c => quaternion-t.c} | 109 ++++------ test/hkl/{hkl-test-sample.c => sample-t.c} | 215 ++++++++----------- test/hkl/{hkl-test-source.c => source-t.c} | 65 +++--- test/hkl/{hkl-test-vector.c => vector-t.c} | 143 +++++-------- test/hkl3d/Makefile.am | 4 +- test/hkl3d/{main.c => test-t.c} | 0 test/tap/basic.c | 26 +++ test/tap/basic.h | 2 + 30 files changed, 1064 insertions(+), 1537 deletions(-) commit 6a97e3558f1ec75575f025d7427eed5d121171e7 Author: Picca Frédéric-Emmanuel Date: Sat Aug 28 14:59:18 2010 +0200 * remove a dependency to glut configure.ac | 4 +--- gui/hkl3d/Makefile.am | 3 +-- 2 files changed, 2 insertions(+), 5 deletions(-) commit 329c7062d4772264c7d493bf25df2cf873575a80 Author: Picca Frédéric-Emmanuel Date: Sat Aug 28 14:08:09 2010 +0200 * import c-tap-hardness 1.5 test/runtests.c | 2 +- test/tap/libtap.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 6af0f383fe5e796eb8803b742f541335670b2ca0 Author: Picca Frédéric-Emmanuel Date: Wed Aug 25 22:28:28 2010 +0200 * reduce the size of the hkl3d_xxx_free methods hkl3d/hkl3d.cpp | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) commit c3d20a93466d6626d260f5c470d7e6fa2a7d15ff Author: Picca Frédéric-Emmanuel Date: Wed Aug 25 22:27:59 2010 +0200 * better check in hkl3d_config_add_object hkl3d/hkl3d.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8d0f4c5992ffcdde3711d29ac5981cb8ee87d4d4 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 25 18:27:14 2010 +0200 * remove a few memory leaks (still one in g3d) hkl3d/hkl3d.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit a7d853d115a3578a0981ae59e28cdf9b08d41910 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 25 18:09:47 2010 +0200 * remove a valgrind warning hkl3d/hkl3d.cpp | 97 +++++++++++++++++++++++++++------------------------------ 1 file changed, 46 insertions(+), 51 deletions(-) commit e1ebd20e48a9048361752d23bf8beb9cc410e903 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 25 16:43:34 2010 +0200 * now we can remove object from ghkl gui/hkl-gui-3d.cpp | 17 +++++++++++++++++ hkl3d/hkl3d.cpp | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ hkl3d/hkl3d.h | 3 ++- 3 files changed, 70 insertions(+), 1 deletion(-) commit 491109a5b6c75d908cd2c35886c7da953234066d Author: Frédéric-Emmanuel PICCA Date: Wed Aug 25 16:23:42 2010 +0200 * doc hkl3d/hkl3d.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a8832b4fd39fc816de4e426619c15f70405db567 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 25 15:32:00 2010 +0200 * add the fprintf method for all structures hkl3d/hkl3d.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ hkl3d/hkl3d.h | 2 ++ 2 files changed, 48 insertions(+) commit 4af730a5b3991e1d8d53231d58cb940e62ee8e16 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 25 15:31:18 2010 +0200 * typo hkl3d/hkl3d.cpp | 1 - 1 file changed, 1 deletion(-) commit 36af9ab091f83eb0371c70a556eddc25fbac3fb9 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 25 15:30:45 2010 +0200 * remove a memory leak hkl3d/hkl3d.cpp | 2 ++ 1 file changed, 2 insertions(+) commit f25ffa571aef39746d317d7ed85bad56c7a3e24d Author: Frédéric-Emmanuel PICCA Date: Wed Aug 25 14:58:52 2010 +0200 * change the Hkl3DConfig internals and add a test to verify thaht everithings is ok gui/hkl-gui-3d.cpp | 10 +- gui/hkl3d/hkl3d-gui-model.cpp | 22 ++--- hkl3d/hkl3d.cpp | 217 +++++++++++++++++++++--------------------- hkl3d/hkl3d.h | 2 +- test/hkl3d/main.c | 13 ++- 5 files changed, 132 insertions(+), 132 deletions(-) commit b10c562e70454c22b72494671a6229396920c795 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 25 11:57:35 2010 +0200 * change the Hkl3DConfigs structure. gui/hkl-gui-3d.cpp | 18 +++++++------- gui/hkl3d/hkl3d-gui-model.cpp | 26 +++++++++---------- hkl3d/hkl3d.cpp | 58 +++++++++++++++++++++++++++---------------- hkl3d/hkl3d.h | 2 +- test/hkl3d/main.c | 12 ++++----- 5 files changed, 66 insertions(+), 50 deletions(-) commit cd6a1664a8373e83e826eb0a2d22db7fa3c76d46 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 24 17:59:42 2010 +0200 * remove the standalone ghkl3d application gui/hkl3d/Makefile.am | 10 -- gui/hkl3d/ghkl3d.ui | 218 ------------------------------------ gui/hkl3d/hkl3d-gui-application.cpp | 201 --------------------------------- gui/hkl3d/hkl3d-gui-application.h | 81 -------------- gui/hkl3d/main.cpp | 64 ----------- 5 files changed, 574 deletions(-) commit 535978c05b1e1730df37ff98ac6e28cbda76ef48 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 24 17:34:53 2010 +0200 * remove the convex decomposition, (does not work for now) configure.ac | 2 - hkl3d/ConvexDecomposition/ConvexBuilder.cpp | 373 --- hkl3d/ConvexDecomposition/ConvexBuilder.h | 112 - hkl3d/ConvexDecomposition/ConvexDecomposition.cpp | 375 --- hkl3d/ConvexDecomposition/ConvexDecomposition.h | 220 -- hkl3d/ConvexDecomposition/Makefile.am | 43 - hkl3d/ConvexDecomposition/bestfit.cpp | 466 --- hkl3d/ConvexDecomposition/bestfit.h | 65 - hkl3d/ConvexDecomposition/bestfitobb.cpp | 173 -- hkl3d/ConvexDecomposition/bestfitobb.h | 43 - hkl3d/ConvexDecomposition/cd_hull.cpp | 3257 -------------------- hkl3d/ConvexDecomposition/cd_hull.h | 153 - hkl3d/ConvexDecomposition/cd_vector.h | 1185 ------- hkl3d/ConvexDecomposition/cd_wavefront.cpp | 860 ------ hkl3d/ConvexDecomposition/cd_wavefront.h | 62 - hkl3d/ConvexDecomposition/concavity.cpp | 795 ----- hkl3d/ConvexDecomposition/concavity.h | 60 - hkl3d/ConvexDecomposition/fitsphere.cpp | 202 -- hkl3d/ConvexDecomposition/fitsphere.h | 43 - hkl3d/ConvexDecomposition/float_math.cpp | 257 -- hkl3d/ConvexDecomposition/float_math.h | 72 - hkl3d/ConvexDecomposition/meshvolume.cpp | 128 - hkl3d/ConvexDecomposition/meshvolume.h | 45 - hkl3d/ConvexDecomposition/planetri.cpp | 238 -- hkl3d/ConvexDecomposition/planetri.h | 58 - hkl3d/ConvexDecomposition/raytri.cpp | 134 - hkl3d/ConvexDecomposition/raytri.h | 45 - hkl3d/ConvexDecomposition/splitplane.cpp | 306 -- hkl3d/ConvexDecomposition/splitplane.h | 59 - hkl3d/ConvexDecomposition/vlookup.cpp | 307 -- hkl3d/ConvexDecomposition/vlookup.h | 119 - hkl3d/GIMPACTUtils/Makefile.am | 18 - .../btGImpactConvexDecompositionShape.cpp | 234 -- .../btGImpactConvexDecompositionShape.h | 87 - hkl3d/Makefile.am | 8 +- 35 files changed, 2 insertions(+), 10602 deletions(-) commit 65c80bb849da385e006d633b402e41c0097ede7e Author: Frédéric-Emmanuel PICCA Date: Tue Aug 24 12:00:53 2010 +0200 * typo hkl3d/hkl3d.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) commit b37719a168b4540d92eed83575037a401a72cf65 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 24 11:39:10 2010 +0200 * remove useless code hkl3d/hkl3d.cpp | 2 -- 1 file changed, 2 deletions(-) commit f9fd5b895f4cb07384f32500d99c430a36e792a3 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 24 11:30:05 2010 +0200 * refactor the hkl3d test methods test/hkl3d/main.c | 151 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 86 insertions(+), 65 deletions(-) commit 5f2a8a8ee65f7b3706da5601bbc5193824a6511e Author: Frédéric-Emmanuel PICCA Date: Tue Aug 24 10:21:18 2010 +0200 * add a method to get the collision calculation time in millisecond hkl3d/hkl3d.cpp | 9 +++++++-- hkl3d/hkl3d.h | 1 + test/hkl3d/main.c | 9 ++++++--- 3 files changed, 14 insertions(+), 5 deletions(-) commit 99a62466b0a463340003d0b63938237af3061a68 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 23 16:06:34 2010 +0200 * add a few DIFFABS model validation tests test/hkl3d/main.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) commit 7bbd3c70f2c940256680cbeab26c553c813c37ad Author: Frédéric-Emmanuel PICCA Date: Mon Aug 23 15:33:09 2010 +0200 * better test for the collision. test/hkl3d/main.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) commit 79d7246d60f1fb570b74708b067c8c26af1b3093 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 23 15:10:41 2010 +0200 * fix a bug in the save config method hkl3d/hkl3d.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9bf19d187656ac639860b99a0adbdb12f01b4723 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 23 15:10:00 2010 +0200 * update the DIFFABS MODEL to pass all the tests data/diffabs.dae | 266 +++++++++++++++++++++++++++--------------------------- data/diffabs.yaml | 22 ++--- 2 files changed, 144 insertions(+), 144 deletions(-) commit d85f06702c044d985eb1d0c7f0f63b89e6854360 Author: Picca Frédéric-Emmanuel Date: Sun Aug 22 16:27:37 2010 +0200 * add an lcov target to check the coverage of hkl Makefile.am | 23 +++++++++++++++++++ configure.ac | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) commit a3516e201274ca21ea07869b802bc1d27be9b215 Author: Picca Frédéric-Emmanuel Date: Sun Aug 22 11:34:49 2010 +0200 * no need to check for enable_xxx values. configure.ac | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) commit 936e7e66956879b5c4917384792f912517e0fbae Author: Picca Frédéric-Emmanuel Date: Sun Aug 22 10:46:42 2010 +0200 * really check for the yaml usability configure.ac | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 838d6f296af375dedd10dcc4f22c35da680013d7 Author: Picca Frédéric-Emmanuel Date: Sun Aug 22 10:46:20 2010 +0200 * better presentation of the configure.ac configure.ac | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) commit 84fc138155c6f236b08dd825e2e3e44a0c8036c5 Author: Picca Frédéric-Emmanuel Date: Sun Aug 22 10:29:23 2010 +0200 * update to autoconf 2.67 configure.ac | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 9af196bc82163193f8c446858a931515b973542b Author: Picca Frédéric-Emmanuel Date: Sun Aug 22 10:28:13 2010 +0200 * autoupdate a part of the configure.ac configure.ac | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit d0ff750037b5a8365c5ad54a2c593d6c0cdc5629 Author: Picca Frédéric-Emmanuel Date: Sat Aug 21 14:08:06 2010 +0200 * remove a bunch of clang warnings hkl/hkl-sample.c | 2 +- test/hkl/hkl-test-axis.c | 12 ++++++------ test/hkl/hkl-test-geometry.c | 2 +- test/hkl/hkl-test-interval.c | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) commit 84669e2c7228dc94c61eaa43524d03700c693c41 Author: Picca Frédéric-Emmanuel Date: Sat Aug 21 11:53:36 2010 +0200 * remove two memory leaks. still one memory leak in the add_model_from_file, when we concatenate two G3DModels. hkl3d/hkl3d.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit aefe7ec0f60d90492916260c924fd66bb1e594e5 Author: Frédéric-Emmanuel PICCA Date: Fri Aug 20 17:11:34 2010 +0200 * write the unit test for the diffabs diffractometer. for now the test failed but, I need to understand what is the problem with the 3D model. test/hkl3d/main.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) commit 53ff9d7b6bcdfea9d9b6a4e7fcb4b806672905f6 Author: Frédéric-Emmanuel PICCA Date: Fri Aug 20 17:00:59 2010 +0200 * remove useless code. hkl3d/hkl3d.cpp | 4 ---- 1 file changed, 4 deletions(-) commit da26280098cb73ae4ebf856987757649afc8936f Author: Frédéric-Emmanuel PICCA Date: Fri Aug 20 16:47:08 2010 +0200 *correct a bug in the check collision part hkl3d/hkl3d.cpp | 59 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 29 insertions(+), 30 deletions(-) commit 406d12f580dfac5b9375fcba679eae9c73cddf16 Author: Frédéric-Emmanuel PICCA Date: Fri Aug 20 15:59:42 2010 +0200 * forgot the is_colliding in the hkl3d_object_fprintf hkl3d/hkl3d.cpp | 1 + 1 file changed, 1 insertion(+) commit 17bf9a7366eb00de570ee0eac4b16ff6ea4df218 Author: Frédéric-Emmanuel PICCA Date: Fri Aug 20 11:30:46 2010 +0200 * reduce the number of bench cycles test/hkl/bench.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 6220867bd3ace2df267a1bd7f7e3f3b02696942d Author: Frédéric-Emmanuel PICCA Date: Fri Aug 20 11:30:07 2010 +0200 * switch the hkl3d test from c++ to C now we can use hkl3d from hkl. test/hkl3d/Makefile.am | 9 ++++----- test/hkl3d/{main.cpp => main.c} | 6 +++--- 2 files changed, 7 insertions(+), 8 deletions(-) commit 48b940e21bdab3681c51f9524f774afd98449874 Author: Frédéric-Emmanuel PICCA Date: Fri Aug 20 11:29:26 2010 +0200 * fix last missing C++ horrors :) gui/hkl3d/hkl3d-gui-model.cpp | 4 ++-- hkl3d/hkl3d.cpp | 8 ++++---- hkl3d/hkl3d.h | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) commit 3b3e8f8288dab81bc828cc3fb8d25d2cbd9b2e29 Author: Frédéric-Emmanuel PICCA Date: Fri Aug 20 10:49:51 2010 +0200 * hkl3d C++ -> C full transition. hkl3d/hkl3d.h | 43 +++++++++++++++++++------------------------ 1 file changed, 19 insertions(+), 24 deletions(-) commit fa2034219a823998ea4b3ed6cd52ab21b4d64821 Author: Frédéric-Emmanuel PICCA Date: Fri Aug 20 10:42:01 2010 +0200 * witch the Hkl3D class -> C gui/hkl-gui-3d.cpp | 4 +- gui/hkl3d/hkl3d-gui-application.cpp | 52 ++++++++++++------------- gui/hkl3d/hkl3d-gui-application.h | 4 +- gui/hkl3d/hkl3d-gui-model.cpp | 51 ++++++++++++------------- gui/hkl3d/hkl3d-gui-model.h | 10 +++-- gui/hkl3d/hkl3d-gui-scene.cpp | 4 +- gui/hkl3d/hkl3d-gui-scene.h | 4 +- gui/hkl3d/main.cpp | 3 +- hkl3d/hkl3d.cpp | 75 ++++++++++++++++++++++--------------- hkl3d/hkl3d.h | 6 +-- test/hkl3d/main.cpp | 18 +++++---- 11 files changed, 126 insertions(+), 105 deletions(-) commit b38f3e42873e6805de8e3a8fdc05ac631bb5c1dd Author: Picca Frédéric-Emmanuel Date: Thu Aug 19 21:21:37 2010 +0200 * no more methods in Hkl3D. gui/hkl-gui-3d.cpp | 4 +-- gui/hkl3d/hkl3d-gui-application.cpp | 12 +++---- hkl3d/hkl3d.cpp | 67 +++++++++++++++++++------------------ hkl3d/hkl3d.h | 11 +++--- test/hkl3d/main.cpp | 4 +-- 5 files changed, 51 insertions(+), 47 deletions(-) commit bb33e6d122a20b01777b319473493cb2158a5924 Author: Picca Frédéric-Emmanuel Date: Thu Aug 19 09:01:41 2010 +0200 * still removing hkl3d methods hkl3d/hkl3d.cpp | 22 ++++++++++++---------- hkl3d/hkl3d.h | 4 ++-- 2 files changed, 14 insertions(+), 12 deletions(-) commit c3b07520986c966d7e6462c0a11f667b8de4e80d Author: Picca Frédéric-Emmanuel Date: Thu Aug 19 08:50:59 2010 +0200 * remove a bunch of Hkl3D methods gui/hkl-gui-3d.cpp | 4 ++-- gui/hkl3d/hkl3d-gui-model.cpp | 11 ++++++----- hkl3d/hkl3d.cpp | 27 ++++++++++++++------------- hkl3d/hkl3d.h | 17 +++++++++-------- 4 files changed, 31 insertions(+), 28 deletions(-) commit 781ab69ea740a799d4227d1f2a40be17f2690ecb Author: Picca Frédéric-Emmanuel Date: Thu Aug 19 08:31:25 2010 +0200 * remove the hkl3d::apply_transformation hkl3d/hkl3d.cpp | 79 ++++++++++++++++++++++++++++----------------------------- hkl3d/hkl3d.h | 2 -- 2 files changed, 39 insertions(+), 42 deletions(-) commit 0bd7f57bcef4ee77b45f30ff24309caf9470a0e0 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 18 17:30:00 2010 +0200 * remove hkl3d::connect_all_axes gui/hkl-gui-3d.cpp | 2 +- hkl3d/hkl3d.cpp | 26 +++++++++++++------------- hkl3d/hkl3d.h | 11 ++++++++++- 3 files changed, 24 insertions(+), 15 deletions(-) commit eacbea533f76c27985107e392760220f0d8d5564 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 18 17:05:53 2010 +0200 * remove a method from the class hkl3d/hkl3d.cpp | 92 ++++++++++++++++++++++++++++----------------------------- hkl3d/hkl3d.h | 3 +- 2 files changed, 47 insertions(+), 48 deletions(-) commit 680ccca7c332f18f5cddcdfe6b8edd63abfc1423 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 18 16:58:42 2010 +0200 * remove all c++ specific keywords of the headers hkl3d/hkl3d.h | 54 +++++++++++++++++++++++++----------------------------- 1 file changed, 25 insertions(+), 29 deletions(-) commit 6951a991e6ac89de8ef23392132056be892fcede Author: Frédéric-Emmanuel PICCA Date: Wed Aug 18 16:00:34 2010 +0200 * no more reference c++ -> c is in good way hkl3d/hkl3d.cpp | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++------ hkl3d/hkl3d.h | 28 ++++++++++++--- 2 files changed, 118 insertions(+), 16 deletions(-) commit 050e172de3c0a5d57ed6e72365f4842154950a54 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 18 15:53:40 2010 +0200 * be c++ friendly hkl/hkl-macros.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e083f53a56afa0e7f4150763cdc1d83625b129de Author: Frédéric-Emmanuel PICCA Date: Wed Aug 18 14:03:39 2010 +0200 * remove a memory leak in the load_config method hkl3d/hkl3d.cpp | 276 +++++++++++++++++++++++++++++++++----------------------- hkl3d/hkl3d.h | 2 +- 2 files changed, 163 insertions(+), 115 deletions(-) commit 5b6319afd0080c00f1b8608475e9beb756929baf Author: Frédéric-Emmanuel PICCA Date: Wed Aug 18 11:22:06 2010 +0200 * add a few test cases test/hkl3d/main.cpp | 51 ++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 13 deletions(-) commit 7c80d79ababe11fe5a38c9fb65366824b32ae2f6 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 18 11:21:17 2010 +0200 * add a few fprintf methods for the different objects hkl3d/hkl3d.cpp | 18 +++++++++++++++++- hkl3d/hkl3d.h | 6 ++++++ 2 files changed, 23 insertions(+), 1 deletion(-) commit c74b29c8c24cf5494aa4f5b1b50d8275217f3c48 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 18 11:16:42 2010 +0200 * one less vector reference gui/hkl-gui-3d.cpp | 22 +++++------ gui/hkl3d/hkl3d-gui-model.cpp | 34 ++++++++--------- hkl3d/hkl3d.cpp | 89 ++++++++++++++++++++++++++++++++++--------- hkl3d/hkl3d.h | 12 +++++- 4 files changed, 109 insertions(+), 48 deletions(-) commit f773d466c472eef723a02f3083134617ab000642 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 17 17:17:43 2010 +0200 * one less reference to gui/hkl-gui-3d.cpp | 4 +-- gui/hkl3d/hkl3d-gui-model.cpp | 8 +++--- hkl3d/hkl3d.cpp | 59 ++++++++++++++++++++++++++++--------------- hkl3d/hkl3d.h | 10 +++++--- 4 files changed, 50 insertions(+), 31 deletions(-) commit 4137bb2c41953db4ad3e70ad58bba590d2fb3647 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 17 16:46:32 2010 +0200 * still some refactoring hkl3d/hkl3d.h | 75 +++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 42 insertions(+), 33 deletions(-) commit e81ab4a6b6659e3320c0f1f6f2a67031e7236951 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 17 16:28:02 2010 +0200 * doc :) hkl3d/hkl3d.h | 4 ++++ 1 file changed, 4 insertions(+) commit b7bda46bccfeecd071c83ce40f5312601ee48fc0 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 17 16:27:53 2010 +0200 * reorganize a bit the code hkl3d/hkl3d.h | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) commit 56766fb4cf83052c4fe09d5b854444a2005a843e Author: Frédéric-Emmanuel PICCA Date: Tue Aug 17 16:10:32 2010 +0200 * add the Hkl3DStats structure to store a few interesting values. hkl3d/hkl3d.cpp | 25 ++++++++++++++++++------- hkl3d/hkl3d.h | 17 +++++++++++++++++ 2 files changed, 35 insertions(+), 7 deletions(-) commit 5ae5aab55d37f3898e3dbad1060af0b2cddc5168 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 17 15:58:47 2010 +0200 * fileNameModel -> filename gui/hkl-gui-3d.cpp | 2 +- hkl3d/hkl3d.cpp | 6 +++--- hkl3d/hkl3d.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) commit 8781f8d5e9622479215cf6198775caec77e33fb0 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 17 14:50:18 2010 +0200 * remove more useless code hkl3d/hkl3d.h | 16 ---------------- 1 file changed, 16 deletions(-) commit 13582382ae7a2204eb234e9af191688c4012143b Author: Frédéric-Emmanuel PICCA Date: Tue Aug 17 14:42:50 2010 +0200 * remove the serialization code configure.ac | 3 - hkl3d/Makefile.am | 8 +- hkl3d/Serialize/BulletFileLoader/Makefile.am | 74 -- hkl3d/Serialize/BulletFileLoader/bChunk.cpp | 75 -- hkl3d/Serialize/BulletFileLoader/bChunk.h | 90 -- hkl3d/Serialize/BulletFileLoader/bCommon.h | 39 - hkl3d/Serialize/BulletFileLoader/bDNA.cpp | 636 ---------- hkl3d/Serialize/BulletFileLoader/bDNA.h | 110 -- hkl3d/Serialize/BulletFileLoader/bDefines.h | 140 --- hkl3d/Serialize/BulletFileLoader/bFile.cpp | 1322 -------------------- hkl3d/Serialize/BulletFileLoader/bFile.h | 153 --- hkl3d/Serialize/BulletFileLoader/btBulletFile.cpp | 384 ------ hkl3d/Serialize/BulletFileLoader/btBulletFile.h | 78 -- hkl3d/Serialize/BulletFileLoader/bullet.h | 69 - hkl3d/Serialize/BulletFileLoader/bullet_Common.h | 77 -- hkl3d/Serialize/BulletFileLoader/bullet_ListBase.h | 40 - .../BulletFileLoader/bullet_PointerArray.h | 41 - .../BulletFileLoader/bullet_btBvhSubtreeInfoData.h | 42 - .../BulletFileLoader/bullet_btCapsuleShapeData.h | 42 - .../bullet_btCollisionObjectDoubleData.h | 64 - .../bullet_btCollisionObjectFloatData.h | 63 - .../BulletFileLoader/bullet_btCollisionShapeData.h | 41 - .../bullet_btCompoundShapeChildData.h | 43 - .../BulletFileLoader/bullet_btCompoundShapeData.h | 43 - .../bullet_btConeTwistConstraintData.h | 51 - .../BulletFileLoader/bullet_btConstraintInfo1.h | 40 - .../bullet_btConvexHullShapeData.h | 44 - .../bullet_btConvexInternalShapeData.h | 45 - .../BulletFileLoader/bullet_btCylinderShapeData.h | 42 - .../bullet_btGImpactMeshShapeData.h | 46 - .../bullet_btGeneric6DofConstraintData.h | 50 - .../bullet_btHingeConstraintDoubleData.h | 53 - .../bullet_btHingeConstraintFloatData.h | 53 - .../BulletFileLoader/bullet_btIntIndexData.h | 39 - .../bullet_btMatrix3x3DoubleData.h | 40 - .../BulletFileLoader/bullet_btMatrix3x3FloatData.h | 40 - .../BulletFileLoader/bullet_btMeshPartData.h | 45 - .../bullet_btMultiSphereShapeData.h | 43 - .../bullet_btOptimizedBvhNodeDoubleData.h | 45 - .../bullet_btOptimizedBvhNodeFloatData.h | 45 - .../BulletFileLoader/bullet_btPhysicsSystem.h | 42 - .../bullet_btPoint2PointConstraintDoubleData.h | 43 - .../bullet_btPoint2PointConstraintFloatData.h | 43 - .../BulletFileLoader/bullet_btPositionAndRadius.h | 41 - .../bullet_btQuantizedBvhDoubleData.h | 51 - .../bullet_btQuantizedBvhFloatData.h | 51 - .../bullet_btQuantizedBvhNodeData.h | 41 - .../bullet_btRigidBodyDoubleData.h | 63 - .../BulletFileLoader/bullet_btRigidBodyFloatData.h | 62 - .../BulletFileLoader/bullet_btShortIntIndexData.h | 40 - .../bullet_btShortIntIndexTripletData.h | 40 - .../bullet_btSliderConstraintData.h | 49 - .../bullet_btStaticPlaneShapeData.h | 45 - .../bullet_btStridingMeshInterfaceData.h | 43 - .../bullet_btTransformDoubleData.h | 42 - .../BulletFileLoader/bullet_btTransformFloatData.h | 42 - .../BulletFileLoader/bullet_btTriangleInfoData.h | 42 - .../bullet_btTriangleInfoMapData.h | 52 - .../bullet_btTriangleMeshShapeData.h | 47 - .../bullet_btTypedConstraintData.h | 49 - .../BulletFileLoader/bullet_btVector3DoubleData.h | 39 - .../BulletFileLoader/bullet_btVector3FloatData.h | 39 - hkl3d/Serialize/BulletWorldImporter/Makefile.am | 18 - .../BulletWorldImporter/btBulletWorldImporter.cpp | 1205 ------------------ .../BulletWorldImporter/btBulletWorldImporter.h | 180 --- hkl3d/Serialize/Makefile.am | 1 - hkl3d/hkl3d.cpp | 7 +- hkl3d/hkl3d.h | 3 - 68 files changed, 6 insertions(+), 6812 deletions(-) commit e90b41ed86ba70ca7c79bfcbe890f5b0ec351169 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 17 14:00:02 2010 +0200 * for now restore the old diffabs model. data/diffabs.dae | 305 +++++++++++++++++++++++------------------------------- data/diffabs.yaml | 2 +- 2 files changed, 133 insertions(+), 174 deletions(-) commit 0b3bdf8e0af37b3178e888b6a066b097fb763587 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 17 13:31:46 2010 +0200 * update the hklGui3d to connect axes after an add_from_file call gui/hkl-gui-3d.cpp | 2 ++ hkl3d/hkl3d.cpp | 24 ++++++++++++------------ hkl3d/hkl3d.h | 1 + 3 files changed, 15 insertions(+), 12 deletions(-) commit e2d276f05b1546538ecb2098000bf57cd7ecf33a Author: Frédéric-Emmanuel PICCA Date: Tue Aug 17 13:15:04 2010 +0200 * rework the load_config, add a connect_axis method and more... Conflicts: hkl3d/hkl3d.h gui/hkl-gui-3d.cpp | 2 +- hkl3d/hkl3d.cpp | 678 +++++++++-------------------------------------------- hkl3d/hkl3d.h | 16 +- 3 files changed, 125 insertions(+), 571 deletions(-) commit 542c0c5a590e5b73bd90d1a094a4859a965dc9b4 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 17 13:31:06 2010 +0200 *fix the the loadConfig bug data/diffabs.yaml | 40 +++++++++++++-------------- gui/hkl3d/main.cpp | 2 -- hkl3d/hkl3d.cpp | 79 ++++++++++++++++++++++++++++++++++++++++-------------- hkl3d/hkl3d.h | 3 +++ 4 files changed, 82 insertions(+), 42 deletions(-) commit 945c741918ada8d363db1acc74d49afd8effe215 Author: Oussama Sboui Date: Wed Aug 4 10:57:53 2010 +0200 * fixe typos hkl3d/hkl3d.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit b64a0f50627fe32f673a913325ed82f7d1b689d2 Author: Oussama Sboui Date: Wed Aug 4 10:56:32 2010 +0200 * add an fprintf method for the Hkl3DObject hkl3d/hkl3d.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) commit a6b94de0548b2e9934f0ad24f0d7a88cb27213b7 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 17 13:28:26 2010 +0200 * applicate name method transform Conflicts: gui/hkl3d/main.cpp gui/hkl-gui-3d.cpp | 2 +- gui/hkl3d/main.cpp | 1 - hkl3d/hkl3d.cpp | 426 +++++++++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 366 insertions(+), 63 deletions(-) commit 11e6324f044d7375c99db40c6c2a1e945d8a2fdd Author: Oussama Sboui Date: Tue Aug 3 11:47:45 2010 +0200 * choose suitable name for a method hkl3d/hkl3d.h | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) commit 1cba9dfecb5325df58f6350ee54de0dc2d2bfaa4 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 17 13:00:28 2010 +0200 * perform the config's load by using events (see load_config_model method) hkl3d/hkl3d.cpp | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- hkl3d/hkl3d.h | 1 + 2 files changed, 81 insertions(+), 1 deletion(-) commit a919de683a82bbbd2bb641a8354571174f235a64 Author: Oussama Sboui Date: Thu Jul 8 14:01:02 2010 +0200 * set the init scale to 7 and the scale min to 1 gui/hkl3d/hkl3d-gui-view.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 9d93b0340f000c8328a78c0aa885d9358bcd1609 Author: Oussama Sboui Date: Thu Jul 8 13:57:52 2010 +0200 * rectify orthoView method gui/hkl3d/hkl3d-gui-scene.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 189c972f73097ad94097a6008d9f765e82b88d4e Author: Frédéric-Emmanuel PICCA Date: Tue Aug 17 11:50:57 2010 +0200 * fix the hkl3d test test/hkl3d/main.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) commit 6aa6c9721c0f6be27c3d605447131744121700aa Author: Frédéric-Emmanuel PICCA Date: Thu Aug 12 16:54:55 2010 +0200 * correct the is colliding method. hkl3d/hkl3d.cpp | 2 +- test/hkl3d/main.cpp | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) commit 387229cffd607cad5479d5bfb8475972e3eb2aeb Author: Frédéric-Emmanuel PICCA Date: Thu Aug 12 16:54:19 2010 +0200 * remove a memory leak hkl3d/hkl3d.cpp | 2 -- 1 file changed, 2 deletions(-) commit ca3fcbd8d803cddb9670572d5748fc3329ddbac9 Author: Frédéric-Emmanuel PICCA Date: Thu Aug 12 15:52:23 2010 +0200 * instrument the hkl3d unit test with c-tap-hadness you can find c-tap-hardness here: http://www.eyrie.org/~eagle/software/c-tap-harness/ NEWS | 1 + configure.ac | 1 + data/Makefile.am | 4 +- data/diffabs.dae | 305 +++++++------ hkl3d/hkl3d.cpp | 10 +- test/Makefile.am | 16 +- test/TESTS | 1 + test/hkl3d/Makefile.am | 19 +- test/hkl3d/main.cpp | 18 +- test/runtests.c | 1116 ++++++++++++++++++++++++++++++++++++++++++++++++ test/tap/Makefile.am | 14 + test/tap/basic.c | 484 +++++++++++++++++++++ test/tap/basic.h | 125 ++++++ test/tap/libtap.sh | 178 ++++++++ 14 files changed, 2138 insertions(+), 154 deletions(-) commit 448bf08f1ccdfe4411018f085d8b73f3dbd83bbd Author: Picca Frédéric-Emmanuel Date: Wed Aug 11 22:44:49 2010 +0200 * reduce the exposition of bullet in the hkl3d library gui/hkl3d/hkl3d-gui-model.cpp | 28 +++++++++++----------------- hkl3d/hkl3d.cpp | 33 +++++++++++++++++++++++++++++++++ hkl3d/hkl3d.h | 7 ++++++- 3 files changed, 50 insertions(+), 18 deletions(-) commit a295ce16faa1c0bee63d43ad3c5c780475495796 Author: Picca Frédéric-Emmanuel Date: Fri Aug 6 22:26:51 2010 +0200 * doc hkl/hkl-unit.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit 4224d2f341d8b34f08ed7204f6671fc8d66411c7 Author: Picca Frédéric-Emmanuel Date: Wed Aug 4 17:46:47 2010 +0200 * bugs bugs/issue-80f8e725bce85678418b7d3601247605d2162982.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit b50ca091026fbdf32f9e61aea2c710e57fd4c764 Author: Picca Frédéric-Emmanuel Date: Wed Aug 4 17:43:52 2010 +0200 * update the author list AUTHORS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 6d7130c6c24acf29c10be49105261741fbb87fca Author: Picca Frédéric-Emmanuel Date: Wed Aug 4 17:40:02 2010 +0200 * bugs ...ue-80f8e725bce85678418b7d3601247605d2162982.yaml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) commit e688947e216336ab5b38b312b038d6886b0b3fd7 Author: Picca Frédéric-Emmanuel Date: Fri Jul 30 21:47:45 2010 +0200 * put the right figure names Documentation/figures/{3S+1D_pov.pov => 3S+1D.pov} | 0 Documentation/figures/{4S+2D_pov.pov => 4S+2D.pov} | 0 ...+2D_reciproque_pov.pov => 4S+2D_reciproque.pov} | 0 ...D_reciproque2_pov.pov => 4S+2D_reciproque2.pov} | 0 ...D_reciproque3_pov.pov => 4S+2D_reciproque3.pov} | 0 ...D_reciproque4_pov.pov => 4S+2D_reciproque4.pov} | 0 Documentation/figures/Makefile.am | 24 +++++++++++----------- Documentation/hkl.lyx | 14 ++++++------- 8 files changed, 19 insertions(+), 19 deletions(-) commit 35f3a106aa2e1cb6cb60eca4b2f15e1619272748 Author: Picca Frédéric-Emmanuel Date: Mon Aug 9 22:40:22 2010 +0200 * work in progress gui/ghkl-callbacks.c | 98 +++++----- gui/ghkl.c | 517 ++++++++++++++++++++++++++++++-------------------- gui/ghkl.h | 16 +- gui/pseudoaxesframe.c | 1 + 4 files changed, 372 insertions(+), 260 deletions(-) commit 59f03f1629eada7ada70a45e4a76d4d2685f3805 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 3 17:27:37 2010 +0200 * start to implemente a generic freecad diffractometer generator Documentation/figures/diffractometers.py | 157 +++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) commit 714bf39a6cd7efae95bd5f4bfcfb692672cf61c5 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 3 16:21:36 2010 +0200 * add more freecad figures Documentation/figures/B_a.py | 43 +++++++++++++++++++++++++++++++++++++++++++ Documentation/figures/B_b.py | 25 +++++++++++++++++++++++++ 2 files changed, 68 insertions(+) commit 4a3d5f307f31ddd223977c1aa53da3204a446dee Author: Frédéric-Emmanuel PICCA Date: Tue Aug 3 15:06:20 2010 +0200 * switch from FCMcro to .py Documentation/figures/crystal.FCMacro | 76 ----------------------------------- Documentation/figures/crystal.py | 36 +++++++++++++++++ 2 files changed, 36 insertions(+), 76 deletions(-) commit d16830f31c8dbc349b3071fdb46fbc068f1fb395 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 2 17:55:28 2010 +0200 * still working on the FreeCAD transition. .../figures/{arrows.FCMacro => arrows.py} | 16 +++-- Documentation/figures/bravais.py | 35 ++++++++++ Documentation/figures/crystal.FCMacro | 76 ++++++++++++++++++++++ 3 files changed, 120 insertions(+), 7 deletions(-) commit 1a4f65672108c7684d98202f65c3064f08d42258 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 2 16:19:28 2010 +0200 * start to translate the povray scripts in freecad Macros (python) this way it will be possible to use the freecad 3D models for the anticollision system, I will use also thoses macros to generate screenshoot for the documentation. Documentation/figures/arrows.FCMacro | 112 +++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) commit 487e5de9f1d066d1335c886eed153e1f5ab8b17a Author: Frédéric-Emmanuel PICCA Date: Fri Jul 30 18:19:41 2010 +0200 * set up properly the camera instead of defining a, b, c Documentation/figures/test.pov | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) commit 5671ced4cd25ca5e476474fd82b3d9423c73cd37 Author: Frédéric-Emmanuel PICCA Date: Fri Jul 30 18:09:56 2010 +0200 * define the soleil coordinates a = -x b = -z c = y Signed-off-by: Frédéric-Emmanuel PICCA Documentation/figures/test.pov | 42 ++++++++++++++---------------------------- 1 file changed, 14 insertions(+), 28 deletions(-) commit a1a059d8a6f79c5529d9e083c0a192a967641716 Author: Frédéric-Emmanuel PICCA Date: Fri Jul 30 17:24:47 2010 +0200 * add the povray figures and the begining of a Makefile.am rules Documentation/Makefile.am | 2 +- Documentation/figures/3S+1D_pov.pov | 164 +++++++++++++++++++++ Documentation/figures/4S+2D_pov.pov | 187 ++++++++++++++++++++++++ Documentation/figures/4S+2D_reciproque2_pov.pov | 100 +++++++++++++ Documentation/figures/4S+2D_reciproque3_pov.pov | 112 ++++++++++++++ Documentation/figures/4S+2D_reciproque4_pov.pov | 127 ++++++++++++++++ Documentation/figures/4S+2D_reciproque_pov.pov | 101 +++++++++++++ Documentation/figures/B_a.pov | 73 +++++++++ Documentation/figures/B_b.pov | 58 ++++++++ Documentation/figures/B_b3_y.pov | 72 +++++++++ Documentation/figures/Makefile.am | 31 ++++ Documentation/figures/arrows.inc | 139 ++++++++++++++++++ Documentation/figures/bravais.inc | 35 +++++ Documentation/figures/cristal.ini | 8 + Documentation/figures/cristal.pov | 72 +++++++++ Documentation/figures/test.pov | 43 ++++++ configure.ac | 4 + 17 files changed, 1327 insertions(+), 1 deletion(-) commit 8fe4b115a063b423e2b69d1c827fbea72a1b2c75 Author: Frédéric-Emmanuel PICCA Date: Fri Jul 30 17:23:12 2010 +0200 * use ditz to keep the bug list in a human readable format. ...e-66160af59e044b15e5d662aa382c2805d516d7d2.yaml | 22 ++++++++++++++++++++++ bugs/project.yaml | 12 ++++++++++++ 2 files changed, 34 insertions(+) commit cdcc17584183d23ba49cd14f43b10d1c5bcdd68d Author: Frédéric-Emmanuel PICCA Date: Tue Jul 27 09:26:36 2010 +0200 * update the NEWS file NEWS | 1 + 1 file changed, 1 insertion(+) commit 72db6d701fac9730606032ee19f67a4cc9279913 Author: Frédéric-Emmanuel PICCA Date: Mon Jul 26 11:26:03 2010 +0200 * update the documentation to reflect the new HklGeometryConfig. Documentation/hkl.texi | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) commit e6488ff1a793cfec0ba2a05dd4dfbc584c64ecb2 Author: Picca Frédéric-Emmanuel Date: Sat Jul 24 22:07:05 2010 +0200 * add the Eulerian 4 circles horizontal geometry refactor also the eulerian 4 circles vertical to use the same code for vertical and horizontal. Documentation/hkl.texi | 101 ++++++++++++++++++++- hkl/Makefile.am | 6 +- hkl/hkl-geometry-factory.c | 18 ++++ hkl/hkl-geometry-factory.h | 1 + hkl/hkl-geometry.h | 3 +- hkl/hkl-pseudoaxis-common-q.c | 13 +-- ...udoaxis-e4cv-hkl.c => hkl-pseudoaxis-e4c-hkl.c} | 4 +- ...udoaxis-e4cv-psi.c => hkl-pseudoaxis-e4c-psi.c} | 4 +- ...{hkl-pseudoaxis-e4cv.h => hkl-pseudoaxis-e4c.h} | 10 +- hkl/hkl-pseudoaxis-factory.c | 7 +- test/hkl/hkl-test-pseudoaxis-e4cv.c | 2 +- test/hkl/hkl-test-pseudoaxis.c | 12 ++- 12 files changed, 151 insertions(+), 30 deletions(-) commit 3271a5ed2d5368f09c780c5d5b3fe10447947b09 Author: Frédéric-Emmanuel PICCA Date: Wed Jul 7 10:29:19 2010 +0200 * real select comportement. we must unselect all configs's objects. gui/hkl-gui-3d.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) commit 309163a0c24d4005ed53edc30dc188db71378e65 Author: Frédéric-Emmanuel PICCA Date: Wed Jul 7 10:18:53 2010 +0200 * fix the hide when an object was selected. do not show an hidden selected object. gui/hkl3d/hkl3d-gui-model.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit d7eb663d16e8736f8ae4574893d5b0913cf979e0 Author: Frédéric-Emmanuel PICCA Date: Wed Jul 7 10:18:26 2010 +0200 * fix the build of ghkl to relinkg if a depending library was modify. use the _LDADD for this purpose. gui/Makefile.am | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) commit 1bce817ac3edf29e1ceca2e974f7cbb1f93b4e24 Author: Frédéric-Emmanuel PICCA Date: Wed Jul 7 10:17:47 2010 +0200 *use the highlight mode in ghkl gui/hkl-gui-3d.cpp | 30 +++++++++++++++++++++++++++++- gui/hkl-gui-3d.h | 1 + 2 files changed, 30 insertions(+), 1 deletion(-) commit ce35c4a4d383886cc03dec34b427ba73a773af22 Author: Oussama Sboui Date: Tue Jul 6 18:20:44 2010 +0200 * first highlight version gui/hkl3d/hkl3d-gui-model.cpp | 93 +++++++++++++++++++++++++++++++++++++++---- gui/hkl3d/hkl3d-gui-model.h | 8 ++-- hkl3d/hkl3d.cpp | 1 + hkl3d/hkl3d.h | 1 + 4 files changed, 92 insertions(+), 11 deletions(-) commit 323bffef0b8d3545bf069b8b162a664e8592b495 Author: Frédéric-Emmanuel PICCA Date: Tue Jul 6 12:09:51 2010 +0200 * do not save the config file (not yet ready) data/cristal4C.yaml | 114 ++++++++++++++++++++++++++-------------------------- gui/hkl-gui-3d.cpp | 4 +- 2 files changed, 59 insertions(+), 59 deletions(-) commit 6ac0d6ccd894eb4ce868ee68b0cd5fdd59ac0256 Author: Frédéric-Emmanuel PICCA Date: Mon Jul 5 16:21:32 2010 +0200 * save the config file each time a modification is done. gui/hkl-gui-3d.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 06d54e2cdca89afeadcc4316fa5b9d58809029f8 Author: Frédéric-Emmanuel PICCA Date: Mon Jul 5 16:20:50 2010 +0200 * save the config filename in the hkl3d structure. hkl3d/hkl3d.cpp | 39 +++++++++++++++++++++++++-------------- hkl3d/hkl3d.h | 1 + 2 files changed, 26 insertions(+), 14 deletions(-) commit 85b06ef9d57f583a884b600ce6ec59cc2d29833a Author: Picca Frédéric-Emmanuel Date: Sun Jul 4 23:15:52 2010 +0200 * still working on the C++ -> C conversion gui/ghkl-callbacks.c | 1565 ++++++++++++++++++++++++++++---------------------- gui/ghkl-callbacks.h | 243 +++++--- gui/ghkl.c | 763 +++++++++++++++--------- gui/ghkl.h | 146 +++-- 4 files changed, 1616 insertions(+), 1101 deletions(-) commit dc668d9829bedede5677230313cf520ebcb931b0 Author: Frédéric-Emmanuel PICCA Date: Fri Jul 2 14:17:47 2010 +0200 * now we can hide all models from a file model at once. gui/hkl-gui-3d.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) commit 41f24839ea99715b907f2ff986d30882cf064913 Author: Frédéric-Emmanuel PICCA Date: Fri Jul 2 12:31:29 2010 +0200 * now we can add pieces from the ghkl interface gui/3d.ui | 138 +++++++++++++++++++++++++++++++++++++++++++++-------- gui/hkl-gui-3d.cpp | 46 ++++++++++++++++++ gui/hkl-gui-3d.h | 9 ++++ 3 files changed, 174 insertions(+), 19 deletions(-) commit eca2dc9e68a1a79561a78b0ef827a88b939f581d Author: Frédéric-Emmanuel PICCA Date: Fri Jul 2 11:59:57 2010 +0200 * no more segfault when adding a model file. hkl3d/hkl3d.cpp | 3 ++- hkl3d/hkl3d.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) commit c4b62a8770524c54f5258346a6c0d1cbeda4ef64 Author: Frédéric-Emmanuel PICCA Date: Fri Jul 2 08:58:49 2010 +0200 * fix a crash when we can not read the 3d model file. hkl3d/hkl3d.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) commit 6cbcfcd8af8787fc1a56796b6e2c1acbd8da86fb Author: Picca Frédéric-Emmanuel Date: Thu Jul 1 23:32:15 2010 +0200 * work in progress gui/ghkl-callbacks.c | 661 +++++++++++++++++++++++++++++---------------------- gui/ghkl-callbacks.h | 80 +++++-- 2 files changed, 436 insertions(+), 305 deletions(-) commit f51567e641a3349e64f9ab5147e7d9e906652f67 Author: Frédéric-Emmanuel PICCA Date: Thu Jul 1 15:12:57 2010 +0200 * create an Hkl3D::hide_object method. gui/hkl-gui-3d.cpp | 2 +- gui/hkl3d/hkl3d-gui-model.cpp | 3 --- hkl3d/hkl3d.cpp | 58 +++++++++++++++++++------------------------ hkl3d/hkl3d.h | 2 +- 4 files changed, 27 insertions(+), 38 deletions(-) commit 8e1256fce5718509126c89be8f915caeee6a1498 Author: Oussama Sboui Date: Fri Jun 25 13:55:31 2010 +0100 *rectify mistakes in orthoview method Conflicts: TODO gui/ghkl3d/hkl3d-gui-model.cpp gui/hkl3d/hkl3d-gui-scene.cpp gui/hkl3d/hkl3d-gui-scene.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 73081127557518da2d6e90e95756512cdf86239d Author: Oussama Sboui Date: Fri Jun 25 10:46:38 2010 +0200 *add the zoom mouse scroll gui/hkl3d/hkl3d-gui-scene.cpp | 2 ++ gui/hkl3d/hkl3d-gui-view.cpp | 28 ++++++++++++++++++++++++++++ gui/hkl3d/hkl3d-gui-view.h | 1 + 3 files changed, 31 insertions(+) commit 17aa5f7c479c6eb71cdbdf838d6cea1c4e2d3633 Author: Oussama Sboui Date: Fri Jun 25 09:58:17 2010 +0200 *add translation view gui/hkl3d/hkl3d-gui-view.cpp | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) commit 0709bb42492e7afe4a88e269d5e107689dd41747 Author: Oussama Sboui Date: Wed Jun 23 17:11:40 2010 +0100 * add orth view Conflicts: gui/ghkl3d/hkl3d-gui-model.cpp gui/ghkl3d/main.cpp gui/hkl3d/hkl3d-gui-model.h gui/hkl3d/hkl3d-gui-model.cpp | 6 ++++-- gui/hkl3d/hkl3d-gui-model.h | 4 +++- gui/hkl3d/hkl3d-gui-scene.cpp | 21 ++++++++++++++++++--- gui/hkl3d/hkl3d-gui-scene.h | 3 ++- gui/hkl3d/hkl3d-gui-view.cpp | 9 +++++++++ gui/hkl3d/hkl3d-gui-view.h | 2 +- 6 files changed, 37 insertions(+), 8 deletions(-) commit 2f8785c760d689223e0d7cea9efdad73559c9d28 Author: Picca Frédéric-Emmanuel Date: Sun Jun 27 13:10:00 2010 +0200 * start to implement the pseudo axes frames. gui/ghkl.c | 66 +++++++++++++++++++++++++++++++++++++------------------------- gui/ghkl.h | 3 ++- 2 files changed, 41 insertions(+), 28 deletions(-) commit b60f3bfd604028ba4415f9bbaded3469401d5404 Author: Picca Frédéric-Emmanuel Date: Sun Jun 27 13:09:28 2010 +0200 * add the signals gui/ghkl.c | 265 +++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 151 insertions(+), 114 deletions(-) commit d26d5adee35888aade6fb6ba1fb1ea72d32c371c Author: Picca Frédéric-Emmanuel Date: Sun Jun 27 12:43:57 2010 +0200 * put all the ghkl.h callbacks in their own file ghkl-callbacks.h gui/ghkl-callbacks.h | 102 ++++++++++++++++++++++++++++++++++++++ gui/ghkl.c | 1 + gui/ghkl.h | 135 +++++++++++---------------------------------------- 3 files changed, 132 insertions(+), 106 deletions(-) commit bc038ed8003dc9947ecbbac085dc7767a294d5ee Author: Picca Frédéric-Emmanuel Date: Sat Jun 26 15:46:11 2010 +0200 * work in progress configure.ac | 6 +- gui/Makefile.am | 18 +- gui/ghkl-callbacks.c | 962 +++++++++++++++++++++++++++++++++++++++++++++++ gui/ghkl-callbacks.cpp | 962 ----------------------------------------------- gui/{ghkl.cpp => ghkl.c} | 329 +++++++++------- gui/ghkl.h | 433 +++++++++++---------- gui/ghkl.vala | 32 ++ gui/{main.cpp => main.c} | 14 +- gui/pseudoaxesframe.c | 233 ++++++++++++ gui/pseudoaxesframe.cpp | 202 ---------- gui/pseudoaxesframe.h | 90 +---- 11 files changed, 1674 insertions(+), 1607 deletions(-) commit 2ad80d55f7a924d3977c6145100b505735495dc5 Author: Picca Frédéric-Emmanuel Date: Sat Jun 26 11:33:07 2010 +0200 * increase the timeout. need to figure out why I need to increase it all the time depending on the computer. gui/hkl3d/hkl3d-gui-scene.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b96a7591db6db9e0ca8b52d91e75759753cff6b7 Author: Picca Frédéric-Emmanuel Date: Sat Jun 26 11:32:11 2010 +0200 * add the Treeview for the configuration. now we can select pieces one by one. gui/3d.ui | 70 ++++++++++++++++++++++++++++++++++++++++++++---------- gui/hkl-gui-3d.cpp | 66 ++++++++++++++++++++++++++++++++++++++++++++++---- gui/hkl-gui-3d.h | 24 +++++++------------ 3 files changed, 128 insertions(+), 32 deletions(-) commit 9619c50069ec0d667b98357b9c98190f6c514f36 Author: Frédéric-Emmanuel PICCA Date: Wed Jun 23 11:18:54 2010 +0200 * start to implement a dedicated 3d view with it's own .ui file gui/3d.ui | 45 ++++++++++++++++++++++ gui/Makefile.am | 22 ++++++----- gui/hkl-gui-3d.cpp | 74 +++++++++++++++++++++++++++++++++++ gui/hkl-gui-3d.h | 89 +++++++++++++++++++++++++++++++++++++++++++ gui/hkl-gui-callbacks.cpp | 30 +++++++-------- gui/hkl-gui.cpp | 13 ++----- gui/hkl-gui.h | 6 +-- gui/hkl3d/hkl3d-gui-scene.cpp | 2 +- 8 files changed, 243 insertions(+), 38 deletions(-) commit 0ce5ef58537fcaabee3acace86d740e90921486b Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 16:52:54 2010 +0200 * only indentation gui/hkl3d/GL_ShapeDrawer.cpp | 869 +++++++++++++++++-------------------------- gui/hkl3d/GL_ShapeDrawer.h | 98 +++-- 2 files changed, 413 insertions(+), 554 deletions(-) commit 551f7cad89520ed096587f7f910eaae76d156616 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 16:10:11 2010 +0200 * remove plenty of useless code. configure.ac | 1 - gui/Makefile.am | 2 +- gui/OpenGL/DebugCastResult.h | 88 --- gui/OpenGL/DemoApplication.cpp | 1316 --------------------------------- gui/OpenGL/DemoApplication.h | 246 ------ gui/OpenGL/GLDebugDrawer.cpp | 140 ---- gui/OpenGL/GLDebugDrawer.h | 38 - gui/OpenGL/GLDebugFont.cpp | 987 ------------------------- gui/OpenGL/GLDebugFont.h | 27 - gui/OpenGL/GL_DialogDynamicsWorld.cpp | 739 ------------------ gui/OpenGL/GL_DialogDynamicsWorld.h | 91 --- gui/OpenGL/GL_DialogWindow.cpp | 336 --------- gui/OpenGL/GL_DialogWindow.h | 283 ------- gui/OpenGL/GL_ShapeDrawer.cpp | 985 ------------------------ gui/OpenGL/GL_ShapeDrawer.h | 70 -- gui/OpenGL/GL_Simplex1to4.cpp | 73 -- gui/OpenGL/GL_Simplex1to4.h | 40 - gui/OpenGL/GlutDemoApplication.cpp | 71 -- gui/OpenGL/GlutDemoApplication.h | 34 - gui/OpenGL/GlutStuff.cpp | 109 --- gui/OpenGL/GlutStuff.h | 84 --- gui/OpenGL/Makefile.am | 33 - gui/OpenGL/RenderTexture.cpp | 86 --- gui/OpenGL/RenderTexture.h | 73 -- gui/OpenGL/Win32AppMain.cpp | 402 ---------- gui/OpenGL/Win32DemoApplication.cpp | 79 -- gui/OpenGL/Win32DemoApplication.h | 40 - 27 files changed, 1 insertion(+), 6472 deletions(-) commit 70a654a7d8038c8e5890f8716eadbde9a5df3c98 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 16:08:21 2010 +0200 * remove a reference to libbulletdynamics in the hkl3d-gui part. bullet dynamic is still necessary due to the GL_shapeDrawer. gui/Makefile.am | 1 + gui/hkl3d/Makefile.am | 3 ++- gui/hkl3d/hkl3d-gui-model.cpp | 10 +++++----- 3 files changed, 8 insertions(+), 6 deletions(-) commit 906c5a5b1b9e6bc833a160c3c1d740c1f7f67879 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 15:20:40 2010 +0200 * prepare for the OpenGL (libbulletopenglsupport) supression. gui/hkl3d/GL_ShapeDrawer.cpp | 972 +++++++++++++++++++++++++++++++++++++++++++ gui/hkl3d/GL_ShapeDrawer.h | 86 ++++ gui/hkl3d/Makefile.am | 6 +- 3 files changed, 1061 insertions(+), 3 deletions(-) commit 89e42c2255400866d7f407784e7bfe0bc25ac12d Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 14:59:12 2010 +0200 * typo gui/hkl3d/hkl3d-gui-model.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) commit c0ac8d254a917ebd8068575e2ad8890369ba8510 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 14:59:07 2010 +0200 * remove the GLDebugDrawer dependency. gui/hkl3d/hkl3d-gui-model.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) commit a8e95580bd9e3661fe2ad63c589a1894ff3a907f Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 14:39:47 2010 +0200 * prepare for removing of the GLDebug code. gui/hkl3d/hkl3d-gui-model.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ gui/hkl3d/hkl3d-gui-model.h | 6 ++++++ 2 files changed, 49 insertions(+) commit 87527ef7d4a1f7d071f47d06942d316f790782e9 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 11:03:22 2010 +0200 * remove an useless dependency gui/hkl3d/hkl3d-gui-model.cpp | 4 ---- 1 file changed, 4 deletions(-) commit a8fad9a8f92bbc61beb5e438c1bb35dfb79ff138 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 10:48:17 2010 +0200 * remove another bunch of useless method from hkl3d-gui-model gui/hkl3d/hkl3d-gui-model.cpp | 15 ++++++--------- gui/hkl3d/hkl3d-gui-model.h | 45 +++++-------------------------------------- gui/hkl3d/hkl3d-gui-scene.cpp | 24 ++++++++++------------- gui/hkl3d/hkl3d-gui-scene.h | 6 +++--- 4 files changed, 24 insertions(+), 66 deletions(-) commit 82b87b205d3909f30d6d32de49f5c47fcf972654 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 10:29:20 2010 +0200 * now Hkl3D::_btWorld can becomes private. hkl3d/hkl3d.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a81516c1e8599157ed9ddad8f113711c49fee3f8 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 10:23:41 2010 +0200 * remoce the home made draw_sphere method in favor of the GL_ShapeDrawer. gui/hkl3d/hkl3d-gui-model.cpp | 34 ++-------------------------------- gui/hkl3d/hkl3d-gui-model.h | 1 - 2 files changed, 2 insertions(+), 33 deletions(-) commit 034b7831e212769cd54e813fc16056e5b3b5cd79 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 10:11:14 2010 +0200 * remove the GlutDemoApplication dependency gui/hkl3d/hkl3d-gui-model.cpp | 20 +++++++------------- gui/hkl3d/hkl3d-gui-model.h | 13 +++++-------- 2 files changed, 12 insertions(+), 21 deletions(-) commit d6773ec4f6279441247ebf5ef8d7416b9a3e5b7b Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 09:42:52 2010 +0200 * rename a bunch of methods. gui/hkl3d/hkl3d-gui-model.cpp | 24 ++++++++++++------------ gui/hkl3d/hkl3d-gui-model.h | 11 ++++++----- 2 files changed, 18 insertions(+), 17 deletions(-) commit 90efbe57ce2a3f230b5290f330e687d5d4febc1a Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 09:31:10 2010 +0200 * remove useless code. gui/hkl3d/hkl3d-gui-model.h | 32 +++++++------------------------- 1 file changed, 7 insertions(+), 25 deletions(-) commit ddf76bf4d214e00be28f91b9a5af8fcda2993bcd Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 09:22:54 2010 +0200 * create the DrawingTools only once. gui/hkl3d/hkl3d-gui-model.cpp | 3 ++- gui/hkl3d/hkl3d-gui-model.h | 7 ++----- 2 files changed, 4 insertions(+), 6 deletions(-) commit 5bc3f13c944b920a65f12545a7a9aec80b4b02bc Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 09:11:35 2010 +0200 * small optimization call update_objects_visibility only once. gui/hkl3d/hkl3d-gui-model.cpp | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) commit b4fb3b404186c6184e233f3d03a684c113d65cf9 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 09:11:06 2010 +0200 * typo gui/hkl3d/hkl3d-gui-model.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) commit e4d46bd2b60b92aad9141dafe6cdd99037223f51 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 08:52:16 2010 +0200 * rename update_object_visibility_in_world -> update_objects_visibility now update all the object visibility in the Hkl3D class it simplify a bit the hkl3d-model code. gui/hkl3d/hkl3d-gui-model.cpp | 6 ++---- hkl3d/hkl3d.cpp | 38 +++++++++++++++++++++++--------------- hkl3d/hkl3d.h | 2 +- 3 files changed, 26 insertions(+), 20 deletions(-) commit 982dc8ea17564b30427a999ab85b887d55812afd Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 08:35:48 2010 +0200 * typo gui/hkl3d/hkl3d-gui-model.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) commit 7d4e51370e78a4e3b42ad0deac08aa7a6110c3d5 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 22 08:35:41 2010 +0200 * use the Hkl3D::update_object_visibility_in_world gui/hkl3d/hkl3d-gui-model.cpp | 45 ++++++++++++++++--------------------------- 1 file changed, 17 insertions(+), 28 deletions(-) commit b7f3b7789b2a404752617c3a8ae15f3719fc2c82 Author: Frédéric-Emmanuel PICCA Date: Mon Jun 21 09:30:31 2010 +0200 * add a method to update the visibility of an hkl3dObject in the world hkl3d/hkl3d.cpp | 25 +++++++++++++++++++++++++ hkl3d/hkl3d.h | 1 + 2 files changed, 26 insertions(+) commit b390aac4e858dd164e9c26103f6e91706ee2cf69 Author: Frédéric-Emmanuel PICCA Date: Mon Jun 21 09:11:00 2010 +0200 * more work to push Hkl3D::_btWorld to a private area. gui/hkl3d/hkl3d-gui-model.cpp | 6 ++---- hkl3d/hkl3d.cpp | 12 ++++++++++++ hkl3d/hkl3d.h | 2 ++ 3 files changed, 16 insertions(+), 4 deletions(-) commit e0257c7e08773b04efd63f795016989b9ca3fce9 Author: Picca Frédéric-Emmanuel Date: Sun Jun 20 13:00:15 2010 +0200 * typo gui/hkl3d/hkl3d-gui-model.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit a5b3dcac159a10e616099a30ee5cae344045ecb6 Author: Picca Frédéric-Emmanuel Date: Sun Jun 20 12:56:31 2010 +0200 * remove useless code gui/hkl3d/hkl3d-gui-model.cpp | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) commit d129853e714941ca685dbec36490b46645db3d41 Author: Picca Frédéric-Emmanuel Date: Sun Jun 20 12:39:53 2010 +0200 * rename Hkl3D.._hkl3dConfigs -> configs gui/hkl3d/hkl3d-gui-model.cpp | 58 +++++++++++++++++++++---------------------- hkl3d/hkl3d.cpp | 34 ++++++++++++------------- hkl3d/hkl3d.h | 2 +- 3 files changed, 47 insertions(+), 47 deletions(-) commit b6067239a860d10437f313d09897a77c46b26328 Author: Picca Frédéric-Emmanuel Date: Sun Jun 20 12:27:42 2010 +0200 rename Hkl3d::_geometry -> geometry gui/hkl3d/hkl3d-gui-application.cpp | 36 ++++++++++++++++++------------------ hkl3d/hkl3d.cpp | 12 ++++++------ hkl3d/hkl3d.h | 2 +- 3 files changed, 25 insertions(+), 25 deletions(-) commit e59beb5270e256cd286dcbb0b80f95d8f67efdcd Author: Picca Frédéric-Emmanuel Date: Sun Jun 20 12:19:11 2010 +0200 * rename _model -> model (public member) gui/hkl3d/hkl3d-gui-model.cpp | 2 +- hkl3d/hkl3d.cpp | 8 ++++---- hkl3d/hkl3d.h | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) commit 93d6ca999444d7c342ba6e41b59922c9e9c163d1 Author: Picca Frédéric-Emmanuel Date: Sun Jun 20 12:10:56 2010 +0200 * no more bullet members exposed from hkl3d.h next step will be to do the same for g3d. hkl3d/hkl3d.cpp | 9 ++++++--- hkl3d/hkl3d.h | 10 +++------- test/hkl3d/Makefile.am | 5 ++--- 3 files changed, 11 insertions(+), 13 deletions(-) commit d077821dd67d28eb95d3755b7dd8fdd240354d92 Author: Picca Frédéric-Emmanuel Date: Sun Jun 20 12:09:54 2010 +0200 * fix the hkl3d test test/hkl3d/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9bf1de2444d2870e48a254e572bd64d9089edd9e Author: Picca Frédéric-Emmanuel Date: Sun Jun 20 00:57:52 2010 +0200 * typo hkl3d/hkl3d.cpp | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-) commit 41a3772412ed4d43ea11ce40ab162d44259c9f42 Author: Picca Frédéric-Emmanuel Date: Sun Jun 20 00:46:55 2010 +0200 * indentation hkl3d/hkl3d.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit f36fe81dbd0a6f5a2e815c8006be7dceb14b5a68 Author: Picca Frédéric-Emmanuel Date: Sun Jun 20 00:45:57 2010 +0200 * simplify the callback hkl3d/hkl3d.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) commit 1048ea358248e7e23b08cb84c950c97264f9d9aa Author: Picca Frédéric-Emmanuel Date: Sun Jun 20 00:37:06 2010 +0200 * move the static part on top of the file and the serialized at the end hkl3d/hkl3d.cpp | 326 ++++++++++++++++++++++++++++---------------------------- hkl3d/hkl3d.h | 8 +- 2 files changed, 171 insertions(+), 163 deletions(-) commit 45f0eb3cc2e7a9a1532679ef0652183da2a56d1c Author: Picca Frédéric-Emmanuel Date: Sat Jun 19 23:57:21 2010 +0200 * more rename hkl3d/hkl3d.cpp | 6 +++--- hkl3d/hkl3d.h | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) commit 7e0ae05a879882aa532889b8c5e9623d0a59591a Author: Picca Frédéric-Emmanuel Date: Sat Jun 19 23:52:24 2010 +0200 * one more rename hkl3d/hkl3d.cpp | 4 ++-- hkl3d/hkl3d.h | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) commit f928a77189d3fa2fdfce5dd8f740709dac73d486 Author: Picca Frédéric-Emmanuel Date: Sat Jun 19 23:43:05 2010 +0200 * more renames gui/hkl3d/hkl3d-gui-model.cpp | 26 +++++++++++++------------- hkl3d/hkl3d.cpp | 22 +++++++++++----------- hkl3d/hkl3d.h | 17 +++++++++-------- 3 files changed, 33 insertions(+), 32 deletions(-) commit 9980e76c9c43fa23cb74ca553acbfd24fa6e7999 Author: Picca Frédéric-Emmanuel Date: Sat Jun 19 23:22:08 2010 +0200 * move initHkl3D to private and rename hkl3d/hkl3d.cpp | 4 ++-- hkl3d/hkl3d.h | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) commit 7b1a51fc5ca87721d4db457081802b26fc5a9221 Author: Picca Frédéric-Emmanuel Date: Sat Jun 19 23:15:16 2010 +0200 * more rename gui/hkl3d/hkl3d-gui-model.cpp | 12 ++++++------ hkl3d/hkl3d.cpp | 8 ++++---- hkl3d/hkl3d.h | 6 +++--- 3 files changed, 13 insertions(+), 13 deletions(-) commit 4f5803c4f9fbfa2cc1f6493cfeec2ef746a8286c Author: Picca Frédéric-Emmanuel Date: Sat Jun 19 23:06:30 2010 +0200 * more rename gui/hkl3d/hkl3d-gui-model.cpp | 20 ++++++++++---------- hkl3d/hkl3d.cpp | 18 +++++++++--------- hkl3d/hkl3d.h | 6 +++--- 3 files changed, 22 insertions(+), 22 deletions(-) commit 13076f8c85f2029812ba0c5ed64822bf84cf2014 Author: Picca Frédéric-Emmanuel Date: Sat Jun 19 22:57:03 2010 +0200 * rename the Hkl3DConfig::hkl3dObjects -> objects gui/hkl3d/hkl3d-gui-model.cpp | 50 +++++++++---------- hkl3d/hkl3d.cpp | 113 ++++++++++++++++++++++++++---------------- hkl3d/hkl3d.h | 4 +- 3 files changed, 96 insertions(+), 71 deletions(-) commit 5d4bf6cbcfcdaab4988cfc9cd9c9443dd61c7329 Author: Picca Frédéric-Emmanuel Date: Sat Jun 19 22:01:31 2010 +0200 * only typo hkl3d/hkl3d.cpp | 105 ++++++++++++++++++++++++++++++-------------------------- hkl3d/hkl3d.h | 30 ++++++++-------- 2 files changed, 72 insertions(+), 63 deletions(-) commit b1b22edaf5e51e68ad368ce865a671c082aae432 Author: Picca Frédéric-Emmanuel Date: Sat Jun 19 21:44:27 2010 +0200 * remove useless constructor hkl3d/hkl3d.cpp | 6 ------ hkl3d/hkl3d.h | 1 - 2 files changed, 7 deletions(-) commit 8c5054e2b3df89238d08a62516a1830163e5821c Author: Picca Frédéric-Emmanuel Date: Sat Jun 19 21:32:26 2010 +0200 * use autoscan to update the configure.ac file configure.ac | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) commit 434a7f4aa49f46475976f5c14146d9468d352d12 Author: Picca Frédéric-Emmanuel Date: Sat Jun 19 20:54:20 2010 +0200 * update the README add a few dependencies README | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 2267e369e2bc6d2c520a113e482a18978cd30302 Author: Picca Frédéric-Emmanuel Date: Sat Jun 19 20:31:33 2010 +0200 * remove the DiffabsDemo useless files configure.ac | 1 - gui/DiffabsDemo/DiffabsDemo.cpp | 217 ---------------------------------------- gui/DiffabsDemo/DiffabsDemo.h | 75 -------------- gui/DiffabsDemo/Makefile.am | 34 ------- gui/DiffabsDemo/main.cpp | 50 --------- gui/Makefile.am | 2 +- 6 files changed, 1 insertion(+), 378 deletions(-) commit 1eb65c0534c649c3cb88414d88f5383100a5965c Author: Picca Frédéric-Emmanuel Date: Sat Jun 19 10:25:30 2010 +0200 reorganize a bit the ghkl code .gitignore | 18 ++++++++++++++++++ configure.ac | 2 +- gui/Makefile.am | 18 +++++++++--------- gui/{ghkl-callbacks.cpp => hkl-gui-callbacks.cpp} | 2 +- gui/{modelcolumns.h => hkl-gui-modelcolumns.h} | 0 gui/{pseudoaxesframe.cpp => hkl-gui-pseudoaxes.cpp} | 2 +- gui/{pseudoaxesframe.h => hkl-gui-pseudoaxes.h} | 0 gui/{ghkl.cpp => hkl-gui.cpp} | 2 +- gui/{ghkl.h => hkl-gui.h} | 4 ++-- gui/{ghkl3d => hkl3d}/Makefile.am | 0 gui/{ghkl3d => hkl3d}/ghkl3d.ui | 0 gui/{ghkl3d => hkl3d}/hkl3d-gui-application.cpp | 0 gui/{ghkl3d => hkl3d}/hkl3d-gui-application.h | 0 gui/{ghkl3d => hkl3d}/hkl3d-gui-gl.c | 0 gui/{ghkl3d => hkl3d}/hkl3d-gui-gl.h | 0 gui/{ghkl3d => hkl3d}/hkl3d-gui-model.cpp | 0 gui/{ghkl3d => hkl3d}/hkl3d-gui-model.h | 0 gui/{ghkl3d => hkl3d}/hkl3d-gui-scene.cpp | 0 gui/{ghkl3d => hkl3d}/hkl3d-gui-scene.h | 0 gui/{ghkl3d => hkl3d}/hkl3d-gui-view.cpp | 0 gui/{ghkl3d => hkl3d}/hkl3d-gui-view.h | 0 gui/{ghkl3d => hkl3d}/main.cpp | 0 gui/{ghkl3d => hkl3d}/texture.c | 0 gui/{ghkl3d => hkl3d}/texture.h | 0 gui/{ghkl3d => hkl3d}/trackball.c | 0 gui/{ghkl3d => hkl3d}/trackball.h | 0 gui/main.cpp | 2 +- 27 files changed, 34 insertions(+), 16 deletions(-) commit 1ef22172550e5383c461a30e0a9e2e455c9cdff3 Author: Frédéric-Emmanuel PICCA Date: Fri Jun 18 13:55:21 2010 +0200 correct the diffabs.yaml config file. data/diffabs.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b8259f1a807cb13edbfe5d16ed36158a3658b8cd Merge: 6869615a 7cf255f8 Author: Frédéric-Emmanuel PICCA Date: Fri Jun 18 13:48:03 2010 +0200 Merge branch 'next' of ssh://dent-de-scie/home/oussama/hkl into next Conflicts: TODO configure.ac hkl3d/hkl3d.cpp commit 6869615a2cfafc473fb27c862792c0e6bf8ab9dc Author: Frédéric-Emmanuel PICCA Date: Fri Jun 18 08:23:41 2010 +0200 correct the --enable-hkl3d default [true] configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7cf255f897133ec009fde369be6ef365979ffb0e Author: Oussama Sboui Date: Thu Jun 17 15:52:28 2010 +0200 * replace the LogoModel namespace by something else. TODO | 3 +-- gui/ghkl3d/hkl3d-gui-application.cpp | 4 +-- gui/ghkl3d/hkl3d-gui-application.h | 4 +-- gui/ghkl3d/hkl3d-gui-model.cpp | 50 ++++++++++++++++++------------------ gui/ghkl3d/hkl3d-gui-model.h | 30 ++++++++++------------ gui/ghkl3d/hkl3d-gui-scene.cpp | 4 +-- gui/ghkl3d/hkl3d-gui-scene.h | 6 ++--- gui/ghkl3d/hkl3d-gui-view.cpp | 4 +-- gui/ghkl3d/hkl3d-gui-view.h | 4 +-- gui/ghkl3d/main.cpp | 2 +- 10 files changed, 53 insertions(+), 58 deletions(-) commit d754f059ae8b48abc5355f32a4e2b1233a70a9bd Author: Oussama Sboui Date: Thu Jun 17 14:08:42 2010 +0200 all removed TODO's * REMOVE std::vector _hkl3dObjects from the Hkl3D class * put ifdef for Serialization in the Hkl3D::loadModelInCollisionWorld * verification that G3DContex in Hkl3D::addFromFile do not leak. * remove the isModelFilecompatible. * split loadModelInCollisionWorld -> - convertion de G3DObject -> Bullet - create the Hkl3DObject from G3DModel and bullet. - update the collision world. - bullet serialization * why this hide problem with the base ? * can we remove the AddedInWorldCollision <-> !hide ??? * how to move from drawModel/Bullet the world collision update ? TODO | 16 +- gui/DiffabsDemo/DiffabsDemo.cpp | 31 +- gui/ghkl3d/cristal4C.yaml | 930 +++++++++++++++++++++------------------- gui/ghkl3d/hkl3d-gui-model.cpp | 38 +- gui/ghkl3d/main.cpp | 6 +- hkl3d/hkl3d.cpp | 366 +++++++++------- hkl3d/hkl3d.h | 7 +- 7 files changed, 737 insertions(+), 657 deletions(-) commit ecc50d829b3f220d176f3d8c62fd3836c1763d14 Author: unknown Date: Thu Jun 17 13:23:37 2010 +0200 typo hkl/hkl-macros.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1ca79d7293427f6e4d00762f946d87a111a85102 Author: unknown Date: Thu Jun 17 13:15:56 2010 +0200 try to solve the vasprintf problem with win32 (UGLY) hkl/hkl-macros.c | 13 +++++++++++++ hkl/hkl-macros.h | 3 +++ 2 files changed, 16 insertions(+) commit bc25a2c76b57b3b8cc8bf1266235685a4a30f1ac Author: unknown Date: Thu Jun 17 11:17:39 2010 +0200 * modifications for Visual C++ 2008 hkl/hkl-error.c | 11 ++++++++--- hkl/hkl-geometry.c | 4 +++- hkl/hkl-macros.c | 3 ++- hkl/hkl-macros.h | 7 +++++-- hkl/hkl-pseudoaxis-auto.c | 4 +++- hkl/hkl-pseudoaxis.c | 4 +++- 6 files changed, 24 insertions(+), 9 deletions(-) commit ef368d3084b5f0536d9e7b4db2c48a15519639c3 Author: Oussama Sboui Date: Wed Jun 16 18:50:56 2010 +0200 * first working version with the new config file system. TODO | 17 + gui/ghkl3d/cristal4C.yaml | 1306 ++++++++++++++++++++++++++++++++++++++++ gui/ghkl3d/diffabs.yaml | 46 ++ gui/ghkl3d/hkl3d-gui-gl.c | 4 +- gui/ghkl3d/hkl3d-gui-model.cpp | 117 ++-- gui/ghkl3d/hkl3d-gui-view.cpp | 2 +- gui/ghkl3d/main.cpp | 11 +- hkl3d/hkl3d.cpp | 197 +++--- hkl3d/hkl3d.h | 20 +- 9 files changed, 1562 insertions(+), 158 deletions(-) commit d8cf48fa2972f8943ad79993529df4993e408acf Author: Oussama Sboui Date: Tue Jun 15 17:23:02 2010 +0200 * add the yaml file config (work in progress) and other stuffs... gui/DiffabsDemo/Makefile.am | 4 +- gui/ghkl3d/hkl3d-gui-model.cpp | 4 +- gui/ghkl3d/hkl3d-gui-scene.cpp | 2 +- gui/ghkl3d/hkl3d-gui-view.cpp | 2 +- gui/ghkl3d/main.cpp | 26 ++- hkl3d/Makefile.am | 11 +- hkl3d/hkl3d.cpp | 439 ++++++++++++++++++++++++++++++----------- hkl3d/hkl3d.h | 29 ++- 8 files changed, 384 insertions(+), 133 deletions(-) commit 58403317f50633fdfc71970c25dbe5eadf9bea5d Author: Frédéric-Emmanuel PICCA Date: Tue Jun 8 14:06:41 2010 +0200 fix a compilation error in hkl3d hkl3d/hkl3d.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 1c0129a8dafa1354aa8457a408004938452da783 Author: Oussama Sboui Date: Mon Jun 7 11:22:09 2010 +0200 * juste add flags to prepare the yaml integration configure.ac | 6 ++++++ 1 file changed, 6 insertions(+) commit db50c61277ad813e9c82672173e972274c8cf63b Merge: e4530461 338f69cd Author: Picca Frédéric-Emmanuel Date: Sun Jun 6 09:56:39 2010 +0200 Merge branch 'maint' into next Conflicts: NEWS configure.ac commit 338f69cdf5a4fb7612bce359a459d421d50d6bbe Author: Picca Frédéric-Emmanuel Date: Sun Jun 6 09:50:51 2010 +0200 update also the pom.xml file hkl/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit ebf1bfba4694543337489551d85d4843bc515f25 Author: Picca Frédéric-Emmanuel Date: Sun Jun 6 09:45:08 2010 +0200 * update the NEWS and prepare for release NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit e4530461ec51477a05c80434cec378b36c047614 Merge: dba19995 fc66cc69 Author: Picca Frédéric-Emmanuel Date: Sun Jun 6 09:40:15 2010 +0200 Merge branch 'maint' into next commit fc66cc69da79c4adc47dddf8a9860191aa7c769d Author: Picca Frédéric-Emmanuel Date: Sun Jun 6 09:35:55 2010 +0200 * update the documentation Documentation/api/hkl-sections.txt | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) commit f0cba10fae45742b6ba717eee2c6d43014705a08 Author: Picca Frédéric-Emmanuel Date: Sat Jun 5 19:37:55 2010 +0200 * remove all clang warnings hkl/hkl-error.c | 2 +- hkl/hkl-lattice.c | 2 +- hkl/hkl-sample.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) commit 5b3661b44d0c20a7108640f327b7e3580d9ee7e9 Author: Picca Frédéric-Emmanuel Date: Sun Jun 6 09:08:00 2010 +0200 * remove all git code to avoid a GPL2 GPL3+ incompatibility hkl/Makefile.am | 4 +-- hkl/hkl-geometry.c | 8 +++-- hkl/{usage.c => hkl-macros.c} | 66 ++++------------------------------------- hkl/hkl-macros.h | 9 ------ hkl/hkl-pseudoaxis-common-psi.c | 6 ++-- test/hkl-test.c | 6 ++-- 6 files changed, 20 insertions(+), 79 deletions(-) commit dba19995009ac71e7671b422a2feeb7d364dce97 Merge: f92337db 1c7c172f Author: Picca Frédéric-Emmanuel Date: Sat Jun 5 15:52:33 2010 +0200 Merge branch 'maint' into next Conflicts: NEWS configure.ac gui/ghkl.cpp gui/ghkl.h commit 1c7c172fb9fc51e5d7e5dfb3995a0a80fa5ee51d Author: Frédéric-Emmanuel PICCA Date: Wed Jun 2 15:27:53 2010 +0200 * Fix source and include directories hkl/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 41604e0e53c52633356d1cd1c8af15f27e8d136c Author: Frédéric-Emmanuel PICCA Date: Wed Jun 2 15:21:20 2010 +0200 * update the pom.xml hkl/pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit edf72c24cfb39741754af6fcb2f2a34f162c8611 Author: Frédéric-Emmanuel PICCA Date: Wed Jun 2 15:18:07 2010 +0200 * move the hkl.h file to be SOLEIL hudson friendly ;) Makefile.am | 2 ++ hkl/hkl.h => hkl.h | 0 hkl/Makefile.am | 3 --- 3 files changed, 2 insertions(+), 3 deletions(-) commit 4cd1fc24832c7270c567334d0d83262b4e255e8e Author: Frédéric-Emmanuel PICCA Date: Wed Jun 2 11:07:16 2010 +0200 * add the pom.xml for soleil compilation hkl/pom.xml | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) commit 8e2e695803843ed43acf9026571b9386e92ec8a9 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 1 15:08:05 2010 +0200 * forgot to distribut the file ;) gui/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ccd7c82b1a5ad0b8caa74450d17fd321660fa04c Author: Frédéric-Emmanuel PICCA Date: Tue Jun 1 15:00:04 2010 +0200 * install the .desktop file at the right place. NEWS | 4 ++++ gui/Makefile.am | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) commit 810ec16c0745f0777821dd010c505fa125e2ba01 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 1 14:22:48 2010 +0200 * add the ghkl man page and the .desktop file. Documentation/Makefile.am | 2 ++ Documentation/ghkl.1 | 53 +++++++++++++++++++++++++++++++++++++++++++++++ gui/Makefile.am | 2 +- gui/ghkl.desktop | 10 +++++++++ 4 files changed, 66 insertions(+), 1 deletion(-) commit 4702e6053fc4f26e6ec65726c1998518524ae3b2 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 1 14:21:08 2010 +0200 * connect the quit menu item with the gtk_main_quit method gui/ghkl.cpp | 3 +++ gui/ghkl.h | 1 + 2 files changed, 4 insertions(+) commit 524477c58f7e69b54b9b57a7d5691bf83ce59ec7 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 1 14:20:32 2010 +0200 * post release revision number bump configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f92337dbc8221e08be95bd11c61891cd9abf1acf Author: Picca Frédéric-Emmanuel Date: Mon May 31 23:38:27 2010 +0200 * lets reduce number of copy of the holder idx (common to geometries) hkl/hkl-geometry.c | 67 ++++++++++++++++++++++++++++++++++++++++-------------- hkl/hkl-geometry.h | 8 +++++-- 2 files changed, 56 insertions(+), 19 deletions(-) commit 89d43925c6d3021d145fb9006e41b8abf33a749a Author: Frédéric-Emmanuel PICCA Date: Mon May 31 18:00:48 2010 +0200 * remove for real the hkl-list.h file hkl/Makefile.am | 1 - hkl/hkl-geometry.h | 1 - hkl/hkl-list.h | 88 ------------------------------------------------------ hkl/hkl-sample.h | 1 - 4 files changed, 91 deletions(-) commit 7d627f49fb1ddaae9eee44995890d03f5debfbf5 Author: Frédéric-Emmanuel PICCA Date: Mon May 31 17:53:08 2010 +0200 * remove a memory leak hkl/hkl-pseudoaxis.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 41865ed6b8cf2ed96249d51002843931c325ce2f Author: Frédéric-Emmanuel PICCA Date: Mon May 31 17:47:48 2010 +0200 * one less gui/ghkl.cpp | 2 +- hkl/hkl-sample.c | 74 ++++++++++++++++++++++++++++++++++++++------------------ hkl/hkl-sample.h | 4 ++- 3 files changed, 54 insertions(+), 26 deletions(-) commit a4104c18b6bb15425ab7616ea0bec0f9c7bd541e Author: Frédéric-Emmanuel PICCA Date: Mon May 31 17:08:59 2010 +0200 * one less gui/ghkl.cpp | 2 +- hkl/hkl-sample.c | 51 +++++++++++++++++++++++++++++----------------- hkl/hkl-sample.h | 3 ++- test/hkl/hkl-test-sample.c | 4 ++-- 4 files changed, 37 insertions(+), 23 deletions(-) commit c8069a60b47c424401051b5550047024b8c310ef Author: Frédéric-Emmanuel PICCA Date: Mon May 31 16:46:19 2010 +0200 * one less gui/ghkl.cpp | 4 ++-- hkl/hkl-pseudoaxis.c | 23 +++++++++++++++-------- hkl/hkl-pseudoaxis.h | 3 ++- test/hkl/hkl-test-pseudoaxis.c | 2 +- 4 files changed, 20 insertions(+), 12 deletions(-) commit 3de4d27eae53770ed9721b27ead83fa6b5d599d7 Author: Frédéric-Emmanuel PICCA Date: Mon May 31 16:32:44 2010 +0200 * still working on the removal gui/ghkl.cpp | 2 +- gui/pseudoaxesframe.cpp | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 2 +- hkl/hkl-pseudoaxis.c | 13 +++++++++---- hkl/hkl-pseudoaxis.h | 3 ++- test/hkl/hkl-test-pseudoaxis.c | 4 ++-- 6 files changed, 16 insertions(+), 10 deletions(-) commit a117edfb8e269ee14236ac01ceb2346e354c5214 Author: Frédéric-Emmanuel PICCA Date: Mon May 31 16:19:26 2010 +0200 * one more hkl/hkl-pseudoaxis-auto.c | 4 ++-- hkl/hkl-pseudoaxis-common-hkl.c | 6 +++--- hkl/hkl-pseudoaxis-common-psi.c | 2 +- hkl/hkl-pseudoaxis-common-q.c | 4 ++-- hkl/hkl-pseudoaxis.c | 10 ++++++---- hkl/hkl-pseudoaxis.h | 3 ++- 6 files changed, 16 insertions(+), 13 deletions(-) commit 3c84ba1924c53f28b738844c8d3991d45c2d7744 Author: Frédéric-Emmanuel PICCA Date: Mon May 31 16:07:32 2010 +0200 * one more gui/pseudoaxesframe.cpp | 4 ++-- hkl/hkl-pseudoaxis.c | 15 +++++++++++---- hkl/hkl-pseudoaxis.h | 3 ++- test/hkl/bench.c | 4 ++-- test/hkl/hkl-test-pseudoaxis-e4cv.c | 6 +++--- test/hkl/hkl-test-pseudoaxis-e6c.c | 4 ++-- test/hkl/hkl-test-pseudoaxis-k4cv.c | 6 +++--- test/hkl/hkl-test-pseudoaxis-k6c.c | 6 +++--- test/hkl/hkl-test-pseudoaxis.c | 2 +- 9 files changed, 29 insertions(+), 21 deletions(-) commit f9e045de397cfd52b811ad5775b63b519165b675 Author: Frédéric-Emmanuel PICCA Date: Mon May 31 15:53:27 2010 +0200 * one more HKL_LIST removal hkl/hkl-pseudoaxis.c | 12 +++++++----- hkl/hkl-pseudoaxis.h | 3 ++- 2 files changed, 9 insertions(+), 6 deletions(-) commit 63784e2a981ea912ef00032f5502dfdf5ca7a305 Author: Frédéric-Emmanuel PICCA Date: Mon May 31 15:43:24 2010 +0200 * still removing the HKL_LIST gui/ghkl.cpp | 4 ++-- gui/pseudoaxesframe.cpp | 2 +- hkl/hkl-list.h | 2 +- hkl/hkl-pseudoaxis.c | 12 +++++++----- hkl/hkl-pseudoaxis.h | 3 ++- test/hkl/bench.c | 2 +- test/hkl/hkl-test-pseudoaxis-e4cv.c | 2 +- test/hkl/hkl-test-pseudoaxis-e6c.c | 2 +- test/hkl/hkl-test-pseudoaxis-k6c.c | 2 +- test/hkl/hkl-test-pseudoaxis.c | 2 +- 10 files changed, 18 insertions(+), 15 deletions(-) commit 434df505036ca1f1e8eac2bc1f0063ac19c40c66 Author: Frédéric-Emmanuel PICCA Date: Mon May 31 15:43:04 2010 +0200 * correct the gui part due to the HKL_LIST removal gui/ghkl-callbacks.cpp | 4 ++-- gui/ghkl.cpp | 8 ++++---- gui/modelcolumns.h | 2 +- gui/pseudoaxesframe.cpp | 2 +- hkl3d/hkl3d.cpp | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) commit 97220cc65aab9dab098b47ca089862f67765fd8a Author: Picca Frédéric-Emmanuel Date: Sun May 30 12:25:07 2010 +0200 * still removing HKL_LIST hkl/hkl-pseudoaxis-auto.c | 2 +- hkl/hkl-pseudoaxis.c | 10 ++++++---- hkl/hkl-pseudoaxis.h | 3 ++- 3 files changed, 9 insertions(+), 6 deletions(-) commit 6e1a525bf5c186d3d121ea09751a7bbfff7d2ca2 Author: Picca Frédéric-Emmanuel Date: Sun May 30 10:05:41 2010 +0200 * make the hkl_geometry_list_item method private hkl/hkl-geometry.c | 71 ++++++++++++++++--------------------- hkl/hkl-geometry.h | 10 +----- hkl/hkl-pseudoaxis-factory.c | 4 +-- test/hkl/bench.c | 2 +- test/hkl/hkl-test-geometry.c | 6 ++-- test/hkl/hkl-test-pseudoaxis-e4cv.c | 8 ++--- test/hkl/hkl-test-pseudoaxis-e6c.c | 4 +-- test/hkl/hkl-test-pseudoaxis-k4cv.c | 8 ++--- test/hkl/hkl-test-pseudoaxis-k6c.c | 14 ++++---- test/hkl/hkl-test-pseudoaxis.c | 2 +- 10 files changed, 55 insertions(+), 74 deletions(-) commit 7529b59bf624d2fbb4afc348e910d0b1db216dfa Author: Picca Frédéric-Emmanuel Date: Sun May 30 09:45:58 2010 +0200 * still removing HKL_LIST hkl/hkl-geometry.c | 82 ++++++++++++++++++++++++++++---------------- hkl/hkl-geometry.h | 4 ++- test/hkl/hkl-test-geometry.c | 10 +++--- 3 files changed, 60 insertions(+), 36 deletions(-) commit b2e663ff322ae47dfca3b95952758c70c2c590ef Author: Picca Frédéric-Emmanuel Date: Sat May 29 22:39:12 2010 +0200 * still removing HKL_LIST hkl/hkl-geometry.c | 72 +++++++++++++++++++++++++----------------------------- hkl/hkl-geometry.h | 3 ++- hkl/hkl-sample.c | 7 ++---- 3 files changed, 37 insertions(+), 45 deletions(-) commit 3e32ddcdf573913289c49d0dfb97291e5c776c67 Author: Picca Frédéric-Emmanuel Date: Sat May 29 22:19:43 2010 +0200 * more HKL_LIST remove hkl/hkl-geometry.c | 32 +++++++++++++------------------- hkl/hkl-geometry.h | 3 ++- test/hkl/hkl-test-geometry.c | 6 +++--- 3 files changed, 18 insertions(+), 23 deletions(-) commit 08a1cf7f125aaea651113773fd389dce8d4817f5 Author: Picca Frédéric-Emmanuel Date: Sat May 29 22:05:21 2010 +0200 * remove the HKL_LIST from HklHolder hkl/hkl-geometry.c | 23 +++++++++++++---------- hkl/hkl-geometry.h | 3 ++- 2 files changed, 15 insertions(+), 11 deletions(-) commit c802593fbc8b460d7a304f5ef04cc780af3cdbd6 Author: Oussama Sboui Date: Tue May 25 17:05:36 2010 +0200 * add the addFromFile method. gui/ghkl3d/hkl3d-gui-model.cpp | 14 ++++-- gui/ghkl3d/hkl3d-gui-scene.cpp | 2 +- hkl3d/hkl3d.cpp | 101 ++++++++++++++++++++++++++++++++--------- hkl3d/hkl3d.h | 5 +- 4 files changed, 93 insertions(+), 29 deletions(-) commit a7f648c78eed50c5c97f6d1696704b2bd242016a Author: Oussama Sboui Date: Fri May 21 12:26:35 2010 +0200 * decrease the World boundaries. hkl3d/hkl3d.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit 00125d483c6218ce3a9c3f53268de964a78ebc34 Author: Oussama Sboui Date: Fri May 21 12:25:50 2010 +0200 * add the serialization configure.ac | 3 + hkl3d/Makefile.am | 10 +- hkl3d/Serialize/BulletFileLoader/Makefile.am | 74 ++ hkl3d/Serialize/BulletFileLoader/bChunk.cpp | 75 ++ hkl3d/Serialize/BulletFileLoader/bChunk.h | 90 ++ hkl3d/Serialize/BulletFileLoader/bCommon.h | 39 + hkl3d/Serialize/BulletFileLoader/bDNA.cpp | 636 ++++++++++ hkl3d/Serialize/BulletFileLoader/bDNA.h | 110 ++ hkl3d/Serialize/BulletFileLoader/bDefines.h | 140 +++ hkl3d/Serialize/BulletFileLoader/bFile.cpp | 1322 ++++++++++++++++++++ hkl3d/Serialize/BulletFileLoader/bFile.h | 153 +++ hkl3d/Serialize/BulletFileLoader/btBulletFile.cpp | 384 ++++++ hkl3d/Serialize/BulletFileLoader/btBulletFile.h | 78 ++ hkl3d/Serialize/BulletFileLoader/bullet.h | 69 + hkl3d/Serialize/BulletFileLoader/bullet_Common.h | 77 ++ hkl3d/Serialize/BulletFileLoader/bullet_ListBase.h | 40 + .../BulletFileLoader/bullet_PointerArray.h | 41 + .../BulletFileLoader/bullet_btBvhSubtreeInfoData.h | 42 + .../BulletFileLoader/bullet_btCapsuleShapeData.h | 42 + .../bullet_btCollisionObjectDoubleData.h | 64 + .../bullet_btCollisionObjectFloatData.h | 63 + .../BulletFileLoader/bullet_btCollisionShapeData.h | 41 + .../bullet_btCompoundShapeChildData.h | 43 + .../BulletFileLoader/bullet_btCompoundShapeData.h | 43 + .../bullet_btConeTwistConstraintData.h | 51 + .../BulletFileLoader/bullet_btConstraintInfo1.h | 40 + .../bullet_btConvexHullShapeData.h | 44 + .../bullet_btConvexInternalShapeData.h | 45 + .../BulletFileLoader/bullet_btCylinderShapeData.h | 42 + .../bullet_btGImpactMeshShapeData.h | 46 + .../bullet_btGeneric6DofConstraintData.h | 50 + .../bullet_btHingeConstraintDoubleData.h | 53 + .../bullet_btHingeConstraintFloatData.h | 53 + .../BulletFileLoader/bullet_btIntIndexData.h | 39 + .../bullet_btMatrix3x3DoubleData.h | 40 + .../BulletFileLoader/bullet_btMatrix3x3FloatData.h | 40 + .../BulletFileLoader/bullet_btMeshPartData.h | 45 + .../bullet_btMultiSphereShapeData.h | 43 + .../bullet_btOptimizedBvhNodeDoubleData.h | 45 + .../bullet_btOptimizedBvhNodeFloatData.h | 45 + .../BulletFileLoader/bullet_btPhysicsSystem.h | 42 + .../bullet_btPoint2PointConstraintDoubleData.h | 43 + .../bullet_btPoint2PointConstraintFloatData.h | 43 + .../BulletFileLoader/bullet_btPositionAndRadius.h | 41 + .../bullet_btQuantizedBvhDoubleData.h | 51 + .../bullet_btQuantizedBvhFloatData.h | 51 + .../bullet_btQuantizedBvhNodeData.h | 41 + .../bullet_btRigidBodyDoubleData.h | 63 + .../BulletFileLoader/bullet_btRigidBodyFloatData.h | 62 + .../BulletFileLoader/bullet_btShortIntIndexData.h | 40 + .../bullet_btShortIntIndexTripletData.h | 40 + .../bullet_btSliderConstraintData.h | 49 + .../bullet_btStaticPlaneShapeData.h | 45 + .../bullet_btStridingMeshInterfaceData.h | 43 + .../bullet_btTransformDoubleData.h | 42 + .../BulletFileLoader/bullet_btTransformFloatData.h | 42 + .../BulletFileLoader/bullet_btTriangleInfoData.h | 42 + .../bullet_btTriangleInfoMapData.h | 52 + .../bullet_btTriangleMeshShapeData.h | 47 + .../bullet_btTypedConstraintData.h | 49 + .../BulletFileLoader/bullet_btVector3DoubleData.h | 39 + .../BulletFileLoader/bullet_btVector3FloatData.h | 39 + hkl3d/Serialize/BulletWorldImporter/Makefile.am | 18 + .../BulletWorldImporter/btBulletWorldImporter.cpp | 1205 ++++++++++++++++++ .../BulletWorldImporter/btBulletWorldImporter.h | 180 +++ hkl3d/Serialize/Makefile.am | 1 + hkl3d/hkl3d.cpp | 126 +- hkl3d/hkl3d.h | 1 + 68 files changed, 6925 insertions(+), 12 deletions(-) commit b4c86f9e05bbccdbc1de8c554b5fd6eb8f8ff19d Author: Oussama Sboui Date: Fri May 21 12:20:18 2010 +0200 * indentation hkl3d/ConvexDecomposition/ConvexDecomposition.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 53ebf2b6dad5baf5da6209f99ac1303c34a6634b Author: Oussama Sboui Date: Fri May 21 12:20:05 2010 +0200 * increase the timeout gui/ghkl3d/hkl3d-gui-scene.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bb0ec310be0cedd336d4b03f3316bb089d4bd111 Author: Oussama Sboui Date: Fri May 21 12:17:03 2010 +0200 *split isColliding method on isColliding and applyTransformation hkl3d/hkl3d.cpp | 16 +++++++++++----- hkl3d/hkl3d.h | 6 +++--- 2 files changed, 14 insertions(+), 8 deletions(-) commit 7c75685d6ad85649b91d358903c3cf8091eaccea Merge: 44e36d54 031ac8b8 Author: Frédéric-Emmanuel PICCA Date: Mon May 17 17:51:39 2010 +0200 Merge branch 'next' of ssh://dent-de-scie/home/oussama/hkl into next commit 44e36d54d3a2d6edaad41b7535c68afd457b0d9a Author: Frédéric-Emmanuel PICCA Date: Mon May 17 15:08:15 2010 +0200 * add an --enable-hkl3d option Makefile.am | 2 +- NEWS | 1 + configure.ac | 10 ++++++---- gui/Makefile.am | 23 ++++++++++++++++------- gui/ghkl-callbacks.cpp | 15 +++++++++++++++ gui/ghkl.cpp | 6 ++++++ gui/ghkl.h | 9 +++++++-- gui/main.cpp | 2 ++ 8 files changed, 54 insertions(+), 14 deletions(-) commit eded4593a511dd6c3211f389cbe981021c9073e3 Author: Frédéric-Emmanuel PICCA Date: Mon May 17 14:20:25 2010 +0200 * use the right SUBDIRS order Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 77fd2b9461a87b21be5712f7a4726107ddf9f4c4 Merge: 2f3a1dc1 af18474e Author: Frédéric-Emmanuel PICCA Date: Mon May 17 11:19:41 2010 +0200 Merge branch 'master' into next Conflicts: Makefile.am NEWS configure.ac gui/Makefile.am commit 031ac8b8132c0dca4bf457be57eb2a9573396ad1 Author: Oussama Sboui Date: Mon May 17 09:19:44 2010 +0200 *Perform colors for Bullet render gui/DiffabsDemo/DiffabsDemo.cpp | 3 +-- gui/ghkl3d/hkl3d-gui-model.cpp | 5 +---- hkl3d/GIMPACTUtils/btGImpactConvexDecompositionShape.cpp | 4 ++-- hkl3d/hkl3d.cpp | 10 ++-------- hkl3d/hkl3d.h | 7 +------ 5 files changed, 7 insertions(+), 22 deletions(-) commit 2f3a1dc17ae8581ce6266f2d3743b9218defb325 Merge: 2f445b8d ee5f6d02 Author: Frédéric-Emmanuel PICCA Date: Mon May 17 09:09:29 2010 +0200 Merge branch 'next' of ssh://dent-de-scie/home/oussama/hkl into next Conflicts: hkl3d/hkl3d.cpp commit ee5f6d0205d0ea3517211fc474ad256e50838102 Author: Oussama Sboui Date: Wed May 12 17:32:21 2010 +0200 *In drawSphere method use GL_QUADS instead of GL LINES in order to perform sphere render gui/ghkl3d/hkl3d-gui-model.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) commit e155dfbaf3171ea10905e54e5931ef5a2c45621c Author: Oussama Sboui Date: Wed May 12 16:56:59 2010 +0200 * Collect all hkl3D vectors in one structure hkl3dObject structure and move the render test callback to isColliding method gui/DiffabsDemo/DiffabsDemo.cpp | 27 ++----------- gui/ghkl3d/hkl3d-gui-model.cpp | 90 ++++++++++++++++------------------------- gui/ghkl3d/hkl3d-gui-model.h | 1 - hkl3d/hkl3d.cpp | 62 +++++++++++++++++++++------- hkl3d/hkl3d.h | 19 +++++---- 5 files changed, 98 insertions(+), 101 deletions(-) commit 2f445b8d65709965644c563a3d9b5f0e37f81456 Author: Frédéric-Emmanuel PICCA Date: Wed May 12 13:17:26 2010 +0200 * update the TODO and NEWS fles NEWS | 2 ++ TODO | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) commit 6376c000e8ede16835bc3cf758da34ecd3012764 Author: Frédéric-Emmanuel PICCA Date: Wed May 12 13:13:35 2010 +0200 * add the 3D view to ghkl gui/Makefile.am | 12 +++++++-- gui/ghkl-callbacks.cpp | 21 ++++++++++++++++ gui/ghkl.cpp | 38 +++++++++++++++++++++++++++-- gui/ghkl.h | 7 ++++++ gui/ghkl.ui | 66 +++++++++++++++++++++++++++++++++----------------- gui/ghkl3d/Makefile.am | 9 ++++--- gui/main.cpp | 1 + hkl3d/hkl3d.cpp | 9 ++++--- 8 files changed, 130 insertions(+), 33 deletions(-) commit e8467ad9360312af35c54a1ce50573e586ec78e8 Author: Oussama Sboui Date: Wed May 12 10:43:12 2010 +0200 * one more missing file. gui/ghkl3d/ghkl3d.ui | 218 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 218 insertions(+) commit f93d79b01f9a3391a064f9aed800fdaae1a074d8 Author: Oussama Sboui Date: Wed May 12 10:37:47 2010 +0200 * forgotten file hkl3d/ConvexDecomposition/concavity.cpp | 795 ++++++++++++++++++++++++++++++++ 1 file changed, 795 insertions(+) commit a6167affcbfd01997791d0706fadcd39dcb7cb8e Author: Oussama Sboui Date: Wed May 12 10:29:09 2010 +0200 Perform rendering(alpha=0.5 if object collide else alpha=1) gui/ghkl3d/hkl3d-gui-gl.c | 2 +- gui/ghkl3d/hkl3d-gui-model.cpp | 75 +++++++++++++++++----- gui/ghkl3d/hkl3d-gui-model.h | 5 +- .../btGImpactConvexDecompositionShape.cpp | 2 +- hkl3d/hkl3d.cpp | 18 ++++-- hkl3d/hkl3d.h | 7 +- 6 files changed, 83 insertions(+), 26 deletions(-) commit b4c6b60a341517d468fc7dd3000f16bee1716217 Author: Frédéric-Emmanuel PICCA Date: Wed May 12 10:26:00 2010 +0200 * correct the hkl3d test method to catch collision and no-collision test/hkl3d/main.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) commit 3757e599cadac6e9a16a2c32c819dfe2db831c4c Author: Frédéric-Emmanuel PICCA Date: Mon May 10 16:47:26 2010 +0200 * create the libhkl3d-gui library for inclusion in the ghkl program gui/ghkl3d/Makefile.am | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) commit 98f1775e1b21c80cf84b451782b6e4e2321686ea Merge: be6187a2 5764e2c6 Author: Frédéric-Emmanuel PICCA Date: Mon May 10 16:23:24 2010 +0200 Merge remote branch 'oussama/next' into next commit af18474e605e5b49db3ad71071d96ebabadd9402 Author: Frédéric-Emmanuel PICCA Date: Mon May 10 16:11:26 2010 +0200 * show the preference dialogue from the begining. NEWS | 1 + gui/ghkl.ui | 1 + 2 files changed, 2 insertions(+) commit 5764e2c61103e04eced290dd1aba62811e64bb69 Author: Oussama Sboui Date: Mon May 10 14:01:58 2010 +0200 Render coordinate system and perform aabb box rendering gui/ghkl3d/hkl3d-gui-application.cpp | 4 +- gui/ghkl3d/hkl3d-gui-model.cpp | 178 +++++++-------------- gui/ghkl3d/hkl3d-gui-model.h | 21 ++- gui/ghkl3d/hkl3d-gui-scene.cpp | 44 +++-- gui/ghkl3d/hkl3d-gui-scene.h | 11 +- .../btGImpactConvexDecompositionShape.cpp | 6 - 6 files changed, 118 insertions(+), 146 deletions(-) commit fdfdb36e63f1c1cd646f613f68d1f395b3ad5e22 Author: Frédéric-Emmanuel PICCA Date: Mon May 10 13:31:32 2010 +0200 * add the --enable-ghkl flag to the configure script. Makefile.am | 6 +++++- NEWS | 5 +++++ configure.ac | 14 +++++++++++++- 3 files changed, 23 insertions(+), 2 deletions(-) commit b3ed054335cb856f9a086c18ac46c99c5f6603c1 Author: Frédéric-Emmanuel PICCA Date: Mon May 10 11:50:11 2010 +0200 * add the gsl dependencies to the ghkl program. gui/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit 6568016fe9a6d0f9b283411222133ee3284c797b Author: Frédéric-Emmanuel PICCA Date: Mon May 10 11:49:45 2010 +0200 * bump the version configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a34b077e576f72c3e895e2f53c58368e26bd3c6d Author: Frédéric-Emmanuel PICCA Date: Mon May 10 11:46:17 2010 +0200 * fix the ghkl .ui load exception. gui/ghkl.cpp | 4 +++- gui/pseudoaxesframe.cpp | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) commit b25b29a535d8589441f4f5d5056b2cce64c9ed05 Author: Oussama Sboui Date: Fri May 7 18:49:45 2010 +0200 delete space gui/DiffabsDemo/DiffabsDemo.cpp | 4 ---- 1 file changed, 4 deletions(-) commit a12af7ab848af3a91932cae06acfbbfb63880e8f Author: Oussama Sboui Date: Fri May 7 18:46:00 2010 +0200 Raise Time out and achieve the AAbbBox render gui/DiffabsDemo/DiffabsDemo.cpp | 18 ++-- gui/ghkl3d/hkl3d-gui-model.cpp | 100 +++++++++++++++------ gui/ghkl3d/hkl3d-gui-model.h | 4 +- gui/ghkl3d/hkl3d-gui-scene.cpp | 2 +- .../btGImpactConvexDecompositionShape.cpp | 2 +- 5 files changed, 91 insertions(+), 35 deletions(-) commit be6187a29dfb18cf0fb3ecf665360fd9d3f18b4b Author: Frédéric-Emmanuel PICCA Date: Fri May 7 13:16:47 2010 +0200 * update the news file NEWS | 3 +++ 1 file changed, 3 insertions(+) commit 459d644348d961bb5a7700414a0108069bbd8638 Author: Frédéric-Emmanuel PICCA Date: Fri May 7 11:05:28 2010 +0200 * add one mode missing file. gui/ghkl3d/ghkl3d.ui | 218 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 218 insertions(+) commit 3c27e8e6d232ddfa7df96e193d061755de82f7d0 Author: Frédéric-Emmanuel PICCA Date: Fri May 7 10:47:58 2010 +0200 * forgot a file hkl3d/ConvexDecomposition/concavity.cpp | 795 ++++++++++++++++++++++++++++++++ 1 file changed, 795 insertions(+) commit 26a23e3e2f3aa56047418cb8338376900bdc5d0e Author: Frédéric-Emmanuel PICCA Date: Fri May 7 10:32:34 2010 +0200 * reduce the dependency gui/DiffabsDemo/Makefile.am | 1 - 1 file changed, 1 deletion(-) commit 46fa1e0664206954290a281cd040f1f2ad1f4103 Author: Frédéric-Emmanuel PICCA Date: Fri May 7 09:57:20 2010 +0200 * add all the hkl3d gui part. configure.ac | 5 + gui/DiffabsDemo/DiffabsDemo.cpp | 234 ++++++ gui/DiffabsDemo/DiffabsDemo.h | 75 ++ gui/DiffabsDemo/Makefile.am | 33 + gui/DiffabsDemo/main.cpp | 50 ++ gui/Makefile.am | 2 + gui/OpenGL/DebugCastResult.h | 88 +++ gui/OpenGL/DemoApplication.cpp | 1316 +++++++++++++++++++++++++++++++++ gui/OpenGL/DemoApplication.h | 246 ++++++ gui/OpenGL/GLDebugDrawer.cpp | 140 ++++ gui/OpenGL/GLDebugDrawer.h | 38 + gui/OpenGL/GLDebugFont.cpp | 987 +++++++++++++++++++++++++ gui/OpenGL/GLDebugFont.h | 27 + gui/OpenGL/GL_DialogDynamicsWorld.cpp | 739 ++++++++++++++++++ gui/OpenGL/GL_DialogDynamicsWorld.h | 91 +++ gui/OpenGL/GL_DialogWindow.cpp | 336 +++++++++ gui/OpenGL/GL_DialogWindow.h | 283 +++++++ gui/OpenGL/GL_ShapeDrawer.cpp | 985 ++++++++++++++++++++++++ gui/OpenGL/GL_ShapeDrawer.h | 70 ++ gui/OpenGL/GL_Simplex1to4.cpp | 73 ++ gui/OpenGL/GL_Simplex1to4.h | 40 + gui/OpenGL/GlutDemoApplication.cpp | 71 ++ gui/OpenGL/GlutDemoApplication.h | 34 + gui/OpenGL/GlutStuff.cpp | 109 +++ gui/OpenGL/GlutStuff.h | 84 +++ gui/OpenGL/Makefile.am | 33 + gui/OpenGL/RenderTexture.cpp | 86 +++ gui/OpenGL/RenderTexture.h | 73 ++ gui/OpenGL/Win32AppMain.cpp | 402 ++++++++++ gui/OpenGL/Win32DemoApplication.cpp | 79 ++ gui/OpenGL/Win32DemoApplication.h | 40 + gui/ghkl3d/Makefile.am | 53 ++ gui/ghkl3d/hkl3d-gui-application.cpp | 201 +++++ gui/ghkl3d/hkl3d-gui-application.h | 81 ++ gui/ghkl3d/hkl3d-gui-gl.c | 814 ++++++++++++++++++++ gui/ghkl3d/hkl3d-gui-gl.h | 64 ++ gui/ghkl3d/hkl3d-gui-model.cpp | 316 ++++++++ gui/ghkl3d/hkl3d-gui-model.h | 157 ++++ gui/ghkl3d/hkl3d-gui-scene.cpp | 403 ++++++++++ gui/ghkl3d/hkl3d-gui-scene.h | 112 +++ gui/ghkl3d/hkl3d-gui-view.cpp | 171 +++++ gui/ghkl3d/hkl3d-gui-view.h | 108 +++ gui/ghkl3d/main.cpp | 66 ++ gui/ghkl3d/texture.c | 43 ++ gui/ghkl3d/texture.h | 30 + gui/ghkl3d/trackball.c | 324 ++++++++ gui/ghkl3d/trackball.h | 78 ++ 47 files changed, 9890 insertions(+) commit 60245c6e789557697dc75c460e35eff3713e7673 Author: Frédéric-Emmanuel PICCA Date: Fri May 7 09:33:40 2010 +0200 * resynchronize with the hkl3d project. configure.ac | 2 + hkl3d/ConvexDecomposition/ConvexBuilder.cpp | 373 +++ hkl3d/ConvexDecomposition/ConvexBuilder.h | 112 + hkl3d/ConvexDecomposition/ConvexDecomposition.cpp | 375 +++ hkl3d/ConvexDecomposition/ConvexDecomposition.h | 220 ++ hkl3d/ConvexDecomposition/Makefile.am | 43 + hkl3d/ConvexDecomposition/bestfit.cpp | 466 +++ hkl3d/ConvexDecomposition/bestfit.h | 65 + hkl3d/ConvexDecomposition/bestfitobb.cpp | 173 ++ hkl3d/ConvexDecomposition/bestfitobb.h | 43 + hkl3d/ConvexDecomposition/cd_hull.cpp | 3257 ++++++++++++++++++++ hkl3d/ConvexDecomposition/cd_hull.h | 153 + hkl3d/ConvexDecomposition/cd_vector.h | 1185 +++++++ hkl3d/ConvexDecomposition/cd_wavefront.cpp | 860 ++++++ hkl3d/ConvexDecomposition/cd_wavefront.h | 62 + hkl3d/ConvexDecomposition/concavity.h | 60 + hkl3d/ConvexDecomposition/fitsphere.cpp | 202 ++ hkl3d/ConvexDecomposition/fitsphere.h | 43 + hkl3d/ConvexDecomposition/float_math.cpp | 257 ++ hkl3d/ConvexDecomposition/float_math.h | 72 + hkl3d/ConvexDecomposition/meshvolume.cpp | 128 + hkl3d/ConvexDecomposition/meshvolume.h | 45 + hkl3d/ConvexDecomposition/planetri.cpp | 238 ++ hkl3d/ConvexDecomposition/planetri.h | 58 + hkl3d/ConvexDecomposition/raytri.cpp | 134 + hkl3d/ConvexDecomposition/raytri.h | 45 + hkl3d/ConvexDecomposition/splitplane.cpp | 306 ++ hkl3d/ConvexDecomposition/splitplane.h | 59 + hkl3d/ConvexDecomposition/vlookup.cpp | 307 ++ hkl3d/ConvexDecomposition/vlookup.h | 119 + hkl3d/GIMPACTUtils/Makefile.am | 18 + .../btGImpactConvexDecompositionShape.cpp | 240 ++ .../btGImpactConvexDecompositionShape.h | 87 + hkl3d/Makefile.am | 8 +- hkl3d/hkl3d.cpp | 31 +- 35 files changed, 9829 insertions(+), 17 deletions(-) commit bd24ad05b233bd93160dba47d53c7ccb8b71ac38 Author: Frédéric-Emmanuel PICCA Date: Fri May 7 09:02:19 2010 +0200 * put the models in to my opinion, the right place data/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit d0d160df5adc46e32c8587a3a72fdf3bee53d509 Author: Frédéric-Emmanuel PICCA Date: Tue May 4 12:29:17 2010 +0200 * add the hkl3d library Makefile.am | 6 +- configure.ac | 102 +- data/Makefile.am | 2 + data/diffabs.dae | 701 +++++ gui/ghkl.cpp | 6 +- hkl3d.pc.in | 12 + hkl3d/Makefile.am | 36 + hkl3d/bullet/AUTHORS | 22 + hkl3d/bullet/BulletLicense.txt | 18 + hkl3d/bullet/COPYING | 674 +++++ hkl3d/bullet/ChangeLog | 755 +++++ hkl3d/bullet/Doxyfile | 768 +++++ hkl3d/bullet/LICENSE | 19 + hkl3d/bullet/Makefile.am | 3 + hkl3d/bullet/NEWS | 4 + hkl3d/bullet/README | 7 + hkl3d/bullet/RELEASING.TXT | 34 + hkl3d/bullet/VERSION | 1 + hkl3d/bullet/bullet.pc | 11 + hkl3d/bullet/src/Bullet-C-Api.h | 176 ++ .../BroadphaseCollision/btAxisSweep3.cpp | 37 + .../BroadphaseCollision/btAxisSweep3.h | 1051 +++++++ .../BroadphaseCollision/btBroadphaseInterface.h | 82 + .../BroadphaseCollision/btBroadphaseProxy.cpp | 17 + .../BroadphaseCollision/btBroadphaseProxy.h | 270 ++ .../BroadphaseCollision/btCollisionAlgorithm.cpp | 23 + .../BroadphaseCollision/btCollisionAlgorithm.h | 80 + .../BulletCollision/BroadphaseCollision/btDbvt.cpp | 1295 +++++++++ .../BulletCollision/BroadphaseCollision/btDbvt.h | 1256 +++++++++ .../BroadphaseCollision/btDbvtBroadphase.cpp | 796 ++++++ .../BroadphaseCollision/btDbvtBroadphase.h | 146 + .../BroadphaseCollision/btDispatcher.cpp | 22 + .../BroadphaseCollision/btDispatcher.h | 106 + .../BroadphaseCollision/btMultiSapBroadphase.cpp | 489 ++++ .../BroadphaseCollision/btMultiSapBroadphase.h | 151 + .../BroadphaseCollision/btOverlappingPairCache.cpp | 633 +++++ .../BroadphaseCollision/btOverlappingPairCache.h | 469 ++++ .../btOverlappingPairCallback.h | 40 + .../BroadphaseCollision/btQuantizedBvh.cpp | 1375 +++++++++ .../BroadphaseCollision/btQuantizedBvh.h | 579 ++++ .../BroadphaseCollision/btSimpleBroadphase.cpp | 349 +++ .../BroadphaseCollision/btSimpleBroadphase.h | 171 ++ .../CollisionDispatch/SphereTriangleDetector.cpp | 209 ++ .../CollisionDispatch/SphereTriangleDetector.h | 51 + .../btActivatingCollisionAlgorithm.cpp | 47 + .../btActivatingCollisionAlgorithm.h | 36 + .../btBox2dBox2dCollisionAlgorithm.cpp | 435 +++ .../btBox2dBox2dCollisionAlgorithm.h | 66 + .../btBoxBoxCollisionAlgorithm.cpp | 85 + .../CollisionDispatch/btBoxBoxCollisionAlgorithm.h | 66 + .../CollisionDispatch/btBoxBoxDetector.cpp | 704 +++++ .../CollisionDispatch/btBoxBoxDetector.h | 44 + .../CollisionDispatch/btCollisionConfiguration.h | 47 + .../CollisionDispatch/btCollisionCreateFunc.h | 45 + .../CollisionDispatch/btCollisionDispatcher.cpp | 303 ++ .../CollisionDispatch/btCollisionDispatcher.h | 159 ++ .../CollisionDispatch/btCollisionObject.cpp | 115 + .../CollisionDispatch/btCollisionObject.h | 508 ++++ .../CollisionDispatch/btCollisionWorld.cpp | 1416 ++++++++++ .../CollisionDispatch/btCollisionWorld.h | 470 ++++ .../btCompoundCollisionAlgorithm.cpp | 351 +++ .../btCompoundCollisionAlgorithm.h | 86 + .../btConvex2dConvex2dAlgorithm.cpp | 247 ++ .../btConvex2dConvex2dAlgorithm.h | 95 + .../btConvexConcaveCollisionAlgorithm.cpp | 321 +++ .../btConvexConcaveCollisionAlgorithm.h | 116 + .../CollisionDispatch/btConvexConvexAlgorithm.cpp | 574 ++++ .../CollisionDispatch/btConvexConvexAlgorithm.h | 109 + .../btConvexPlaneCollisionAlgorithm.cpp | 155 ++ .../btConvexPlaneCollisionAlgorithm.h | 84 + .../btDefaultCollisionConfiguration.cpp | 298 ++ .../btDefaultCollisionConfiguration.h | 135 + .../btEmptyCollisionAlgorithm.cpp | 34 + .../CollisionDispatch/btEmptyCollisionAlgorithm.h | 54 + .../CollisionDispatch/btGhostObject.cpp | 171 ++ .../CollisionDispatch/btGhostObject.h | 175 ++ .../CollisionDispatch/btInternalEdgeUtility.cpp | 772 ++++++ .../CollisionDispatch/btInternalEdgeUtility.h | 46 + .../CollisionDispatch/btManifoldResult.cpp | 134 + .../CollisionDispatch/btManifoldResult.h | 128 + .../btSimulationIslandManager.cpp | 392 +++ .../CollisionDispatch/btSimulationIslandManager.h | 81 + .../btSphereBoxCollisionAlgorithm.cpp | 260 ++ .../btSphereBoxCollisionAlgorithm.h | 75 + .../btSphereSphereCollisionAlgorithm.cpp | 105 + .../btSphereSphereCollisionAlgorithm.h | 66 + .../btSphereTriangleCollisionAlgorithm.cpp | 84 + .../btSphereTriangleCollisionAlgorithm.h | 69 + .../CollisionDispatch/btUnionFind.cpp | 81 + .../CollisionDispatch/btUnionFind.h | 126 + .../CollisionShapes/btBox2dShape.cpp | 42 + .../BulletCollision/CollisionShapes/btBox2dShape.h | 363 +++ .../BulletCollision/CollisionShapes/btBoxShape.cpp | 41 + .../BulletCollision/CollisionShapes/btBoxShape.h | 318 +++ .../CollisionShapes/btBvhTriangleMeshShape.cpp | 466 ++++ .../CollisionShapes/btBvhTriangleMeshShape.h | 139 + .../CollisionShapes/btCapsuleShape.cpp | 171 ++ .../CollisionShapes/btCapsuleShape.h | 173 ++ .../CollisionShapes/btCollisionMargin.h | 26 + .../CollisionShapes/btCollisionShape.cpp | 119 + .../CollisionShapes/btCollisionShape.h | 150 + .../CollisionShapes/btCompoundShape.cpp | 323 +++ .../CollisionShapes/btCompoundShape.h | 206 ++ .../CollisionShapes/btConcaveShape.cpp | 27 + .../CollisionShapes/btConcaveShape.h | 60 + .../CollisionShapes/btConeShape.cpp | 133 + .../BulletCollision/CollisionShapes/btConeShape.h | 100 + .../CollisionShapes/btConvex2dShape.cpp | 92 + .../CollisionShapes/btConvex2dShape.h | 80 + .../CollisionShapes/btConvexHullShape.cpp | 223 ++ .../CollisionShapes/btConvexHullShape.h | 120 + .../CollisionShapes/btConvexInternalShape.cpp | 151 + .../CollisionShapes/btConvexInternalShape.h | 202 ++ .../CollisionShapes/btConvexPointCloudShape.cpp | 157 ++ .../CollisionShapes/btConvexPointCloudShape.h | 105 + .../CollisionShapes/btConvexShape.cpp | 429 +++ .../CollisionShapes/btConvexShape.h | 82 + .../CollisionShapes/btConvexTriangleMeshShape.cpp | 315 +++ .../CollisionShapes/btConvexTriangleMeshShape.h | 75 + .../CollisionShapes/btCylinderShape.cpp | 222 ++ .../CollisionShapes/btCylinderShape.h | 192 ++ .../CollisionShapes/btEmptyShape.cpp | 50 + .../BulletCollision/CollisionShapes/btEmptyShape.h | 70 + .../CollisionShapes/btHeightfieldTerrainShape.cpp | 411 +++ .../CollisionShapes/btHeightfieldTerrainShape.h | 161 ++ .../BulletCollision/CollisionShapes/btMaterial.h | 35 + .../CollisionShapes/btMinkowskiSumShape.cpp | 60 + .../CollisionShapes/btMinkowskiSumShape.h | 60 + .../CollisionShapes/btMultiSphereShape.cpp | 167 ++ .../CollisionShapes/btMultiSphereShape.h | 99 + .../btMultimaterialTriangleMeshShape.cpp | 45 + .../btMultimaterialTriangleMeshShape.h | 121 + .../CollisionShapes/btOptimizedBvh.cpp | 391 +++ .../CollisionShapes/btOptimizedBvh.h | 65 + .../CollisionShapes/btPolyhedralConvexShape.cpp | 193 ++ .../CollisionShapes/btPolyhedralConvexShape.h | 98 + .../btScaledBvhTriangleMeshShape.cpp | 121 + .../CollisionShapes/btScaledBvhTriangleMeshShape.h | 62 + .../CollisionShapes/btShapeHull.cpp | 170 ++ .../BulletCollision/CollisionShapes/btShapeHull.h | 59 + .../CollisionShapes/btSphereShape.cpp | 71 + .../CollisionShapes/btSphereShape.h | 73 + .../CollisionShapes/btStaticPlaneShape.cpp | 107 + .../CollisionShapes/btStaticPlaneShape.h | 103 + .../CollisionShapes/btStridingMeshInterface.cpp | 331 +++ .../CollisionShapes/btStridingMeshInterface.h | 154 + .../CollisionShapes/btTetrahedronShape.cpp | 218 ++ .../CollisionShapes/btTetrahedronShape.h | 74 + .../CollisionShapes/btTriangleBuffer.cpp | 35 + .../CollisionShapes/btTriangleBuffer.h | 69 + .../CollisionShapes/btTriangleCallback.cpp | 28 + .../CollisionShapes/btTriangleCallback.h | 42 + .../CollisionShapes/btTriangleIndexVertexArray.cpp | 95 + .../CollisionShapes/btTriangleIndexVertexArray.h | 131 + .../btTriangleIndexVertexMaterialArray.cpp | 86 + .../btTriangleIndexVertexMaterialArray.h | 84 + .../CollisionShapes/btTriangleInfoMap.h | 238 ++ .../CollisionShapes/btTriangleMesh.cpp | 140 + .../CollisionShapes/btTriangleMesh.h | 69 + .../CollisionShapes/btTriangleMeshShape.cpp | 211 ++ .../CollisionShapes/btTriangleMeshShape.h | 89 + .../CollisionShapes/btTriangleShape.h | 182 ++ .../CollisionShapes/btUniformScalingShape.cpp | 115 + .../CollisionShapes/btUniformScalingShape.h | 87 + hkl3d/bullet/src/BulletCollision/Doxyfile | 746 +++++ .../src/BulletCollision/Gimpact/btBoxCollision.h | 647 +++++ .../src/BulletCollision/Gimpact/btClipPolygon.h | 182 ++ .../Gimpact/btContactProcessing.cpp | 181 ++ .../BulletCollision/Gimpact/btContactProcessing.h | 145 + .../src/BulletCollision/Gimpact/btGImpactBvh.cpp | 498 ++++ .../src/BulletCollision/Gimpact/btGImpactBvh.h | 396 +++ .../Gimpact/btGImpactCollisionAlgorithm.cpp | 904 ++++++ .../Gimpact/btGImpactCollisionAlgorithm.h | 306 ++ .../BulletCollision/Gimpact/btGImpactMassUtil.h | 60 + .../Gimpact/btGImpactQuantizedBvh.cpp | 528 ++++ .../Gimpact/btGImpactQuantizedBvh.h | 372 +++ .../src/BulletCollision/Gimpact/btGImpactShape.cpp | 203 ++ .../src/BulletCollision/Gimpact/btGImpactShape.h | 1171 ++++++++ .../Gimpact/btGenericPoolAllocator.cpp | 283 ++ .../Gimpact/btGenericPoolAllocator.h | 163 ++ .../BulletCollision/Gimpact/btGeometryOperations.h | 212 ++ .../src/BulletCollision/Gimpact/btQuantization.h | 88 + .../BulletCollision/Gimpact/btTriangleShapeEx.cpp | 218 ++ .../BulletCollision/Gimpact/btTriangleShapeEx.h | 180 ++ .../bullet/src/BulletCollision/Gimpact/gim_array.h | 326 +++ .../Gimpact/gim_basic_geometry_operations.h | 543 ++++ .../src/BulletCollision/Gimpact/gim_bitset.h | 123 + .../BulletCollision/Gimpact/gim_box_collision.h | 590 ++++ .../src/BulletCollision/Gimpact/gim_box_set.cpp | 182 ++ .../src/BulletCollision/Gimpact/gim_box_set.h | 674 +++++ .../src/BulletCollision/Gimpact/gim_clip_polygon.h | 210 ++ .../src/BulletCollision/Gimpact/gim_contact.cpp | 146 + .../src/BulletCollision/Gimpact/gim_contact.h | 164 ++ .../src/BulletCollision/Gimpact/gim_geom_types.h | 97 + .../src/BulletCollision/Gimpact/gim_geometry.h | 42 + .../src/BulletCollision/Gimpact/gim_hash_table.h | 902 ++++++ .../src/BulletCollision/Gimpact/gim_linear_math.h | 1573 +++++++++++ .../bullet/src/BulletCollision/Gimpact/gim_math.h | 157 ++ .../src/BulletCollision/Gimpact/gim_memory.cpp | 135 + .../src/BulletCollision/Gimpact/gim_memory.h | 190 ++ .../src/BulletCollision/Gimpact/gim_radixsort.h | 406 +++ .../BulletCollision/Gimpact/gim_tri_collision.cpp | 640 +++++ .../BulletCollision/Gimpact/gim_tri_collision.h | 379 +++ .../btContinuousConvexCollision.cpp | 236 ++ .../btContinuousConvexCollision.h | 52 + .../NarrowPhaseCollision/btConvexCast.cpp | 20 + .../NarrowPhaseCollision/btConvexCast.h | 73 + .../btConvexPenetrationDepthSolver.h | 42 + .../btDiscreteCollisionDetectorInterface.h | 89 + .../NarrowPhaseCollision/btGjkConvexCast.cpp | 176 ++ .../NarrowPhaseCollision/btGjkConvexCast.h | 50 + .../NarrowPhaseCollision/btGjkEpa2.cpp | 989 +++++++ .../NarrowPhaseCollision/btGjkEpa2.h | 73 + .../btGjkEpaPenetrationDepthSolver.cpp | 66 + .../btGjkEpaPenetrationDepthSolver.h | 43 + .../NarrowPhaseCollision/btGjkPairDetector.cpp | 456 +++ .../NarrowPhaseCollision/btGjkPairDetector.h | 103 + .../NarrowPhaseCollision/btManifoldPoint.h | 138 + .../btMinkowskiPenetrationDepthSolver.cpp | 362 +++ .../btMinkowskiPenetrationDepthSolver.h | 40 + .../NarrowPhaseCollision/btPersistentManifold.cpp | 260 ++ .../NarrowPhaseCollision/btPersistentManifold.h | 208 ++ .../NarrowPhaseCollision/btPointCollector.h | 64 + .../NarrowPhaseCollision/btRaycastCallback.cpp | 175 ++ .../NarrowPhaseCollision/btRaycastCallback.h | 71 + .../btSimplexSolverInterface.h | 63 + .../btSubSimplexConvexCast.cpp | 160 ++ .../NarrowPhaseCollision/btSubSimplexConvexCast.h | 50 + .../btVoronoiSimplexSolver.cpp | 609 ++++ .../NarrowPhaseCollision/btVoronoiSimplexSolver.h | 178 ++ .../Character/btCharacterControllerInterface.h | 45 + .../Character/btKinematicCharacterController.cpp | 553 ++++ .../Character/btKinematicCharacterController.h | 145 + .../ConstraintSolver/btConeTwistConstraint.cpp | 1117 ++++++++ .../ConstraintSolver/btConeTwistConstraint.h | 332 +++ .../ConstraintSolver/btConstraintSolver.h | 52 + .../ConstraintSolver/btContactConstraint.cpp | 134 + .../ConstraintSolver/btContactConstraint.h | 68 + .../ConstraintSolver/btContactSolverInfo.h | 87 + .../ConstraintSolver/btGeneric6DofConstraint.cpp | 1012 +++++++ .../ConstraintSolver/btGeneric6DofConstraint.h | 588 ++++ .../btGeneric6DofSpringConstraint.cpp | 146 + .../btGeneric6DofSpringConstraint.h | 54 + .../ConstraintSolver/btHinge2Constraint.cpp | 66 + .../ConstraintSolver/btHinge2Constraint.h | 58 + .../ConstraintSolver/btHingeConstraint.cpp | 992 +++++++ .../ConstraintSolver/btHingeConstraint.h | 332 +++ .../ConstraintSolver/btJacobianEntry.h | 156 ++ .../ConstraintSolver/btPoint2PointConstraint.cpp | 229 ++ .../ConstraintSolver/btPoint2PointConstraint.h | 161 ++ .../btSequentialImpulseConstraintSolver.cpp | 1174 ++++++++ .../btSequentialImpulseConstraintSolver.h | 132 + .../ConstraintSolver/btSliderConstraint.cpp | 857 ++++++ .../ConstraintSolver/btSliderConstraint.h | 321 +++ .../ConstraintSolver/btSolve2LinearConstraint.cpp | 255 ++ .../ConstraintSolver/btSolve2LinearConstraint.h | 107 + .../BulletDynamics/ConstraintSolver/btSolverBody.h | 191 ++ .../ConstraintSolver/btSolverConstraint.h | 96 + .../ConstraintSolver/btTypedConstraint.cpp | 136 + .../ConstraintSolver/btTypedConstraint.h | 302 ++ .../ConstraintSolver/btUniversalConstraint.cpp | 63 + .../ConstraintSolver/btUniversalConstraint.h | 60 + .../src/BulletDynamics/Dynamics/Bullet-C-API.cpp | 405 +++ .../BulletDynamics/Dynamics/btActionInterface.h | 50 + .../Dynamics/btContinuousDynamicsWorld.cpp | 196 ++ .../Dynamics/btContinuousDynamicsWorld.h | 46 + .../Dynamics/btDiscreteDynamicsWorld.cpp | 1161 ++++++++ .../Dynamics/btDiscreteDynamicsWorld.h | 198 ++ .../src/BulletDynamics/Dynamics/btDynamicsWorld.h | 148 + .../src/BulletDynamics/Dynamics/btRigidBody.cpp | 400 +++ .../src/BulletDynamics/Dynamics/btRigidBody.h | 670 +++++ .../Dynamics/btSimpleDynamicsWorld.cpp | 253 ++ .../Dynamics/btSimpleDynamicsWorld.h | 81 + .../BulletDynamics/Vehicle/btRaycastVehicle.cpp | 758 +++++ .../src/BulletDynamics/Vehicle/btRaycastVehicle.h | 236 ++ .../BulletDynamics/Vehicle/btVehicleRaycaster.h | 35 + .../src/BulletDynamics/Vehicle/btWheelInfo.cpp | 56 + .../src/BulletDynamics/Vehicle/btWheelInfo.h | 119 + .../src/BulletMultiThreaded/Makefile.original | 187 ++ hkl3d/bullet/src/BulletMultiThreaded/MiniCL.cpp | 517 ++++ .../BulletMultiThreaded/MiniCLTask/MiniCLTask.cpp | 74 + .../BulletMultiThreaded/MiniCLTask/MiniCLTask.h | 62 + .../BulletMultiThreaded/MiniCLTaskScheduler.cpp | 519 ++++ .../src/BulletMultiThreaded/MiniCLTaskScheduler.h | 194 ++ .../src/BulletMultiThreaded/PlatformDefinitions.h | 84 + .../src/BulletMultiThreaded/PosixThreadSupport.cpp | 249 ++ .../src/BulletMultiThreaded/PosixThreadSupport.h | 124 + .../src/BulletMultiThreaded/PpuAddressSpace.h | 20 + .../SequentialThreadSupport.cpp | 93 + .../BulletMultiThreaded/SequentialThreadSupport.h | 92 + .../SpuCollisionObjectWrapper.cpp | 48 + .../SpuCollisionObjectWrapper.h | 40 + .../SpuCollisionTaskProcess.cpp | 318 +++ .../BulletMultiThreaded/SpuCollisionTaskProcess.h | 163 ++ .../SpuContactManifoldCollisionAlgorithm.cpp | 69 + .../SpuContactManifoldCollisionAlgorithm.h | 120 + .../src/BulletMultiThreaded/SpuDoubleBuffer.h | 110 + .../bullet/src/BulletMultiThreaded/SpuFakeDma.cpp | 211 ++ hkl3d/bullet/src/BulletMultiThreaded/SpuFakeDma.h | 135 + .../SpuGatheringCollisionDispatcher.cpp | 251 ++ .../SpuGatheringCollisionDispatcher.h | 72 + .../src/BulletMultiThreaded/SpuLibspe2Support.cpp | 257 ++ .../src/BulletMultiThreaded/SpuLibspe2Support.h | 180 ++ .../SpuNarrowPhaseCollisionTask/Box.h | 172 ++ .../SpuCollisionShapes.cpp | 302 ++ .../SpuCollisionShapes.h | 126 + .../SpuContactResult.cpp | 242 ++ .../SpuNarrowPhaseCollisionTask/SpuContactResult.h | 106 + .../SpuConvexPenetrationDepthSolver.h | 51 + .../SpuGatheringCollisionTask.cpp | 1381 +++++++++ .../SpuGatheringCollisionTask.h | 140 + .../SpuNarrowPhaseCollisionTask/SpuLocalSupport.h | 19 + .../SpuMinkowskiPenetrationDepthSolver.cpp | 348 +++ .../SpuMinkowskiPenetrationDepthSolver.h | 48 + .../SpuPreferredPenetrationDirections.h | 70 + .../SpuNarrowPhaseCollisionTask/boxBoxDistance.cpp | 1155 ++++++++ .../SpuNarrowPhaseCollisionTask/boxBoxDistance.h | 66 + .../SpuNarrowPhaseCollisionTask/readme.txt | 1 + .../SpuSampleTask/SpuSampleTask.cpp | 214 ++ .../SpuSampleTask/SpuSampleTask.h | 54 + .../BulletMultiThreaded/SpuSampleTask/readme.txt | 1 + .../BulletMultiThreaded/SpuSampleTaskProcess.cpp | 222 ++ .../src/BulletMultiThreaded/SpuSampleTaskProcess.h | 153 + hkl3d/bullet/src/BulletMultiThreaded/SpuSync.h | 148 + .../src/BulletMultiThreaded/Win32ThreadSupport.cpp | 262 ++ .../src/BulletMultiThreaded/Win32ThreadSupport.h | 132 + .../BulletMultiThreaded/btGpu3DGridBroadphase.cpp | 590 ++++ .../BulletMultiThreaded/btGpu3DGridBroadphase.h | 138 + .../btGpu3DGridBroadphaseSharedCode.h | 430 +++ .../btGpu3DGridBroadphaseSharedDefs.h | 61 + .../btGpu3DGridBroadphaseSharedTypes.h | 67 + .../bullet/src/BulletMultiThreaded/btGpuDefines.h | 211 ++ .../src/BulletMultiThreaded/btGpuUtilsSharedCode.h | 55 + .../src/BulletMultiThreaded/btGpuUtilsSharedDefs.h | 52 + .../btParallelConstraintSolver.cpp | 74 + .../btParallelConstraintSolver.h | 42 + .../btThreadSupportInterface.cpp | 22 + .../BulletMultiThreaded/btThreadSupportInterface.h | 50 + .../vectormath/scalar/cpp/boolInVec.h | 225 ++ .../vectormath/scalar/cpp/floatInVec.h | 343 +++ .../vectormath/scalar/cpp/mat_aos.h | 1630 +++++++++++ .../vectormath/scalar/cpp/quat_aos.h | 433 +++ .../vectormath/scalar/cpp/vec_aos.h | 1426 ++++++++++ .../vectormath/scalar/cpp/vectormath_aos.h | 1872 +++++++++++++ .../src/BulletMultiThreaded/vectormath2bullet.h | 80 + hkl3d/bullet/src/BulletSoftBody/btSoftBody.cpp | 2931 ++++++++++++++++++++ hkl3d/bullet/src/BulletSoftBody/btSoftBody.h | 891 ++++++ .../btSoftBodyConcaveCollisionAlgorithm.cpp | 368 +++ .../btSoftBodyConcaveCollisionAlgorithm.h | 153 + .../src/BulletSoftBody/btSoftBodyHelpers.cpp | 1019 +++++++ .../bullet/src/BulletSoftBody/btSoftBodyHelpers.h | 143 + .../src/BulletSoftBody/btSoftBodyInternals.h | 931 +++++++ .../btSoftBodyRigidBodyCollisionConfiguration.cpp | 134 + .../btSoftBodyRigidBodyCollisionConfiguration.h | 48 + .../btSoftRigidCollisionAlgorithm.cpp | 82 + .../BulletSoftBody/btSoftRigidCollisionAlgorithm.h | 75 + .../BulletSoftBody/btSoftRigidDynamicsWorld.cpp | 292 ++ .../src/BulletSoftBody/btSoftRigidDynamicsWorld.h | 97 + .../btSoftSoftCollisionAlgorithm.cpp | 46 + .../BulletSoftBody/btSoftSoftCollisionAlgorithm.h | 69 + hkl3d/bullet/src/BulletSoftBody/btSparseSDF.h | 306 ++ hkl3d/bullet/src/LinearMath/btAabbUtil2.h | 236 ++ hkl3d/bullet/src/LinearMath/btAlignedAllocator.cpp | 205 ++ hkl3d/bullet/src/LinearMath/btAlignedAllocator.h | 107 + hkl3d/bullet/src/LinearMath/btAlignedObjectArray.h | 464 ++++ hkl3d/bullet/src/LinearMath/btConvexHull.cpp | 1174 ++++++++ hkl3d/bullet/src/LinearMath/btConvexHull.h | 241 ++ hkl3d/bullet/src/LinearMath/btDefaultMotionState.h | 40 + hkl3d/bullet/src/LinearMath/btGeometryUtil.cpp | 185 ++ hkl3d/bullet/src/LinearMath/btGeometryUtil.h | 42 + hkl3d/bullet/src/LinearMath/btHashMap.h | 434 +++ hkl3d/bullet/src/LinearMath/btIDebugDraw.h | 316 +++ hkl3d/bullet/src/LinearMath/btList.h | 73 + hkl3d/bullet/src/LinearMath/btMatrix3x3.h | 688 +++++ hkl3d/bullet/src/LinearMath/btMinMax.h | 69 + hkl3d/bullet/src/LinearMath/btMotionState.h | 40 + hkl3d/bullet/src/LinearMath/btPoolAllocator.h | 102 + hkl3d/bullet/src/LinearMath/btQuadWord.h | 180 ++ hkl3d/bullet/src/LinearMath/btQuaternion.h | 433 +++ hkl3d/bullet/src/LinearMath/btQuickprof.cpp | 346 +++ hkl3d/bullet/src/LinearMath/btQuickprof.h | 370 +++ hkl3d/bullet/src/LinearMath/btRandom.h | 42 + hkl3d/bullet/src/LinearMath/btScalar.h | 517 ++++ hkl3d/bullet/src/LinearMath/btSerializer.cpp | 577 ++++ hkl3d/bullet/src/LinearMath/btSerializer.h | 604 ++++ hkl3d/bullet/src/LinearMath/btStackAlloc.h | 116 + hkl3d/bullet/src/LinearMath/btTransform.h | 307 ++ hkl3d/bullet/src/LinearMath/btTransformUtil.h | 228 ++ hkl3d/bullet/src/LinearMath/btVector3.h | 744 +++++ hkl3d/bullet/src/Makefile.am | 364 +++ hkl3d/bullet/src/MiniCL/cl.h | 865 ++++++ hkl3d/bullet/src/MiniCL/cl_MiniCL_Defs.h | 265 ++ hkl3d/bullet/src/MiniCL/cl_gl.h | 113 + hkl3d/bullet/src/MiniCL/cl_platform.h | 254 ++ hkl3d/bullet/src/btBulletCollisionCommon.h | 68 + hkl3d/bullet/src/btBulletDynamicsCommon.h | 49 + hkl3d/hkl3d.cpp | 290 ++ hkl3d/hkl3d.h | 78 + test/Makefile.am | 43 +- test/hkl/Makefile.am | 42 + test/{ => hkl}/bench.c | 0 test/{ => hkl}/hkl-test-axis.c | 0 test/{ => hkl}/hkl-test-detector.c | 0 test/{ => hkl}/hkl-test-error.c | 0 test/{ => hkl}/hkl-test-geometry.c | 0 test/{ => hkl}/hkl-test-interval.c | 0 test/{ => hkl}/hkl-test-lattice.c | 0 test/{ => hkl}/hkl-test-matrix.c | 0 test/{ => hkl}/hkl-test-parameter.c | 0 test/{ => hkl}/hkl-test-pseudoaxis-e4cv.c | 0 test/{ => hkl}/hkl-test-pseudoaxis-e6c.c | 0 test/{ => hkl}/hkl-test-pseudoaxis-k4cv.c | 0 test/{ => hkl}/hkl-test-pseudoaxis-k6c.c | 0 test/{ => hkl}/hkl-test-pseudoaxis.c | 0 test/{ => hkl}/hkl-test-quaternion.c | 0 test/{ => hkl}/hkl-test-sample.c | 0 test/{ => hkl}/hkl-test-source.c | 0 test/{ => hkl}/hkl-test-vector.c | 0 test/{ => hkl}/hkl-test.c | 0 test/{ => hkl}/hkl-test.h | 0 test/{ => hkl}/main.c | 0 test/hkl3d/Makefile.am | 24 + test/hkl3d/main.cpp | 50 + 423 files changed, 104557 insertions(+), 53 deletions(-) commit 1d38eebc336ab3b5059b397b52f580fc6ee31e82 Author: Frédéric-Emmanuel PICCA Date: Tue Apr 20 10:50:53 2010 +0200 * add a new method for the hkl3d library hkl/hkl-geometry.c | 26 ++++++++++++++++++++++++++ hkl/hkl-geometry.h | 3 +++ 2 files changed, 29 insertions(+) commit ab3ed9088ce3346ddc271f221406017bd03404cf Author: Frédéric-Emmanuel PICCA Date: Wed Apr 14 14:18:15 2010 +0200 * prepare for release NEWS | 7 ++++--- configure.ac | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) commit 7cefeb6687df94811555a5506955b9ce6fb61096 Author: Picca Frédéric-Emmanuel Date: Mon Apr 5 14:33:55 2010 +0200 * switch to c89 instead of c99 to ease compilation on windows. also use alloca instead of variable length arrays configure.ac | 10 ++-- hkl/Makefile.am | 4 +- hkl/hkl-axis.c | 4 +- hkl/hkl-axis.h | 2 +- hkl/hkl-detector-factory.h | 2 +- hkl/hkl-detector.c | 4 +- hkl/hkl-geometry.c | 57 +++++++++++-------- hkl/hkl-geometry.h | 2 +- hkl/hkl-lattice.c | 52 +++++++++-------- hkl/hkl-macros.h | 19 ++++--- hkl/hkl-pseudoaxis-auto.c | 42 ++++++++------ hkl/hkl-pseudoaxis-common-eulerians.c | 8 +-- hkl/hkl-pseudoaxis-common-hkl.c | 62 ++++++++++---------- hkl/hkl-pseudoaxis-common-psi.c | 69 +++++++++++----------- hkl/hkl-pseudoaxis-common-q.c | 20 +++---- hkl/hkl-pseudoaxis-common.c | 2 +- hkl/hkl-pseudoaxis-e4cv-hkl.c | 10 ++-- hkl/hkl-pseudoaxis-e4cv-psi.c | 2 +- hkl/hkl-pseudoaxis-e6c-hkl.c | 10 ++-- hkl/hkl-pseudoaxis-e6c-psi.c | 2 +- hkl/hkl-pseudoaxis-k4cv-hkl.c | 10 ++-- hkl/hkl-pseudoaxis-k4cv-psi.c | 2 +- hkl/hkl-pseudoaxis-k6c-hkl.c | 10 ++-- hkl/hkl-pseudoaxis-k6c-psi.c | 2 +- hkl/hkl-pseudoaxis.c | 31 +++++----- hkl/hkl-quaternion.c | 18 +++--- hkl/hkl-sample.c | 38 +++++++------ hkl/hkl-unit.c | 2 +- hkl/hkl-unit.h | 2 +- hkl/hkl-vector.c | 2 +- test/Makefile.am | 2 +- test/bench.c | 16 +++--- test/hkl-test-axis.c | 4 +- test/hkl-test-geometry.c | 6 +- test/hkl-test-interval.c | 104 +++++++++++++++++----------------- test/hkl-test-lattice.c | 28 ++++----- test/hkl-test-pseudoaxis-e4cv.c | 41 +++++++------- test/hkl-test-pseudoaxis-e6c.c | 22 +++---- test/hkl-test-pseudoaxis-k4cv.c | 32 +++++------ test/hkl-test-pseudoaxis-k6c.c | 42 +++++++------- test/hkl-test-pseudoaxis.c | 39 ++++++------- test/hkl-test-quaternion.c | 6 +- test/hkl-test-sample.c | 17 +++--- test/hkl-test.c | 3 +- test/hkl-test.h | 2 +- test/main.c | 2 +- 46 files changed, 449 insertions(+), 417 deletions(-) commit a7a097f3c5550f4a508cfc5ff2731b2db3ab608e Author: Picca Frédéric-Emmanuel Date: Mon Apr 5 10:17:23 2010 +0200 * do not initialize a geometry from another geometry type hkl/hkl-geometry.c | 4 ++++ 1 file changed, 4 insertions(+) commit 2b78a6dbfb239d4a0bad673d177f9eed7bd57c45 Author: Picca Frédéric-Emmanuel Date: Mon Apr 5 09:33:22 2010 +0200 * update the TODO list TODO | 2 ++ 1 file changed, 2 insertions(+) commit 55bbdb7a0b082d9769058185dac5506b32b9dda6 Author: Picca Frédéric-Emmanuel Date: Mon Apr 5 09:31:30 2010 +0200 * add the HklGeometryListItem that way it will be possible to associate information to geometries like (distance, exclusion information) gui/ghkl-callbacks.cpp | 6 ++- gui/ghkl.cpp | 4 +- gui/pseudoaxesframe.cpp | 3 +- hkl/hkl-geometry.c | 89 +++++++++++++++++++++++++++++------------ hkl/hkl-geometry.h | 20 ++++++++- hkl/hkl-pseudoaxis-factory.c | 4 +- hkl/hkl-pseudoaxis.c | 4 +- test/bench.c | 5 ++- test/hkl-test-geometry.c | 22 ++++++---- test/hkl-test-pseudoaxis-e4cv.c | 20 +++++---- test/hkl-test-pseudoaxis-e6c.c | 10 +++-- test/hkl-test-pseudoaxis-k4cv.c | 18 +++++---- test/hkl-test-pseudoaxis-k6c.c | 31 ++++++++------ test/hkl-test-pseudoaxis.c | 5 ++- 14 files changed, 163 insertions(+), 78 deletions(-) commit 6c38b669163e033762ef34f87aa51d2cfc310316 Author: Frédéric-Emmanuel PICCA Date: Wed Mar 24 17:09:16 2010 +0100 * update the readme and news files. NEWS | 11 +++++++---- README | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) commit dda22cb3fcd41e2245ddb1d30f5641f104341f7c Author: Frédéric-Emmanuel PICCA Date: Wed Mar 24 17:02:45 2010 +0100 * add an HklGeometryConfig struct which contain all common part of the equivalent geometries. gui/ghkl-callbacks.cpp | 8 +++--- hkl/hkl-geometry-factory.c | 64 +++++++++++++++++++++++++++-------------- hkl/hkl-geometry-factory.h | 25 +++------------- hkl/hkl-geometry.c | 4 +-- hkl/hkl-geometry.h | 21 ++++++++++++-- hkl/hkl-pseudoaxis-factory.c | 4 +-- hkl/hkl-pseudoaxis-factory.h | 2 +- test/bench.c | 12 +++++--- test/hkl-test-pseudoaxis-e4cv.c | 36 +++++++++++++++-------- test/hkl-test-pseudoaxis-e6c.c | 18 ++++++++---- test/hkl-test-pseudoaxis-k4cv.c | 18 ++++++++---- test/hkl-test-pseudoaxis-k6c.c | 30 ++++++++++++------- test/hkl-test-pseudoaxis.c | 26 ++++++++++------- test/hkl-test-sample.c | 28 +++++++++++++----- 14 files changed, 187 insertions(+), 109 deletions(-) commit cd73f424416727c2069773a688b1aff22bf31bd0 Author: Picca Frédéric-Emmanuel Date: Tue Mar 23 22:13:07 2010 +0100 * fix a possible segfault gui/ghkl-callbacks.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit d8c58cb009a9da9ab591d2453999d49d2272abfc Author: Picca Frédéric-Emmanuel Date: Tue Mar 23 22:12:48 2010 +0100 * remove useless code gui/ghkl-callbacks.cpp | 161 ------------------------------------------------- gui/ghkl.h | 15 +---- 2 files changed, 1 insertion(+), 175 deletions(-) commit 1c9734a9c376de903c09fad4fdcaefe7fa900cf6 Author: Picca Frédéric-Emmanuel Date: Tue Mar 23 21:43:43 2010 +0100 * now we can switch from one diffractometer to another one. gui/ghkl-callbacks.cpp | 20 +++++++++ gui/ghkl.cpp | 101 +++++++++++++++++++++++++++------------------ gui/ghkl.h | 8 ++-- gui/main.cpp | 2 +- hkl/hkl-geometry-factory.h | 17 ++++++++ 5 files changed, 102 insertions(+), 46 deletions(-) commit 3ffa80e697ed5c52e3bcb60cbb1b827cd7057b23 Author: Picca Frédéric-Emmanuel Date: Tue Mar 23 10:44:16 2010 +0100 * refactoring of the ghkl sample set parameters TODO | 3 + gui/ghkl-callbacks.cpp | 271 +++-------- gui/ghkl.cpp | 39 +- gui/ghkl.h | 2 + gui/ghkl.ui | 1255 +++++++++++++++++++++++++----------------------- 5 files changed, 717 insertions(+), 853 deletions(-) commit 9675896e5797db67da66cbcb3638dc3955c65dc4 Author: Picca Frédéric-Emmanuel Date: Tue Mar 23 09:16:46 2010 +0100 * add also LOG in the callbacks gui/ghkl-callbacks.cpp | 134 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) commit c9f76ab5bf93a04096b8b6d5f34c58720cdbfd48 Author: Picca Frédéric-Emmanuel Date: Mon Mar 22 22:47:07 2010 +0100 * add a log to help dealing with callbacks gui/ghkl.cpp | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---- gui/ghkl.h | 3 +++ 2 files changed, 58 insertions(+), 4 deletions(-) commit 3f3e581aa138691c84ae12ec637b254b24db522a Author: Picca Frédéric-Emmanuel Date: Mon Mar 22 22:31:49 2010 +0100 * small refactoring of the ghkl constructor gui/ghkl.cpp | 40 ++++++++++++++++++++++++---------------- gui/ghkl.h | 3 ++- 2 files changed, 26 insertions(+), 17 deletions(-) commit 24562b1bc6e3aac7a97563256880df649ef2a4e3 Author: Picca Frédéric-Emmanuel Date: Mon Mar 22 22:21:49 2010 +0100 * typo gui/ghkl.cpp | 33 ++++++++++++++++++++++----------- gui/ghkl.h | 48 ++++++++++++++++++++++++++++++++---------------- 2 files changed, 54 insertions(+), 27 deletions(-) commit 03e576066bf8939e7986999955ac41e730d251b3 Author: Picca Frédéric-Emmanuel Date: Mon Mar 22 22:18:34 2010 +0100 * remove useless code gui/ghkl.cpp | 5 ----- gui/ghkl.h | 2 -- 2 files changed, 7 deletions(-) commit 86e24bcedec33a948989321c0ec362fe62a287cc Author: Picca Frédéric-Emmanuel Date: Mon Mar 22 22:11:11 2010 +0100 * refactoring of the ghkl part gui/Makefile.am | 7 +- gui/ghkl-callbacks.cpp | 1118 ++++++++++++++++++++++++ gui/ghkl.cpp | 874 +++++++++++++++++++ gui/{hklwindow.h => ghkl.h} | 13 +- gui/{hkl.ui => ghkl.ui} | 0 gui/hklwindow.cpp | 1976 ------------------------------------------- gui/main.cpp | 2 +- 7 files changed, 2006 insertions(+), 1984 deletions(-) commit ed070a9f4a048855731c4192bb40c002469ced93 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 22 17:23:08 2010 +0100 * add the TAU = 1 define hkl/hkl-macros.h | 2 ++ 1 file changed, 2 insertions(+) commit f44d1d5a5450e1032c689b0710d6844b5732bfa3 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 22 17:22:52 2010 +0100 * remove unneeded fprintf message test/hkl-test-sample.c | 1 - 1 file changed, 1 deletion(-) commit a13828b04f289543635262030ef4c91ba0892b43 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 22 17:22:36 2010 +0100 * refactor the sample set_UB and afine methods hkl/hkl-sample.c | 178 +++++++++++++++++++++++++++++++++++-------------------- hkl/hkl-sample.h | 2 +- 2 files changed, 115 insertions(+), 65 deletions(-) commit 9d960ae760934c6b14a2b5cc03b174833bd2271a Author: Picca Frédéric-Emmanuel Date: Sat Mar 20 16:04:49 2010 +0100 * add the setUB toolbutton and reorganize the ui gui/hkl.ui | 2950 ++++++++++++++++++++++++++++------------------------- gui/hklwindow.cpp | 36 + gui/hklwindow.h | 11 + 3 files changed, 1598 insertions(+), 1399 deletions(-) commit 13540127467181511b743aa4bfc3f86a122e456b Author: Picca Frédéric-Emmanuel Date: Sat Mar 20 11:01:07 2010 +0100 * remove a memory leak gui/hklwindow.cpp | 21 ++++++++++++--------- gui/hklwindow.h | 1 + 2 files changed, 13 insertions(+), 9 deletions(-) commit 69a387ab3952daeb829e3971e7904777910ea376 Author: Picca Frédéric-Emmanuel Date: Sat Mar 20 10:14:35 2010 +0100 * remove unneeded columns in treeviews gui/hklwindow.cpp | 13 ------------- gui/modelcolumns.h | 6 ------ 2 files changed, 19 deletions(-) commit fe708c4181a5607446e9fdf16602734f98784c49 Author: Picca Frédéric-Emmanuel Date: Sat Mar 20 10:13:56 2010 +0100 * better look of the UB matrix gui/hklwindow.cpp | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) commit 1120eddb42decb5ec27fd50709e1facf9221fc3b Author: Picca Frédéric-Emmanuel Date: Thu Mar 18 17:08:55 2010 +0100 * typo test/hkl-test-lattice.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 93d961238a8fbe61b996e7061795d8af9778f9d7 Author: Picca Frédéric-Emmanuel Date: Thu Mar 18 17:07:34 2010 +0100 * set the UB matrix from an external one. hkl/hkl-sample.c | 24 ++++++++++++++++++++++++ hkl/hkl-sample.h | 4 +++- test/hkl-test-sample.c | 25 +++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) commit efd8b767eaff8ab30d0fec12bf62e1a15a47c7f8 Author: Picca Frédéric-Emmanuel Date: Thu Mar 18 17:06:35 2010 +0100 * add the get_1_B method to the HklLattice. hkl/hkl-lattice.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ hkl/hkl-lattice.h | 2 ++ test/hkl-test-lattice.c | 26 +++++++++++++++++++++++ 3 files changed, 83 insertions(+) commit b9685cf4526319a9313a426d39b65a535b5a7368 Author: picca Date: Mon Mar 15 18:50:22 2010 +0100 * use the ux uy and uz sample parameters in the gui gui/hkl.ui | 445 ++++++++++++++++++++++++++++++------------------------ gui/hklwindow.cpp | 52 +++++-- gui/hklwindow.h | 8 +- 3 files changed, 293 insertions(+), 212 deletions(-) commit 1f7b0557427ffa698d1d0f918e7b6b41adc97c95 Author: picca Date: Mon Mar 15 18:46:35 2010 +0100 * add the ux uy and uz HklParameter into HklSample hkl/hkl-sample.c | 54 ++++++++++++++++++++++++++++++++++++++++++++------ hkl/hkl-sample.h | 3 +++ test/hkl-test-sample.c | 12 +++++++++++ 3 files changed, 63 insertions(+), 6 deletions(-) commit 2b0d3f55236b76a0f85b8e68baa79bddf301a917 Author: picca Date: Mon Mar 15 18:45:58 2010 +0100 * remove debug stream hkl/hkl-pseudoaxis-auto.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fb5cc8a2f438c41cbab1a160214807ccce593950 Author: picca Date: Mon Mar 15 16:05:26 2010 +0100 * bug when setting the sample c values in the treeview. gui/hklwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b93f76251c0917288b5d15eccedccaf7f2f7b65b Author: picca Date: Mon Mar 15 15:56:37 2010 +0100 * remove a few lines in the hkl.ui interface gui/hkl.ui | 4 ++++ 1 file changed, 4 insertions(+) commit 9ce86ec1c0f09b0bbddbf6097ec00e0f6deac995 Author: picca Date: Mon Mar 15 15:56:07 2010 +0100 * set the right unit for ux, uy and uz gui/hklwindow.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 196e15a0fa6f72a56e3e0423f2ad5ea04e33063b Author: picca Date: Mon Mar 15 11:25:33 2010 +0100 * remove all the useless affinement part. gui/hkl.ui | 1316 +++++++++++++++++++++++------------------------------ gui/hklwindow.cpp | 74 +-- gui/hklwindow.h | 9 - 3 files changed, 583 insertions(+), 816 deletions(-) commit 1a9b20091ee0d5286fe555e6e90091d1c63c7510 Author: picca Date: Fri Mar 12 18:56:30 2010 +0100 * do not use relection if the flag is unset hkl/hkl-sample.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) commit 0ea8b3e3524baf4bc661f60f2f87dc8554b12cd4 Author: Picca Frédéric-Emmanuel Date: Sun Mar 7 16:38:35 2010 +0100 * update the TODO list for the foating comparison TODO | 2 ++ 1 file changed, 2 insertions(+) commit 5a24f66bf31a5ee081a0be1be173e690360f637d Author: Picca Frédéric-Emmanuel Date: Sat Mar 6 11:51:26 2010 +0100 * remove the empty window. gui/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6e234b1bc92175e119b4a6609b911824a4015962 Author: Picca Frédéric-Emmanuel Date: Sat Mar 6 11:03:40 2010 +0100 * add the liststore to contain all the diffractometers gui/hkl.ui | 15 +++++++++++++++ gui/hklwindow.cpp | 4 ++++ gui/hklwindow.h | 3 +++ gui/modelcolumns.h | 13 +++++++++++++ 4 files changed, 35 insertions(+) commit f880e2dd4e9ad6ae25b4d9b9ee1608cf549f731c Author: Picca Frédéric-Emmanuel Date: Sat Mar 6 10:44:28 2010 +0100 * add the preference dialog gui/hkl.ui | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++---- gui/hklwindow.cpp | 30 +++++++++++++++++++ gui/hklwindow.h | 11 +++++++ 3 files changed, 123 insertions(+), 6 deletions(-) commit 69f21adbbc6f21c84520548928dc12876eb858a9 Author: Frédéric-Emmanuel PICCA Date: Thu Mar 4 15:58:07 2010 +0100 * the missing part of the rename '* _' -> '*_' gui/hklwindow.h | 118 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 59 insertions(+), 59 deletions(-) commit d05449bb19cd366e6cafd9041221ca807e467229 Author: Frédéric-Emmanuel PICCA Date: Wed Mar 3 16:54:52 2010 +0100 * add some DEBUG capability in the pseudo axes auto file to ease the debugging. hkl/hkl-pseudoaxis-auto.c | 78 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 53 insertions(+), 25 deletions(-) commit a9f431588685700e6a3c3758150a86109c6daa66 Author: Frédéric-Emmanuel PICCA Date: Wed Mar 3 15:39:03 2010 +0100 * solve a bug in the pseudo axes set method now if only one of the solved function sucess, return success. hkl/hkl-pseudoaxis-auto.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 42fd3962ce6e04694b5c48eef9cb6300bcc17798 Author: Frédéric-Emmanuel PICCA Date: Wed Mar 3 15:36:30 2010 +0100 * doc :) gui/pseudoaxesframe.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 08c8af0b8c92b954a68da858f65f0558967fdc0a Author: Frédéric-Emmanuel PICCA Date: Wed Mar 3 13:54:40 2010 +0100 * fix a typo in the pseudo.ui file gui/hkl.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bfc4a4ecb3c0ad8ec53f43716739a6824b7e1c63 Author: Frédéric-Emmanuel PICCA Date: Wed Mar 3 08:42:27 2010 +0100 * rename members m_ -> _ gui/hklwindow.cpp | 794 +++++++++++++++++++++++++++--------------------------- gui/hklwindow.h | 156 +++++------ 2 files changed, 475 insertions(+), 475 deletions(-) commit 9cf926035e9cb53e546717e70bd3c047fdd25ce4 Author: Picca Frédéric-Emmanuel Date: Mon Mar 1 19:50:45 2010 +0100 * add a new compilation flag -Wmissing-declarations to avoid futur bugs like functions signature discripencies hkl/Makefile.am | 2 +- hkl/hkl-macros.h | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) commit 6de06ff4a5afd0be6d6c6bc83fd5321587e9bd03 Author: Frédéric-Emmanuel PICCA Date: Tue Mar 2 17:18:06 2010 +0100 * reorganisation of the gui gui/hkl.ui | 1911 ++++++++++++++++++++++++++++++------------------------------ 1 file changed, 945 insertions(+), 966 deletions(-) commit 51f2311af71ba10ec06736c7a1fa07eac655438c Author: Frédéric-Emmanuel PICCA Date: Tue Mar 2 17:09:43 2010 +0100 * add the uxuyuz part gui/hkl.ui | 206 +++++++++++++++++++++++++++++++++++++++++++++--------- gui/hklwindow.cpp | 37 ++++++++++ gui/hklwindow.h | 5 ++ 3 files changed, 216 insertions(+), 32 deletions(-) commit 9babf4c95577b356653e4652915d6f3fe0052b95 Author: Frédéric-Emmanuel PICCA Date: Tue Mar 2 15:07:53 2010 +0100 * another bunch of dead code. gui/Makefile.am | 2 - gui/axespinbutton.cpp | 179 -------------------------------------------------- gui/axespinbutton.h | 74 --------------------- gui/hklwindow.cpp | 2 - gui/hklwindow.h | 2 - 5 files changed, 259 deletions(-) commit 95a228eaf2396cb7f51be2c829d25bb9c42c78e9 Author: Frédéric-Emmanuel PICCA Date: Tue Mar 2 15:04:13 2010 +0100 * remove dead code gui/hkl.ui | 198 ++++++------------------------------------------------ gui/hklwindow.cpp | 100 ++------------------------- gui/hklwindow.h | 8 --- 3 files changed, 27 insertions(+), 279 deletions(-) commit 1ec9a447169d5c50370ba95b280fe6d83c8ecbe1 Author: Frédéric-Emmanuel PICCA Date: Tue Mar 2 11:52:03 2010 +0100 * add the solution treeview gui/hkl.ui | 10 +++++- gui/hklwindow.cpp | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ gui/hklwindow.h | 7 ++++ gui/modelcolumns.h | 20 ++++++++++++ 4 files changed, 130 insertions(+), 1 deletion(-) commit e323cae729cc8735d4b43673ca05c3b38c45824d Author: Frédéric-Emmanuel PICCA Date: Mon Mar 1 17:49:29 2010 +0100 * add a test method for the mantis bug #15110 the signature of the hkl_pseudo_axis_engine_init method was wrong. test/hkl-test-pseudoaxis-k6c.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) commit b933a5a1ca2de6d5fb26848760844fd147176e75 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 1 17:16:52 2010 +0100 * connect the initialize button gui/pseudoaxesframe.cpp | 13 +++++++++++++ gui/pseudoaxesframe.h | 2 ++ 2 files changed, 15 insertions(+) commit 2dab8cea9a7dbcf605ccec050c20e0515cec6096 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 1 17:16:34 2010 +0100 * bug in the initialize part of the core really strange, the compiler did not complain about the wrong hkl_pseudo_axis_engine_init_func signature. hkl/hkl-pseudoaxis-common.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) commit d71dec87ca9e87113a95637fd53f175fcf92c801 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 1 17:15:43 2010 +0100 * remove a warning hkl/hkl-sample.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 10ffa2ad957f51cf9787c87f159170cfade7c9d7 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 1 16:06:56 2010 +0100 * the pseudoAxesFrame PseudoAxes value celles becomes red after edition that way the users know that it must apply the new pseudoAxes values. gui/hkl.ui | 2 ++ gui/pseudoaxesframe.cpp | 9 +++++++++ 2 files changed, 11 insertions(+) commit eeac4d21b4d7fe399e8fe962d66818e1720270f6 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 1 15:20:52 2010 +0100 * now the PseudoAxesFrames are updated when changing an Axis value. gui/hklwindow.cpp | 33 ++++++++++++++++++++++++++++++--- gui/hklwindow.h | 2 ++ gui/pseudoaxesframe.cpp | 29 ++++++++++++++++++++++++++++- gui/pseudoaxesframe.h | 14 ++++++++++++++ 4 files changed, 74 insertions(+), 4 deletions(-) commit c700e3c503994a70d26ab32b825620c23344c73e Author: Frédéric-Emmanuel PICCA Date: Mon Mar 1 14:26:17 2010 +0100 * now the PseudoAxisFrame PseudoAxis is connected to the hkl part. gui/pseudo.ui | 10 ++++++---- gui/pseudoaxesframe.cpp | 49 +++++++++++++++++++++++++++++++++++++++++-------- gui/pseudoaxesframe.h | 11 ++++++++--- 3 files changed, 55 insertions(+), 15 deletions(-) commit 31a3bbcf32d9340699494e54108f22541e1e69b2 Author: Picca Frédéric-Emmanuel Date: Sun Feb 28 23:05:49 2010 +0100 * re-work the gui interface gui/Makefile.am | 6 +- gui/hkl.ui | 510 ++++++++++++++++++++++++-------------------- gui/hklwindow.cpp | 10 + gui/hklwindow.h | 397 +++++++++++++++++----------------- gui/pseudo.ui | 206 ++++++++++++++++++ gui/pseudoaxesframe.cpp | 119 +++++++++++ gui/pseudoaxesframe.h | 84 ++++++++ gui/pseudoaxespinbutton.cpp | 160 -------------- gui/pseudoaxespinbutton.h | 68 ------ 9 files changed, 900 insertions(+), 660 deletions(-) commit b7f0da76bdacca56ed55c05fdb0e5680076bdcc8 Author: Picca Frédéric-Emmanuel Date: Sun Feb 28 15:00:31 2010 +0100 * add the copyright headers gui/axespinbutton.cpp | 21 +++++++++++++++++++++ gui/axespinbutton.h | 21 +++++++++++++++++++++ gui/hklwindow.cpp | 21 +++++++++++++++++++++ gui/hklwindow.h | 21 +++++++++++++++++++++ gui/main.cpp | 21 +++++++++++++++++++++ gui/modelcolumns.h | 21 +++++++++++++++++++++ gui/pseudoaxespinbutton.cpp | 21 +++++++++++++++++++++ gui/pseudoaxespinbutton.h | 21 +++++++++++++++++++++ 8 files changed, 168 insertions(+) commit 679245a19aee30c3ee6a34d590d3729ed456a841 Author: Picca Frédéric-Emmanuel Date: Sat Feb 27 23:32:18 2010 +0100 * reorganize the hkl.ui gui/hkl.ui | 1931 +++++++++++++++++++++++++++++++----------------------------- 1 file changed, 986 insertions(+), 945 deletions(-) commit 9e3fba61b59559856697b8ec97d2aa66b6b076a1 Author: Picca Frédéric-Emmanuel Date: Sat Feb 27 23:32:05 2010 +0100 * fix the sample alpha beta and gamma set values gui/hklwindow.cpp | 87 +++++++++++++++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 44 deletions(-) commit f0ce182d27d94dd431c6190f49cb3b1ddb80b19d Author: Picca Frédéric-Emmanuel Date: Sat Feb 27 21:52:45 2010 +0100 * now the ghkl also look for the pkgdatadir file for hkl.ui gui/Makefile.am | 1 + gui/hklwindow.cpp | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) commit d921844b9a690d0460b45106467939e946214448 Author: Picca Frédéric-Emmanuel Date: Sat Feb 27 19:40:01 2010 +0100 * fix the gui Makefile.am gui/Makefile.am | 6 ++++++ 1 file changed, 6 insertions(+) commit a8865210f03c25279b01b4ac19523269de5030b1 Author: Picca Frédéric-Emmanuel Date: Sat Feb 27 19:08:14 2010 +0100 * rename the sample type enum gui/hklwindow.cpp | 4 ++-- hkl/hkl-sample.h | 2 +- test/bench.c | 4 ++-- test/hkl-test-pseudoaxis-e4cv.c | 12 ++++++------ test/hkl-test-pseudoaxis-e6c.c | 6 +++--- test/hkl-test-pseudoaxis-k4cv.c | 6 +++--- test/hkl-test-pseudoaxis-k6c.c | 8 ++++---- test/hkl-test-pseudoaxis.c | 2 +- test/hkl-test-sample.c | 26 +++++++++++++------------- 9 files changed, 35 insertions(+), 35 deletions(-) commit 45783d41cef824a954089ffd72492c9c80e536ae Author: Picca Frédéric-Emmanuel Date: Sat Feb 27 18:55:08 2010 +0100 * remove a bug hkl/hkl-vector.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e248f8f76f455060845bc67ca4257c772407de7b Author: Picca Frédéric-Emmanuel Date: Sat Feb 27 18:47:06 2010 +0100 * add the ghkl gui interface Makefile.am | 2 +- configure.ac | 4 + gui/Makefile.am | 23 + gui/axespinbutton.cpp | 158 ++++ gui/axespinbutton.h | 53 ++ gui/hkl.ui | 2053 +++++++++++++++++++++++++++++++++++++++++++ gui/hklwindow.cpp | 1833 ++++++++++++++++++++++++++++++++++++++ gui/hklwindow.h | 211 +++++ gui/main.cpp | 12 + gui/modelcolumns.h | 113 +++ gui/pseudoaxespinbutton.cpp | 139 +++ gui/pseudoaxespinbutton.h | 47 + 12 files changed, 4647 insertions(+), 1 deletion(-) commit 4ef0743dcd076a784438520d63186dfa42d90e13 Author: Picca Frédéric-Emmanuel Date: Mon Feb 22 14:42:05 2010 +0100 * fix a bunch or gtk-doc warning for the HklError hkl/hkl-error.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) commit 708844de310afdd8a5bd5e7330216c4e7e5fcce1 Author: Picca Frédéric-Emmanuel Date: Mon Feb 22 14:36:36 2010 +0100 * remove a warning during the gtk-doc generation process Documentation/api/hkl-sections.txt | 6 ++---- hkl/hkl-matrix.c | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) commit ed1bd4c108586fc7d0b432e9b576da083c1bf9fd Author: Picca Frédéric-Emmanuel Date: Mon Feb 22 14:31:10 2010 +0100 * update the HklVector files Documentation/api/hkl-sections.txt | 2 +- hkl/hkl-pseudoaxis-common-hkl.c | 4 +-- hkl/hkl-pseudoaxis-common-psi.c | 4 +-- hkl/hkl-vector.c | 50 ++++++++++++++++---------------- hkl/hkl-vector.h | 58 +++++++++++++++++++------------------- test/hkl-test-vector.c | 6 ++-- 6 files changed, 62 insertions(+), 62 deletions(-) commit 63c68d876157e5d40eef27651e56fa4ac46f37b9 Author: Picca Frédéric-Emmanuel Date: Mon Feb 22 14:21:05 2010 +0100 * add the Hklquaternnion documentation Documentation/api/hkl-sections.txt | 6 +- hkl/hkl-axis.c | 7 ++- hkl/hkl-pseudoaxis-common-hkl.c | 2 +- hkl/hkl-pseudoaxis-common-psi.c | 4 +- hkl/hkl-quaternion.c | 124 +++++++++++++++++++++++++++++-------- hkl/hkl-quaternion.h | 63 +++---------------- test/hkl-test-quaternion.c | 22 +++---- 7 files changed, 129 insertions(+), 99 deletions(-) commit 6dd1ca45bd0760b2c4fdfff8d795ee09b78ab931 Author: Picca Frédéric-Emmanuel Date: Mon Feb 22 13:47:57 2010 +0100 * add doc for HklMatrix and rename a bunch of methods Documentation/api/hkl-sections.txt | 6 +- hkl/hkl-matrix.c | 136 ++++++++++++++++++++++++++++++++----- hkl/hkl-matrix.h | 27 ++++---- hkl/hkl-pseudoaxis-common-hkl.c | 2 +- hkl/hkl-pseudoaxis-common-psi.c | 4 +- hkl/hkl-sample.c | 14 ++-- test/hkl-test-matrix.c | 18 ++--- test/hkl-test-pseudoaxis-k6c.c | 4 +- 8 files changed, 158 insertions(+), 53 deletions(-) commit 64d65316fbca4432acfe291c4497460df1df3923 Author: Picca Frédéric-Emmanuel Date: Mon Feb 22 12:59:16 2010 +0100 * correct the api Makefile dependencies. Documentation/api/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 14b8749a29cd2fbc31cc27b7283c63e7a74fef93 Author: Picca Frédéric-Emmanuel Date: Mon Feb 22 12:58:54 2010 +0100 * correcte a few spelling errors. hkl/hkl-vector.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 51704dec42bba17284400f5ccdd5e34f6ed3ac28 Author: Picca Frédéric-Emmanuel Date: Mon Feb 22 09:09:31 2010 +0100 * add the HklVector documentation hkl/hkl-vector.c | 215 +++++++++++++++++++++++++++++++++++++++++++++++++++---- hkl/hkl-vector.h | 2 +- 2 files changed, 201 insertions(+), 16 deletions(-) commit a210f5ad539e7bdcbad33f6ce78ab50d33ef50b0 Author: Picca Frédéric-Emmanuel Date: Sun Feb 21 10:36:29 2010 +0100 * update the NEWS file NEWS | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 7693ade54031c56d4dbedb9e63bec2ac2e994654 Author: Picca Frédéric-Emmanuel Date: Sun Feb 21 09:59:38 2010 +0100 * update the dependencies for the build README | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) commit d34cf43596e0f5f7d5e0900a4e2d8b4408126bde Author: Picca Frédéric-Emmanuel Date: Sun Feb 21 09:18:04 2010 +0100 * add a few gtk-doc files Documentation/api/hkl-docs.sgml | 61 ++++++ Documentation/api/hkl-sections.txt | 431 +++++++++++++++++++++++++++++++++++++ Documentation/api/hkl.types | 0 3 files changed, 492 insertions(+) commit acfa07b7ad660cc337b22eaf1217ff264b11afd0 Author: Picca Frédéric-Emmanuel Date: Sat Feb 20 23:48:08 2010 +0100 * add a missong file hkl/usage.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) commit da3e130d5226c0a62a98f3b82f98c427300b09ff Author: Picca Frédéric-Emmanuel Date: Sat Feb 20 23:36:01 2010 +0100 * add the m library in the Libs.private hkl.pc.in | 1 + 1 file changed, 1 insertion(+) commit 2db8aceb5b2bebc673303a25fdfc89cc4bf6b00e Author: Picca Frédéric-Emmanuel Date: Sat Feb 20 23:30:46 2010 +0100 * clean and rename gtk-doc -> api Documentation/Doxyfile | 1342 -- Documentation/Makefile.am | 2 +- Documentation/Maxima/E4C_bissector.max | 12 - Documentation/Maxima/E4C_constant_chi.max | 12 - Documentation/Maxima/E4C_constant_chi_phi.max | 12 - Documentation/Maxima/E4C_constant_omega.max | 12 - Documentation/Maxima/E4C_delta_omega.max | 12 - Documentation/{gtk-doc => api}/Makefile.am | 0 Documentation/example/SConscript | 15 - Documentation/example/plot.gnuplot | 85 - Documentation/example/psi.cpp | 50 - Documentation/uml/hkl.dia | 22193 ----------------------- Documentation/uml/next_hkl.dia | 22726 ------------------------ configure.ac | 2 +- fbuildroot.py | 29 - test/wscript_build | 27 - waf | Bin 84763 -> 0 bytes wscript | 59 - 18 files changed, 2 insertions(+), 46588 deletions(-) commit b32692c84d5275a6318f6ca043f6eef2a37fa36b Author: Picca Frédéric-Emmanuel Date: Sat Feb 20 23:15:59 2010 +0100 * reorganize the code to be more gtk-doc compatible Documentation/Makefile.am | 2 + Documentation/gtk-doc/Makefile.am | 101 ++++++++ INSTALL | 254 ++++++++++++++++----- Makefile.am | 3 +- autogen.sh | 3 +- configure.ac | 11 +- {src => hkl}/Makefile.am | 49 +++- {src => hkl}/hkl-axis.c | 0 {include/hkl => hkl}/hkl-axis.h | 0 {src => hkl}/hkl-detector-factory.c | 0 {include/hkl => hkl}/hkl-detector-factory.h | 0 {src => hkl}/hkl-detector.c | 0 {include/hkl => hkl}/hkl-detector.h | 0 {src => hkl}/hkl-error.c | 0 {include/hkl => hkl}/hkl-error.h | 0 {src => hkl}/hkl-geometry-factory.c | 0 {include/hkl => hkl}/hkl-geometry-factory.h | 0 {src => hkl}/hkl-geometry.c | 0 {include/hkl => hkl}/hkl-geometry.h | 0 {src => hkl}/hkl-interval.c | 0 {include/hkl => hkl}/hkl-interval.h | 0 {src => hkl}/hkl-lattice.c | 0 {include/hkl => hkl}/hkl-lattice.h | 0 {include/hkl => hkl}/hkl-list.h | 0 {include/hkl => hkl}/hkl-macros.h | 0 {src => hkl}/hkl-matrix.c | 0 {include/hkl => hkl}/hkl-matrix.h | 0 {src => hkl}/hkl-parameter.c | 0 {include/hkl => hkl}/hkl-parameter.h | 0 {src => hkl}/hkl-pseudoaxis-auto.c | 0 {include/hkl => hkl}/hkl-pseudoaxis-auto.h | 0 {src => hkl}/hkl-pseudoaxis-common-eulerians.c | 0 .../hkl => hkl}/hkl-pseudoaxis-common-eulerians.h | 0 {src => hkl}/hkl-pseudoaxis-common-hkl.c | 0 {include/hkl => hkl}/hkl-pseudoaxis-common-hkl.h | 0 {src => hkl}/hkl-pseudoaxis-common-psi.c | 0 {include/hkl => hkl}/hkl-pseudoaxis-common-psi.h | 0 {src => hkl}/hkl-pseudoaxis-common-q.c | 0 {include/hkl => hkl}/hkl-pseudoaxis-common-q.h | 0 {src => hkl}/hkl-pseudoaxis-common.c | 0 {include/hkl => hkl}/hkl-pseudoaxis-common.h | 0 {src => hkl}/hkl-pseudoaxis-e4cv-hkl.c | 0 {src => hkl}/hkl-pseudoaxis-e4cv-psi.c | 0 {include/hkl => hkl}/hkl-pseudoaxis-e4cv.h | 0 {src => hkl}/hkl-pseudoaxis-e6c-hkl.c | 0 {src => hkl}/hkl-pseudoaxis-e6c-psi.c | 0 {include/hkl => hkl}/hkl-pseudoaxis-e6c.h | 0 {src => hkl}/hkl-pseudoaxis-factory.c | 0 {include/hkl => hkl}/hkl-pseudoaxis-factory.h | 0 {src => hkl}/hkl-pseudoaxis-k4cv-hkl.c | 0 {src => hkl}/hkl-pseudoaxis-k4cv-psi.c | 0 {include/hkl => hkl}/hkl-pseudoaxis-k4cv.h | 0 {src => hkl}/hkl-pseudoaxis-k6c-hkl.c | 0 {src => hkl}/hkl-pseudoaxis-k6c-psi.c | 0 {include/hkl => hkl}/hkl-pseudoaxis-k6c.h | 0 {src => hkl}/hkl-pseudoaxis-zaxis-hkl.c | 0 {include/hkl => hkl}/hkl-pseudoaxis-zaxis.h | 0 {src => hkl}/hkl-pseudoaxis.c | 0 {include/hkl => hkl}/hkl-pseudoaxis.h | 0 {src => hkl}/hkl-quaternion.c | 0 {include/hkl => hkl}/hkl-quaternion.h | 0 {src => hkl}/hkl-sample.c | 0 {include/hkl => hkl}/hkl-sample.h | 0 {src => hkl}/hkl-source.c | 0 {include/hkl => hkl}/hkl-source.h | 0 {src => hkl}/hkl-unit.c | 0 {include/hkl => hkl}/hkl-unit.h | 0 {src => hkl}/hkl-vector.c | 0 {include/hkl => hkl}/hkl-vector.h | 0 {include => hkl}/hkl.h | 0 include/Makefile.am | 32 --- include/hkl/SConscript | 26 --- src/usage.c | 110 --------- src/wscript_build | 12 - test/Makefile.am | 14 +- 75 files changed, 357 insertions(+), 260 deletions(-) commit 25072b4420d63fbf031a6424af735fdb4c6d2171 Author: Picca Frédéric-Emmanuel Date: Sat Feb 20 19:10:43 2010 +0100 * correct a few warnings include/hkl/hkl-pseudoaxis-auto.h | 3 ++- include/hkl/hkl-pseudoaxis-common-hkl.h | 6 ++++-- include/hkl/hkl-pseudoaxis-common-psi.h | 4 ++-- src/hkl-pseudoaxis-auto.c | 3 ++- src/hkl-pseudoaxis-common-eulerians.c | 6 ++++-- src/hkl-pseudoaxis-common-hkl.c | 6 ++++-- src/hkl-pseudoaxis-common-psi.c | 6 ++++-- src/hkl-pseudoaxis-common-q.c | 6 ++++-- 8 files changed, 26 insertions(+), 14 deletions(-) commit 45a9e3cec68b45d657f3ba741ed0d84b6df921fe Author: Picca Frédéric-Emmanuel Date: Sat Feb 20 18:13:39 2010 +0100 * prepare for Error handling in the pseudo axes part include/hkl/hkl-pseudoaxis.h | 10 ++++---- src/hkl-pseudoaxis.c | 52 +++++++++++++++++++++++++++++------------ test/bench.c | 6 ++--- test/hkl-test-pseudoaxis-e4cv.c | 46 ++++++++++++++++++------------------ test/hkl-test-pseudoaxis-e6c.c | 20 ++++++++-------- test/hkl-test-pseudoaxis-k4cv.c | 16 ++++++------- test/hkl-test-pseudoaxis-k6c.c | 22 ++++++++--------- test/hkl-test-pseudoaxis.c | 6 ++--- 8 files changed, 101 insertions(+), 77 deletions(-) commit ee4a447a87d9de7c6dc66fdeed53d04ee3f77345 Author: Picca Frederic-Emmanuel Date: Wed Feb 10 15:53:13 2010 +0100 * use the right dircategory for the texinfo documentation Documentation/hkl.texi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f6e92376f3bbed247227c853fbb129697f9c96d3 Author: Picca Frederic-Emmanuel Date: Tue Feb 9 13:39:15 2010 +0100 * update the authors list AUTHORS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit d36f012b712a7e5e94cad397c07a6eb8a0ab42b6 Author: Picca Frederic-Emmanuel Date: Mon Feb 8 14:42:35 2010 +0100 * fix the texindo documentation Documentation/hkl.texi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 28d63c951adbbae155ee82b5e2978e7382409212 Author: Picca Frederic-Emmanuel Date: Mon Feb 8 14:40:21 2010 +0100 * use LIBADD instead of LIBS src/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f896c5dbf9ded04de6fec34d1251665113b4346d Author: Picca Frederic-Emmanuel Date: Sat Feb 6 10:39:56 2010 +0100 * extract the waf VERSION from the configure.ac wscript | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) commit 07619a50136a1fe1a6245945b1f80d57b7930b55 Author: Picca Frédéric-Emmanuel Date: Tue Feb 2 13:39:46 2010 +0100 * update the test makefile to compile correctly. test/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 84db9c2a18433ba9b7fe75f92e80a376fef50f34 Author: System User Date: Fri Jan 22 16:01:34 2010 +0100 * add a dist-hook to generate the changelog from the git repository. Makefile.am | 15 +++++++++++++++ 1 file changed, 15 insertions(+) commit 653355321c6c2fcc98ae449a8237ab3579080493 Author: System User Date: Tue Jan 19 11:52:08 2010 +0100 * downgrad autoconf 2.65 -> 2.59 to allow working with the brand new RHEL 4!!! INSTALL | 169 +++++++++++++++++------------------------------------------ configure.ac | 13 +++-- 2 files changed, 58 insertions(+), 124 deletions(-) commit b6cf1d7bdb5ed74df8e3dcd3bcf670467de9fa7c Author: Picca Frederic-Emmanuel Date: Wed Jan 20 22:12:18 2010 +0100 * add the fbuild buildsystem. fbuildroot.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) commit 58ac27a28ae1c5356cc877ce91a9d12493d1ebc3 Author: System User Date: Thu Jan 14 15:19:32 2010 +0100 * small optimization to avoid geometry copy if just updating the current reflection geometry. src/hkl-sample.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) commit 28d37361ce776a40054f28732973fe9f8e554fac Author: Frédéric-Emmanuel PICCA Date: Tue Jan 19 10:12:25 2010 +0100 * doc of the eulerian 4 circle "hkl" pseudo axes. Documentation/hkl.texi | 78 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) commit 6dccb39b8a98fa0d658df8be8f00c61480706708 Author: Frédéric-Emmanuel PICCA Date: Mon Jan 18 16:33:04 2010 +0100 * update the documentation Licence GPL-3 Documentation/hkl.texi | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) commit 48a6d23fd95524f98a037b27bf5115a2ee226b3a Author: Frédéric-Emmanuel PICCA Date: Mon Jan 18 13:42:28 2010 +0100 * wrote the documentation of all the diffractometer geometries Documentation/hkl.texi | 163 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 151 insertions(+), 12 deletions(-) commit 8233620a251b9f0b81d09c52f670443a989b24c1 Author: Picca Frederic-Emmanuel Date: Sun Jan 17 19:39:06 2010 +0100 * add the texinfo doc Documentation/Makefile.am | 1 + Documentation/SConscript | 10 - Documentation/{user-guide.txt => hkl.texi} | 359 +++++++++++++++++------------ Makefile.am | 2 +- configure.ac | 3 +- 5 files changed, 213 insertions(+), 162 deletions(-) commit 674b41687256469e016c1e56119939ccd9f582a5 Author: Picca Frederic-Emmanuel Date: Fri Jan 15 23:34:57 2010 +0100 * fix for real the inline problem. include/hkl/hkl-macros.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 02525fabaa3e37920f9dedb0c95a249137767e1e Author: Frédéric-Emmanuel PICCA Date: Fri Jan 15 17:18:27 2010 +0100 * correct the generation of the hkl.pc file hkl.pc.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3388bc4fd288aa49fe693e6dab9de129f67e1d57 Author: System User Date: Thu Jan 14 15:06:06 2010 +0100 * add a method to set the HklSampleReflection geometry part. include/hkl/hkl-sample.h | 2 ++ src/hkl-parameter.c | 10 +++++--- src/hkl-sample.c | 44 ++++++++++++++++++++++++--------- test/hkl-test-sample.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 103 insertions(+), 16 deletions(-) commit f0441ebe3febbf8d3aea1b1502b40df262a5ceff Author: System User Date: Tue Jan 12 10:14:18 2010 +0100 * solve an inline problem with the gcc3.4 compiler used at SOLEIL include/hkl/hkl-macros.h | 11 +---------- src/usage.c | 11 +++++++++++ 2 files changed, 12 insertions(+), 10 deletions(-) commit ef917fcb81effb14a51dbe721c677c2025d0d712 Author: System User Date: Mon Jan 11 14:51:07 2010 +0100 * remove an unused variable src/hkl-error.c | 1 - 1 file changed, 1 deletion(-) commit 621cb73f742af96eab421301e0fa0a58588a4ecf Author: Frédéric-Emmanuel PICCA Date: Mon Jan 11 17:12:37 2010 +0100 * indentation include/hkl/hkl-macros.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 046776c0b46431b7415e03fbe7d8b6ce6c8f67b0 Author: Frédéric-Emmanuel PICCA Date: Mon Jan 11 17:12:04 2010 +0100 * use an optimized vector_rotated_quaternion method. src/hkl-vector.c | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) commit 041fedff1fdce0eb5507d4361ae6b3503c7f6762 Author: Picca Frederic-Emmanuel Date: Sun Jan 10 19:52:39 2010 +0100 * remove clang warning include/hkl/hkl-macros.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit fad99b91f53c9ab4c0bea768ddc368c442070c21 Author: Picca Frederic-Emmanuel Date: Sun Jan 10 18:58:56 2010 +0100 * few optimizations src/hkl-pseudoaxis-k4cv-hkl.c | 5 ++--- src/hkl-quaternion.c | 22 ++++++++++++---------- 2 files changed, 14 insertions(+), 13 deletions(-) commit c19e2fbdfd9abadecdf6b3f652e3db3a05059041 Author: Picca Frederic-Emmanuel Date: Sun Jan 10 17:34:05 2010 +0100 * rename getter -> get in HklPseudoAxisEngineList include/hkl/hkl-pseudoaxis.h | 2 +- src/hkl-pseudoaxis.c | 2 +- test/hkl-test-pseudoaxis-k6c.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) commit 2ec04b89ccea50a0c4b0c2dfd2a8d08dc35d97f0 Author: Picca Frederic-Emmanuel Date: Sun Jan 10 17:26:34 2010 +0100 * rename init -> initialize in HklPseudoAxisEngineMode include/hkl/hkl-pseudoaxis.h | 12 +++++------ src/hkl-pseudoaxis.c | 20 +++++++++--------- test/bench.c | 6 +++--- test/hkl-test-pseudoaxis-e4cv.c | 46 ++++++++++++++++++++--------------------- test/hkl-test-pseudoaxis-e6c.c | 20 +++++++++--------- test/hkl-test-pseudoaxis-k4cv.c | 16 +++++++------- test/hkl-test-pseudoaxis-k6c.c | 22 ++++++++++---------- test/hkl-test-pseudoaxis.c | 8 +++---- 8 files changed, 75 insertions(+), 75 deletions(-) commit ec5b3b163bc8c839e2253dbcd19c2fa5d0b21fb1 Author: Picca Frederic-Emmanuel Date: Sun Jan 10 17:08:38 2010 +0100 * remove useless lines src/hkl-pseudoaxis-common-eulerians.c | 9 --------- 1 file changed, 9 deletions(-) commit 8a3e0bfc3b73c464166fd3a491da9256a34d093e Author: Picca Frederic-Emmanuel Date: Sun Jan 10 16:51:07 2010 +0100 * use the init method of HklPseudoAxisEngineMode in the constructor method include/hkl/hkl-pseudoaxis.h | 2 +- src/hkl-pseudoaxis-common-eulerians.c | 2 +- src/hkl-pseudoaxis-common-psi.c | 34 +++++++++++++--------- src/hkl-pseudoaxis-e4cv-hkl.c | 4 +-- src/hkl-pseudoaxis-e6c-hkl.c | 6 ++-- src/hkl-pseudoaxis-k4cv-hkl.c | 10 +++---- src/hkl-pseudoaxis-k6c-hkl.c | 14 ++++----- src/hkl-pseudoaxis.c | 54 +++++++++++++++++------------------ 8 files changed, 65 insertions(+), 61 deletions(-) commit 85c3e8efd6cbcfd9fd02ce95aaa388eec0254804 Author: Picca Frederic-Emmanuel Date: Sun Jan 10 13:22:05 2010 +0100 * indentation src/hkl-error.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit a2ce285ec88593c6b614ce753421f8469900fe9f Author: Picca Frederic-Emmanuel Date: Sun Jan 10 13:19:22 2010 +0100 * doc include/hkl/hkl-macros.h | 1 + 1 file changed, 1 insertion(+) commit ca814c452952270aaad5f3bb4f251b2543149edc Author: Picca Frederic-Emmanuel Date: Sun Jan 10 13:19:07 2010 +0100 * standardise the memory allocation with the HKL_MALLOC macro include/hkl/hkl-macros.h | 19 +++++++++++++++++-- src/hkl-axis.c | 4 +--- src/hkl-detector.c | 8 ++------ src/hkl-error.c | 8 +++----- src/hkl-geometry.c | 12 +++--------- src/hkl-lattice.c | 8 ++------ src/hkl-parameter.c | 8 ++------ src/hkl-pseudoaxis-common-psi.c | 4 +--- src/hkl-pseudoaxis.c | 17 +++++------------ src/hkl-sample.c | 20 +++++--------------- 10 files changed, 41 insertions(+), 67 deletions(-) commit 08ec35fecde509b250f31a691b25c31a00a99999 Author: Picca Frederic-Emmanuel Date: Sat Jan 9 11:05:17 2010 +0100 * refactoring of the HklPseudoAxisModeFunc include/hkl/hkl-pseudoaxis-auto.h | 3 ++- include/hkl/hkl-pseudoaxis-common-hkl.h | 14 ++++++----- include/hkl/hkl-pseudoaxis-common.h | 3 ++- include/hkl/hkl-pseudoaxis.h | 41 +++++++++++++-------------------- src/hkl-pseudoaxis-auto.c | 11 +++++---- src/hkl-pseudoaxis-common-eulerians.c | 14 ++++++----- src/hkl-pseudoaxis-common-hkl.c | 30 +++++++++++++----------- src/hkl-pseudoaxis-common-psi.c | 27 ++++++++++------------ src/hkl-pseudoaxis-common-q.c | 14 ++++++----- src/hkl-pseudoaxis.c | 27 +++++++++++----------- 10 files changed, 92 insertions(+), 92 deletions(-) commit 93af3bdef8aee90b70223c61acd0af5db0a4642a Author: Picca Frederic-Emmanuel Date: Fri Jan 8 22:30:03 2010 +0100 * simplification using an array to store the function to solve. include/hkl/hkl-pseudoaxis-auto.h | 7 +- include/hkl/hkl-pseudoaxis-common-hkl.h | 72 ++------------ include/hkl/hkl-pseudoaxis-common.h | 1 + include/hkl/hkl-pseudoaxis.h | 4 + src/hkl-pseudoaxis-auto.c | 21 +++- src/hkl-pseudoaxis-common-eulerians.c | 3 +- src/hkl-pseudoaxis-common-hkl.c | 32 +----- src/hkl-pseudoaxis-common-psi.c | 14 +-- src/hkl-pseudoaxis-common-q.c | 26 ++--- src/hkl-pseudoaxis-e4cv-hkl.c | 40 ++++---- src/hkl-pseudoaxis-e6c-hkl.c | 74 +++++++------- src/hkl-pseudoaxis-k4cv-hkl.c | 90 ++++------------- src/hkl-pseudoaxis-k6c-hkl.c | 168 ++++++++------------------------ src/hkl-pseudoaxis-zaxis-hkl.c | 18 ++-- src/hkl-pseudoaxis.c | 21 +++- 15 files changed, 184 insertions(+), 407 deletions(-) commit e635c89c750d01517448921bbb644f7a5d2af3d2 Author: System User Date: Fri Jan 8 15:39:07 2010 +0100 * add the reflectivity mode for the zaxis geometry. NEWS | 4 ++++ src/hkl-pseudoaxis-zaxis-hkl.c | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) commit 830eb71d6ba16465da38329187fc45db4eebca79 Author: System User Date: Thu Jan 7 17:13:37 2010 +0100 * the HklPseudoAxisEngine setter method fail if there is 0 geometries computed src/hkl-pseudoaxis.c | 3 +++ 1 file changed, 3 insertions(+) commit c72eeb00a35409fd19414977cc65f7f63fcd4ff0 Author: System User Date: Thu Jan 7 14:08:14 2010 +0100 * solve temporarly a bug during the set. We need to transfert the starting point of the geometry from engine->engines->geometry to engine->geometry do do the right calculation. src/hkl-pseudoaxis.c | 2 ++ 1 file changed, 2 insertions(+) commit b1138cae1e37256e394c73594e91c3486e6402dd Author: System User Date: Thu Jan 7 14:06:47 2010 +0100 * add the q2 pseudo axis to the zaxis geometry. src/hkl-pseudoaxis-factory.c | 1 + 1 file changed, 1 insertion(+) commit 04b6c34010478a811000e1bf9bfb3e6db99d0072 Author: Picca Frederic-Emmanuel Date: Wed Jan 6 22:14:13 2010 +0100 * add the geometry_list_remove_invalid test. thus correction of the geometry validity check. src/hkl-parameter.c | 3 ++- test/hkl-test-geometry.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) commit 3423bdbfe0873be8ce9c0db286b53ec83ab90b8f Author: Picca Frederic-Emmanuel Date: Wed Jan 6 22:07:54 2010 +0100 * remove wrong authors for the zaxis geometry src/hkl-pseudoaxis-zaxis-hkl.c | 2 -- 1 file changed, 2 deletions(-) commit ba89b16abf616e408642ac5b20bafef5af92e91b Author: Picca Frederic-Emmanuel Date: Wed Jan 6 22:06:56 2010 +0100 * better presentation of the Makefile.am of the include files. include/Makefile.am | 43 ++++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) commit b7f7fffea82612d705e7349d305e50768c593e1a Author: System User Date: Wed Jan 6 17:47:32 2010 +0100 * now HklGeometryList::remove_invalid is ok. src/hkl-geometry.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit f66f33c6f42148ae4537ec46de9562d0ccfce523 Author: System User Date: Wed Jan 6 17:45:31 2010 +0100 * add the zaxis geometry include/Makefile.am | 2 +- include/hkl/hkl-geometry-factory.h | 1 + include/hkl/hkl-pseudoaxis-zaxis.h | 33 +++++++++++++++++++++++ src/Makefile.am | 1 + src/hkl-geometry-factory.c | 17 ++++++++++++ src/hkl-pseudoaxis-factory.c | 4 +++ src/hkl-pseudoaxis-zaxis-hkl.c | 54 ++++++++++++++++++++++++++++++++++++++ test/hkl-test-pseudoaxis.c | 7 +++++ 8 files changed, 118 insertions(+), 1 deletion(-) commit 5206c73b460efda8d01d45c6b2e301870d3fb0c0 Author: Picca Frederic-Emmanuel Date: Tue Jan 5 22:56:24 2010 +0100 * remove all warning due to clang src/hkl-axis.c | 2 +- src/hkl-matrix.c | 3 ++- src/hkl-pseudoaxis-auto.c | 2 +- src/hkl-pseudoaxis-common-psi.c | 2 -- src/hkl-pseudoaxis-k4cv-hkl.c | 6 ------ src/hkl-pseudoaxis-k6c-hkl.c | 46 +++++------------------------------------ 6 files changed, 9 insertions(+), 52 deletions(-) commit 72fa2115662feedddb316967fdfc680d5cfdff1e Author: Picca Frederic-Emmanuel Date: Tue Jan 5 19:57:14 2010 +0100 * remove warning from gcc 4.4.2 and switch to c99 configure.ac | 2 +- src/hkl-error.c | 3 ++- src/hkl-pseudoaxis-common-q.c | 1 + test/bench.c | 4 ++-- test/hkl-test.h | 15 ++++++++------- 5 files changed, 14 insertions(+), 11 deletions(-) commit 1928f66d8fe460120c931f9f77e694b69558726f Author: Picca Frederic-Emmanuel Date: Tue Jan 5 19:55:55 2010 +0100 * better printf for HklGeometry src/hkl-geometry.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit f6141c5f67379561faa054f73285cd1d01a26c43 Author: Frédéric-Emmanuel PICCA Date: Tue Jan 5 13:55:47 2010 +0100 * the number of randomize test per PseudoAxisEngine is now define using a constant. test/hkl-test-pseudoaxis.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 7e1c13a54c7f20be4b4d3f8f0d1415f337827fa0 Author: Frédéric-Emmanuel PICCA Date: Tue Jan 5 13:47:53 2010 +0100 * use the new HKL_ASSERT_STRING_EQUAL everywhere :) test/hkl-test-axis.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2c5f7691d3fc1ead52038f46ac453ebe3d7e1b66 Author: Frédéric-Emmanuel PICCA Date: Tue Jan 5 13:43:54 2010 +0100 * indent test/hkl-test.h | 60 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) commit af91ea7658d731fd4bdfa86edb67bc20bd4e7046 Author: Frédéric-Emmanuel PICCA Date: Tue Jan 5 13:42:27 2010 +0100 * forgot the 2009 -> 2010 copyright change of the test part. test/bench.c | 2 +- test/hkl-test-axis.c | 2 +- test/hkl-test-detector.c | 2 +- test/hkl-test-geometry.c | 2 +- test/hkl-test-interval.c | 2 +- test/hkl-test-lattice.c | 2 +- test/hkl-test-matrix.c | 2 +- test/hkl-test-parameter.c | 2 +- test/hkl-test-pseudoaxis-e4cv.c | 2 +- test/hkl-test-pseudoaxis-e6c.c | 2 +- test/hkl-test-pseudoaxis-k4cv.c | 2 +- test/hkl-test-pseudoaxis-k6c.c | 2 +- test/hkl-test-pseudoaxis.c | 2 +- test/hkl-test-quaternion.c | 2 +- test/hkl-test-sample.c | 2 +- test/hkl-test-source.c | 2 +- test/hkl-test-vector.c | 2 +- test/hkl-test.c | 2 +- test/hkl-test.h | 2 +- test/main.c | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) commit 55e7bab1ed489b0329c604f785d10f5a4e70154e Author: Frédéric-Emmanuel PICCA Date: Tue Jan 5 13:39:46 2010 +0100 * add the test methods for HklError test/Makefile.am | 2 + test/hkl-test-error.c | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++ test/main.c | 1 + 3 files changed, 138 insertions(+) commit c46d337eb25130de53b7338c81cbeff18a5e725d Author: Frédéric-Emmanuel PICCA Date: Tue Jan 5 13:38:43 2010 +0100 * rename functions to follow the hkl convention. include/hkl.h | 1 + include/hkl/hkl-error.h | 14 +++++++------- src/hkl-error.c | 33 +++++++++++++++++++-------------- 3 files changed, 27 insertions(+), 21 deletions(-) commit a14d9979ec63868b4a66acde8e26c680ef52f3a2 Author: Frédéric-Emmanuel PICCA Date: Tue Jan 5 11:09:03 2010 +0100 * add the HKL_ASSERT_STRING_EQUAL macro test/hkl-test.h | 9 +++++++++ 1 file changed, 9 insertions(+) commit 0cc5e087f24c818ac46f86a2a4151f4a3387cb3f Author: Picca Frederic-Emmanuel Date: Mon Jan 4 21:39:43 2010 +0100 * add the HklError class. include/Makefile.am | 2 +- include/hkl/hkl-error.h | 72 +++++++++++ include/hkl/hkl-macros.h | 4 + src/Makefile.am | 1 + src/hkl-error.c | 321 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 399 insertions(+), 1 deletion(-) commit a6e309cd9e016e8f2892aa90af071feac3fdca86 Author: Frédéric-Emmanuel PICCA Date: Mon Jan 4 17:25:47 2010 +0100 * update the copyright year include/hkl/hkl-axis.h | 2 +- include/hkl/hkl-detector-factory.h | 2 +- include/hkl/hkl-detector.h | 2 +- include/hkl/hkl-geometry-factory.h | 2 +- include/hkl/hkl-geometry.h | 2 +- include/hkl/hkl-interval.h | 2 +- include/hkl/hkl-lattice.h | 2 +- include/hkl/hkl-list.h | 2 +- include/hkl/hkl-macros.h | 2 +- include/hkl/hkl-matrix.h | 2 +- include/hkl/hkl-parameter.h | 2 +- include/hkl/hkl-pseudoaxis-auto.h | 2 +- include/hkl/hkl-pseudoaxis-common-eulerians.h | 2 +- include/hkl/hkl-pseudoaxis-common-hkl.h | 2 +- include/hkl/hkl-pseudoaxis-common-psi.h | 2 +- include/hkl/hkl-pseudoaxis-common-q.h | 2 +- include/hkl/hkl-pseudoaxis-common.h | 2 +- include/hkl/hkl-pseudoaxis-e4cv.h | 2 +- include/hkl/hkl-pseudoaxis-e6c.h | 2 +- include/hkl/hkl-pseudoaxis-factory.h | 2 +- include/hkl/hkl-pseudoaxis-k4cv.h | 2 +- include/hkl/hkl-pseudoaxis-k6c.h | 2 +- include/hkl/hkl-pseudoaxis.h | 2 +- include/hkl/hkl-quaternion.h | 2 +- include/hkl/hkl-sample.h | 2 +- include/hkl/hkl-source.h | 2 +- include/hkl/hkl-unit.h | 2 +- include/hkl/hkl-vector.h | 2 +- src/hkl-axis.c | 2 +- src/hkl-detector-factory.c | 2 +- src/hkl-detector.c | 2 +- src/hkl-geometry-factory.c | 2 +- src/hkl-geometry.c | 2 +- src/hkl-interval.c | 2 +- src/hkl-lattice.c | 2 +- src/hkl-matrix.c | 2 +- src/hkl-parameter.c | 2 +- src/hkl-pseudoaxis-auto.c | 2 +- src/hkl-pseudoaxis-common-eulerians.c | 2 +- src/hkl-pseudoaxis-common-hkl.c | 2 +- src/hkl-pseudoaxis-common-psi.c | 2 +- src/hkl-pseudoaxis-common-q.c | 2 +- src/hkl-pseudoaxis-common.c | 2 +- src/hkl-pseudoaxis-e4cv-hkl.c | 2 +- src/hkl-pseudoaxis-e4cv-psi.c | 2 +- src/hkl-pseudoaxis-e6c-hkl.c | 2 +- src/hkl-pseudoaxis-e6c-psi.c | 2 +- src/hkl-pseudoaxis-factory.c | 2 +- src/hkl-pseudoaxis-k4cv-hkl.c | 2 +- src/hkl-pseudoaxis-k4cv-psi.c | 2 +- src/hkl-pseudoaxis-k6c-hkl.c | 2 +- src/hkl-pseudoaxis-k6c-psi.c | 2 +- src/hkl-pseudoaxis.c | 2 +- src/hkl-quaternion.c | 2 +- src/hkl-sample.c | 2 +- src/hkl-source.c | 2 +- src/hkl-unit.c | 2 +- src/hkl-vector.c | 2 +- src/usage.c | 2 +- 59 files changed, 59 insertions(+), 59 deletions(-) commit 833c91a2e3c539d531cb523b3cdfb59323be2880 Author: Frédéric-Emmanuel PICCA Date: Mon Jan 4 17:24:19 2010 +0100 * update the NEWS file NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 4104f391c39dfa9061de2fd1e77e92e21d1da942 Author: Frédéric-Emmanuel PICCA Date: Mon Jan 4 17:13:35 2010 +0100 * fix for 64bit machines thanks Jens Krüger src/hkl-pseudoaxis-common-eulerians.c | 3 ++- src/hkl-pseudoaxis-common-q.c | 5 +++-- src/hkl-pseudoaxis-e4cv-hkl.c | 13 +++++++------ src/hkl-pseudoaxis-e6c-hkl.c | 23 ++++++++++++----------- src/hkl-pseudoaxis-k4cv-hkl.c | 13 +++++++------ src/hkl-pseudoaxis-k6c-hkl.c | 27 ++++++++++++++------------- 6 files changed, 45 insertions(+), 39 deletions(-) commit 97186a53710c8561b8beb65f05ea3614f3fbfe10 Author: Frédéric-Emmanuel PICCA Date: Mon Jan 4 17:02:34 2010 +0100 * fix the installation of the hkl.h files thanks Jens Krüger wscript | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 19102358345b9bb858a5aa9caa7f24cfc441a9f4 Author: Frédéric-Emmanuel PICCA Date: Mon Jan 4 16:49:18 2010 +0100 * need to fix test suit for -O0 vs -O2 ??? the test pass in -O0 mode but not in -O2 In fact the rounding is not the same between -O0 and -O2 so when I sort the geometries, there is a difference. Now I also check thah the distance between two geometries is greater than HKL_EPSILON to sort them. that way I avoid this rounding problem present on the 13th digits. src/hkl-geometry.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit eb5e5d34aa0aa77da882863e92a6a87d535b6cf6 Author: Frédéric-Emmanuel PICCA Date: Tue Dec 15 18:41:27 2009 +0100 * remove a valgrind warning test/hkl-test.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) commit dc18121dc35034b4518b97e4ab99c8c8a38f1baf Author: Frédéric-Emmanuel PICCA Date: Tue Dec 15 18:30:01 2009 +0100 * now the pseudo axes test stop immediatly to avoid multiple error messages. Conflicts: test/hkl-test-pseudoaxis.c test/hkl-test-pseudoaxis.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) commit 5d2edcb2aa2cdc8add5d6bb88e061b8f361ee285 Author: Frédéric-Emmanuel PICCA Date: Tue Dec 15 17:56:21 2009 +0100 * improve the output of the test methods. Conflicts: test/hkl-test.c test/hkl-test.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) commit 441ed39a55a2359af9d125c1c7476971120098a3 Author: Frédéric-Emmanuel PICCA Date: Tue Dec 15 17:30:01 2009 +0100 * solve a bug in the q pseudo axis. src/hkl-pseudoaxis-common-q.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6165ae2823ed0e6a2f85d969faa0b808d11a190e Author: Frédéric-Emmanuel PICCA Date: Tue Dec 15 17:27:11 2009 +0100 * add a debug section in the pseudo_axis_auto part. src/hkl-pseudoaxis-auto.c | 6 ++++++ 1 file changed, 6 insertions(+) commit 44968237a7a11a6a6df0b176f40e358e530bc195 Author: Frédéric-Emmanuel PICCA Date: Tue Dec 15 15:23:45 2009 +0100 * be less strict when comparing double. test/hkl-test.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 85eae3b9ba4be48ad171c0d2da21d66fbe9b780e Author: Frédéric-Emmanuel PICCA Date: Tue Dec 15 15:22:54 2009 +0100 * better precision in the parameter fprintf method src/hkl-parameter.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 98fc860becb5af5979e8763bb33e661d30d6da7a Author: Picca Frederic-Emmanuel Date: Sun Jan 3 11:47:59 2010 +0100 * bench all engines of the k6c geometry test/bench.c | 118 ++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 88 insertions(+), 30 deletions(-) commit 27608d38b69d75bfa244f9deb6f7e3eb2c7a5874 Author: Picca Frederic-Emmanuel Date: Sun Jan 3 11:16:15 2010 +0100 * use fit instead of not_to_fit in HklParameter (less error prone) include/hkl/hkl-parameter.h | 8 +++----- src/hkl-axis.c | 2 +- src/hkl-lattice.c | 26 +++++++++++++------------- src/hkl-parameter.c | 10 +++++----- src/hkl-pseudoaxis-common-eulerians.c | 6 +++--- src/hkl-pseudoaxis-common-hkl.c | 6 +++--- src/hkl-pseudoaxis-common-psi.c | 8 ++++---- src/hkl-pseudoaxis-common-q.c | 6 +++--- src/hkl-pseudoaxis-e4cv-hkl.c | 14 +++++++------- src/hkl-pseudoaxis-e6c-hkl.c | 8 ++++---- src/hkl-pseudoaxis-k4cv-hkl.c | 8 ++++---- src/hkl-pseudoaxis-k6c-hkl.c | 8 ++++---- src/hkl-sample.c | 12 ++++++------ test/hkl-test-axis.c | 2 +- test/hkl-test-parameter.c | 32 ++++++++++++++++---------------- 15 files changed, 77 insertions(+), 79 deletions(-) commit c88d0783d6483d2b5300759d6559f2eff76d4db5 Author: Picca Frederic-Emmanuel Date: Sat Jan 2 18:02:45 2010 +0100 * typo test/hkl-test-pseudoaxis-e4cv.c | 20 ++++++++++---------- test/hkl-test-pseudoaxis-e6c.c | 24 ++++++++++++------------ test/hkl-test-pseudoaxis-k4cv.c | 20 ++++++++++---------- test/hkl-test-pseudoaxis-k6c.c | 18 +++++++++--------- 4 files changed, 41 insertions(+), 41 deletions(-) commit b9ff314b339a14d622921a7822559a4e2479e091 Author: Picca Frederic-Emmanuel Date: Sat Jan 2 13:47:15 2010 +0100 * now all tests are ok test/hkl-test-pseudoaxis.c | 21 ++++++++++++--------- test/main.c | 2 +- 2 files changed, 13 insertions(+), 10 deletions(-) commit bebd5e4b375416114aa8bf3510766c2bbf818e8f Author: Picca Frederic-Emmanuel Date: Sat Jan 2 13:36:46 2010 +0100 * stop when a test failed. test/hkl-test.c | 1 + 1 file changed, 1 insertion(+) commit 8e7f5e9dbb6e34d3911eb3202520b1f1e52a5194 Author: Picca Frederic-Emmanuel Date: Sat Jan 2 13:34:46 2010 +0100 * restor a part of the tests src/hkl-pseudoaxis.c | 10 ++++++++-- test/hkl-test-pseudoaxis-e4cv.c | 6 +++--- test/hkl-test-pseudoaxis-e6c.c | 11 +++++------ test/hkl-test-pseudoaxis-k4cv.c | 8 ++++---- test/hkl-test-pseudoaxis-k6c.c | 10 +++++----- 5 files changed, 25 insertions(+), 20 deletions(-) commit afa3ffe47c9f6a8795c8a053bb265ef49058e1e3 Author: Picca Frederic-Emmanuel Date: Sat Jan 2 12:48:18 2010 +0100 add the support for flymake src/Makefile.am | 7 +++++++ test/Makefile.am | 7 +++++++ 2 files changed, 14 insertions(+) commit 364260eb3596ed7e68665a8f2c38ddc13a8934ed Author: Picca Frederic-Emmanuel Date: Thu Dec 24 21:59:47 2009 +0100 * use HKL_GEOMETRY_TYPE_* instead of HKL_GEOMETRY_* include/hkl/hkl-geometry-factory.h | 10 +++++----- src/hkl-geometry-factory.c | 10 +++++----- src/hkl-pseudoaxis-factory.c | 10 +++++----- test/bench.c | 8 ++++---- test/hkl-test-pseudoaxis-e4cv.c | 24 ++++++++++++------------ test/hkl-test-pseudoaxis-e6c.c | 12 ++++++------ test/hkl-test-pseudoaxis-k4cv.c | 12 ++++++------ test/hkl-test-pseudoaxis-k6c.c | 16 ++++++++-------- test/hkl-test-pseudoaxis.c | 16 ++++++++-------- test/hkl-test-sample.c | 12 ++++++------ 10 files changed, 65 insertions(+), 65 deletions(-) commit c08d68fb4edf31ab36d2d9eb52db28024601a15c Author: Frédéric-Emmanuel PICCA Date: Fri Dec 11 16:59:52 2009 +0100 * WORK IN PROGRESS include/hkl/hkl-pseudoaxis.h | 26 ++------ src/hkl-pseudoaxis-common-eulerians.c | 14 ++-- src/hkl-pseudoaxis-common-hkl.c | 10 --- src/hkl-pseudoaxis-common-psi.c | 3 - src/hkl-pseudoaxis-common-q.c | 6 -- src/hkl-pseudoaxis-e4cv-hkl.c | 3 - src/hkl-pseudoaxis-e6c-hkl.c | 6 -- src/hkl-pseudoaxis-k4cv-hkl.c | 12 ---- src/hkl-pseudoaxis-k6c-hkl.c | 24 ------- src/hkl-pseudoaxis.c | 120 +++++++++++++++++++--------------- test/bench.c | 6 +- test/hkl-test-detector.c | 4 +- test/hkl-test-pseudoaxis-e4cv.c | 48 +++++++------- test/hkl-test-pseudoaxis-e6c.c | 20 +++--- test/hkl-test-pseudoaxis-k4cv.c | 17 ++--- test/hkl-test-pseudoaxis-k6c.c | 26 ++++---- test/hkl-test-pseudoaxis.c | 6 +- test/main.c | 2 +- 18 files changed, 142 insertions(+), 211 deletions(-) commit 07c848a8ba2dbf6e19289b637ba619a76ff2f277 Author: Frédéric-Emmanuel PICCA Date: Fri Dec 4 16:12:31 2009 +0100 * typo include/hkl/hkl-pseudoaxis.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 5d4825cc9b87ec92f47a47dbc4afb16d2ef0c219 Author: Frédéric-Emmanuel PICCA Date: Fri Dec 4 16:05:03 2009 +0100 * include geometry, detector and sample in the HklPseudoAxisList this is to prepare the HklPseudoAxisList -> HklDiffractometer. add the hkl_pseudo_axis_engine_list_init method to initialize thoses new members. include/hkl/hkl-pseudoaxis.h | 8 ++++++++ src/hkl-pseudoaxis.c | 14 ++++++++++++++ test/bench.c | 2 ++ test/hkl-test-pseudoaxis-e4cv.c | 12 ++++++++++++ test/hkl-test-pseudoaxis-e6c.c | 6 ++++++ test/hkl-test-pseudoaxis-k4cv.c | 6 ++++++ test/hkl-test-pseudoaxis-k6c.c | 7 +++++++ test/hkl-test-pseudoaxis.c | 31 ++++++++++++++++--------------- 8 files changed, 71 insertions(+), 15 deletions(-) commit a2aa2680ed99373f2984e6a0a63bcae0859689dc Author: Frédéric-Emmanuel PICCA Date: Fri Dec 4 14:51:04 2009 +0100 * optimisation, only one detector new/free for all pseudoaxes tests. test/hkl-test-pseudoaxis.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) commit 786d21c44703b4e358a3f4b5b0c9ca6e77ffbe1e Author: Frédéric-Emmanuel PICCA Date: Fri Dec 4 14:36:50 2009 +0100 * use the detector factory in the test methods test/bench.c | 16 ++++++--- test/hkl-test-detector.c | 2 +- test/hkl-test-pseudoaxis-e4cv.c | 12 +++---- test/hkl-test-pseudoaxis-e6c.c | 6 ++-- test/hkl-test-pseudoaxis-k4cv.c | 6 ++-- test/hkl-test-pseudoaxis-k6c.c | 8 ++--- test/hkl-test-pseudoaxis.c | 2 +- test/hkl-test-sample.c | 77 ++++++++++++++++++++++++++++------------- 8 files changed, 81 insertions(+), 48 deletions(-) commit 02eb9d91ee62074f3f14dad5b1a330e5a03e1274 Author: Frédéric-Emmanuel PICCA Date: Fri Dec 4 14:20:22 2009 +0100 * add the detector factory. include/Makefile.am | 3 ++- include/hkl.h | 1 + include/hkl/hkl-detector-factory.h | 41 ++++++++++++++++++++++++++++++++++++++ src/Makefile.am | 1 + src/hkl-detector-factory.c | 37 ++++++++++++++++++++++++++++++++++ 5 files changed, 82 insertions(+), 1 deletion(-) commit 74613a034057088c430d03fa829d1c24d589b4b7 Author: Frédéric-Emmanuel PICCA Date: Fri Dec 4 13:50:42 2009 +0100 * remove a memory leak include/hkl/hkl-pseudoaxis.h | 2 +- src/hkl-pseudoaxis-common.c | 4 +++- src/hkl-pseudoaxis.c | 7 ++++++- 3 files changed, 10 insertions(+), 3 deletions(-) commit ffde8218cf281b9b096c340fe68fd426a5204db9 Author: Frédéric-Emmanuel PICCA Date: Fri Dec 4 13:22:04 2009 +0100 * do not modify the Holder from the HklDetector struct include/hkl/hkl-detector.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit df9658b076c0fc6524ea79841b6b3182a4b7766e Author: Picca Frederic-Emmanuel Date: Tue Nov 24 21:59:37 2009 +0100 * use the HklDetector new/free methods. NEWS | 4 ++ test/hkl-test-pseudoaxis-e4cv.c | 82 ++++++++++++++++++++++++++--------------- test/hkl-test-pseudoaxis-e6c.c | 42 +++++++++++++-------- test/hkl-test-pseudoaxis-k4cv.c | 38 ++++++++++++------- test/hkl-test-pseudoaxis-k6c.c | 54 +++++++++++++++++---------- test/hkl-test-pseudoaxis.c | 13 +++++-- 6 files changed, 153 insertions(+), 80 deletions(-) commit 06f05dcf2dc5dd605db6b52cded9023b9aabb160 Author: Picca Frederic-Emmanuel Date: Sun Nov 22 12:34:34 2009 +0100 * add the HklDetector constructor / destructor / attach to holder include/hkl/hkl-detector.h | 9 +++++++ src/hkl-detector.c | 42 ++++++++++++++++++++++++++++++- test/hkl-test-detector.c | 61 ++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 103 insertions(+), 9 deletions(-) commit 942d52772b5c473358a8fef245cb3773336323aa Author: Picca Frederic-Emmanuel Date: Sun Nov 22 11:29:35 2009 +0100 * typo include/hkl/hkl-detector.h | 2 +- src/hkl-geometry-factory.c | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) commit 109bb176d86500dc1e011fc6cd974b55643c388e Author: Picca Frederic-Emmanuel Date: Sun Nov 8 10:00:19 2009 +0100 * add the autogen.sh script autogen.sh | 4 ++++ 1 file changed, 4 insertions(+) commit 9c84b23ff8ff333ccd293863ba00389befa4b0d5 Author: Picca Frederic-Emmanuel Date: Tue Nov 3 22:17:47 2009 +0100 * do not stopthe test if an error occured. test/hkl-test.c | 2 -- 1 file changed, 2 deletions(-) commit 0497e74e6c06c01436a9ac0236370b2003ab93ae Author: Picca Frederic-Emmanuel Date: Tue Nov 3 22:17:24 2009 +0100 * correct the test suite test/hkl-test-pseudoaxis-k4cv.c | 6 ++++-- test/hkl-test-pseudoaxis-k6c.c | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) commit 6c183bb90c230f9a85dc4ec15a9be2959d8452b5 Author: Picca Frederic-Emmanuel Date: Sat Oct 24 14:29:10 2009 +0200 * add the autoconf/automake files .gitignore | 8 + AUTHORS | 1 + COPYING | 675 ++++++++++++++++++++++++++++++++++++++++++++++++++++ ChangeLog | 2 + INSTALL | 302 +++++++++++++++++++++++ Makefile.am | 10 + configure.ac | 45 ++++ hkl.pc.in | 2 +- include/Makefile.am | 10 + src/Makefile.am | 43 ++++ src/Makefile.linux | 157 ------------ src/Makefile.vc | 90 ------- test/Makefile.am | 33 +++ wscript | 4 +- 14 files changed, 1132 insertions(+), 250 deletions(-) commit 504e27f5b84999bfc4f3bb92e6e92a1688b4c1a6 Merge: 36e37104 7876bc05 Author: Frédéric-Emmanuel PICCA Date: Fri Oct 23 11:33:39 2009 +0200 Merge branch 'next' commit 7876bc05c3f9daf0756116c4bd96e066f9a5205a Author: Frédéric-Emmanuel PICCA Date: Fri Oct 23 11:32:30 2009 +0200 * prepare for the 3.0.1 release. NEWS | 10 +++++++++- README | 4 ++-- TODO | 4 +--- wscript | 2 +- 4 files changed, 13 insertions(+), 7 deletions(-) commit 9b8f9b3ab90408d308956aa5da53659edd566a12 Author: Frédéric-Emmanuel PICCA Date: Fri Oct 23 11:11:20 2009 +0200 * add Maria Teresa as autor for the psi_constant mode. include/hkl/hkl-pseudoaxis-common-hkl.h | 1 + src/hkl-pseudoaxis-common-hkl.c | 1 + src/hkl-pseudoaxis-e4cv-hkl.c | 1 + src/hkl-pseudoaxis-e6c-hkl.c | 1 + src/hkl-pseudoaxis-k4cv-hkl.c | 1 + src/hkl-pseudoaxis-k6c-hkl.c | 1 + 6 files changed, 6 insertions(+) commit 83ee906e0a6e35511d21cb2c7079709f938fa85c Author: Frédéric-Emmanuel PICCA Date: Wed Oct 14 16:35:32 2009 +0200 * now remove the non valid geometry from the geometryList a non valid geometry is a geometry with an axis values out of range. include/hkl/hkl-axis.h | 2 ++ include/hkl/hkl-geometry.h | 4 ++++ include/hkl/hkl-list.h | 6 ++++++ include/hkl/hkl-parameter.h | 2 ++ src/hkl-axis.c | 5 +++++ src/hkl-geometry.c | 29 +++++++++++++++++++++++++++-- src/hkl-parameter.c | 8 ++++++++ src/hkl-pseudoaxis.c | 1 + test/hkl-test-geometry.c | 23 +++++++++++++++++++++++ test/hkl-test-parameter.c | 16 ++++++++++++++++ 10 files changed, 94 insertions(+), 2 deletions(-) commit f141954ca418bc7af40f80399eb88dce80a8fdcf Author: Picca Frédéric-Emmanuel Date: Wed Sep 23 09:45:29 2009 +0200 * no need to put vertical in mode names for the vertical geometries src/hkl-pseudoaxis-e4cv-hkl.c | 4 ++-- src/hkl-pseudoaxis-k4cv-hkl.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 644aabb27587fda190a37b0a2062c4920882a637 Author: Picca Frédéric-Emmanuel Date: Mon Sep 21 11:37:20 2009 +0200 * omega = +/-pi is also valid for the horizontal modes. src/hkl-pseudoaxis-e6c-hkl.c | 2 +- src/hkl-pseudoaxis-k6c-hkl.c | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) commit 8455255dc4e8d0a838199e60bad793c891da10c6 Author: Frédéric-Emmanuel PICCA Date: Tue Sep 22 17:35:09 2009 +0200 * forgot a fprintf test/hkl-test-pseudoaxis-e4cv.c | 1 - 1 file changed, 1 deletion(-) commit fd77ff95f115357f87bdab9f2b18126215108236 Author: Frédéric-Emmanuel PICCA Date: Tue Sep 22 17:28:08 2009 +0200 * typo src/hkl-pseudoaxis-common-hkl.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 13c2acacabcc672d2bd92c4d097f18560dfc43dc Author: Frédéric-Emmanuel PICCA Date: Tue Sep 22 17:26:35 2009 +0200 * better presentation of the PseduoAxis fprintf method src/hkl-pseudoaxis.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit a2cf58268e983b602e43f7e35730754fff4e83c4 Author: Frédéric-Emmanuel PICCA Date: Tue Sep 22 17:26:12 2009 +0200 * add a test method for the psi_constant_vertical mode nd correct the init method src/hkl-pseudoaxis-common-hkl.c | 10 +++---- test/hkl-test-pseudoaxis-e4cv.c | 65 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 5 deletions(-) commit 2211fe2f1d51309f355f4306718af98e4e1534ab Author: Frédéric-Emmanuel PICCA Date: Tue Sep 22 10:12:42 2009 +0200 * indent nothing more include/hkl/hkl-pseudoaxis-common-hkl.h | 12 ++++----- src/hkl-pseudoaxis-common-hkl.c | 46 +++++++++++++++++++-------------- src/hkl-pseudoaxis-common-psi.c | 34 ++++++++++++------------ src/hkl-pseudoaxis-e4cv-hkl.c | 31 ++++++---------------- src/hkl-pseudoaxis-e6c-hkl.c | 28 +++++--------------- src/hkl-pseudoaxis-k4cv-hkl.c | 17 +++--------- src/hkl-pseudoaxis-k6c-hkl.c | 45 ++++++++++---------------------- 7 files changed, 82 insertions(+), 131 deletions(-) commit d3ad49784201fbdc3b8889869c9f431447c71b90 Author: Frédéric-Emmanuel PICCA Date: Tue Sep 22 10:08:59 2009 +0200 * correct the psi_constant init method include/hkl/hkl-pseudoaxis-common-hkl.h | 4 ++-- src/hkl-pseudoaxis-common-hkl.c | 13 +++++++++---- 2 files changed, 11 insertions(+), 6 deletions(-) commit f5c83725f3cc354566f13b7501f0f6896d4f893b Author: teresa Date: Mon Sep 21 14:59:05 2009 +0200 "Again psi constant (4)' include/hkl/hkl-pseudoaxis-common-hkl.h | 25 +++++++ src/hkl-pseudoaxis-common-hkl.c | 114 +++++++++++++++++++++++++++++++- src/hkl-pseudoaxis-e4cv-hkl.c | 27 ++++++++ src/hkl-pseudoaxis-e6c-hkl.c | 27 ++++++++ src/hkl-pseudoaxis-k4cv-hkl.c | 30 +++++++++ src/hkl-pseudoaxis-k6c-hkl.c | 28 ++++++++ 6 files changed, 250 insertions(+), 1 deletion(-) commit 105a5f062f42d9e303c6ad502bfd1a4804595e65 Author: teresa Date: Mon Sep 14 14:21:31 2009 +0200 Change of the explanation of the bissector horizontal method (and some small other changes)' Documentation/user-guide.txt | 48 ++++++++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 17 deletions(-) commit 71b934ee4264b937c80b0cebe4e2007e40bd72a6 Author: Frédéric-Emmanuel PICCA Date: Fri Sep 11 16:11:06 2009 +0200 * add more documentation Documentation/user-guide.txt | 87 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 2 deletions(-) commit df3db041c4742173ae9f953486442c26bdf2d9fb Author: Frédéric-Emmanuel PICCA Date: Thu Sep 10 17:56:28 2009 +0200 * still working on the pseudo axis tutorial Documentation/user-guide.txt | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) commit cd96c35997040addfdd3441fd930c3eec3939b47 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 10 17:56:09 2009 +0200 * correction thanks to teresa Documentation/user-guide.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit bf32ee581d7b55f6df2771ac205e8d8815518ab6 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 10 09:49:28 2009 +0200 * start working on the hkl user-guide. Documentation/user-guide.txt | 196 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 195 insertions(+), 1 deletion(-) commit fa5c98d2f47d8a051de16921700c5cdfce26a8d6 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 10 09:54:59 2009 +0200 * post merge version increment NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6e5215cc770ddb95eb2ae68c8d5247af33efef6d Author: System User Date: Thu Jul 16 14:43:06 2009 +0200 * switch to waf 1.5.8 to prepare the windows compilation. src/wscript_build | 16 ++++++++-------- test/wscript_build | 40 +++++++++++++++++++++------------------- waf | Bin 75487 -> 84763 bytes wscript | 12 +++--------- 4 files changed, 32 insertions(+), 36 deletions(-) commit 36e37104c318d56670e42e1f578a4d0ff81e357e Merge: af1efa92 07174529 Author: System User Date: Wed Jul 15 18:52:43 2009 +0200 Merge branch 'next' Conflicts: README include/hkl/HKLException.h include/hkl/HolderList.h include/hkl/affinement.h include/hkl/affinement_simplex.h include/hkl/affinementlist.h include/hkl/axe.h include/hkl/axe_rotation.h include/hkl/axefactory.h include/hkl/constant.h include/hkl/convenience.h include/hkl/derived_mode.h include/hkl/derived_pseudoaxeengine.h include/hkl/diffractometer.h include/hkl/diffractometerfactory.h include/hkl/eulerian4C_vertical_diffractometer.h include/hkl/eulerian4C_vertical_geometry.h include/hkl/eulerian4C_vertical_mode.h include/hkl/eulerian4C_vertical_pseudoaxeengine.h include/hkl/eulerian6C_diffractometer.h include/hkl/eulerian6C_geometry.h include/hkl/eulerian6C_mode.h include/hkl/eulerian6C_pseudoaxeengine.h include/hkl/fitparameter.h include/hkl/fitparameterlist.h include/hkl/geometry.h include/hkl/geometry_kappa.h include/hkl/hklobject.h include/hkl/holder.h include/hkl/interval.h include/hkl/kappa4C_vertical_diffractometer.h include/hkl/kappa4C_vertical_geometry.h include/hkl/kappa4C_vertical_mode.h include/hkl/kappa4C_vertical_pseudoaxeengine.h include/hkl/kappa6C_diffractometer.h include/hkl/kappa6C_geometry.h include/hkl/kappa6C_mode.h include/hkl/kappa6C_pseudoaxeengine.h include/hkl/lattice.h include/hkl/mode.h include/hkl/modelist.h include/hkl/mymap.h include/hkl/object.h include/hkl/observer.h include/hkl/parameter.h include/hkl/parameterlist.h include/hkl/portability.h include/hkl/pseudoaxe.h include/hkl/pseudoaxeengine.h include/hkl/pseudoaxeenginelist.h include/hkl/pseudoaxelist.h include/hkl/quaternion.h include/hkl/range.h include/hkl/reflection.h include/hkl/reflection_monocrystal.h include/hkl/reflectionfactory.h include/hkl/reflectionlist.h include/hkl/sample.h include/hkl/sample_monocrystal.h include/hkl/samplefactory.h include/hkl/samplelist.h include/hkl/source.h include/hkl/strbuf.h include/hkl/svector.h include/hkl/twoC_vertical_diffractometer.h include/hkl/twoC_vertical_geometry.h include/hkl/twoC_vertical_mode.h include/hkl/twoC_vertical_pseudoaxeengine.h include/hkl/value.h src/HKLException.cpp src/affinement.cpp src/affinement_simplex.cpp src/affinementlist.cpp src/axe.cpp src/axe_rotation.cpp src/axefactory.cpp src/constant.cpp src/convenience.cpp src/diffractometer.cpp src/diffractometerfactory.cpp src/eulerian4C_vertical_diffractometer.cpp src/eulerian4C_vertical_geometry.cpp src/eulerian4C_vertical_mode.cpp src/eulerian4C_vertical_pseudoaxeengine.cpp src/eulerian6C_diffractometer.cpp src/eulerian6C_geometry.cpp src/eulerian6C_pseudoaxeengine.cpp src/fitparameter.cpp src/fitparameterlist.cpp src/geometry.cpp src/geometry_kappa.cpp src/hklobject.cpp src/holder.cpp src/interval.cpp src/kappa4C_vertical_diffractometer.cpp src/kappa4C_vertical_geometry.cpp src/kappa4C_vertical_pseudoaxeengine.cpp src/kappa6C_diffractometer.cpp src/kappa6C_geometry.cpp src/lattice.cpp src/mode.cpp src/modelist.cpp src/object.cpp src/observer.cpp src/parameter.cpp src/parameterlist.cpp src/pseudoaxe.cpp src/pseudoaxeengine.cpp src/pseudoaxeenginelist.cpp src/pseudoaxelist.cpp src/quaternion.cpp src/range.cpp src/reflection.cpp src/reflection_monocrystal.cpp src/reflectionfactory.cpp src/reflectionlist.cpp src/sample.cpp src/sample_monocrystal.cpp src/samplefactory.cpp src/samplelist.cpp src/source.cpp src/strbuf.cpp src/svector.cpp src/twoC_vertical_diffractometer.cpp src/twoC_vertical_geometry.cpp src/twoC_vertical_mode.cpp src/twoC_vertical_pseudoaxeengine.cpp src/value.cpp test/affinement_simplex_test.cpp test/affinement_simplex_test.h test/axe_rotation_test.cpp test/axe_rotation_test.h test/diffractometer_eulerian4C_test.cpp test/diffractometer_eulerian4C_test.h test/diffractometer_kappa4C_test.cpp test/diffractometer_kappa4C_test.h test/diffractometer_kappa6C_test.cpp test/diffractometer_kappa6C_test.h test/diffractometer_test.cpp test/diffractometer_test.h test/diffractometer_twoC_test.cpp test/diffractometer_twoC_test.h test/fitparameter_test.cpp test/fitparameter_test.h test/geometry_eulerian4C_test.cpp test/geometry_eulerian4C_test.h test/geometry_eulerian6C_test.cpp test/geometry_eulerian6C_test.h test/geometry_kappa4C_test.cpp test/geometry_kappa4C_test.h test/geometry_kappa6C_test.cpp test/geometry_kappa6C_test.h test/geometry_test.cpp test/geometry_test.h test/geometry_twoC_test.cpp test/geometry_twoC_test.h test/hklobject_test.cpp test/hklobject_test.h test/holder_test.cpp test/holder_test.h test/holderlist_test.cpp test/holderlist_test.h test/interval_test.cpp test/interval_test.h test/lattice_test.cpp test/lattice_test.h test/libHKL_test.cpp test/main.cpp test/mode_eulerian4C_test.cpp test/mode_eulerian4C_test.h test/mode_kappa4C_test.cpp test/mode_kappa4C_test.h test/mode_kappa6C_test.cpp test/mode_kappa6C_test.h test/mode_twoC_test.cpp test/mode_twoC_test.h test/object_test.cpp test/object_test.h test/parameter_test.cpp test/parameter_test.h test/pseudoaxe_eulerian4C_test.cpp test/pseudoaxe_eulerian4C_test.h test/pseudoaxe_eulerian6C_test.cpp test/pseudoaxe_eulerian6C_test.h test/pseudoaxe_kappa4C_test.cpp test/pseudoaxe_kappa4C_test.h test/pseudoaxe_kappa6C_test.cpp test/pseudoaxe_kappa6C_test.h test/pseudoaxe_twoC_test.cpp test/pseudoaxe_twoC_test.h test/quaternion_test.cpp test/quaternion_test.h test/range_test.cpp test/range_test.h test/reflection_test.cpp test/reflection_test.h test/reflectionlist_test.cpp test/reflectionlist_test.h test/sample_test.cpp test/sample_test.h test/samplelist_test.cpp test/samplelist_test.h test/source_test.cpp test/source_test.h test/svecmat_test.cpp test/svecmat_test.h test/value_test.cpp test/value_test.h commit 0717452972b752f34ce8a0ab47ffada980f9bf72 Author: Picca Frédéric-Emmanuel Date: Fri Jun 5 16:42:27 2009 +0200 * better initialization of the Psi pseudoAxisEngine parameters src/hkl-pseudoaxis-common-psi.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) commit 4c2a571f8985e7032333b09dda46708854b1ec19 Author: Frédéric-Emmanuel PICCA Date: Fri Jun 5 11:50:04 2009 +0200 * add the q2 pseudo axis engine for the 6 circles geometries. include/hkl/hkl-pseudoaxis-common-q.h | 1 + src/hkl-pseudoaxis-common-q.c | 129 ++++++++++++++++++++++++++++++++++ src/hkl-pseudoaxis-factory.c | 2 + test/hkl-test-pseudoaxis-e6c.c | 63 +++++++++++++++++ test/hkl-test-pseudoaxis-k6c.c | 63 +++++++++++++++++ 5 files changed, 258 insertions(+) commit d3d7541260b2f88eb4165fca5477a3d9b46690a6 Author: Frédéric-Emmanuel PICCA Date: Fri Jun 5 11:49:13 2009 +0200 * move around comments src/hkl-pseudoaxis-common-q.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 6b508c9263a1709a9811407008a90f1a015d8c46 Author: Frédéric-Emmanuel PICCA Date: Fri Jun 5 11:48:55 2009 +0200 * add also the q test in the k4c geometry test/hkl-test-pseudoaxis-k4cv.c | 57 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) commit 427c663d6b1844756ae57c028a5501596f966e11 Author: Frédéric-Emmanuel PICCA Date: Fri Jun 5 09:53:04 2009 +0200 ** add the q HklPseudoAxisEngine for e4cv and k4cv geometries. include/hkl/hkl-pseudoaxis-common-q.h | 29 ++++++++ src/hkl-pseudoaxis-common-q.c | 130 ++++++++++++++++++++++++++++++++++ src/hkl-pseudoaxis-factory.c | 3 + test/hkl-test-pseudoaxis-e4cv.c | 56 +++++++++++++++ 4 files changed, 218 insertions(+) commit e7955991bac2ae40506daf7f9698ba50dfd6fbe8 Author: Frédéric-Emmanuel PICCA Date: Fri Jun 5 09:22:31 2009 +0200 * add the get_wavelength to the HklSource class. include/hkl/hkl-source.h | 2 ++ src/hkl-source.c | 5 +++++ test/hkl-test-source.c | 12 ++++++++++++ 3 files changed, 19 insertions(+) commit 626b4896ade2cb0cbd9e1261e642f875c94ee0d0 Author: Frédéric-Emmanuel PICCA Date: Thu Jun 4 11:42:21 2009 +0200 * update the "eulerians" pseudo axis test method. test/hkl-test-pseudoaxis-k4cv.c | 26 ++++++++++++++------------ test/hkl-test-pseudoaxis-k6c.c | 25 ++++++++++++++----------- test/hkl-test-pseudoaxis.c | 3 +++ 3 files changed, 31 insertions(+), 23 deletions(-) commit 23117b990d103fd164b21910f84228d2498b4a56 Author: Frédéric-Emmanuel PICCA Date: Thu Jun 4 10:10:54 2009 +0200 * first working version of the cut problem include/hkl/hkl-geometry.h | 2 ++ src/hkl-geometry.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++ src/hkl-pseudoaxis.c | 1 + test/hkl-test-geometry.c | 35 ++++++++++++++++++++++++ 4 files changed, 104 insertions(+) commit d7f4f0a85063a8a93677e4bb9220b47e1ddc500c Author: Frédéric-Emmanuel PICCA Date: Wed Jun 3 18:03:24 2009 +0200 * add the HklAxis get_max method include/hkl/hkl-axis.h | 2 ++ include/hkl/hkl-parameter.h | 2 ++ src/hkl-axis.c | 5 +++++ src/hkl-parameter.c | 6 ++++++ 4 files changed, 15 insertions(+) commit dfe3916cb0b0fdd4a0ad384005f5ee2fe5319510 Author: Frédéric-Emmanuel PICCA Date: Wed Jun 3 16:28:49 2009 +0200 * add the HklAxis set_value_smallest_in_range method with test. include/hkl/hkl-axis.h | 2 ++ src/hkl-axis.c | 13 +++++++++++++ test/hkl-test-axis.c | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+) commit 1f0255022c3b79f7df038159471e8a6b5f875e9f Author: Frédéric-Emmanuel PICCA Date: Wed Jun 3 16:08:15 2009 +0200 * add the extern keyword in the HklInterval struct include/hkl/hkl-interval.h | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) commit 0fb60655442844d20c02b7b8da802844df856fb8 Author: Frédéric-Emmanuel PICCA Date: Wed Jun 3 16:07:44 2009 +0200 * remove a bug in the HklAxis is_value_compatible_with_range. include/hkl/hkl-axis.h | 2 ++ include/hkl/hkl-interval.h | 2 ++ src/hkl-axis.c | 40 ++++++++++++++++++++++++---------------- src/hkl-interval.c | 7 +++++++ test/hkl-test-axis.c | 35 +++++++++++++++++++++++++++++++++++ 5 files changed, 70 insertions(+), 16 deletions(-) commit 0679e0da81c06d926820daed8dd2d811a760f8aa Author: Frédéric-Emmanuel PICCA Date: Tue Jun 2 15:18:19 2009 +0200 * more axis methods. get_name, get/set_changed and _get_value. include/hkl/hkl-axis.h | 10 +++++++- src/hkl-axis.c | 58 +++++++++++++++++++++++++++++--------------- src/hkl-geometry.c | 30 +++++++++++------------ src/hkl-pseudoaxis-auto.c | 4 +-- src/hkl-pseudoaxis-factory.c | 12 ++++----- src/hkl-sample.c | 2 +- test/hkl-test-geometry.c | 16 ++++++------ 7 files changed, 80 insertions(+), 52 deletions(-) commit 66a1fa468f7366393266bab31e2f54e08612cd0b Author: Picca Frédéric-Emmanuel Date: Sun May 24 14:18:23 2009 +0200 * add the hkl.h files. Just #include to use the hkl library include/hkl.h | 5 +++++ test/bench.c | 5 +---- test/hkl-test-axis.c | 5 +---- test/hkl-test-detector.c | 4 +--- test/hkl-test-geometry.c | 4 +--- test/hkl-test-interval.c | 4 +--- test/hkl-test-lattice.c | 2 +- test/hkl-test-matrix.c | 5 +---- test/hkl-test-parameter.c | 4 +--- test/hkl-test-pseudoaxis-e4cv.c | 5 +---- test/hkl-test-pseudoaxis-e6c.c | 5 +---- test/hkl-test-pseudoaxis-k4cv.c | 5 +---- test/hkl-test-pseudoaxis-k6c.c | 5 +---- test/hkl-test-pseudoaxis.c | 3 +-- test/hkl-test-quaternion.c | 6 +----- test/hkl-test-sample.c | 5 +---- test/hkl-test-source.c | 4 +--- test/hkl-test-vector.c | 5 +---- test/hkl-test.c | 5 +---- wscript | 1 + 20 files changed, 24 insertions(+), 63 deletions(-) commit c6f782d0b1499f2ca8f276fab4853c68ba540b41 Author: Picca Frédéric-Emmanuel Date: Sat May 23 22:05:36 2009 +0200 * add the sample set_name method include/hkl/hkl-sample.h | 2 ++ src/hkl-sample.c | 10 ++++++++++ 2 files changed, 12 insertions(+) commit 666d953cf77cf9629a55c7b5d9979cf19a828e44 Author: Picca Frédéric-Emmanuel Date: Sat May 23 14:46:09 2009 +0200 * we can create a sample reflection with null vector src/hkl-sample.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) commit 6f348abff9ec1934943588b079c9f4abbc6effb1 Author: Picca Frédéric-Emmanuel Date: Sat May 23 14:45:42 2009 +0200 * bug in the get reflection parameter check src/hkl-sample.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 787b32c8b122376cc35b2ea3488f34f8029227a0 Author: Picca Frédéric-Emmanuel Date: Sat May 23 14:45:12 2009 +0200 * do not add the reflection if it is NULL src/hkl-sample.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 413fbe337800a0ef18295cc15b17b0bd5d126cfb Author: Picca Frédéric-Emmanuel Date: Sat May 23 14:44:45 2009 +0200 * remove a valgrind warning. src/hkl-sample.c | 2 ++ 1 file changed, 2 insertions(+) commit 1dffbcccdad87a3d1450cf382d603711d761b95e Author: Picca Frédéric-Emmanuel Date: Sat May 23 14:44:12 2009 +0200 * no more assert in the vector angle method src/hkl-vector.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit 5526c2d9273725e329c89524174982aae92687a9 Author: Picca Frédéric-Emmanuel Date: Fri May 15 16:20:58 2009 +0200 * now the HklSample compute_UB matrix update also the UB matrix !!! src/hkl-sample.c | 1 + 1 file changed, 1 insertion(+) commit c4ee40c1e0df7235618a4ebc075cb71f5dab2ba5 Author: Picca Frédéric-Emmanuel Date: Thu May 14 16:18:33 2009 +0200 * print a backtrace when an assert failed. include/hkl/hkl-macros.h | 12 ++++++++++++ src/hkl-quaternion.c | 5 ++--- src/hkl-vector.c | 5 ++--- src/usage.c | 17 +++++++++++++++++ 4 files changed, 33 insertions(+), 6 deletions(-) commit 8fadc24c74696d71e79a1d2ac28e3fb971095340 Author: Picca Frédéric-Emmanuel Date: Thu May 14 15:19:04 2009 +0200 * add the HklSampleList fprintf method include/hkl/hkl-sample.h | 2 ++ src/hkl-sample.c | 7 +++++++ 2 files changed, 9 insertions(+) commit 22b15be7816c910237d81400cead68450b0d3bc3 Author: Picca Frédéric-Emmanuel Date: Thu May 14 14:52:46 2009 +0200 * split the factory.h files into .c and .h part include/hkl/hkl-geometry-factory.h | 107 +--------------------------- include/hkl/hkl-pseudoaxis-factory.h | 107 +--------------------------- src/hkl-geometry-factory.c | 132 +++++++++++++++++++++++++++++++++++ src/hkl-pseudoaxis-factory.c | 130 ++++++++++++++++++++++++++++++++++ test/hkl-test-pseudoaxis-e4cv.c | 1 + test/hkl-test-pseudoaxis-e6c.c | 1 + test/hkl-test-pseudoaxis-k4cv.c | 1 + test/hkl-test-pseudoaxis-k6c.c | 1 + 8 files changed, 269 insertions(+), 211 deletions(-) commit 391b0fef4efb6a3774f50d581ef95f5e7edd3477 Author: Picca Frédéric-Emmanuel Date: Thu May 14 10:13:31 2009 +0200 * add an rpath in the test part instead of modifing the LD_LIBRARY_PATH test/wscript_build | 2 ++ wscript | 4 ---- 2 files changed, 2 insertions(+), 4 deletions(-) commit 746f612b1184c8f3e2923474f6a32e239d694425 Author: Picca Frédéric-Emmanuel Date: Thu May 14 10:08:08 2009 +0200 * add the clear and test method to the HklSampleList include/hkl/hkl-sample.h | 2 ++ src/hkl-sample.c | 9 +++++++++ test/hkl-test-sample.c | 25 +++++++++++++++++++++++++ 3 files changed, 36 insertions(+) commit 0a63cf49d6fda50cc8719f1eea00c3baec9f98ac Author: Picca Frédéric-Emmanuel Date: Thu May 14 09:58:10 2009 +0200 * update the HklSample get_reflection test method test/hkl-test-sample.c | 2 ++ 1 file changed, 2 insertions(+) commit b89520c560dc86a47832406a0c5145361170c081 Author: Picca Frédéric-Emmanuel Date: Thu May 14 09:56:36 2009 +0200 * add lifting detector mode with different sample axes. - e6c omega, phi, mu - k6c komega, kphi, mu src/hkl-pseudoaxis-e6c-hkl.c | 24 ++++++++++++++++++++++-- src/hkl-pseudoaxis-k6c-hkl.c | 24 ++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 4 deletions(-) commit f850c1def2baa1de27760129186cf7dc0935f4c1 Author: Picca Frédéric-Emmanuel Date: Thu May 14 09:50:52 2009 +0200 * add the SampleReflection print in the Sample fprintf method include/hkl/hkl-sample.h | 2 +- src/hkl-sample.c | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) commit 866faed1fbc38cb738941467ce6633dfe9618331 Author: Picca Frédéric-Emmanuel Date: Thu May 14 09:36:56 2009 +0200 * remove a memory leak in the geometry multiplication include/hkl/hkl-pseudoaxis-factory.h | 2 ++ 1 file changed, 2 insertions(+) commit 2b2b4ffa125d0bf6df00dc27cc80f2f8ad7de259 Author: Picca Frédéric-Emmanuel Date: Thu Apr 23 14:25:34 2009 +0200 * no more restriction in the eulerian kappa conversion src/hkl-pseudoaxis-common-eulerians.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit f14f7dec81fd31f9eed366a7f76a837707162fa9 Author: Picca Frédéric-Emmanuel Date: Thu Apr 23 14:25:12 2009 +0200 * remove a bug in the eulerian kappa conversion src/hkl-pseudoaxis-common-eulerians.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 3c654e5091f43849b8d392551e14df8ab4df9218 Author: Picca Frédéric-Emmanuel Date: Thu Apr 23 14:23:53 2009 +0200 * the axis distance is equal to the real distance not the orthodromic src/hkl-geometry.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b539a9bf177daf122c787d07652c80b98b3adbb5 Author: Picca Frédéric-Emmanuel Date: Thu Apr 23 09:25:19 2009 +0200 * print the geometries with more digits. src/hkl-geometry.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) commit 1c671cacd687933d61fa297667952da6dfd58763 Author: Picca Frédéric-Emmanuel Date: Thu Apr 23 09:17:09 2009 +0200 * wrong test_sector criterium src/hkl-pseudoaxis-auto.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 85c3cbb2e67983aff2df4f86740a3727400452f0 Author: Picca Frédéric-Emmanuel Date: Fri Apr 17 11:13:08 2009 +0200 * add get_value_closest_unit include/hkl/hkl-axis.h | 6 ++++++ include/hkl/hkl-parameter.h | 2 ++ src/hkl-axis.c | 18 ++++++++++++++++++ src/hkl-parameter.c | 9 +++++++++ src/hkl-pseudoaxis-auto.c | 11 +++++++++-- src/wscript_build | 3 ++- 6 files changed, 46 insertions(+), 3 deletions(-) commit 4f03fe73063080531fd945cb415817cbbf059186 Author: System User Date: Fri Apr 10 19:29:42 2009 +0200 * smae things for an all geometry. include/hkl/hkl-geometry.h | 2 ++ src/hkl-geometry.c | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+) commit 608d115603d416815d7457c3422e429c9d66c741 Author: System User Date: Fri Apr 10 19:28:59 2009 +0200 * add the hklAxis cut code. now with get_value_closest you can get the angle of the Axis1 closest to the axis2 position taking into account the axis1 range. include/hkl/hkl-axis.h | 6 ++++ src/hkl-axis.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++ test/hkl-test-axis.c | 29 ++++++++++++++++ 3 files changed, 124 insertions(+) commit 3ff90643d91490e423620c9a1d0e325084cd441a Author: System User Date: Fri Apr 10 19:26:54 2009 +0200 * add the HklParameter set_range methodes. include/hkl/hkl-parameter.h | 4 ++++ src/hkl-parameter.c | 15 +++++++++++++++ 2 files changed, 19 insertions(+) commit 776bafd497c755b43b8987e0ce3d6992cca17be0 Author: System User Date: Fri Apr 10 18:15:40 2009 +0200 * add the interval length method include/hkl/hkl-interval.h | 2 ++ src/hkl-interval.c | 5 +++++ test/hkl-test-interval.c | 16 ++++++++++++++++ 3 files changed, 23 insertions(+) commit 918ea7febc6cfbea081c6fad11ab4250c5f63c87 Author: System User Date: Fri Apr 10 12:44:38 2009 +0200 * add the orthodromic geometry distance computation use it in the HklGeometryList add method. include/hkl/hkl-geometry.h | 2 ++ src/hkl-geometry.c | 26 +++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) commit 99692680c3c0c4cddcc7e260cb1756ce672f7db3 Author: System User Date: Thu Apr 9 18:09:56 2009 +0200 * now the geometry multiplication is working include/hkl/hkl-geometry.h | 6 +- include/hkl/hkl-pseudoaxis-factory.h | 69 +++++++++++++ src/hkl-geometry.c | 11 +- src/hkl-pseudoaxis-k6c-hkl.c | 190 ++--------------------------------- src/hkl-pseudoaxis.c | 1 + 5 files changed, 89 insertions(+), 188 deletions(-) commit 05916707d0f31327857498e3ddae847a57f2affa Author: Frédéric-Emmanuel PICCA Date: Wed Apr 8 10:43:14 2009 +0200 * add a multiply function to add special sytmetries to a diffractometer. for now only the bissector vertical system. include/hkl/hkl-geometry.h | 5 +++++ src/hkl-geometry.c | 14 ++++++++++++++ src/hkl-pseudoaxis-k6c-hkl.c | 37 ++++++++++++++++++++++++++++++++++++- 3 files changed, 55 insertions(+), 1 deletion(-) commit ef5f8240879e26cdf5905d19a31ec9e235e2d379 Author: Frédéric-Emmanuel PICCA Date: Mon Apr 6 10:40:07 2009 +0200 * reoarganize a little bit the hkl-test-pseudoAxis methods test/hkl-test-pseudoaxis.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) commit 912953c5f204bc62ae9d03ef9614a23e3e42b1f8 Author: System User Date: Fri Apr 3 15:52:14 2009 +0200 * update the bissector modes for the kappa geometries. src/hkl-pseudoaxis-k4cv-hkl.c | 4 ++-- src/hkl-pseudoaxis-k6c-hkl.c | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) commit 96611cab46574f0f2bfc6f33a0b22c2515d5d718 Author: System User Date: Wed Apr 1 09:57:06 2009 +0200 * add the HklAxis get/set_value_unit. include/hkl/hkl-axis.h | 4 ++++ src/hkl-axis.c | 11 +++++++++++ 2 files changed, 15 insertions(+) commit 4dbcdb93cb8a8ff5ce857133b83d89058802639f Author: Frédéric-Emmanuel PICCA Date: Fri Mar 27 17:12:08 2009 +0100 * sort the geometries after an hkl_pseudo_axis_engine_setter. src/hkl-pseudoaxis.c | 2 ++ 1 file changed, 2 insertions(+) commit 8b3b1561b55eb119a28f389e2dd91d088d5af9a9 Author: Frédéric-Emmanuel PICCA Date: Fri Mar 27 17:11:13 2009 +0100 * add the hkl_geometry_list_fprintf method use it in the hkl_pseudo_axis_engine_fprintf method. include/hkl/hkl-geometry.h | 3 +++ src/hkl-geometry.c | 41 +++++++++++++++++++++++++++++++++++++++++ src/hkl-pseudoaxis.c | 41 +++++------------------------------------ 3 files changed, 49 insertions(+), 36 deletions(-) commit af98c37c2b39a37cba7901349c1374dbbf85b53b Author: Frédéric-Emmanuel PICCA Date: Fri Mar 27 17:10:06 2009 +0100 * typo src/hkl-geometry.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 3ecc49b8811057581a44edb01d88ebc97ac494dd Author: Frédéric-Emmanuel PICCA Date: Fri Mar 27 17:08:54 2009 +0100 * remove a bug in the sort method src/hkl-geometry.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 52c101ee34917220dd2076f113954b02205061d5 Author: Frédéric-Emmanuel PICCA Date: Fri Mar 27 15:42:46 2009 +0100 * add the hkl_geometry_list_sort method include/hkl/hkl-geometry.h | 1 + src/hkl-geometry.c | 40 +++++++++++++++++++++++++++++++++++++--- test/hkl-test-geometry.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 3 deletions(-) commit 41270cb713360307a49e6425b39d75373bb80b42 Author: Picca Frédéric-Emmanuel Date: Sat Mar 21 19:05:07 2009 +0100 * typo include/hkl/hkl-geometry-factory.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f1abf875bdc99748d7244594fe0e5193cbd5d387 Author: Picca Frédéric-Emmanuel Date: Sat Mar 21 14:03:54 2009 +0100 * add the documentation for the HklGeometry Documentation/user-guide.txt | 146 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 122 insertions(+), 24 deletions(-) commit 6f581645f736f37b6e28ddee1beb1a5c0fcf9c07 Author: Picca Frédéric-Emmanuel Date: Thu Mar 19 12:14:19 2009 +0100 * explain in the userg-guide howto build and hack hkl Documentation/user-guide.txt | 69 ++++++++++++++++++++++++++++++++------------ 1 file changed, 50 insertions(+), 19 deletions(-) commit a789dd7b34bc9d9b0bdd06cb92f1c08aaa6eeb1f Author: Picca Frédéric-Emmanuel Date: Thu Mar 19 11:23:18 2009 +0100 * update the TODO and the README files explain how to compile with waf and the roadmap. README | 27 ++++++++-------------- TODO | 83 +++++++++++++++++------------------------------------------------- 2 files changed, 31 insertions(+), 79 deletions(-) commit 01f32726bfd2daf70e0e95f5a619bc9ab6e263b9 Author: Frédéric-Emmanuel PICCA Date: Wed Mar 18 16:41:08 2009 +0100 * update the NEWS file NEWS | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) commit edd9b90835f76464d7dc1e5c4b0fcc30f11a999b Author: Frédéric-Emmanuel PICCA Date: Wed Mar 18 15:51:33 2009 +0100 * add the GPL header include/hkl/hkl-axis.h | 21 +++++++++++++++++++++ include/hkl/hkl-detector.h | 21 +++++++++++++++++++++ include/hkl/hkl-geometry-factory.h | 21 +++++++++++++++++++++ include/hkl/hkl-geometry.h | 21 +++++++++++++++++++++ include/hkl/hkl-interval.h | 21 +++++++++++++++++++++ include/hkl/hkl-lattice.h | 21 +++++++++++++++++++++ include/hkl/hkl-list.h | 21 +++++++++++++++++++++ include/hkl/hkl-macros.h | 21 +++++++++++++++++++++ include/hkl/hkl-matrix.h | 21 +++++++++++++++++++++ include/hkl/hkl-parameter.h | 21 +++++++++++++++++++++ include/hkl/hkl-pseudoaxis-auto.h | 21 +++++++++++++++++++++ include/hkl/hkl-pseudoaxis-common-eulerians.h | 21 +++++++++++++++++++++ include/hkl/hkl-pseudoaxis-common-hkl.h | 21 +++++++++++++++++++++ include/hkl/hkl-pseudoaxis-common-psi.h | 21 +++++++++++++++++++++ include/hkl/hkl-pseudoaxis-common.h | 21 +++++++++++++++++++++ include/hkl/hkl-pseudoaxis-e4cv.h | 21 +++++++++++++++++++++ include/hkl/hkl-pseudoaxis-e6c.h | 21 +++++++++++++++++++++ include/hkl/hkl-pseudoaxis-factory.h | 21 +++++++++++++++++++++ include/hkl/hkl-pseudoaxis-k4cv.h | 21 +++++++++++++++++++++ include/hkl/hkl-pseudoaxis-k6c.h | 21 +++++++++++++++++++++ include/hkl/hkl-pseudoaxis.h | 21 +++++++++++++++++++++ include/hkl/hkl-quaternion.h | 21 +++++++++++++++++++++ include/hkl/hkl-sample.h | 21 +++++++++++++++++++++ include/hkl/hkl-source.h | 21 +++++++++++++++++++++ include/hkl/hkl-unit.h | 21 +++++++++++++++++++++ include/hkl/hkl-vector.h | 21 +++++++++++++++++++++ src/hkl-axis.c | 21 +++++++++++++++++++++ src/hkl-detector.c | 21 +++++++++++++++++++++ src/hkl-geometry.c | 21 +++++++++++++++++++++ src/hkl-interval.c | 21 +++++++++++++++++++++ src/hkl-lattice.c | 21 +++++++++++++++++++++ src/hkl-matrix.c | 21 +++++++++++++++++++++ src/hkl-parameter.c | 21 +++++++++++++++++++++ src/hkl-pseudoaxis-auto.c | 21 +++++++++++++++++++++ src/hkl-pseudoaxis-common-eulerians.c | 21 +++++++++++++++++++++ src/hkl-pseudoaxis-common-hkl.c | 21 +++++++++++++++++++++ src/hkl-pseudoaxis-common-psi.c | 21 +++++++++++++++++++++ src/hkl-pseudoaxis-common.c | 21 +++++++++++++++++++++ src/hkl-pseudoaxis-e4cv-hkl.c | 21 +++++++++++++++++++++ src/hkl-pseudoaxis-e4cv-psi.c | 21 +++++++++++++++++++++ src/hkl-pseudoaxis-e6c-hkl.c | 21 +++++++++++++++++++++ src/hkl-pseudoaxis-e6c-psi.c | 21 +++++++++++++++++++++ src/hkl-pseudoaxis-k4cv-hkl.c | 21 +++++++++++++++++++++ src/hkl-pseudoaxis-k4cv-psi.c | 21 +++++++++++++++++++++ src/hkl-pseudoaxis-k6c-hkl.c | 21 +++++++++++++++++++++ src/hkl-pseudoaxis-k6c-psi.c | 21 +++++++++++++++++++++ src/hkl-pseudoaxis.c | 21 +++++++++++++++++++++ src/hkl-quaternion.c | 21 +++++++++++++++++++++ src/hkl-sample.c | 21 +++++++++++++++++++++ src/hkl-source.c | 21 +++++++++++++++++++++ src/hkl-unit.c | 21 +++++++++++++++++++++ src/hkl-vector.c | 21 +++++++++++++++++++++ src/usage.c | 21 +++++++++++++++++++++ test/bench.c | 21 +++++++++++++++++++++ test/hkl-test-axis.c | 21 +++++++++++++++++++++ test/hkl-test-detector.c | 21 +++++++++++++++++++++ test/hkl-test-geometry.c | 21 +++++++++++++++++++++ test/hkl-test-interval.c | 21 +++++++++++++++++++++ test/hkl-test-lattice.c | 21 +++++++++++++++++++++ test/hkl-test-matrix.c | 21 +++++++++++++++++++++ test/hkl-test-parameter.c | 21 +++++++++++++++++++++ test/hkl-test-pseudoaxis-e4cv.c | 21 +++++++++++++++++++++ test/hkl-test-pseudoaxis-e6c.c | 21 +++++++++++++++++++++ test/hkl-test-pseudoaxis-k4cv.c | 21 +++++++++++++++++++++ test/hkl-test-pseudoaxis-k6c.c | 21 +++++++++++++++++++++ test/hkl-test-pseudoaxis.c | 21 +++++++++++++++++++++ test/hkl-test-quaternion.c | 21 +++++++++++++++++++++ test/hkl-test-sample.c | 21 +++++++++++++++++++++ test/hkl-test-source.c | 21 +++++++++++++++++++++ test/hkl-test-vector.c | 21 +++++++++++++++++++++ test/hkl-test.c | 21 +++++++++++++++++++++ test/hkl-test.h | 21 +++++++++++++++++++++ test/main.c | 21 +++++++++++++++++++++ 73 files changed, 1533 insertions(+) commit fb5b7b93eaf3ee04a6d1ddb7bbf32722e6a7a4a3 Author: Frédéric-Emmanuel PICCA Date: Wed Mar 18 14:38:15 2009 +0100 * reordon the pseudoAxes Modes in the e6c and k6c geometries. src/hkl-pseudoaxis-e6c-hkl.c | 20 ++++++------- src/hkl-pseudoaxis-k6c-hkl.c | 68 ++++++++++++++++++++++---------------------- 2 files changed, 44 insertions(+), 44 deletions(-) commit a22e4329dac984a8bc8f5d61880380157ee6daa6 Author: Frédéric-Emmanuel PICCA Date: Wed Mar 18 14:09:27 2009 +0100 * remove valgrind warning about uninitialized values. src/hkl-pseudoaxis.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) commit 251d243b133b956806ce13ed30d633cdffd460ea Author: Frédéric-Emmanuel PICCA Date: Wed Mar 18 14:08:56 2009 +0100 * remove the unneeded len member of HklGeometryList include/hkl/hkl-geometry.h | 1 - src/hkl-geometry.c | 5 +---- test/bench.c | 2 +- test/hkl-test-pseudoaxis-e4cv.c | 4 ++-- test/hkl-test-pseudoaxis-e6c.c | 2 +- test/hkl-test-pseudoaxis-k4cv.c | 4 ++-- test/hkl-test-pseudoaxis-k6c.c | 20 ++++++++++---------- test/hkl-test-pseudoaxis.c | 6 ++++-- 8 files changed, 21 insertions(+), 23 deletions(-) commit 05fd3fe6f030d376a8e55c4366cfb0367e1faa2f Author: Frédéric-Emmanuel PICCA Date: Wed Mar 18 10:56:47 2009 +0100 * remove a memory leak src/hkl-geometry.c | 1 + 1 file changed, 1 insertion(+) commit 5ad1d77a9f0ee3ca8e261c1eeab960372e2d2ae1 Author: Frédéric-Emmanuel PICCA Date: Wed Mar 18 10:56:37 2009 +0100 * Now the HklPseudoAxisEngine Has a reference on an HklPseudoAxisEngineList As this List contain the HklGeometryList all engines of this List refer to this geometry list. include/hkl/hkl-pseudoaxis.h | 2 +- src/hkl-pseudoaxis.c | 17 ++++++-------- test/bench.c | 26 +++++++++++----------- test/hkl-test-pseudoaxis-e4cv.c | 44 +++++++++++++++++++----------------- test/hkl-test-pseudoaxis-e6c.c | 22 +++++++++--------- test/hkl-test-pseudoaxis-k4cv.c | 28 ++++++++++++----------- test/hkl-test-pseudoaxis-k6c.c | 49 ++++++++++++++++++++--------------------- test/hkl-test-pseudoaxis.c | 4 ++-- 8 files changed, 98 insertions(+), 94 deletions(-) commit a242d8fc19db357baba22a35fe7d3c0e0cdd1e08 Author: Frédéric-Emmanuel PICCA Date: Wed Mar 18 09:50:56 2009 +0100 * add an HklGeometryList in the HklPseudoAxisEngineList include/hkl/hkl-pseudoaxis.h | 1 + src/hkl-pseudoaxis.c | 3 +++ 2 files changed, 4 insertions(+) commit f19386200eba38ce472f3950cf9993a38421e24a Author: Frédéric-Emmanuel PICCA Date: Wed Mar 18 09:39:06 2009 +0100 * add an HklGeometryList to put in the HklPseudoAxisEngineList this is to share beetween all PseudoAxesEngine the same geometry list. include/hkl/hkl-geometry.h | 27 +++++++++++++++++-- include/hkl/hkl-pseudoaxis.h | 4 +-- src/hkl-geometry.c | 57 +++++++++++++++++++++++++++++++++++++++++ src/hkl-pseudoaxis.c | 51 ++++++++---------------------------- test/bench.c | 4 +-- test/hkl-test-pseudoaxis-e4cv.c | 8 +++--- test/hkl-test-pseudoaxis-e6c.c | 4 +-- test/hkl-test-pseudoaxis-k4cv.c | 8 +++--- test/hkl-test-pseudoaxis-k6c.c | 18 ++++++------- test/hkl-test-pseudoaxis.c | 4 +-- 10 files changed, 117 insertions(+), 68 deletions(-) commit 31d3a73a7640b653117051dc92dd71382455c621 Author: Frédéric-Emmanuel PICCA Date: Tue Mar 17 16:45:53 2009 +0100 * put the holder part in the hkl-geometry.c file include/hkl/hkl-geometry.h | 5 --- src/hkl-geometry.c | 102 +++++++++++++++++++++++++++++++++++++++++++-- src/hkl-holder.c | 93 ----------------------------------------- test/hkl-test-holder.c | 47 --------------------- test/main.c | 1 - 5 files changed, 98 insertions(+), 150 deletions(-) commit 7b4feba042da13a871dd088ae0808342eb7c52ab Author: Frédéric-Emmanuel PICCA Date: Tue Mar 17 16:22:51 2009 +0100 * optimize the computation 4% (speedup :) include/hkl/hkl-axis.h | 5 +++++ src/hkl-axis.c | 19 ++++++++++++++++ src/hkl-geometry.c | 14 +++++------- src/hkl-pseudoaxis-auto.c | 8 ++----- src/hkl-pseudoaxis-common-hkl.c | 4 ++-- src/hkl-pseudoaxis-common-psi.c | 2 +- test/hkl-test-detector.c | 4 ++-- test/hkl-test-geometry.c | 2 +- test/hkl-test-sample.c | 48 ++++++++++++++++------------------------- 9 files changed, 56 insertions(+), 50 deletions(-) commit 7487feee314f12cc79fbfe041329bceb56b924da Author: Frédéric-Emmanuel PICCA Date: Tue Mar 17 13:53:21 2009 +0100 * rename old get_set method -> mode include/hkl/hkl-pseudoaxis.h | 4 ++-- src/hkl-pseudoaxis-common-eulerians.c | 4 ++-- src/hkl-pseudoaxis-e4cv-hkl.c | 12 ++++++------ src/hkl-pseudoaxis-e4cv-psi.c | 4 ++-- src/hkl-pseudoaxis-e6c-hkl.c | 18 +++++++++--------- src/hkl-pseudoaxis-e6c-psi.c | 4 ++-- src/hkl-pseudoaxis-k4cv-hkl.c | 12 ++++++------ src/hkl-pseudoaxis-k4cv-psi.c | 4 ++-- src/hkl-pseudoaxis-k6c-hkl.c | 22 +++++++++++----------- src/hkl-pseudoaxis-k6c-psi.c | 4 ++-- src/hkl-pseudoaxis.c | 4 ++-- test/bench.c | 4 ++-- test/hkl-test-pseudoaxis-e4cv.c | 10 +++++----- test/hkl-test-pseudoaxis-e6c.c | 4 ++-- test/hkl-test-pseudoaxis-k4cv.c | 4 ++-- test/hkl-test-pseudoaxis-k6c.c | 8 ++++---- test/hkl-test-pseudoaxis.c | 2 +- 17 files changed, 62 insertions(+), 62 deletions(-) commit 742c9a92ee7c600446585d026d1ffb462da9015c Author: Frédéric-Emmanuel PICCA Date: Tue Mar 17 11:44:05 2009 +0100 * renames getset -> mode include/hkl/hkl-pseudoaxis.h | 6 ++-- src/hkl-pseudoaxis-common-eulerians.c | 10 +++--- src/hkl-pseudoaxis-common-hkl.c | 6 ++-- src/hkl-pseudoaxis-common-psi.c | 20 ++++++------ src/hkl-pseudoaxis-common.c | 20 ++++++------ src/hkl-pseudoaxis-e4cv-hkl.c | 22 ++++++------- src/hkl-pseudoaxis-e4cv-psi.c | 6 ++-- src/hkl-pseudoaxis-e6c-hkl.c | 34 ++++++++++---------- src/hkl-pseudoaxis-e6c-psi.c | 6 ++-- src/hkl-pseudoaxis-k4cv-hkl.c | 34 ++++++++++---------- src/hkl-pseudoaxis-k4cv-psi.c | 6 ++-- src/hkl-pseudoaxis-k6c-hkl.c | 58 +++++++++++++++++------------------ src/hkl-pseudoaxis-k6c-psi.c | 6 ++-- src/hkl-pseudoaxis.c | 46 +++++++++++++-------------- test/bench.c | 12 ++++---- test/hkl-test-pseudoaxis-e4cv.c | 20 ++++++------ test/hkl-test-pseudoaxis-e6c.c | 6 ++-- test/hkl-test-pseudoaxis-k4cv.c | 8 ++--- test/hkl-test-pseudoaxis-k6c.c | 16 +++++----- test/hkl-test-pseudoaxis.c | 8 ++--- 20 files changed, 175 insertions(+), 175 deletions(-) commit 5b93c9db781295504b37d88a3274501ad3a8b560 Author: Frédéric-Emmanuel PICCA Date: Tue Mar 17 11:42:17 2009 +0100 * rename hkl_pseudo_axis_engine_get_set -> hkl_pseudo_axis_engine_mode include/hkl/hkl-pseudoaxis-common-hkl.h | 6 ++--- include/hkl/hkl-pseudoaxis-common-psi.h | 2 +- include/hkl/hkl-pseudoaxis.h | 6 ++--- src/hkl-pseudoaxis-common-eulerians.c | 10 +++---- src/hkl-pseudoaxis-common-hkl.c | 6 ++--- src/hkl-pseudoaxis-common-psi.c | 16 +++++------ src/hkl-pseudoaxis-e4cv-hkl.c | 28 +++++++++---------- src/hkl-pseudoaxis-e4cv-psi.c | 2 +- src/hkl-pseudoaxis-e6c-hkl.c | 44 +++++++++++++++--------------- src/hkl-pseudoaxis-e6c-psi.c | 2 +- src/hkl-pseudoaxis-k4cv-hkl.c | 22 +++++++-------- src/hkl-pseudoaxis-k4cv-psi.c | 2 +- src/hkl-pseudoaxis-k6c-hkl.c | 48 ++++++++++++++++----------------- src/hkl-pseudoaxis-k6c-psi.c | 2 +- src/hkl-pseudoaxis.c | 12 ++++----- 15 files changed, 104 insertions(+), 104 deletions(-) commit 509b7d069a8f77240fdb19de8af9bf730335c1d0 Author: Frédéric-Emmanuel PICCA Date: Tue Mar 17 11:39:02 2009 +0100 * rename the HklPseudoAxisEngineGetSet ->HklPseudoAxisEngineMode include/hkl/hkl-pseudoaxis-common-psi.h | 8 ++++---- include/hkl/hkl-pseudoaxis.h | 18 +++++++++--------- src/hkl-pseudoaxis-common-eulerians.c | 2 +- src/hkl-pseudoaxis-common-psi.c | 22 +++++++++++----------- src/hkl-pseudoaxis-common.c | 2 +- src/hkl-pseudoaxis-e4cv-hkl.c | 2 +- src/hkl-pseudoaxis-e4cv-psi.c | 4 ++-- src/hkl-pseudoaxis-e6c-hkl.c | 2 +- src/hkl-pseudoaxis-e6c-psi.c | 4 ++-- src/hkl-pseudoaxis-k4cv-hkl.c | 2 +- src/hkl-pseudoaxis-k4cv-psi.c | 4 ++-- src/hkl-pseudoaxis-k6c-hkl.c | 2 +- src/hkl-pseudoaxis-k6c-psi.c | 4 ++-- src/hkl-pseudoaxis.c | 32 ++++++++++++++++---------------- 14 files changed, 54 insertions(+), 54 deletions(-) commit dcaa59f88283f498a3668c477d6ca4c56c044a5a Author: Frédéric-Emmanuel PICCA Date: Tue Mar 17 11:30:36 2009 +0100 * remove the HKLList include/hkl/hkl-list.h | 36 --------- src/hkl-list.c | 138 --------------------------------- test/hkl-test-list.c | 203 ------------------------------------------------- test/main.c | 1 - 4 files changed, 378 deletions(-) commit afd5a5fa948ae447ed6ef097c7682b2980008610 Author: Frédéric-Emmanuel PICCA Date: Tue Mar 17 11:22:12 2009 +0100 * use the HKL_LISt in the Sample part include/hkl/hkl-sample.h | 2 +- src/hkl-sample.c | 160 +++++++++++++++++++++++++---------------------- test/hkl-test-sample.c | 2 +- 3 files changed, 86 insertions(+), 78 deletions(-) commit e8254ce6a3f3955d95efff4703cf12131dc96b88 Author: Frédéric-Emmanuel PICCA Date: Tue Mar 17 10:47:17 2009 +0100 * typo src/hkl-sample.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 44a1d7503fadd8b2222b2f599956a03eb492bfd3 Author: Frédéric-Emmanuel PICCA Date: Tue Mar 17 10:42:26 2009 +0100 * remove an error in the detector test method test/hkl-test-detector.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 5178184fa824078145cc27343b4f4907bf64d742 Author: Frédéric-Emmanuel PICCA Date: Tue Mar 17 10:30:21 2009 +0100 * use the HKL_LIST in the HklSampleList include/hkl/hkl-list.h | 15 +++++++++++++++ include/hkl/hkl-sample.h | 2 +- src/hkl-sample.c | 37 ++++++++++++------------------------- 3 files changed, 28 insertions(+), 26 deletions(-) commit 37bd79de6bb3d30731399ce3412dda9aae0a1f90 Author: Frédéric-Emmanuel PICCA Date: Tue Mar 17 09:59:29 2009 +0100 * use the HKL_LIST in the HklPseudoAxisEngineList include/hkl/hkl-pseudoaxis.h | 3 +-- src/hkl-pseudoaxis.c | 26 +++++++------------------- test/hkl-test-pseudoaxis.c | 2 +- 3 files changed, 9 insertions(+), 22 deletions(-) commit 69838d345b10d1368200312cf6da2ed8943bd4ec Author: Frédéric-Emmanuel PICCA Date: Tue Mar 17 09:52:22 2009 +0100 * use the HKL_LIST for the pseudoAxes list in the HklPseudoAxisEngine. include/hkl/hkl-pseudoaxis.h | 3 +-- src/hkl-pseudoaxis-common-hkl.c | 2 +- src/hkl-pseudoaxis.c | 32 ++++++++++++-------------------- test/hkl-test-pseudoaxis.c | 11 +++++++---- 4 files changed, 21 insertions(+), 27 deletions(-) commit 6b292ce7532a7507de5e4f38b485b150126d1899 Author: Frédéric-Emmanuel PICCA Date: Tue Mar 17 09:39:55 2009 +0100 * use the HKL_LIST for the axes in the HklPseudoAxisEngine include/hkl/hkl-pseudoaxis.h | 3 +-- src/hkl-pseudoaxis-auto.c | 39 ++++++++++++++++++++------------------- src/hkl-pseudoaxis-common-hkl.c | 4 ++-- src/hkl-pseudoaxis-common-psi.c | 4 +++- src/hkl-pseudoaxis.c | 18 +++++++----------- 5 files changed, 33 insertions(+), 35 deletions(-) commit c99ad8b43acf04654acbbe8727a7449a514745d8 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 16 18:24:54 2009 +0100 * more HKl_LIST replacement include/hkl/hkl-list.h | 9 +++++++++ include/hkl/hkl-pseudoaxis.h | 3 +-- src/hkl-pseudoaxis.c | 14 +++----------- test/bench.c | 4 ++-- test/hkl-test-pseudoaxis-e4cv.c | 4 ++-- test/hkl-test-pseudoaxis-e6c.c | 2 +- test/hkl-test-pseudoaxis-k4cv.c | 4 ++-- test/hkl-test-pseudoaxis-k6c.c | 4 ++-- test/hkl-test-pseudoaxis.c | 2 +- 9 files changed, 23 insertions(+), 23 deletions(-) commit 3bdd1c269a72034a42c73b4cfe0fb6ab051f316c Author: Frédéric-Emmanuel PICCA Date: Mon Mar 16 18:06:05 2009 +0100 * use the HKL_LIST macros for the HklPseudoAxisEngineGetSet->axes_names include/hkl/hkl-pseudoaxis.h | 3 +-- src/hkl-pseudoaxis.c | 16 ++++------------ 2 files changed, 5 insertions(+), 14 deletions(-) commit c327909a518d9e34dd4b02dd7ace5fdf8ccea39e Author: Frédéric-Emmanuel PICCA Date: Mon Mar 16 17:11:50 2009 +0100 * use the LIST in the PseudoAxisEngineGetSet include/hkl/hkl-list.h | 15 ++++++++------- include/hkl/hkl-pseudoaxis.h | 3 +-- src/hkl-geometry.c | 2 +- src/hkl-pseudoaxis.c | 15 ++++----------- test/bench.c | 2 +- test/hkl-test-pseudoaxis-e4cv.c | 2 +- test/hkl-test-pseudoaxis-e6c.c | 2 +- test/hkl-test-pseudoaxis-k6c.c | 2 +- test/hkl-test-pseudoaxis.c | 2 +- 9 files changed, 19 insertions(+), 26 deletions(-) commit f9bd4c312f34ab3774c2a9f3f71bd287b92120ab Author: Frédéric-Emmanuel PICCA Date: Mon Mar 16 16:32:50 2009 +0100 * remove the HklAxis list in the Holder. include/hkl/hkl-geometry.h | 1 - src/hkl-geometry.c | 6 ++++-- src/hkl-holder.c | 19 +------------------ test/hkl-test-holder.c | 6 +++--- test/wscript_build | 2 +- 5 files changed, 9 insertions(+), 25 deletions(-) commit 2edc1c932ab133466a433789c0b4022d02fa7f12 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 16 16:06:20 2009 +0100 * add the bench test test/bench.c | 130 +++++++++++++++++++++++++++++++++++++++++++++++++++++ test/wscript_build | 11 +++++ 2 files changed, 141 insertions(+) commit 48244049f3ea725cebddb61888ce8067ce88a77a Author: Frédéric-Emmanuel PICCA Date: Mon Mar 16 14:38:26 2009 +0100 * use a verctor of axis in the geometry instead of *axis. include/hkl/hkl-axis.h | 2 ++ include/hkl/hkl-geometry.h | 2 +- include/hkl/hkl-list.h | 13 +++++----- src/hkl-axis.c | 17 ++++++++----- src/hkl-geometry.c | 60 ++++++++++++++++++++-------------------------- src/hkl-holder.c | 25 +++++++++++++------ src/hkl-pseudoaxis.c | 15 ++++++------ test/hkl-test-geometry.c | 38 +++++++++++++++-------------- test/hkl-test-holder.c | 6 ++--- test/hkl-test-sample.c | 8 +++---- 10 files changed, 100 insertions(+), 86 deletions(-) commit f7427db677e141c24bf03b1bf8b533a78b53bf19 Author: Frédéric-Emmanuel PICCA Date: Fri Mar 13 18:39:13 2009 +0100 * small optimization src/hkl-holder.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 3f7687c7eaca451a2dec8e511f69ef2687e99d74 Author: Frédéric-Emmanuel PICCA Date: Fri Mar 13 18:23:15 2009 +0100 * use list macros in all geometry and add an idx array in the holder include/hkl/hkl-geometry.h | 1 + include/hkl/hkl-list.h | 9 +++++++ src/hkl-geometry.c | 50 +++++++++++++++++------------------ src/hkl-holder.c | 65 +++++++++++++++++++++++++--------------------- 4 files changed, 70 insertions(+), 55 deletions(-) commit b8d509221a2cbc6409b647f9c901b38a7d276e40 Author: Frédéric-Emmanuel PICCA Date: Fri Mar 13 18:22:05 2009 +0100 * use also debug in the test test/wscript_build | 1 + 1 file changed, 1 insertion(+) commit 4c9ccbe2b28bb2abcd7e2ff5e2ced020f18590a0 Author: Frédéric-Emmanuel PICCA Date: Fri Mar 13 17:14:34 2009 +0100 * use the list macros in the geometry include/hkl/hkl-geometry.h | 6 ++---- src/hkl-geometry.c | 8 +++----- src/hkl-holder.c | 16 +++++++--------- 3 files changed, 12 insertions(+), 18 deletions(-) commit 481c4d430ad664e0d0c3b89d8a02585d4e39d127 Author: Frédéric-Emmanuel PICCA Date: Fri Mar 13 17:02:17 2009 +0100 * start working on an HKL_LIST macros include/hkl/hkl-geometry.h | 3 +-- include/hkl/hkl-list.h | 15 +++++++++++++++ src/hkl-geometry.c | 32 +++++++++++++++----------------- 3 files changed, 31 insertions(+), 19 deletions(-) commit 659fa88a581e5d2c6bf07ff019ef50f2169646a9 Author: Frédéric-Emmanuel PICCA Date: Tue Mar 10 10:16:57 2009 +0100 * work done when updating the Diffractometer device. include/hkl/hkl-parameter.h | 8 ++++++-- include/hkl/hkl-sample.h | 10 +++++++++- src/hkl-parameter.c | 15 ++++++++++++--- src/hkl-pseudoaxis-e4cv-hkl.c | 16 +++++++++++++--- src/hkl-pseudoaxis-e6c-hkl.c | 16 +++++++++++++--- src/hkl-pseudoaxis-k4cv-hkl.c | 27 ++++++++++++++++++++------- src/hkl-pseudoaxis-k6c-hkl.c | 41 ++++++++++++++++++++++++++++++++--------- src/hkl-pseudoaxis.c | 21 +++++++++++++++------ src/hkl-sample.c | 26 ++++++++++++++++++++++++-- wscript | 2 +- 10 files changed, 145 insertions(+), 37 deletions(-) commit 83976b781db2e1b91a56db4b46db6f97232d5c58 Author: Frédéric-Emmanuel PICCA Date: Mon Feb 16 15:44:17 2009 +0100 * add the soleil compile options src/wscript_build | 1 + wscript | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) commit 52f9e8bbfba5b75a0e52aa6ff04b3c94e802f52a Author: Frédéric-Emmanuel PICCA Date: Tue Feb 10 17:15:13 2009 +0100 * typo test/hkl-test-sample.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 28e6b8b6db347d09ea5dc904846947113f620f25 Author: Frédéric-Emmanuel PICCA Date: Tue Feb 10 17:15:03 2009 +0100 * add to HklPseudoAxisEngineList an get_pseudo_axis_by_name method. include/hkl/hkl-pseudoaxis.h | 3 +++ src/hkl-pseudoaxis.c | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+) commit 6193374546e2921db6c669c5e900fa0152d77e1f Author: Frédéric-Emmanuel PICCA Date: Tue Feb 10 15:14:25 2009 +0100 * change the HklSampleList append method signature. include/hkl/hkl-sample.h | 3 +-- src/hkl-sample.c | 15 ++++----------- test/hkl-test-sample.c | 31 +++++++++++++++---------------- 3 files changed, 20 insertions(+), 29 deletions(-) commit 9f9d616618874a6b077c30ddbf26065aeb0ceef6 Author: Frédéric-Emmanuel PICCA Date: Mon Feb 9 17:03:16 2009 +0100 * just typo in the HklSample struct src/hkl-sample.c | 53 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 21 deletions(-) commit 1992293424283dc6e611e7c434011513079f6935 Author: Frédéric-Emmanuel PICCA Date: Mon Feb 9 17:02:58 2009 +0100 * add a get_value using the unit to the HklParameter class. include/hkl/hkl-parameter.h | 2 ++ src/hkl-parameter.c | 8 ++++++++ 2 files changed, 10 insertions(+) commit afe988852b5b21cbb02487cbc620b7e6f5d47c11 Author: Frédéric-Emmanuel PICCA Date: Fri Feb 6 15:52:59 2009 +0100 * add the hkl_sample_list_del method to remove a sample include/hkl/hkl-list.h | 3 +++ include/hkl/hkl-sample.h | 2 ++ src/hkl-list.c | 14 +++++++++++++- src/hkl-sample.c | 9 +++++++++ 4 files changed, 27 insertions(+), 1 deletion(-) commit daabe75da94e7939eed7931fa57507c72d2c65a1 Author: Frédéric-Emmanuel PICCA Date: Fri Feb 6 14:47:54 2009 +0100 * now the HklSample::affine method return the size of the simplex. include/hkl/hkl-sample.h | 5 ++++- src/hkl-sample.c | 22 ++++++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) commit f407f99a2effc6fb605a1ea79035ebba4a0f4f1a Author: Frédéric-Emmanuel PICCA Date: Fri Feb 6 13:47:48 2009 +0100 * rename the hkl_sample_list_append_sample -> hkl_sample_list_append include/hkl/hkl-sample.h | 6 +++--- src/hkl-sample.c | 4 ++-- test/hkl-test-sample.c | 20 ++++++++++---------- 3 files changed, 15 insertions(+), 15 deletions(-) commit 820c26a7ada6d0e75764a3df597ab0818dcd41f0 Author: Frédéric-Emmanuel PICCA Date: Wed Feb 4 16:06:09 2009 +0100 * rename the hkl_sample_(get_reflection -> get_ith_reflection) include/hkl/hkl-sample.h | 5 +++-- src/hkl-sample.c | 2 +- test/hkl-test-sample.c | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) commit 7936b1b04e2647f8e73c0a8b8dc087f2a0ab9df9 Author: Frédéric-Emmanuel PICCA Date: Wed Feb 4 15:49:29 2009 +0100 * add the get_ith and len to the HklSampleList include/hkl/hkl-sample.h | 4 ++++ src/hkl-sample.c | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) commit 73404b4ae11d91dac95475aeb83c13e755141ff2 Author: Frédéric-Emmanuel PICCA Date: Wed Feb 4 15:14:42 2009 +0100 * add a method to set U from the eulerian angles include/hkl/hkl-sample.h | 3 +++ src/hkl-sample.c | 12 ++++++++++++ 2 files changed, 15 insertions(+) commit 6fc71956a1c0f1cd25fd016fd70b2bcc24137bd2 Author: Frédéric-Emmanuel PICCA Date: Wed Feb 4 12:22:06 2009 +0100 * add the SampleReflection mesured and theoretical angles. include/hkl/hkl-sample.h | 10 ++++++++-- src/hkl-sample.c | 35 ++++++++++++++++++++++++++++++++ test/hkl-test-sample.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 95 insertions(+), 2 deletions(-) commit a652ecb7ec1b3929953c525672ec4a8379d2c67b Author: Frédéric-Emmanuel PICCA Date: Fri Jan 30 18:03:59 2009 +0100 * add the HklSampleList TODO | 1 + include/hkl/hkl-sample.h | 28 +++++++++++++++ src/hkl-sample.c | 94 +++++++++++++++++++++++++++++++++++++++++++++++- test/hkl-test-sample.c | 60 +++++++++++++++++++++++++++++++ 4 files changed, 182 insertions(+), 1 deletion(-) commit a5e3d24519eb7f0242f9e987d16cf83d0f154db5 Author: Frédéric-Emmanuel PICCA Date: Fri Jan 30 18:02:40 2009 +0100 * remove a memory leak. src/hkl-pseudoaxis.c | 4 ++++ 1 file changed, 4 insertions(+) commit cfe77654ec061f543e298c2c1713b79344f0433d Author: Frédéric-Emmanuel PICCA Date: Fri Jan 30 16:02:06 2009 +0100 * no more enum problem with g++ include/hkl/hkl-geometry-factory.h | 4 ++-- include/hkl/hkl-sample.h | 3 ++- include/hkl/hkl-unit.h | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) commit 882701fe4dff2b930eab5fb52108ecba3b221223 Author: Frédéric-Emmanuel PICCA Date: Mon Jan 26 14:35:38 2009 +0100 * rename the hkl-test-pseudoaxes-xxx files E4CV -> e4cv etc... test/{hkl-test-pseudoaxis-E4CV.c => hkl-test-pseudoaxis-e4cv.c} | 0 test/{hkl-test-pseudoaxis-E6C.c => hkl-test-pseudoaxis-e6c.c} | 0 test/{hkl-test-pseudoaxis-K4CV.c => hkl-test-pseudoaxis-k4cv.c} | 0 test/{hkl-test-pseudoaxis-K6C.c => hkl-test-pseudoaxis-k6c.c} | 0 4 files changed, 0 insertions(+), 0 deletions(-) commit 972575c825f312f58f5cdebe5c6c721adb05a12a Author: Frédéric-Emmanuel PICCA Date: Mon Jan 26 14:18:51 2009 +0100 * add the pseudoAxisEngineList factory and use it in the pseudoaxis tests. also reactive the eulerians pseudoaxis tests. include/hkl/hkl-pseudoaxis-factory.h | 70 ++++++++++++++++++----------------- include/hkl/hkl-pseudoaxis-k4cv.h | 1 - src/hkl-pseudoaxis-common-eulerians.c | 9 +++++ test/hkl-test-pseudoaxis.c | 32 +++++----------- 4 files changed, 56 insertions(+), 56 deletions(-) commit 8c640f6617d778993a4c50bd48a5a0245e0fd6c8 Author: Picca Frédéric-Emmanuel Date: Sat Jan 24 11:04:23 2009 +0100 * clean up the #include src/hkl-pseudoaxis-e4cv-hkl.c | 2 -- src/hkl-pseudoaxis-e4cv-psi.c | 4 ---- src/hkl-pseudoaxis-e6c-hkl.c | 3 --- src/hkl-pseudoaxis-e6c-psi.c | 4 ---- src/hkl-pseudoaxis-k4cv-hkl.c | 2 -- src/hkl-pseudoaxis-k4cv-psi.c | 4 ---- src/hkl-pseudoaxis-k6c-hkl.c | 6 ++---- src/hkl-pseudoaxis-k6c-psi.c | 4 ---- 8 files changed, 2 insertions(+), 27 deletions(-) commit 77242bb2b2805f11751eb467adba6bf031df8ea9 Author: Picca Frédéric-Emmanuel Date: Sat Jan 24 10:44:57 2009 +0100 * no more warning include/hkl/hkl-pseudoaxis-common.h | 15 +++++++++++++++ src/hkl-pseudoaxis-common-hkl.c | 29 +---------------------------- src/hkl-pseudoaxis-common-psi.c | 1 + src/hkl-pseudoaxis-common.c | 29 +++++++++++++++++++++++++++++ src/wscript_build | 2 +- 5 files changed, 47 insertions(+), 29 deletions(-) commit 4e00de6bec3f2834c19d1c1a2d49e23011d850b0 Author: Picca Frédéric-Emmanuel Date: Sat Jan 24 10:18:20 2009 +0100 * remove few more warnings include/hkl/hkl-unit.h | 6 +++--- src/hkl-unit.c | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) commit 171a4145fdacec78ea9642dc7c7700fe2f0b4563 Author: Frédéric-Emmanuel PICCA Date: Fri Jan 23 17:24:45 2009 +0100 * typo and warning clean include/hkl/hkl-pseudoaxis.h | 10 +++++----- src/hkl-axis.c | 1 - src/hkl-geometry.c | 2 -- src/hkl-parameter.c | 2 ++ src/hkl-pseudoaxis-common-eulerians.c | 2 +- src/hkl-pseudoaxis-common-hkl.c | 1 + src/hkl-pseudoaxis-common-psi.c | 4 +--- src/hkl-pseudoaxis-e4cv-hkl.c | 2 +- src/hkl-pseudoaxis-e4cv-psi.c | 1 - src/hkl-pseudoaxis-e6c-hkl.c | 3 ++- src/hkl-pseudoaxis-e6c-psi.c | 1 - src/hkl-pseudoaxis-k4cv-hkl.c | 2 +- src/hkl-pseudoaxis-k4cv-psi.c | 1 - src/hkl-pseudoaxis-k6c-hkl.c | 2 +- src/hkl-pseudoaxis-k6c-psi.c | 1 - src/hkl-pseudoaxis.c | 32 +++++++++++++++++++++++--------- src/wscript_build | 2 +- 17 files changed, 39 insertions(+), 30 deletions(-) commit af9976834c8df28cee39078957d757041ed93984 Author: Frédéric-Emmanuel PICCA Date: Fri Jan 23 16:59:14 2009 +0100 * now all pseudoAxes are usable after construction. src/hkl-pseudoaxis-e4cv-hkl.c | 2 ++ src/hkl-pseudoaxis-e4cv-psi.c | 2 ++ src/hkl-pseudoaxis-e6c-hkl.c | 2 ++ src/hkl-pseudoaxis-e6c-psi.c | 2 ++ src/hkl-pseudoaxis-k4cv-hkl.c | 2 ++ src/hkl-pseudoaxis-k4cv-psi.c | 2 ++ src/hkl-pseudoaxis-k6c-hkl.c | 2 ++ 7 files changed, 14 insertions(+) commit 0641359ca13bff057f330d645319e7a1d34bfaf8 Author: Frédéric-Emmanuel PICCA Date: Fri Jan 23 16:48:48 2009 +0100 * use the HklParameter in the HklAxis include/hkl/hkl-axis.h | 31 ++---------- include/hkl/hkl-parameter.h | 2 + src/hkl-axis.c | 66 ++++++++------------------ src/hkl-geometry.c | 35 ++++++-------- src/hkl-holder.c | 5 +- src/hkl-parameter.c | 7 +++ src/hkl-pseudoaxis-auto.c | 17 +++---- src/hkl-pseudoaxis-common-eulerians.c | 6 +-- src/hkl-pseudoaxis-common-hkl.c | 14 ++---- src/hkl-pseudoaxis-common-psi.c | 7 +-- src/hkl-pseudoaxis.c | 26 +++++++---- test/hkl-test-axis.c | 88 +++++++---------------------------- test/hkl-test-detector.c | 7 +-- test/hkl-test-geometry.c | 15 +++--- test/hkl-test-sample.c | 67 +++++++------------------- 15 files changed, 130 insertions(+), 263 deletions(-) commit 4cdb573258f14fa4cf5a601bd76fb10eec356bd0 Author: Frédéric-Emmanuel PICCA Date: Fri Jan 23 14:46:00 2009 +0100 * add the changed member to HklParameter include/hkl/hkl-parameter.h | 5 +++-- src/hkl-lattice.c | 18 ++++++++++----- src/hkl-parameter.c | 11 ++++++---- src/hkl-pseudoaxis-common-eulerians.c | 6 ++--- src/hkl-pseudoaxis-common-hkl.c | 6 ++--- src/hkl-pseudoaxis-common-psi.c | 2 +- src/hkl-pseudoaxis.c | 2 +- test/hkl-test-parameter.c | 41 ++++++++++++++++++++++++----------- 8 files changed, 58 insertions(+), 33 deletions(-) commit 47a75c86a39efeb641406c688d3fb3b30205f0af Author: Frédéric-Emmanuel PICCA Date: Fri Jan 23 14:27:24 2009 +0100 * factorize the "psi" HklPseudoAxisEngine construction. include/hkl/hkl-pseudoaxis-common-psi.h | 2 ++ src/hkl-pseudoaxis-common-psi.c | 16 ++++++++++++++++ src/hkl-pseudoaxis-e4cv-psi.c | 9 +-------- src/hkl-pseudoaxis-e6c-psi.c | 9 +-------- src/hkl-pseudoaxis-k4cv-psi.c | 9 +-------- src/hkl-pseudoaxis-k6c-psi.c | 9 +-------- 6 files changed, 22 insertions(+), 32 deletions(-) commit e7eb9ef5d2574016a3b151aed00c7706e36798e9 Author: Frédéric-Emmanuel PICCA Date: Fri Jan 23 14:23:25 2009 +0100 * factorize the "hkl" HklPseudoAxisEngine construction include/hkl/hkl-pseudoaxis-common-hkl.h | 2 ++ src/hkl-pseudoaxis-common-hkl.c | 28 ++++++++++++++++++++++++++++ src/hkl-pseudoaxis-e4cv-hkl.c | 21 +-------------------- src/hkl-pseudoaxis-e6c-hkl.c | 21 +-------------------- src/hkl-pseudoaxis-k4cv-hkl.c | 21 +-------------------- src/hkl-pseudoaxis-k6c-hkl.c | 21 +-------------------- 6 files changed, 34 insertions(+), 80 deletions(-) commit 2b7b1fc085f44a69dd93826a673a94c146127def Author: Frédéric-Emmanuel PICCA Date: Fri Jan 23 14:22:35 2009 +0100 * use directly pointers for the PseudoAxes in the HklPseudoAxisEngine. include/hkl/hkl-parameter.h | 8 ++++---- include/hkl/hkl-pseudoaxis.h | 9 +++++++-- src/hkl-parameter.c | 10 +++++---- src/hkl-pseudoaxis-common-eulerians.c | 38 ++++++++++++++++++++++++----------- src/hkl-pseudoaxis-common-hkl.c | 18 +++++++---------- src/hkl-pseudoaxis-common-psi.c | 4 ++-- src/hkl-pseudoaxis-e4cv-hkl.c | 23 ++++++++++++++++----- src/hkl-pseudoaxis-e4cv-psi.c | 11 +++++----- src/hkl-pseudoaxis-e6c-hkl.c | 25 +++++++++++++++++------ src/hkl-pseudoaxis-e6c-psi.c | 11 +++++----- src/hkl-pseudoaxis-k4cv-hkl.c | 23 ++++++++++++++++----- src/hkl-pseudoaxis-k4cv-psi.c | 11 +++++----- src/hkl-pseudoaxis-k6c-hkl.c | 23 ++++++++++++++++----- src/hkl-pseudoaxis-k6c-psi.c | 11 +++++----- src/hkl-pseudoaxis.c | 31 +++++++++++++++++++++++----- test/hkl-test-parameter.c | 32 ++++++++++++++--------------- test/hkl-test-pseudoaxis-E4CV.c | 16 +++++++-------- test/hkl-test-pseudoaxis-E6C.c | 12 +++++------ test/hkl-test-pseudoaxis-K4CV.c | 18 ++++++++--------- test/hkl-test-pseudoaxis-K6C.c | 19 +++++++++--------- test/hkl-test-pseudoaxis.c | 6 +++--- 21 files changed, 227 insertions(+), 132 deletions(-) commit d20a530dcccc739a8ebeb467912c14a25ae4a322 Author: Frédéric-Emmanuel PICCA Date: Fri Jan 23 10:38:55 2009 +0100 * remove a bug in the HklParameter fprintf method the unit and punit can be NULL so we need to take this into account. src/hkl-parameter.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) commit 5608c8c6e0d2b5b442fee2a497192e8447d1708a Author: Frédéric-Emmanuel PICCA Date: Fri Jan 23 10:30:07 2009 +0100 * use HklParameter in the HklPseudoAxis include/hkl/hkl-pseudoaxis.h | 7 +-- src/hkl-pseudoaxis-common-eulerians.c | 23 ++++---- src/hkl-pseudoaxis-common-hkl.c | 27 ++++----- src/hkl-pseudoaxis-common-psi.c | 4 +- src/hkl-pseudoaxis-e4cv-hkl.c | 4 +- src/hkl-pseudoaxis-e4cv-psi.c | 4 +- src/hkl-pseudoaxis-e6c-hkl.c | 4 +- src/hkl-pseudoaxis-e6c-psi.c | 4 +- src/hkl-pseudoaxis-k4cv-hkl.c | 4 +- src/hkl-pseudoaxis-k4cv-psi.c | 4 +- src/hkl-pseudoaxis-k6c-hkl.c | 4 +- src/hkl-pseudoaxis-k6c-psi.c | 4 +- src/hkl-pseudoaxis.c | 21 ++++--- src/hkl-unit.c | 104 ++++++++++++++++++---------------- test/hkl-test-pseudoaxis-E4CV.c | 28 ++++----- test/hkl-test-pseudoaxis-E6C.c | 24 ++++---- test/hkl-test-pseudoaxis-K4CV.c | 30 +++++----- test/hkl-test-pseudoaxis-K6C.c | 18 +++--- test/hkl-test-pseudoaxis.c | 11 ++-- 19 files changed, 166 insertions(+), 163 deletions(-) commit 988dcb204ac34aa77b19b22ded4ae9b85817ff88 Author: Frédéric-Emmanuel PICCA Date: Thu Jan 22 16:37:12 2009 +0100 * print also the range with the right unit src/hkl-parameter.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 4b390fdc3b75ba1832cb98c97fe227bc9700d9f1 Author: Frédéric-Emmanuel PICCA Date: Thu Jan 22 14:19:39 2009 +0100 * first version of the unit system include/hkl/hkl-parameter.h | 12 +++++-- include/hkl/hkl-unit.h | 35 ++++++++++++++++++++ src/hkl-lattice.c | 25 ++++++++++---- src/hkl-parameter.c | 20 ++++++++---- src/hkl-unit.c | 80 +++++++++++++++++++++++++++++++++++++++++++++ test/hkl-test-parameter.c | 45 ++++++++++++++++++------- 6 files changed, 191 insertions(+), 26 deletions(-) commit 9e9522ff4fec38bf7063e36faa45429e06195ddc Author: Frédéric-Emmanuel PICCA Date: Thu Jan 22 11:27:06 2009 +0100 * update the gitignore file .gitignore | 4 ++++ 1 file changed, 4 insertions(+) commit c84bd9aafdd1b0578256fd1816ec69df6d3b8ab5 Author: Frédéric-Emmanuel PICCA Date: Thu Jan 22 11:17:58 2009 +0100 * add the eulerians test method but unactive them for now. test/hkl-test-pseudoaxis-K4CV.c | 1 + test/hkl-test-pseudoaxis-K6C.c | 137 ++++++++++++++++++++++++++++++++++++++++ test/hkl-test-pseudoaxis.c | 4 +- 3 files changed, 141 insertions(+), 1 deletion(-) commit 7d85c97fe5601be288363228b8cb48f404a7d858 Author: Frédéric-Emmanuel PICCA Date: Thu Jan 22 10:49:02 2009 +0100 * add the common eulerians pseudo axes include/hkl/hkl-pseudoaxis-common-eulerians.h | 12 ++++++++++ ...lerians.c => hkl-pseudoaxis-common-eulerians.c} | 27 +++++++++++----------- test/hkl-test-pseudoaxis-K4CV.c | 2 +- 3 files changed, 27 insertions(+), 14 deletions(-) commit 6a5ba8be5f9230125987559ea81158309432239f Author: Frédéric-Emmanuel PICCA Date: Wed Jan 21 15:36:40 2009 +0100 * rename the hkl get set include/hkl/hkl-pseudoaxis-common-hkl.h | 16 ++++++++-------- src/hkl-pseudoaxis-common-hkl.c | 16 ++++++++-------- src/hkl-pseudoaxis-e4cv-hkl.c | 16 ++++++++-------- src/hkl-pseudoaxis-e6c-hkl.c | 24 ++++++++++++------------ src/hkl-pseudoaxis-k4cv-hkl.c | 10 +++++----- src/hkl-pseudoaxis-k6c-hkl.c | 22 +++++++++++----------- 6 files changed, 52 insertions(+), 52 deletions(-) commit 3b49422eb08cdf0a32b96be5c126ef64b694fdb5 Author: Frédéric-Emmanuel PICCA Date: Wed Jan 21 15:27:02 2009 +0100 * add the vertical and horizontal double diffraction. include/hkl/hkl-pseudoaxis-common-hkl.h | 30 ++++++---- src/hkl-pseudoaxis-common-hkl.c | 73 ++++++----------------- src/hkl-pseudoaxis-e4cv-hkl.c | 13 +++- src/hkl-pseudoaxis-e6c-hkl.c | 27 +++++++-- src/hkl-pseudoaxis-k4cv-hkl.c | 13 +++- src/hkl-pseudoaxis-k6c-hkl.c | 101 ++++++++++++++++++++++++++++++-- src/hkl-pseudoaxis.c | 5 +- 7 files changed, 179 insertions(+), 83 deletions(-) commit dc58d486193f1e579672794598e9a8b123d2f52a Author: Frédéric-Emmanuel PICCA Date: Wed Jan 21 13:14:37 2009 +0100 * now the k6c psi pseudoaxes is working even if not initialized. src/hkl-pseudoaxis-k6c-psi.c | 2 ++ 1 file changed, 2 insertions(+) commit a3c2939ba23053134e03ab40b048b9331db7e07c Author: Frédéric-Emmanuel PICCA Date: Wed Jan 21 13:13:52 2009 +0100 * remove a bug in the double_diffraction_func src/hkl-pseudoaxis-common-hkl.c | 1 + 1 file changed, 1 insertion(+) commit 10629f5da40a96622214c77d3ff0c23a2b0f3081 Author: Frédéric-Emmanuel PICCA Date: Wed Jan 21 13:12:51 2009 +0100 add the -g flag to build with the debug symbols src/wscript_build | 1 + 1 file changed, 1 insertion(+) commit 0fa594896944c45efc99b304f4aaf72d076c1f9e Author: Frédéric-Emmanuel PICCA Date: Wed Jan 21 13:12:22 2009 +0100 * remove a bug in the sample_set_lattice method The UB matrix was not updated. src/hkl-sample.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 18db4171124eea3dd61d98b1f74436160a8a598b Author: Frédéric-Emmanuel PICCA Date: Wed Jan 21 13:11:31 2009 +0100 * add a bunch of fprintf methods NEWS | 3 +++ TODO | 7 +++++++ include/hkl/hkl-lattice.h | 2 ++ include/hkl/hkl-sample.h | 2 ++ include/hkl/hkl-source.h | 2 ++ src/hkl-lattice.c | 16 ++++++++++++++++ src/hkl-sample.c | 26 ++++++++++++++++++++------ src/hkl-source.c | 7 +++++++ 8 files changed, 59 insertions(+), 6 deletions(-) commit 2017043c6c42d89e761af551283c6a555817f7bf Author: Frédéric-Emmanuel PICCA Date: Tue Jan 13 15:54:56 2009 +0100 * use the HklPseudoAxisEgnineList in the tests test/hkl-test-pseudoaxis.c | 77 +++++++++++++++++----------------------------- 1 file changed, 28 insertions(+), 49 deletions(-) commit 432290d96a33da1476fe600f967890be3fbb3ab6 Author: Frédéric-Emmanuel PICCA Date: Tue Jan 13 15:54:30 2009 +0100 * add the HklPseudoAxisEngineList include/hkl/hkl-pseudoaxis.h | 30 +++++++++++++++ src/hkl-pseudoaxis.c | 89 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) commit 35a124fcbb06b3fe772920002306c0917b09a58e Author: Frédéric-Emmanuel PICCA Date: Tue Jan 13 14:43:40 2009 +0100 * typo include/hkl/hkl-pseudoaxis.h | 1 + src/hkl-pseudoaxis.c | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) commit a09625afcd6e2e8f6f13c5911802a41081a8b511 Author: Frédéric-Emmanuel PICCA Date: Tue Jan 13 13:19:11 2009 +0100 * update the wscript to let the test run (hugly hack) wscript | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit 932422f06c1e4b998f6d0f964d0810096e92e2fc Author: Frédéric-Emmanuel PICCA Date: Mon Jan 12 16:44:32 2009 +0100 * better gestion of the VERSION number VERSION | 1 - hkl.pc.in | 2 +- src/wscript_build | 2 +- wscript | 5 ++--- 4 files changed, 4 insertions(+), 6 deletions(-) commit c243a721edc390ef13680f687132577e21b4bbb4 Author: Frédéric-Emmanuel PICCA Date: Mon Jan 12 15:40:54 2009 +0100 * add the pkgconfig file hkl.pc.in | 12 ++++++++++++ wscript | 15 +++++++++++++++ 2 files changed, 27 insertions(+) commit 61e437f35363aa0be45a80abeaa33e1d45b3b4ab Author: Frédéric-Emmanuel PICCA Date: Mon Jan 12 15:40:37 2009 +0100 * update the waf script with the 1.5.2 version src/wscript_build | 1 + waf | Bin 76581 -> 75487 bytes 2 files changed, 1 insertion(+) commit 4050f4a2dbde9e999295dba6606d7653aa47988f Author: Picca Frédéric-Emmanuel Date: Sun Jan 11 23:49:21 2009 +0100 * first waf build version CMakeLists.txt | 7 --- SConstruct | 147 -------------------------------------------------- src/CMakeLists.txt | 5 -- src/README-compil.txt | 6 --- src/SConscript | 40 -------------- src/wscript_build | 8 +++ test/CMakeLists.txt | 6 --- test/SConscript | 46 ---------------- test/wscript_build | 11 ++++ waf | Bin 0 -> 76581 bytes wscript | 32 +++++++++++ 11 files changed, 51 insertions(+), 257 deletions(-) commit 7982ac2b32c3fee16655ec82fb111174fb4bdf47 Author: Picca Frédéric-Emmanuel Date: Sun Jan 11 12:51:09 2009 +0100 * rename hkl-pseudoaxis-common -> hkl-pseudoaxis-common-hkl .../hkl/{hkl-pseudoaxis-common.h => hkl-pseudoaxis-common-hkl.h} | 0 src/{hkl-pseudoaxis-common.c => hkl-pseudoaxis-common-hkl.c} | 2 +- src/hkl-pseudoaxis-e4cv-hkl.c | 2 +- src/hkl-pseudoaxis-e6c-hkl.c | 2 +- src/hkl-pseudoaxis-k4cv-eulerians.c | 6 +++--- src/hkl-pseudoaxis-k4cv-hkl.c | 2 +- src/hkl-pseudoaxis-k6c-hkl.c | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) commit 94743046909a70c00e6ce7fc8746c3e5624871cf Author: Picca Frédéric-Emmanuel Date: Sun Jan 11 12:39:10 2009 +0100 * refactor a part of the double_diffraction include/hkl/hkl-pseudoaxis-common.h | 26 +++--- src/hkl-pseudoaxis-common.c | 160 +++++++++++++++++++++++------------- src/hkl-pseudoaxis-e4cv-hkl.c | 13 +-- src/hkl-pseudoaxis-e6c-hkl.c | 15 +--- src/hkl-pseudoaxis-k4cv-hkl.c | 13 +-- src/hkl-pseudoaxis-k6c-hkl.c | 13 +-- 6 files changed, 126 insertions(+), 114 deletions(-) commit 1da570b3127a08ec9a7c714ba25bb024fe4b14a0 Author: Picca Frédéric-Emmanuel Date: Sun Jan 11 12:06:29 2009 +0100 * add the double diffraction mode to all geoemtries VERSION | 2 +- include/hkl/hkl-pseudoaxis-common.h | 22 +++++++++++-- include/hkl/hkl-vector.h | 2 ++ src/hkl-pseudoaxis-common.c | 63 +++++++++++++++++++++++++++++++++++++ src/hkl-pseudoaxis-e4cv-hkl.c | 14 +++++++++ src/hkl-pseudoaxis-e6c-hkl.c | 14 +++++++++ src/hkl-pseudoaxis-k4cv-hkl.c | 14 +++++++++ src/hkl-pseudoaxis-k6c-hkl.c | 14 +++++++++ src/hkl-vector.c | 7 +++++ 9 files changed, 149 insertions(+), 3 deletions(-) commit 0f541101e104da19c1771c91a8933074d2522dc9 Author: Picca Frédéric-Emmanuel Date: Sat Jan 10 10:59:28 2009 +0100 * reduce the number of headers for the pseudoAxisengines include/hkl/hkl-pseudoaxis-e4cv-hkl.h | 12 ------------ include/hkl/hkl-pseudoaxis-e4cv-psi.h | 12 ------------ include/hkl/hkl-pseudoaxis-e4cv.h | 13 +++++++++++++ include/hkl/hkl-pseudoaxis-e6c-hkl.h | 12 ------------ include/hkl/hkl-pseudoaxis-e6c-psi.h | 12 ------------ include/hkl/hkl-pseudoaxis-e6c.h | 13 +++++++++++++ include/hkl/hkl-pseudoaxis-k4cv-eulerians.h | 12 ------------ include/hkl/hkl-pseudoaxis-k4cv-hkl.h | 12 ------------ include/hkl/hkl-pseudoaxis-k4cv-psi.h | 12 ------------ include/hkl/hkl-pseudoaxis-k4cv.h | 14 ++++++++++++++ include/hkl/hkl-pseudoaxis-k6c-hkl.h | 12 ------------ include/hkl/hkl-pseudoaxis-k6c-psi.h | 12 ------------ include/hkl/hkl-pseudoaxis-k6c.h | 13 +++++++++++++ src/hkl-pseudoaxis-e4cv-hkl.c | 2 +- src/hkl-pseudoaxis-e4cv-psi.c | 2 +- src/hkl-pseudoaxis-e6c-hkl.c | 2 +- src/hkl-pseudoaxis-e6c-psi.c | 2 +- src/hkl-pseudoaxis-k4cv-eulerians.c | 2 +- src/hkl-pseudoaxis-k4cv-hkl.c | 2 +- src/hkl-pseudoaxis-k4cv-psi.c | 2 +- src/hkl-pseudoaxis-k6c-hkl.c | 2 +- src/hkl-pseudoaxis-k6c-psi.c | 2 +- test/hkl-test-pseudoaxis-E4CV.c | 3 +-- test/hkl-test-pseudoaxis-E6C.c | 2 +- test/hkl-test-pseudoaxis-K4CV.c | 3 +-- test/hkl-test-pseudoaxis-K6C.c | 2 +- test/hkl-test-pseudoaxis.c | 13 ++++--------- 27 files changed, 70 insertions(+), 132 deletions(-) commit 4b55504dd4b564bdf1392eb430d8d9d972010379 Author: Picca Frédéric-Emmanuel Date: Fri Jan 9 21:29:31 2009 +0100 * function name consistency in the pseudo axes part include/hkl/hkl-pseudoaxis-auto.h | 4 +- include/hkl/hkl-pseudoaxis-e6c-hkl.h | 2 +- include/hkl/hkl-pseudoaxis-k4cv-hkl.h | 2 +- include/hkl/hkl-pseudoaxis-k6c-hkl.h | 2 +- src/hkl-pseudoaxis-auto.c | 6 +-- src/hkl-pseudoaxis-common-psi.c | 6 +-- src/hkl-pseudoaxis-common.c | 6 +-- src/hkl-pseudoaxis-e4cv-hkl.c | 8 ++-- src/hkl-pseudoaxis-e4cv-psi.c | 4 +- src/hkl-pseudoaxis-e6c-hkl.c | 31 +++++++------- src/hkl-pseudoaxis-e6c-psi.c | 4 +- src/hkl-pseudoaxis-k4cv-eulerians.c | 16 ++++---- src/hkl-pseudoaxis-k4cv-hkl.c | 66 ++++++++++-------------------- src/hkl-pseudoaxis-k4cv-psi.c | 4 +- src/hkl-pseudoaxis-k6c-hkl.c | 76 +++++++++++++++++------------------ src/hkl-pseudoaxis-k6c-psi.c | 4 +- src/hkl-pseudoaxis.c | 40 +++++++++--------- test/hkl-test-pseudoaxis-E4CV.c | 68 +++++++++++++++---------------- test/hkl-test-pseudoaxis-E6C.c | 34 ++++++++-------- test/hkl-test-pseudoaxis-K4CV.c | 28 ++++++------- test/hkl-test-pseudoaxis-K6C.c | 18 ++++----- test/hkl-test-pseudoaxis.c | 36 ++++++++--------- 22 files changed, 222 insertions(+), 243 deletions(-) commit a169da5f6c5bd130803af7e83d12b43a86b7c2ec Author: Picca Frédéric-Emmanuel Date: Mon Jan 5 09:35:10 2009 +0100 * update the CMakeList.txt file CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) commit 5250d22489a21d5f99d6ff674676b523cdd544e0 Author: Picca Frédéric-Emmanuel Date: Fri Dec 5 14:48:42 2008 +0100 * remove a bug in the psi pseudo axis method. src/hkl-pseudoaxis-common-psi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 4bef14134f62fe1e0280c6d88b440d3294e52c9d Author: Picca Frédéric-Emmanuel Date: Fri Dec 5 13:00:01 2008 +0100 * add a kphi and phi constant mode. src/hkl-pseudoaxis-k6c-hkl.c | 179 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) commit b0be5acd46bef5e682daca66b824e6b3b201419f Author: Picca Frédéric-Emmanuel Date: Wed Dec 3 14:08:32 2008 +0100 * only add a solution to the pseudoAxes geometries if it is different. src/hkl-pseudoaxis.c | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) commit 090fa9651fafe17630ff57045328e5e41e582c24 Author: Picca Frédéric-Emmanuel Date: Wed Dec 3 13:46:29 2008 +0100 * use and update the set_values_v geometry method. src/hkl-geometry.c | 6 ++++-- test/hkl-test-pseudoaxis-E4CV.c | 29 +++++++++-------------------- test/hkl-test-pseudoaxis-E6C.c | 33 ++++++++------------------------- test/hkl-test-pseudoaxis-K4CV.c | 25 +++++++------------------ test/hkl-test-pseudoaxis-K6C.c | 10 ++++++++++ 5 files changed, 38 insertions(+), 65 deletions(-) commit 580d38baf59f0a2bb0c5a1d09fb0e28e4d583932 Author: Picca Frédéric-Emmanuel Date: Tue Dec 2 13:55:02 2008 +0100 * the set_values_v and distance method to the geometry. include/hkl/hkl-geometry.h | 6 +++- src/hkl-geometry.c | 38 ++++++++++++++++++++++++- test/hkl-test-geometry.c | 71 ++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 101 insertions(+), 14 deletions(-) commit 053359a203feaedf3bc85b2265f54158611c1d97 Author: Picca Frédéric-Emmanuel Date: Tue Dec 2 10:56:20 2008 +0100 * indent the geometry part include/hkl/hkl-geometry.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit e5651705af8f98436dbf7990bb7378fa5b21e843 Author: Picca Frédéric-Emmanuel Date: Tue Dec 2 10:54:59 2008 +0100 * ensure all sample operations. include/hkl/hkl-sample.h | 6 ++- src/hkl-sample.c | 106 ++++++++++++++++++++++++++++++++--------------- 2 files changed, 77 insertions(+), 35 deletions(-) commit 5fc495bf546eba65f1fe1b248386459ff5c7f201 Author: Frédéric-Emmanuel PICCA Date: Fri Jan 9 17:40:57 2009 +0100 * work in progress include/hkl/hkl-pseudoaxis-auto.h | 4 +-- include/hkl/hkl-pseudoaxis-e4cv-hkl.h | 2 +- include/hkl/hkl-pseudoaxis-e6c-hkl.h | 2 +- include/hkl/hkl-pseudoaxis-factory.h | 6 ++--- include/hkl/hkl-pseudoaxis.h | 48 +++++++++++++++++------------------ src/hkl-pseudoaxis-e4cv-hkl.c | 12 ++++----- 6 files changed, 37 insertions(+), 37 deletions(-) commit 0f5cb6efc3fa97635a6078604902dcfe51e4e01a Author: Frédéric-Emmanuel PICCA Date: Fri Nov 28 17:47:26 2008 +0100 * first version of the eulerians pseudo axes. include/hkl/hkl-pseudoaxis-k4cv-eulerians.h | 12 +++ src/hkl-pseudoaxis-k4cv-eulerians.c | 120 ++++++++++++++++++++++++++++ test/hkl-test-pseudoaxis-K4CV.c | 61 +++++++++++++- test/hkl-test-pseudoaxis.c | 8 ++ 4 files changed, 200 insertions(+), 1 deletion(-) commit dc67f5082dd51be73f17a1d91edecbe6efe1116d Author: Frédéric-Emmanuel PICCA Date: Wed Nov 26 15:10:33 2008 +0100 * remove non necessary method in the k4cv hkl pseudo axis. include/hkl/hkl-pseudoaxis-k4cv-hkl.h | 1 - 1 file changed, 1 deletion(-) commit 0c3a5f5aa293da1aa06784de33394a99e419f4c6 Author: Frédéric-Emmanuel PICCA Date: Wed Nov 26 14:28:23 2008 +0100 * update the psi pseudo axis engine test test/hkl-test-pseudoaxis-E4CV.c | 43 ++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 20 deletions(-) commit ea1a653ae3d860b8304afd10bb4fb29775c10d0b Author: Frédéric-Emmanuel PICCA Date: Wed Nov 26 11:08:47 2008 +0100 * refactor the psi pseudo axes engine. include/hkl/hkl-pseudoaxis-common-psi.h | 17 ++------- src/hkl-pseudoaxis-common-psi.c | 65 +++++++++++++++++++++++++++------ src/hkl-pseudoaxis-e4cv-psi.c | 42 +-------------------- src/hkl-pseudoaxis-e6c-psi.c | 42 +-------------------- src/hkl-pseudoaxis-k4cv-psi.c | 42 +-------------------- src/hkl-pseudoaxis-k6c-psi.c | 42 +-------------------- 6 files changed, 64 insertions(+), 186 deletions(-) commit 3ae4d7033610db98f3807116ec23e69e69aa217b Author: Frédéric-Emmanuel PICCA Date: Tue Nov 25 17:07:23 2008 +0100 * rename the "psi e4cv" -> "psi vertical" pseudo axis engine src/hkl-pseudoaxis-e6c-psi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit ffc9a49669e0435f9df6a7889aad8d7f4230005c Author: Frédéric-Emmanuel PICCA Date: Tue Nov 25 17:01:37 2008 +0100 * add to k6c the "psi vertical" pseudo axis engine include/hkl/hkl-pseudoaxis-k6c-psi.h | 12 +++++++ src/hkl-pseudoaxis-k6c-psi.c | 66 ++++++++++++++++++++++++++++++++++++ test/hkl-test-pseudoaxis.c | 8 +++++ 3 files changed, 86 insertions(+) commit 9e9d69b2b4dce5504f7ef9f355836e840d8f6bab Author: Frédéric-Emmanuel PICCA Date: Tue Nov 25 16:52:49 2008 +0100 * add to e6c the "psi e4cv" pseudo axis engine include/hkl/hkl-pseudoaxis-e6c-psi.h | 12 +++++++ src/SConscript | 1 + src/hkl-pseudoaxis-e6c-psi.c | 66 ++++++++++++++++++++++++++++++++++++ test/hkl-test-pseudoaxis.c | 10 +++++- 4 files changed, 88 insertions(+), 1 deletion(-) commit ab3b1fd02340070d945442bd9b175c0f9185ec0e Author: Frédéric-Emmanuel PICCA Date: Tue Nov 25 16:37:14 2008 +0100 * now add the K4C psi pseudo axis engine include/hkl/hkl-pseudoaxis-common-psi.h | 38 ++++++ include/hkl/hkl-pseudoaxis-k4cv-psi.h | 12 ++ src/SConscript | 2 + src/hkl-pseudoaxis-common-psi.c | 201 +++++++++++++++++++++++++++++ src/hkl-pseudoaxis-e4cv-psi.c | 216 +------------------------------- src/hkl-pseudoaxis-k4cv-psi.c | 66 ++++++++++ test/hkl-test-pseudoaxis.c | 10 +- 7 files changed, 334 insertions(+), 211 deletions(-) commit e623473a01cdfd0e98b13cf3e3ecf02429d7ccd8 Author: Frédéric-Emmanuel PICCA Date: Tue Nov 25 15:57:21 2008 +0100 * refactor the file names. include/hkl/hkl-pseudoaxis-E4CV.h | 13 --- include/hkl/hkl-pseudoaxis-e4cv-hkl.h | 12 +++ include/hkl/hkl-pseudoaxis-e4cv-psi.h | 12 +++ ...l-pseudoaxis-E6C.h => hkl-pseudoaxis-e6c-hkl.h} | 6 +- ...pseudoaxis-K4CV.h => hkl-pseudoaxis-k4cv-hkl.h} | 6 +- ...l-pseudoaxis-K6C.h => hkl-pseudoaxis-k6c-hkl.h} | 6 +- src/SConscript | 9 +- src/hkl-pseudoaxis-e4cv-hkl.c | 94 +++++++++++++++++++++ ...pseudoaxis-E4CV.c => hkl-pseudoaxis-e4cv-psi.c} | 97 +--------------------- ...l-pseudoaxis-E6C.c => hkl-pseudoaxis-e6c-hkl.c} | 2 +- ...pseudoaxis-K4CV.c => hkl-pseudoaxis-k4cv-hkl.c} | 2 +- ...l-pseudoaxis-K6C.c => hkl-pseudoaxis-k6c-hkl.c} | 2 +- test/hkl-test-pseudoaxis-E4CV.c | 7 +- test/hkl-test-pseudoaxis-E6C.c | 2 +- test/hkl-test-pseudoaxis-K4CV.c | 2 +- test/hkl-test-pseudoaxis-K6C.c | 2 +- test/hkl-test-pseudoaxis.c | 11 +-- 17 files changed, 150 insertions(+), 135 deletions(-) commit 89c7a9f58fa2e1930bee9dc37da1bc0a27a8f165 Author: Frédéric-Emmanuel PICCA Date: Tue Nov 25 13:44:21 2008 +0100 * typo src/hkl-pseudoaxis-E4CV.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 95a8a33ee43195a700adc23df91b9d61077fade3 Author: Frédéric-Emmanuel PICCA Date: Mon Nov 24 17:08:38 2008 +0100 * now psi seems to work correctly src/hkl-pseudoaxis-E4CV.c | 111 +++++++++++++++++++++++++--------------------- 1 file changed, 60 insertions(+), 51 deletions(-) commit 76279d34ee16edbdd9c2cc33809caa9e3a759e26 Author: Frédéric-Emmanuel PICCA Date: Mon Nov 24 16:15:48 2008 +0100 * better psi initialization and getter src/hkl-pseudoaxis-E4CV.c | 59 +++++++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 25 deletions(-) commit ca174ba55becfc8e1da160a3f17da1ceae67037f Author: Picca Frédéric-Emmanuel Date: Sat Nov 22 22:18:07 2008 +0100 * set the random test for the psi pseudoaxe src/hkl-pseudoaxis-E4CV.c | 11 +++++++++++ test/hkl-test-pseudoaxis.c | 20 +++++++++++++++----- test/main.c | 2 +- 3 files changed, 27 insertions(+), 6 deletions(-) commit 81b2dac096a76f27a999db1b935fa03f6958a7b3 Author: Picca Frédéric-Emmanuel Date: Sat Nov 22 17:56:21 2008 +0100 * first version of psi for e4c include/hkl/hkl-pseudoaxis-E4CV.h | 1 + include/hkl/hkl-pseudoaxis.h | 17 ++- src/hkl-pseudoaxis-E4CV.c | 254 ++++++++++++++++++++++++++++++++++++-- src/hkl-pseudoaxis-common.c | 28 +++++ src/hkl-pseudoaxis.c | 71 ++++++++++- test/hkl-test-pseudoaxis-E4CV.c | 144 ++++++++++++++++++++- test/main.c | 2 +- 7 files changed, 495 insertions(+), 22 deletions(-) commit c9923fb4aa08dcffe176aefa15562cc362c2ef72 Author: Picca Frédéric-Emmanuel Date: Sat Nov 22 17:07:00 2008 +0100 * add the vector oriented_angle method TODO | 1 + include/hkl/hkl-vector.h | 4 ++++ src/hkl-vector.c | 19 +++++++++++++++++++ test/hkl-test-vector.c | 25 +++++++++++++++++++++++++ 4 files changed, 49 insertions(+) commit 3f6a8af31129497083122584edce11e13aa168d0 Author: Picca Frédéric-Emmanuel Date: Sat Nov 22 16:04:41 2008 +0100 * add the vector project_on_plan method include/hkl/hkl-vector.h | 3 +++ src/hkl-vector.c | 11 +++++++++++ test/hkl-test-vector.c | 15 +++++++++++++++ 3 files changed, 29 insertions(+) commit ff394f5cd27e87836a2b4e7d27d4e4b11693165b Author: Picca Frédéric-Emmanuel Date: Sat Nov 22 15:32:16 2008 +0100 * update the TODO list TODO | 5 +++++ 1 file changed, 5 insertions(+) commit 5c668bb12ad5e5743d9751b2c6f8b1d0a4decb0a Author: Picca Frédéric-Emmanuel Date: Sat Nov 22 15:31:35 2008 +0100 * update the vector angle test test/hkl-test-vector.c | 8 ++++++++ 1 file changed, 8 insertions(+) commit 2933142c18370fcd45d6e8416725a904b75648b4 Author: Frédéric-Emmanuel PICCA Date: Tue Nov 4 11:49:42 2008 +0100 * update the TODO liste TODO | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) commit c7774f9e8507707f528de8ef21cbdfc5fa607da6 Author: Frédéric-Emmanuel PICCA Date: Tue Nov 4 11:49:32 2008 +0100 * add the init infracstructure for the pseudoAxes engines. include/hkl/hkl-pseudoaxis.h | 10 ++++++++++ src/hkl-pseudoaxis-E4CV.c | 4 ++++ src/hkl-pseudoaxis-E6C.c | 6 ++++++ src/hkl-pseudoaxis-K4CV.c | 4 ++++ src/hkl-pseudoaxis-K6C.c | 6 ++++++ src/hkl-pseudoaxis.c | 29 +++++++++++++++++++++++++++-- 6 files changed, 57 insertions(+), 2 deletions(-) commit 41de52319b0f0e2ed59069225778a0b8b4b4ac71 Author: Frédéric-Emmanuel PICCA Date: Tue Nov 4 11:02:40 2008 +0100 * update the TODO liste TODO | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit c42474726338390342a17373e95bb31e9a4595d5 Author: Frédéric-Emmanuel PICCA Date: Tue Nov 4 09:40:44 2008 +0100 * remove the fprintf from the degenerated tests. test/hkl-test-pseudoaxis-E4CV.c | 2 +- test/hkl-test-pseudoaxis-K6C.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) commit 3249774a4b8da0a693454a35688d20ba9ad9fead Author: Frédéric-Emmanuel PICCA Date: Tue Nov 4 09:38:25 2008 +0100 * add a degenerated case for the E6CV pseudoAxes. test/hkl-test-pseudoaxis-E6C.c | 59 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) commit 1a600718805e7e8805179a93b9f18f7d3c60ac02 Author: Frédéric-Emmanuel PICCA Date: Tue Nov 4 09:28:12 2008 +0100 * add a degenerated case for the E4CV geometry. test/hkl-test-pseudoaxis-E4CV.c | 59 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) commit 82a46e0502cd3df01fc35f93518b6af157ac8217 Author: Frédéric-Emmanuel PICCA Date: Mon Nov 3 18:36:49 2008 +0100 * now degenerated axes are not used during the permutations. src/hkl-pseudoaxis-auto.c | 48 +++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 16 deletions(-) commit 71f9c9ef8e0b262a64b6bbfc8c37ba3c9727eb2a Author: Picca Frédéric-Emmanuel Date: Sat Oct 25 16:01:23 2008 +0200 * the vector part include/hkl/hkl-vector.h | 58 ++++++++++++------- src/hkl-vector.c | 147 ++++++++++++++++++++++++----------------------- 2 files changed, 112 insertions(+), 93 deletions(-) commit e6c89b340c7b4b9d4c99c29d54c8b8847efcc47b Author: Picca Frédéric-Emmanuel Date: Sat Oct 25 15:38:27 2008 +0200 * the source part was reindent include/hkl/hkl-source.h | 2 +- src/hkl-source.c | 16 +++++----------- 2 files changed, 6 insertions(+), 12 deletions(-) commit f604d42204b03cac6403892f0539c63aa85255e9 Author: Frédéric-Emmanuel PICCA Date: Fri Oct 24 18:26:53 2008 +0200 * the sample part include/hkl/hkl-sample.h | 23 +++++------ src/hkl-sample.c | 101 +++++++++++++++++++++++------------------------ 2 files changed, 62 insertions(+), 62 deletions(-) commit 83f7801416989188ea3f5dc18eeef4ac6b5da85d Author: Frédéric-Emmanuel PICCA Date: Fri Oct 24 18:17:55 2008 +0200 * now the quaternion part include/hkl/hkl-quaternion.h | 45 ++++++++++++------------ src/hkl-quaternion.c | 81 ++++++++++++++++++++++---------------------- 2 files changed, 65 insertions(+), 61 deletions(-) commit 4bb227fea5784d8e8fef77425beaaa057664e2ba Author: Frédéric-Emmanuel PICCA Date: Fri Oct 24 18:14:27 2008 +0200 * now the pseudoAxes and add an Init method include/hkl/hkl-pseudoaxis.h | 45 ++++++++++++++++++++++++++++---------------- src/hkl-pseudoaxis.c | 12 ++++++------ 2 files changed, 35 insertions(+), 22 deletions(-) commit fa40963ce2ad341dfe3fbc422eb59f631009434f Author: Frédéric-Emmanuel PICCA Date: Fri Oct 24 18:04:30 2008 +0200 * all remaining pseudoaxes classes. src/hkl-pseudoaxis-E4CV.c | 47 +++++++++++------------ src/hkl-pseudoaxis-K6C.c | 95 +++++++++++++++++++++++++---------------------- 2 files changed, 74 insertions(+), 68 deletions(-) commit e6b2f939adbd06276f860aba94020756246769a2 Author: Frédéric-Emmanuel PICCA Date: Fri Oct 24 18:02:36 2008 +0200 * now the K4C part src/hkl-pseudoaxis-K4CV.c | 106 ++++++++++++++++++++++++---------------------- 1 file changed, 55 insertions(+), 51 deletions(-) commit da19220525f23e72552a9baf0538f14a6336d411 Author: Frédéric-Emmanuel PICCA Date: Fri Oct 24 18:00:21 2008 +0200 * update the E6C pseudoAxes part. src/hkl-pseudoaxis-E6C.c | 72 ++++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 36 deletions(-) commit acb77019e986ef29bce3d909f01b236c95b4cd1e Author: Frédéric-Emmanuel PICCA Date: Fri Oct 24 17:58:08 2008 +0200 * now the common part include/hkl/hkl-pseudoaxis-common.h | 10 ++++++---- src/hkl-pseudoaxis-common.c | 21 +++++++++++---------- 2 files changed, 17 insertions(+), 14 deletions(-) commit e2d69bce0993e22edb7f854154b0f9667deb7f0d Author: Frédéric-Emmanuel PICCA Date: Fri Oct 24 17:55:47 2008 +0200 * update the pseudoAxis auto part. include/hkl/hkl-pseudoaxis-auto.h | 2 +- src/hkl-pseudoaxis-auto.c | 62 +++++++++++++++++++-------------------- 2 files changed, 32 insertions(+), 32 deletions(-) commit ab5be360f38bb68757b2e6a1a98abb3fa44e96ca Author: Frédéric-Emmanuel PICCA Date: Fri Oct 24 17:52:56 2008 +0200 * update HklParameter class. include/hkl/hkl-parameter.h | 13 ++++++----- src/hkl-parameter.c | 54 +++++++++++++++++++++++---------------------- 2 files changed, 35 insertions(+), 32 deletions(-) commit 4507c791459bc95901ebeb5cd7fce6fd13f310f1 Author: Frédéric-Emmanuel PICCA Date: Fri Oct 24 17:47:24 2008 +0200 * update the HklMatrix class include/hkl/hkl-matrix.h | 38 ++++++++++++------------- src/hkl-matrix.c | 74 ++++++++++++++++++++++++------------------------ 2 files changed, 56 insertions(+), 56 deletions(-) commit d572e585c6920fde5da31f2fc5d915b2e7b4c092 Author: Frédéric-Emmanuel PICCA Date: Fri Oct 24 17:36:55 2008 +0200 * update the list class include/hkl/hkl-list.h | 18 +++++----- src/hkl-list.c | 96 +++++++++++++++++++++++++------------------------- test/hkl-test-list.c | 20 +++++------ 3 files changed, 67 insertions(+), 67 deletions(-) commit c5c4ef2ae2348a9887af6ea6651d784c8fb1a958 Author: Frédéric-Emmanuel PICCA Date: Fri Oct 24 17:24:15 2008 +0200 * update the lattice class include/hkl/hkl-lattice.h | 17 +-- src/hkl-lattice.c | 313 +++++++++++++++++++++++----------------------- 2 files changed, 168 insertions(+), 162 deletions(-) commit ee47835c8ba94ddab171e5e60f870510ec6c5f5a Author: Frédéric-Emmanuel PICCA Date: Fri Oct 24 17:13:55 2008 +0200 * indentation src/hkl-axis.c | 4 ++-- src/hkl-detector.c | 2 +- src/hkl-geometry.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) commit de802720ed6cbb3a5ea3f5465b780b02a4017090 Author: Frédéric-Emmanuel PICCA Date: Fri Oct 24 17:13:43 2008 +0200 * update the interval class include/hkl/hkl-interval.h | 30 +-- src/hkl-interval.c | 547 ++++++++++++++++++++++----------------------- 2 files changed, 288 insertions(+), 289 deletions(-) commit 6bbd6810c790c40559252cf94979059e971ce220 Author: Frédéric-Emmanuel PICCA Date: Fri Oct 24 16:29:47 2008 +0200 * just typo and indentation src/hkl-axis.c | 1 - src/hkl-pseudoaxis.c | 39 ++++++++++++++++++++------------------- test/hkl-test-pseudoaxis-K6C.c | 2 +- 3 files changed, 21 insertions(+), 21 deletions(-) commit 4d9fcb2f23b4aaed651596b19790ac082c617f50 Author: Frédéric-Emmanuel PICCA Date: Thu Oct 23 18:28:42 2008 +0200 * separate test printout for each geometry. test/hkl-test-pseudoaxis.c | 1 + 1 file changed, 1 insertion(+) commit a2932b156ffbcad4bc55a4a1fcf4e59488901341 Author: Frédéric-Emmanuel PICCA Date: Thu Oct 23 18:27:51 2008 +0200 * add all the default range for the hkl pseudoAxes. src/hkl-pseudoaxis-E4CV.c | 7 +++++++ src/hkl-pseudoaxis-E6C.c | 7 +++++++ src/hkl-pseudoaxis-K4CV.c | 7 +++++++ 3 files changed, 21 insertions(+) commit 59f65ba2a7ff730cb7b9d931bb7aa2576010ca88 Author: Frédéric-Emmanuel PICCA Date: Thu Oct 23 17:44:39 2008 +0200 * do the random tests on only 100 iterations. test/hkl-test-pseudoaxis.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 228bbaf89de83530b81b16d026498c1139cd9c58 Author: Frédéric-Emmanuel PICCA Date: Thu Oct 23 16:59:08 2008 +0200 * put a default range for the K6C_HKL pseudo axis. src/hkl-pseudoaxis-K6C.c | 7 +++++++ 1 file changed, 7 insertions(+) commit 3723a3fcf3a321708080daeb5680e4ba0cd22bd9 Author: Frédéric-Emmanuel PICCA Date: Thu Oct 23 16:49:23 2008 +0200 * add the hkl_pseudo_axis_init and hkl_pseudo_axis_fprintf method use the fprintf method in the hkl_pseudoAxisEngine_fprintf include/hkl/hkl-pseudoaxis.h | 11 ++++++++++- src/hkl-pseudoaxis.c | 38 +++++++++++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 8 deletions(-) commit b7ea0130392db7796d07be4e16c25e9c4dbfdf19 Author: Frédéric-Emmanuel PICCA Date: Thu Oct 23 16:45:14 2008 +0200 * add the hkl_parameter_fprintf method include/hkl/hkl-parameter.h | 3 +++ src/hkl-parameter.c | 9 +++++++++ 2 files changed, 12 insertions(+) commit c733540c9f817cd8e73ab38c299c151a367ac278 Author: Frédéric-Emmanuel PICCA Date: Thu Oct 23 16:44:39 2008 +0200 * add the hkl_axis_config_fprintf method include/hkl/hkl-axis.h | 6 ++++-- src/hkl-axis.c | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) commit 58da4becd54354dbe0832a181fbc647931a336e8 Author: Frédéric-Emmanuel PICCA Date: Wed Oct 22 15:02:43 2008 +0200 * use the parameter randomize method in the pseudoAxis tests. test/hkl-test-pseudoaxis.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f5d545b44444757df2fdbb4b7daf4e7a8bb43066 Author: Frédéric-Emmanuel PICCA Date: Wed Oct 22 14:53:30 2008 +0200 * add the "lifting_detector" mode for E6C and K6C src/hkl-pseudoaxis-E6C.c | 9 +++++++++ src/hkl-pseudoaxis-K6C.c | 9 +++++++++ test/hkl-test-pseudoaxis-K6C.c | 2 +- 3 files changed, 19 insertions(+), 1 deletion(-) commit 958b658012de849038f935714eab0a2deda59fb9 Author: Frédéric-Emmanuel PICCA Date: Mon Oct 20 17:18:01 2008 +0200 * now the getter of the pseudoAxesEngine must also set the min and max. This min and max is used in the random test. so put a dummy min and max for the hkl getter. include/hkl/hkl-axis.h | 3 +++ src/hkl-axis.c | 9 +++++++++ src/hkl-pseudoaxis-common.c | 18 ++++++++++++++---- test/hkl-test-pseudoaxis.c | 7 +++++-- 4 files changed, 31 insertions(+), 6 deletions(-) commit 2ad1283a8e8aa4972dcead9a471483e31fe2d0d4 Author: Frédéric-Emmanuel PICCA Date: Mon Oct 20 16:03:35 2008 +0200 * add the hkl_geometry_randomize method. This methode randomize all axis of a geometry. include/hkl/hkl-axis.h | 10 ++++++++++ include/hkl/hkl-geometry.h | 2 ++ src/hkl-axis.c | 15 +++++++++++++++ src/hkl-geometry.c | 9 +++++++++ test/hkl-test-pseudoaxis.c | 4 +--- 5 files changed, 37 insertions(+), 3 deletions(-) commit 3d2ebf580e70ed6bfa168a7bc1926c1283a4d728 Author: Frédéric-Emmanuel PICCA Date: Mon Oct 20 15:20:32 2008 +0200 * update the README for cmake README | 56 ++++++++++++++++++++------------------------------------ 1 file changed, 20 insertions(+), 36 deletions(-) commit 757e6ce924ae77bdd67ac98edbabb2d0e368af80 Author: Frédéric-Emmanuel PICCA Date: Mon Oct 20 14:55:38 2008 +0200 * update the test with cmake CMakeLists.txt | 3 ++- test/CMakeLists.txt | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) commit 6a6f925dea36b51797782609352d90ccf3a9c495 Author: Frédéric-Emmanuel PICCA Date: Mon Oct 20 13:52:52 2008 +0200 * remove config files from scons config-linux2.py | 1 - config-win32.py | 2 -- 2 files changed, 3 deletions(-) commit 1080eb819a7f027747c93ab61dc5381e3659f0fc Author: Frédéric-Emmanuel PICCA Date: Mon Oct 20 13:27:38 2008 +0200 * start working on the eulerian pseudoaxes include/hkl/hkl-pseudoaxis-K4CV.h | 1 + src/hkl-pseudoaxis-K4CV.c | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) commit a089f651520261576e9048b3c4bda55c8af00df5 Author: Frédéric-Emmanuel PICCA Date: Mon Oct 20 13:19:37 2008 +0200 * add comments src/hkl-pseudoaxis-K4CV.c | 4 ++++ 1 file changed, 4 insertions(+) commit 732715b3ce66da01bd5686a9ef3b7dd677f76c37 Author: Picca Frédéric-Emmanuel Date: Sun Oct 19 18:15:46 2008 +0200 * factorize all the random pseudoAxes tests include/hkl/hkl-geometry-factory.h | 5 ++ include/hkl/hkl-geometry.h | 1 + src/hkl-geometry.c | 2 + test/SConscript | 1 + test/hkl-test-pseudoaxis-E4CV.c | 63 ------------------- test/hkl-test-pseudoaxis-E6C.c | 62 ------------------- test/hkl-test-pseudoaxis-K4CV.c | 62 ------------------- test/hkl-test-pseudoaxis-K6C.c | 64 -------------------- test/hkl-test-pseudoaxis.c | 121 +++++++++++++++++++++++++++++++++++++ test/main.c | 1 + 10 files changed, 131 insertions(+), 251 deletions(-) commit 704e0d021675926e7f6da2cdf53e3c3813465975 Author: Picca Frédéric-Emmanuel Date: Sun Oct 19 16:47:14 2008 +0200 * build a share lib with cmake CMakeLists.txt | 1 - src/CMakeLists.txt | 4 +++- test/CMakeLists.txt | 1 - 3 files changed, 3 insertions(+), 3 deletions(-) commit 2815f66e89a9372a2c7384a54c43b2c944231c48 Author: Picca Frédéric-Emmanuel Date: Sun Oct 19 15:41:26 2008 +0200 * add the cmake build system CMakeLists.txt | 5 +++++ src/CMakeLists.txt | 3 +++ test/CMakeLists.txt | 6 ++++++ 3 files changed, 14 insertions(+) commit 6b59f9efa971da03eff2939d167ea75004a536ee Author: Picca Frédéric-Emmanuel Date: Sat Oct 11 11:14:17 2008 +0200 * update the TODO list TODO | 147 +++++++++++++++++++++++-------------------------------------------- 1 file changed, 49 insertions(+), 98 deletions(-) commit 27f113607d07d9661226139f61fa01e26fa8abc6 Author: Picca Frédéric-Emmanuel Date: Sat Oct 11 10:49:38 2008 +0200 * add and update documentation src/hkl-pseudoaxis.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 6 deletions(-) commit 51baa88538511145756e4fcc7606092237b74623 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 25 14:53:55 2008 +0200 * add some doc for the pseudoaxis-common part. include/hkl/hkl-pseudoaxis-common.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) commit 976d9a675801346f6677770006ff825eb96c031d Author: Frédéric-Emmanuel PICCA Date: Thu Sep 25 14:24:43 2008 +0200 * remove all warnings include/hkl/hkl-pseudoaxis-common.h | 4 ++-- src/hkl-pseudoaxis-E4CV.c | 1 - src/hkl-pseudoaxis-E6C.c | 1 - src/hkl-pseudoaxis-common.c | 4 ++-- 4 files changed, 4 insertions(+), 6 deletions(-) commit 4bebd89c88c9ac7584e006acf1bb51ac40d3b88c Author: Frédéric-Emmanuel PICCA Date: Thu Sep 25 13:28:25 2008 +0200 * factorization of the standdard hkl setter. include/hkl/hkl-pseudoaxis-common.h | 4 ++++ src/hkl-pseudoaxis-E4CV.c | 28 +++------------------------- src/hkl-pseudoaxis-E6C.c | 28 +++------------------------- src/hkl-pseudoaxis-common.c | 29 ++++++++++++++++++++++++++--- 4 files changed, 36 insertions(+), 53 deletions(-) commit a7667ec4fcc747556c2066df76a26801d525db57 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 25 13:20:48 2008 +0200 * simplification of the E6C pseudoAxes. src/hkl-pseudoaxis-E6C.c | 80 +++++++----------------------------------- test/hkl-test-pseudoaxis-E6C.c | 3 +- 2 files changed, 13 insertions(+), 70 deletions(-) commit 38f21be94dece5b86706aea6f2f81466bac73e7b Author: Frédéric-Emmanuel PICCA Date: Thu Sep 25 12:13:23 2008 +0200 * simplification of the E4CV modes (faster and less code) src/hkl-pseudoaxis-E4CV.c | 80 +++++++---------------------------------- test/hkl-test-pseudoaxis-E4CV.c | 4 +-- 2 files changed, 14 insertions(+), 70 deletions(-) commit 2a75499c2d263c8d14b9500c09aae605792883c2 Author: Frédéric-Emmanuel PICCA Date: Wed Sep 24 17:24:46 2008 +0200 * add the E6C diffractometer. include/hkl/hkl-pseudoaxis-E6C.h | 12 +++ src/SConscript | 1 + src/hkl-pseudoaxis-E6C.c | 206 +++++++++++++++++++++++++++++++++++++++ test/SConscript | 1 + test/hkl-test-pseudoaxis-E6C.c | 167 +++++++++++++++++++++++++++++++ test/main.c | 1 + 6 files changed, 388 insertions(+) commit a5c32b134959b2670bbfb3b278e254d8db4dd253 Author: Frédéric-Emmanuel PICCA Date: Wed Sep 17 12:01:20 2008 +0200 * add the constant mode to the K4CV diffractometer. src/hkl-pseudoaxis-K4CV.c | 224 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 224 insertions(+) commit 33e5a6f397b6e3d6d7efaba052d938fa1807ef0b Author: Frédéric-Emmanuel PICCA Date: Wed Sep 17 11:49:40 2008 +0200 * rework the K4C bissector mode equations src/hkl-pseudoaxis-K4CV.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) commit 605b8f7dbc9db13aacf50372bf5ab1cfdc7a6e3b Author: Frédéric-Emmanuel PICCA Date: Tue Sep 16 17:08:46 2008 +0200 * add the constant phi vertical mode to the K6C geometry. src/hkl-pseudoaxis-K6C.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) commit e6f35e119ad9ceea80a15cf9d1d247396bdcdc25 Author: Frédéric-Emmanuel PICCA Date: Tue Sep 16 17:02:49 2008 +0200 * add the constant chi vertical mode to the K6C diffractometer. src/hkl-pseudoaxis-K6C.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) commit 34c5514074b764b0d97a955ed58862a174043d36 Author: Frédéric-Emmanuel PICCA Date: Tue Sep 16 08:56:42 2008 +0200 * add the constant omega vertical mode to the K6C diffractometer. src/hkl-pseudoaxis-K6C.c | 84 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 80 insertions(+), 4 deletions(-) commit b9bce4641aba35e10c60c6201dead3b467129af8 Author: Frédéric-Emmanuel PICCA Date: Mon Sep 15 15:22:20 2008 +0200 * add the bissector vertical mode. src/hkl-pseudoaxis-K6C.c | 95 ++++++++++++++++++++++++++++++++++++++---- test/hkl-test-pseudoaxis-K6C.c | 4 +- 2 files changed, 89 insertions(+), 10 deletions(-) commit 3eec3944db4fc247fed43b44c0e6dd76a5beaf84 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 4 18:25:43 2008 +0200 * no more gsl_vector_prt function use the data member of gsl_vector. src/hkl-pseudoaxis-K6C.c | 8 ++++---- src/hkl-pseudoaxis-auto.c | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) commit 8982c2feead9ee0230f40294f3b28a56decea485 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 4 18:06:09 2008 +0200 * better E4CV bissector mode function. src/hkl-pseudoaxis-E4CV.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) commit ea788d5ce0cefaa006728e1bd0a74d7768cef911 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 4 17:04:09 2008 +0200 * typo src/hkl-pseudoaxis-auto.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) commit 48672b6efa87d67f1fbd85cba81022972407bc06 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 4 17:03:59 2008 +0200 * better K6C bissector horizontal function src/hkl-pseudoaxis-K6C.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit 97e77a1d5db8f8d11ac48221c75cceb0e5f7e2c8 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 4 17:03:27 2008 +0200 * do not restrict the angle after the search. src/hkl-pseudoaxis-auto.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 60a136dd38bb5bbcd136644a0d79149d42b3b676 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 4 16:59:11 2008 +0200 * fprintf of a pseudoAxes also return the restricted symm angle src/hkl-pseudoaxis.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) commit c14e22930a719af90270306b58d106300818ca4a Author: Frédéric-Emmanuel PICCA Date: Thu Sep 4 14:37:23 2008 +0200 * remove un unnecessary variable in the test_sector function. src/hkl-pseudoaxis-auto.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) commit e58f8a4cecb8a207cfe91c124678a58cd89456d6 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 4 08:33:51 2008 +0200 * small documentation improvement. src/hkl-pseudoaxis.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 1ad5ec21c3cf78cac779f4a47db48da8cc11e370 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 4 08:24:58 2008 +0200 * no more miss computation of the missed mode computation during tests src/hkl-pseudoaxis-K6C.c | 8 ++++---- src/hkl-pseudoaxis-auto.c | 24 ++++++++++++++++++------ test/hkl-test-pseudoaxis-E4CV.c | 2 +- test/hkl-test-pseudoaxis-K4CV.c | 4 ++-- test/hkl-test-pseudoaxis-K6C.c | 3 ++- 5 files changed, 27 insertions(+), 14 deletions(-) commit 4437886435c231aa51bcd63bf2a5c15ea121bccb Author: Frédéric-Emmanuel PICCA Date: Thu Sep 4 08:02:27 2008 +0200 * use op_len instead of op_max in the perm_r It seems easier to understrand. src/hkl-pseudoaxis-auto.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) commit 82a2ad63d3dea403c956017949025cf9227aeb91 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 4 08:00:16 2008 +0200 * small bug in the permutation calculation. src/hkl-pseudoaxis-auto.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit dc8c0b8d1ceca59bfb19ef6c7b441dc2a14f25a9 Author: Frédéric-Emmanuel PICCA Date: Wed Sep 3 17:45:41 2008 +0200 * print the miss calculated pseudoAxes for each mode. test/hkl-test-pseudoaxis-E4CV.c | 3 ++- test/hkl-test-pseudoaxis-K4CV.c | 3 ++- test/hkl-test-pseudoaxis-K6C.c | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) commit 468aff0f9daaf360f09c9af967bb99ba0aaff9aa Author: Frédéric-Emmanuel PICCA Date: Wed Sep 3 17:19:18 2008 +0200 * first kappa6C pseudoAxeEngine. include/hkl/hkl-pseudoaxis-K6C.h | 12 ++++ src/SConscript | 1 + src/hkl-pseudoaxis-K6C.c | 113 ++++++++++++++++++++++++++++++ src/hkl-pseudoaxis.c | 3 +- test/SConscript | 1 + test/hkl-test-pseudoaxis-K6C.c | 145 +++++++++++++++++++++++++++++++++++++++ test/main.c | 1 + 7 files changed, 275 insertions(+), 1 deletion(-) commit d84ab9d6a1f790b7befa206693dd6f57537f1359 Author: Frédéric-Emmanuel PICCA Date: Wed Sep 3 09:57:32 2008 +0200 * use the right mode in the kappa pseudoAxesEngine src/hkl-pseudoaxis-K4CV.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 849392b81bc461bed8c1e65882d59f8e0a0f8f8a Author: Frédéric-Emmanuel PICCA Date: Tue Sep 2 16:51:57 2008 +0200 * no more HklPseudoAxeEngineFunc use only getter and setter. split the pseudoAxeEngine.c in an auto part use only for numerical pseudoAxes. As self->geometry is set each time we call the setter, the solver is slover. include/hkl/hkl-pseudoaxis-E4CV.h | 125 +--------- include/hkl/hkl-pseudoaxis-K4CV.h | 91 +------- include/hkl/hkl-pseudoaxis-auto.h | 14 ++ include/hkl/hkl-pseudoaxis.h | 49 +--- src/SConscript | 3 + src/hkl-pseudoaxis-E4CV.c | 170 ++++++++++++++ src/hkl-pseudoaxis-K4CV.c | 108 +++++++++ src/hkl-pseudoaxis-auto.c | 250 ++++++++++++++++++++ src/hkl-pseudoaxis-common.c | 4 + src/hkl-pseudoaxis.c | 472 ++++++-------------------------------- test/hkl-test-pseudoaxis-E4CV.c | 8 +- test/hkl-test-pseudoaxis-K4CV.c | 18 +- 12 files changed, 649 insertions(+), 663 deletions(-) commit 4a9cb31dd474dda40135528009e1be029986c1f5 Author: Frédéric-Emmanuel PICCA Date: Tue Sep 2 09:04:04 2008 +0200 * remove the to_pseudoAxes from PseudoAxesEngine. include/hkl/hkl-pseudoaxis-K4CV.h | 10 ++++++++ include/hkl/hkl-pseudoaxis.h | 2 -- src/hkl-pseudoaxis.c | 30 ------------------------ test/hkl-test-pseudoaxis-E4CV.c | 3 ++- test/hkl-test-pseudoaxis-K4CV.c | 48 ++++----------------------------------- 5 files changed, 16 insertions(+), 77 deletions(-) commit 40d89e587d47577e75627bd74c0c32ce589e4279 Author: Frédéric-Emmanuel PICCA Date: Tue Sep 2 08:53:46 2008 +0200 * no more crash of fprintf if the geometry was no set in PseudoAxesEngine. src/hkl-pseudoaxis.c | 44 +++++++++++++++++++++++------------------ test/hkl-test-pseudoaxis-E4CV.c | 26 ++++++++++++------------ 2 files changed, 38 insertions(+), 32 deletions(-) commit 5f342e4330da4452c6e88027fe4905a47de83d4c Author: Frédéric-Emmanuel PICCA Date: Tue Sep 2 08:10:05 2008 +0200 * start to use the get set in the E4CV pseudoAxeEngine. include/hkl/hkl-pseudoaxis-E4CV.h | 10 ++++++++++ include/hkl/hkl-pseudoaxis.h | 4 ++-- src/hkl-pseudoaxis.c | 11 +++++------ 3 files changed, 17 insertions(+), 8 deletions(-) commit b004305209632113451d5f2d5cbff2daf0ea3992 Author: Frédéric-Emmanuel PICCA Date: Fri Aug 29 17:57:44 2008 +0200 * create a common part for the pseudoAxeEngine. include/hkl/hkl-pseudoaxis-E4CV.h | 1 + include/hkl/hkl-pseudoaxis-K4CV.h | 1 + include/hkl/hkl-pseudoaxis-common.h | 7 ++++ include/hkl/hkl-pseudoaxis.h | 4 +- src/SConscript | 1 + src/hkl-pseudoaxis-common.c | 80 +++++++++++++++++++++++++++++++++++++ src/hkl-pseudoaxis.c | 45 --------------------- 7 files changed, 91 insertions(+), 48 deletions(-) commit 95cb64e01583e346302b40027fd160f1e5e3bc57 Author: Frédéric-Emmanuel PICCA Date: Fri Aug 29 17:31:30 2008 +0200 * refactor the getset part of the pseudoAxesEngine include/hkl/hkl-pseudoaxis.h | 51 +++++++++------------ src/hkl-pseudoaxis.c | 104 ++++++++++++++++++++++++++++++++----------- 2 files changed, 99 insertions(+), 56 deletions(-) commit 7feb06b7d190f1b9032e71446f6356839562df5e Author: Frédéric-Emmanuel PICCA Date: Fri Aug 29 16:54:29 2008 +0200 * start to add the Getter and Setter in the PseudoAxisEngine. also refactoring of the PseudoAxis geometry specific constructors. include/hkl/hkl-pseudoaxis-E4CV.h | 85 +++++++------ include/hkl/hkl-pseudoaxis-K4CV.h | 30 +++-- include/hkl/hkl-pseudoaxis.h | 84 +++++++++++-- src/hkl-pseudoaxis.c | 256 ++++++++++++++++++++++++++++++-------- test/hkl-test-pseudoaxis-E4CV.c | 2 +- test/hkl-test-pseudoaxis-K4CV.c | 4 +- 6 files changed, 335 insertions(+), 126 deletions(-) commit d0aca04cc00766f8ece48497d29887776f2f7976 Author: Frédéric-Emmanuel PICCA Date: Fri Aug 29 10:51:09 2008 +0200 * revert all inlining till I understand well the inlining... include/hkl/hkl-axis.h | 7 +------ include/hkl/hkl-quaternion.h | 41 +++-------------------------------------- include/hkl/hkl-vector.h | 6 +----- src/hkl-axis.c | 7 +++++++ src/hkl-quaternion.c | 38 ++++++++++++++++++++++++++++++++++++++ src/hkl-vector.c | 5 +++++ 6 files changed, 55 insertions(+), 49 deletions(-) commit c00fc96aaadd7b4a3b094843916c14674b72a2c0 Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 15:03:47 2008 +0200 * documentation. src/hkl-pseudoaxis.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 8d7c11a002ca19931d2543d3152c1139358abc28 Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 14:31:36 2008 +0200 * inline a few more methods to speed calculation. include/hkl/hkl-axis.h | 15 ++++++++++++- include/hkl/hkl-quaternion.h | 53 +++++++++++++++++++++++++++++++++++++++++--- include/hkl/hkl-vector.h | 7 +++++- src/hkl-axis.c | 6 ----- src/hkl-quaternion.c | 40 --------------------------------- src/hkl-vector.c | 6 ----- 6 files changed, 70 insertions(+), 57 deletions(-) commit 811236af9a8b3006b3f65418192a8234abbe5c76 Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 11:48:56 2008 +0200 * the geometry_init_geometry now also copy the holders no more dirty axes. src/hkl-geometry.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 742b8b08a46e0fd4f33ed399006f24db9cf4ff2d Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 11:02:31 2008 +0200 * use the x[] instead of *x notation in the method decalrations. src/hkl-pseudoaxis.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 8b829b7d80ec7f0c89e95ff5f6f4aaa96abb5762 Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 10:50:06 2008 +0200 * comments updated src/hkl-pseudoaxis.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 92e18ce57b340078df0b5aead6ab8bc106034a55 Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 10:46:04 2008 +0200 * add the find_first_geometry documentation src/hkl-pseudoaxis.c | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 8b4358a346d33151c8395577987424b54bdc27f6 Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 10:39:52 2008 +0200 * add documentation src/hkl-pseudoaxis.c | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 2b2c2d5d7074a1b4d4c0fdf1b47d3be2adc7be5c Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 10:39:29 2008 +0200 * use self instead of engine in the add_geometry method. src/hkl-pseudoaxis.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) commit b3f24cec4a1519bade3abd839225bef38f420ba2 Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 10:31:20 2008 +0200 * use the variable array length of C99 in the to_geometry. src/hkl-pseudoaxis.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) commit b44e9b99e983450d5826f82561275e70a7c8f0d6 Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 10:21:02 2008 +0200 * fix indentation src/hkl-pseudoaxis.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4f40c28710b151fc33ecfb1c59c1c73341bec3f9 Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 10:20:35 2008 +0200 * rename jacobian into find_degenerated src/hkl-pseudoaxis.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) commit 46df53194eb957bc33652ac69748603fa02e6e74 Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 09:36:55 2008 +0200 rename the find_geoemtry method to be more explicite src/hkl-pseudoaxis.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit b3d22b2e0c53478bc9d8c86cafd35d73587807fd Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 09:36:34 2008 +0200 * use the right signature for the compute_jacobian function src/hkl-pseudoaxis.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 0c93e56099932a3da1bc43b87e24c74247ee0d46 Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 08:57:52 2008 +0200 * add a degenerated case in the K4CV pseudoAxesEngine. test/hkl-test-pseudoaxis-K4CV.c | 65 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 7 deletions(-) commit 7fa62fdb8bf540981ac097630231a519327c25c5 Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 08:49:23 2008 +0200 * add a compute_jacobian method to work on degenerated axes. src/hkl-pseudoaxis.c | 55 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 19 deletions(-) commit 563378cd78bb1fe252a9089b0292cc350f067ab1 Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 08:30:34 2008 +0200 * use fprintf to stderr instead of stdout in the test methods test/hkl-test.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 112b986c20506d2299e55e8cf75907c0e4cc48cf Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 08:30:08 2008 +0200 * print the number of missed calculated pseudoAxes. test/hkl-test-pseudoaxis-E4CV.c | 5 ++++- test/hkl-test-pseudoaxis-K4CV.c | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) commit bd9d6010ecab0c53a7751b2831a2cef81754e2c9 Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 08:29:42 2008 +0200 *small optimisation of the solver src/hkl-pseudoaxis.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) commit b94a3b99c558a1ecb71790f0963efca861c06598 Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 08:17:12 2008 +0200 * update the fdjacobian in the test sector method. src/hkl-pseudoaxis.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) commit 4fbe97da009f017c1c385d1ccd9587110808def6 Author: Frédéric-Emmanuel PICCA Date: Thu Aug 28 08:16:38 2008 +0200 * remove a memory leak from the PseudoAxisengine solver. leak when the solution could not be found -> status = GSL_CONTINUE return without deallocating the memory. src/hkl-pseudoaxis.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) commit 1528f75b705605ce9c8e9a52902e4587c51a3ef1 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 27 17:43:54 2008 +0200 * remove un-needed method src/hkl-holder.c | 6 ------ test/hkl-test-holder.c | 6 +++--- 2 files changed, 3 insertions(+), 9 deletions(-) commit acfa0f8bb65c121d2a226cd76c1eea6ce195b36c Author: Frédéric-Emmanuel PICCA Date: Wed Aug 27 17:38:18 2008 +0200 * first kappa4C working HKL pseudoAxesEngine. include/hkl/hkl-pseudoaxis-K4CV.h | 90 ++++++++++++ src/hkl-pseudoaxis.c | 26 ++-- test/SConscript | 3 +- ...est-pseudoaxis.c => hkl-test-pseudoaxis-E4CV.c} | 2 +- test/hkl-test-pseudoaxis-K4CV.c | 161 +++++++++++++++++++++ test/main.c | 3 +- 6 files changed, 266 insertions(+), 19 deletions(-) commit 4030c3a55495d2e408536fecb814ad6fcfa922fd Author: Frédéric-Emmanuel PICCA Date: Wed Aug 27 15:11:49 2008 +0200 * compact the E4CV pseudoAxes initialization include/hkl/hkl-pseudoaxis-E4CV.h | 44 ++++++++------------------------------- 1 file changed, 9 insertions(+), 35 deletions(-) commit 4cfa20f3cc15727a5390a7ed0054827826f3de45 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 27 15:00:33 2008 +0200 * now use directly the right function instead of a copy include/hkl/hkl-pseudoaxis-E4CV.h | 6 +++--- include/hkl/hkl-pseudoaxis.h | 2 +- src/hkl-pseudoaxis.c | 6 +++--- test/hkl-test-pseudoaxis.c | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) commit 0d61c9b9cb8b8c0dc3f73f4ad1aadc5a57149cf3 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 27 14:55:38 2008 +0200 * add a name to the pseudoAxesEngineFunc and most of the E4CV functions. also reduce the number of iteration before stopping looking for a solution. include/hkl/hkl-pseudoaxis-E4CV.h | 105 +++++++++++++++++++++++++++++--------- include/hkl/hkl-pseudoaxis.h | 1 + src/hkl-pseudoaxis.c | 2 +- test/hkl-test-pseudoaxis.c | 53 ++++++++++--------- 4 files changed, 113 insertions(+), 48 deletions(-) commit 1b13f88466aa89d32e1071622abe2eba9ef72480 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 27 13:00:26 2008 +0200 * better fprintf in the PseudoAxesengine. src/hkl-pseudoaxis.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) commit 13e0866b82136ab35c962ba4eea8b7ee62036065 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 27 11:46:21 2008 +0200 refactoring of the PseudoAxesEngien test test/hkl-test-pseudoaxis.c | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) commit e0eacc5049c48fa1b93abe01bb343f2c46d69c83 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 27 11:42:31 2008 +0200 * remove a bug in the new hkl_geometry_init_geometry add also the pseudoAxes fprintf method. include/hkl/hkl-pseudoaxis-E4CV.h | 17 ++++++++++------- include/hkl/hkl-pseudoaxis.h | 4 +++- src/hkl-geometry.c | 6 ++++-- src/hkl-pseudoaxis.c | 38 ++++++++++++++++++++++++++++++-------- test/hkl-test-pseudoaxis.c | 25 ++++++++++++++----------- 5 files changed, 61 insertions(+), 29 deletions(-) commit 2d62bdd073a1e35cd43e32a3eb8f4280b85fc70a Author: Frédéric-Emmanuel PICCA Date: Wed Aug 27 10:39:49 2008 +0200 * optimization src/hkl-pseudoaxis.c | 64 +++++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 31 deletions(-) commit 9bbc2206e4df3aec6d36aa75df63a1349a6aea88 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 27 10:00:21 2008 +0200 * optimization of the geometries allocation in the pseudoAxeEngine We now allocate everything in the add_geometry method then we just copy the axes config part from the engine->geometry to the engine->geometries with the new hkl_geometry_init_geometry method. include/hkl/hkl-geometry.h | 3 +++ include/hkl/hkl-pseudoaxis.h | 1 + src/hkl-geometry.c | 16 ++++++++++++++++ src/hkl-pseudoaxis.c | 45 ++++++++++++++++++++++++-------------------- 4 files changed, 45 insertions(+), 20 deletions(-) commit d9f14f10cffff3b03f26afe7e5fd934a1c0e01b5 Author: Frédéric-Emmanuel PICCA Date: Wed Aug 27 09:22:49 2008 +0200 * now all geometries are provided. src/hkl-pseudoaxis.c | 465 ++++++++++++++++++++++----------------------- test/hkl-test-pseudoaxis.c | 2 +- 2 files changed, 231 insertions(+), 236 deletions(-) commit bbbb9105b407efb0145d3fe9975f42f0502d1696 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 26 14:48:16 2008 +0200 * refactoring of all the PseudoAxes SConstruct | 2 +- config-linux2.py | 1 + include/hkl/hkl-geometry.h | 3 + include/hkl/hkl-pseudoaxis-E4CV.h | 38 +++- include/hkl/hkl-pseudoaxis.h | 91 +++----- src/SConscript | 1 - src/hkl-geometry.c | 13 ++ src/hkl-pseudoaxis-auto.c | 339 --------------------------- src/hkl-pseudoaxis.c | 466 ++++++++++++++++++++++++++------------ test/hkl-test-pseudoaxis.c | 200 ++++------------ test/main.c | 2 +- 11 files changed, 452 insertions(+), 704 deletions(-) commit acfd67299960d732b457f75f24d97280ca3e6c91 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 25 18:06:49 2008 +0200 * reorganize a little bit the geometry + holder to improve speed. include/hkl/hkl-geometry.h | 8 -------- src/hkl-geometry.c | 35 +++++++++++++++++++++++++++++------ src/hkl-holder.c | 24 ------------------------ test/hkl-test-geometry.c | 4 ++++ test/hkl-test-holder.c | 36 ------------------------------------ 5 files changed, 33 insertions(+), 74 deletions(-) commit a91150cd8c10e17df16786b42362ed64cf20cd4e Author: Frédéric-Emmanuel PICCA Date: Mon Aug 25 17:45:12 2008 +0200 * now Detector is normal struct no more new/free include/hkl/hkl-detector.h | 7 +----- include/hkl/hkl-sample.h | 2 +- src/hkl-detector.c | 33 +++----------------------- src/hkl-pseudoaxis-auto.c | 2 +- src/hkl-pseudoaxis.c | 2 +- src/hkl-sample.c | 5 ++-- test/hkl-test-detector.c | 35 ++++----------------------- test/hkl-test-pseudoaxis.c | 21 +++++------------ test/hkl-test-sample.c | 59 +++++++++++++++------------------------------- 9 files changed, 38 insertions(+), 128 deletions(-) commit fb019aa91616bf61cb04e50959d3605126464149 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 25 17:42:44 2008 +0200 * optimization in the holder part. src/hkl-holder.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 1fe5c074edaa948556984f93af3b588ecdfeb3c5 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 25 14:09:19 2008 +0200 * small refactoring of the geometry add holder class src/hkl-geometry.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 30d0f50331b1d04e8fdee6d79beae442f210b633 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 25 14:08:40 2008 +0200 * just a refactoring of the geometry factory include/hkl/hkl-geometry-factory.h | 40 +++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 20 deletions(-) commit 5b35453ab6735910b26ff84892e27d7c6b04a70a Author: Frédéric-Emmanuel PICCA Date: Mon Aug 25 13:48:15 2008 +0200 * remove a leak in the Geometry. src/hkl-geometry.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) commit 3dc4907085bb73661e5094087a8d6411f1ee4410 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 25 13:33:31 2008 +0200 * use sel fin the geometry class include/hkl/hkl-geometry.h | 23 ++++++++-------- src/hkl-geometry.c | 38 +++++++++++++-------------- src/hkl-holder.c | 65 ++++++++++++++++++++++------------------------ 3 files changed, 62 insertions(+), 64 deletions(-) commit 658e2a265361ce8008f7de7c64edda77ff5eb6ca Author: Picca Frédéric-Emmanuel Date: Fri Aug 22 17:27:58 2008 +0200 * no more list in the Geometry include/hkl/hkl-axis.h | 5 +--- include/hkl/hkl-geometry.h | 7 ++--- src/hkl-axis.c | 36 +++------------------- src/hkl-geometry.c | 45 ++++++++++------------------ src/hkl-holder.c | 30 +++++++++---------- src/hkl-pseudoaxis-auto.c | 11 +++---- src/hkl-pseudoaxis.c | 2 +- test/hkl-test-axis.c | 75 ++++++++++++++++++++-------------------------- test/hkl-test-geometry.c | 6 ++-- test/hkl-test-pseudoaxis.c | 8 ++--- test/hkl-test-sample.c | 16 +++++----- 11 files changed, 91 insertions(+), 150 deletions(-) commit 89f2689eeeaad0e0af83c108c0c413500b91d902 Author: Picca Frédéric-Emmanuel Date: Fri Aug 22 16:33:12 2008 +0200 * no more HklList in the holder include/hkl/hkl-geometry.h | 3 ++- src/hkl-holder.c | 34 ++++++++++++++++++---------------- 2 files changed, 20 insertions(+), 17 deletions(-) commit 2687356c7b704469d9c64d60714477bb2274d135 Author: Picca Frédéric-Emmanuel Date: Fri Aug 22 16:07:42 2008 +0200 * now holder and geometry are thigten include/hkl/hkl-geometry.h | 31 ++++++++- include/hkl/hkl-holder.h | 32 --------- src/hkl-geometry.c | 4 +- src/hkl-holder.c | 18 ++--- test/hkl-test-holder.c | 161 +++------------------------------------------ 5 files changed, 50 insertions(+), 196 deletions(-) commit ee6cdb5eee2f161d578ad575d62b59d0c68ad904 Author: Picca Frédéric-Emmanuel Date: Fri Aug 22 14:28:52 2008 +0200 * change the type of the HklHolder list in the HklGeometry include/hkl/hkl-geometry.h | 3 +- include/hkl/hkl-holder.h | 7 ++--- src/hkl-detector.c | 2 +- src/hkl-geometry.c | 40 +++++++++++--------------- src/hkl-holder.c | 46 +++++++++++------------------- src/hkl-pseudoaxis-auto.c | 2 +- src/hkl-pseudoaxis.c | 2 +- src/hkl-sample.c | 4 +-- test/hkl-test-geometry.c | 9 +++--- test/hkl-test-holder.c | 70 ++++++++++++++++++++++------------------------ test/main.c | 2 +- 11 files changed, 82 insertions(+), 105 deletions(-) commit f601b9cdd4f19bc8924c913d4f72c730f57b56e7 Author: Picca Frédéric-Emmanuel Date: Fri Aug 22 13:41:45 2008 +0200 * idem for the source include/hkl/hkl-geometry.h | 2 +- include/hkl/hkl-source.h | 12 ++------ src/hkl-detector.c | 2 +- src/hkl-geometry.c | 6 ++-- src/hkl-pseudoaxis-auto.c | 2 +- src/hkl-pseudoaxis.c | 2 +- src/hkl-sample.c | 2 +- src/hkl-source.c | 75 +++++++++----------------------------------- test/hkl-test-source.c | 77 +++++++++++++++------------------------------- 9 files changed, 48 insertions(+), 132 deletions(-) commit 41c7c35790f7f162483d6ac8e79fae97c5c938f7 Author: Picca Frédéric-Emmanuel Date: Fri Aug 22 10:07:49 2008 +0200 * idem for quaternions include/hkl/hkl-holder.h | 2 +- include/hkl/hkl-quaternion.h | 10 ++-------- src/hkl-detector.c | 2 +- src/hkl-holder.c | 9 ++++----- src/hkl-pseudoaxis-auto.c | 2 +- src/hkl-pseudoaxis.c | 2 +- src/hkl-quaternion.c | 32 +------------------------------- src/hkl-sample.c | 4 ++-- test/hkl-test-holder.c | 16 ++++++++-------- test/hkl-test-quaternion.c | 33 ++++++++------------------------- 10 files changed, 29 insertions(+), 83 deletions(-) commit 0656b8f4b7386dd6ae3b7947758b89f9ff171750 Author: Picca Frédéric-Emmanuel Date: Fri Aug 22 10:00:58 2008 +0200 *idem for the HklMatrix include/hkl/hkl-matrix.h | 11 ++------- include/hkl/hkl-sample.h | 4 ++-- src/hkl-matrix.c | 48 +++++--------------------------------- src/hkl-pseudoaxis-auto.c | 2 +- src/hkl-pseudoaxis.c | 2 +- src/hkl-sample.c | 24 +++++++++---------- test/hkl-test-matrix.c | 59 +++++++++++++++-------------------------------- test/hkl-test-sample.c | 6 ++--- 8 files changed, 44 insertions(+), 112 deletions(-) commit a2f666a279147533a4af3f32a93457377848fe38 Author: Picca Frédéric-Emmanuel Date: Fri Aug 22 09:36:23 2008 +0200 * use Hklvector as a struct no more pointer in other struct. include/hkl/hkl-source.h | 2 +- include/hkl/hkl-vector.h | 7 +------ src/hkl-detector.c | 2 +- src/hkl-pseudoaxis.c | 2 +- src/hkl-source.c | 13 ++++++------- src/hkl-vector.c | 35 +---------------------------------- test/hkl-test-axis.c | 24 ++++++++---------------- test/hkl-test-holder.c | 10 ++++------ test/hkl-test-source.c | 14 +++++++------- test/hkl-test-vector.c | 40 +++------------------------------------- 10 files changed, 33 insertions(+), 116 deletions(-) commit 4314c1f5b42ed3187a964bd7c682c097773c4d0d Author: Frédéric-Emmanuel PICCA Date: Mon Jun 16 15:30:23 2008 +0200 * move the hkl common part to the pseudoAxis.c file include/hkl/hkl-pseudoaxis-E4CV.h | 56 ++------------------------------------- include/hkl/hkl-pseudoaxis.h | 2 ++ src/hkl-pseudoaxis-auto.c | 6 ++--- src/hkl-pseudoaxis.c | 52 ++++++++++++++++++++++++++++++++++++ 4 files changed, 59 insertions(+), 57 deletions(-) commit 1495158d7f152769ff977850ca25d6f705075f0d Author: Frédéric-Emmanuel PICCA Date: Fri Jun 13 15:46:28 2008 +0200 * add the pseudoAxisEngineFunc class to help deal with more pseudoAxes. include/hkl/hkl-pseudoaxis-E4CV.h | 109 +++++++++++++++++++++++++++++ include/hkl/hkl-pseudoaxis.h | 27 +++++-- src/hkl-pseudoaxis-auto.c | 143 +++++++------------------------------- src/hkl-pseudoaxis.c | 15 ++-- test/hkl-test-pseudoaxis.c | 14 ++-- 5 files changed, 175 insertions(+), 133 deletions(-) commit 999a74ed397bb2cc32573f77f5aa01357f3a3eb5 Author: Frédéric-Emmanuel PICCA Date: Fri Jun 13 13:53:26 2008 +0200 * split the auto_equiv_geometries in 4 functions. src/hkl-pseudoaxis-auto.c | 252 +++++++++++++++++++++++++++++----------------- 1 file changed, 157 insertions(+), 95 deletions(-) commit c2717261e06481b77c2357d029205de363a3b1ec Author: Frédéric-Emmanuel PICCA Date: Fri Jun 13 11:49:38 2008 +0200 * add a get_axis_const to the HklGeometry class. include/hkl/hkl-geometry.h | 2 ++ src/hkl-geometry.c | 9 +++++++++ 2 files changed, 11 insertions(+) commit 667e007db7162bd6374f3d92b270c6d78d4e3b57 Author: Frédéric-Emmanuel PICCA Date: Fri Jun 13 10:08:53 2008 +0200 * bug in the holder test suite test/hkl-test-holder.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 4bc1df996dfa200dac8e69c9bdd149b30aba6d64 Author: Frédéric-Emmanuel PICCA Date: Fri Jun 13 09:20:29 2008 +0200 * add an equiv_geometry to the pseudoAxeEngine class. Now from one solution the equiv_geometry gives you the other solutions in the different quadrant of [0 2pi] for each axis. include/hkl/hkl-pseudoaxis.h | 3 + src/SConscript | 3 +- src/hkl-pseudoaxis-auto.c | 152 ++++++++++++++++++++++++++++++++++++++++--- src/hkl-pseudoaxis.c | 5 ++ test/hkl-test-pseudoaxis.c | 150 +++++++++++++++++++++++++++--------------- 5 files changed, 252 insertions(+), 61 deletions(-) commit e9e449928e3a3e6126c7da9e98c79cada4c5bf5d Author: Frédéric-Emmanuel PICCA Date: Thu Jun 12 17:55:22 2008 +0200 * the fprintf method of the geometry now print the real value of the axes. No more [-pi pi] conversion of the angles. src/hkl-geometry.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 82d18573131af57907dc38996d6f3ab27ef5cd79 Author: Frédéric-Emmanuel PICCA Date: Thu Jun 12 17:53:51 2008 +0200 * correct the kappa geometries include/hkl/hkl-geometry-factory.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 232aaa388e9e94edd8b8cdcd059bac9203000864 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 10 13:36:28 2008 +0200 * add a printf method to the Geometry class. include/hkl/hkl-geometry.h | 2 ++ src/hkl-geometry.c | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) commit 3423efbc9ce2807c52dfdf72350e5e4bfefc12de Author: Frédéric-Emmanuel PICCA Date: Tue Jun 10 09:43:28 2008 +0200 * remove an unneeded part in the pseudoAxis src/hkl-pseudoaxis-auto.c | 1 - 1 file changed, 1 deletion(-) commit 92c8bf89b4020498d845e355964498ca3e797756 Merge: 6da710f4 7b690cbb Author: Frédéric-Emmanuel PICCA Date: Fri Jun 6 18:20:32 2008 +0200 Merge branch 'next' of /media/sdb1/hkl into next commit 6da710f4324990c8929d858728536972c0492d7f Author: Frédéric-Emmanuel PICCA Date: Fri Jun 6 15:27:58 2008 +0200 *remove useless method in the PseudoAxesEngine class include/hkl/hkl-pseudoaxis.h | 5 ----- 1 file changed, 5 deletions(-) commit 5e3bace68d4ec7b4747244a1e537715c336e8e39 Author: Frédéric-Emmanuel PICCA Date: Fri Jun 6 14:48:20 2008 +0200 * instead of a current and consign part use only a value. now the library is only a sort of calculator for diffractometers. If you have de current and consign part you need to use two different geometry to store the current value and the consign values. include/hkl/hkl-axis.h | 6 ++--- include/hkl/hkl-detector.h | 2 +- include/hkl/hkl-holder.h | 4 +-- src/hkl-axis.c | 9 +++---- src/hkl-detector.c | 6 ++--- src/hkl-holder.c | 21 ++++------------ src/hkl-pseudoaxis-auto.c | 60 ++++++++++++-------------------------------- test/hkl-test-axis.c | 32 +++++++----------------- test/hkl-test-detector.c | 10 +++----- test/hkl-test-geometry.c | 3 +-- test/hkl-test-holder.c | 62 +--------------------------------------------- test/hkl-test-pseudoaxis.c | 46 ++++++++++------------------------ test/hkl-test-sample.c | 16 ++++++------ 13 files changed, 65 insertions(+), 212 deletions(-) commit ab6a91e74cc7b6a734179b02f3616e6f16746663 Author: Frédéric-Emmanuel PICCA Date: Fri Jun 6 14:23:36 2008 +0200 * remove useless files binding/python/SConscript | 21 - binding/python/diffractometer.gazpacho | 2016 ------------ binding/python/diffractometer.glade | 3423 --------------------- binding/python/diffractometer.py | 680 ---- binding/python/diffractometer2.py | 736 ----- binding/python/diffractometer_eulerian4C_wrap.cpp | 39 - binding/python/diffractometer_eulerian4C_wrap.h | 18 - binding/python/diffractometer_kappa4C_wrap.cpp | 45 - binding/python/diffractometer_kappa4C_wrap.h | 18 - binding/python/diffractometer_kappa_wrap.cpp | 8 - binding/python/diffractometer_kappa_wrap.h | 18 - binding/python/diffractometer_wrap.cpp | 309 -- binding/python/diffractometer_wrap.h | 91 - binding/python/hkl_wrap.cpp | 76 - binding/python/reflection_wrap.h | 18 - include/hkl/HKLException.h | 76 - include/hkl/affinement.h | 95 - include/hkl/affinement_simplex.h | 48 - include/hkl/affinementlist.h | 147 - include/hkl/convenience.h | 37 - include/hkl/derived_mode.h | 95 - include/hkl/derived_pseudoaxeengine.h | 527 ---- include/hkl/diffractometerfactory.h | 49 - include/hkl/eulerian4C_vertical_diffractometer.h | 33 - include/hkl/eulerian4C_vertical_geometry.h | 161 - include/hkl/eulerian4C_vertical_mode.h | 148 - include/hkl/eulerian4C_vertical_pseudoaxeengine.h | 156 - include/hkl/eulerian6C_diffractometer.h | 60 - include/hkl/eulerian6C_geometry.h | 191 -- include/hkl/eulerian6C_mode.h | 29 - include/hkl/eulerian6C_pseudoaxeengine.h | 236 -- include/hkl/fitparameterlist.h | 136 - include/hkl/geometry_kappa.h | 47 - include/hkl/hklobject.h | 61 - include/hkl/kappa4C_vertical_diffractometer.h | 123 - include/hkl/kappa4C_vertical_geometry.h | 297 -- include/hkl/kappa4C_vertical_mode.h | 34 - include/hkl/kappa4C_vertical_pseudoaxeengine.h | 150 - include/hkl/kappa6C_diffractometer.h | 28 - include/hkl/kappa6C_geometry.h | 192 -- include/hkl/kappa6C_mode.h | 29 - include/hkl/kappa6C_pseudoaxeengine.h | 30 - include/hkl/mode.h | 207 -- include/hkl/modelist.h | 147 - include/hkl/mymap.h | 243 -- include/hkl/object.h | 155 - include/hkl/observer.h | 69 - include/hkl/parameterlist.h | 104 - include/hkl/portability.h | 19 - include/hkl/pseudoaxe.h | 150 - include/hkl/pseudoaxeengine.h | 353 --- include/hkl/pseudoaxeenginelist.h | 57 - include/hkl/pseudoaxelist.h | 79 - include/hkl/quaternion.h | 79 - include/hkl/range.h | 181 -- include/hkl/reflection.h | 15 - include/hkl/reflection_monocrystal.h | 68 - include/hkl/reflectionfactory.h | 47 - include/hkl/reflectionlist.h | 153 - include/hkl/sample.h | 122 - include/hkl/sample_monocrystal.h | 127 - include/hkl/samplefactory.h | 48 - include/hkl/samplelist.h | 176 -- include/hkl/strbuf.h | 19 - include/hkl/twoC_vertical_diffractometer.h | 97 - include/hkl/twoC_vertical_geometry.h | 127 - include/hkl/twoC_vertical_mode.h | 74 - include/hkl/twoC_vertical_pseudoaxeengine.h | 128 - include/hkl/value.h | 127 - src/HKLException.cpp | 132 - src/affinement.cpp | 57 - src/affinement_simplex.cpp | 321 -- src/affinementlist.cpp | 249 -- src/convenience.cpp | 50 - src/diffractometerfactory.cpp | 54 - src/eulerian4C_vertical_diffractometer.cpp | 46 - src/eulerian4C_vertical_geometry.cpp | 350 --- src/eulerian4C_vertical_mode.cpp | 290 -- src/eulerian4C_vertical_pseudoaxeengine.cpp | 271 -- src/eulerian6C_diffractometer.cpp | 35 - src/eulerian6C_geometry.cpp | 392 --- src/eulerian6C_pseudoaxeengine.cpp | 399 --- src/fitparameter.cpp | 120 - src/fitparameterlist.cpp | 138 - src/geometry.cpp | 347 --- src/geometry_kappa.cpp | 35 - src/gui/SConscript | 30 - src/gui/axespinbutton.cpp | 155 - src/gui/axespinbutton.h | 53 - src/gui/diffractometer2.glade | 2798 ----------------- src/gui/hklwindow.cpp | 2108 ------------- src/gui/hklwindow.h | 209 -- src/gui/main.cpp | 76 - src/gui/modelcolumns.h | 112 - src/gui/pseudoaxespinbutton.cpp | 156 - src/gui/pseudoaxespinbutton.h | 47 - src/hklobject.cpp | 47 - src/kappa4C_vertical_diffractometer.cpp | 47 - src/kappa4C_vertical_geometry.cpp | 357 --- src/kappa4C_vertical_pseudoaxeengine.cpp | 129 - src/kappa6C_diffractometer.cpp | 41 - src/kappa6C_geometry.cpp | 388 --- src/mode.cpp | 23 - src/modelist.cpp | 251 -- src/object.cpp | 193 -- src/observer.cpp | 91 - src/parameterlist.cpp | 147 - src/pseudoaxe.cpp | 215 -- src/pseudoaxeengine.cpp | 37 - src/pseudoaxeenginelist.cpp | 83 - src/pseudoaxelist.cpp | 107 - src/range.cpp | 197 -- src/reflection.c | 123 - src/reflection.cpp | 123 - src/reflection_monocrystal.cpp | 61 - src/reflectionfactory.cpp | 45 - src/reflectionlist.cpp | 278 -- src/sample.cpp | 169 - src/sample_monocrystal.cpp | 316 -- src/samplefactory.cpp | 48 - src/samplelist.cpp | 307 -- src/source.cpp | 157 - src/strbuf.cpp | 27 - src/twoC_vertical_diffractometer.cpp | 43 - src/twoC_vertical_geometry.cpp | 280 -- src/twoC_vertical_mode.cpp | 74 - src/twoC_vertical_pseudoaxeengine.cpp | 286 -- src/value.cpp | 142 - test/affinement_simplex_test.cpp | 165 - test/affinement_simplex_test.h | 36 - test/diffractometer_eulerian4C_test.cpp | 456 --- test/diffractometer_eulerian4C_test.h | 60 - test/diffractometer_kappa4C_test.cpp | 46 - test/diffractometer_kappa4C_test.h | 21 - test/diffractometer_kappa6C_test.cpp | 85 - test/diffractometer_kappa6C_test.h | 30 - test/diffractometer_test.cpp | 364 --- test/diffractometer_test.h | 55 - test/fitparameter_test.cpp | 42 - test/fitparameter_test.h | 26 - test/geometry_eulerian4C_test.cpp | 201 -- test/geometry_eulerian4C_test.h | 40 - test/geometry_eulerian6C_test.cpp | 300 -- test/geometry_eulerian6C_test.h | 44 - test/geometry_kappa4C_test.cpp | 280 -- test/geometry_kappa4C_test.h | 43 - test/geometry_kappa6C_test.cpp | 222 -- test/geometry_kappa6C_test.h | 39 - test/geometry_test.cpp | 63 - test/geometry_test.h | 29 - test/hklobject_test.cpp | 27 - test/hklobject_test.h | 24 - test/holderlist_test.cpp | 68 - test/holderlist_test.h | 34 - test/mode_eulerian4C_test.cpp | 260 -- test/mode_eulerian4C_test.h | 37 - test/mode_kappa4C_test.cpp | 246 -- test/mode_kappa4C_test.h | 37 - test/mode_kappa6C_test.cpp | 266 -- test/mode_kappa6C_test.h | 37 - test/object_test.cpp | 55 - test/object_test.h | 32 - test/pseudoaxe_eulerian4C_test.cpp | 301 -- test/pseudoaxe_eulerian4C_test.h | 38 - test/pseudoaxe_eulerian6C_test.cpp | 331 -- test/pseudoaxe_eulerian6C_test.h | 33 - test/pseudoaxe_kappa4C_test.cpp | 612 ---- test/pseudoaxe_kappa4C_test.h | 41 - test/pseudoaxe_kappa6C_test.cpp | 508 --- test/pseudoaxe_kappa6C_test.h | 41 - test/range_test.cpp | 67 - test/range_test.h | 30 - test/reflection_test.cpp | 117 - test/reflection_test.h | 44 - test/reflectionlist_test.cpp | 104 - test/reflectionlist_test.h | 39 - test/sample_test.cpp | 152 - test/sample_test.h | 38 - test/samplelist_test.cpp | 32 - test/samplelist_test.h | 27 - test/twoC_vertical_diffractometer_test.cpp | 368 --- test/twoC_vertical_diffractometer_test.h | 58 - test/twoC_vertical_geometry_test.cpp | 246 -- test/twoC_vertical_geometry_test.h | 44 - test/twoC_vertical_mode_test.cpp | 125 - test/twoC_vertical_mode_test.h | 34 - test/twoC_vertical_pseudoaxeengine_test.cpp | 289 -- test/twoC_vertical_pseudoaxeengine_test.h | 32 - test/value_test.cpp | 105 - test/value_test.h | 39 - 190 files changed, 35429 deletions(-) commit f22e9f09857904521d6f4a17a121979090692110 Author: Frédéric-Emmanuel PICCA Date: Thu Jun 5 16:53:10 2008 +0200 * split the bissector mode in two parts hkl + mode src/hkl-pseudoaxis-auto.c | 161 +++++++++++++++++++++++----------------------- 1 file changed, 81 insertions(+), 80 deletions(-) commit 3b2b4b28ad6d143d9678b2af2c75f3c01ad0a4d9 Author: Frédéric-Emmanuel PICCA Date: Thu Jun 5 15:18:29 2008 +0200 * now the pseudoAxes works for on the current and consign part. src/hkl-pseudoaxis-auto.c | 60 +++++++++++++++++++++++++++++++++++++--------- test/hkl-test-pseudoaxis.c | 22 +++++++++++++++-- 2 files changed, 69 insertions(+), 13 deletions(-) commit 784ec30dcdec2c3ee17105c274d81f0ac2403cd4 Author: Frédéric-Emmanuel PICCA Date: Thu Jun 5 13:46:48 2008 +0200 * next refactoring part fuzion of set and set_pseudoAxes in the HklPseudoAxesEngine class. include/hkl/hkl-pseudoaxis.h | 4 +--- src/hkl-pseudoaxis.c | 44 +++++++++++++++++++++----------------------- test/hkl-test-pseudoaxis.c | 7 +++---- 3 files changed, 25 insertions(+), 30 deletions(-) commit e5b404294127c44068eaf0e48613d361c809839b Author: Frédéric-Emmanuel PICCA Date: Thu Jun 5 10:42:09 2008 +0200 * start refactoring the pseudoAxes code. include/hkl/hkl-pseudoaxis.h | 49 ++++---- src/SConscript | 1 + src/hkl-pseudoaxis-auto.c | 223 +++++++++++++++++++++++++++++++++++ src/hkl-pseudoaxis.c | 272 +++++++++---------------------------------- test/hkl-test-pseudoaxis.c | 53 +++++---- 5 files changed, 336 insertions(+), 262 deletions(-) commit 220d4461fc1e8bc7f3d24d915deee320ee0c4f03 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 3 10:57:48 2008 +0200 * add a todo for optimizing the quaternion to matrix. src/hkl-quaternion.c | 1 + 1 file changed, 1 insertion(+) commit d201fa3a264b57b85036c3e98c0ca317363848c4 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 3 10:52:34 2008 +0200 * trivial refactoring in the quaternion class src/hkl-quaternion.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 632aef6586d54304a06b575ad464f3551a3320a1 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 3 09:37:27 2008 +0200 * more readable quaternin to matrix method src/hkl-quaternion.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) commit 86812ee058cb5dde446209be2c73b2b8f6ffec05 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 3 09:32:28 2008 +0200 * modification of the quaternion times quaternion method to be readable. src/hkl-quaternion.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) commit 5bc9efbd69efaa0357f593fdad2d8435b25d464e Author: Frédéric-Emmanuel PICCA Date: Mon Jun 2 18:21:24 2008 +0200 * small optimization in the quaternion class src/hkl-quaternion.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 62ade124087dc34efcfa5c1cf3b8661fe92cef08 Author: Frédéric-Emmanuel PICCA Date: Mon Jun 2 17:54:05 2008 +0200 * first working version of the pseudoAxeEngine set method. src/hkl-pseudoaxis.c | 52 ++++++++++++++++++++++++++++------------------ test/hkl-test-pseudoaxis.c | 2 +- 2 files changed, 33 insertions(+), 21 deletions(-) commit 7b690cbb90a247db980b3935d749fdc7986ef524 Author: Frédéric-Emmanuel PICCA Date: Thu May 8 11:21:25 2008 +0200 * add the path options for the gsl libraries gsl_inc_path and gsl_lib_path SConstruct | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) commit 56094b1c338b85aae82fb98e05e854e23e7c4dbe Author: Frédéric-Emmanuel PICCA Date: Thu May 8 11:09:08 2008 +0200 * remove unneeded part of the Sconsfiles and build a shared library SConstruct | 15 ++++----------- src/SConscript | 57 +++------------------------------------------------------ test/SConscript | 6 ++---- 3 files changed, 9 insertions(+), 69 deletions(-) commit ee71ea3938c3c6d7508b379bd7043e1ba0dff9a0 Author: Frédéric-Emmanuel PICCA Date: Mon May 5 17:22:44 2008 +0200 * first "working" version of the new pseudoAxes. it seems that the hybrid version of the gsl multiroots works better than the hybrids one. The algo is not robust enought for now. If I take 1000 instead of 100 random test they fail. Need to find a better algo. include/hkl/hkl-pseudoaxis.h | 5 ++- src/hkl-pseudoaxis.c | 103 +++++++++++++++++++++--------------------- test/hkl-test-pseudoaxis.c | 105 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 160 insertions(+), 53 deletions(-) commit aaf2e6309abf9ca76123b8fe34b5b5f13ab1982a Author: Frédéric-Emmanuel PICCA Date: Thu May 1 12:51:48 2008 +0200 * add the doc sconscript Documentation/SConscript | 10 +++++++++- SConstruct | 6 ++++-- include/{ => hkl}/SConscript | 3 +-- 3 files changed, 14 insertions(+), 5 deletions(-) commit 522188b4dbd4a20c2c8da398f3ac55bdef195e1c Author: Frédéric-Emmanuel PICCA Date: Thu May 1 12:22:57 2008 +0200 * now the package part seems to work. need more work to install files at the right place SConstruct | 22 ++++-- include/SConscript | 27 +++++++ src/SConscript | 2 +- test/SConscript | 40 +---------- tool/doxygen.py | 203 ----------------------------------------------------- 5 files changed, 48 insertions(+), 246 deletions(-) commit 4238087b43024b756a44357108bd0ceb83254cbb Author: Frédéric-Emmanuel PICCA Date: Tue Apr 29 17:41:53 2008 +0200 * now the update part of the pseudoAxis seems to work. I added the test for the hkl pseudoAxes. README | 3 +- include/hkl/hkl-pseudoaxis-factory.h | 8 +- include/hkl/hkl-pseudoaxis.h | 38 ++++-- src/hkl-pseudoaxis.c | 217 ++++++++++++++++++++++++++++++++++- test/hkl-test-pseudoaxis.c | 96 ++++++++++++++++ 5 files changed, 344 insertions(+), 18 deletions(-) commit 745edd33148a0d9d3758e5b146a4f9d6c169eacb Author: Frédéric-Emmanuel PICCA Date: Tue Apr 29 16:26:17 2008 +0200 * add a HKL_ASSERT_POINTER_EQUAL and print the result of the failed test. test/hkl-test-axis.c | 68 +++++++++++++++++++++++----------------------- test/hkl-test-geometry.c | 10 +++---- test/hkl-test-holder.c | 4 +-- test/hkl-test-lattice.c | 2 +- test/hkl-test-list.c | 12 ++++---- test/hkl-test-matrix.c | 36 ++++++++++++------------ test/hkl-test-parameter.c | 22 +++++++-------- test/hkl-test-quaternion.c | 18 ++++++------ test/hkl-test-sample.c | 2 +- test/hkl-test-source.c | 28 +++++++++---------- test/hkl-test-vector.c | 18 ++++++------ test/hkl-test.h | 17 ++++++++++-- 12 files changed, 124 insertions(+), 113 deletions(-) commit 0d30f6d95868a70a09d3f2134743b877b680a473 Author: Frédéric-Emmanuel PICCA Date: Sun Mar 23 16:17:00 2008 +0100 * first version of the HklPseudoAxisEngine include/hkl/hkl-pseudoaxis-factory.h | 42 ++++++++++++++++ include/hkl/hkl-pseudoaxis.h | 56 ++++++++++++++++++++++ src/SConscript | 1 + src/hkl-pseudoaxis.c | 93 ++++++++++++++++++++++++++++++++++++ test/SConscript | 1 + test/hkl-test-pseudoaxis.c | 27 +++++++++++ test/main.c | 1 + 7 files changed, 221 insertions(+) commit a27341b1f4aea7adbb3a36a5dcb6ab1913170fa7 Author: Frédéric-Emmanuel PICCA Date: Sun Mar 23 15:33:26 2008 +0100 * remove un-needed files include/hkl/hkl-diffractometer.h | 33 ------------------------- include/hkl/hkl-diffractometer_2C.h | 30 ----------------------- src/SConscript | 1 - src/hkl-diffractometer.c | 49 ------------------------------------- 4 files changed, 113 deletions(-) commit 33283de9e18eb2caece98323f386637e474072cf Author: Frédéric-Emmanuel PICCA Date: Fri Mar 21 20:59:39 2008 +0100 * better stop condition in the simplex affinement for now the default simplex method works when the setarting point is not to far from the solution. src/hkl-sample.c | 18 +----------------- test/hkl-test-sample.c | 6 +++--- 2 files changed, 4 insertions(+), 20 deletions(-) commit 8f4855b291865203e346f57635ee96b08a2203ee Author: Frédéric-Emmanuel PICCA Date: Sun Mar 16 21:50:45 2008 +0100 * change the meaning of HKL_FAIL add the affine method now the HKL_FAIL = -1 and HKL_SUCCESS = 0, the affinement do not handle the case of a wrong lattice computation during the simplex affinement. include/hkl/hkl-macros.h | 4 +-- src/hkl-lattice.c | 13 +++++--- src/hkl-parameter.c | 8 ++--- src/hkl-sample.c | 77 +++++++++++++++++++++++++++++++++++------------- test/hkl-test-sample.c | 33 +++++++++++++++++++-- 5 files changed, 102 insertions(+), 33 deletions(-) commit 98dfdc59ae9b72784f9c6a759914d0c791cf4a44 Author: Frédéric-Emmanuel PICCA Date: Sun Mar 16 14:23:06 2008 +0100 * add the first affinement method using GSL (simplex method) include/hkl/hkl-sample.h | 2 +- src/hkl-sample.c | 90 ++++++++++++++++++++++++------------------------ test/SConscript | 2 +- test/hkl-test-sample.c | 56 ++++++++++++++++++++++++++++++ 4 files changed, 103 insertions(+), 47 deletions(-) commit 782780d56c8991efd6699732e28bd91bbbe14288 Author: Frédéric-Emmanuel PICCA Date: Sun Mar 16 12:47:14 2008 +0100 * remove some warnings include/hkl/hkl-diffractometer_2C.h | 12 ++++++------ src/hkl-diffractometer.c | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) commit bd3e167f77c7380a098c35ba34ea8d98a823f067 Author: Frédéric-Emmanuel PICCA Date: Sat Mar 15 13:22:44 2008 +0100 * hkl_smatrix -> hkl_matrix include/hkl/hkl-matrix.h | 30 +++++++++++++++--------------- src/hkl-matrix.c | 34 +++++++++++++++++----------------- src/hkl-sample.c | 32 ++++++++++++++++---------------- test/hkl-test-lattice.c | 2 +- test/hkl-test-matrix.c | 38 +++++++++++++++++++------------------- test/hkl-test-quaternion.c | 2 +- test/hkl-test-sample.c | 4 ++-- 7 files changed, 71 insertions(+), 71 deletions(-) commit b502da0fddd6e72e41ac129d256d4bce260d9eba Author: Frédéric-Emmanuel PICCA Date: Fri Mar 14 17:04:32 2008 +0100 * refactoring of the HklMatrix struct clearer to read. src/hkl-matrix.c | 161 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 92 insertions(+), 69 deletions(-) commit 4f21544482b1b2d1cdd56a4351e8fbf982244c0e Author: Frédéric-Emmanuel PICCA Date: Fri Mar 14 15:10:21 2008 +0100 * now the busing et levy computation is working include/hkl/hkl-sample.h | 10 ++- src/hkl-sample.c | 157 ++++++++++++++++++++++++++++++++--------------- test/hkl-test-sample.c | 70 ++++++++++++++++++++- 3 files changed, 183 insertions(+), 54 deletions(-) commit 244374b573bbef69fe5b43d48f9e7bf8d161f119 Author: Frédéric-Emmanuel PICCA Date: Thu Mar 13 16:59:11 2008 +0100 * remove a bad bug in HklHolder src/hkl-holder.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9f210900302ffacd34c5eac9d89a35d06058ce72 Author: Frédéric-Emmanuel PICCA Date: Thu Mar 13 12:04:57 2008 +0100 * add the new/free/copy method to the HklMatric struct. add also the test functions, and some refactoring. include/hkl/hkl-matrix.h | 24 +++++++++++++++++---- src/hkl-matrix.c | 47 ++++++++++++++++++++++++++++++++++++++++ test/hkl-test-matrix.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 123 insertions(+), 4 deletions(-) commit ea8a14de604703fa07691582e8127b1ae7153dad Author: Frédéric-Emmanuel PICCA Date: Wed Mar 12 14:46:02 2008 +0100 * add the first HklSample structure. include/hkl/hkl-sample.h | 45 ++++++----- src/hkl-sample.c | 200 ++++++++++++++++++++++++++++++++++++++++++----- test/SConscript | 1 + test/hkl-test-sample.c | 106 +++++++++++++++++++++++++ test/main.c | 1 + 5 files changed, 316 insertions(+), 37 deletions(-) commit 61992ee06ad1b4491a2ec61f8f9ab32d8d44dc4d Author: Frédéric-Emmanuel PICCA Date: Thu Mar 6 15:47:34 2008 +0100 * add the hkl_list_get_by_idx method include/hkl/hkl-list.h | 2 ++ src/hkl-list.c | 7 +++++++ test/hkl-test-list.c | 28 ++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) commit 8c29b7d9c05451979a6e84079dbe19c3ed6660a3 Author: Frédéric-Emmanuel PICCA Date: Thu Mar 6 15:32:24 2008 +0100 * modification of the managed list to allow easy new_copy. include/hkl/hkl-list.h | 5 ++++- src/hkl-list.c | 24 ++++++++++++++++++++++- test/hkl-test-list.c | 53 +++++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 75 insertions(+), 7 deletions(-) commit 148843ad1bea637a7f0193809a973e1c4366874a Author: Frédéric-Emmanuel PICCA Date: Thu Mar 6 13:42:05 2008 +0100 * the new_copy method to the HklDetector structure include/hkl/hkl-detector.h | 1 + src/hkl-detector.c | 10 ++++++++++ 2 files changed, 11 insertions(+) commit b5b48196313238f6eae61423e226255cf4686ab4 Author: Frédéric-Emmanuel PICCA Date: Wed Mar 5 16:21:49 2008 +0100 * add all geometry in a factory header. use the hkl_geometry_factory_new(type, ...) to create the proper geometry. you can use the type: HKL_GEOMETRY_TWOC_VERTICAL, HKL_GEOMETRY_EULERIAN4C_VERTICAL, HKL_GEOMETRY_KAPPA4C_VERTICAL, HKL_GEOMETRY_EULERIAN6C, HKL_GEOMETRY_KAPPA6C include/hkl/hkl-geometry-factory.h | 124 +++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) commit f61000fcd3c9ea4e0c75c353d15ba7840acd5939 Author: Frédéric-Emmanuel PICCA Date: Wed Mar 5 14:49:59 2008 +0100 * add the HklDetector class with test methods only 0D detector now. include/hkl/hkl-detector.h | 24 +++++++++++++++ src/SConscript | 2 +- src/hkl-detector.c | 37 ++++++++++++++++++++++ test/SConscript | 2 +- test/hkl-test-detector.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++ test/main.c | 2 +- 6 files changed, 140 insertions(+), 3 deletions(-) commit 3485666cd6ccd0481b0ccb2f14dfbda3f3da9366 Author: Frédéric-Emmanuel PICCA Date: Wed Mar 5 14:10:12 2008 +0100 * add get_axis and update to the HklGeometry struct with test methods include/hkl/hkl-geometry.h | 6 ++++- src/hkl-geometry.c | 20 ++++++++++++++++ test/hkl-test-geometry.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+), 1 deletion(-) commit d40b4429052124fa61b9153d1d676e998abae4a6 Author: Frédéric-Emmanuel PICCA Date: Wed Mar 5 13:48:05 2008 +0100 * complete the holder test suite. hkl_vector_cmp return 0 is both vector are equals 1 otherwise include/hkl/hkl-holder.h | 7 +++ src/hkl-holder.c | 50 +++++++++++++++++-- src/hkl-vector.c | 8 +-- test/hkl-test-holder.c | 118 +++++++++++++++++++++++++++++++++++++-------- test/hkl-test-matrix.c | 2 +- test/hkl-test-quaternion.c | 4 +- test/hkl-test-source.c | 2 +- test/hkl-test-vector.c | 12 ++--- 8 files changed, 166 insertions(+), 37 deletions(-) commit 7147a7f14b2d8269a10d358ae631032d9a5d0016 Author: Frédéric-Emmanuel PICCA Date: Wed Mar 5 11:21:06 2008 +0100 * indentation src/usage.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) commit 307a972dd1fecb5503a5df14d4b0bf6c917c4dc4 Author: Frédéric-Emmanuel PICCA Date: Wed Mar 5 11:20:28 2008 +0100 lest hkl-macros.h be compatible with c++ include/hkl/hkl-macros.h | 4 ++++ 1 file changed, 4 insertions(+) commit cd34319de875c55a7d068fe65a319717b02887be Author: Frédéric-Emmanuel PICCA Date: Wed Mar 5 11:15:23 2008 +0100 * add the hkl-axis test methods now an axis config contain a dirty flag that set by the set_config method. this flag is used to recompute or not the holders quaternions. include/hkl/hkl-axis.h | 10 ++++ src/hkl-axis.c | 28 +++++++++- test/SConscript | 1 + test/hkl-test-axis.c | 146 +++++++++++++++++++++++++++++++++++++++++++++++++ test/main.c | 1 + 5 files changed, 185 insertions(+), 1 deletion(-) commit f2e19227d85247d9aad32f3a96141458193f705c Author: Frédéric-Emmanuel PICCA Date: Wed Feb 20 17:27:18 2008 +0100 * add the new new_copy and set method to the Hklquaternion include/hkl/hkl-quaternion.h | 9 +++++++++ src/hkl-quaternion.c | 42 ++++++++++++++++++++++++++++++++++++++++++ test/hkl-test-quaternion.c | 31 +++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+) commit 2a3bd9739f85661ff4e19b3bc835f734abd6c951 Author: Frédéric-Emmanuel PICCA Date: Mon Feb 11 17:32:00 2008 +0100 * add a get_holder method to the geometry include/hkl/hkl-geometry.h | 1 + src/SConscript | 3 ++- src/hkl-geometry.c | 9 +++++++++ test/SConscript | 1 + test/hkl-test-geometry.c | 3 +++ test/main.c | 1 + 6 files changed, 17 insertions(+), 1 deletion(-) commit 755158dd5431598bc71d1ccc061ede35bccef7e8 Author: Frédéric-Emmanuel PICCA Date: Tue Feb 5 15:35:14 2008 +0100 * remove the HklHolders an put directly in the HklGeometry include/hkl/hkl-geometry.h | 15 +++-- include/hkl/hkl-holders.h | 24 -------- src/SConscript | 1 - src/hkl-geometry.c | 73 ++++++++++++++++++++---- src/hkl-holders.c | 63 -------------------- test/SConscript | 2 +- test/{hkl-test-holders.c => hkl-test-geometry.c} | 20 +++---- test/main.c | 2 +- 8 files changed, 84 insertions(+), 116 deletions(-) commit 62efc16c24039ca5b38df67624104275f34d686c Author: Frédéric-Emmanuel PICCA Date: Tue Feb 5 15:08:35 2008 +0100 * add the copy constructor for HklHolder and HklHolders include/hkl/hkl-holder.h | 1 + include/hkl/hkl-holders.h | 5 +++-- src/hkl-holder.c | 50 ++++++++++++++++++++++++++++++++++++---------- src/hkl-holders.c | 33 ++++++++++++++++++++++++++---- src/usage.c | 22 +++++++++++++++++++- test/hkl-test-holder.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 144 insertions(+), 18 deletions(-) commit 72e02496a62b0404dd4f5a24f3e5f4e8c8105a7c Author: Frédéric-Emmanuel PICCA Date: Tue Feb 5 13:54:57 2008 +0100 * add get_idx in the HklList + test include/hkl/hkl-list.h | 2 ++ src/hkl-list.c | 11 +++++++++++ test/hkl-test-list.c | 18 ++++++++++++++++++ 3 files changed, 31 insertions(+) commit b90077da68d58d8d208a603d00e8d2a89d915181 Author: Frédéric-Emmanuel PICCA Date: Tue Feb 5 13:45:58 2008 +0100 * add a copy contructor to HklAxis include/hkl/hkl-axis.h | 1 + src/hkl-axis.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+) commit ab6a17715499959f1ce43e5ae55c72eb4ccc6cc2 Author: Frédéric-Emmanuel PICCA Date: Tue Feb 5 09:07:09 2008 +0100 * add the gitignore file .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) commit 1c208475db11937a574c49639e655cb3f1c9f316 Author: Frédéric-Emmanuel PICCA Date: Mon Feb 4 17:28:17 2008 +0100 * now the managed list take a deallocator pointer function include/hkl/hkl-list.h | 4 ++-- src/hkl-list.c | 14 +++++++------- test/hkl-test-list.c | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) commit 7a8e32b4a39ebab38d167c0c313f64b6ca596e69 Author: Frédéric-Emmanuel PICCA Date: Mon Feb 4 14:33:43 2008 +0100 * remove the HklAxes struct include/hkl/hkl-axes.h | 25 --------- include/hkl/hkl-holder.h | 11 ++-- include/hkl/hkl-holders.h | 3 +- src/SConscript | 5 +- src/hkl-axes.c | 55 ------------------ src/hkl-holder.c | 54 +++++++++++++++--- src/hkl-holders.c | 8 +-- test/SConscript | 1 - test/hkl-test-axis.c | 140 ---------------------------------------------- test/hkl-test-holder.c | 107 +++++++++++++++++++++++++++++++++-- test/main.c | 1 - 11 files changed, 162 insertions(+), 248 deletions(-) commit 01c0e705098639320a1da1cf44bb4266cf689758 Author: Frédéric-Emmanuel PICCA Date: Mon Feb 4 13:58:07 2008 +0100 * use HklList in the HklHolder and HklHolders struct. include/hkl/hkl-holder.h | 8 +------- include/hkl/hkl-holders.h | 5 ++--- src/hkl-holder.c | 39 ++++++++------------------------------- src/hkl-holders.c | 35 ++++++++++------------------------- test/hkl-test-holders.c | 6 +++--- 5 files changed, 24 insertions(+), 69 deletions(-) commit 4e4d869d9498549380719006f5e58d1a7011eaac Author: Frédéric-Emmanuel PICCA Date: Mon Feb 4 13:35:04 2008 +0100 * refactoring of axes using the HklList The aim of this refactoring is to supress HklAxes. include/hkl/hkl-axes.h | 12 ++++------- include/hkl/hkl-axis.h | 4 +++- include/hkl/hkl-holder.h | 5 +++-- include/hkl/hkl-holders.h | 6 +----- src/hkl-axes.c | 51 +++++++++++++---------------------------------- src/hkl-axis.c | 16 ++++++++++++++- src/hkl-holders.c | 25 ++++++++++------------- test/hkl-test-axis.c | 31 +++++++++++++++------------- test/hkl-test-holder.c | 3 +++ 9 files changed, 70 insertions(+), 83 deletions(-) commit ed89e10b8217b898b352e198afe3cd54cfb32f7e Author: Frédéric-Emmanuel PICCA Date: Fri Feb 1 17:18:25 2008 +0100 * [Hklsource] change the set signature. Now return 0 if success -1 otherwise. include/hkl/hkl-source.h | 9 +++++---- src/hkl-source.c | 11 ++++++++--- 2 files changed, 13 insertions(+), 7 deletions(-) commit 19ac276128bae56edfc41a63af2dbb2fb442948f Author: Frédéric-Emmanuel PICCA Date: Fri Feb 1 17:08:40 2008 +0100 * HklSource add new / new_copy now the direction member is a pointer. include/hkl/hkl-source.h | 10 +++--- src/hkl-source.c | 74 ++++++++++++++++++++++++++----------------- test/hkl-test-source.c | 82 ++++++++++++++++++++++++++++++++++++++---------- 3 files changed, 117 insertions(+), 49 deletions(-) commit d342aa0eb04e735f07fb05a6ef059fe1f1360dbe Author: Frédéric-Emmanuel PICCA Date: Fri Feb 1 14:28:40 2008 +0100 * update the HklLattice struct now it use HklParameters* instead of HklParameter. include/hkl/hkl-lattice.h | 28 +++-- src/hkl-lattice.c | 310 +++++++++++++++++++++++++++------------------- test/SConscript | 2 +- test/hkl-test-lattice.c | 199 +++++++++++++++++------------ test/main.c | 2 +- 5 files changed, 325 insertions(+), 216 deletions(-) commit 38eb424e1536c766c82c7e3b289234820075ac4c Author: Frédéric-Emmanuel PICCA Date: Fri Feb 1 11:37:37 2008 +0100 * svector -> vector normalization include/hkl/hkl-matrix.h | 4 +- include/hkl/hkl-quaternion.h | 4 +- include/hkl/hkl-vector.h | 49 ++++++++++--------- src/SConscript | 2 +- src/hkl-axes.c | 2 +- src/hkl-matrix.c | 14 +++--- src/hkl-quaternion.c | 8 +-- src/hkl-source.c | 10 ++-- src/hkl-vector.c | 114 +++++++++++++++++++++++++++---------------- test/SConscript | 2 +- test/hkl-test-matrix.c | 14 +++--- test/hkl-test-quaternion.c | 12 ++--- test/hkl-test-source.c | 2 +- test/hkl-test-vector.c | 104 ++++++++++++++++++++++++++++----------- test/main.c | 4 +- 15 files changed, 215 insertions(+), 130 deletions(-) commit 768f2403b92c34f39544a8d975f3a4a78eb6180d Author: Frédéric-Emmanuel PICCA Date: Fri Feb 1 11:12:19 2008 +0100 * add a new_copy method to the HklParameter struct include/hkl/hkl-parameter.h | 13 +++++----- src/hkl-parameter.c | 58 ++++++++++++++++++++++++++++----------------- test/hkl-test-parameter.c | 48 +++++++++++++++++++++++++++---------- 3 files changed, 79 insertions(+), 40 deletions(-) commit 0af0377c2714a6162cd9ef12d55ccac5e9886bc4 Author: Frédéric-Emmanuel PICCA Date: Fri Feb 1 10:35:02 2008 +0100 * HklList can manage or not the memory, add a foreach method For now the HklList can only managed memory that must be release with a simple free. include/hkl/hkl-list.h | 9 +++++++++ src/hkl-list.c | 31 +++++++++++++++++++++++++++---- test/hkl-test-list.c | 37 +++++++++++++++++++++++++++++++++++-- 3 files changed, 71 insertions(+), 6 deletions(-) commit 792c1634693c14e2214bc0c284dcda6b6637d149 Author: Frédéric-Emmanuel PICCA Date: Thu Jan 31 17:40:47 2008 +0100 * add the hklList struct include/hkl/hkl-list.h | 28 +++++++++++++++++ src/SConscript | 2 ++ src/hkl-list.c | 63 +++++++++++++++++++++++++++++++++++++++ test/SConscript | 1 + test/hkl-test-list.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++ test/main.c | 1 + 6 files changed, 176 insertions(+) commit af1efa92f594a8e8e9c32dc7905f34542b249dbf Author: Frédéric-Emmanuel PICCA Date: Thu Jan 31 13:23:10 2008 +0100 * update the README file to explain the compilation procedure README | 40 ++++++++++------------------------------ 1 file changed, 10 insertions(+), 30 deletions(-) commit 0eead3f93fd48ed362aa582186e45b5f890a7dc7 Author: Frédéric-Emmanuel PICCA Date: Thu Jan 31 11:56:59 2008 +0100 * switch to 2008 year in the copyright include/hkl/HKLException.h | 2 +- include/hkl/HolderList.h | 2 +- include/hkl/affinement.h | 2 +- include/hkl/affinement_simplex.h | 2 +- include/hkl/affinementlist.h | 2 +- include/hkl/axe.h | 2 +- include/hkl/axe_rotation.h | 2 +- include/hkl/axefactory.h | 2 +- include/hkl/constant.h | 2 +- include/hkl/convenience.h | 2 +- include/hkl/derived_mode.h | 2 +- include/hkl/derived_pseudoaxeengine.h | 2 +- include/hkl/diffractometer.h | 2 +- include/hkl/diffractometerfactory.h | 2 +- include/hkl/eulerian4C_vertical_diffractometer.h | 2 +- include/hkl/eulerian4C_vertical_geometry.h | 2 +- include/hkl/eulerian4C_vertical_mode.h | 2 +- include/hkl/eulerian4C_vertical_pseudoaxeengine.h | 2 +- include/hkl/eulerian6C_diffractometer.h | 2 +- include/hkl/eulerian6C_geometry.h | 2 +- include/hkl/eulerian6C_mode.h | 2 +- include/hkl/eulerian6C_pseudoaxeengine.h | 2 +- include/hkl/fitparameter.h | 2 +- include/hkl/fitparameterlist.h | 2 +- include/hkl/geometry.h | 2 +- include/hkl/geometry_kappa.h | 2 +- include/hkl/hklobject.h | 2 +- include/hkl/holder.h | 2 +- include/hkl/interval.h | 2 +- include/hkl/kappa4C_vertical_diffractometer.h | 2 +- include/hkl/kappa4C_vertical_geometry.h | 2 +- include/hkl/kappa4C_vertical_mode.h | 2 +- include/hkl/kappa4C_vertical_pseudoaxeengine.h | 2 +- include/hkl/kappa6C_diffractometer.h | 2 +- include/hkl/kappa6C_geometry.h | 2 +- include/hkl/kappa6C_mode.h | 2 +- include/hkl/kappa6C_pseudoaxeengine.h | 2 +- include/hkl/lattice.h | 2 +- include/hkl/mode.h | 2 +- include/hkl/modelist.h | 2 +- include/hkl/mymap.h | 2 +- include/hkl/object.h | 2 +- include/hkl/observer.h | 2 +- include/hkl/parameter.h | 2 +- include/hkl/parameterlist.h | 2 +- include/hkl/portability.h | 2 +- include/hkl/pseudoaxe.h | 2 +- include/hkl/pseudoaxeengine.h | 2 +- include/hkl/pseudoaxeenginelist.h | 2 +- include/hkl/pseudoaxelist.h | 2 +- include/hkl/quaternion.h | 2 +- include/hkl/range.h | 2 +- include/hkl/reflection.h | 2 +- include/hkl/reflection_monocrystal.h | 2 +- include/hkl/reflectionfactory.h | 2 +- include/hkl/reflectionlist.h | 2 +- include/hkl/sample.h | 2 +- include/hkl/sample_monocrystal.h | 2 +- include/hkl/samplefactory.h | 2 +- include/hkl/samplelist.h | 2 +- include/hkl/source.h | 2 +- include/hkl/strbuf.h | 2 +- include/hkl/svector.h | 2 +- include/hkl/twoC_vertical_diffractometer.h | 2 +- include/hkl/twoC_vertical_geometry.h | 2 +- include/hkl/twoC_vertical_mode.h | 2 +- include/hkl/twoC_vertical_pseudoaxeengine.h | 2 +- include/hkl/value.h | 2 +- src/HKLException.cpp | 2 +- src/affinement.cpp | 2 +- src/affinement_simplex.cpp | 2 +- src/affinementlist.cpp | 2 +- src/axe.cpp | 2 +- src/axe_rotation.cpp | 2 +- src/axefactory.cpp | 2 +- src/constant.cpp | 2 +- src/convenience.cpp | 2 +- src/diffractometer.cpp | 2 +- src/diffractometerfactory.cpp | 2 +- src/eulerian4C_vertical_diffractometer.cpp | 2 +- src/eulerian4C_vertical_geometry.cpp | 2 +- src/eulerian4C_vertical_mode.cpp | 2 +- src/eulerian4C_vertical_pseudoaxeengine.cpp | 2 +- src/eulerian6C_diffractometer.cpp | 2 +- src/eulerian6C_geometry.cpp | 2 +- src/eulerian6C_pseudoaxeengine.cpp | 2 +- src/fitparameter.cpp | 2 +- src/fitparameterlist.cpp | 2 +- src/geometry.cpp | 2 +- src/geometry_kappa.cpp | 2 +- src/hklobject.cpp | 2 +- src/holder.cpp | 2 +- src/interval.cpp | 2 +- src/kappa4C_vertical_diffractometer.cpp | 2 +- src/kappa4C_vertical_geometry.cpp | 2 +- src/kappa4C_vertical_pseudoaxeengine.cpp | 2 +- src/kappa6C_diffractometer.cpp | 2 +- src/kappa6C_geometry.cpp | 2 +- src/lattice.cpp | 2 +- src/mode.cpp | 2 +- src/modelist.cpp | 2 +- src/object.cpp | 2 +- src/observer.cpp | 2 +- src/parameter.cpp | 2 +- src/parameterlist.cpp | 2 +- src/pseudoaxe.cpp | 2 +- src/pseudoaxeengine.cpp | 2 +- src/pseudoaxeenginelist.cpp | 2 +- src/pseudoaxelist.cpp | 2 +- src/quaternion.cpp | 2 +- src/range.cpp | 2 +- src/reflection.cpp | 2 +- src/reflection_monocrystal.cpp | 2 +- src/reflectionfactory.cpp | 2 +- src/reflectionlist.cpp | 2 +- src/sample.cpp | 2 +- src/sample_monocrystal.cpp | 2 +- src/samplefactory.cpp | 2 +- src/samplelist.cpp | 2 +- src/source.cpp | 2 +- src/strbuf.cpp | 2 +- src/svector.cpp | 2 +- src/twoC_vertical_diffractometer.cpp | 2 +- src/twoC_vertical_geometry.cpp | 2 +- src/twoC_vertical_mode.cpp | 2 +- src/twoC_vertical_pseudoaxeengine.cpp | 2 +- src/value.cpp | 2 +- test/affinement_simplex_test.cpp | 2 +- test/affinement_simplex_test.h | 2 +- test/axe_rotation_test.cpp | 2 +- test/axe_rotation_test.h | 2 +- test/diffractometer_eulerian4C_test.cpp | 2 +- test/diffractometer_eulerian4C_test.h | 2 +- test/diffractometer_kappa4C_test.cpp | 2 +- test/diffractometer_kappa4C_test.h | 2 +- test/diffractometer_kappa6C_test.cpp | 2 +- test/diffractometer_kappa6C_test.h | 2 +- test/diffractometer_test.cpp | 2 +- test/diffractometer_test.h | 2 +- test/diffractometer_twoC_test.cpp | 2 +- test/diffractometer_twoC_test.h | 2 +- test/fitparameter_test.cpp | 2 +- test/fitparameter_test.h | 2 +- test/geometry_eulerian4C_test.cpp | 2 +- test/geometry_eulerian4C_test.h | 2 +- test/geometry_eulerian6C_test.cpp | 2 +- test/geometry_eulerian6C_test.h | 2 +- test/geometry_kappa4C_test.cpp | 2 +- test/geometry_kappa4C_test.h | 2 +- test/geometry_kappa6C_test.cpp | 2 +- test/geometry_kappa6C_test.h | 2 +- test/geometry_test.cpp | 2 +- test/geometry_test.h | 2 +- test/geometry_twoC_test.cpp | 2 +- test/geometry_twoC_test.h | 2 +- test/hklobject_test.cpp | 2 +- test/hklobject_test.h | 2 +- test/holder_test.cpp | 2 +- test/holder_test.h | 2 +- test/holderlist_test.cpp | 2 +- test/holderlist_test.h | 2 +- test/interval_test.cpp | 2 +- test/interval_test.h | 2 +- test/lattice_test.cpp | 2 +- test/lattice_test.h | 2 +- test/libHKL_test.cpp | 2 +- test/main.cpp | 2 +- test/mode_eulerian4C_test.cpp | 2 +- test/mode_eulerian4C_test.h | 2 +- test/mode_kappa4C_test.cpp | 2 +- test/mode_kappa4C_test.h | 2 +- test/mode_kappa6C_test.cpp | 2 +- test/mode_kappa6C_test.h | 2 +- test/mode_twoC_test.cpp | 2 +- test/mode_twoC_test.h | 2 +- test/object_test.cpp | 2 +- test/object_test.h | 2 +- test/parameter_test.cpp | 2 +- test/parameter_test.h | 2 +- test/pseudoaxe_eulerian4C_test.cpp | 2 +- test/pseudoaxe_eulerian4C_test.h | 2 +- test/pseudoaxe_eulerian6C_test.cpp | 2 +- test/pseudoaxe_eulerian6C_test.h | 2 +- test/pseudoaxe_kappa4C_test.cpp | 2 +- test/pseudoaxe_kappa4C_test.h | 2 +- test/pseudoaxe_kappa6C_test.cpp | 2 +- test/pseudoaxe_kappa6C_test.h | 2 +- test/pseudoaxe_twoC_test.cpp | 2 +- test/pseudoaxe_twoC_test.h | 2 +- test/quaternion_test.cpp | 2 +- test/quaternion_test.h | 2 +- test/range_test.cpp | 2 +- test/range_test.h | 2 +- test/reflection_test.cpp | 2 +- test/reflection_test.h | 2 +- test/reflectionlist_test.cpp | 2 +- test/reflectionlist_test.h | 2 +- test/sample_test.cpp | 2 +- test/sample_test.h | 2 +- test/samplelist_test.cpp | 2 +- test/samplelist_test.h | 2 +- test/source_test.cpp | 2 +- test/source_test.h | 2 +- test/svecmat_test.cpp | 2 +- test/svecmat_test.h | 2 +- test/value_test.cpp | 2 +- test/value_test.h | 2 +- 207 files changed, 207 insertions(+), 207 deletions(-) commit cb0e45c867e5cb8322a064d1c94c8060c186d6b4 Author: Frédéric-Emmanuel PICCA Date: Thu Jan 31 11:45:47 2008 +0100 * add GPL 3 or + licence include/hkl/HKLException.h | 21 +++++++++++++++++++++ include/hkl/HolderList.h | 21 +++++++++++++++++++++ include/hkl/affinement.h | 21 +++++++++++++++++++++ include/hkl/affinement_simplex.h | 21 +++++++++++++++++++++ include/hkl/affinementlist.h | 21 +++++++++++++++++++++ include/hkl/axe.h | 21 +++++++++++++++++++++ include/hkl/axe_rotation.h | 21 +++++++++++++++++++++ include/hkl/axefactory.h | 21 +++++++++++++++++++++ include/hkl/constant.h | 21 +++++++++++++++++++++ include/hkl/convenience.h | 21 +++++++++++++++++++++ include/hkl/derived_mode.h | 21 +++++++++++++++++++++ include/hkl/derived_pseudoaxeengine.h | 21 +++++++++++++++++++++ include/hkl/diffractometer.h | 21 +++++++++++++++++++++ include/hkl/diffractometerfactory.h | 21 +++++++++++++++++++++ include/hkl/eulerian4C_vertical_diffractometer.h | 21 +++++++++++++++++++++ include/hkl/eulerian4C_vertical_geometry.h | 21 +++++++++++++++++++++ include/hkl/eulerian4C_vertical_mode.h | 21 +++++++++++++++++++++ include/hkl/eulerian4C_vertical_pseudoaxeengine.h | 21 +++++++++++++++++++++ include/hkl/eulerian6C_diffractometer.h | 21 +++++++++++++++++++++ include/hkl/eulerian6C_geometry.h | 21 +++++++++++++++++++++ include/hkl/eulerian6C_mode.h | 21 +++++++++++++++++++++ include/hkl/eulerian6C_pseudoaxeengine.h | 21 +++++++++++++++++++++ include/hkl/fitparameter.h | 21 +++++++++++++++++++++ include/hkl/fitparameterlist.h | 21 +++++++++++++++++++++ include/hkl/geometry.h | 21 +++++++++++++++++++++ include/hkl/geometry_kappa.h | 21 +++++++++++++++++++++ include/hkl/hklobject.h | 21 +++++++++++++++++++++ include/hkl/holder.h | 21 +++++++++++++++++++++ include/hkl/interval.h | 21 +++++++++++++++++++++ include/hkl/kappa4C_vertical_diffractometer.h | 21 +++++++++++++++++++++ include/hkl/kappa4C_vertical_geometry.h | 21 +++++++++++++++++++++ include/hkl/kappa4C_vertical_mode.h | 21 +++++++++++++++++++++ include/hkl/kappa4C_vertical_pseudoaxeengine.h | 21 +++++++++++++++++++++ include/hkl/kappa6C_diffractometer.h | 21 +++++++++++++++++++++ include/hkl/kappa6C_geometry.h | 21 +++++++++++++++++++++ include/hkl/kappa6C_mode.h | 21 +++++++++++++++++++++ include/hkl/kappa6C_pseudoaxeengine.h | 21 +++++++++++++++++++++ include/hkl/lattice.h | 21 +++++++++++++++++++++ include/hkl/mode.h | 21 +++++++++++++++++++++ include/hkl/modelist.h | 21 +++++++++++++++++++++ include/hkl/mymap.h | 21 +++++++++++++++++++++ include/hkl/object.h | 21 +++++++++++++++++++++ include/hkl/observer.h | 21 +++++++++++++++++++++ include/hkl/parameter.h | 21 +++++++++++++++++++++ include/hkl/parameterlist.h | 21 +++++++++++++++++++++ include/hkl/portability.h | 21 +++++++++++++++++++++ include/hkl/pseudoaxe.h | 21 +++++++++++++++++++++ include/hkl/pseudoaxeengine.h | 21 +++++++++++++++++++++ include/hkl/pseudoaxeenginelist.h | 21 +++++++++++++++++++++ include/hkl/pseudoaxelist.h | 21 +++++++++++++++++++++ include/hkl/quaternion.h | 21 +++++++++++++++++++++ include/hkl/range.h | 21 +++++++++++++++++++++ include/hkl/reflection.h | 21 +++++++++++++++++++++ include/hkl/reflection_monocrystal.h | 21 +++++++++++++++++++++ include/hkl/reflectionfactory.h | 21 +++++++++++++++++++++ include/hkl/reflectionlist.h | 21 +++++++++++++++++++++ include/hkl/sample.h | 21 +++++++++++++++++++++ include/hkl/sample_monocrystal.h | 21 +++++++++++++++++++++ include/hkl/samplefactory.h | 21 +++++++++++++++++++++ include/hkl/samplelist.h | 21 +++++++++++++++++++++ include/hkl/source.h | 21 +++++++++++++++++++++ include/hkl/strbuf.h | 21 +++++++++++++++++++++ include/hkl/svector.h | 21 +++++++++++++++++++++ include/hkl/twoC_vertical_diffractometer.h | 21 +++++++++++++++++++++ include/hkl/twoC_vertical_geometry.h | 21 +++++++++++++++++++++ include/hkl/twoC_vertical_mode.h | 21 +++++++++++++++++++++ include/hkl/twoC_vertical_pseudoaxeengine.h | 21 +++++++++++++++++++++ include/hkl/value.h | 21 +++++++++++++++++++++ src/HKLException.cpp | 21 +++++++++++++++++++++ src/affinement.cpp | 21 +++++++++++++++++++++ src/affinement_simplex.cpp | 21 +++++++++++++++++++++ src/affinementlist.cpp | 21 +++++++++++++++++++++ src/axe.cpp | 21 +++++++++++++++++++++ src/axe_rotation.cpp | 21 +++++++++++++++++++++ src/axefactory.cpp | 21 +++++++++++++++++++++ src/constant.cpp | 21 +++++++++++++++++++++ src/convenience.cpp | 21 +++++++++++++++++++++ src/diffractometer.cpp | 21 +++++++++++++++++++++ src/diffractometerfactory.cpp | 21 +++++++++++++++++++++ src/eulerian4C_vertical_diffractometer.cpp | 21 +++++++++++++++++++++ src/eulerian4C_vertical_geometry.cpp | 21 +++++++++++++++++++++ src/eulerian4C_vertical_mode.cpp | 21 +++++++++++++++++++++ src/eulerian4C_vertical_pseudoaxeengine.cpp | 21 +++++++++++++++++++++ src/eulerian6C_diffractometer.cpp | 21 +++++++++++++++++++++ src/eulerian6C_geometry.cpp | 21 +++++++++++++++++++++ src/eulerian6C_pseudoaxeengine.cpp | 21 +++++++++++++++++++++ src/fitparameter.cpp | 21 +++++++++++++++++++++ src/fitparameterlist.cpp | 21 +++++++++++++++++++++ src/geometry.cpp | 21 +++++++++++++++++++++ src/geometry_kappa.cpp | 21 +++++++++++++++++++++ src/hklobject.cpp | 21 +++++++++++++++++++++ src/holder.cpp | 21 +++++++++++++++++++++ src/interval.cpp | 21 +++++++++++++++++++++ src/kappa4C_vertical_diffractometer.cpp | 21 +++++++++++++++++++++ src/kappa4C_vertical_geometry.cpp | 21 +++++++++++++++++++++ src/kappa4C_vertical_pseudoaxeengine.cpp | 21 +++++++++++++++++++++ src/kappa6C_diffractometer.cpp | 21 +++++++++++++++++++++ src/kappa6C_geometry.cpp | 21 +++++++++++++++++++++ src/lattice.cpp | 21 +++++++++++++++++++++ src/mode.cpp | 21 +++++++++++++++++++++ src/modelist.cpp | 21 +++++++++++++++++++++ src/object.cpp | 21 +++++++++++++++++++++ src/observer.cpp | 21 +++++++++++++++++++++ src/parameter.cpp | 21 +++++++++++++++++++++ src/parameterlist.cpp | 21 +++++++++++++++++++++ src/pseudoaxe.cpp | 21 +++++++++++++++++++++ src/pseudoaxeengine.cpp | 21 +++++++++++++++++++++ src/pseudoaxeenginelist.cpp | 21 +++++++++++++++++++++ src/pseudoaxelist.cpp | 21 +++++++++++++++++++++ src/quaternion.cpp | 21 +++++++++++++++++++++ src/range.cpp | 21 +++++++++++++++++++++ src/reflection.cpp | 21 +++++++++++++++++++++ src/reflection_monocrystal.cpp | 21 +++++++++++++++++++++ src/reflectionfactory.cpp | 21 +++++++++++++++++++++ src/reflectionlist.cpp | 21 +++++++++++++++++++++ src/sample.cpp | 21 +++++++++++++++++++++ src/sample_monocrystal.cpp | 21 +++++++++++++++++++++ src/samplefactory.cpp | 21 +++++++++++++++++++++ src/samplelist.cpp | 21 +++++++++++++++++++++ src/source.cpp | 21 +++++++++++++++++++++ src/strbuf.cpp | 21 +++++++++++++++++++++ src/svector.cpp | 21 +++++++++++++++++++++ src/twoC_vertical_diffractometer.cpp | 21 +++++++++++++++++++++ src/twoC_vertical_geometry.cpp | 21 +++++++++++++++++++++ src/twoC_vertical_mode.cpp | 21 +++++++++++++++++++++ src/twoC_vertical_pseudoaxeengine.cpp | 21 +++++++++++++++++++++ src/value.cpp | 21 +++++++++++++++++++++ test/affinement_simplex_test.cpp | 21 +++++++++++++++++++++ test/affinement_simplex_test.h | 21 +++++++++++++++++++++ test/axe_rotation_test.cpp | 21 +++++++++++++++++++++ test/axe_rotation_test.h | 21 +++++++++++++++++++++ test/diffractometer_eulerian4C_test.cpp | 21 +++++++++++++++++++++ test/diffractometer_eulerian4C_test.h | 21 +++++++++++++++++++++ test/diffractometer_kappa4C_test.cpp | 21 +++++++++++++++++++++ test/diffractometer_kappa4C_test.h | 21 +++++++++++++++++++++ test/diffractometer_kappa6C_test.cpp | 21 +++++++++++++++++++++ test/diffractometer_kappa6C_test.h | 21 +++++++++++++++++++++ test/diffractometer_test.cpp | 21 +++++++++++++++++++++ test/diffractometer_test.h | 21 +++++++++++++++++++++ test/diffractometer_twoC_test.cpp | 21 +++++++++++++++++++++ test/diffractometer_twoC_test.h | 21 +++++++++++++++++++++ test/fitparameter_test.cpp | 21 +++++++++++++++++++++ test/fitparameter_test.h | 21 +++++++++++++++++++++ test/geometry_eulerian4C_test.cpp | 21 +++++++++++++++++++++ test/geometry_eulerian4C_test.h | 21 +++++++++++++++++++++ test/geometry_eulerian6C_test.cpp | 21 +++++++++++++++++++++ test/geometry_eulerian6C_test.h | 21 +++++++++++++++++++++ test/geometry_kappa4C_test.cpp | 21 +++++++++++++++++++++ test/geometry_kappa4C_test.h | 21 +++++++++++++++++++++ test/geometry_kappa6C_test.cpp | 21 +++++++++++++++++++++ test/geometry_kappa6C_test.h | 21 +++++++++++++++++++++ test/geometry_test.cpp | 21 +++++++++++++++++++++ test/geometry_test.h | 21 +++++++++++++++++++++ test/geometry_twoC_test.cpp | 21 +++++++++++++++++++++ test/geometry_twoC_test.h | 21 +++++++++++++++++++++ test/hklobject_test.cpp | 21 +++++++++++++++++++++ test/hklobject_test.h | 21 +++++++++++++++++++++ test/holder_test.cpp | 21 +++++++++++++++++++++ test/holder_test.h | 21 +++++++++++++++++++++ test/holderlist_test.cpp | 21 +++++++++++++++++++++ test/holderlist_test.h | 21 +++++++++++++++++++++ test/interval_test.cpp | 21 +++++++++++++++++++++ test/interval_test.h | 21 +++++++++++++++++++++ test/lattice_test.cpp | 21 +++++++++++++++++++++ test/lattice_test.h | 21 +++++++++++++++++++++ test/libHKL_test.cpp | 21 +++++++++++++++++++++ test/main.cpp | 21 +++++++++++++++++++++ test/mode_eulerian4C_test.cpp | 21 +++++++++++++++++++++ test/mode_eulerian4C_test.h | 21 +++++++++++++++++++++ test/mode_kappa4C_test.cpp | 21 +++++++++++++++++++++ test/mode_kappa4C_test.h | 21 +++++++++++++++++++++ test/mode_kappa6C_test.cpp | 21 +++++++++++++++++++++ test/mode_kappa6C_test.h | 21 +++++++++++++++++++++ test/mode_twoC_test.cpp | 21 +++++++++++++++++++++ test/mode_twoC_test.h | 21 +++++++++++++++++++++ test/object_test.cpp | 21 +++++++++++++++++++++ test/object_test.h | 21 +++++++++++++++++++++ test/parameter_test.cpp | 21 +++++++++++++++++++++ test/parameter_test.h | 21 +++++++++++++++++++++ test/pseudoaxe_eulerian4C_test.cpp | 21 +++++++++++++++++++++ test/pseudoaxe_eulerian4C_test.h | 21 +++++++++++++++++++++ test/pseudoaxe_eulerian6C_test.cpp | 21 +++++++++++++++++++++ test/pseudoaxe_eulerian6C_test.h | 21 +++++++++++++++++++++ test/pseudoaxe_kappa4C_test.cpp | 21 +++++++++++++++++++++ test/pseudoaxe_kappa4C_test.h | 21 +++++++++++++++++++++ test/pseudoaxe_kappa6C_test.cpp | 21 +++++++++++++++++++++ test/pseudoaxe_kappa6C_test.h | 21 +++++++++++++++++++++ test/pseudoaxe_twoC_test.cpp | 21 +++++++++++++++++++++ test/pseudoaxe_twoC_test.h | 21 +++++++++++++++++++++ test/quaternion_test.cpp | 21 +++++++++++++++++++++ test/quaternion_test.h | 21 +++++++++++++++++++++ test/range_test.cpp | 21 +++++++++++++++++++++ test/range_test.h | 21 +++++++++++++++++++++ test/reflection_test.cpp | 21 +++++++++++++++++++++ test/reflection_test.h | 21 +++++++++++++++++++++ test/reflectionlist_test.cpp | 21 +++++++++++++++++++++ test/reflectionlist_test.h | 21 +++++++++++++++++++++ test/sample_test.cpp | 21 +++++++++++++++++++++ test/sample_test.h | 21 +++++++++++++++++++++ test/samplelist_test.cpp | 21 +++++++++++++++++++++ test/samplelist_test.h | 21 +++++++++++++++++++++ test/source_test.cpp | 21 +++++++++++++++++++++ test/source_test.h | 21 +++++++++++++++++++++ test/svecmat_test.cpp | 21 +++++++++++++++++++++ test/svecmat_test.h | 21 +++++++++++++++++++++ test/value_test.cpp | 21 +++++++++++++++++++++ test/value_test.h | 21 +++++++++++++++++++++ 207 files changed, 4347 insertions(+) commit 0c063b778173c61c57aadc35769f5c191d24097a Author: Frédéric-Emmanuel PICCA Date: Tue Jan 8 16:47:41 2008 +0100 * add the new/free method to the HklParameter struct include/hkl/hkl-parameter.h | 6 ++++++ src/hkl-parameter.c | 24 ++++++++++++++++++++++++ test/hkl-test-parameter.c | 17 +++++++++++++++++ 3 files changed, 47 insertions(+) commit 582eb906fd9db4ec1bd4b61d5716f1440ddb84d1 Author: Frédéric-Emmanuel PICCA Date: Tue Dec 25 18:24:54 2007 +0100 * add new and free method to the HKLSource struct and test methods refactor a part of geometry and diffractometer to use new and free method of most structures. include/hkl/hkl-diffractometer.h | 8 +++++--- include/hkl/hkl-diffractometer_2C.h | 30 +++++++++++++++--------------- include/hkl/hkl-geometry.h | 10 ++++------ include/hkl/hkl-source.h | 4 ++++ src/hkl-diffractometer.c | 16 +++++++++++++--- src/hkl-geometry.c | 18 ++++++++++++++---- src/hkl-source.c | 16 ++++++++++++++++ test/hkl-test-source.c | 12 ++++++++++++ 8 files changed, 83 insertions(+), 31 deletions(-) commit 36650f8c47349bda49e4f6426c1e4e861e7c408c Author: Frédéric-Emmanuel PICCA Date: Tue Dec 25 17:34:40 2007 +0100 * remove unecessary files and small typo include/hkl/hkl-holder.h | 2 -- test/hkl-test-holder.c | 1 - test/holder_test.cpp | 78 ------------------------------------------------ test/holder_test.h | 33 -------------------- 4 files changed, 114 deletions(-) commit 73ac85afb08b655480fa8c02dfce3da2b0fad56b Author: Frédéric-Emmanuel PICCA Date: Thu Dec 20 11:27:24 2007 +0100 * add the HklHolders tests. include/hkl/hkl-holders.h | 2 -- src/hkl-holders.c | 13 +++++++++---- test/SConscript | 3 +-- test/hkl-test-holders.c | 39 +++++++++++++++++++++++++++++++++++++++ test/main.c | 1 + 5 files changed, 50 insertions(+), 8 deletions(-) commit b0b46ec7e034b6422abacb843e5ad85934949979 Author: Frédéric-Emmanuel PICCA Date: Thu Dec 20 09:21:40 2007 +0100 * minor typo changes src/hkl-holders.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 7be4b4fe77a519eb580b8074347ea329911096e8 Author: Frédéric-Emmanuel PICCA Date: Thu Dec 20 00:22:20 2007 +0100 * add the HklHolder tests src/hkl-holder.c | 16 +++++-------- test/SConscript | 1 + test/hkl-test-holder.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ test/main.c | 1 + 4 files changed, 69 insertions(+), 10 deletions(-) commit 289ae5d418cb4f060ac300eeb740982831407850 Author: Frédéric-Emmanuel PICCA Date: Thu Dec 20 00:20:24 2007 +0100 *die if you try to add two axis with the same name but a different axis_v. src/hkl-axes.c | 7 +++++-- test/hkl-test-axis.c | 5 ----- 2 files changed, 5 insertions(+), 7 deletions(-) commit c0f0f1ac56ec44a5ec4e1de7bd967a70d339cab5 Author: Frédéric-Emmanuel PICCA Date: Wed Dec 19 23:57:47 2007 +0100 * remove a bug in the Hklholder class src/hkl-holder.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8e4184f78b44623f4e39b73c963abe9bef4132e2 Author: Frédéric-Emmanuel PICCA Date: Wed Dec 19 23:56:29 2007 +0100 * indentation include/hkl/hkl-macros.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit c7845549930f423dfde84e9b9151f987c8be8d7a Author: Frédéric-Emmanuel PICCA Date: Wed Dec 19 21:08:29 2007 +0100 * remove a bug in the axes list and put a test for it src/hkl-axes.c | 2 +- test/hkl-test-axis.c | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) commit 64e5182ac58601fb1d69b40a246e4b1b02192ddb Author: Frédéric-Emmanuel PICCA Date: Wed Dec 19 20:14:08 2007 +0100 * add the new/free axes tests. include/hkl/hkl-axes.h | 2 -- test/hkl-test-axis.c | 16 ++++++++-------- 2 files changed, 8 insertions(+), 10 deletions(-) commit eb6c657ce67645d92f1a31c4ef11dbb287602573 Author: Frédéric-Emmanuel PICCA Date: Wed Dec 19 19:59:25 2007 +0100 * rename all test files with the right convention test/SConscript | 18 +++++++++--------- test/{axis_test.c => hkl-test-axis.c} | 2 +- test/{interval_test.c => hkl-test-interval.c} | 2 +- test/{lattice_test.c => hkl-test-lattice.c} | 2 +- test/{smatrix_test.c => hkl-test-matrix.c} | 2 +- test/{parameter_test.c => hkl-test-parameter.c} | 2 +- test/{quaternion_test.c => hkl-test-quaternion.c} | 2 +- test/{source_test.c => hkl-test-source.c} | 2 +- test/{svector_test.c => hkl-test-vector.c} | 2 +- test/{test.c => hkl-test.c} | 2 +- test/{test.h => hkl-test.h} | 6 +++--- test/main.c | 2 +- 12 files changed, 22 insertions(+), 22 deletions(-) commit 62904e51058a456303a8d16b8f8cccf7b0344e9c Author: Frédéric-Emmanuel PICCA Date: Wed Dec 19 19:51:37 2007 +0100 * now all tests are OK. test/axis_test.c | 5 ++- test/interval_test.c | 26 ++++++++++++ test/lattice_test.c | 105 ++++++++++++++++++++++++++----------------------- test/parameter_test.c | 2 + test/quaternion_test.c | 16 ++++++++ test/smatrix_test.c | 12 ++++++ test/source_test.c | 30 ++++++++------ test/svector_test.c | 18 +++++++++ test/test.h | 8 +--- 9 files changed, 152 insertions(+), 70 deletions(-) commit c8d26b6c045be29765093335c1ac4f9132f886b5 Author: Frédéric-Emmanuel PICCA Date: Wed Dec 19 16:17:22 2007 +0100 * add the new and free method to the axes holder and holders struct try to find a memory leak but the problem in test suit comes from the HKL_ASSERT_EQUAL macro. It return True if the test pass so I can put only one test per funvtion, this is not good. include/hkl/hkl-axes.h | 6 ++++++ include/hkl/hkl-holder.h | 6 ++++++ src/hkl-axes.c | 18 ++++++++++++++++++ src/hkl-holder.c | 15 +++++++++++++++ src/hkl-holders.c | 15 +++++++++++++++ test/axis_test.c | 45 ++++++++++++++++++++++++--------------------- 6 files changed, 84 insertions(+), 21 deletions(-) commit 15ef7cfedf958161e011f22485a2ace10537dec6 Author: Frédéric-Emmanuel PICCA Date: Wed Dec 19 15:14:38 2007 +0100 * remove the print env.Dump (debugging) test/SConscript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5bcd7e3f16e0f5fff048a8dd8ecbe3b47ee9b982 Author: Frédéric-Emmanuel PICCA Date: Wed Dec 19 15:13:24 2007 +0100 use a better convention for file names. It clearer to read hkl-myclass instead of hklmyclass config-win32.py | 2 - include/hkl/{hklaxes.h => hkl-axes.h} | 2 +- include/hkl/{hklaxis.h => hkl-axis.h} | 6 +-- .../{hkldiffractometer.h => hkl-diffractometer.h} | 2 +- ...diffractometer_2C.h => hkl-diffractometer_2C.h} | 2 +- include/hkl/{hklgeometry.h => hkl-geometry.h} | 4 +- include/hkl/{hklholder.h => hkl-holder.h} | 4 +- include/hkl/{hklholders.h => hkl-holders.h} | 8 +++- include/hkl/{hklinterval.h => hkl-interval.h} | 2 +- include/hkl/{hkllattice.h => hkl-lattice.h} | 4 +- include/hkl/{hklmacros.h => hkl-macros.h} | 0 include/hkl/{hklmatrix.h => hkl-matrix.h} | 4 +- include/hkl/{hklparameter.h => hkl-parameter.h} | 2 +- include/hkl/{hklquaternion.h => hkl-quaternion.h} | 6 +-- include/hkl/hkl-sample.h | 45 ++++++++++++++++++++ include/hkl/{hklsource.h => hkl-source.h} | 2 +- include/hkl/{hklvector.h => hkl-vector.h} | 2 +- src/SConscript | 26 ++++++------ src/{hklaxes.c => hkl-axes.c} | 2 +- src/{hklaxis.c => hkl-axis.c} | 2 +- src/{hkldiffractometer.c => hkl-diffractometer.c} | 4 +- src/{hklgeometry.c => hkl-geometry.c} | 2 +- src/{hklholder.c => hkl-holder.c} | 2 +- src/{hklholders.c => hkl-holders.c} | 2 +- src/{hklinterval.c => hkl-interval.c} | 2 +- src/{hkllattice.c => hkl-lattice.c} | 2 +- src/{hklmatrix.c => hkl-matrix.c} | 6 +-- src/{hklparameter.c => hkl-parameter.c} | 2 +- src/{hklquaternion.c => hkl-quaternion.c} | 8 ++-- src/hkl-sample.c | 48 ++++++++++++++++++++++ src/{hklsource.c => hkl-source.c} | 2 +- src/{hklvector.c => hkl-vector.c} | 6 +-- src/usage.c | 2 +- test/SConscript | 2 +- test/axis_test.c | 2 +- test/interval_test.c | 2 +- test/lattice_test.c | 2 +- test/main.c | 1 + test/parameter_test.c | 2 +- test/quaternion_test.c | 6 +-- test/smatrix_test.c | 4 +- test/source_test.c | 2 +- test/svector_test.c | 4 +- test/test.c | 3 +- 44 files changed, 172 insertions(+), 73 deletions(-) commit d8323e8373f81f632d21d4afae3a717aabcc7d19 Author: Frédéric-Emmanuel PICCA Date: Tue Dec 18 17:53:36 2007 +0100 * now compile with VC6. SConstruct | 2 +- test/SConscript | 23 ++++++++++++----------- test/axis_test.c | 2 ++ test/test.h | 9 +++++---- 4 files changed, 20 insertions(+), 16 deletions(-) commit 2e7e05e38a327038184935b541a838a019597f2b Author: Frédéric-Emmanuel PICCA Date: Fri Dec 14 07:38:48 2007 +0100 * juste add the reflection file src/reflection.c | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) commit 3d497b2f984cca43e0823568e0d09af468b70c66 Author: Frédéric-Emmanuel PICCA Date: Sun Dec 9 22:40:22 2007 +0100 * use the gtk style for the source files. include/hkl/axes.h | 33 ---- include/hkl/axis.h | 31 ---- include/hkl/diffractometer.h | 36 ---- include/hkl/diffractometer_2C.h | 38 ---- include/hkl/geometry.h | 33 ---- include/hkl/hklaxes.h | 25 +++ include/hkl/hklaxis.h | 29 +++ include/hkl/hkldiffractometer.h | 31 ++++ include/hkl/hkldiffractometer_2C.h | 30 +++ include/hkl/hklgeometry.h | 24 +++ include/hkl/hklholder.h | 25 +++ include/hkl/hklholders.h | 25 +++ include/hkl/hklinterval.h | 48 +++++ include/hkl/hkllattice.h | 31 ++++ include/hkl/{config.h => hklmacros.h} | 18 +- include/hkl/hklmatrix.h | 39 ++++ include/hkl/hklparameter.h | 23 +++ include/hkl/hklquaternion.h | 71 +++++++ include/hkl/hklsource.h | 26 +++ include/hkl/hklvector.h | 64 +++++++ include/hkl/holder.h | 33 ---- include/hkl/holders.h | 33 ---- include/hkl/interval.h | 50 ----- include/hkl/lattice.h | 38 ---- include/hkl/parameter.h | 27 --- include/hkl/reflection.h | 184 ++---------------- include/hkl/smatrix.h | 46 ----- include/hkl/source.h | 30 --- include/hkl/svector.h | 71 ------- src/SConscript | 30 +-- src/axis.c | 13 -- src/geometry.c | 12 -- src/{axes.c => hklaxes.c} | 14 +- src/hklaxis.c | 12 ++ src/{diffractometer.c => hkldiffractometer.c} | 10 +- src/hklgeometry.c | 12 ++ src/{holder.c => hklholder.c} | 22 +-- src/{holders.c => hklholders.c} | 13 +- src/{interval.c => hklinterval.c} | 33 ++-- src/{lattice.c => hkllattice.c} | 19 +- src/hklmatrix.c | 180 ++++++++++++++++++ src/{parameter.c => hklparameter.c} | 7 +- src/hklquaternion.c | 164 +++++++++++++++++ src/{source.c => hklsource.c} | 13 +- src/hklvector.c | 256 ++++++++++++++++++++++++++ src/quaternion.c | 164 ----------------- src/smatrix.c | 180 ------------------ src/svector.c | 256 -------------------------- src/usage.c | 2 +- test/axis_test.c | 23 +-- test/interval_test.c | 59 +++--- test/lattice_test.c | 20 +- test/parameter_test.c | 5 +- test/quaternion_test.c | 53 +++--- test/smatrix_test.c | 35 ++-- test/source_test.c | 15 +- test/svector_test.c | 51 +++-- test/test.c | 2 +- 58 files changed, 1342 insertions(+), 1525 deletions(-) commit cb81cfb13de08f368c2d350c5ecca30fc30fec28 Author: Frédéric-Emmanuel PICCA Date: Sun Dec 2 23:22:43 2007 +0100 * add the parameter an lattice C part with tests include/hkl/fitparameter.h | 118 ---------- include/hkl/lattice.h | 250 +++----------------- include/hkl/parameter.h | 75 ++---- src/SConscript | 5 +- src/lattice.c | 238 +++++++++++++++++++ src/lattice.cpp | 571 --------------------------------------------- src/parameter.c | 25 ++ src/parameter.cpp | 46 ---- test/SConscript | 4 +- test/lattice_test.c | 142 +++++++++++ test/lattice_test.cpp | 204 ---------------- test/lattice_test.h | 37 --- test/main.c | 14 +- test/parameter_test.c | 28 +++ test/parameter_test.cpp | 22 -- test/parameter_test.h | 24 -- 16 files changed, 493 insertions(+), 1310 deletions(-) commit b8b7db6212989abf427b24155426d99678c0a35a Author: Frédéric-Emmanuel PICCA Date: Sat Dec 1 22:59:46 2007 +0100 * all tests are OK now. src/SConscript | 1 + src/axes.c | 2 +- src/axis.c | 4 +++- src/diffractometer.c | 1 - test/axis_test.c | 9 ++++++--- 5 files changed, 11 insertions(+), 6 deletions(-) commit b48dd2da540a992e22c7b128895d7bf087eb9bdb Author: Frédéric-Emmanuel PICCA Date: Sat Dec 1 00:47:27 2007 +0100 * refactoring of the C version test do not compile. include/hkl/axes.h | 33 ++ include/hkl/axis.h | 55 +-- include/hkl/config.h | 19 +- include/hkl/diffractometer.h | 341 ++-------------- include/hkl/diffractometer_2C.h | 38 ++ include/hkl/geometry.h | 223 +--------- include/hkl/holder.h | 43 +- include/hkl/holders.h | 33 ++ include/hkl/new_diffractometer.h | 48 --- include/hkl/new_diffractometer_2C.h | 40 -- include/hkl/new_geometry.h | 45 -- include/hkl/source.h | 20 +- src/SConscript | 18 +- src/axes.c | 59 +++ src/axis.c | 165 +------- src/diffractometer.c | 40 ++ src/diffractometer.cpp | 49 --- src/geometry.c | 12 + src/holder.c | 114 ++---- src/holders.c | 41 ++ src/interval.c | 792 +++++++++++++++++------------------- src/new_diffractometer.c | 74 ---- src/new_geometry.c | 36 -- src/quaternion.c | 161 ++++---- src/smatrix.c | 236 ++++++----- src/source.c | 56 +-- 26 files changed, 980 insertions(+), 1811 deletions(-) commit cb89c56cb060e63da61134ac9f0385e59b3c85ee Author: Frédéric-Emmanuel PICCA Date: Wed Nov 21 17:15:27 2007 +0100 * add the axis source test test/SConscript | 2 +- test/axis_test.c | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++++ test/axis_test.cpp | 120 --------------------------------------------------- test/axis_test.h | 25 ----------- test/main.c | 1 + 5 files changed, 126 insertions(+), 146 deletions(-) commit 144be6c394472ce6a0612ffc8a742f31c51ea906 Author: Frédéric-Emmanuel PICCA Date: Wed Nov 21 17:01:25 2007 +0100 * add more C tests (interval + source) include/hkl/config.h | 1 + test/SConscript | 7 +- test/interval_test.c | 285 ++++++++++++++++++++++++++++++++++++++++++++++++ test/interval_test.cpp | 291 ------------------------------------------------- test/interval_test.h | 51 --------- test/libHKL_test.cpp | 16 --- test/main.c | 5 +- test/quaternion_test.c | 42 +++---- test/quaternion_test.h | 6 - test/smatrix_test.c | 107 ++++++++++++++++++ test/source_test.c | 42 +++++++ test/source_test.cpp | 36 ------ test/source_test.h | 27 ----- test/svecmat_test.c | 207 ----------------------------------- test/svecmat_test.h | 6 - test/svector_test.c | 122 +++++++++++++++++++++ test/test.h | 19 +++- 17 files changed, 600 insertions(+), 670 deletions(-) commit 4d992f063aa068fd159cf4cbecce94d3d4c86ed5 Author: Frédéric-Emmanuel PICCA Date: Tue Nov 20 16:36:47 2007 +0100 * refactor the quaternion tests test/SConscript | 2 +- test/main.c | 2 + test/quaternion_test.c | 128 ++++++++++++++++++++++++++++++++++++++++++++++ test/quaternion_test.cpp | 130 ----------------------------------------------- test/quaternion_test.h | 35 +------------ test/svecmat_test.c | 32 ++++++------ test/test.h | 2 +- 7 files changed, 150 insertions(+), 181 deletions(-) commit bcb5b74ed3edc54c2061bfbb392545f0c4b0682a Author: Frédéric-Emmanuel PICCA Date: Tue Nov 20 16:01:13 2007 +0100 * remove the cppunit dependency Add an home made test system. SConstruct | 4 +- src/svector.c | 248 +++++++++++++++++++++++++------------------------- test/SConscript | 32 +++---- test/main.c | 19 ++++ test/main.cpp | 16 ---- test/svecmat_test.c | 205 +++++++++++++++++++++++++++++++++++++++++ test/svecmat_test.cpp | 210 ------------------------------------------ test/svecmat_test.h | 54 +---------- test/test.c | 68 ++++++++++++++ test/test.h | 67 ++++++++++++++ 10 files changed, 498 insertions(+), 425 deletions(-) commit 67931efdc5dd90a5a05eaef33e8c42d19b5f3274 Author: Frédéric-Emmanuel PICCA Date: Tue Oct 30 22:18:33 2007 +0100 * pass all axis tests include/hkl/axis.h | 4 +- src/geometry.cpp | 4 +- test/axis_test.cpp | 131 ++++++++++++++++++++++++++++------------------------- 3 files changed, 74 insertions(+), 65 deletions(-) commit acd06ff9f217bf1fd422c868a55d6b31bf4e0d2a Author: Frédéric-Emmanuel PICCA Date: Tue Oct 30 21:43:37 2007 +0100 * the first part of the axis test is OK config-linux2.py | 1 - src/axis.c | 7 ++++--- test/SConscript | 7 ++++--- test/axis_test.cpp | 36 ++++++++++++++++++++++-------------- 4 files changed, 30 insertions(+), 21 deletions(-) commit d39479e206a97e98894893e4a137bff5e9707a30 Author: Frédéric-Emmanuel PICCA Date: Mon Oct 29 22:02:57 2007 +0100 * work on the axis test (do not compile) include/hkl/axis.h | 4 +- src/axis.c | 34 ++++++++++ test/axis_test.cpp | 189 +++++++++++++++++++++++------------------------------ test/axis_test.h | 12 ++-- 4 files changed, 122 insertions(+), 117 deletions(-) commit 0f17ffcc448678b34bd0cd5fb47165ea7f34db38 Author: Frédéric-Emmanuel PICCA Date: Sun Oct 28 23:07:44 2007 +0100 * start the work on the axis, holder parte. include/hkl/HolderList.h | 34 - include/hkl/axis.h | 4 + include/hkl/derived_pseudoaxeengine.h | 1007 ++++++++++---------- include/hkl/eulerian4C_vertical_geometry.h | 331 +++---- include/hkl/eulerian6C_geometry.h | 391 ++++---- include/hkl/geometry.h | 366 ++++--- include/hkl/holder.h | 208 +--- include/hkl/kappa4C_vertical_geometry.h | 547 ++++++----- include/hkl/kappa6C_geometry.h | 396 ++++---- include/hkl/new_geometry.h | 4 +- include/hkl/new_holder.h | 41 - include/hkl/pseudoaxe.h | 270 +++--- include/hkl/pseudoaxeengine.h | 13 +- include/hkl/twoC_vertical_geometry.h | 263 +++-- include/hkl/twoC_vertical_pseudoaxeengine.h | 187 ++-- src/SConscript | 11 +- src/geometry.cpp | 613 ++++++------ src/{new_holder.c => holder.c} | 2 +- src/holder.cpp | 248 ----- src/pseudoaxe.cpp | 4 +- src/reflection.cpp | 232 ++--- src/sample.cpp | 297 +++--- src/twoC_vertical_geometry.cpp | 564 ++++++----- src/twoC_vertical_mode.cpp | 146 ++- src/twoC_vertical_pseudoaxeengine.cpp | 576 ++++++----- test/SConscript | 18 +- test/{axe_rotation_test.cpp => axis_test.cpp} | 15 +- test/{axe_rotation_test.h => axis_test.h} | 14 +- ...t.cpp => twoC_vertical_diffractometer_test.cpp} | 0 ..._test.h => twoC_vertical_diffractometer_test.h} | 0 ...oC_test.cpp => twoC_vertical_geometry_test.cpp} | 0 ...y_twoC_test.h => twoC_vertical_geometry_test.h} | 0 ...e_twoC_test.cpp => twoC_vertical_mode_test.cpp} | 0 ...{mode_twoC_test.h => twoC_vertical_mode_test.h} | 0 ....cpp => twoC_vertical_pseudoaxeengine_test.cpp} | 0 ...test.h => twoC_vertical_pseudoaxeengine_test.h} | 0 36 files changed, 3066 insertions(+), 3736 deletions(-) commit c3b72d16ef1a97a26e8794253dfea2f994f2b0c2 Author: Frédéric-Emmanuel PICCA Date: Fri Oct 26 16:18:41 2007 +0200 * start working on the axe C++ -> C transition include/hkl/axe.h | 256 --------------------- include/hkl/axe_rotation.h | 150 ------------ include/hkl/axefactory.h | 34 --- include/hkl/{new_axe.h => axis.h} | 6 + include/hkl/holder.h | 424 +++++++++++++--------------------- src/SConscript | 5 +- src/axe.cpp | 279 ----------------------- src/axe_rotation.cpp | 149 ------------ src/axefactory.cpp | 34 --- src/{new_axe.c => axis.c} | 15 +- src/holder.cpp | 465 ++++++++++++++++++++------------------ 11 files changed, 422 insertions(+), 1395 deletions(-) commit 621048230d4eb2041a6c7b394de5b0802c84cb70 Author: Frédéric-Emmanuel PICCA Date: Wed Oct 24 13:54:03 2007 +0200 * working on the C version of the geometry include/hkl/new_axe.h | 51 ++++---- include/hkl/new_diffractometer.h | 48 +++++++ include/hkl/new_diffractometer_2C.h | 40 ++++++ include/hkl/new_geometry.h | 255 +++--------------------------------- include/hkl/new_holder.h | 42 +++--- src/SConscript | 1 + src/new_axe.c | 138 +++++++++++++------ src/new_diffractometer.c | 74 +++++++++++ src/new_geometry.c | 36 +++++ src/new_holder.c | 136 ++++++++++++------- 10 files changed, 449 insertions(+), 372 deletions(-) commit 22cbd15ea9c4d9890f320ed05af1cf12592d8cdd Author: Frédéric-Emmanuel PICCA Date: Thu Oct 4 17:54:49 2007 +0200 * start adding the holder and axe C version include/hkl/config.h | 32 ++++++ include/hkl/new_axe.h | 43 ++++++++ include/hkl/new_geometry.h | 264 +++++++++++++++++++++++++++++++++++++++++++++ include/hkl/new_holder.h | 41 +++++++ src/SConscript | 4 + src/new_axe.c | 72 +++++++++++++ src/new_holder.c | 74 +++++++++++++ src/usage.c | 41 +++++++ 8 files changed, 571 insertions(+) commit 601317ef9c914de05f53531b28a4db0fde448af0 Author: Frédéric-Emmanuel PICCA Date: Tue Oct 2 17:09:54 2007 +0200 * remove gcc warnings src/interval.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 6aafd1c470b22ed7f1f12657521c0d96496f7ef3 Author: Frédéric-Emmanuel PICCA Date: Tue Oct 2 15:53:18 2007 +0200 * source c++ -> source (simpler) win32 compilation is ok now config-linux2.py | 1 + include/hkl/geometry.h | 50 +++---------- include/hkl/mode.h | 5 +- include/hkl/source.h | 130 +++++----------------------------- include/hkl/svector.h | 1 + src/SConscript | 2 +- src/axefactory.cpp | 1 + src/eulerian4C_vertical_geometry.cpp | 18 ++--- src/eulerian6C_geometry.cpp | 14 ++-- src/eulerian6C_pseudoaxeengine.cpp | 8 +-- src/geometry.cpp | 61 ++++++++++------ src/holder.cpp | 2 +- src/interval.c | 20 ++++-- src/kappa4C_vertical_geometry.cpp | 14 ++-- src/kappa6C_geometry.cpp | 14 ++-- src/reflection.cpp | 2 +- src/source.c | 44 ++++++++++++ src/svector.c | 31 +++++++- src/twoC_vertical_geometry.cpp | 20 +++--- src/twoC_vertical_pseudoaxeengine.cpp | 8 +-- test/affinement_simplex_test.cpp | 2 +- test/geometry_eulerian4C_test.cpp | 3 +- test/geometry_eulerian6C_test.cpp | 7 +- test/geometry_kappa4C_test.cpp | 4 +- test/geometry_kappa6C_test.cpp | 4 +- test/geometry_twoC_test.cpp | 5 +- test/mode_eulerian4C_test.cpp | 2 +- test/mode_twoC_test.cpp | 6 +- test/pseudoaxe_eulerian6C_test.cpp | 6 +- test/pseudoaxe_kappa4C_test.cpp | 10 +-- test/pseudoaxe_kappa6C_test.cpp | 8 +-- test/pseudoaxe_twoC_test.cpp | 4 +- test/reflection_test.cpp | 3 +- test/reflection_test.h | 2 +- test/reflectionlist_test.cpp | 10 +-- test/sample_test.cpp | 2 +- test/sample_test.h | 2 +- test/source_test.cpp | 90 +++++------------------ test/source_test.h | 23 ++---- 39 files changed, 278 insertions(+), 361 deletions(-) commit ee4bcceeb75ec2fd5c77a2c8ce4bd6ee82f63b45 Author: Frédéric-Emmanuel PICCA Date: Tue Oct 2 13:09:14 2007 +0200 * add forgotten files include/hkl/smatrix.h | 46 +++++ include/hkl/svector.h | 70 +++++++ src/interval.c | 492 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 608 insertions(+) commit 707e123fd2820f379950e5c2b305b45a0a0afe62 Author: Frédéric-Emmanuel PICCA Date: Tue Oct 2 11:56:35 2007 +0200 * rafactoring de interval C++ -> C (cleaner) include/hkl/config.h | 2 +- include/hkl/interval.h | 242 ++---------- include/hkl/kappa4C_vertical_geometry.h | 50 ++- src/SConscript | 2 +- src/eulerian6C_pseudoaxeengine.cpp | 75 ++-- src/interval.cpp | 639 ------------------------------- src/kappa4C_vertical_pseudoaxeengine.cpp | 14 +- src/twoC_vertical_pseudoaxeengine.cpp | 20 +- test/interval_test.cpp | 439 ++++++++------------- test/interval_test.h | 53 +-- 10 files changed, 331 insertions(+), 1205 deletions(-) commit 4b80bee8317c4ce53629f7e29e4b89ad09685653 Author: Frédéric-Emmanuel PICCA Date: Mon Oct 1 16:58:47 2007 +0200 * split svectmat.h in svector.h and smatrix.h try to have a nicer separation beetween svector and smatrix include/hkl/axe_rotation.h | 2 +- include/hkl/derived_mode.h | 2 +- include/hkl/eulerian4C_vertical_pseudoaxeengine.h | 25 ++---- include/hkl/eulerian6C_pseudoaxeengine.h | 21 ++--- include/hkl/geometry.h | 3 +- include/hkl/kappa4C_vertical_geometry.h | 48 ++--------- include/hkl/lattice.h | 6 +- include/hkl/mode.h | 4 +- include/hkl/quaternion.h | 7 +- include/hkl/reflection.h | 2 +- include/hkl/sample.h | 14 ++-- include/hkl/sample_monocrystal.h | 2 +- include/hkl/source.h | 2 +- include/hkl/svecmat.h | 99 ----------------------- src/axe.cpp | 2 +- src/axe_rotation.cpp | 1 + src/eulerian4C_vertical_mode.cpp | 3 +- src/eulerian4C_vertical_pseudoaxeengine.cpp | 2 +- src/eulerian6C_pseudoaxeengine.cpp | 2 +- src/holder.cpp | 2 +- src/lattice.cpp | 2 + src/quaternion.c | 4 + src/reflection.cpp | 2 +- src/reflection_monocrystal.cpp | 4 +- src/reflectionlist.cpp | 2 +- src/sample.cpp | 2 +- src/sample_monocrystal.cpp | 1 + src/smatrix.c | 6 +- src/source.cpp | 1 + src/svector.c | 6 +- src/twoC_vertical_mode.cpp | 2 +- src/twoC_vertical_pseudoaxeengine.cpp | 2 +- test/affinement_simplex_test.cpp | 1 + test/axe_rotation_test.cpp | 3 + test/geometry_kappa6C_test.cpp | 1 + test/holder_test.cpp | 1 + test/lattice_test.cpp | 1 + test/pseudoaxe_eulerian4C_test.cpp | 4 +- test/pseudoaxe_eulerian6C_test.cpp | 4 +- test/pseudoaxe_twoC_test.cpp | 4 +- test/quaternion_test.cpp | 5 ++ test/reflection_test.cpp | 1 + test/sample_test.cpp | 1 + test/source_test.cpp | 1 + test/svecmat_test.cpp | 24 +++--- test/svecmat_test.h | 2 +- 46 files changed, 110 insertions(+), 226 deletions(-) commit f75f49bad64f0a73205d31160625a058c6c00bfa Author: Frédéric-Emmanuel PICCA Date: Mon Oct 1 16:20:06 2007 +0200 * remove all serialization code include/hkl/affinement.h | 17 +--- include/hkl/affinementlist.h | 17 +--- include/hkl/axe.h | 33 +------ include/hkl/axe_rotation.h | 16 +--- include/hkl/derived_pseudoaxeengine.h | 95 +------------------ include/hkl/diffractometer.h | 16 +--- include/hkl/eulerian4C_vertical_pseudoaxeengine.h | 16 ---- include/hkl/eulerian6C_pseudoaxeengine.h | 32 ------- include/hkl/fitparameter.h | 14 --- include/hkl/fitparameterlist.h | 14 --- include/hkl/geometry.h | 16 +--- include/hkl/geometry_kappa.h | 16 +--- include/hkl/hklobject.h | 15 --- include/hkl/holder.h | 31 ------- include/hkl/interval.h | 14 --- include/hkl/kappa4C_vertical_pseudoaxeengine.h | 15 --- include/hkl/lattice.h | 16 ---- include/hkl/modelist.h | 15 --- include/hkl/mymap.h | 63 ------------- include/hkl/object.h | 15 --- include/hkl/parameter.h | 14 --- include/hkl/parameterlist.h | 14 --- include/hkl/pseudoaxeengine.h | 48 ---------- include/hkl/pseudoaxeenginelist.h | 15 --- include/hkl/range.h | 14 --- include/hkl/reflection.h | 15 --- include/hkl/reflectionlist.h | 15 --- include/hkl/sample.h | 15 --- include/hkl/sample_monocrystal.h | 15 --- include/hkl/samplelist.h | 15 --- include/hkl/twoC_vertical_pseudoaxeengine.h | 45 --------- include/hkl/value.h | 13 --- src/affinement.cpp | 34 ------- src/affinementlist.cpp | 38 -------- src/axe.cpp | 73 --------------- src/axe_rotation.cpp | 25 ----- src/diffractometer.cpp | 40 -------- src/eulerian4C_vertical_pseudoaxeengine.cpp | 27 ------ src/eulerian6C_pseudoaxeengine.cpp | 57 ------------ src/fitparameter.cpp | 31 ------- src/fitparameterlist.cpp | 35 ------- src/geometry.cpp | 26 ------ src/geometry_kappa.cpp | 26 ------ src/hklobject.cpp | 28 ------ src/holder.cpp | 108 ---------------------- src/interval.cpp | 25 ----- src/kappa4C_vertical_pseudoaxeengine.cpp | 28 ------ src/lattice.cpp | 42 --------- src/modelist.cpp | 38 -------- src/object.cpp | 27 ------ src/parameter.cpp | 25 ----- src/parameterlist.cpp | 35 ------- src/pseudoaxeenginelist.cpp | 38 -------- src/range.cpp | 31 ------- src/reflection.cpp | 28 ------ src/reflectionlist.cpp | 46 --------- src/sample.cpp | 30 ------ src/sample_monocrystal.cpp | 32 ------- src/samplelist.cpp | 56 ----------- src/twoC_vertical_pseudoaxeengine.cpp | 82 ---------------- src/value.cpp | 24 ----- test/fitparameter_test.cpp | 29 ------ test/fitparameter_test.h | 2 - test/geometry_eulerian6C_test.cpp | 16 ---- test/geometry_eulerian6C_test.h | 2 - test/geometry_kappa4C_test.cpp | 20 ---- test/geometry_kappa4C_test.h | 2 - test/geometry_kappa6C_test.cpp | 20 ---- test/geometry_kappa6C_test.h | 2 - test/geometry_test.cpp | 16 ---- test/geometry_test.h | 2 - test/geometry_twoC_test.cpp | 16 ---- test/geometry_twoC_test.h | 2 - test/hklobject_test.cpp | 19 ---- test/hklobject_test.h | 2 - test/holderlist_test.cpp | 2 - test/interval_test.cpp | 19 ---- test/interval_test.h | 2 - test/lattice_test.cpp | 18 ---- test/lattice_test.h | 2 - test/object_test.cpp | 18 ---- test/object_test.h | 2 - test/parameter_test.cpp | 18 ---- test/parameter_test.h | 2 - test/range_test.cpp | 19 ---- test/range_test.h | 2 - test/samplelist_test.cpp | 16 ---- test/samplelist_test.h | 2 - test/value_test.cpp | 19 ---- test/value_test.h | 3 - 90 files changed, 9 insertions(+), 2144 deletions(-) commit 8cd30e8a7ff4c9ab59f3a10227946b0e9c17d6cf Author: Frédéric-Emmanuel PICCA Date: Mon Oct 1 15:42:54 2007 +0200 * pass all tests include/hkl/svecmat.h | 2 + src/eulerian4C_vertical_pseudoaxeengine.cpp | 54 ++-- src/eulerian6C_pseudoaxeengine.cpp | 7 +- src/quaternion.c | 68 +++-- src/quaternion.cpp | 374 ---------------------------- src/svector.c | 34 ++- test/SConscript | 10 +- test/diffractometer_eulerian4C_test.cpp | 169 ++++--------- test/diffractometer_eulerian4C_test.h | 2 - test/diffractometer_kappa4C_test.cpp | 65 +---- test/diffractometer_kappa4C_test.h | 2 - test/diffractometer_kappa6C_test.cpp | 75 +----- test/diffractometer_kappa6C_test.h | 2 - test/diffractometer_twoC_test.cpp | 107 +++----- test/diffractometer_twoC_test.h | 2 - test/pseudoaxe_eulerian4C_test.cpp | 182 ++++++-------- test/pseudoaxe_eulerian4C_test.h | 2 - test/pseudoaxe_eulerian6C_test.cpp | 263 +++++++++---------- test/pseudoaxe_eulerian6C_test.h | 2 - test/pseudoaxe_kappa4C_test.cpp | 370 +++++++++++++-------------- test/pseudoaxe_kappa4C_test.h | 2 - test/pseudoaxe_kappa6C_test.cpp | 303 ++++++++++------------ test/pseudoaxe_kappa6C_test.h | 2 - test/pseudoaxe_twoC_test.cpp | 149 +++++------ test/pseudoaxe_twoC_test.h | 2 - test/quaternion_test.cpp | 71 ++++-- test/svecmat_test.cpp | 11 + test/svecmat_test.h | 2 + 28 files changed, 827 insertions(+), 1507 deletions(-) commit f44523ed65c1da302a03ef7aef99d658051e8cba Author: Frédéric-Emmanuel PICCA Date: Fri Sep 28 15:56:53 2007 +0200 * the kappa6c modes are ok test/SConscript | 2 +- test/mode_kappa6C_test.cpp | 307 +++++++++++++++++++++------------------------ test/mode_kappa6C_test.h | 2 - 3 files changed, 145 insertions(+), 166 deletions(-) commit 0d1433eb9feb572fce8c2afc428f2d52f3daae33 Author: Frédéric-Emmanuel PICCA Date: Fri Sep 28 15:52:13 2007 +0200 * the kappa4c modes are ok test/SConscript | 2 +- test/mode_kappa4C_test.cpp | 270 +++++++++++++++++++++------------------------ test/mode_kappa4C_test.h | 2 - 3 files changed, 127 insertions(+), 147 deletions(-) commit f124d703565098a33f8a459e17b902179da6ec5d Author: Frédéric-Emmanuel PICCA Date: Fri Sep 28 15:44:04 2007 +0200 * eulerian4C vertical mode are ok include/hkl/svecmat.h | 2 + src/svector.c | 8 ++ test/SConscript | 2 +- test/mode_eulerian4C_test.cpp | 265 ++++++++++++++++++++---------------------- test/mode_eulerian4C_test.h | 2 - 5 files changed, 134 insertions(+), 145 deletions(-) commit 95a43361e65cf9bb0f1f47cd064d525be273856c Author: Frédéric-Emmanuel PICCA Date: Fri Sep 28 14:40:45 2007 +0200 * twoC modes are ok include/hkl/config.h | 7 +-- test/SConscript | 2 +- test/mode_twoC_test.cpp | 124 ++++++++++++++++++++++-------------------------- test/mode_twoC_test.h | 2 - 4 files changed, 63 insertions(+), 72 deletions(-) commit aca10eff44c0c1a97d3c08d79625e22589efb4c1 Author: Frédéric-Emmanuel PICCA Date: Fri Sep 28 13:58:19 2007 +0200 * the affinement Tests are ok test/SConscript | 4 +- test/affinement_simplex_test.cpp | 141 +++++++++++++++++++-------------------- test/affinement_simplex_test.h | 2 - 3 files changed, 70 insertions(+), 77 deletions(-) commit 2dfb17954d44eedf08f16157d49bbcfda39fd0a4 Author: Frédéric-Emmanuel PICCA Date: Fri Sep 28 13:51:40 2007 +0200 * the SampleTest are ok src/sample_monocrystal.cpp | 4 +- test/SConscript | 2 +- test/sample_test.cpp | 150 +++++++++++++++++---------------------------- test/sample_test.h | 2 - 4 files changed, 59 insertions(+), 99 deletions(-) commit bd0857f8a63f9654725d08396d187308e2565539 Author: Frédéric-Emmanuel PICCA Date: Fri Sep 28 13:32:27 2007 +0200 * the ReflectionList test are ok. src/reflectionfactory.cpp | 4 +++- src/reflectionlist.cpp | 2 +- test/SConscript | 2 +- test/reflectionlist_test.cpp | 50 ++++++++++++++++++++++---------------------- test/reflectionlist_test.h | 2 -- 5 files changed, 30 insertions(+), 30 deletions(-) commit 98d8c0bb11c2902f00a9e4a28769287eff01d4ec Author: Frédéric-Emmanuel PICCA Date: Fri Sep 28 13:18:32 2007 +0200 * the reflection tests passed src/eulerian4C_vertical_pseudoaxeengine.cpp | 7 ++- src/svector.c | 10 +--- test/SConscript | 2 +- test/reflection_test.cpp | 92 ++++++++++++++--------------- test/reflection_test.h | 2 - 5 files changed, 54 insertions(+), 59 deletions(-) commit 7ec138a22b19ca89f26db7c7e0c78038e545d677 Author: Frédéric-Emmanuel PICCA Date: Fri Sep 28 11:32:28 2007 +0200 * now geometry kappa6c is ok test/SConscript | 2 +- test/geometry_kappa6C_test.cpp | 249 +++++++++++++++++++++++------------------ test/geometry_kappa6C_test.h | 4 +- 3 files changed, 140 insertions(+), 115 deletions(-) commit b05db879601d4312733a5f443c34417fdda141b3 Author: Frédéric-Emmanuel PICCA Date: Fri Sep 28 11:15:29 2007 +0200 * now kappa4C geometry is ok test/SConscript | 2 +- test/geometry_kappa4C_test.cpp | 297 ++++++++++++++++++++++------------------- test/geometry_kappa4C_test.h | 4 +- 3 files changed, 164 insertions(+), 139 deletions(-) commit 4c7ae82a6a6973c16d15dfd58171ebe28bed6a71 Author: Frédéric-Emmanuel PICCA Date: Fri Sep 28 11:00:14 2007 +0200 * eulerian6C geometry is ok test/SConscript | 2 +- test/geometry_eulerian6C_test.cpp | 281 ++++++++++++++++++++++---------------- 2 files changed, 161 insertions(+), 122 deletions(-) commit 6a2adb9853e8fa7132b5b38c9c8f1af4c07ea5df Author: Frédéric-Emmanuel PICCA Date: Fri Sep 28 10:43:00 2007 +0200 eulerian4C vertical geometry is ok + remove of constant.h include/hkl/config.h | 3 + include/hkl/constant.h | 43 ------- include/hkl/kappa4C_vertical_geometry.h | 65 +++++----- include/hkl/svecmat.h | 36 ------ include/hkl/value.h | 6 +- src/SConscript | 1 - src/affinement.cpp | 8 +- src/affinement_simplex.cpp | 7 +- src/axe.cpp | 2 +- src/axe_rotation.cpp | 8 +- src/axefactory.cpp | 2 +- src/constant.cpp | 22 ---- src/convenience.cpp | 17 ++- src/eulerian4C_vertical_mode.cpp | 8 +- src/eulerian4C_vertical_pseudoaxeengine.cpp | 18 +-- src/eulerian6C_pseudoaxeengine.cpp | 26 ++-- src/holder.cpp | 2 +- src/lattice.cpp | 36 +++--- src/reflection.cpp | 2 +- src/sample.cpp | 6 +- src/sample_monocrystal.cpp | 6 +- src/source.cpp | 2 +- src/twoC_vertical_pseudoaxeengine.cpp | 24 ++-- src/value.cpp | 19 +-- test/SConscript | 2 +- test/axe_rotation_test.cpp | 13 +- test/geometry_eulerian4C_test.cpp | 190 ++++++++++++++-------------- test/geometry_eulerian4C_test.h | 2 - test/geometry_twoC_test.cpp | 54 ++++---- test/holder_test.cpp | 2 +- test/interval_test.cpp | 31 ++--- test/lattice_test.cpp | 84 ++++++------ test/value_test.cpp | 5 +- 33 files changed, 327 insertions(+), 425 deletions(-) commit 9f1f67a314b9d37d8c904b21cd6af4db2b27d6e0 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 27 19:23:12 2007 +0200 Documentation is the directory of the documentation start to write the user-guide using asciidoc {doc => Documentation}/Doxyfile | 0 {doc => Documentation}/Maxima/E4C_bissector.max | 0 {doc => Documentation}/Maxima/E4C_constant_chi.max | 0 .../Maxima/E4C_constant_chi_phi.max | 0 .../Maxima/E4C_constant_omega.max | 0 {doc => Documentation}/Maxima/E4C_delta_omega.max | 0 {doc => Documentation}/SConscript | 0 {doc => Documentation}/example/SConscript | 0 {doc => Documentation}/example/plot.gnuplot | 0 {doc => Documentation}/example/psi.cpp | 0 {doc => Documentation}/hkl.lyx | 0 {doc => Documentation}/uml/hkl.dia | 0 {doc => Documentation}/uml/next_hkl.dia | 0 Documentation/user-guide.txt | 79 ++++++++++++++++++++++ 14 files changed, 79 insertions(+) commit 8ada71a3c00d92199ac4a30b29bd5fa04e60f11e Author: Frédéric-Emmanuel PICCA Date: Thu Sep 27 19:01:52 2007 +0200 * now the twoC geometry pass the tests. include/hkl/source.h | 17 +------- src/geometry.cpp | 8 +++- src/lattice.cpp | 40 ++++++++---------- src/source.cpp | 27 ++---------- src/svector.c | 4 +- test/SConscript | 8 ++-- test/geometry_twoC_test.cpp | 100 ++++++++++++++++++++++---------------------- test/lattice_test.cpp | 4 +- test/source_test.cpp | 34 ++------------- test/source_test.h | 2 - 10 files changed, 90 insertions(+), 154 deletions(-) commit 27e1d0e96570392dd7e7974fea06d139f1628cc8 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 20 18:38:33 2007 +0200 * now more unit test are working with the C files include/hkl/config.h | 4 + include/hkl/derived_mode.h | 6 +- include/hkl/eulerian4C_vertical_mode.h | 10 +- include/hkl/eulerian4C_vertical_pseudoaxeengine.h | 8 +- include/hkl/eulerian6C_pseudoaxeengine.h | 4 +- include/hkl/mode.h | 33 +++-- include/hkl/svecmat.h | 45 ++++++- include/hkl/twoC_vertical_mode.h | 4 +- src/eulerian4C_vertical_geometry.cpp | 28 ++-- src/eulerian4C_vertical_mode.cpp | 72 +++++------ src/eulerian4C_vertical_pseudoaxeengine.cpp | 103 ++++++++------- src/eulerian6C_geometry.cpp | 36 ++++-- src/eulerian6C_pseudoaxeengine.cpp | 46 ++++--- src/kappa4C_vertical_geometry.cpp | 28 ++-- src/kappa6C_geometry.cpp | 38 ++++-- src/sample_monocrystal.cpp | 73 +++++++++-- src/smatrix.c | 23 ++-- src/svector.c | 62 +++++---- src/twoC_vertical_geometry.cpp | 18 ++- src/twoC_vertical_mode.cpp | 14 +- test/SConscript | 9 +- test/axe_rotation_test.cpp | 149 ++++++++++------------ test/axe_rotation_test.h | 2 - test/geometry_twoC_test.cpp | 74 ++++++++--- test/holder_test.cpp | 62 ++++----- test/holder_test.h | 2 - test/holderlist_test.cpp | 30 +---- test/holderlist_test.h | 2 - test/lattice_test.cpp | 45 +++---- test/source_test.cpp | 55 +++++--- test/source_test.h | 2 +- 31 files changed, 635 insertions(+), 452 deletions(-) commit 33df56287ffe4361713204f94e83141b1000c3b5 Author: Frédéric-Emmanuel PICCA Date: Thu Sep 20 13:59:10 2007 +0200 * add the c files svector.c smatrix.c quaternion.c include/hkl/config.h | 26 +++++++ include/hkl/svecmat.h | 88 +++++++++++++++++++++++ src/geometry.cpp | 8 +-- src/lattice.cpp | 4 +- src/quaternion.c | 131 +++++++++++++++++++++++++++++++++ src/smatrix.c | 179 +++++++++++++++++++++++++++++++++++++++++++++ src/source.cpp | 4 +- src/svector.c | 195 ++++++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 627 insertions(+), 8 deletions(-) commit dfa4716bb49ec441ee3647166330ad56b7156982 Author: Frédéric-Emmanuel PICCA Date: Fri Sep 14 18:54:38 2007 +0200 * working on the C version SConstruct | 13 +- config-win32.py | 1 + include/hkl/axe.h | 11 +- include/hkl/axe_rotation.h | 33 +- include/hkl/geometry.h | 24 +- include/hkl/holder.h | 16 +- include/hkl/lattice.h | 8 +- include/hkl/pseudoaxe.h | 1 + include/hkl/quaternion.h | 264 ++++------------ include/hkl/reflection.h | 24 +- include/hkl/reflection_monocrystal.h | 2 +- include/hkl/reflectionlist.h | 2 +- include/hkl/sample.h | 4 +- include/hkl/sample_monocrystal.h | 12 +- include/hkl/source.h | 34 +- include/hkl/svector.h | 188 ----------- src/SConscript | 5 +- src/axe_rotation.cpp | 56 ++-- src/axefactory.cpp | 4 +- src/geometry.cpp | 202 ++++++------ src/holder.cpp | 8 +- src/lattice.cpp | 155 +++++++--- src/reflection.cpp | 30 +- src/reflection_monocrystal.cpp | 12 +- src/reflectionfactory.cpp | 7 +- src/reflectionlist.cpp | 4 +- src/sample_monocrystal.cpp | 27 +- src/source.cpp | 108 +++---- src/svector.cpp | 584 ----------------------------------- test/SConscript | 8 +- test/quaternion_test.cpp | 214 ++++--------- test/quaternion_test.h | 59 +--- test/svecmat_test.cpp | 351 +++++++-------------- test/svecmat_test.h | 96 ++---- 34 files changed, 695 insertions(+), 1872 deletions(-) commit 583660448352c5f4890c94844b5e6b68954f8583 Merge: 008cf44e 8e803aaf Author: Frédéric-Emmanuel PICCA Date: Wed Sep 12 10:32:07 2007 +0200 Merge branch 'bouml' Conflicts: include/hkl/portability.h test/SConscript commit 8e803aaf1fd1bb8499b0c4c329da467f6c8418be Author: Frédéric-Emmanuel PICCA Date: Wed Sep 12 10:18:28 2007 +0200 * end of the bouml branch. now it compiles on both linux and win32. bouml/hkl/2.session | 2 +- bouml/hkl/hkl.prj | 11 +- include/hkl/HKLException.h | 70 +- include/hkl/HolderList.h | 27 +- include/hkl/affinement.h | 129 +-- include/hkl/affinement_simplex.h | 46 +- include/hkl/affinementlist.h | 283 +++--- include/hkl/axe.h | 495 +++++----- include/hkl/axe_rotation.h | 260 +++--- include/hkl/axefactory.h | 33 +- include/hkl/constant.h | 42 +- include/hkl/derived_mode.h | 125 +-- include/hkl/derived_pseudoaxeengine.h | 952 +++++++++---------- include/hkl/diffractometer.h | 629 ++++++------- include/hkl/diffractometerfactory.h | 66 +- include/hkl/eulerian4C_vertical_diffractometer.h | 24 +- include/hkl/eulerian4C_vertical_geometry.h | 328 ++++--- include/hkl/eulerian4C_vertical_mode.h | 194 ++-- include/hkl/eulerian4C_vertical_pseudoaxeengine.h | 320 ++++--- include/hkl/eulerian6C_diffractometer.h | 93 +- include/hkl/eulerian6C_geometry.h | 390 ++++---- include/hkl/eulerian6C_mode.h | 23 +- include/hkl/eulerian6C_pseudoaxeengine.h | 507 +++++----- include/hkl/fitparameter.h | 210 ++--- include/hkl/fitparameterlist.h | 253 ++--- include/hkl/geometry.h | 465 +++++----- include/hkl/geometry_kappa.h | 71 +- include/hkl/hklobject.h | 80 +- include/hkl/holder.h | 552 +++++------ include/hkl/interval.h | 410 ++++---- include/hkl/kappa4C_vertical_diffractometer.h | 204 ++-- include/hkl/kappa4C_vertical_geometry.h | 553 ++++++----- include/hkl/kappa4C_vertical_mode.h | 28 +- include/hkl/kappa4C_vertical_pseudoaxeengine.h | 281 +++--- include/hkl/kappa6C_diffractometer.h | 19 +- include/hkl/kappa6C_geometry.h | 394 ++++---- include/hkl/kappa6C_mode.h | 23 +- include/hkl/kappa6C_pseudoaxeengine.h | 21 +- include/hkl/lattice.h | 430 ++++----- include/hkl/mode.h | 343 +++---- include/hkl/modelist.h | 283 +++--- include/hkl/mymap.h | 528 +++++------ include/hkl/mystring.h | 54 -- include/hkl/object.h | 307 +++--- include/hkl/observer.h | 85 +- include/hkl/parameter.h | 83 +- include/hkl/parameterlist.h | 181 ++-- include/hkl/portability.h | 22 +- include/hkl/pseudoaxe.h | 265 +++--- include/hkl/pseudoaxeengine.h | 715 +++++++------- include/hkl/pseudoaxeenginelist.h | 77 +- include/hkl/pseudoaxelist.h | 75 +- include/hkl/quaternion.h | 368 ++++---- include/hkl/range.h | 340 +++---- include/hkl/reflection.h | 325 +++---- include/hkl/reflection_monocrystal.h | 87 +- include/hkl/reflectionfactory.h | 52 +- include/hkl/reflectionlist.h | 282 +++--- include/hkl/sample.h | 221 ++--- include/hkl/sample_monocrystal.h | 241 ++--- include/hkl/samplefactory.h | 50 +- include/hkl/samplelist.h | 333 +++---- include/hkl/source.h | 222 ++--- include/hkl/strbuf.h | 19 + include/hkl/svector.h | 187 ++-- include/hkl/twoC_vertical_diffractometer.h | 94 +- include/hkl/twoC_vertical_geometry.h | 260 +++--- include/hkl/twoC_vertical_mode.h | 86 +- include/hkl/twoC_vertical_pseudoaxeengine.h | 262 +++--- include/hkl/value.h | 136 +-- src/HKLException.cpp | 259 +++--- src/SConscript | 2 +- src/affinement.cpp | 159 ++-- src/affinement_simplex.cpp | 134 ++- src/affinementlist.cpp | 491 +++++----- src/axe.cpp | 667 +++++++------ src/axe_rotation.cpp | 346 ++++--- src/axefactory.cpp | 49 +- src/constant.cpp | 19 +- src/diffractometer.cpp | 123 ++- src/diffractometerfactory.cpp | 99 +- src/eulerian4C_vertical_diffractometer.cpp | 83 +- src/eulerian4C_vertical_geometry.cpp | 661 +++++++------ src/eulerian4C_vertical_mode.cpp | 564 ++++++----- src/eulerian4C_vertical_pseudoaxeengine.cpp | 532 ++++++----- src/eulerian6C_diffractometer.cpp | 28 +- src/eulerian6C_geometry.cpp | 760 +++++++-------- src/eulerian6C_pseudoaxeengine.cpp | 797 ++++++++-------- src/fitparameter.cpp | 285 +++--- src/fitparameterlist.cpp | 267 +++--- src/geometry.cpp | 715 +++++++------- src/geometry_kappa.cpp | 110 +-- src/hklobject.cpp | 123 ++- src/holder.cpp | 606 ++++++------ src/interval.cpp | 663 +++++++------ src/kappa4C_vertical_diffractometer.cpp | 85 +- src/kappa4C_vertical_geometry.cpp | 663 +++++++------ src/kappa4C_vertical_pseudoaxeengine.cpp | 306 +++--- src/kappa6C_diffractometer.cpp | 62 +- src/kappa6C_geometry.cpp | 626 ++++++------- src/lattice.cpp | 1033 ++++++++++----------- src/mode.cpp | 31 +- src/modelist.cpp | 495 +++++----- src/mystring.cpp | 87 -- src/object.cpp | 423 ++++----- src/observer.cpp | 153 ++- src/parameter.cpp | 109 +-- src/parameterlist.cpp | 289 +++--- src/pseudoaxe.cpp | 379 ++++---- src/pseudoaxeengine.cpp | 59 +- src/pseudoaxeenginelist.cpp | 165 ++-- src/pseudoaxelist.cpp | 161 ++-- src/quaternion.cpp | 661 ++++++------- src/range.cpp | 363 ++++---- src/reflection.cpp | 267 +++--- src/reflection_monocrystal.cpp | 102 +- src/reflectionfactory.cpp | 71 +- src/reflectionlist.cpp | 545 +++++------ src/sample.cpp | 237 +++-- src/sample_monocrystal.cpp | 324 +++---- src/samplefactory.cpp | 79 +- src/samplelist.cpp | 646 ++++++------- src/source.cpp | 335 ++++--- src/strbuf.cpp | 27 + src/svector.cpp | 963 +++++++++---------- src/twoC_vertical_diffractometer.cpp | 73 +- src/twoC_vertical_geometry.cpp | 535 +++++------ src/twoC_vertical_mode.cpp | 146 ++- src/twoC_vertical_pseudoaxeengine.cpp | 758 +++++++-------- src/value.cpp | 312 +++---- test/SConscript | 1 - test/geometry_eulerian6C_test.cpp | 97 +- test/geometry_kappa4C_test.cpp | 38 +- test/interval_test.cpp | 2 +- test/mystring_test.cpp | 27 - test/mystring_test.h | 24 - test/pseudoaxe_kappa4C_test.cpp | 18 +- test/pseudoaxe_kappa6C_test.cpp | 16 +- 138 files changed, 17577 insertions(+), 18384 deletions(-) commit 2a965af9b7b06452ae4c87f51aa79936590fef4a Author: Frédéric-Emmanuel PICCA Date: Tue Sep 11 10:20:04 2007 +0200 * compile and all test pass on linux bouml/hkl/128258.diagram | 10 +- bouml/hkl/128642.diagram | 34 +- bouml/hkl/132482 | 34 +- bouml/hkl/133122 | 6 +- bouml/hkl/133378 | 154 ++++----- bouml/hkl/136834.bodies | 41 ++- bouml/hkl/136962.bodies | 76 +++-- bouml/hkl/hkl.prj | 2 +- include/hkl/eulerian6C_pseudoaxeengine.h | 38 ++- include/hkl/kappa4C_vertical_geometry.h | 2 +- include/hkl/twoC_vertical_pseudoaxeengine.h | 1 + src/SConscript | 6 +- src/eulerian6C_pseudoaxeengine.cpp | 349 +++++++++----------- src/holder.cpp | 2 +- src/twoC_vertical_pseudoaxeengine.cpp | 14 +- test/SConscript | 10 +- test/axe_rotation_test.cpp | 6 +- test/diffractometer_eulerian4C_test.cpp | 10 +- test/diffractometer_kappa4C_test.cpp | 28 +- test/diffractometer_kappa6C_test.cpp | 28 +- test/diffractometer_test.cpp | 3 +- test/diffractometer_twoC_test.cpp | 4 +- test/fitparameter_test.cpp | 6 +- test/geometry_eulerian4C_test.cpp | 6 +- test/geometry_eulerian6C_test.cpp | 6 +- test/geometry_kappa4C_test.cpp | 22 +- test/geometry_kappa6C_test.cpp | 6 +- test/geometry_twoC_test.cpp | 6 +- test/hklobject_test.cpp | 6 +- test/holder_test.cpp | 2 +- test/interval_test.cpp | 3 +- test/lattice_test.cpp | 6 +- test/mode_eulerian4C_test.cpp | 12 +- test/mode_kappa4C_test.cpp | 26 +- test/mode_kappa4C_test.h | 10 +- test/mode_kappa6C_test.cpp | 27 +- test/mystring_test.cpp | 6 +- test/object_test.cpp | 3 +- test/parameter_test.cpp | 6 +- test/pseudoaxe_eulerian4C_test.cpp | 36 +-- test/pseudoaxe_eulerian6C_test.cpp | 326 +++++++------------ test/pseudoaxe_kappa4C_test.cpp | 40 +-- test/pseudoaxe_kappa6C_test.cpp | 475 ++++++++++------------------ test/quaternion_test.cpp | 6 +- test/range_test.cpp | 3 +- test/sample_test.cpp | 24 +- test/source_test.cpp | 3 +- test/svecmat_test.cpp | 6 +- test/value_test.cpp | 3 +- 49 files changed, 819 insertions(+), 1120 deletions(-) commit ff95a17d5498b7475e0eda8700d787d98e07586f Author: Frédéric-Emmanuel PICCA Date: Wed Sep 5 17:16:04 2007 +0200 * add the Interval class and his test methods bouml/hkl/128060.bodies | 3 + bouml/hkl/128188.diagram | 24 +- bouml/hkl/129794.bodies | 343 ------------- bouml/hkl/130306.diagram | 44 +- bouml/hkl/132994 | 3 +- bouml/hkl/133122 | 85 +--- bouml/hkl/136706.bodies | 51 +- bouml/hkl/153474.bodies | 475 ++++++++++++++++++ bouml/hkl/2.session | 11 +- bouml/hkl/hkl.prj | 823 +++++++++++++++++++++---------- include/hkl/interval.h | 224 +++++++++ include/hkl/kappa4C_vertical_geometry.h | 65 +-- include/hkl/range.h | 125 ----- src/SConscript | 1 + src/interval.cpp | 705 ++++++++++++++++++++++++++ src/kappa4C_vertical_pseudoaxeengine.cpp | 53 +- src/range.cpp | 467 ------------------ src/value.cpp | 3 + test/SConscript | 9 +- test/geometry_kappa4C_test.cpp | 11 +- test/interval_test.cpp | 423 ++++++++++++++++ test/interval_test.h | 44 ++ test/pseudoaxe_kappa4C_test.cpp | 56 +-- test/range_test.cpp | 347 ------------- test/range_test.h | 14 - 25 files changed, 2621 insertions(+), 1788 deletions(-) commit fe0cfa4c3f1c0b6d2ec642502713e32c88c872bb Author: Frédéric-Emmanuel PICCA Date: Fri Aug 31 18:01:38 2007 +0200 * add the Range computation and trigonometric methods. do not pass all tests. bouml/hkl/128188.diagram | 68 +- bouml/hkl/128770 | 14 +- bouml/hkl/129794.bodies | 291 +++++++ bouml/hkl/130050.bodies | 18 +- bouml/hkl/131458.diagram | 2 +- bouml/hkl/131842 | 14 +- bouml/hkl/131842.bodies | 8 +- bouml/hkl/132610.bodies | 8 +- bouml/hkl/132866.bodies | 8 +- bouml/hkl/132994 | 95 +-- bouml/hkl/132994.bodies | 8 +- bouml/hkl/133122 | 313 ++++++- bouml/hkl/133250 | 26 +- bouml/hkl/133634 | 28 +- bouml/hkl/134146 | 16 +- bouml/hkl/136706.bodies | 94 +- bouml/hkl/145026.bodies | 8 +- bouml/hkl/2.session | 11 +- bouml/hkl/generation_settings | 34 +- bouml/hkl/hkl.prj | 587 +++++++------ doc/Doxyfile | 1089 +++++++++++++++++++++++- include/hkl/constant.h | 79 +- include/hkl/derived_pseudoaxeengine.h | 8 +- include/hkl/kappa4C_vertical_diffractometer.h | 90 ++ include/hkl/kappa4C_vertical_geometry.h | 161 ++++ include/hkl/kappa4C_vertical_pseudoaxeengine.h | 15 - include/hkl/pseudoaxeengine.h | 2 +- include/hkl/range.h | 206 ++--- src/SConscript | 4 +- src/axe_rotation.cpp | 18 +- src/constant.cpp | 2 + src/eulerian4C_vertical_geometry.cpp | 8 +- src/eulerian6C_geometry.cpp | 8 +- src/kappa4C_vertical_geometry.cpp | 8 +- src/kappa4C_vertical_pseudoaxeengine.cpp | 101 +-- src/kappa6C_geometry.cpp | 8 +- src/pseudoaxeengine.cpp | 2 +- src/range.cpp | 390 ++++++++- test/SConscript | 10 +- test/mode_kappa4C_test.cpp | 8 +- test/mode_kappa4C_test.h | 10 +- test/pseudoaxe_kappa4C_test.cpp | 446 ++++------ test/range_test.cpp | 347 ++++++++ test/range_test.h | 14 + 44 files changed, 3504 insertions(+), 1181 deletions(-) commit 613c3d1a7bee5ba89fbb71fb78d1c7c92431d50b Author: Frédéric-Emmanuel PICCA Date: Tue Aug 28 15:28:49 2007 +0200 * now the Eulerian4C::Vertical pseudoAxes are OK. bouml/hkl/128770 | 28 +- bouml/hkl/131202.bodies | 2 +- bouml/hkl/131970 | 72 ++-- bouml/hkl/132482 | 2 +- bouml/hkl/134786.bodies | 15 +- bouml/hkl/135042.bodies | 2 +- bouml/hkl/135170.bodies | 10 +- bouml/hkl/136194.bodies | 25 +- bouml/hkl/136322.bodies | 23 +- bouml/hkl/136450.bodies | 1 - bouml/hkl/136578.bodies | 316 +++++++--------- bouml/hkl/137090.bodies | 2 - bouml/hkl/145026.bodies | 2 - bouml/hkl/2.session | 3 +- bouml/hkl/hkl.prj | 2 +- include/hkl/derived_pseudoaxeengine.h | 20 - include/hkl/eulerian4C_vertical_pseudoaxeengine.h | 21 +- include/hkl/pseudoaxeengine.h | 10 +- src/SConscript | 5 +- src/eulerian4C_vertical_pseudoaxeengine.cpp | 339 +++++++---------- src/hklobject.cpp | 2 +- src/pseudoaxe.cpp | 15 +- src/pseudoaxelist.cpp | 2 +- src/twoC_vertical_pseudoaxeengine.cpp | 51 +-- test/SConscript | 2 +- test/pseudoaxe_eulerian4C_test.cpp | 425 ++++++---------------- 26 files changed, 491 insertions(+), 906 deletions(-) commit 0b0ca9a49df717ae85cee6652bff9b8ea7b44b2f Author: Frédéric-Emmanuel PICCA Date: Tue Aug 28 10:16:48 2007 +0200 * the twoC vertical pseudoAxes are working. bouml/hkl/131458.diagram | 4 +- bouml/hkl/132482 | 34 +-- bouml/hkl/134786.bodies | 50 ++-- bouml/hkl/134914.bodies | 5 +- bouml/hkl/135042.bodies | 8 - bouml/hkl/136194.bodies | 81 +++--- bouml/hkl/136322.bodies | 74 +++--- bouml/hkl/136450.bodies | 45 ++-- bouml/hkl/2.session | 8 +- bouml/hkl/hkl.prj | 72 ++--- include/hkl/pseudoaxe.h | 12 +- include/hkl/pseudoaxeengine.h | 3 +- include/hkl/pseudoaxelist.h | 2 - include/hkl/twoC_vertical_pseudoaxeengine.h | 8 +- src/axe.cpp | 3 +- src/pseudoaxe.cpp | 57 ++-- src/pseudoaxeengine.cpp | 6 +- src/pseudoaxelist.cpp | 13 - src/twoC_vertical_pseudoaxeengine.cpp | 220 ++++++++-------- test/SConscript | 3 +- test/affinement_simplex_test.cpp | 2 +- test/axe_rotation_test.cpp | 34 +-- test/diffractometer_eulerian4C_test.cpp | 196 +++++++------- test/diffractometer_kappa4C_test.cpp | 4 +- test/diffractometer_kappa6C_test.cpp | 12 +- test/diffractometer_test.cpp | 40 +-- test/diffractometer_twoC_test.cpp | 164 ++++++------ test/geometry_eulerian4C_test.cpp | 124 ++++----- test/geometry_eulerian6C_test.cpp | 70 ++--- test/geometry_kappa4C_test.cpp | 390 ++++++++++++++-------------- test/geometry_kappa6C_test.cpp | 302 ++++++++++----------- test/geometry_test.cpp | 8 +- test/geometry_twoC_test.cpp | 48 ++-- test/holderlist_test.cpp | 14 +- test/lattice_test.cpp | 2 +- test/mode_eulerian4C_test.cpp | 24 +- test/mode_kappa4C_test.cpp | 20 +- test/mode_kappa6C_test.cpp | 20 +- test/mode_twoC_test.cpp | 176 ++++++------- test/pseudoaxe_eulerian4C_test.cpp | 28 +- test/pseudoaxe_eulerian6C_test.cpp | 12 +- test/pseudoaxe_kappa4C_test.cpp | 22 +- test/pseudoaxe_kappa6C_test.cpp | 18 +- test/pseudoaxe_twoC_test.cpp | 265 ++++++++----------- test/reflectionlist_test.cpp | 22 +- test/sample_test.cpp | 284 ++++++++++---------- 46 files changed, 1459 insertions(+), 1550 deletions(-) commit ba51e6c59239bf0d5d520c5664a2ae3bf5b3f26b Author: Frédéric-Emmanuel PICCA Date: Mon Aug 27 15:20:59 2007 +0200 * now all mode Test pass. Remove a bug in the eulerian4C -> kappa6C Geometry conversion. Add the compute_HKL_consign to the Geometry class. bouml/hkl/129154.bodies | 16 ++-- bouml/hkl/131714.bodies | 38 ++++++++- bouml/hkl/132098 | 2 +- bouml/hkl/132610 | 2 +- bouml/hkl/132994.bodies | 6 +- bouml/hkl/133634 | 2 +- bouml/hkl/139522.bodies | 12 +-- bouml/hkl/139650.bodies | 12 +-- bouml/hkl/139778.bodies | 12 +-- bouml/hkl/139906.bodies | 12 +-- bouml/hkl/140034.bodies | 12 +-- bouml/hkl/140162.bodies | 8 +- bouml/hkl/140290.bodies | 6 +- bouml/hkl/2.session | 5 +- bouml/hkl/hkl.prj | 50 ++++++++--- include/hkl/geometry.h | 11 ++- src/eulerian4C_vertical_mode.cpp | 60 ++++++------- src/geometry.cpp | 50 ++++++++++- src/kappa6C_geometry.cpp | 6 +- src/mystring.cpp | 4 + src/object.cpp | 16 ++-- src/twoC_vertical_mode.cpp | 14 ++-- test/SConscript | 7 +- test/geometry_twoC_test.cpp | 11 ++- test/geometry_twoC_test.h | 4 +- test/mode_eulerian4C_test.cpp | 102 +++++++++++------------ test/mode_kappa4C_test.cpp | 114 ++++++++++++------------- test/mode_kappa6C_test.cpp | 158 +++++++++++++++++------------------ test/mode_twoC_test.cpp | 176 +++++++++++++++++++-------------------- 29 files changed, 527 insertions(+), 401 deletions(-) commit 16f9e073698e8fe0e2003974c8f21c16890d8972 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 27 11:51:52 2007 +0200 * added all Geometries test method for the consign. Now need to do the same for the modes. bouml/hkl/128514 | 2 +- bouml/hkl/131714.bodies | 90 +------- bouml/hkl/131842 | 44 +++- bouml/hkl/131842.bodies | 18 +- bouml/hkl/132354 | 36 ++- bouml/hkl/132482.bodies | 48 ++-- bouml/hkl/132610.bodies | 18 +- bouml/hkl/132866.bodies | 36 ++- bouml/hkl/132994.bodies | 24 +- bouml/hkl/133122 | 44 +++- bouml/hkl/133250 | 31 ++- bouml/hkl/133634 | 52 +++-- bouml/hkl/133890.bodies | 4 +- bouml/hkl/134146 | 2 +- bouml/hkl/145282.bodies | 2 +- bouml/hkl/148482.bodies | 2 +- bouml/hkl/2.session | 5 +- bouml/hkl/hkl.prj | 91 ++------ include/hkl/eulerian4C_vertical_geometry.h | 13 +- include/hkl/eulerian6C_geometry.h | 13 +- include/hkl/geometry.h | 34 +-- include/hkl/kappa4C_vertical_geometry.h | 19 +- include/hkl/kappa6C_geometry.h | 21 +- include/hkl/twoC_vertical_geometry.h | 11 +- src/axe.cpp | 2 +- src/eulerian4C_vertical_geometry.cpp | 36 +-- src/eulerian6C_geometry.cpp | 54 +++-- src/geometry.cpp | 139 ++--------- src/holder.cpp | 2 +- src/kappa4C_vertical_geometry.cpp | 42 ++-- src/kappa6C_geometry.cpp | 48 ++-- src/reflection_monocrystal.cpp | 4 +- src/twoC_vertical_geometry.cpp | 64 ++--- test/SConscript | 8 +- test/geometry_eulerian4C_test.cpp | 142 ++++++++---- test/geometry_eulerian4C_test.h | 12 +- test/geometry_eulerian6C_test.cpp | 151 ++++++++---- test/geometry_eulerian6C_test.h | 16 +- test/geometry_kappa4C_test.cpp | 359 ++++++++++++++++------------- test/geometry_kappa4C_test.h | 16 +- test/geometry_kappa6C_test.cpp | 245 +++++++++++--------- test/geometry_kappa6C_test.h | 12 +- test/geometry_twoC_test.cpp | 15 +- test/sample_test.cpp | 284 +++++++++++------------ 44 files changed, 1230 insertions(+), 1081 deletions(-) commit 52b0f1da87e2a53259023cf74e8e8616124843b6 Author: Frédéric-Emmanuel PICCA Date: Fri Aug 24 16:46:59 2007 +0200 * Now Geometries are aware of the consign. The conversion method take into account the consign. I added the test methos to the TwoC geometry but not the rest of the geometries. So need to add them, and to remove the unwanted method of Geometry that where renamed : getQ -> get_Q and get_Q_consign getSampleQuaternion -> get_sample_quaternion, get_sample_quaternion_consign getSampleRotationMatrix -> get_sample_rotation_matrix, get_sample_rotation_matrix_consign bouml/hkl/128060.bodies | 2 + bouml/hkl/131714.bodies | 122 +++++++++++++++----- bouml/hkl/131842 | 2 +- bouml/hkl/131842.bodies | 179 +++++++++++++++++++---------- bouml/hkl/132354 | 2 +- bouml/hkl/132482.bodies | 173 ++++++++++++++++++++--------- bouml/hkl/132610.bodies | 189 ++++++++++++++++++------------- bouml/hkl/132866.bodies | 177 +++++++++++++++++++---------- bouml/hkl/132994.bodies | 138 ++++++++++++++++------- bouml/hkl/133122 | 2 +- bouml/hkl/133250 | 2 +- bouml/hkl/133634 | 2 +- bouml/hkl/134146 | 2 +- bouml/hkl/145410.bodies | 12 ++ bouml/hkl/2.session | 6 +- bouml/hkl/hkl.prj | 196 +++++++++++++++++++++++++++++++- include/hkl/axe.h | 9 +- include/hkl/geometry.h | 61 ++++++++++ include/hkl/value.h | 2 + src/axe.cpp | 24 +++- src/eulerian4C_vertical_geometry.cpp | 183 ++++++++++++++++++++---------- src/eulerian6C_geometry.cpp | 181 +++++++++++++++++++----------- src/geometry.cpp | 210 ++++++++++++++++++++++++++++++----- src/kappa4C_vertical_geometry.cpp | 197 ++++++++++++++++++-------------- src/kappa6C_geometry.cpp | 144 ++++++++++++++++-------- src/twoC_vertical_geometry.cpp | 177 ++++++++++++++++++++--------- src/value.cpp | 7 ++ test/geometry_twoC_test.cpp | 96 ++++++++++------ test/geometry_twoC_test.h | 12 +- 29 files changed, 1809 insertions(+), 700 deletions(-) commit bf771c516b5b3c056c09b54bb27377d43d40e18c Author: Frédéric-Emmanuel PICCA Date: Fri Aug 24 14:21:00 2007 +0200 * add the consign to the Axe classes and the Holder. It is time to make the modifications in the Geometry class. bouml/hkl/130050.bodies | 61 ++++++++++++++++++++++---------- bouml/hkl/131330.diagram | 16 +++++---- bouml/hkl/131458.diagram | 10 +++--- bouml/hkl/134146 | 80 ++++++++++++++++++++++++++++++++++++++++- bouml/hkl/145282.bodies | 24 ++++++------- bouml/hkl/148482.bodies | 12 ++++++- bouml/hkl/2.session | 11 +++--- bouml/hkl/hkl.prj | 64 +++++++++++++++++++++++++++++++-- include/hkl/axe.h | 38 ++++++++++++++++---- include/hkl/axe_rotation.h | 27 ++++++++++++++ include/hkl/holder.h | 8 +++++ src/axe.cpp | 12 ++----- src/axe_rotation.cpp | 88 ++++++++++++++++++++++++++++++++++++---------- src/holder.cpp | 23 +++++++++++- test/axe_rotation_test.cpp | 45 ++++++++++++++++++++++++ test/holder_test.cpp | 2 ++ 16 files changed, 432 insertions(+), 89 deletions(-) commit 25e3d60cdd4543877880fca14213b18dcc494105 Author: Frédéric-Emmanuel PICCA Date: Fri Aug 24 12:08:39 2007 +0200 * add the consign to the Range class begining of the pseudoAxes refactoring but before we must add the consign to the Axes. bouml/hkl/128002 | 2 +- bouml/hkl/128002.bodies | 6 +- bouml/hkl/128060.bodies | 14 +- bouml/hkl/128130.diagram | 30 +- bouml/hkl/128514.bodies | 68 ++--- bouml/hkl/128642 | 2 +- bouml/hkl/128770.bodies | 6 +- bouml/hkl/128898.bodies | 6 +- bouml/hkl/129154.bodies | 8 +- bouml/hkl/129794.bodies | 112 ++++--- bouml/hkl/129922.bodies | 1 + bouml/hkl/130178.bodies | 15 +- bouml/hkl/131074.bodies | 29 +- bouml/hkl/131330.bodies | 27 +- bouml/hkl/131586.bodies | 24 +- bouml/hkl/131970 | 2 +- bouml/hkl/132482 | 82 +----- bouml/hkl/132610.bodies | 4 +- bouml/hkl/132738.bodies | 4 +- bouml/hkl/133122 | 2 +- bouml/hkl/133378 | 2 +- bouml/hkl/133378.bodies | 20 +- bouml/hkl/133634.bodies | 48 +-- bouml/hkl/134146.bodies | 10 +- bouml/hkl/134274.bodies | 4 +- bouml/hkl/134402.bodies | 8 +- bouml/hkl/134786.bodies | 38 ++- bouml/hkl/134914.bodies | 5 + bouml/hkl/135042.bodies | 4 +- bouml/hkl/135170.bodies | 8 +- bouml/hkl/135426.bodies | 22 +- bouml/hkl/136194.bodies | 34 +-- bouml/hkl/136322.bodies | 18 +- bouml/hkl/136450.bodies | 21 +- bouml/hkl/136578.bodies | 2 +- bouml/hkl/136834.bodies | 2 +- bouml/hkl/139138.bodies | 6 +- bouml/hkl/142466.bodies | 4 +- bouml/hkl/142978.bodies | 6 +- bouml/hkl/143362.bodies | 4 +- bouml/hkl/145410.bodies | 2 +- bouml/hkl/148482.bodies | 35 +-- bouml/hkl/149762.bodies | 196 ++++++------- bouml/hkl/2.session | 8 +- bouml/hkl/hkl.prj | 434 ++++++++++++++++------------ include/hkl/lattice.h | 1 + include/hkl/pseudoaxe.h | 25 +- include/hkl/pseudoaxeengine.h | 13 +- include/hkl/range.h | 127 ++++---- include/hkl/twoC_vertical_pseudoaxeengine.h | 17 -- src/SConscript | 15 +- src/fitparameter.cpp | 11 +- src/fitparameterlist.cpp | 1 + src/lattice.cpp | 25 +- src/object.cpp | 4 +- src/parameter.cpp | 3 +- src/parameterlist.cpp | 1 + src/pseudoaxe.cpp | 42 +-- src/pseudoaxeengine.cpp | 17 ++ src/range.cpp | 160 ++++++---- src/twoC_vertical_pseudoaxeengine.cpp | 106 +++---- src/value.cpp | 10 +- test/SConscript | 2 +- test/pseudoaxe_twoC_test.cpp | 43 +-- test/range_test.cpp | 16 +- 65 files changed, 1023 insertions(+), 1001 deletions(-) commit c61e9bc574bdd6a340b41e287acaa9a43d82a784 Author: Frédéric-Emmanuel PICCA Date: Thu Aug 23 14:32:51 2007 +0200 * end of the Holder Refactoring. The holder have a pointer on the HolderList so it can access all others Holder and the axeList. Remove all using namespace std from the code, so we must put std:: in front of all methods of the std library. bouml/hkl/128002 | 14 +- bouml/hkl/128130.diagram | 36 +- bouml/hkl/128258.diagram | 28 +- bouml/hkl/128514 | 2 +- bouml/hkl/128642 | 10 +- bouml/hkl/128770 | 30 +- bouml/hkl/128770.diagram | 44 +- bouml/hkl/129922 | 2 +- bouml/hkl/131074 | 2 +- bouml/hkl/131970 | 10 +- bouml/hkl/132482 | 26 +- bouml/hkl/132738.diagram | 46 +- bouml/hkl/132994 | 10 +- bouml/hkl/133378 | 18 +- bouml/hkl/134018 | 37 +- bouml/hkl/134146 | 14 +- bouml/hkl/2.session | 10 +- bouml/hkl/cpp_includes | 6 +- bouml/hkl/generation_settings | 3 +- bouml/hkl/hkl.prj | 683 +++++++++++----------- include/hkl/HKLException.h | 2 - include/hkl/affinement.h | 15 +- include/hkl/affinementlist.h | 19 +- include/hkl/axe.h | 31 +- include/hkl/axe_rotation.h | 11 +- include/hkl/axefactory.h | 1 - include/hkl/derived_mode.h | 1 - include/hkl/derived_pseudoaxeengine.h | 32 +- include/hkl/diffractometer.h | 11 +- include/hkl/eulerian4C_vertical_mode.h | 1 - include/hkl/eulerian4C_vertical_pseudoaxeengine.h | 8 +- include/hkl/eulerian6C_pseudoaxeengine.h | 12 +- include/hkl/fitparameter.h | 15 +- include/hkl/fitparameterlist.h | 20 +- include/hkl/geometry.h | 18 +- include/hkl/geometry_kappa.h | 11 +- include/hkl/hklobject.h | 15 +- include/hkl/holder.h | 163 +++++- include/hkl/holderlist.h | 139 ----- include/hkl/kappa4C_vertical_pseudoaxeengine.h | 8 +- include/hkl/lattice.h | 14 +- include/hkl/mode.h | 1 - include/hkl/modelist.h | 19 +- include/hkl/mymap.h | 19 +- include/hkl/mystring.h | 9 +- include/hkl/object.h | 14 +- include/hkl/parameter.h | 15 +- include/hkl/parameterlist.h | 23 +- include/hkl/pseudoaxe.h | 10 +- include/hkl/pseudoaxeengine.h | 28 +- include/hkl/pseudoaxeenginelist.h | 10 +- include/hkl/pseudoaxelist.h | 18 +- include/hkl/quaternion.h | 13 +- include/hkl/range.h | 14 +- include/hkl/reflection.h | 10 +- include/hkl/reflectionlist.h | 14 +- include/hkl/sample.h | 11 +- include/hkl/sample_monocrystal.h | 9 +- include/hkl/samplefactory.h | 4 +- include/hkl/samplelist.h | 21 +- include/hkl/source.h | 14 +- include/hkl/svector.h | 32 +- include/hkl/twoC_vertical_mode.h | 1 - include/hkl/twoC_vertical_pseudoaxeengine.h | 16 +- include/hkl/value.h | 10 +- src/SConscript | 2 +- src/affinement.cpp | 10 +- src/affinementlist.cpp | 12 +- src/axe.cpp | 14 +- src/axe_rotation.cpp | 6 +- src/diffractometer.cpp | 10 +- src/eulerian4C_vertical_pseudoaxeengine.cpp | 6 +- src/eulerian6C_pseudoaxeengine.cpp | 10 +- src/fitparameter.cpp | 14 +- src/fitparameterlist.cpp | 32 +- src/geometry.cpp | 10 +- src/geometry_kappa.cpp | 10 +- src/hklobject.cpp | 6 +- src/holder.cpp | 237 +++++++- src/holderlist.cpp | 195 ------ src/kappa4C_vertical_geometry.cpp | 4 +- src/kappa4C_vertical_pseudoaxeengine.cpp | 4 +- src/lattice.cpp | 6 +- src/modelist.cpp | 12 +- src/mystring.cpp | 18 +- src/object.cpp | 14 +- src/parameter.cpp | 6 +- src/parameterlist.cpp | 34 +- src/pseudoaxe.cpp | 16 +- src/pseudoaxeenginelist.cpp | 28 +- src/pseudoaxelist.cpp | 6 +- src/quaternion.cpp | 12 +- src/range.cpp | 12 +- src/reflection.cpp | 6 +- src/reflectionlist.cpp | 54 +- src/sample.cpp | 26 +- src/sample_monocrystal.cpp | 14 +- src/samplefactory.cpp | 4 +- src/samplelist.cpp | 14 +- src/source.cpp | 6 +- src/svector.cpp | 138 ++--- src/twoC_vertical_pseudoaxeengine.cpp | 20 +- src/value.cpp | 10 +- test/SConscript | 10 +- test/axe_rotation_test.cpp | 2 +- test/fitparameter_test.cpp | 2 +- test/geometry_eulerian4C_test.cpp | 2 +- test/geometry_eulerian6C_test.cpp | 2 +- test/geometry_kappa4C_test.cpp | 2 +- test/geometry_kappa6C_test.cpp | 2 +- test/geometry_twoC_test.cpp | 2 +- test/hklobject_test.cpp | 6 +- test/holder_test.cpp | 18 +- test/holder_test.h | 2 +- test/holderlist_test.cpp | 2 +- test/holderlist_test.h | 2 +- test/lattice_test.cpp | 2 +- test/mode_eulerian4C_test.cpp | 2 +- test/mode_kappa4C_test.cpp | 2 +- test/mode_kappa6C_test.cpp | 2 +- test/mode_twoC_test.cpp | 2 +- test/mystring_test.cpp | 2 +- test/object_test.cpp | 8 +- test/parameter_test.cpp | 2 +- test/pseudoaxe_twoC_test.cpp | 2 +- test/quaternion_test.cpp | 2 +- test/range_test.cpp | 2 +- test/reflection_test.cpp | 2 +- test/reflectionlist_test.cpp | 2 +- test/sample_test.cpp | 4 +- test/samplelist_test.cpp | 4 +- test/source_test.cpp | 2 +- test/svecmat_test.cpp | 4 +- test/value_test.cpp | 2 +- 134 files changed, 1485 insertions(+), 1568 deletions(-) commit cfc73d10502550c0199db91e59d91e97b77afc42 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 21 17:14:11 2007 +0200 * End of the geometry refactoring. (do not compile) Working on the PseudoAxes to set a correct min and max range. bouml/hkl/128188.diagram | 52 ++++--- bouml/hkl/128770 | 18 ++- bouml/hkl/129794.bodies | 12 +- bouml/hkl/131458.diagram | 48 ++---- bouml/hkl/131714.bodies | 8 +- bouml/hkl/131842 | 2 +- bouml/hkl/131842.bodies | 21 +-- bouml/hkl/132482 | 2 +- bouml/hkl/132610.bodies | 62 +++----- bouml/hkl/132866.bodies | 20 ++- bouml/hkl/132994 | 2 +- bouml/hkl/132994.bodies | 129 ++++++++-------- bouml/hkl/133122 | 2 +- bouml/hkl/133250 | 2 +- bouml/hkl/133378 | 2 +- bouml/hkl/133634 | 2 +- bouml/hkl/136194.bodies | 49 +++---- bouml/hkl/136322.bodies | 63 ++++---- bouml/hkl/136706.bodies | 57 ++----- bouml/hkl/136834.bodies | 89 +++++------ bouml/hkl/137090.bodies | 109 +++++++++----- bouml/hkl/144130.bodies | 16 +- bouml/hkl/144258.bodies | 24 +-- bouml/hkl/145026.bodies | 78 +++++----- bouml/hkl/145282.bodies | 16 +- bouml/hkl/148482.bodies | 4 +- bouml/hkl/2.session | 12 +- bouml/hkl/hkl.prj | 245 +++++++++++++++---------------- include/hkl/axe.h | 59 +++----- include/hkl/constant.h | 82 +++++++++++ include/hkl/derived_pseudoaxeengine.h | 182 ++++++++++++++--------- src/axe.cpp | 9 +- src/eulerian4C_vertical_geometry.cpp | 21 +-- src/eulerian6C_geometry.cpp | 20 ++- src/eulerian6C_pseudoaxeengine.cpp | 28 ++-- src/geometry.cpp | 8 +- src/holder.cpp | 4 +- src/kappa4C_vertical_geometry.cpp | 62 +++----- src/kappa4C_vertical_pseudoaxeengine.cpp | 57 ++----- src/kappa6C_diffractometer.cpp | 2 +- src/kappa6C_geometry.cpp | 68 ++++----- src/pseudoaxe.cpp | 1 + src/range.cpp | 12 +- src/twoC_vertical_pseudoaxeengine.cpp | 151 ++++++++++--------- test/SConscript | 21 ++- test/affinement_simplex_test.cpp | 80 +++++----- test/affinement_simplex_test.h | 2 +- test/axe_rotation_test.cpp | 6 +- test/geometry_eulerian4C_test.cpp | 49 ++++--- test/geometry_eulerian4C_test.h | 2 +- test/geometry_eulerian6C_test.cpp | 137 ++++++++--------- test/geometry_eulerian6C_test.h | 2 +- test/geometry_kappa4C_test.cpp | 60 ++++---- test/geometry_kappa6C_test.cpp | 55 +++---- test/geometry_twoC_test.cpp | 48 +++--- test/geometry_twoC_test.h | 2 +- test/holderlist_test.cpp | 4 +- test/mode_kappa4C_test.cpp | 126 ++++++++-------- test/mode_kappa4C_test.h | 2 +- test/mode_kappa6C_test.cpp | 170 ++++++++++----------- test/mode_kappa6C_test.h | 2 +- test/pseudoaxe_eulerian4C_test.cpp | 154 +++++++++---------- test/pseudoaxe_eulerian4C_test.h | 2 +- test/pseudoaxe_eulerian6C_test.cpp | 133 ++++++++--------- test/pseudoaxe_eulerian6C_test.h | 2 +- test/pseudoaxe_kappa4C_test.cpp | 211 +++++++++++++------------- test/pseudoaxe_kappa4C_test.h | 4 +- test/pseudoaxe_kappa6C_test.cpp | 183 ++++++++++++----------- test/pseudoaxe_kappa6C_test.h | 10 +- test/pseudoaxe_twoC_test.cpp | 119 +++++++++------ test/pseudoaxe_twoC_test.h | 2 +- test/reflection_test.cpp | 34 +++-- test/reflection_test.h | 2 +- test/sample_test.cpp | 54 +++---- 74 files changed, 1863 insertions(+), 1727 deletions(-) commit 58c71caa93f3fe82caf53f45934bba4545f52d2d Author: Frédéric-Emmanuel PICCA Date: Sun Aug 19 19:11:53 2007 +0200 * ready to deal with the Geometry Assignation problem. bouml/hkl/128770 | 6 +-- bouml/hkl/2.session | 6 +-- include/hkl/derived_pseudoaxeengine.h | 24 +++++----- src/eulerian6C_diffractometer.cpp | 16 +++---- src/eulerian6C_pseudoaxeengine.cpp | 85 ++++++++++++++++++----------------- src/kappa6C_diffractometer.cpp | 24 +++++----- src/kappa6C_geometry.cpp | 57 ++++++++++++++--------- test/geometry_twoC_test.cpp | 6 ++- 8 files changed, 124 insertions(+), 100 deletions(-) commit 2f65d53e5bdfd92d92710ea37c848d510c4fcae5 Author: Frédéric-Emmanuel PICCA Date: Fri Aug 17 18:04:35 2007 +0200 * close to the end of the refactoring of the geometry. (do not compile) bouml/hkl/128002 | 2 +- bouml/hkl/128060.bodies | 2 +- bouml/hkl/128770 | 2 +- bouml/hkl/129922.diagram | 33 ++- bouml/hkl/130050.bodies | 15 +- bouml/hkl/131330.diagram | 34 +-- bouml/hkl/131458.diagram | 34 +-- bouml/hkl/131842 | 6 +- bouml/hkl/131842.bodies | 91 ++++---- bouml/hkl/131970 | 2 +- bouml/hkl/132354 | 2 +- bouml/hkl/132482.bodies | 17 +- bouml/hkl/132610.bodies | 51 +++-- bouml/hkl/132738.diagram | 50 +++-- bouml/hkl/132866.bodies | 61 ++++-- bouml/hkl/133122 | 42 ++-- bouml/hkl/133250 | 9 +- bouml/hkl/133634 | 46 ++-- bouml/hkl/134146 | 21 +- bouml/hkl/136578.bodies | 4 +- bouml/hkl/137090.bodies | 2 +- bouml/hkl/143490.bodies | 10 +- bouml/hkl/143618.bodies | 10 +- bouml/hkl/143746.bodies | 18 +- bouml/hkl/143874.bodies | 20 +- bouml/hkl/145026.bodies | 2 +- bouml/hkl/145282.bodies | 6 - bouml/hkl/145410.bodies | 44 +--- bouml/hkl/148482.bodies | 64 +----- bouml/hkl/149762.bodies | 38 +++- bouml/hkl/150914.bodies | 13 ++ bouml/hkl/2.session | 12 +- bouml/hkl/hkl.prj | 329 +++++++++++++++++++++------- include/hkl/axe.h | 36 ++- include/hkl/axe_rotation.h | 13 +- include/hkl/axefactory.h | 30 +++ include/hkl/derived_pseudoaxeengine.h | 4 +- include/hkl/diffractometer.h | 21 +- include/hkl/holder.h | 87 +++++++- include/hkl/holderlist.h | 3 + include/hkl/kappa4C_vertical_geometry.h | 18 +- include/hkl/kappa6C_geometry.h | 22 +- src/HKLException.cpp | 2 +- src/SConscript | 14 +- src/axe.cpp | 124 ++--------- src/axe_rotation.cpp | 24 +- src/axefactory.cpp | 34 +++ src/eulerian4C_vertical_diffractometer.cpp | 18 +- src/eulerian4C_vertical_geometry.cpp | 94 ++++---- src/eulerian4C_vertical_pseudoaxeengine.cpp | 4 +- src/eulerian6C_geometry.cpp | 65 ++++-- src/holder.cpp | 68 +----- src/holderlist.cpp | 40 +++- src/kappa4C_vertical_diffractometer.cpp | 22 +- src/kappa4C_vertical_geometry.cpp | 69 +++--- src/kappa6C_diffractometer.cpp | 2 +- src/kappa6C_geometry.cpp | 26 ++- src/twoC_vertical_diffractometer.cpp | 10 +- src/twoC_vertical_geometry.cpp | 16 +- src/value.cpp | 2 +- test/SConscript | 12 +- test/axe_test.cpp | 97 -------- test/axe_test.h | 33 --- test/geometry_test.cpp | 45 +--- test/geometry_test.h | 2 - test/holder_test.cpp | 52 ++--- test/holderlist_test.cpp | 28 ++- test/holderlist_test.h | 5 + 68 files changed, 1184 insertions(+), 1050 deletions(-) commit d6a66ab0ddfc6441c9acf9f77b2fdf2d647be437 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 14 17:51:16 2007 +0200 * start working on the HolderList and its TestCase The holderList must properly manage its memory. The serialization via from/to Stream must be tune. bouml/hkl/128060.bodies | 2 +- bouml/hkl/130050.bodies | 73 ++++++++-------- bouml/hkl/132738.diagram | 18 ++-- bouml/hkl/134146 | 2 +- bouml/hkl/145410.bodies | 3 +- bouml/hkl/148482.bodies | 27 +++--- bouml/hkl/149762.bodies | 67 ++++++++++++--- bouml/hkl/2.session | 12 +-- bouml/hkl/hkl.prj | 218 ++++++++++++++++++++++++++++------------------- include/hkl/holder.h | 6 +- include/hkl/holderlist.h | 24 ++++++ src/axe_rotation.cpp | 139 +++++++++++++++--------------- src/holder.cpp | 32 +++---- src/holderlist.cpp | 86 ++++++++++++++++--- src/value.cpp | 2 +- test/SConscript | 3 +- test/holder_test.cpp | 6 +- test/holderlist_test.cpp | 74 ++++++++++++++++ test/holderlist_test.h | 31 +++++++ 19 files changed, 551 insertions(+), 274 deletions(-) commit b5aa59ffae74482079843b69615288fa796eb654 Author: Frédéric-Emmanuel PICCA Date: Tue Aug 14 10:39:18 2007 +0200 * Holder is working Add the test case of the Holder class. bouml/hkl/132738.diagram | 30 +++---- bouml/hkl/145410.bodies | 85 +++++++++++-------- bouml/hkl/148482.bodies | 22 ++++- bouml/hkl/2.session | 7 +- bouml/hkl/hkl.prj | 14 +++- include/hkl/axe.h | 9 ++ src/axe.cpp | 5 +- src/axe_rotation.cpp | 210 ++++++++++++++++++++++++----------------------- src/holder.cpp | 1 + test/holder_test.cpp | 1 - 10 files changed, 223 insertions(+), 161 deletions(-) commit 70de209fa1673f9086ccd57e1740a08f1e809336 Author: Frédéric-Emmanuel PICCA Date: Mon Aug 13 22:36:15 2007 +0200 * start adding test case of the holder class. bouml/hkl/128002 | 13 +- bouml/hkl/128770 | 2 +- bouml/hkl/130050.bodies | 3 + bouml/hkl/131714.bodies | 95 ++------- bouml/hkl/132354 | 6 +- bouml/hkl/132482.bodies | 34 ++-- bouml/hkl/132738.diagram | 38 ++-- bouml/hkl/133122.bodies | 12 +- bouml/hkl/133378.bodies | 6 +- bouml/hkl/134146 | 2 +- bouml/hkl/137090.bodies | 12 +- bouml/hkl/145026.bodies | 70 +++---- bouml/hkl/145410.bodies | 20 +- bouml/hkl/148482.bodies | 72 +++++-- bouml/hkl/149762.bodies | 32 ++- bouml/hkl/2.session | 8 +- bouml/hkl/hkl.prj | 358 ++++++++++++++++++++++++---------- include/hkl/axe.h | 13 +- include/hkl/derived_pseudoaxeengine.h | 82 ++++---- include/hkl/geometry.h | 64 +++--- include/hkl/geometry_kappa.h | 2 +- include/hkl/holder.h | 39 +++- include/hkl/holderlist.h | 88 ++++++++- src/HKLException.cpp | 2 +- src/SConscript | 24 +-- src/axe.cpp | 124 +++++++----- src/axe_rotation.cpp | 2 + src/geometry.cpp | 116 ++--------- src/geometry_kappa.cpp | 6 +- src/holder.cpp | 125 +++++++++--- src/holderlist.cpp | 70 ++++++- src/reflection.cpp | 12 +- src/sample.cpp | 6 +- src/twoC_vertical_geometry.cpp | 38 ++-- test/SConscript | 3 +- test/geometry_test.cpp | 4 +- test/holder_test.cpp | 100 ++++++++++ test/holder_test.h | 35 ++++ 38 files changed, 1117 insertions(+), 621 deletions(-) commit f773c89502eda9d614357202334ab18dc4da56d1 Author: Frédéric-Emmanuel PICCA Date: Sun Aug 12 23:43:17 2007 +0200 * add all the .h autogenerated files include/hkl/HKLException.h | 74 +++ include/hkl/HolderList.h | 29 ++ include/hkl/affinement.h | 106 ++++ include/hkl/affinement_simplex.h | 42 ++ include/hkl/affinementlist.h | 160 ++++++ include/hkl/axe.h | 268 ++++++++++ include/hkl/axe_rotation.h | 126 +++++ include/hkl/constant.h | 34 ++ include/hkl/convenience.h | 37 ++ include/hkl/derived_mode.h | 93 ++++ include/hkl/derived_pseudoaxeengine.h | 581 ++++++++++++++++++++++ include/hkl/diffractometer.h | 324 ++++++++++++ include/hkl/diffractometerfactory.h | 43 ++ include/hkl/eulerian4C_vertical_diffractometer.h | 29 ++ include/hkl/eulerian4C_vertical_geometry.h | 149 ++++++ include/hkl/eulerian4C_vertical_mode.h | 131 +++++ include/hkl/eulerian4C_vertical_pseudoaxeengine.h | 164 ++++++ include/hkl/eulerian6C_diffractometer.h | 57 +++ include/hkl/eulerian6C_geometry.h | 177 +++++++ include/hkl/eulerian6C_mode.h | 26 + include/hkl/eulerian6C_pseudoaxeengine.h | 256 ++++++++++ include/hkl/fitparameter.h | 131 +++++ include/hkl/fitparameterlist.h | 147 ++++++ include/hkl/geometry.h | 210 ++++++++ include/hkl/geometry_kappa.h | 59 +++ include/hkl/hklobject.h | 75 +++ include/hkl/holder.h | 66 +++ include/hkl/holderlist.h | 32 ++ include/hkl/kappa4C_vertical_diffractometer.h | 29 ++ include/hkl/kappa4C_vertical_geometry.h | 149 ++++++ include/hkl/kappa4C_vertical_mode.h | 30 ++ include/hkl/kappa4C_vertical_pseudoaxeengine.h | 163 ++++++ include/hkl/kappa6C_diffractometer.h | 25 + include/hkl/kappa6C_geometry.h | 177 +++++++ include/hkl/kappa6C_mode.h | 26 + include/hkl/kappa6C_pseudoaxeengine.h | 27 + include/hkl/lattice.h | 239 +++++++++ include/hkl/mode.h | 199 ++++++++ include/hkl/modelist.h | 160 ++++++ include/hkl/mymap.h | 307 ++++++++++++ include/hkl/mystring.h | 55 ++ include/hkl/object.h | 169 +++++++ include/hkl/observer.h | 66 +++ include/hkl/parameter.h | 72 +++ include/hkl/parameterlist.h | 116 +++++ include/hkl/portability.h | 5 + include/hkl/pseudoaxe.h | 151 ++++++ include/hkl/pseudoaxeengine.h | 381 ++++++++++++++ include/hkl/pseudoaxeenginelist.h | 67 +++ include/hkl/pseudoaxelist.h | 80 +++ include/hkl/quaternion.h | 203 ++++++++ include/hkl/range.h | 315 ++++++++++++ include/hkl/reflection.h | 187 +++++++ include/hkl/reflection_monocrystal.h | 59 +++ include/hkl/reflectionfactory.h | 39 ++ include/hkl/reflectionlist.h | 156 ++++++ include/hkl/sample.h | 133 +++++ include/hkl/sample_monocrystal.h | 134 +++++ include/hkl/samplefactory.h | 42 ++ include/hkl/samplelist.h | 183 +++++++ include/hkl/source.h | 135 +++++ include/hkl/svector.h | 185 +++++++ include/hkl/twoC_vertical_diffractometer.h | 33 ++ include/hkl/twoC_vertical_geometry.h | 117 +++++ include/hkl/twoC_vertical_mode.h | 63 +++ include/hkl/twoC_vertical_pseudoaxeengine.h | 190 +++++++ include/hkl/value.h | 138 +++++ 67 files changed, 8631 insertions(+) commit dab80e547f3adaf24cc146727b7dc0e21cde499d Author: Frédéric-Emmanuel PICCA Date: Sun Aug 12 23:41:36 2007 +0200 * redo the refoactoring work and add the autogenerates files. bouml/hkl/128002 | 2 +- bouml/hkl/128002.bodies | 298 ++++++------ bouml/hkl/128060.bodies | 78 ++-- bouml/hkl/128182.bodies | 50 +- bouml/hkl/128310.bodies | 16 +- bouml/hkl/128514 | 12 +- bouml/hkl/128514.bodies | 356 +++++++-------- bouml/hkl/128642 | 12 +- bouml/hkl/128770 | 14 +- bouml/hkl/128770.bodies | 270 +++++------ bouml/hkl/128898.bodies | 26 +- bouml/hkl/129154.bodies | 78 ++-- bouml/hkl/129282.bodies | 4 +- bouml/hkl/129410.bodies | 4 +- bouml/hkl/129538.bodies | 4 +- bouml/hkl/129666.bodies | 42 +- bouml/hkl/129794.bodies | 222 ++++----- bouml/hkl/129922 | 14 +- bouml/hkl/129922.bodies | 22 +- bouml/hkl/130050.bodies | 80 ++-- bouml/hkl/130178.bodies | 76 ++-- bouml/hkl/130306.bodies | 272 +++++------ bouml/hkl/131074 | 14 +- bouml/hkl/131074.bodies | 146 +++--- bouml/hkl/131202.bodies | 30 +- bouml/hkl/131330.bodies | 132 +++--- bouml/hkl/131458.bodies | 140 +++--- bouml/hkl/131458.diagram | 16 +- bouml/hkl/131586.bodies | 630 +++++++++++++------------- bouml/hkl/131714.bodies | 445 ++++++++---------- bouml/hkl/131842 | 2 +- bouml/hkl/131842.bodies | 206 ++++----- bouml/hkl/131970 | 14 +- bouml/hkl/132098 | 2 +- bouml/hkl/132354 | 2 +- bouml/hkl/132482 | 14 +- bouml/hkl/132482.bodies | 155 ++++--- bouml/hkl/132610 | 16 +- bouml/hkl/132610.bodies | 270 +++++------ bouml/hkl/132738.bodies | 20 +- bouml/hkl/132738.diagram | 12 + bouml/hkl/132866.bodies | 192 ++++---- bouml/hkl/132994 | 14 +- bouml/hkl/132994.bodies | 230 +++++----- bouml/hkl/133122 | 2 +- bouml/hkl/133122.bodies | 78 ++-- bouml/hkl/133250 | 2 +- bouml/hkl/133378 | 2 +- bouml/hkl/133378.bodies | 210 ++++----- bouml/hkl/133506.bodies | 22 +- bouml/hkl/133634 | 2 +- bouml/hkl/133634.bodies | 332 +++++++------- bouml/hkl/133890.bodies | 6 +- bouml/hkl/134146 | 2 +- bouml/hkl/134146.bodies | 302 ++++++------- bouml/hkl/134274.bodies | 30 +- bouml/hkl/134402.bodies | 332 +++++++------- bouml/hkl/134786.bodies | 104 ++--- bouml/hkl/135042.bodies | 96 ++-- bouml/hkl/135170.bodies | 42 +- bouml/hkl/135426.bodies | 126 +++--- bouml/hkl/136194.bodies | 178 ++++---- bouml/hkl/136322.bodies | 168 +++---- bouml/hkl/136450.bodies | 116 ++--- bouml/hkl/136578.bodies | 486 ++++++++++---------- bouml/hkl/136706.bodies | 262 +++++------ bouml/hkl/136834.bodies | 448 +++++++++--------- bouml/hkl/136962.bodies | 220 ++++----- bouml/hkl/137090.bodies | 134 +++--- bouml/hkl/138882.bodies | 58 +-- bouml/hkl/139138.bodies | 238 +++++----- bouml/hkl/139522.bodies | 58 +-- bouml/hkl/139650.bodies | 68 +-- bouml/hkl/139778.bodies | 64 +-- bouml/hkl/139906.bodies | 66 +-- bouml/hkl/140034.bodies | 64 +-- bouml/hkl/140162.bodies | 18 +- bouml/hkl/140290.bodies | 16 +- bouml/hkl/140418.bodies | 12 +- bouml/hkl/142466.bodies | 42 +- bouml/hkl/142594.bodies | 496 ++++++++++---------- bouml/hkl/142978.bodies | 236 +++++----- bouml/hkl/143362.bodies | 70 +-- bouml/hkl/143490.bodies | 6 +- bouml/hkl/143618.bodies | 24 +- bouml/hkl/143746.bodies | 32 +- bouml/hkl/143874.bodies | 34 +- bouml/hkl/144130.bodies | 26 +- bouml/hkl/144258.bodies | 34 +- bouml/hkl/144386.bodies | 46 +- bouml/hkl/145026.bodies | 134 +++--- bouml/hkl/145282.bodies | 39 +- bouml/hkl/145410.bodies | 296 ++++++------ bouml/hkl/148482.bodies | 113 +++-- bouml/hkl/149762.bodies | 20 + bouml/hkl/2.session | 14 +- bouml/hkl/hkl.prj | 109 ++++- src/HKLException.cpp | 161 +++++++ src/SConscript | 1 + src/affinement.cpp | 102 +++++ src/affinement_simplex.cpp | 330 ++++++++++++++ src/affinementlist.cpp | 324 +++++++++++++ src/axe.cpp | 440 ++++++++++++++++++ src/axe_rotation.cpp | 162 +++++++ src/constant.cpp | 21 + src/convenience.cpp | 51 +++ src/diffractometer.cpp | 100 ++++ src/diffractometerfactory.cpp | 59 +++ src/eulerian4C_vertical_diffractometer.cpp | 47 ++ src/eulerian4C_vertical_geometry.cpp | 303 +++++++++++++ src/eulerian4C_vertical_mode.cpp | 317 +++++++++++++ src/eulerian4C_vertical_pseudoaxeengine.cpp | 355 +++++++++++++++ src/eulerian6C_diffractometer.cpp | 37 ++ src/eulerian6C_geometry.cpp | 336 ++++++++++++++ src/eulerian6C_pseudoaxeengine.cpp | 515 +++++++++++++++++++++ src/fitparameter.cpp | 177 ++++++++ src/fitparameterlist.cpp | 195 ++++++++ src/geometry.cpp | 391 ++++++++++++++++ src/geometry_kappa.cpp | 69 +++ src/hklobject.cpp | 86 ++++ src/holder.cpp | 139 ++++++ src/holderlist.cpp | 47 ++ src/kappa4C_vertical_diffractometer.cpp | 48 ++ src/kappa4C_vertical_geometry.cpp | 336 ++++++++++++++ src/kappa4C_vertical_pseudoaxeengine.cpp | 226 ++++++++++ src/kappa6C_diffractometer.cpp | 43 ++ src/kappa6C_geometry.cpp | 355 +++++++++++++++ src/lattice.cpp | 600 ++++++++++++++++++++++++ src/mode.cpp | 26 ++ src/modelist.cpp | 326 ++++++++++++++ src/mystring.cpp | 83 ++++ src/object.cpp | 257 +++++++++++ src/observer.cpp | 108 +++++ src/parameter.cpp | 79 ++++ src/parameterlist.cpp | 204 +++++++++ src/pseudoaxe.cpp | 245 ++++++++++ src/pseudoaxeengine.cpp | 23 + src/pseudoaxeenginelist.cpp | 134 ++++++ src/pseudoaxelist.cpp | 139 ++++++ src/quaternion.cpp | 431 ++++++++++++++++++ src/range.cpp | 306 +++++++++++++ src/reflection.cpp | 178 ++++++++ src/reflection_monocrystal.cpp | 61 +++ src/reflectionfactory.cpp | 45 ++ src/reflectionlist.cpp | 353 +++++++++++++++ src/sample.cpp | 213 +++++++++ src/sample_monocrystal.cpp | 319 +++++++++++++ src/samplefactory.cpp | 53 +++ src/samplelist.cpp | 405 +++++++++++++++++ src/source.cpp | 196 ++++++++ src/svector.cpp | 677 ++++++++++++++++++++++++++++ src/twoC_vertical_diffractometer.cpp | 44 ++ src/twoC_vertical_geometry.cpp | 232 ++++++++++ src/twoC_vertical_mode.cpp | 92 ++++ src/twoC_vertical_pseudoaxeengine.cpp | 468 +++++++++++++++++++ src/value.cpp | 191 ++++++++ 156 files changed, 17675 insertions(+), 5375 deletions(-) commit d3f99bbaec09cac0adea16d6aab2588607e6e0bd Author: Frédéric-Emmanuel PICCA Date: Fri Aug 10 18:06:03 2007 +0200 * refactoring of the Axe class and the Geometry not yet ok but it compiles. SConstruct | 3 +- bouml/hkl/128002 | 23 +- bouml/hkl/128002.diagram | 48 +- bouml/hkl/128130.diagram | 33 +- bouml/hkl/128188.diagram | 126 +++-- bouml/hkl/128386.diagram | 58 +- bouml/hkl/129154.diagram | 21 +- bouml/hkl/129794.bodies | 17 - bouml/hkl/130050.bodies | 43 +- bouml/hkl/130050.diagram | 63 ++- bouml/hkl/130946.diagram | 64 ++- bouml/hkl/131074.diagram | 49 +- bouml/hkl/131458.diagram | 62 +-- bouml/hkl/131714.bodies | 36 +- bouml/hkl/131842 | 147 +++--- bouml/hkl/131842.bodies | 55 +- bouml/hkl/132098 | 14 +- bouml/hkl/132354 | 26 +- bouml/hkl/132482.bodies | 28 +- bouml/hkl/132610 | 6 +- bouml/hkl/132610.bodies | 9 - bouml/hkl/132738.diagram | 31 ++ bouml/hkl/132866.bodies | 9 - bouml/hkl/132994.bodies | 9 - bouml/hkl/133122 | 37 +- bouml/hkl/133250 | 45 +- bouml/hkl/133378 | 22 +- bouml/hkl/133634 | 45 +- bouml/hkl/134018 | 40 +- bouml/hkl/134146 | 151 +++--- bouml/hkl/145282.bodies | 14 +- bouml/hkl/145410.bodies | 75 ++- bouml/hkl/148482.bodies | 43 ++ bouml/hkl/2.session | 17 +- bouml/hkl/cpp_includes | 6 +- bouml/hkl/generation_settings | 8 +- bouml/hkl/hkl.prj | 902 ++++++++++++++++++++------------ config-linux2.py | 1 - src/SConscript | 1 + test/SConscript | 12 +- test/affinement_simplex_test.cpp | 40 +- test/axe_rotation_test.cpp | 91 ++++ test/axe_rotation_test.h | 33 ++ test/axe_test.cpp | 95 ++-- test/axe_test.h | 10 +- test/diffractometer_eulerian4C_test.cpp | 246 ++++----- test/diffractometer_eulerian4C_test.h | 3 - test/diffractometer_kappa4C_test.cpp | 40 +- test/diffractometer_kappa6C_test.cpp | 60 +-- test/diffractometer_twoC_test.cpp | 20 +- test/geometry_eulerian4C_test.cpp | 116 ++-- test/geometry_eulerian4C_test.h | 8 +- test/geometry_eulerian6C_test.cpp | 82 ++- test/geometry_eulerian6C_test.h | 6 +- test/geometry_kappa4C_test.cpp | 72 ++- test/geometry_kappa4C_test.h | 6 +- test/geometry_kappa6C_test.cpp | 64 +-- test/geometry_kappa6C_test.h | 6 +- test/geometry_test.cpp | 54 +- test/geometry_test.h | 2 - test/geometry_twoC_test.cpp | 47 +- test/geometry_twoC_test.h | 6 +- test/pseudoaxe_twoC_test.cpp | 24 +- 63 files changed, 2002 insertions(+), 1528 deletions(-) commit 34cce5bc1f4447713517e1a750f391f0e6ff9cac Author: Frédéric-Emmanuel PICCA Date: Fri Jun 8 17:59:06 2007 +0200 * start refactoring the Geometry (do not compile) bouml/hkl/128002 | 2 +- bouml/hkl/128002.bodies | 294 +++++++++--------- bouml/hkl/128002.diagram | 70 ++--- bouml/hkl/128060.bodies | 78 ++--- bouml/hkl/128182.bodies | 52 ++-- bouml/hkl/128310.bodies | 18 +- bouml/hkl/128514 | 2 +- bouml/hkl/128514.bodies | 356 +++++++++++----------- bouml/hkl/128642 | 2 +- bouml/hkl/128770 | 2 +- bouml/hkl/128770.bodies | 267 +++++++++-------- bouml/hkl/128898.bodies | 26 +- bouml/hkl/129154.bodies | 78 ++--- bouml/hkl/129282.bodies | 4 +- bouml/hkl/129410.bodies | 4 +- bouml/hkl/129538.bodies | 4 +- bouml/hkl/129666.bodies | 40 +-- bouml/hkl/129794.bodies | 256 ++++++++-------- bouml/hkl/129922 | 2 +- bouml/hkl/129922.bodies | 22 +- bouml/hkl/130050.bodies | 105 ++++--- bouml/hkl/130178.bodies | 76 ++--- bouml/hkl/130306.bodies | 242 +++++++-------- bouml/hkl/130306.diagram | 2 +- bouml/hkl/131074 | 2 +- bouml/hkl/131074.bodies | 140 ++++----- bouml/hkl/131202.bodies | 30 +- bouml/hkl/131330.bodies | 122 ++++---- bouml/hkl/131330.diagram | 28 +- bouml/hkl/131458.bodies | 132 ++++---- bouml/hkl/131458.diagram | 28 +- bouml/hkl/131586.bodies | 574 +++++++++++++++++------------------ bouml/hkl/131714.bodies | 592 +++++++++++++++++------------------- bouml/hkl/131842 | 26 +- bouml/hkl/131842.bodies | 194 ++++++------ bouml/hkl/131970 | 10 +- bouml/hkl/132098 | 2 +- bouml/hkl/132354 | 21 +- bouml/hkl/132482 | 12 +- bouml/hkl/132482.bodies | 163 +++++----- bouml/hkl/132610 | 2 +- bouml/hkl/132610.bodies | 258 ++++++++-------- bouml/hkl/132738.bodies | 20 +- bouml/hkl/132866.bodies | 232 +++++++-------- bouml/hkl/132994 | 8 +- bouml/hkl/132994.bodies | 260 ++++++++-------- bouml/hkl/133122 | 26 +- bouml/hkl/133122.bodies | 76 ++--- bouml/hkl/133250 | 38 +-- bouml/hkl/133378 | 10 +- bouml/hkl/133378.bodies | 190 ++++++------ bouml/hkl/133506.bodies | 22 +- bouml/hkl/133634 | 38 +-- bouml/hkl/133634.bodies | 296 +++++++++--------- bouml/hkl/133890.bodies | 6 +- bouml/hkl/134146 | 184 +++++++++--- bouml/hkl/134146.bodies | 288 +++++++++--------- bouml/hkl/134274.bodies | 30 +- bouml/hkl/134402.bodies | 314 +++++++++---------- bouml/hkl/134786.bodies | 104 +++---- bouml/hkl/135042.bodies | 98 +++--- bouml/hkl/135170.bodies | 42 +-- bouml/hkl/135426.bodies | 116 ++++---- bouml/hkl/136194.bodies | 172 +++++------ bouml/hkl/136322.bodies | 162 +++++----- bouml/hkl/136450.bodies | 116 ++++---- bouml/hkl/136578.bodies | 406 ++++++++++++------------- bouml/hkl/136706.bodies | 246 +++++++-------- bouml/hkl/136834.bodies | 390 ++++++++++++------------ bouml/hkl/136962.bodies | 218 +++++++------- bouml/hkl/137090.bodies | 134 ++++----- bouml/hkl/138882.bodies | 58 ++-- bouml/hkl/139138.bodies | 220 +++++++------- bouml/hkl/139522.bodies | 58 ++-- bouml/hkl/139650.bodies | 68 ++--- bouml/hkl/139778.bodies | 64 ++-- bouml/hkl/139906.bodies | 66 ++-- bouml/hkl/140034.bodies | 64 ++-- bouml/hkl/140162.bodies | 18 +- bouml/hkl/140290.bodies | 16 +- bouml/hkl/140418.bodies | 12 +- bouml/hkl/142466.bodies | 42 +-- bouml/hkl/142594.bodies | 460 ++++++++++++++-------------- bouml/hkl/142978.bodies | 218 +++++++------- bouml/hkl/143362.bodies | 70 ++--- bouml/hkl/143490.bodies | 6 +- bouml/hkl/143618.bodies | 24 +- bouml/hkl/143746.bodies | 32 +- bouml/hkl/143874.bodies | 34 +-- bouml/hkl/144130.bodies | 26 +- bouml/hkl/144258.bodies | 34 +-- bouml/hkl/144386.bodies | 46 +-- bouml/hkl/145026.bodies | 134 ++++----- bouml/hkl/145282.bodies | 57 ++-- bouml/hkl/145410.bodies | 117 ++++++++ bouml/hkl/2.session | 15 +- bouml/hkl/generation_settings | 17 +- bouml/hkl/hkl.prj | 679 +++++++++++++++++++++++++----------------- 98 files changed, 5774 insertions(+), 5463 deletions(-) commit 414ae42cd4a668395ea785316ce38c4fb4fb1aa5 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 5 21:58:21 2007 +0200 * start refactoring of the Axes (do not compile) TODO | 8 +- bouml/hkl/128002 | 2 +- bouml/hkl/128002.bodies | 298 +++++++++---------- bouml/hkl/128060.bodies | 78 ++--- bouml/hkl/128182.bodies | 50 ++-- bouml/hkl/128188.diagram | 50 ++-- bouml/hkl/128310.bodies | 16 +- bouml/hkl/128514 | 2 +- bouml/hkl/128514.bodies | 356 +++++++++++------------ bouml/hkl/128642 | 2 +- bouml/hkl/128770 | 2 +- bouml/hkl/128770.bodies | 262 ++++++++--------- bouml/hkl/128898.bodies | 26 +- bouml/hkl/129154.bodies | 78 ++--- bouml/hkl/129282.bodies | 4 +- bouml/hkl/129410.bodies | 4 +- bouml/hkl/129538.bodies | 4 +- bouml/hkl/129666.bodies | 42 +-- bouml/hkl/129794.bodies | 256 ++++++++--------- bouml/hkl/129922 | 2 +- bouml/hkl/129922.bodies | 22 +- bouml/hkl/130050.bodies | 94 +++--- bouml/hkl/130178.bodies | 76 ++--- bouml/hkl/130306.bodies | 272 +++++++++--------- bouml/hkl/131074 | 2 +- bouml/hkl/131074.bodies | 146 +++++----- bouml/hkl/131202 | 61 ---- bouml/hkl/131202.bodies | 30 +- bouml/hkl/131330.bodies | 132 ++++----- bouml/hkl/131330.diagram | 15 + bouml/hkl/131458.bodies | 140 ++++----- bouml/hkl/131458.diagram | 55 ++++ bouml/hkl/131586.bodies | 630 ++++++++++++++++++++-------------------- bouml/hkl/131714.bodies | 648 +++++++++++++++++++++--------------------- bouml/hkl/131842 | 2 +- bouml/hkl/131842.bodies | 184 ++++++------ bouml/hkl/131970 | 2 +- bouml/hkl/132098 | 2 +- bouml/hkl/132354 | 14 +- bouml/hkl/132482 | 2 +- bouml/hkl/132482.bodies | 148 +++++----- bouml/hkl/132610 | 2 +- bouml/hkl/132610.bodies | 286 +++++++++---------- bouml/hkl/132738.bodies | 20 +- bouml/hkl/132866.bodies | 208 +++++++------- bouml/hkl/132994 | 2 +- bouml/hkl/132994.bodies | 246 ++++++++-------- bouml/hkl/133122 | 2 +- bouml/hkl/133122.bodies | 78 ++--- bouml/hkl/133250 | 2 +- bouml/hkl/133378 | 2 +- bouml/hkl/133378.bodies | 210 +++++++------- bouml/hkl/133506.bodies | 22 +- bouml/hkl/133634 | 2 +- bouml/hkl/133634.bodies | 332 +++++++++++----------- bouml/hkl/133890.bodies | 6 +- bouml/hkl/134018 | 9 +- bouml/hkl/134146 | 273 ++++++++++++++++++ bouml/hkl/134146.bodies | 302 ++++++++++---------- bouml/hkl/134274.bodies | 30 +- bouml/hkl/134402.bodies | 332 +++++++++++----------- bouml/hkl/134786.bodies | 104 +++---- bouml/hkl/135042.bodies | 96 +++---- bouml/hkl/135170.bodies | 42 +-- bouml/hkl/135426.bodies | 126 ++++---- bouml/hkl/136194.bodies | 178 ++++++------ bouml/hkl/136322.bodies | 168 +++++------ bouml/hkl/136450.bodies | 116 ++++---- bouml/hkl/136578.bodies | 486 +++++++++++++++---------------- bouml/hkl/136706.bodies | 262 ++++++++--------- bouml/hkl/136834.bodies | 446 ++++++++++++++--------------- bouml/hkl/136962.bodies | 220 +++++++------- bouml/hkl/137090.bodies | 134 ++++----- bouml/hkl/138882.bodies | 58 ++-- bouml/hkl/139138.bodies | 238 ++++++++-------- bouml/hkl/139522.bodies | 58 ++-- bouml/hkl/139650.bodies | 68 ++--- bouml/hkl/139778.bodies | 64 ++--- bouml/hkl/139906.bodies | 66 ++--- bouml/hkl/140034.bodies | 64 ++--- bouml/hkl/140162.bodies | 18 +- bouml/hkl/140290.bodies | 16 +- bouml/hkl/140418.bodies | 12 +- bouml/hkl/142466.bodies | 42 +-- bouml/hkl/142594.bodies | 496 ++++++++++++++++---------------- bouml/hkl/142978.bodies | 236 +++++++-------- bouml/hkl/143362.bodies | 70 ++--- bouml/hkl/143490.bodies | 6 +- bouml/hkl/143618.bodies | 24 +- bouml/hkl/143746.bodies | 32 +-- bouml/hkl/143874.bodies | 34 +-- bouml/hkl/144130.bodies | 26 +- bouml/hkl/144258.bodies | 34 +-- bouml/hkl/144386.bodies | 46 +-- bouml/hkl/145026.bodies | 134 ++++----- bouml/hkl/145282.bodies | 41 +++ bouml/hkl/2.session | 17 +- bouml/hkl/generation_settings | 8 +- bouml/hkl/hkl.prj | 370 ++++++++++++++++-------- src/SConscript | 1 + 100 files changed, 5852 insertions(+), 5390 deletions(-) commit 45d2357ae3f6311fe10716bc89413bf2bca35e27 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 5 17:11:08 2007 +0200 * now PseudoAxeEngineWithSample is working. bouml/hkl/128002 | 8 +- bouml/hkl/128002.bodies | 298 ++++++++--------- bouml/hkl/128060.bodies | 78 ++--- bouml/hkl/128182.bodies | 50 +-- bouml/hkl/128310.bodies | 16 +- bouml/hkl/128514 | 8 +- bouml/hkl/128514.bodies | 356 ++++++++++---------- bouml/hkl/128514.diagram | 41 ++- bouml/hkl/128642 | 8 +- bouml/hkl/128642.diagram | 35 +- bouml/hkl/128770 | 12 +- bouml/hkl/128770.bodies | 262 +++++++-------- bouml/hkl/128770.diagram | 18 +- bouml/hkl/128898.bodies | 26 +- bouml/hkl/129154.bodies | 78 ++--- bouml/hkl/129282.bodies | 4 +- bouml/hkl/129410.bodies | 4 +- bouml/hkl/129538.bodies | 4 +- bouml/hkl/129666.bodies | 42 +-- bouml/hkl/129794.bodies | 256 +++++++-------- bouml/hkl/129922 | 10 +- bouml/hkl/129922.bodies | 22 +- bouml/hkl/130050.bodies | 86 ++--- bouml/hkl/130178.bodies | 76 ++--- bouml/hkl/130306.bodies | 272 ++++++++-------- bouml/hkl/130818.diagram | 31 +- bouml/hkl/131074 | 10 +- bouml/hkl/131074.bodies | 146 ++++----- bouml/hkl/131202.bodies | 30 +- bouml/hkl/131330.bodies | 132 ++++---- bouml/hkl/131458.bodies | 140 ++++---- bouml/hkl/131586.bodies | 630 ++++++++++++++++++------------------ bouml/hkl/131714.bodies | 648 ++++++++++++++++++------------------- bouml/hkl/131842 | 2 +- bouml/hkl/131842.bodies | 184 +++++------ bouml/hkl/131970 | 2 +- bouml/hkl/132098 | 10 +- bouml/hkl/132354 | 10 +- bouml/hkl/132482 | 10 +- bouml/hkl/132482.bodies | 148 ++++----- bouml/hkl/132610 | 10 +- bouml/hkl/132610.bodies | 286 ++++++++-------- bouml/hkl/132738.bodies | 20 +- bouml/hkl/132866.bodies | 208 ++++++------ bouml/hkl/132994 | 18 +- bouml/hkl/132994.bodies | 246 +++++++------- bouml/hkl/133122 | 2 +- bouml/hkl/133122.bodies | 78 ++--- bouml/hkl/133250 | 2 +- bouml/hkl/133378 | 22 +- bouml/hkl/133378.bodies | 210 ++++++------ bouml/hkl/133506.bodies | 22 +- bouml/hkl/133634 | 2 +- bouml/hkl/133634.bodies | 332 +++++++++---------- bouml/hkl/133762 | 22 +- bouml/hkl/133890.bodies | 6 +- bouml/hkl/134146.bodies | 302 ++++++++--------- bouml/hkl/134274.bodies | 30 +- bouml/hkl/134402.bodies | 332 +++++++++---------- bouml/hkl/134786.bodies | 104 +++--- bouml/hkl/135042.bodies | 96 +++--- bouml/hkl/135170.bodies | 42 +-- bouml/hkl/135426.bodies | 126 ++++---- bouml/hkl/136194.bodies | 178 +++++----- bouml/hkl/136322.bodies | 168 +++++----- bouml/hkl/136450.bodies | 116 +++---- bouml/hkl/136578.bodies | 488 ++++++++++++++-------------- bouml/hkl/136706.bodies | 262 +++++++-------- bouml/hkl/136834.bodies | 446 ++++++++++++------------- bouml/hkl/136962.bodies | 220 ++++++------- bouml/hkl/137090.bodies | 134 ++++---- bouml/hkl/138882.bodies | 58 ++-- bouml/hkl/139138.bodies | 238 +++++++------- bouml/hkl/139522.bodies | 58 ++-- bouml/hkl/139650.bodies | 68 ++-- bouml/hkl/139778.bodies | 64 ++-- bouml/hkl/139906.bodies | 66 ++-- bouml/hkl/140034.bodies | 64 ++-- bouml/hkl/140162.bodies | 18 +- bouml/hkl/140290.bodies | 16 +- bouml/hkl/140418.bodies | 12 +- bouml/hkl/142466.bodies | 42 +-- bouml/hkl/142594.bodies | 496 ++++++++++++++-------------- bouml/hkl/142978.bodies | 236 +++++++------- bouml/hkl/143362.bodies | 70 ++-- bouml/hkl/143490.bodies | 6 +- bouml/hkl/143618.bodies | 24 +- bouml/hkl/143746.bodies | 32 +- bouml/hkl/143874.bodies | 34 +- bouml/hkl/144130.bodies | 26 +- bouml/hkl/144258.bodies | 34 +- bouml/hkl/144386.bodies | 46 +-- bouml/hkl/145026.bodies | 134 ++++---- bouml/hkl/2.session | 17 +- bouml/hkl/hkl.prj | 11 +- test/pseudoaxe_eulerian4C_test.cpp | 13 +- test/pseudoaxe_eulerian4C_test.h | 1 + test/pseudoaxe_eulerian6C_test.cpp | 12 +- test/pseudoaxe_eulerian6C_test.h | 1 + test/pseudoaxe_kappa4C_test.cpp | 12 +- test/pseudoaxe_kappa4C_test.h | 1 + test/pseudoaxe_kappa6C_test.cpp | 12 +- test/pseudoaxe_kappa6C_test.h | 1 + 103 files changed, 5354 insertions(+), 5302 deletions(-) commit 0eea12680d26b863d83a988588a2b589fcb38493 Author: Frédéric-Emmanuel PICCA Date: Tue Jun 5 08:14:49 2007 +0200 * start working on the PseudoAxeEngineWithSample (do not compile) bouml/hkl/128002 | 2 +- bouml/hkl/128002.bodies | 298 +++++++++---------- bouml/hkl/128002.diagram | 52 ++-- bouml/hkl/128060.bodies | 78 ++--- bouml/hkl/128182.bodies | 50 ++-- bouml/hkl/128188.diagram | 112 +++++--- bouml/hkl/128310.bodies | 16 +- bouml/hkl/128386.diagram | 59 ++-- bouml/hkl/128514 | 2 +- bouml/hkl/128514.bodies | 356 +++++++++++------------ bouml/hkl/128642 | 2 +- bouml/hkl/128770 | 277 +++++++++++++++++- bouml/hkl/128770.bodies | 262 ++++++++--------- bouml/hkl/128770.diagram | 64 ++++- bouml/hkl/128898.bodies | 26 +- bouml/hkl/129154.bodies | 78 ++--- bouml/hkl/129282.bodies | 4 +- bouml/hkl/129410.bodies | 4 +- bouml/hkl/129538.bodies | 4 +- bouml/hkl/129666.bodies | 42 +-- bouml/hkl/129794.bodies | 256 ++++++++--------- bouml/hkl/129922 | 3 +- bouml/hkl/129922.bodies | 22 +- bouml/hkl/129922.diagram | 20 +- bouml/hkl/130050.bodies | 86 +++--- bouml/hkl/130178.bodies | 76 ++--- bouml/hkl/130306.bodies | 272 +++++++++--------- bouml/hkl/130306.diagram | 44 ++- bouml/hkl/131074 | 2 +- bouml/hkl/131074.bodies | 146 +++++----- bouml/hkl/131202.bodies | 30 +- bouml/hkl/131202.diagram | 20 +- bouml/hkl/131330.bodies | 132 ++++----- bouml/hkl/131458.bodies | 140 ++++----- bouml/hkl/131586.bodies | 630 ++++++++++++++++++++-------------------- bouml/hkl/131714.bodies | 648 +++++++++++++++++++++--------------------- bouml/hkl/131842 | 13 +- bouml/hkl/131842.bodies | 184 ++++++------ bouml/hkl/131970 | 29 +- bouml/hkl/132098 | 3 +- bouml/hkl/132354 | 15 +- bouml/hkl/132482 | 2 +- bouml/hkl/132482.bodies | 148 +++++----- bouml/hkl/132610 | 2 +- bouml/hkl/132610.bodies | 286 +++++++++---------- bouml/hkl/132738.bodies | 20 +- bouml/hkl/132866.bodies | 208 +++++++------- bouml/hkl/132994 | 10 +- bouml/hkl/132994.bodies | 246 ++++++++-------- bouml/hkl/133122 | 10 +- bouml/hkl/133122.bodies | 78 ++--- bouml/hkl/133250 | 10 +- bouml/hkl/133378 | 2 +- bouml/hkl/133378.bodies | 210 +++++++------- bouml/hkl/133506.bodies | 22 +- bouml/hkl/133634 | 29 +- bouml/hkl/133634.bodies | 332 +++++++++++----------- bouml/hkl/133890.bodies | 6 +- bouml/hkl/134018 | 85 ++++++ bouml/hkl/134146.bodies | 302 ++++++++++---------- bouml/hkl/134274.bodies | 30 +- bouml/hkl/134402.bodies | 332 +++++++++++----------- bouml/hkl/134786.bodies | 104 +++---- bouml/hkl/135042.bodies | 96 +++---- bouml/hkl/135170.bodies | 42 +-- bouml/hkl/135426.bodies | 126 ++++---- bouml/hkl/136194.bodies | 178 ++++++------ bouml/hkl/136322.bodies | 168 +++++------ bouml/hkl/136450.bodies | 116 ++++---- bouml/hkl/136578.bodies | 486 +++++++++++++++---------------- bouml/hkl/136706.bodies | 262 ++++++++--------- bouml/hkl/136834.bodies | 445 ++++++++++++++--------------- bouml/hkl/136962.bodies | 220 +++++++------- bouml/hkl/137090.bodies | 134 ++++----- bouml/hkl/138882.bodies | 58 ++-- bouml/hkl/139138.bodies | 238 ++++++++-------- bouml/hkl/139522.bodies | 58 ++-- bouml/hkl/139650.bodies | 70 ++--- bouml/hkl/139778.bodies | 66 ++--- bouml/hkl/139906.bodies | 68 ++--- bouml/hkl/140034.bodies | 66 ++--- bouml/hkl/140162.bodies | 18 +- bouml/hkl/140290.bodies | 16 +- bouml/hkl/140418.bodies | 12 +- bouml/hkl/142466.bodies | 42 +-- bouml/hkl/142594.bodies | 496 ++++++++++++++++---------------- bouml/hkl/142978.bodies | 236 +++++++-------- bouml/hkl/143362.bodies | 70 ++--- bouml/hkl/143490.bodies | 6 +- bouml/hkl/143618.bodies | 24 +- bouml/hkl/143746.bodies | 32 +-- bouml/hkl/143874.bodies | 34 +-- bouml/hkl/144130.bodies | 26 +- bouml/hkl/144258.bodies | 34 +-- bouml/hkl/144386.bodies | 46 +-- bouml/hkl/145026.bodies | 81 ++++++ bouml/hkl/2.session | 13 +- bouml/hkl/generation_settings | 18 +- bouml/hkl/hkl.prj | 146 ++++++---- 99 files changed, 5926 insertions(+), 5354 deletions(-) commit bbf71d0a147d47de061f811eee0236d3e9068ae5 Author: Frédéric-Emmanuel PICCA Date: Fri Jun 1 17:18:45 2007 +0200 * now eulerian6C::pseudoAxeEngine::Tth is working. bouml/hkl/133378 | 2 +- bouml/hkl/136834.bodies | 81 ++++++++++++++++++++++++++++++++----------------- bouml/hkl/hkl.prj | 4 +-- 3 files changed, 56 insertions(+), 31 deletions(-) commit 014738530b905c08706f30f7456e0c3e46b84d24 Author: Frédéric-Emmanuel PICCA Date: Fri Jun 1 15:34:12 2007 +0200 * now parameters of the pseudoAxes can be used. src/gui/diffractometer2.glade | 54 +++++++++++++++++----- src/gui/hklwindow.cpp | 102 ++++++++++++++++++++++++++++++++++++++++-- src/gui/hklwindow.h | 8 ++++ src/gui/modelcolumns.h | 15 +++++++ 4 files changed, 165 insertions(+), 14 deletions(-) commit 32f0f6df9bf2955f7a4b74ef552b1a3d28809d68 Author: Frédéric-Emmanuel PICCA Date: Thu May 31 16:59:09 2007 +0200 * rewamp the gui interface to be space econome. bouml/hkl/2.session | 7 +- bouml/hkl/hkl.prj | 4 +- src/gui/diffractometer2.glade | 217 ++++++++++----------- src/gui/hklwindow.cpp | 430 ++++++++++++++++++++++++++++++++---------- src/gui/hklwindow.h | 38 ++-- src/gui/modelcolumns.h | 47 +++++ 6 files changed, 514 insertions(+), 229 deletions(-) commit 0d73aa8f2597164d365bc185e3ede943c7955eb0 Author: Frédéric-Emmanuel PICCA Date: Fri May 25 17:13:00 2007 +0200 * now the gui is working bouml/hkl/135042.bodies | 2 + bouml/hkl/2.session | 5 +- bouml/hkl/hkl.prj | 19 ++- src/gui/hklwindow.cpp | 292 +++++++++++++++++++--------------------- src/gui/hklwindow.h | 2 +- src/gui/main.cpp | 15 ++- src/gui/pseudoaxespinbutton.cpp | 12 +- 7 files changed, 174 insertions(+), 173 deletions(-) commit d53537a617822c9f154e54bf7d59bb62e8bd4fe9 Author: Frédéric-Emmanuel PICCA Date: Thu May 24 16:56:23 2007 +0200 * update the hkl::eulerian6C::pseudoAxeEngine::Tth documentation bouml/hkl/133378 | 77 +++++++++++++++++++------------------------ bouml/hkl/2.session | 10 ++---- bouml/hkl/generation_settings | 1 + bouml/hkl/hkl.prj | 14 ++++---- doc/Doxyfile | 4 +-- 5 files changed, 47 insertions(+), 59 deletions(-) commit 4e8bb16e9bad46b9e8bb3fb5256199064a75f4f3 Author: Frédéric-Emmanuel PICCA Date: Fri May 11 17:00:36 2007 +0200 * refactoring of the code to be diffractometer directory closer (waiting for bouml to have a relativ path to a specific directory) bouml/hkl/128002 | 1198 +++---------------------------- bouml/hkl/128002.bodies | 298 ++++---- bouml/hkl/128060.bodies | 78 +- bouml/hkl/128182.bodies | 60 +- bouml/hkl/128258.diagram | 20 +- bouml/hkl/128310.bodies | 18 +- bouml/hkl/128386.diagram | 79 +- bouml/hkl/128514 | 42 +- bouml/hkl/128514.bodies | 356 ++++----- bouml/hkl/128514.diagram | 45 +- bouml/hkl/128642 | 42 +- bouml/hkl/128642.diagram | 22 +- bouml/hkl/128770 | 55 +- bouml/hkl/128770.bodies | 262 +++---- bouml/hkl/128898 | 30 - bouml/hkl/128898.bodies | 26 +- bouml/hkl/129154.bodies | 80 +-- bouml/hkl/129282.bodies | 4 +- bouml/hkl/129410.bodies | 4 +- bouml/hkl/129538.bodies | 4 +- bouml/hkl/129666.bodies | 42 +- bouml/hkl/129794 | 137 ---- bouml/hkl/129794.bodies | 256 +++---- bouml/hkl/129922 | 53 +- bouml/hkl/129922.bodies | 22 +- bouml/hkl/130050.bodies | 86 +-- bouml/hkl/130050.diagram | 47 +- bouml/hkl/130178.bodies | 76 +- bouml/hkl/130178.diagram | 12 +- bouml/hkl/130306 | 30 - bouml/hkl/130306.bodies | 272 +++---- bouml/hkl/130306.diagram | 98 ++- bouml/hkl/130562 | 30 - bouml/hkl/130562.diagram | 76 +- bouml/hkl/130690.diagram | 27 + bouml/hkl/130818.diagram | 34 + bouml/hkl/130946.diagram | 73 ++ bouml/hkl/131074 | 44 +- bouml/hkl/131074.bodies | 146 ++-- bouml/hkl/131074.diagram | 76 ++ bouml/hkl/131202 | 225 +----- bouml/hkl/131202.bodies | 30 +- bouml/hkl/131202.diagram | 41 ++ bouml/hkl/131330 | 165 ----- bouml/hkl/131330.bodies | 140 ++-- bouml/hkl/131458 | 238 ------ bouml/hkl/131458.bodies | 140 ++-- bouml/hkl/131586 | 227 ------ bouml/hkl/131586.bodies | 632 ++++++++-------- bouml/hkl/{130050 => 131714} | 27 +- bouml/hkl/131714.bodies | 648 ++++++++--------- bouml/hkl/{128130 => 131842} | 188 +++-- bouml/hkl/131842.bodies | 202 +++--- bouml/hkl/{129282 => 131970} | 136 ++-- bouml/hkl/{130178 => 132098} | 117 +-- bouml/hkl/{129154 => 132226} | 24 +- bouml/hkl/{128258 => 132354} | 257 +++++-- bouml/hkl/{129026 => 132482} | 168 ++--- bouml/hkl/132482.bodies | 166 ++--- bouml/hkl/{130434 => 132610} | 70 +- bouml/hkl/132610.bodies | 304 ++++---- bouml/hkl/{129410 => 132738} | 27 +- bouml/hkl/132738.bodies | 20 +- bouml/hkl/{130690 => 132866} | 89 ++- bouml/hkl/132866.bodies | 226 +++--- bouml/hkl/{129538 => 132994} | 166 +++-- bouml/hkl/132994.bodies | 264 +++---- bouml/hkl/{128386 => 133122} | 260 +++++-- bouml/hkl/133122.bodies | 78 +- bouml/hkl/133250 | 743 +++++++++++++++++++ bouml/hkl/{129666 => 133378} | 120 ++-- bouml/hkl/133378.bodies | 210 +++--- bouml/hkl/{130818 => 133506} | 84 +-- bouml/hkl/133506.bodies | 22 +- bouml/hkl/133634 | 726 +++++++++++++++++++ bouml/hkl/133634.bodies | 332 ++++----- bouml/hkl/133762 | 183 +++++ bouml/hkl/{130946 => 133890} | 84 +-- bouml/hkl/133890.bodies | 8 +- bouml/hkl/134146.bodies | 302 ++++---- bouml/hkl/134274.bodies | 32 +- bouml/hkl/134402.bodies | 334 ++++----- bouml/hkl/134786.bodies | 104 +-- bouml/hkl/135042.bodies | 92 +-- bouml/hkl/135170.bodies | 42 +- bouml/hkl/135426.bodies | 126 ++-- bouml/hkl/136194.bodies | 180 ++--- bouml/hkl/136322.bodies | 170 ++--- bouml/hkl/136450.bodies | 118 +-- bouml/hkl/136578.bodies | 488 ++++++------- bouml/hkl/136706.bodies | 264 +++---- bouml/hkl/136834.bodies | 410 +++++------ bouml/hkl/136962.bodies | 222 +++--- bouml/hkl/137090.bodies | 134 ++-- bouml/hkl/138882.bodies | 58 +- bouml/hkl/139138.bodies | 241 +++---- bouml/hkl/139522.bodies | 58 +- bouml/hkl/139650.bodies | 70 +- bouml/hkl/139778.bodies | 66 +- bouml/hkl/139906.bodies | 68 +- bouml/hkl/140034.bodies | 66 +- bouml/hkl/140162.bodies | 18 +- bouml/hkl/140290.bodies | 16 +- bouml/hkl/140418.bodies | 12 +- bouml/hkl/142466.bodies | 42 +- bouml/hkl/142594.bodies | 496 ++++++------- bouml/hkl/142978.bodies | 242 +++---- bouml/hkl/143362.bodies | 70 +- bouml/hkl/143490.bodies | 6 +- bouml/hkl/143618.bodies | 30 +- bouml/hkl/143746.bodies | 38 +- bouml/hkl/143874.bodies | 40 +- bouml/hkl/144130.bodies | 32 +- bouml/hkl/144258.bodies | 40 +- bouml/hkl/144386.bodies | 48 +- bouml/hkl/2.session | 10 +- bouml/hkl/generation_settings | 1 + bouml/hkl/hkl.prj | 454 +++++++----- src/SConscript | 32 +- test/affinement_simplex_test.cpp | 110 +-- test/affinement_simplex_test.h | 9 +- test/diffractometer_eulerian4C_test.cpp | 4 +- test/diffractometer_eulerian4C_test.h | 2 +- test/diffractometer_kappa4C_test.cpp | 80 +-- test/diffractometer_kappa4C_test.h | 4 +- test/diffractometer_kappa6C_test.cpp | 108 +-- test/diffractometer_kappa6C_test.h | 4 +- test/diffractometer_twoC_test.cpp | 136 ++-- test/diffractometer_twoC_test.h | 7 +- test/geometry_eulerian4C_test.cpp | 34 +- test/geometry_eulerian4C_test.h | 4 +- test/geometry_eulerian6C_test.cpp | 215 +++--- test/geometry_eulerian6C_test.h | 6 +- test/geometry_kappa4C_test.cpp | 176 ++--- test/geometry_kappa4C_test.h | 6 +- test/geometry_kappa6C_test.cpp | 144 ++-- test/geometry_kappa6C_test.h | 6 +- test/geometry_twoC_test.cpp | 120 ++-- test/geometry_twoC_test.h | 8 +- test/mode_eulerian4C_test.cpp | 100 +-- test/mode_eulerian4C_test.h | 4 +- test/mode_kappa4C_test.cpp | 192 ++--- test/mode_kappa4C_test.h | 7 +- test/mode_kappa6C_test.cpp | 236 +++--- test/mode_kappa6C_test.h | 7 +- test/mode_twoC_test.cpp | 84 +-- test/mode_twoC_test.h | 8 +- test/pseudoaxe_eulerian4C_test.cpp | 380 +++++----- test/pseudoaxe_eulerian4C_test.h | 7 +- test/pseudoaxe_eulerian6C_test.cpp | 362 +++++----- test/pseudoaxe_eulerian6C_test.h | 8 +- test/pseudoaxe_kappa4C_test.cpp | 528 +++++++------- test/pseudoaxe_kappa4C_test.h | 10 +- test/pseudoaxe_kappa6C_test.cpp | 516 ++++++------- test/pseudoaxe_kappa6C_test.h | 14 +- test/pseudoaxe_twoC_test.cpp | 180 ++--- test/pseudoaxe_twoC_test.h | 8 +- test/reflection_test.cpp | 2 +- test/reflection_test.h | 4 +- test/reflectionlist_test.h | 4 +- test/sample_test.h | 4 +- test/samplelist_test.h | 4 +- 162 files changed, 10942 insertions(+), 10329 deletions(-) commit cc030b9807c4c5c8f184931fba900fddc9f3ba17 Author: Frédéric-Emmanuel PICCA Date: Thu Mar 15 14:41:47 2007 +0100 * add the PseudoAxeList::printToStream bouml/hkl/134786.bodies | 2 ++ bouml/hkl/135042.bodies | 9 +++++++++ bouml/hkl/2.session | 6 ++---- bouml/hkl/hkl.prj | 31 ++++++++++++++++++++++++++++++- 4 files changed, 43 insertions(+), 5 deletions(-) commit e8fb75079abc87d88bda61824cd7af2ffd337f74 Author: Frédéric-Emmanuel PICCA Date: Tue Mar 13 10:53:19 2007 +0100 * add the tests for PseudoAxe::set_write_from_read bouml/hkl/128770 | 4 +- bouml/hkl/129026 | 8 +- bouml/hkl/129282 | 4 +- bouml/hkl/129538 | 4 +- bouml/hkl/129666 | 6 +- bouml/hkl/134786.bodies | 4 +- bouml/hkl/135042.bodies | 4 +- bouml/hkl/136194.bodies | 6 +- bouml/hkl/136322.bodies | 6 +- bouml/hkl/136450.bodies | 5 +- bouml/hkl/136578.bodies | 5 +- bouml/hkl/136706.bodies | 9 +- bouml/hkl/136834.bodies | 6 +- bouml/hkl/136962.bodies | 6 +- bouml/hkl/137090.bodies | 4 +- bouml/hkl/2.session | 7 +- bouml/hkl/hkl.prj | 8 +- config-linux2.py | 1 + test/pseudoaxe_eulerian4C_test.cpp | 111 +++++++++++++++++++++- test/pseudoaxe_eulerian6C_test.cpp | 91 +++++++++++++++++++ test/pseudoaxe_kappa4C_test.cpp | 182 +++++++++++++++++++++++++++++++++++++ test/pseudoaxe_kappa6C_test.cpp | 180 ++++++++++++++++++++++++++++++++++++ test/pseudoaxe_twoC_test.cpp | 66 ++++++++++++++ 23 files changed, 681 insertions(+), 46 deletions(-) commit 54ac249a1b1c3b1d5fac5567fdeb03c2169d6d12 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 12 16:17:16 2007 +0100 * add an operation to update the write part of pseudoAxes from the read part. * add an operation to PseudoAxe to get the read and the write part. bouml/hkl/128770 | 15 +++++++++++- bouml/hkl/129026 | 41 +++++++++++++++++++++++++++++++- bouml/hkl/129282 | 15 +++++++++++- bouml/hkl/129538 | 15 +++++++++++- bouml/hkl/129666 | 28 +++++++++++++++++++++- bouml/hkl/134786.bodies | 20 +++++++++++++--- bouml/hkl/135042.bodies | 8 +++++++ bouml/hkl/136194.bodies | 2 ++ bouml/hkl/136322.bodies | 2 ++ bouml/hkl/136450.bodies | 2 ++ bouml/hkl/136578.bodies | 2 ++ bouml/hkl/136706.bodies | 4 ++++ bouml/hkl/136834.bodies | 2 ++ bouml/hkl/136962.bodies | 2 ++ bouml/hkl/137090.bodies | 2 ++ bouml/hkl/2.session | 9 ++----- bouml/hkl/hkl.prj | 63 ++++++++++++++++++++++++++++++++++++++++++++++--- 17 files changed, 214 insertions(+), 18 deletions(-) commit 498f72e2739f18798bbb9c71203062ad732ed98b Author: Frédéric-Emmanuel PICCA Date: Tue Mar 6 15:38:38 2007 +0100 * check that all derived PseudoAxes of "psi" are working. bouml/hkl/2.session | 4 ++-- bouml/hkl/hkl.prj | 4 ++-- test/SConscript | 12 ++++++------ test/pseudoaxe_eulerian4C_test.cpp | 1 - 4 files changed, 10 insertions(+), 11 deletions(-) commit 3301696015b8ad67169a936b895d8186790e9d85 Author: Frédéric-Emmanuel PICCA Date: Tue Mar 6 15:32:55 2007 +0100 * now the "psi" pseudoAxis is working with a desorientation parameter. bouml/hkl/128002.bodies | 4 +++- bouml/hkl/129282 | 2 +- bouml/hkl/136578.bodies | 31 +++++++++++++++++++++++-------- bouml/hkl/2.session | 5 +++-- bouml/hkl/hkl.prj | 2 +- test/pseudoaxe_eulerian4C_test.cpp | 11 ++++------- 6 files changed, 35 insertions(+), 20 deletions(-) commit 9a0c3c99dec075d87d983e65d24c5ec622bdfb13 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 5 17:43:43 2007 +0100 * works on the Psi pseudoAxe. bouml/hkl/128386.diagram | 41 ++++++++++++++++++++++++-------------- bouml/hkl/129282 | 11 +++++++++- bouml/hkl/136578.bodies | 18 +++++++++++++---- bouml/hkl/2.session | 8 ++++---- bouml/hkl/hkl.prj | 6 +++--- config-linux2.py | 1 - test/SConscript | 12 +++++------ test/pseudoaxe_eulerian4C_test.cpp | 23 ++++++++++++--------- 8 files changed, 77 insertions(+), 43 deletions(-) commit 238b299f071a228c4d137caddf9858e96af7f0b9 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 5 12:05:38 2007 +0100 * add the CVS Makefile.vc src/Makefile.vc | 85 ++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 57 insertions(+), 28 deletions(-) commit 68d5ecba8136571f1ff688b370a4fad7607da095 Author: Frédéric-Emmanuel PICCA Date: Mon Mar 5 11:06:36 2007 +0100 * set _current = NULL in ModeList constructor. * add the relatedAxes in the PseudoAxeEngines bouml/hkl/128130 | 2 +- bouml/hkl/128770 | 2 +- bouml/hkl/129026 | 2 +- bouml/hkl/129282 | 3 +- bouml/hkl/129538 | 2 +- bouml/hkl/129666 | 2 +- bouml/hkl/129922 | 2 +- bouml/hkl/136194.bodies | 4 +++ bouml/hkl/136322.bodies | 4 +++ bouml/hkl/136450.bodies | 3 ++ bouml/hkl/136578.bodies | 7 +++++ bouml/hkl/136706.bodies | 5 ++++ bouml/hkl/136834.bodies | 79 +++++++++++++++++++++++++------------------------ bouml/hkl/136962.bodies | 5 +++- bouml/hkl/137090.bodies | 9 ++++++ bouml/hkl/140418.bodies | 2 +- bouml/hkl/2.session | 5 +--- bouml/hkl/hkl.prj | 47 +++++++++++++++-------------- 18 files changed, 110 insertions(+), 75 deletions(-) commit 0e7fe107e916139c88f9bc7e118cab95f5b29889 Author: Frédéric-Emmanuel PICCA Date: Tue Feb 27 15:44:22 2007 +0100 * small bug before 2.3.0 bouml/hkl/128258 | 2 +- bouml/hkl/134786.bodies | 2 ++ bouml/hkl/2.session | 7 ++++--- bouml/hkl/hkl.prj | 25 ++++++++++++++++++++++--- 4 files changed, 29 insertions(+), 7 deletions(-) commit f5eed0256c2fd59edcb708e19c3862445d9f843e Author: Frédéric-Emmanuel PICCA Date: Mon Feb 26 13:50:34 2007 +0100 * remove a bug in the eulerian4C diffractometer bouml/hkl/130178 | 2 +- bouml/hkl/131458 | 6 ++++-- bouml/hkl/131586 | 2 +- bouml/hkl/143746.bodies | 6 +++--- bouml/hkl/2.session | 6 ++++-- bouml/hkl/hkl.prj | 2 +- 6 files changed, 14 insertions(+), 10 deletions(-) commit 45bfdbda543d11511fc68eaf050493868e1cddab Author: Frédéric-Emmanuel PICCA Date: Mon Feb 26 13:40:31 2007 +0100 * remove unnecessary files. bouml/hkl/2.session | 5 +- include/hkl/enums.h | 38 --- include/hkl/myvector.h | 605 -------------------------------------- src/HKLException.cpp | 126 -------- src/diffractometer_eulerian4C.cpp | 42 --- 5 files changed, 2 insertions(+), 814 deletions(-) commit 5d2f339fa282de88d8ecc84a1311da92edd8c40f Author: Frédéric-Emmanuel PICCA Date: Mon Feb 26 13:13:15 2007 +0100 * Clean the SampleList bouml/hkl/128188.diagram | 4 ++-- bouml/hkl/134402.bodies | 18 ++---------------- bouml/hkl/2.session | 5 +++-- bouml/hkl/hkl.prj | 25 +++---------------------- 4 files changed, 10 insertions(+), 42 deletions(-) commit d85184ac45f855736bf4882a35955eb324e95b99 Author: Frederic-Emmanuel PICCA Date: Thu Feb 22 17:42:34 2007 +0100 * now all the library is on bouml except the test suite. bouml/hkl/128188.diagram | 14 +- bouml/hkl/129922.diagram | 62 + bouml/hkl/130050.diagram | 13 + bouml/hkl/130178.diagram | 13 + bouml/hkl/130306.diagram | 13 + bouml/hkl/130562.diagram | 20 + bouml/hkl/130818 | 2 +- bouml/hkl/131074.bodies | 20 +- bouml/hkl/131202 | 246 + bouml/hkl/131330 | 165 + bouml/hkl/131458 | 236 + bouml/hkl/131586 | 227 + bouml/hkl/131714.bodies | 2 + bouml/hkl/134402.bodies | 27 +- bouml/hkl/143362.bodies | 41 + bouml/hkl/143490.bodies | 6 + bouml/hkl/143618.bodies | 15 + bouml/hkl/143746.bodies | 19 + bouml/hkl/143874.bodies | 20 + bouml/hkl/144130.bodies | 16 + bouml/hkl/144258.bodies | 20 + bouml/hkl/144386.bodies | 25 + bouml/hkl/2.session | 10 +- bouml/hkl/hkl.prj | 8306 +++++++++++++++++-------------- include/hkl/diffractometer.h | 306 -- include/hkl/diffractometer_eulerian4C.h | 145 - include/hkl/diffractometer_eulerian6C.h | 74 - include/hkl/diffractometer_kappa4C.h | 137 - include/hkl/diffractometer_kappa6C.h | 42 - include/hkl/diffractometer_twoC.h | 74 - include/hkl/diffractometerfactory.h | 40 - src/diffractometer.cpp | 68 - src/diffractometer_eulerian6C.cpp | 35 - src/diffractometer_kappa4C.cpp | 43 - src/diffractometer_kappa6C.cpp | 39 - src/diffractometer_twoC.cpp | 37 - src/diffractometerfactory.cpp | 46 - test/diffractometer_eulerian4C_test.cpp | 14 +- test/diffractometer_kappa4C_test.cpp | 27 +- test/diffractometer_kappa6C_test.cpp | 22 +- test/diffractometer_twoC_test.cpp | 14 +- 41 files changed, 5793 insertions(+), 4908 deletions(-) commit 09463a8c9eb9f8f5219cdfdb52137a244de64703 Author: Frederic-Emmanuel PICCA Date: Wed Feb 21 15:14:46 2007 +0100 * Add the affinement part to bouml. bouml/hkl/128188.diagram | 39 +- bouml/hkl/129282 | 5 +- bouml/hkl/129794.diagram | 13 + bouml/hkl/131074 | 182 ++++++++++ bouml/hkl/142466.bodies | 25 ++ bouml/hkl/142594.bodies | 282 ++++++++++++++ bouml/hkl/142978.bodies | 137 +++++++ bouml/hkl/2.session | 9 +- bouml/hkl/cpp_includes | 3 + bouml/hkl/hkl.prj | 767 ++++++++++++++++++++++++++++++++++++++- include/hkl/affinement.h | 172 --------- include/hkl/affinementlist.h | 102 ------ src/affinement.cpp | 48 --- src/affinement_simplex.cpp | 313 ---------------- src/affinementlist.cpp | 134 ------- test/affinement_simplex_test.cpp | 10 +- test/affinement_simplex_test.h | 2 +- 17 files changed, 1443 insertions(+), 800 deletions(-) commit 1f547b2a818b33dff1fe378289732461d4caf463 Author: Frederic-Emmanuel PICCA Date: Tue Feb 20 14:30:17 2007 +0100 * remove a bug to compile with VC6 bouml/hkl/129922 | 4 ++-- bouml/hkl/130946 | 2 +- bouml/hkl/2.session | 2 +- bouml/hkl/hkl.prj | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) commit 94dd848f6507d898fb69823db99397fa6668c668 Author: Frederic-Emmanuel PICCA Date: Tue Feb 20 14:11:37 2007 +0100 * add all Modes to bouml bouml/hkl/128770 | 2 +- bouml/hkl/128898.diagram | 33 ++ bouml/hkl/129026.diagram | 66 +++ bouml/hkl/129154.diagram | 24 ++ bouml/hkl/129282.diagram | 15 + bouml/hkl/129410.diagram | 41 ++ bouml/hkl/129538 | 2 +- bouml/hkl/129538.diagram | 41 ++ bouml/hkl/129666.diagram | 41 ++ bouml/hkl/129922 | 191 +++++++++ bouml/hkl/130050 | 30 ++ bouml/hkl/130178 | 498 ++++++++++++++++++++++ bouml/hkl/130306 | 30 ++ bouml/hkl/130434 | 234 ++++++++++ bouml/hkl/130562 | 30 ++ bouml/hkl/130690 | 213 +++++++++ bouml/hkl/130818 | 213 +++++++++ bouml/hkl/130946 | 213 +++++++++ bouml/hkl/138882.bodies | 32 ++ bouml/hkl/139138.bodies | 137 ++++++ bouml/hkl/139522.bodies | 31 ++ bouml/hkl/139650.bodies | 38 ++ bouml/hkl/139778.bodies | 36 ++ bouml/hkl/139906.bodies | 37 ++ bouml/hkl/140034.bodies | 36 ++ bouml/hkl/140162.bodies | 11 + bouml/hkl/140290.bodies | 10 + bouml/hkl/140418.bodies | 10 + bouml/hkl/2.session | 11 +- bouml/hkl/hkl.prj | 877 +++++++++++++++++++++++++++++++++----- include/hkl/derivedmode.h | 56 --- include/hkl/mode.h | 162 ------- include/hkl/mode_eulerian4C.h | 112 ----- include/hkl/mode_eulerian6C.h | 74 ---- include/hkl/mode_kappa4C.h | 31 -- include/hkl/mode_kappa6C.h | 31 -- include/hkl/mode_twoC.h | 58 --- include/hkl/modelist.h | 102 ----- src/SConscript | 1 - src/diffractometer_eulerian6C.cpp | 10 +- src/diffractometer_kappa4C.cpp | 10 +- src/diffractometer_kappa6C.cpp | 10 +- src/mode.cpp | 14 - src/mode_eulerian4C.cpp | 268 ------------ src/mode_eulerian6C.cpp | 438 ------------------- src/mode_twoC.cpp | 68 --- src/modelist.cpp | 134 ------ test/mode_kappa4C_test.cpp | 20 +- test/mode_kappa6C_test.cpp | 20 +- 49 files changed, 3111 insertions(+), 1691 deletions(-) commit 0ac640f75188e070b51dea8b298a9e5f502fc67b Author: Frederic-Emmanuel PICCA Date: Mon Feb 19 11:39:25 2007 +0100 * remove some VC6 bugs test/diffractometer_kappa6C_test.cpp | 12 ++++++------ test/pseudoaxe_twoC_test.cpp | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) commit b7aed1e90fb1943b08d7fddac590d91da7249521 Author: Frederic-Emmanuel PICCA Date: Mon Feb 19 11:19:11 2007 +0100 * remove all warnings after adding the -Wall SConstruct | 6 +- bouml/hkl/128002 | 41 +- bouml/hkl/128002.bodies | 4 - bouml/hkl/128130 | 15 +- bouml/hkl/128258 | 15 +- bouml/hkl/128386 | 15 +- bouml/hkl/128514 | 19 +- bouml/hkl/128770 | 2 +- bouml/hkl/129026 | 7 +- bouml/hkl/129538 | 2 +- bouml/hkl/129666 | 6 +- bouml/hkl/131714.bodies | 1 - bouml/hkl/133378.bodies | 1 - bouml/hkl/135426.bodies | 21 +- bouml/hkl/hkl.prj | 6072 +++++++++++++++++----------------- config-linux2.py | 1 + include/hkl/affinementlist.h | 2 +- include/hkl/diffractometer.h | 4 +- include/hkl/modelist.h | 4 +- src/affinementlist.cpp | 1 - src/modelist.cpp | 1 - test/affinement_simplex_test.cpp | 1 - test/diffractometer_kappa4C_test.cpp | 6 - test/diffractometer_kappa6C_test.cpp | 6 - test/geometry_kappa6C_test.cpp | 1 - test/mode_kappa4C_test.cpp | 1 - test/mode_kappa6C_test.cpp | 1 - test/pseudoaxe_eulerian6C_test.cpp | 2 +- test/pseudoaxe_kappa4C_test.cpp | 2 +- test/pseudoaxe_kappa6C_test.cpp | 2 +- test/reflectionlist_test.cpp | 2 +- 31 files changed, 3202 insertions(+), 3062 deletions(-) commit 3cfe4a2431fd6c436fbcc3a3c7ef756631a0c759 Author: Frederic-Emmanuel PICCA Date: Mon Feb 19 10:03:03 2007 +0100 * add all the pseudoAxes to bouml. bouml/hkl/128130.diagram | 74 ++ bouml/hkl/128188.diagram | 8 +- bouml/hkl/128258.diagram | 31 + bouml/hkl/128386.diagram | 64 ++ bouml/hkl/128514.diagram | 13 + bouml/hkl/128642.diagram | 20 + bouml/hkl/128770 | 348 +++++++ bouml/hkl/128770.diagram | 31 + bouml/hkl/128898 | 30 + bouml/hkl/129026 | 670 +++++++++++++ bouml/hkl/129154 | 30 + bouml/hkl/129282 | 436 +++++++++ bouml/hkl/129410 | 30 + bouml/hkl/129538 | 460 +++++++++ bouml/hkl/129666 | 666 +++++++++++++ bouml/hkl/129794 | 137 +++ bouml/hkl/130050.bodies | 4 +- bouml/hkl/134786.bodies | 51 + bouml/hkl/135042.bodies | 42 + bouml/hkl/135170.bodies | 32 + bouml/hkl/135426.bodies | 72 ++ bouml/hkl/136194.bodies | 90 ++ bouml/hkl/136322.bodies | 85 ++ bouml/hkl/136450.bodies | 61 ++ bouml/hkl/136578.bodies | 219 +++++ bouml/hkl/136706.bodies | 130 +++ bouml/hkl/136834.bodies | 207 ++++ bouml/hkl/136962.bodies | 113 +++ bouml/hkl/137090.bodies | 70 ++ bouml/hkl/2.session | 16 +- bouml/hkl/hkl.prj | 1504 +++++++++++++++++++++++++++--- config-linux2.py | 1 - include/hkl/derivedpseudoaxeengine.h | 199 ---- include/hkl/pseudoaxe.h | 150 --- include/hkl/pseudoaxeengine.h | 229 ----- include/hkl/pseudoaxeengine_eulerian4C.h | 148 --- include/hkl/pseudoaxeengine_eulerian6C.h | 107 --- include/hkl/pseudoaxeengine_kappa4C.h | 76 -- include/hkl/pseudoaxeengine_kappa6C.h | 46 - include/hkl/pseudoaxeengine_twoC.h | 113 --- include/hkl/pseudoaxeenginelist.h | 82 -- include/hkl/pseudoaxelist.h | 78 -- src/diffractometer.cpp | 1 + src/diffractometer_eulerian4C.cpp | 8 +- src/diffractometer_eulerian6C.cpp | 6 +- src/diffractometer_kappa4C.cpp | 10 +- src/diffractometer_kappa6C.cpp | 8 +- src/diffractometer_twoC.cpp | 6 +- src/pseudoaxe.cpp | 105 --- src/pseudoaxeengine.cpp | 13 - src/pseudoaxeengine_eulerian4C.cpp | 277 ------ src/pseudoaxeengine_eulerian6C.cpp | 343 ------- src/pseudoaxeengine_kappa4C.cpp | 158 ---- src/pseudoaxeengine_twoC.cpp | 347 ------- src/pseudoaxeenginelist.cpp | 105 --- src/pseudoaxelist.cpp | 112 --- test/diffractometer_kappa6C_test.cpp | 1 + test/pseudoaxe_eulerian4C_test.cpp | 86 +- test/pseudoaxe_eulerian6C_test.cpp | 74 +- test/pseudoaxe_kappa4C_test.cpp | 154 +-- test/pseudoaxe_kappa6C_test.cpp | 136 +-- test/pseudoaxe_twoC_test.cpp | 51 +- 62 files changed, 5876 insertions(+), 3098 deletions(-) commit e28e873c44b57a6b41b8e54f50359219ddedcc4a Author: Frederic-Emmanuel PICCA Date: Tue Feb 13 11:37:29 2007 +0100 * add the SampleList and SampleFactory to bouml bouml/hkl/128188.diagram | 30 +- bouml/hkl/128642 | 2 +- bouml/hkl/134274.bodies | 18 + bouml/hkl/134402.bodies | 186 +++++++ bouml/hkl/2.session | 9 +- bouml/hkl/hkl.prj | 924 ++++++++++++++++++++++++++------ include/hkl/samplefactory.h | 50 -- include/hkl/samplelist.h | 124 ----- src/samplefactory.cpp | 40 -- src/samplelist.cpp | 190 ------- test/diffractometer_eulerian4C_test.cpp | 2 +- test/diffractometer_kappa6C_test.cpp | 2 +- test/diffractometer_twoC_test.cpp | 2 +- test/samplelist_test.cpp | 2 +- 14 files changed, 1000 insertions(+), 581 deletions(-) commit 184df38ad347947957ed19ee7891983803cb8d05 Author: Frederic-Emmanuel PICCA Date: Fri Feb 9 18:09:17 2007 +0100 * add the reflection and part of the sample to bouml (memory leak for now) bouml/hkl/128188.diagram | 56 +- bouml/hkl/128514 | 172 +++++ bouml/hkl/128642 | 419 +++++++++++ bouml/hkl/133122.bodies | 48 ++ bouml/hkl/133378.bodies | 115 +++ bouml/hkl/133506.bodies | 13 + bouml/hkl/133634.bodies | 182 +++++ bouml/hkl/133890.bodies | 6 + bouml/hkl/134146.bodies | 168 +++++ bouml/hkl/2.session | 12 +- bouml/hkl/hkl.prj | 1358 +++++++++++++++++++++++++++++++--- include/hkl/diffractometerfactory.h | 1 + include/hkl/enums.h | 6 +- include/hkl/reflection.h | 190 ----- include/hkl/reflection_monocrystal.h | 61 -- include/hkl/reflectionfactory.h | 42 -- include/hkl/reflectionlist.h | 144 ---- include/hkl/sample.h | 146 ---- include/hkl/sample_monocrystal.h | 131 ---- src/reflection.cpp | 97 --- src/reflection_monocrystal.cpp | 36 - src/reflectionfactory.cpp | 32 - src/reflectionlist.cpp | 237 ------ src/sample.cpp | 150 ---- src/sample_monocrystal.cpp | 227 ------ src/samplelist.cpp | 2 +- test/affinement_simplex_test.cpp | 1 + test/mode_twoC_test.cpp | 1 + test/sample_test.cpp | 1 + 29 files changed, 2461 insertions(+), 1593 deletions(-) commit 636facbf7228f02179feefd4726a8459649805e2 Author: Frederic-Emmanuel PICCA Date: Fri Feb 9 13:52:05 2007 +0100 * add all Geometries to bouml bouml/hkl/128002 | 1200 ++++++++++++++++++++++++++++++ bouml/hkl/128002.diagram | 39 + bouml/hkl/128130 | 461 ++++++++++++ bouml/hkl/128258 | 369 +++++++++ bouml/hkl/128386 | 463 ++++++++++++ bouml/hkl/131842.bodies | 110 +++ bouml/hkl/132482.bodies | 88 +++ bouml/hkl/132610.bodies | 161 ++++ bouml/hkl/132738.bodies | 14 + bouml/hkl/132866.bodies | 126 ++++ bouml/hkl/132994.bodies | 145 ++++ bouml/hkl/2.session | 19 +- bouml/hkl/hkl.prj | 4 +- include/hkl/geometry_eulerian4C.h | 226 ------ include/hkl/geometry_eulerian6C.h | 232 ------ include/hkl/geometry_kappa.h | 73 -- include/hkl/geometry_kappa4C.h | 185 ----- include/hkl/geometry_kappa6C.h | 239 ------ include/hkl/geometry_twoC.h | 167 ----- include/hkl/pseudoaxeengine_eulerian4C.h | 8 +- include/hkl/pseudoaxeengine_eulerian6C.h | 8 +- src/geometry_eulerian4C.cpp | 183 ----- src/geometry_eulerian6C.cpp | 154 ---- src/geometry_kappa.cpp | 50 -- src/geometry_kappa4C.cpp | 201 ----- src/geometry_kappa6C.cpp | 174 ----- src/geometry_twoC.cpp | 132 ---- src/pseudoaxeengine_eulerian4C.cpp | 14 +- src/pseudoaxeengine_kappa4C.cpp | 6 +- src/pseudoaxeengine_twoC.cpp | 10 +- test/pseudoaxe_eulerian4C_test.cpp | 16 +- test/pseudoaxe_kappa4C_test.cpp | 16 +- test/pseudoaxe_twoC_test.cpp | 16 +- 33 files changed, 3229 insertions(+), 2080 deletions(-) commit 13d5574254374a5f914ec68290e4e877be191c5c Author: Frederic-Emmanuel PICCA Date: Wed Feb 7 13:44:14 2007 +0100 * add the portability.h file, manage with bouml Geometry bouml/hkl/128002.diagram | 10 + bouml/hkl/131330.bodies | 1 + bouml/hkl/131714.bodies | 343 +++ bouml/hkl/2.session | 11 +- bouml/hkl/hkl.prj | 5847 ++++++++++++++++++++----------------- include/hkl/geometry.h | 237 -- include/hkl/portability.h | 19 - src/geometry.cpp | 433 --- src/reflection.cpp | 2 +- src/sample.cpp | 2 +- test/geometry_eulerian4C_test.cpp | 10 +- test/geometry_eulerian6C_test.cpp | 14 +- test/geometry_kappa4C_test.cpp | 10 +- test/geometry_kappa6C_test.cpp | 14 +- test/geometry_twoC_test.cpp | 6 +- 15 files changed, 3600 insertions(+), 3359 deletions(-) commit 7b1dcbae546d0d073e0cb7a5330a44216738837a Author: Frederic-Emmanuel PICCA Date: Wed Feb 7 10:53:21 2007 +0100 * add the Lattice class to bouml bouml/hkl/128002.diagram | 3 + bouml/hkl/128188.diagram | 2 + bouml/hkl/131458.bodies | 2 +- bouml/hkl/131586.bodies | 342 +++++++++++++++++++++++++ bouml/hkl/2.session | 13 +- bouml/hkl/hkl.prj | 645 ++++++++++++++++++++++++++++++++++++++++++++++- include/hkl/lattice.h | 259 ------------------- src/lattice.cpp | 391 ---------------------------- 8 files changed, 997 insertions(+), 660 deletions(-) commit 4881f3f69b3f0f7c87ac35d50e818baa380a94cd Author: Frederic-Emmanuel PICCA Date: Tue Feb 6 14:31:10 2007 +0100 * aFitParameterList and Source are bouml managed. bouml/hkl/128002.diagram | 29 ++ bouml/hkl/128188.diagram | 24 +- bouml/hkl/131330.bodies | 77 +++++ bouml/hkl/131458.bodies | 80 +++++ bouml/hkl/2.session | 7 +- bouml/hkl/hkl.prj | 676 ++++++++++++++++++++++++++++++++++++++++- include/hkl/fitparameterlist.h | 160 ---------- include/hkl/source.h | 147 --------- src/fitparameterlist.cpp | 91 ------ src/source.cpp | 133 -------- 10 files changed, 877 insertions(+), 547 deletions(-) commit 2e1a3a48cadd744b63eb96c7e2a3b2ce7f8ee634 Author: Frederic-Emmanuel PICCA Date: Mon Feb 5 16:16:43 2007 +0100 * HKLObject an ParameterList are bouml managed. bouml/hkl/128188.diagram | 21 +- bouml/hkl/131074.bodies | 76 ++++ bouml/hkl/131202.bodies | 21 ++ bouml/hkl/2.session | 12 +- bouml/hkl/hkl.prj | 833 +++++++++++++++++++++++++++++++++----------- include/hkl/hklobject.h | 82 ----- include/hkl/parameterlist.h | 130 ------- src/hklobject.cpp | 47 --- src/parameterlist.cpp | 104 ------ 9 files changed, 756 insertions(+), 570 deletions(-) commit 50b9494bd0e6d702a65f813a3fac5325c56e0e2e Author: Frederic-Emmanuel PICCA Date: Mon Feb 5 11:43:00 2007 +0100 * now Axe, FitParameter and MyMap are bouml managed bouml/hkl/128002.bodies | 6 - bouml/hkl/128060.bodies | 4 - bouml/hkl/128188.diagram | 85 +- bouml/hkl/128514.bodies | 12 - bouml/hkl/128770.bodies | 7 - bouml/hkl/129154.bodies | 11 +- bouml/hkl/129794.bodies | 19 +- bouml/hkl/130050.bodies | 53 + bouml/hkl/130178.bodies | 50 + bouml/hkl/130306.bodies | 145 ++ bouml/hkl/2.session | 14 +- bouml/hkl/generation_settings | 10 +- bouml/hkl/hkl.prj | 4001 +++++++++++++++++++++++------------------ include/hkl/axe.h | 127 -- include/hkl/fitparameter.h | 140 -- include/hkl/mymap.h | 614 ------- src/axe.cpp | 90 - src/fitparameter.cpp | 74 - 18 files changed, 2624 insertions(+), 2838 deletions(-) commit 68ccd8720ac48484b25d20f162f8919be47e1d84 Author: Frederic-Emmanuel PICCA Date: Tue Jan 30 17:22:30 2007 +0100 * Parameter is now bouml managed. bouml/hkl/128188.diagram | 39 ++++++---- bouml/hkl/129922.bodies | 16 +++++ bouml/hkl/2.session | 4 +- bouml/hkl/hkl.prj | 180 ++++++++++++++++++++++++++++++++++++++++++++++- include/hkl/parameter.h | 73 ------------------- src/parameter.cpp | 45 ------------ 6 files changed, 222 insertions(+), 135 deletions(-) commit e490365fbaba4b6b3a80b1a6c229329e509426ee Author: Frederic-Emmanuel PICCA Date: Tue Jan 30 16:25:05 2007 +0100 * Range is bouml managed bouml/hkl/128060.bodies | 2 + bouml/hkl/128188.diagram | 29 ++- bouml/hkl/129794.bodies | 150 +++++++++++ bouml/hkl/2.session | 7 +- bouml/hkl/hkl.prj | 637 +++++++++++++++++++++++++++++++++++++++++++++++ include/hkl/range.h | 183 -------------- src/range.cpp | 314 ----------------------- 7 files changed, 818 insertions(+), 504 deletions(-) commit 2b5c38a07b61633fad9e58b762645ced3bf2aa35 Author: Frederic-Emmanuel PICCA Date: Tue Jan 30 14:57:46 2007 +0100 * Observer and Observable is bouml managed. bouml/hkl/128188.diagram | 12 +- bouml/hkl/129282.bodies | 4 +- bouml/hkl/129538.bodies | 5 + bouml/hkl/129666.bodies | 29 + bouml/hkl/2.session | 5 +- bouml/hkl/hkl.prj | 2693 +++++++++++++++++++++++++--------------------- include/hkl/observer.h | 90 -- src/observer.cpp | 70 -- 8 files changed, 1505 insertions(+), 1403 deletions(-) commit 568483fbc7888a3e68e01cf040eb62496bc51ead Author: Frederic-Emmanuel PICCA Date: Tue Jan 30 14:05:55 2007 +0100 Value is bouml managed bouml/hkl/128060.bodies | 19 +++-- bouml/hkl/128188.diagram | 2 +- bouml/hkl/2.session | 6 +- bouml/hkl/hkl.prj | 133 ++++++++++++++++++++++--------- include/hkl/value.h | 199 ----------------------------------------------- src/value.cpp | 129 ------------------------------ 6 files changed, 113 insertions(+), 375 deletions(-) commit aa975171751766a64a6a1fd7ca52d2886c6053b2 Author: Frederic-Emmanuel PICCA Date: Tue Jan 30 11:54:11 2007 +0100 * Object is bouml managed. bouml/hkl/128188.diagram | 27 ++- bouml/hkl/129154.bodies | 54 +++++ bouml/hkl/129282.bodies | 5 + bouml/hkl/129410.bodies | 5 + bouml/hkl/2.session | 7 +- bouml/hkl/generation_settings | 2 +- bouml/hkl/hkl.prj | 528 +++++++++++++++++++++++++++++++++++++++++- include/hkl/affinement.h | 2 +- include/hkl/object.h | 192 --------------- src/affinement.cpp | 4 +- src/affinement_simplex.cpp | 2 +- src/object.cpp | 95 -------- src/sample.cpp | 2 +- test/axe_test.cpp | 8 +- test/hklobject_test.cpp | 4 +- test/object_test.cpp | 9 +- test/sample_test.cpp | 2 +- 17 files changed, 637 insertions(+), 311 deletions(-) commit 838a48d419dc5ec791d6a0d79be902cd0cf1d9e3 Author: Frederic-Emmanuel PICCA Date: Mon Jan 29 18:19:00 2007 +0100 * MyString is now bouml managed. bouml/hkl/128188.diagram | 10 +++ bouml/hkl/128898.bodies | 16 ++++ bouml/hkl/2.session | 7 +- bouml/hkl/hkl.prj | 199 ++++++++++++++++++++++++++++++++++++++++++++- include/hkl/HKLException.h | 74 ----------------- include/hkl/mystring.h | 51 ------------ src/mystring.cpp | 51 ------------ 7 files changed, 227 insertions(+), 181 deletions(-) commit 62aa9de3bb9a1c4d5d11614380c3a399a5381551 Author: Frederic-Emmanuel PICCA Date: Mon Jan 29 17:16:10 2007 +0100 * now convenience and Quaternion are bouml managed. bouml/hkl/128188.diagram | 21 +- bouml/hkl/128770.bodies | 164 +++++++++++ bouml/hkl/2.session | 6 +- bouml/hkl/hkl.prj | 697 +++++++++++++++++++++++++++++++++++++++++++++- include/hkl/convenience.h | 37 --- include/hkl/quaternion.h | 160 ----------- src/convenience.cpp | 55 ---- src/geometry.cpp | 4 +- src/quaternion.cpp | 224 --------------- test/quaternion_test.cpp | 40 +-- 10 files changed, 897 insertions(+), 511 deletions(-) commit ef0240a554f14f2a3b263ddcf2f8f2247f88a504 Author: Frederic-Emmanuel PICCA Date: Mon Jan 29 15:34:18 2007 +0100 * HKLException svector smatrix are bouml managed bouml/hkl/128002.bodies | 75 +++++- bouml/hkl/128188.diagram | 14 +- bouml/hkl/128514.bodies | 183 ++++++++++++++ bouml/hkl/2.session | 9 +- bouml/hkl/hkl.prj | 389 ++++++++++++++++++++++++++-- bouml/hkl/stereotypes | 2 +- include/hkl/axe.h | 1 - include/hkl/constants.h | 28 --- include/hkl/geometry.h | 4 - include/hkl/lattice.h | 2 +- include/hkl/mode.h | 10 +- include/hkl/quaternion.h | 4 +- include/hkl/source.h | 1 - include/hkl/svecmat.h | 475 ----------------------------------- include/hkl/value.h | 2 +- src/SConscript | 1 + src/convenience.cpp | 14 +- src/fitparameterlist.cpp | 1 + src/geometry.cpp | 2 +- src/geometry_eulerian4C.cpp | 8 +- src/geometry_kappa4C.cpp | 1 - src/geometry_twoC.cpp | 24 +- src/lattice.cpp | 8 +- src/mode_eulerian6C.cpp | 34 +-- src/pseudoaxeengine_eulerian4C.cpp | 14 +- src/pseudoaxeengine_twoC.cpp | 4 +- src/quaternion.cpp | 12 +- src/reflection.cpp | 2 +- src/smatrix.cpp | 310 ----------------------- src/source.cpp | 4 +- src/svector.cpp | 288 --------------------- src/value.cpp | 3 +- test/axe_test.cpp | 12 +- test/axe_test.h | 1 - test/diffractometer_kappa4C_test.cpp | 1 - test/diffractometer_kappa6C_test.cpp | 1 - test/geometry_eulerian4C_test.cpp | 5 +- test/geometry_eulerian6C_test.cpp | 29 ++- test/geometry_kappa4C_test.cpp | 13 +- test/geometry_kappa6C_test.cpp | 5 +- test/geometry_twoC_test.cpp | 11 +- test/lattice_test.h | 1 - test/mode_eulerian4C_test.cpp | 30 +-- test/mode_kappa4C_test.cpp | 30 +-- test/mode_kappa6C_test.cpp | 30 +-- test/mode_twoC_test.h | 1 - test/pseudoaxe_eulerian4C_test.cpp | 4 +- test/pseudoaxe_eulerian4C_test.h | 1 - test/pseudoaxe_eulerian6C_test.cpp | 8 +- test/pseudoaxe_eulerian6C_test.h | 1 - test/pseudoaxe_kappa4C_test.cpp | 17 +- test/pseudoaxe_kappa6C_test.cpp | 15 +- test/pseudoaxe_twoC_test.h | 1 - test/quaternion_test.cpp | 24 +- test/quaternion_test.h | 1 - test/reflection_test.cpp | 6 +- test/reflection_test.h | 1 - test/sample_test.cpp | 2 +- test/source_test.h | 2 - test/svecmat_test.cpp | 40 ++- test/svecmat_test.h | 5 +- test/value_test.cpp | 4 +- 62 files changed, 843 insertions(+), 1388 deletions(-) commit 008cf44e81d92b9317a8229c92bb846537d52339 Author: Frederic-Emmanuel PICCA Date: Mon Jan 29 10:32:03 2007 +0100 test of profilling with valgrind config-linux2.py | 1 - include/hkl/portability.h | 2 +- test/SConscript | 10 +++++----- 3 files changed, 6 insertions(+), 7 deletions(-) commit 529450d746bc50af97cf7db3cb8629ed04e0aaeb Author: Frédéric-Emmanuel PICCA Date: Sun Jan 28 12:04:56 2007 +0100 * 1st part of the bouml transition bouml/hkl/128002.bodies | 138 ++++ bouml/hkl/128060.bodies | 56 ++ bouml/hkl/128182.bodies | 40 ++ bouml/hkl/128188.diagram | 28 + bouml/hkl/128310.bodies | 11 + bouml/hkl/128514.bodies | 21 + bouml/hkl/2.session | 8 + bouml/hkl/cpp_includes | 19 + bouml/hkl/generation_settings | 222 ++++++ bouml/hkl/hkl.prj | 1549 +++++++++++++++++++++++++++++++++++++++++ bouml/hkl/idl_includes | 1 + bouml/hkl/java_imports | 1 + bouml/hkl/stereotypes | 54 ++ bouml/hkl/tools | 20 + include/hkl/HKLException.h | 280 ++------ src/HKLException.cpp | 154 ++-- src/SConscript | 1 - src/svector.cpp | 574 ++++++++------- test/geometry_test.h | 2 + test/lattice_test.h | 2 + test/reflectionlist_test.h | 2 + 21 files changed, 2575 insertions(+), 608 deletions(-) commit 04bd3b04a2e8f7c015f34f066e8a044d0e3149c0 Author: Frederic-Emmanuel PICCA Date: Thu Jan 25 10:40:58 2007 +0100 * now the gui is working. src/gui/hklwindow.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 563f72742a6438e1d396d2d55aeaafa1897a4786 Author: Frederic-Emmanuel PICCA Date: Wed Jan 24 15:02:34 2007 +0100 * update the uml diagrammes. * clean up the code. * add the NEWS file NEWS | 69 + TODO | 65 +- config-linux2.py | 1 + doc/uml/hkl.dia | 11001 ++++++++++++++++++++++----------------- doc/uml/next_hkl.dia | 7392 ++++++++++++++++---------- include/hkl/derivedmode.h | 3 +- include/hkl/fitparameterlist.h | 66 +- include/hkl/parameterlist.h | 56 +- include/hkl/pseudoaxe.h | 14 - include/hkl/pseudoaxelist.h | 17 - include/hkl/reflection.h | 24 +- include/hkl/samplelist.h | 1 - src/pseudoaxe.cpp | 14 - src/pseudoaxelist.cpp | 29 - 14 files changed, 11085 insertions(+), 7667 deletions(-) commit 1ccff1d7f69f8b2dceb5c8238e22625101c1e1a8 Author: Frederic-Emmanuel PICCA Date: Wed Jan 24 09:49:58 2007 +0100 * use astyle to format the code. include/hkl/pseudoaxe.h | 22 +++++++++++----------- include/hkl/pseudoaxeengine.h | 20 ++++++++++---------- include/hkl/pseudoaxeengine_eulerian4C.h | 6 +++--- include/hkl/pseudoaxelist.h | 2 +- test/pseudoaxe_kappa6C_test.cpp | 2 +- 5 files changed, 26 insertions(+), 26 deletions(-) commit 6d4da713ff94bfe9e4a3d864c972d29b085c4bee Author: Frederic-Emmanuel PICCA Date: Mon Jan 22 14:01:58 2007 +0100 * update the documentation * remove some memory problem causing computation errors in the win32 port. * clean up the pseudoAxeEngine code. include/hkl/affinementlist.h | 2 +- include/hkl/axe.h | 2 +- include/hkl/derivedpseudoaxe.h | 220 --------------------- include/hkl/derivedpseudoaxeengine.h | 7 +- include/hkl/modelist.h | 2 +- include/hkl/pseudoaxe.h | 79 +++++++- include/hkl/pseudoaxeengine.h | 42 +++- include/hkl/pseudoaxeengine_eulerian4C.h | 23 ++- include/hkl/pseudoaxeengine_eulerian6C.h | 14 +- include/hkl/pseudoaxeengine_kappa4C.h | 20 +- include/hkl/pseudoaxeengine_kappa6C.h | 2 +- include/hkl/pseudoaxeengine_twoC.h | 20 +- include/hkl/pseudoaxeenginelist.h | 15 +- include/hkl/pseudoaxelist.h | 6 + include/hkl/reflectionlist.h | 2 +- include/hkl/samplelist.h | 2 +- src/pseudoaxe_kappa4C.cpp | 325 ------------------------------- src/pseudoaxe_twoC.cpp | 261 ------------------------- src/pseudoaxeengine_eulerian4C.cpp | 4 - src/pseudoaxeengine_eulerian6C.cpp | 4 +- src/pseudoaxeengine_twoC.cpp | 20 +- test/SConscript | 1 + test/pseudoaxe_eulerian4C_test.cpp | 25 ++- test/pseudoaxe_eulerian6C_test.cpp | 10 + test/pseudoaxe_kappa4C_test.cpp | 20 ++ test/pseudoaxe_kappa6C_test.cpp | 16 ++ test/pseudoaxe_twoC_test.cpp | 10 + 27 files changed, 261 insertions(+), 893 deletions(-) commit 59c84357baaaf7a5eebea2641e4206e870be2f3a Author: Frederic-Emmanuel PICCA Date: Fri Jan 19 14:37:53 2007 +0100 * update diffractometers with the PseudoAxeEngine include/hkl/diffractometer.h | 6 +++--- include/hkl/diffractometer_kappa4C.h | 2 -- include/hkl/diffractometer_kappa6C.h | 2 -- include/hkl/pseudoaxe.h | 3 +++ src/SConscript | 6 +++--- src/diffractometer.cpp | 8 ++++---- src/diffractometer_eulerian4C.cpp | 22 +++++++++++----------- src/diffractometer_eulerian6C.cpp | 20 ++++++++++---------- src/diffractometer_kappa4C.cpp | 34 +++++++++++++--------------------- src/diffractometer_kappa6C.cpp | 28 ++++++++++------------------ src/diffractometer_twoC.cpp | 14 +++++++------- src/pseudoaxe.cpp | 3 ++- test/SConscript | 8 ++++---- test/diffractometer_kappa4C_test.cpp | 10 +++++----- test/diffractometer_kappa6C_test.cpp | 10 +++++----- 15 files changed, 80 insertions(+), 96 deletions(-) commit c571ef78c48aafbf50b8e48f03266b6d2ef2a15d Author: Frederic-Emmanuel PICCA Date: Fri Jan 19 13:57:51 2007 +0100 * add the PseudoAxeEngineList class include/hkl/pseudoaxeengine.h | 9 ++-- include/hkl/pseudoaxeenginelist.h | 75 +++++++++++++++++++++++++++ include/hkl/pseudoaxelist.h | 2 + src/SConscript | 1 + src/pseudoaxeenginelist.cpp | 105 ++++++++++++++++++++++++++++++++++++++ src/pseudoaxelist.cpp | 6 +++ 6 files changed, 194 insertions(+), 4 deletions(-) commit 5778cc415731c45d99683c788ae9c7726f2e2adb Author: Frederic-Emmanuel PICCA Date: Thu Jan 18 18:28:24 2007 +0100 * now all pseudoaxeengine seems to work include/hkl/derivedpseudoaxeengine.h | 8 +-- include/hkl/pseudoaxe_kappa4C.h | 116 ------------------------------ include/hkl/pseudoaxe_kappa6C.h | 49 ------------- src/pseudoaxeengine_eulerian4C.cpp | 136 +++++++++++++++++------------------ src/pseudoaxeengine_kappa4C.cpp | 2 + src/pseudoaxeengine_twoC.cpp | 52 +++++++------- test/SConscript | 10 +-- test/pseudoaxe_twoC_test.cpp | 2 +- 8 files changed, 106 insertions(+), 269 deletions(-) commit b638af06a4923a993d4d0999626de8751929b360 Author: Frederic-Emmanuel PICCA Date: Thu Jan 18 18:25:07 2007 +0100 * pseudoaxe_kappa6C -> pseudoaxeengine_kappa6C include/hkl/pseudoaxeengine_kappa6C.h | 8 +++++--- test/SConscript | 4 ++-- test/pseudoaxe_kappa6C_test.cpp | 28 +++++++++++++++++----------- test/pseudoaxe_kappa6C_test.h | 2 +- 4 files changed, 25 insertions(+), 17 deletions(-) commit 31ae60f90fca7d49f6ffff723afd72956030603f Author: Frederic-Emmanuel PICCA Date: Thu Jan 18 18:15:05 2007 +0100 * pseudoaxe_eulerian6C -> pseudoaxeengine_eulerian6C ...e_eulerian6C.h => pseudoaxeengine_eulerian6C.h} | 36 ++-- src/SConscript | 3 +- ...lerian6C.cpp => pseudoaxeengine_eulerian6C.cpp} | 198 +++++++++++---------- test/SConscript | 4 +- test/pseudoaxe_eulerian6C_test.cpp | 13 +- test/pseudoaxe_eulerian6C_test.h | 2 +- 6 files changed, 141 insertions(+), 115 deletions(-) commit 55424bddf60b7a448df6fef42ad9e23b7b78a5bd Author: Frederic-Emmanuel PICCA Date: Thu Jan 18 17:29:10 2007 +0100 * pseudoaxe_kappa4C -> pseudoaxeengine_kappa4C include/hkl/pseudoaxeengine_kappa4C.h | 27 ++++++++++++--- src/pseudoaxeengine_kappa4C.cpp | 64 +++++++++++++++++++---------------- test/SConscript | 4 +-- test/pseudoaxe_kappa4C_test.cpp | 31 ++++++++++------- test/pseudoaxe_kappa4C_test.h | 2 +- 5 files changed, 79 insertions(+), 49 deletions(-) commit d263ca5dde243fd04049b6ab7ab3205698f1fecc Author: Frederic-Emmanuel PICCA Date: Thu Jan 18 16:58:19 2007 +0100 * pseudoaxe_eulerian4C -> pseudoaxeengine_eulerian4C include/hkl/derivedpseudoaxeengine.h | 13 +++++- include/hkl/pseudoaxe.h | 1 + ...e_eulerian4C.h => pseudoaxeengine_eulerian4C.h} | 33 +++++++------ src/HKLException.cpp | 2 +- src/SConscript | 3 +- src/pseudoaxe.cpp | 8 +++- ...lerian4C.cpp => pseudoaxeengine_eulerian4C.cpp} | 54 ++++++++++++++++++---- test/SConscript | 4 +- test/pseudoaxe_eulerian4C_test.cpp | 16 ++++--- test/pseudoaxe_eulerian4C_test.h | 2 +- 10 files changed, 98 insertions(+), 38 deletions(-) commit 232ddefd7cb9ad0b620a755cba3e9c02f6ccb2d5 Author: Frederic-Emmanuel PICCA Date: Thu Jan 18 14:19:17 2007 +0100 * pseudoAxe_twoC -> pseudoAxeEngine_twoC include/hkl/pseudoaxe.h | 245 ++------------ include/hkl/pseudoaxeengine.h | 9 +- .../{pseudoaxe_twoC.h => pseudoaxeengine_twoC.h} | 53 ++- include/hkl/pseudomultiaxe.h | 97 ------ src/SConscript | 17 +- src/pseudoaxe.cpp | 93 +++--- src/pseudoaxeengine_twoC.cpp | 355 +++++++++++++++++++++ src/pseudomultiaxe.cpp | 112 ------- test/SConscript | 6 +- test/pseudoaxe_twoC_test.cpp | 13 +- test/pseudoaxe_twoC_test.h | 2 +- 11 files changed, 504 insertions(+), 498 deletions(-) commit 3fc071e226f160b6f7be9062bce2de9795fea6e1 Author: Frederic-Emmanuel PICCA Date: Mon Jan 15 17:47:27 2007 +0100 * remove a memory leak in the PseudoAxeEngine class. doc/uml/next_hkl.dia | 364 ++++++++++++++--------------------- include/hkl/pseudoaxeengine.h | 2 + src/diffractometer_kappa6C.cpp | 2 + src/pseudoaxeengine.cpp | 3 + src/pseudoaxeengine_kappa4C.cpp | 3 - test/diffractometer_kappa4C_test.cpp | 4 - test/diffractometer_kappa6C_test.cpp | 14 +- 7 files changed, 167 insertions(+), 225 deletions(-) commit ae54470262416bec21952c8a5a91a6b17d064353 Author: Frederic-Emmanuel PICCA Date: Mon Jan 15 16:43:59 2007 +0100 * put the right eulerian <-> kappa conversion in the PseudoAxeEngine_kappa4C include/hkl/diffractometer_kappa4C.h | 2 +- src/pseudoaxeengine_kappa4C.cpp | 6 +++--- test/diffractometer_kappa4C_test.cpp | 16 +++++++++++++++- 3 files changed, 19 insertions(+), 5 deletions(-) commit 0f10d45ac763753bdf817b01ac021d978008630c Author: Frédéric-Emmanuel PICCA Date: Sun Jan 14 17:43:51 2007 +0100 * add the DerivedPseudoAxeEngine doc/uml/next_hkl.dia | 236 +++++++++++----------------------- include/hkl/derivedpseudoaxeengine.h | 193 +++++++++++++++++++++++++++ include/hkl/diffractometer_kappa4C.h | 2 +- include/hkl/diffractometer_kappa6C.h | 3 + include/hkl/pseudoaxeengine.h | 39 +++--- include/hkl/pseudoaxeengine_kappa4C.h | 7 + include/hkl/pseudoaxeengine_kappa6C.h | 44 +++++++ include/hkl/pseudomultiaxe.h | 5 +- src/diffractometer_eulerian6C.cpp | 4 +- src/diffractometer_kappa6C.cpp | 4 + src/geometry.cpp | 2 +- src/geometry_eulerian4C.cpp | 5 +- src/mode_eulerian6C.cpp | 24 ++-- src/pseudoaxe.cpp | 18 +-- src/pseudoaxeengine.cpp | 4 +- src/pseudoaxeengine_kappa4C.cpp | 79 +++++++----- src/pseudomultiaxe.cpp | 13 +- src/samplelist.cpp | 2 +- src/smatrix.cpp | 10 +- src/svector.cpp | 4 +- test/SConscript | 2 +- test/diffractometer_kappa4C_test.cpp | 11 +- test/diffractometer_kappa6C_test.cpp | 32 +++++ test/diffractometer_kappa6C_test.h | 2 + 24 files changed, 478 insertions(+), 267 deletions(-) commit 0bd1c2e4bdc0a1b1de5ea86c2220bb509de348e4 Author: Frederic-Emmanuel PICCA Date: Thu Jan 11 18:14:24 2007 +0100 * work on the pseudoAxeEngine (in progress) config-linux2.py | 1 - doc/uml/next_hkl.dia | 886 +++++++++++++-------- include/hkl/diffractometer_kappa4C.h | 6 +- include/hkl/pseudoaxeengine.h | 200 +++++ ...eengine_kappa4C.h => pseudoaxeengine_kappa4C.h} | 16 +- include/hkl/pseudomultiaxe.h | 27 +- include/hkl/pseudomultiaxeengine.h | 254 ------ src/SConscript | 4 +- src/diffractometer_kappa4C.cpp | 10 +- src/pseudoaxeengine.cpp | 10 + ...ine_kappa4C.cpp => pseudoaxeengine_kappa4C.cpp} | 39 +- src/pseudomultiaxe.cpp | 24 +- src/pseudomultiaxeengine.cpp | 62 -- test/diffractometer_kappa4C_test.cpp | 6 +- 14 files changed, 826 insertions(+), 719 deletions(-) commit 75a57cb3218148b3b03242ced00db1acbe071bae Author: Frederic-Emmanuel PICCA Date: Wed Jan 10 18:03:40 2007 +0100 begin of the pseudoAxes refactoring config-linux2.py | 1 + include/hkl/derivedpseudoaxe.h | 18 +- include/hkl/diffractometer_kappa4C.h | 3 + include/hkl/pseudoaxe.h | 6 +- include/hkl/pseudomultiaxe.h | 109 +++++++++++++ include/hkl/pseudomultiaxeengine.h | 254 +++++++++++++++++++++++++++++ include/hkl/pseudomultiaxeengine_kappa4C.h | 52 ++++++ src/HKLException.cpp | 2 +- src/SConscript | 3 + src/diffractometer_kappa4C.cpp | 13 +- src/gui/pseudoaxespinbutton.cpp | 1 - src/pseudoaxe.cpp | 18 +- src/pseudoaxelist.cpp | 2 +- src/pseudomultiaxe.cpp | 119 ++++++++++++++ src/pseudomultiaxeengine.cpp | 62 +++++++ src/pseudomultiaxeengine_kappa4C.cpp | 133 +++++++++++++++ src/sample_monocrystal.cpp | 10 +- test/SConscript | 14 +- test/diffractometer_kappa4C_test.cpp | 56 +++---- test/diffractometer_kappa4C_test.h | 13 +- 20 files changed, 814 insertions(+), 75 deletions(-) commit 7521ced3d553d598ac7974139c55a08065400726 Author: Frederic-Emmanuel PICCA Date: Mon Jan 8 10:43:28 2007 +0100 * changes to remove msvc6 warnings. now FitParameterList::ready_to_fit no more throw exception. include/hkl/derivedpseudoaxe.h | 1 - include/hkl/fitparameterlist.h | 2 +- include/hkl/sample_monocrystal.h | 2 +- src/HKLException.cpp | 2 +- src/sample_monocrystal.cpp | 19 +++++++++++-------- 5 files changed, 14 insertions(+), 12 deletions(-) commit 643d85b64312b0a5d3e29d431c407a2251a2df0a Author: Frédéric-Emmanuel PICCA Date: Sun Jan 7 17:37:23 2007 +0100 * work during the holidays config-linux2.py | 1 - include/hkl/affinement.h | 1 + include/hkl/affinementlist.h | 102 ++ include/hkl/axe.h | 1 + include/hkl/derivedpseudoaxe.h | 9 +- include/hkl/diffractometer.h | 11 + include/hkl/fitparameterlist.h | 2 +- include/hkl/geometry.h | 20 +- include/hkl/modelist.h | 39 +- include/hkl/mystring.h | 54 +- include/hkl/pseudoaxe.h | 14 +- include/hkl/pseudoaxelist.h | 22 +- include/hkl/reflectionlist.h | 1 + include/hkl/samplelist.h | 39 +- src/HKLException.cpp | 2 +- src/SConscript | 1 + src/affinementlist.cpp | 135 ++ src/diffractometer_eulerian6C.cpp | 2 +- src/fitparameterlist.cpp | 14 + src/geometry.cpp | 86 +- src/gui/axespinbutton.cpp | 198 +-- src/gui/axespinbutton.h | 4 +- src/gui/hklwindow.cpp | 2894 ++++++++++++++++++------------------- src/gui/hklwindow.h | 14 +- src/gui/main.cpp | 109 +- src/gui/modelcolumns.h | 29 +- src/gui/pseudoaxespinbutton.cpp | 239 ++- src/gui/pseudoaxespinbutton.h | 8 +- src/modelist.cpp | 70 +- src/mystring.cpp | 39 +- src/pseudoaxe.cpp | 6 +- src/pseudoaxe_kappa4C.cpp | 12 +- src/pseudoaxelist.cpp | 58 +- src/samplelist.cpp | 91 +- test/samplelist_test.cpp | 2 +- 35 files changed, 2237 insertions(+), 2092 deletions(-) commit a7add005a7fe136376ad9ba25bb6f81eef46caa0 Author: Frederic-Emmanuel PICCA Date: Wed Dec 20 17:05:09 2006 +0100 * start updating the uml diagram doc/uml/hkl.dia | 26504 ++++++++++++++++-------------------------------------- 1 file changed, 7640 insertions(+), 18864 deletions(-) commit 539424773790dcd3141326af5607ffb2260a9898 Author: Frederic-Emmanuel PICCA Date: Wed Dec 20 16:19:58 2006 +0100 * start refactoring of the frontend (gui). include/hkl/mystring.h | 7 +++++++ src/gui/axespinbutton.cpp | 16 ++++++++-------- src/gui/hklwindow.cpp | 2 +- src/gui/hklwindow.h | 4 ++-- src/gui/pseudoaxespinbutton.h | 4 ++-- 5 files changed, 20 insertions(+), 13 deletions(-) commit dc5db55efee0d37527686df1e834cb53aab452c6 Author: Frederic-Emmanuel PICCA Date: Wed Dec 20 14:37:11 2006 +0100 * add a parameter to the eulerian pseudoAxes to switch between the 2 possible solutions. TODO | 3 +- VERSION | 2 +- include/hkl/diffractometer_kappa4C.h | 2 +- include/hkl/pseudoaxe_kappa4C.h | 3 + src/pseudoaxe_kappa4C.cpp | 117 ++++++++++++++++++++++++++++------- 5 files changed, 101 insertions(+), 26 deletions(-) commit 293e58372246a02a653f60dbc3ed4f8bd9daca39 Author: Frederic-Emmanuel PICCA Date: Tue Dec 19 17:32:08 2006 +0100 * add the DiffractometerFactory include/hkl/diffractometer_kappa4C.h | 2 +- include/hkl/diffractometer_kappa6C.h | 2 +- include/hkl/diffractometerfactory.h | 39 ++++++++++++++++++++++++++++++ include/hkl/enums.h | 11 +++++++++ src/SConscript | 1 + src/diffractometer_kappa4C.cpp | 2 +- src/diffractometer_kappa6C.cpp | 2 +- src/diffractometerfactory.cpp | 46 ++++++++++++++++++++++++++++++++++++ test/diffractometer_kappa4C_test.cpp | 4 ++-- test/diffractometer_kappa6C_test.cpp | 4 ++-- 10 files changed, 105 insertions(+), 8 deletions(-) commit 893095ed322aa3c8b4f41ca54fd9cce24bb26dc9 Author: Frederic-Emmanuel PICCA Date: Tue Dec 19 16:30:57 2006 +0100 * second part of the documentation. include/hkl/HKLException.h | 18 +- include/hkl/affinement.h | 294 ++++++------ include/hkl/axe.h | 190 ++++---- include/hkl/constants.h | 40 +- include/hkl/convenience.h | 48 +- include/hkl/derivedmode.h | 76 +-- include/hkl/derivedpseudoaxe.h | 280 +++++------ include/hkl/diffractometer.h | 160 +++---- include/hkl/diffractometer_eulerian4C.h | 58 +-- include/hkl/diffractometer_eulerian6C.h | 52 +-- include/hkl/diffractometer_kappa4C.h | 60 +-- include/hkl/diffractometer_kappa6C.h | 52 +-- include/hkl/diffractometer_twoC.h | 58 +-- include/hkl/enums.h | 26 +- include/hkl/fitparameter.h | 220 ++++----- include/hkl/fitparameterlist.h | 264 +++++------ include/hkl/geometry.h | 402 ++++++++-------- include/hkl/geometry_eulerian4C.h | 385 ++++++++------- include/hkl/geometry_eulerian6C.h | 382 ++++++++------- include/hkl/geometry_kappa.h | 106 ++--- include/hkl/geometry_kappa4C.h | 312 +++++++------ include/hkl/geometry_kappa6C.h | 394 +++++++++------- include/hkl/geometry_twoC.h | 286 ++++++------ include/hkl/hklobject.h | 122 ++--- include/hkl/lattice.h | 454 +++++++++--------- include/hkl/mode.h | 228 ++++----- include/hkl/mode_eulerian4C.h | 204 ++++---- include/hkl/mode_eulerian6C.h | 112 ++--- include/hkl/mode_kappa4C.h | 36 +- include/hkl/mode_kappa6C.h | 36 +- include/hkl/mode_twoC.h | 96 ++-- include/hkl/modelist.h | 176 +++---- include/hkl/mymap.h | 788 +++++++++++++++---------------- include/hkl/mystring.h | 134 +++--- include/hkl/myvector.h | 802 ++++++++++++++++---------------- include/hkl/object.h | 318 ++++++------- include/hkl/observer.h | 152 +++--- include/hkl/parameter.h | 86 ++-- include/hkl/parameterlist.h | 194 ++++---- include/hkl/pseudoaxe.h | 430 +++++++++-------- include/hkl/pseudoaxe_eulerian4C.h | 234 +++++----- include/hkl/pseudoaxe_eulerian6C.h | 122 ++--- include/hkl/pseudoaxe_kappa4C.h | 142 +++--- include/hkl/pseudoaxe_kappa6C.h | 70 +-- include/hkl/pseudoaxe_twoC.h | 110 ++--- include/hkl/pseudoaxelist.h | 174 +++---- include/hkl/quaternion.h | 280 +++++------ include/hkl/range.h | 259 ++++++----- include/hkl/reflection.h | 322 ++++++------- include/hkl/reflection_monocrystal.h | 61 ++- include/hkl/reflectionfactory.h | 43 +- include/hkl/reflectionlist.h | 203 ++++---- include/hkl/sample.h | 175 ++++--- include/hkl/sample_monocrystal.h | 186 ++++---- include/hkl/samplefactory.h | 56 ++- include/hkl/samplelist.h | 150 ++++-- include/hkl/source.h | 238 +++++----- include/hkl/svecmat.h | 767 ++++++++++++++++-------------- include/hkl/value.h | 302 ++++++------ 59 files changed, 6505 insertions(+), 5920 deletions(-) commit 158dae8abe9b987b3e06214b3c5585485d040b58 Author: Frédéric-Emmanuel PICCA Date: Sun Dec 17 16:16:28 2006 +0100 * first part of the documentation before release 2.3.0 doc/Doxyfile | 8 +- include/hkl/axe.h | 4 +- include/hkl/derivedmode.h | 11 +- include/hkl/derivedpseudoaxe.h | 319 ++++++++++++++++++-------------------- include/hkl/diffractometer.h | 215 ++++++++++++++----------- include/hkl/diffractometer_twoC.h | 2 +- include/hkl/enums.h | 6 + include/hkl/fitparameterlist.h | 71 ++++++++- include/hkl/geometry.h | 48 ++++-- include/hkl/hklobject.h | 46 +++--- include/hkl/lattice.h | 140 +++++++++++++++-- include/hkl/mode.h | 38 +++-- include/hkl/modelist.h | 70 ++++++++- include/hkl/mystring.h | 50 ++++-- include/hkl/myvector.h | 46 ++++++ include/hkl/object.h | 53 +++---- include/hkl/observer.h | 44 +++++- include/hkl/parameter.h | 9 ++ include/hkl/parameterlist.h | 56 ++++++- include/hkl/pseudoaxe.h | 58 +++++-- include/hkl/pseudoaxelist.h | 68 +++++++- include/hkl/reflection.h | 87 ++++++++++- src/object.cpp | 20 +-- 23 files changed, 1066 insertions(+), 403 deletions(-) commit 0d071da4ad04fd7289c84f3d68839ff2f511c4e5 Author: Frédéric-Emmanuel PICCA Date: Sat Dec 16 21:55:26 2006 +0100 * start updating the documentation include/hkl/HKLException.h | 18 +- include/hkl/affinement.h | 298 ++++++------ include/hkl/axe.h | 191 ++++---- include/hkl/constants.h | 42 +- include/hkl/convenience.h | 48 +- include/hkl/derivedmode.h | 58 +-- include/hkl/derivedpseudoaxe.h | 266 ++++++----- include/hkl/diffractometer.h | 86 ++-- include/hkl/diffractometer_eulerian4C.h | 58 +-- include/hkl/diffractometer_eulerian6C.h | 52 +-- include/hkl/diffractometer_kappa4C.h | 62 +-- include/hkl/diffractometer_kappa6C.h | 52 +-- include/hkl/diffractometer_twoC.h | 58 +-- include/hkl/enums.h | 14 +- include/hkl/fitparameter.h | 219 ++++----- include/hkl/fitparameterlist.h | 120 ++--- include/hkl/geometry.h | 360 +++++++-------- include/hkl/geometry_eulerian4C.h | 348 +++++++------- include/hkl/geometry_eulerian6C.h | 334 +++++++------- include/hkl/geometry_kappa.h | 106 ++--- include/hkl/geometry_kappa4C.h | 283 ++++++------ include/hkl/geometry_kappa6C.h | 347 +++++++------- include/hkl/geometry_twoC.h | 272 +++++------ include/hkl/hklobject.h | 118 ++--- include/hkl/lattice.h | 192 ++++---- include/hkl/mode.h | 194 ++++---- include/hkl/mode_eulerian4C.h | 204 ++++----- include/hkl/mode_eulerian6C.h | 113 +++-- include/hkl/mode_kappa4C.h | 36 +- include/hkl/mode_kappa6C.h | 36 +- include/hkl/mode_twoC.h | 96 ++-- include/hkl/modelist.h | 44 +- include/hkl/mymap.h | 785 ++++++++++++++++---------------- include/hkl/mystring.h | 76 ++-- include/hkl/myvector.h | 696 ++++++++++++++-------------- include/hkl/object.h | 316 ++++++------- include/hkl/observer.h | 56 +-- include/hkl/parameter.h | 69 ++- include/hkl/parameterlist.h | 66 +-- include/hkl/pseudoaxe.h | 306 +++++++------ include/hkl/pseudoaxe_eulerian4C.h | 226 ++++----- include/hkl/pseudoaxe_eulerian6C.h | 116 ++--- include/hkl/pseudoaxe_kappa4C.h | 142 +++--- include/hkl/pseudoaxe_kappa6C.h | 70 +-- include/hkl/pseudoaxe_twoC.h | 110 ++--- include/hkl/pseudoaxelist.h | 44 +- include/hkl/quaternion.h | 280 ++++++------ include/hkl/range.h | 221 ++++----- include/hkl/reflection.h | 166 ++++--- include/hkl/reflection_monocrystal.h | 38 +- include/hkl/reflectionfactory.h | 41 +- include/hkl/reflectionlist.h | 181 ++++---- include/hkl/sample.h | 92 ++-- include/hkl/sample_monocrystal.h | 103 +++-- include/hkl/samplefactory.h | 22 +- include/hkl/samplelist.h | 56 +-- include/hkl/source.h | 242 +++++----- include/hkl/svecmat.h | 702 ++++++++++++++-------------- include/hkl/value.h | 302 ++++++------ src/diffractometer_kappa.cpp | 17 - src/range.cpp | 12 +- src/sample.cpp | 9 - src/sample_monocrystal.cpp | 17 - 63 files changed, 5128 insertions(+), 5176 deletions(-) commit e47ae27c08352ceb7e93e705753404c4e336d3b9 Author: Frederic-Emmanuel Date: Fri Dec 15 16:30:13 2006 +0100 * update the diffractometer tests. include/hkl/samplelist.h | 3 + src/diffractometer_eulerian4C.cpp | 6 +- src/diffractometer_eulerian6C.cpp | 12 +- src/diffractometer_kappa4C.cpp | 8 +- src/diffractometer_kappa6C.cpp | 12 +- src/samplelist.cpp | 22 +- test/SConscript | 8 +- test/diffractometer_eulerian4C_test.cpp | 234 ++++++++-------- test/diffractometer_eulerian4C_test.h | 75 ++--- test/diffractometer_kappa4C_test.cpp | 72 ++++- test/diffractometer_kappa4C_test.h | 17 +- test/diffractometer_kappa6C_test.cpp | 84 +++++- test/diffractometer_kappa6C_test.h | 17 +- test/diffractometer_twoC_test.cpp | 470 ++++++++++++++++---------------- test/diffractometer_twoC_test.h | 65 ++--- 15 files changed, 630 insertions(+), 475 deletions(-) commit b6f4df3cc3a11a599b42b357c9491fee868dc5f1 Author: picca Date: Thu Dec 14 17:03:21 2006 +0100 * add the ModeList and PseudoAxeList class * modification of all diffractometers class config-linux2.py | 1 + doc/uml/next_hkl.dia | 749 +++++++++++++-- include/hkl/diffractometer.h | 1506 +------------------------------ include/hkl/diffractometer_eulerian4C.h | 2 +- include/hkl/diffractometer_eulerian6C.h | 2 +- include/hkl/diffractometer_kappa4C.h | 2 +- include/hkl/diffractometer_kappa6C.h | 2 +- include/hkl/diffractometer_twoC.h | 2 +- include/hkl/modelist.h | 39 + include/hkl/pseudoaxelist.h | 39 + src/SConscript | 7 +- src/diffractometer.cpp | 67 ++ src/diffractometer_eulerian4C.cpp | 34 +- src/diffractometer_eulerian6C.cpp | 25 +- src/diffractometer_kappa4C.cpp | 41 +- src/diffractometer_kappa6C.cpp | 38 +- src/diffractometer_twoC.cpp | 26 +- src/modelist.cpp | 153 ++++ src/pseudoaxelist.cpp | 153 ++++ src/samplelist.cpp | 26 +- 20 files changed, 1266 insertions(+), 1648 deletions(-) commit 14d2701a73d05e96470c8d24f4e2ff6fb24f00d5 Author: picca Date: Fri Dec 8 17:32:04 2006 +0100 * now all modes are ok include/hkl/derivedmode.h | 69 +++------ include/hkl/derivedpseudoaxe.h | 2 - include/hkl/geometry_kappa6C.h | 5 - include/hkl/mode_eulerian4C.h | 54 +++---- include/hkl/mode_eulerian6C.h | 11 +- include/hkl/parameterlist.h | 2 +- src/SConscript | 4 +- src/diffractometer_eulerian4C.cpp | 10 +- src/mode_eulerian4C.cpp | 193 ++++++++++++------------- src/mode_eulerian6C.cpp | 58 ++++---- src/parameterlist.cpp | 14 ++ test/SConscript | 6 +- test/mode_eulerian4C_test.cpp | 258 +++++++++++++++++----------------- test/mode_eulerian4C_test.h | 15 +- test/mode_kappa4C_test.cpp | 231 +++++++++++++++--------------- test/mode_kappa4C_test.h | 10 +- test/mode_kappa6C_test.cpp | 289 +++++++++++++++++++------------------- test/mode_kappa6C_test.h | 10 +- 18 files changed, 604 insertions(+), 637 deletions(-) commit 1c401e16f5ce16562079a081ea5d0f2f71a6fe3b Author: picca Date: Fri Dec 8 11:58:19 2006 +0100 * start refactoring of the mode part. include/hkl/mode.h | 197 +++++++++++++++++++++----------------------- include/hkl/mode_twoC.h | 20 ++--- include/hkl/pseudoaxe.h | 1 - src/SConscript | 3 +- src/diffractometer_twoC.cpp | 10 +-- src/mode.cpp | 14 ++++ src/mode_twoC.cpp | 44 +++++----- test/SConscript | 2 +- test/mode_twoC_test.cpp | 139 ++++++++++++++++--------------- test/mode_twoC_test.h | 7 +- 10 files changed, 221 insertions(+), 216 deletions(-) commit e641789b202fb6751499486f01448533ea819c7b Author: picca Date: Thu Dec 7 16:42:57 2006 +0100 * update to compile on win32 and add the axes method to the geometries SConstruct | 15 ++--- include/hkl/geometry_eulerian4C.h | 45 +++++++++++++-- include/hkl/geometry_eulerian6C.h | 35 ++++++++++-- include/hkl/geometry_kappa4C.h | 45 +++++++++++++-- include/hkl/geometry_kappa6C.h | 30 ++++++++++ include/hkl/geometry_twoC.h | 25 +++++++-- include/hkl/pseudoaxe_eulerian4C.h | 8 +-- include/hkl/pseudoaxe_twoC.h | 10 ++-- src/SConscript | 1 + src/geometry_eulerian4C.cpp | 36 ++++++------ src/geometry_eulerian6C.cpp | 40 +++++++------- src/geometry_kappa4C.cpp | 44 +++++++-------- src/geometry_kappa6C.cpp | 38 +++++++------ src/geometry_twoC.cpp | 40 +++++++------- src/gui/SConscript | 1 + src/pseudoaxe_eulerian4C.cpp | 39 ++++++------- src/pseudoaxe_twoC.cpp | 60 ++++++++++---------- src/range.cpp | 8 ++- test/pseudoaxe_eulerian4C_test.cpp | 88 ++++++++++------------------- test/pseudoaxe_eulerian6C_test.cpp | 110 +++++++++++++------------------------ test/pseudoaxe_kappa4C_test.cpp | 98 ++++++++++++--------------------- test/pseudoaxe_kappa6C_test.cpp | 42 +++++++------- 22 files changed, 449 insertions(+), 409 deletions(-) commit da12d2c27a5c64608140117722e6fbee640b36f5 Author: picca Date: Thu Dec 7 10:40:25 2006 +0100 * now all pseudoAxe are working. * add observer and observable class SConstruct | 5 +- config-linux2.py | 1 - doc/uml/next_hkl.dia | 2643 ++++++++++++++++++++++++++----- include/hkl/derivedpseudoaxe.h | 191 +-- include/hkl/fitparameter.h | 2 +- include/hkl/fitparameterlist.h | 1 - include/hkl/geometry.h | 15 +- include/hkl/geometry_eulerian4C.h | 2 +- include/hkl/geometry_eulerian6C.h | 30 + include/hkl/geometry_kappa.h | 7 - include/hkl/geometry_kappa6C.h | 31 + include/hkl/hklobject.h | 10 +- include/hkl/observer.h | 56 + include/hkl/parameter.h | 16 +- include/hkl/parameterlist.h | 76 + include/hkl/pseudoaxe.h | 159 +- include/hkl/pseudoaxe_eulerian4C.h | 22 +- include/hkl/pseudoaxe_eulerian6C.h | 34 +- include/hkl/pseudoaxe_kappa4C.h | 48 +- include/hkl/pseudoaxe_kappa6C.h | 2 - include/hkl/pseudoaxe_twoC.h | 49 +- include/hkl/range.h | 17 +- include/hkl/source.h | 6 - include/hkl/svecmat.h | 4 + src/SConscript | 7 +- src/fitparameter.cpp | 4 +- src/geometry.cpp | 9 - src/geometry_eulerian4C.cpp | 6 +- src/geometry_kappa.cpp | 10 - src/geometry_kappa4C.cpp | 12 +- src/geometry_kappa6C.cpp | 8 +- src/geometry_twoC.cpp | 8 +- src/hklobject.cpp | 5 +- src/observer.cpp | 70 + src/parameter.cpp | 4 +- src/parameterlist.cpp | 90 ++ src/pseudoaxe.cpp | 93 ++ src/pseudoaxe_eulerian4C.cpp | 202 ++- src/pseudoaxe_eulerian6C.cpp | 415 ++--- src/pseudoaxe_kappa4C.cpp | 368 ++--- src/pseudoaxe_twoC.cpp | 377 ++--- src/range.cpp | 230 ++- src/reflection.cpp | 7 +- src/source.cpp | 14 +- src/svector.cpp | 25 + test/SConscript | 21 +- test/affinement_simplex_test.cpp | 138 +- test/affinement_simplex_test.h | 4 +- test/axe_test.cpp | 38 +- test/axe_test.h | 42 +- test/diffractometer_eulerian4C_test.cpp | 702 ++++---- test/diffractometer_eulerian4C_test.h | 5 +- test/diffractometer_kappa4C_test.cpp | 44 +- test/diffractometer_kappa4C_test.h | 27 +- test/diffractometer_kappa6C_test.cpp | 60 +- test/diffractometer_kappa6C_test.h | 31 +- test/diffractometer_test.cpp | 135 +- test/diffractometer_test.h | 45 +- test/diffractometer_twoC_test.cpp | 522 +++--- test/diffractometer_twoC_test.h | 77 +- test/fitparameter_test.cpp | 82 +- test/fitparameter_test.h | 30 +- test/geometry_eulerian4C_test.cpp | 179 ++- test/geometry_eulerian4C_test.h | 5 +- test/geometry_eulerian6C_test.cpp | 271 ++-- test/geometry_eulerian6C_test.h | 77 +- test/geometry_kappa4C_test.cpp | 305 ++-- test/geometry_kappa4C_test.h | 5 +- test/geometry_kappa6C_test.cpp | 241 +-- test/geometry_kappa6C_test.h | 5 +- test/geometry_test.cpp | 136 +- test/geometry_test.h | 7 +- test/geometry_twoC_test.cpp | 218 +-- test/geometry_twoC_test.h | 11 +- test/hklobject_test.cpp | 10 +- test/hklobject_test.h | 26 +- test/lattice_test.cpp | 364 +++-- test/lattice_test.h | 47 +- test/libHKL_test.cpp | 4 +- test/main.cpp | 12 +- test/mode_eulerian4C_test.cpp | 501 +++--- test/mode_eulerian4C_test.h | 49 +- test/mode_kappa4C_test.cpp | 459 +++--- test/mode_kappa4C_test.h | 47 +- test/mode_kappa6C_test.cpp | 507 +++--- test/mode_kappa6C_test.h | 47 +- test/mode_twoC_test.cpp | 165 +- test/mode_twoC_test.h | 37 +- test/mystring_test.cpp | 6 +- test/mystring_test.h | 22 +- test/object_test.cpp | 27 +- test/object_test.h | 42 +- test/parameter_test.cpp | 13 +- test/parameter_test.h | 26 +- test/pseudoaxe_eulerian4C_test.cpp | 789 +++++---- test/pseudoaxe_eulerian4C_test.h | 34 +- test/pseudoaxe_eulerian6C_test.cpp | 678 ++++---- test/pseudoaxe_eulerian6C_test.h | 4 +- test/pseudoaxe_kappa4C_test.cpp | 1033 ++++++------ test/pseudoaxe_kappa4C_test.h | 52 +- test/pseudoaxe_kappa6C_test.cpp | 757 +++++---- test/pseudoaxe_kappa6C_test.h | 52 +- test/pseudoaxe_twoC_test.cpp | 429 ++--- test/pseudoaxe_twoC_test.h | 30 +- test/quaternion_test.cpp | 34 +- test/quaternion_test.h | 90 +- test/range_test.cpp | 19 +- test/range_test.h | 37 +- test/reflection_test.cpp | 128 +- test/reflection_test.h | 57 +- test/reflectionlist_test.cpp | 106 +- test/reflectionlist_test.h | 55 +- test/sample_test.cpp | 290 ++-- test/sample_test.h | 51 +- test/samplelist_test.cpp | 48 +- test/samplelist_test.h | 31 +- test/source_test.cpp | 53 +- test/source_test.h | 55 +- test/svecmat_test.cpp | 101 +- test/svecmat_test.h | 143 +- test/value_test.cpp | 13 +- test/value_test.h | 53 +- tool/doxygen.py | 23 +- 123 files changed, 9583 insertions(+), 6927 deletions(-) commit 6fb04d11f854219e6713a97da7d0d4984168663c Author: picca Date: Thu Nov 9 17:23:22 2006 +0100 * add some throw to method declaration. include/hkl/reflection_monocrystal.h | 2 +- include/hkl/reflectionfactory.h | 2 +- include/hkl/reflectionlist.h | 2 +- src/reflection_monocrystal.cpp | 2 +- src/reflectionfactory.cpp | 2 +- src/reflectionlist.cpp | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) commit 28447f70ea71205cc903c119e0c1a865d23b5994 Author: picca Date: Thu Nov 9 16:45:20 2006 +0100 * made modifications to pass all tests. doc/uml/next_hkl.dia | 282 +++++++++++++++++++++++++++++------ include/hkl/lattice.h | 20 +-- include/hkl/range.h | 12 +- include/hkl/reflection.h | 6 +- include/hkl/reflection_monocrystal.h | 10 +- include/hkl/reflectionlist.h | 2 +- src/lattice.cpp | 129 ++++++++-------- src/range.cpp | 37 +++-- src/reflection.cpp | 17 +-- src/reflection_monocrystal.cpp | 48 ------ src/reflectionlist.cpp | 4 +- src/sample.cpp | 2 +- src/sample_monocrystal.cpp | 16 +- test/SConscript | 11 +- test/range_test.cpp | 14 +- test/reflection_test.cpp | 46 +++--- test/reflectionlist_test.cpp | 30 ++-- test/sample_test.cpp | 20 +-- test/svecmat_test.cpp | 12 +- 19 files changed, 430 insertions(+), 288 deletions(-) commit 7b19f1caecce6fe0fe79cc16bad40fdc91919015 Author: picca Date: Thu Nov 9 14:02:59 2006 +0100 * another fit optimization. SConstruct | 2 +- include/hkl/fitparameterlist.h | 4 ++ include/hkl/lattice.h | 4 +- include/hkl/sample_monocrystal.h | 6 ++- include/hkl/value.h | 4 +- src/affinement_simplex.cpp | 112 +++++++++++---------------------------- src/lattice.cpp | 11 ++-- src/sample_monocrystal.cpp | 32 ++++++++--- src/value.cpp | 2 +- 9 files changed, 76 insertions(+), 101 deletions(-) commit 61e92b7c8c21a4936fa20f3f7e2dc67ced762516 Author: picca Date: Wed Nov 8 19:13:58 2006 +0100 * new profiling day. config-win32.py | 1 + include/hkl/lattice.h | 11 ++- include/hkl/range.h | 2 + include/hkl/reflection.h | 56 ++++--------- include/hkl/reflection_monocrystal.h | 4 +- include/hkl/reflectionlist.h | 2 +- include/hkl/svecmat.h | 37 +++++++-- src/axe.cpp | 2 +- src/geometry.cpp | 18 ++-- src/lattice.cpp | 108 ++++++++++++++++-------- src/quaternion.cpp | 32 ++++---- src/range.cpp | 14 ++++ src/reflection.cpp | 56 +++---------- src/reflection_monocrystal.cpp | 10 ++- src/reflectionfactory.cpp | 2 +- src/reflectionlist.cpp | 10 +-- src/sample_monocrystal.cpp | 11 ++- src/smatrix.cpp | 47 +++++++---- src/source.cpp | 8 +- src/svector.cpp | 155 ++++++++++++++++++----------------- test/affinement_simplex_test.cpp | 10 +-- 21 files changed, 328 insertions(+), 268 deletions(-) commit da02f6f255f8a3424d092d69bf38af3d53f06d80 Author: picca Date: Tue Nov 7 18:42:15 2006 +0100 * after refactoring of the svector code. config-linux2.py | 2 +- include/hkl/svecmat.h | 22 +++++-- src/sample_monocrystal.cpp | 7 ++- src/smatrix.cpp | 6 +- src/svector.cpp | 146 ++++++++++++++++++++++++++++----------------- 5 files changed, 118 insertions(+), 65 deletions(-) commit d5b2a6b68de660889f63cc047ee970f78f7bac20 Author: picca Date: Tue Nov 7 17:02:52 2006 +0100 * profiling of simplex before svector refactoring doc/uml/next_hkl.dia | 120 ++++++++-- include/hkl/affinement.h | 4 +- include/hkl/fitparameterlist.h | 3 + include/hkl/sample_monocrystal.h | 2 + include/hkl/svecmat.h | 7 +- src/affinement_simplex.cpp | 475 ++++++++++++++++++++------------------- src/sample_monocrystal.cpp | 53 ++--- src/svector.cpp | 2 +- 8 files changed, 386 insertions(+), 280 deletions(-) commit cd23eceacb7d0dcbaeb87ddda1d7bb8f64e11f34 Author: picca Date: Tue Nov 7 15:05:53 2006 +0100 * now affinement_simplex works. * add the config-*.py files. config-linux2.py | 1 + config-win32.py | 2 + include/hkl/fitparameterlist.h | 9 +++ include/hkl/lattice.h | 3 + include/hkl/sample_monocrystal.h | 2 + src/HKLException.cpp | 2 +- src/affinement_simplex.cpp | 118 ++++++++++++++++++++++++--------------- src/lattice.cpp | 101 +++++++++++++++------------------ src/range.cpp | 34 +++++------ src/reflection.cpp | 3 +- src/sample_monocrystal.cpp | 19 ++++--- src/smatrix.cpp | 2 + test/SConscript | 26 ++++++--- test/affinement_simplex_test.cpp | 4 +- 14 files changed, 187 insertions(+), 139 deletions(-) commit 8dbda93747238b72c6ffe5f1a7b1d5b930555db0 Author: picca Date: Mon Nov 6 16:13:05 2006 +0100 * remove a bug in the Reflection. _hkl_phi menber was declared in Reflection and reflection::MonoCrystal. include/hkl/reflection.h | 6 +++--- include/hkl/reflection_monocrystal.h | 9 --------- src/reflection.cpp | 6 ++++-- src/reflection_monocrystal.cpp | 2 +- 4 files changed, 8 insertions(+), 15 deletions(-) commit db64d690fe6b6f3e5edfea39126f13c413388883 Author: picca Date: Mon Nov 6 13:08:18 2006 +0100 * format all the files with astyle --style=gnu include/hkl/HKLException.h | 22 +- include/hkl/affinement.h | 56 +- include/hkl/axe.h | 37 +- include/hkl/constants.h | 16 +- include/hkl/convenience.h | 48 +- include/hkl/derivedmode.h | 93 +- include/hkl/derivedpseudoaxe.h | 361 ++-- include/hkl/diffractometer.h | 2881 ++++++++++++++++--------------- include/hkl/diffractometer_eulerian4C.h | 59 +- include/hkl/diffractometer_eulerian6C.h | 52 +- include/hkl/diffractometer_kappa4C.h | 63 +- include/hkl/diffractometer_kappa6C.h | 52 +- include/hkl/diffractometer_twoC.h | 57 +- include/hkl/enums.h | 19 +- include/hkl/fitparameter.h | 45 +- include/hkl/fitparameterlist.h | 33 +- include/hkl/geometry.h | 53 +- include/hkl/geometry_eulerian4C.h | 283 +-- include/hkl/geometry_eulerian6C.h | 231 +-- include/hkl/geometry_kappa.h | 115 +- include/hkl/geometry_kappa4C.h | 219 +-- include/hkl/geometry_kappa6C.h | 243 +-- include/hkl/geometry_twoC.h | 247 +-- include/hkl/hklobject.h | 28 +- include/hkl/lattice.h | 187 +- include/hkl/mode.h | 249 +-- include/hkl/mode_eulerian4C.h | 198 +-- include/hkl/mode_eulerian6C.h | 113 +- include/hkl/mode_kappa4C.h | 33 +- include/hkl/mode_kappa6C.h | 33 +- include/hkl/mode_twoC.h | 94 +- include/hkl/mymap.h | 966 +++++------ include/hkl/mystring.h | 17 +- include/hkl/myvector.h | 893 +++++----- include/hkl/object.h | 193 ++- include/hkl/parameter.h | 25 +- include/hkl/portability.h | 12 +- include/hkl/pseudoaxe.h | 309 ++-- include/hkl/pseudoaxe_eulerian4C.h | 219 +-- include/hkl/pseudoaxe_eulerian6C.h | 107 +- include/hkl/pseudoaxe_kappa4C.h | 120 +- include/hkl/pseudoaxe_kappa6C.h | 64 +- include/hkl/pseudoaxe_twoC.h | 90 +- include/hkl/quaternion.h | 15 +- include/hkl/range.h | 32 +- include/hkl/reflection.h | 189 +- include/hkl/reflection_monocrystal.h | 51 +- include/hkl/reflectionfactory.h | 43 +- include/hkl/reflectionlist.h | 203 +-- include/hkl/sample.h | 59 +- include/hkl/sample_monocrystal.h | 67 +- include/hkl/samplefactory.h | 23 +- include/hkl/samplelist.h | 49 +- include/hkl/source.h | 38 +- include/hkl/svecmat.h | 630 +++---- include/hkl/value.h | 35 +- src/HKLException.cpp | 108 +- src/affinement.cpp | 65 +- src/affinement_simplex.cpp | 504 +++--- src/axe.cpp | 161 +- src/convenience.cpp | 84 +- src/diffractometer_eulerian4C.cpp | 67 +- src/diffractometer_eulerian6C.cpp | 50 +- src/diffractometer_kappa.cpp | 20 +- src/diffractometer_kappa4C.cpp | 85 +- src/diffractometer_kappa6C.cpp | 78 +- src/diffractometer_twoC.cpp | 57 +- src/fitparameter.cpp | 105 +- src/fitparameterlist.cpp | 115 +- src/geometry.cpp | 710 ++++---- src/geometry_eulerian4C.cpp | 347 ++-- src/geometry_eulerian6C.cpp | 276 +-- src/geometry_kappa.cpp | 112 +- src/geometry_kappa4C.cpp | 357 ++-- src/geometry_kappa6C.cpp | 308 ++-- src/geometry_twoC.cpp | 247 +-- src/hklobject.cpp | 79 +- src/lattice.cpp | 631 +++---- src/mode_eulerian4C.cpp | 509 +++--- src/mode_eulerian6C.cpp | 861 ++++----- src/mode_twoC.cpp | 114 +- src/mystring.cpp | 99 +- src/object.cpp | 143 +- src/parameter.cpp | 71 +- src/pseudoaxe_eulerian4C.cpp | 412 ++--- src/pseudoaxe_eulerian6C.cpp | 499 +++--- src/pseudoaxe_kappa4C.cpp | 558 +++--- src/pseudoaxe_twoC.cpp | 522 +++--- src/quaternion.cpp | 399 ++--- src/range.cpp | 137 +- src/reflection.cpp | 228 +-- src/reflection_monocrystal.cpp | 128 +- src/reflectionfactory.cpp | 37 +- src/reflectionlist.cpp | 385 +++-- src/sample.cpp | 252 +-- src/sample_monocrystal.cpp | 394 ++--- src/samplefactory.cpp | 45 +- src/samplelist.cpp | 325 ++-- src/source.cpp | 239 +-- src/svector.cpp | 355 ++-- src/value.cpp | 237 +-- 101 files changed, 11320 insertions(+), 10864 deletions(-) commit 442cda584d275ef3f95e083a9bb3474e939f613c Author: picca frederic Date: Sat Nov 4 09:40:49 2006 +0100 * remove a bug in smatrix::operator == when nan src/smatrix.cpp | 564 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 279 insertions(+), 285 deletions(-) commit 26c7507a35ca2db6bb3ad91ed07ad6b3a1833c8b Author: picca Date: Thu Nov 2 18:20:04 2006 +0100 * work on affinement doc/uml/next_hkl.dia | 1003 ++++---------------------------------- include/hkl/crystal.h | 869 --------------------------------- include/hkl/crystallist.h | 87 ---- include/hkl/diffractometer.h | 301 ++++++------ include/hkl/fitparameter.h | 2 +- include/hkl/fitparameterlist.h | 8 +- include/hkl/lattice.h | 2 + src/HKLException.cpp | 2 +- src/affinement_simplex.cpp | 14 +- src/fitparameter.cpp | 2 +- src/lattice.cpp | 38 +- src/range.cpp | 1 + test/SConscript | 3 +- test/affinement_simplex_test.cpp | 162 +++--- test/affinement_simplex_test.h | 40 +- test/crystallist_test.cpp | 80 --- test/crystallist_test.h | 40 -- 17 files changed, 419 insertions(+), 2235 deletions(-) commit 62514ef8dfba338c42efb78b6f7f47892493a3be Author: picca Date: Thu Nov 2 16:44:59 2006 +0100 * add the SampleList and SampleFactory classes. * add the SampleList tests. doc/uml/next_hkl.dia | 718 ++++++++++++++++++++++------ include/hkl/enums.h | 10 + include/hkl/reflection.h | 17 +- include/hkl/reflectionfactory_monocrystal.h | 35 -- include/hkl/sample.h | 2 + include/hkl/sample_monocrystal.h | 4 +- include/hkl/samplefactory.h | 29 ++ include/hkl/samplelist.h | 42 ++ src/SConscript | 2 + src/reflection.cpp | 20 +- src/reflectionfactory_monocrystal.cpp | 23 - src/samplefactory.cpp | 39 ++ src/samplelist.cpp | 190 ++++++++ test/SConscript | 1 + test/samplelist_test.cpp | 48 ++ test/samplelist_test.h | 28 ++ 16 files changed, 997 insertions(+), 211 deletions(-) commit d4e10584fb2683eae1c7739f51ea13fadafdfa42 Author: picca Date: Tue Oct 31 20:14:06 2006 +0100 * update the uml diagramme doc/uml/next_hkl.dia | 361 +++++++++++++++++++++++++++++++++++++++------------ include/hkl/sample.h | 6 +- test/SConscript | 2 +- 3 files changed, 279 insertions(+), 90 deletions(-) commit 132226fb106619ef700910cc663fe9bb1327aed5 Author: picca Date: Tue Oct 31 19:59:31 2006 +0100 * now the sample Class is ok. doc/uml/next_hkl.dia | 312 +++++++++++++++++++++++++++++------- include/hkl/fitparameterlist.h | 15 +- include/hkl/lattice.h | 9 +- include/hkl/mystring.h | 21 ++- include/hkl/sample.h | 11 +- include/hkl/sample_monocrystal.h | 6 +- src/fitparameter.cpp | 9 +- src/fitparameterlist.cpp | 33 +--- src/geometry_eulerian4C.cpp | 8 +- src/lattice.cpp | 24 ++- src/mystring.cpp | 38 ++++- src/range.cpp | 2 +- src/reflection.cpp | 13 +- src/reflectionlist.cpp | 5 +- src/sample.cpp | 334 +++------------------------------------ src/sample_monocrystal.cpp | 183 +++++++-------------- test/SConscript | 4 +- test/fitparameter_test.cpp | 11 ++ test/lattice_test.cpp | 18 +++ test/lattice_test.h | 2 + test/reflection_test.cpp | 9 ++ test/reflectionlist_test.cpp | 47 +++--- test/sample_test.cpp | 333 ++++---------------------------------- test/sample_test.h | 20 --- 24 files changed, 547 insertions(+), 920 deletions(-) commit 0ea586ae18cd488630dcc636f67ff173a478c709 Author: picca Date: Mon Oct 30 19:52:15 2006 +0100 * start working on the sample part and the fitparameterlist TODO | 1 + doc/uml/next_hkl.dia | 964 ++++++++++++++++++++++++----------- include/hkl/fitparameterlist.h | 135 ++--- include/hkl/reflection.h | 7 +- include/hkl/reflection_monocrystal.h | 2 + include/hkl/reflectionlist.h | 4 + include/hkl/sample.h | 75 +++ include/hkl/sample_monocrystal.h | 67 +++ include/hkl/svecmat.h | 2 + src/SConscript | 1 + src/affinement_simplex.cpp | 10 +- src/fitparameterlist.cpp | 133 +++-- src/reflection.cpp | 4 +- src/sample.cpp | 431 ++++++++++++++++ src/sample_monocrystal.cpp | 268 ++++++++++ src/smatrix.cpp | 23 + test/reflection_test.cpp | 2 +- test/sample_test.cpp | 465 +++++++++++++++++ test/sample_test.h | 59 +++ 19 files changed, 2191 insertions(+), 462 deletions(-) commit 4afe5d3fb464579b0f666b3e6090893e10a26ff3 Author: picca Date: Fri Oct 27 16:27:45 2006 +0200 * remove the relevance in the Reflection class. * update all the reflection test. doc/uml/next_hkl.dia | 100 +++++++++++++++++++++-------------- include/hkl/enums.h | 16 +++--- include/hkl/reflection.h | 9 +--- include/hkl/reflection_monocrystal.h | 1 - include/hkl/reflectionfactory.h | 1 - src/reflection.cpp | 17 +----- src/reflection_monocrystal.cpp | 22 ++++---- src/reflectionfactory.cpp | 2 +- test/SConscript | 2 +- test/reflection_test.cpp | 99 ++++++++++++++++++---------------- test/reflection_test.h | 5 +- test/reflectionlist_test.cpp | 4 +- 12 files changed, 140 insertions(+), 138 deletions(-) commit c087c58e900471cb4e99d870a7fd98e708454f7f Author: picca Date: Fri Oct 27 15:10:06 2006 +0200 * modification of the ReflectionFactory doc/uml/next_hkl.dia | 552 +++------------------------------------- include/hkl/enums.h | 6 + include/hkl/reflectionfactory.h | 18 +- include/hkl/reflectionlist.h | 1 - src/SConscript | 1 - src/reflectionfactory.cpp | 21 +- src/reflectionlist.cpp | 16 +- 7 files changed, 71 insertions(+), 544 deletions(-) commit a0de38547101f60ddc8c6730c2da0d9f47a59d54 Author: picca Date: Fri Oct 27 14:00:29 2006 +0200 * add many ReflectionList test methods. doc/uml/next_hkl.dia | 6 +++--- test/reflectionlist_test.cpp | 51 +++++++++++++++++++++++++++++++++++++++----- test/reflectionlist_test.h | 6 ++++++ 3 files changed, 55 insertions(+), 8 deletions(-) commit 588de2c474613ef4e9335a88211c644f6b34b6ea Author: picca Date: Fri Oct 27 13:32:44 2006 +0200 * add the forgotten reflectionlist test files. test/reflectionlist_test.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++++ test/reflectionlist_test.h | 32 ++++++++++++++++++++++++ 2 files changed, 90 insertions(+) commit 5f62637397c7c185a77cf69d5d77316e46249f55 Author: picca Date: Fri Oct 27 13:24:46 2006 +0200 * remove a bug in the Value class * rename ReflectionListFactory into ReflectionList * add the enums header doc/uml/hkl.dia | 1679 +++++++++++++------- doc/uml/next_hkl.dia | 621 +------- include/hkl/enums.h | 4 + .../{reflectionlistfactory.h => reflectionlist.h} | 50 +- include/hkl/reflectionlistfactory_monocrystal.h | 28 - src/SConscript | 3 +- src/fitparameter.cpp | 2 +- ...eflectionlistfactory.cpp => reflectionlist.cpp} | 84 +- src/reflectionlistfactory_monocrystal.cpp | 33 - src/value.cpp | 8 +- test/SConscript | 2 +- test/lattice_test.cpp | 2 +- test/reflectionlistfactory_test.cpp | 39 - test/reflectionlistfactory_test.h | 28 - test/value_test.cpp | 24 + test/value_test.h | 4 + 16 files changed, 1276 insertions(+), 1335 deletions(-) commit 6edcbf8d8af06bdcbbe8a22932cb030b880ee902 Author: picca Date: Wed Oct 25 18:03:40 2006 +0200 * refactoring of the reflection part (cherry picked from 0484821076069bc9e86ebf8b73a85e74fb659383 commit) TODO | 1 + doc/uml/next_hkl.dia | 8943 ++++++++++++++++------- include/hkl/axe.h | 11 +- include/hkl/geometry.h | 29 +- include/hkl/geometry_eulerian4C.h | 38 +- include/hkl/geometry_eulerian6C.h | 25 +- include/hkl/geometry_kappa.h | 8 +- include/hkl/geometry_kappa4C.h | 21 +- include/hkl/geometry_kappa6C.h | 25 +- include/hkl/geometry_twoC.h | 17 +- include/hkl/mymap.h | 18 +- include/hkl/pseudoaxe.h | 8 +- include/hkl/reflection.h | 365 +- include/hkl/reflection_monocrystal.h | 55 + include/hkl/reflectionfactory.h | 38 + include/hkl/reflectionfactory_monocrystal.h | 35 + include/hkl/reflectionlist.h | 653 -- include/hkl/reflectionlistfactory.h | 111 + include/hkl/reflectionlistfactory_monocrystal.h | 28 + src/SConscript | 13 +- src/axe.cpp | 6 + src/geometry.cpp | 205 +- src/geometry_eulerian4C.cpp | 206 +- src/geometry_eulerian6C.cpp | 202 +- src/geometry_kappa.cpp | 16 +- src/geometry_kappa4C.cpp | 162 +- src/geometry_kappa6C.cpp | 201 +- src/geometry_twoC.cpp | 102 +- src/reflection.cpp | 142 + src/reflection_monocrystal.cpp | 82 + src/reflectionfactory.cpp | 14 + src/reflectionfactory_monocrystal.cpp | 23 + src/reflectionlistfactory.cpp | 223 + src/reflectionlistfactory_monocrystal.cpp | 33 + test/SConscript | 10 +- test/crystal_test.cpp | 462 -- test/crystal_test.h | 64 - test/geometry_eulerian4C_test.cpp | 38 +- test/geometry_test.cpp | 70 +- test/geometry_test.h | 5 +- test/reflection_test.cpp | 77 +- test/reflection_test.h | 5 +- test/reflectionlistfactory_test.cpp | 39 + test/reflectionlistfactory_test.h | 28 + 44 files changed, 7701 insertions(+), 5156 deletions(-) commit ad8d853aa33c066fc8b5f180fc99ae96b21adf8b Author: picca Date: Wed Oct 4 15:59:30 2006 +0200 * modification of the lyx doc doc/hkl.lyx | 2225 ++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 1198 insertions(+), 1027 deletions(-) commit f35e7ca54f65406989e734269661c07c7729f4be Author: picca Date: Wed Oct 4 15:58:54 2006 +0200 * add the Lattice tests TODO | 1 + doc/uml/next_hkl.dia | 5554 +++++++++++++++++++++++++------------------------ include/hkl/lattice.h | 15 +- src/lattice.cpp | 100 +- test/SConscript | 3 +- test/lattice_test.cpp | 288 ++- test/lattice_test.h | 30 +- 7 files changed, 3118 insertions(+), 2873 deletions(-) commit f89fbf519fdb1e1e28eb9fd6d71d816d35107159 Author: picca Date: Wed Oct 4 15:56:18 2006 +0200 * modification of a HKLException message of the set_current methode. src/range.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 0e087db1b5eca592cfc87c40a22a3803eea18618 Author: picca Date: Wed Oct 4 15:54:45 2006 +0200 * change the printToStream format of FitParameter src/fitparameter.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 1f785b3d36631856cbe1b317ad8893e913835c23 Author: picca Date: Fri Sep 22 18:19:26 2006 +0200 * update the uml diagramme. doc/uml/newt_hkl.dia | 15134 ------------------------------------------------- doc/uml/next_hkl.dia | 14959 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 14932 insertions(+), 15161 deletions(-) commit c20a3234495f3530a3acd1abeda7d396f3d178e5 Author: picca Date: Thu Sep 7 18:53:47 2006 +0200 DO NOT COMPILE doc/uml/newt_hkl.dia | 15134 +++++++++++++++++++++++++++++++++++++++ include/hkl/axe.h | 4 +- include/hkl/crystal.h | 244 +- include/hkl/fitparameterlist.h | 142 +- include/hkl/geometry.h | 6 +- include/hkl/hklobject.h | 78 + include/hkl/lattice.h | 82 + include/hkl/parameter.h | 76 + include/hkl/portability.h | 19 + include/hkl/reflectionlist.h | 653 ++ include/hkl/source.h | 30 +- include/hkl/value.h | 39 + src/SConscript | 7 +- src/affinement.cpp | 2 + src/affinement_simplex.cpp | 6 +- src/axe.cpp | 2 +- src/fitparameterlist.cpp | 32 +- src/hklobject.cpp | 43 + src/lattice.cpp | 287 + src/parameter.cpp | 44 + src/source.cpp | 104 +- src/value.cpp | 12 + test/SConscript | 4 +- test/crystal_test.cpp | 60 +- test/hklobject_test.cpp | 48 + test/hklobject_test.h | 26 + test/parameter_test.cpp | 43 + test/parameter_test.h | 26 + test/source_test.cpp | 4 +- 29 files changed, 16939 insertions(+), 318 deletions(-) commit fe136dc24ab598e9124aacc5ffae37965cfb30b4 Author: picca Date: Fri Sep 1 18:47:03 2006 +0200 * begin of the refactoring DO NOT COMPILE yet SConstruct | 2 +- TODO | 11 +- doc/Doxyfile | 1 - doc/uml/next_hkl.dia | 26653 +----------------------------- include/hkl/axe.h | 204 +- include/hkl/config.h | 19 - include/hkl/constants.h | 2 + include/hkl/diffractometer.h | 94 +- include/hkl/diffractometer_eulerian6C.h | 2 +- include/hkl/fitparameter.h | 94 +- include/hkl/fitparameterlist.h | 128 +- include/hkl/mymap.h | 2 +- include/hkl/myvector.h | 2 +- include/hkl/objectwithparameters.h | 117 - include/hkl/pseudoaxe.h | 8 +- include/hkl/range.h | 115 +- include/hkl/svecmat.h | 2 +- include/hkl/value.h | 100 +- src/SConscript | 16 +- src/axe.cpp | 168 +- src/convenience.cpp | 2 +- src/diffractometer_eulerian6C.cpp | 10 +- src/fitparameter.cpp | 75 +- src/fitparameterlist.cpp | 11 - src/gui/axespinbutton.cpp | 150 +- src/gui/axespinbutton.h | 35 +- src/gui/diffractometer2.glade | 4 +- src/gui/hklwindow.cpp | 68 +- src/gui/hklwindow.h | 7 +- src/gui/main.cpp | 10 +- src/gui/pseudoaxespinbutton.cpp | 169 +- src/gui/pseudoaxespinbutton.h | 33 +- src/mystring.cpp | 2 +- src/objectwithparameters.cpp | 89 - src/pseudoaxe_eulerian6C.cpp | 32 +- src/pseudoaxe_twoC.cpp | 10 + src/range.cpp | 78 +- src/value.cpp | 98 +- test/SConscript | 13 +- test/axe_test.cpp | 124 +- test/axe_test.h | 2 - test/fitparameter_test.cpp | 89 +- test/fitparameter_test.h | 18 +- test/objectwithparameters_test.cpp | 66 - test/objectwithparameters_test.h | 28 - test/range_test.cpp | 63 +- test/range_test.h | 8 +- test/value_test.cpp | 75 +- test/value_test.h | 11 +- 49 files changed, 1207 insertions(+), 27913 deletions(-) commit a421ea546daf149771bfc3be131ef734ab6cd19b Author: picca Date: Thu Aug 31 18:54:30 2006 +0200 * add the ObjectReadOnly class. with this class you can only set the name and the description in the constructor. include/hkl/object.h | 197 +++++++++++++++++++++++++++++++++------------------ src/object.cpp | 89 +++++++++++------------ 2 files changed, 170 insertions(+), 116 deletions(-) commit d987346c3f727cfb4a25fd61c74085a793eba6d5 Author: picca Date: Wed Aug 23 17:21:08 2006 +0200 * add the PseudoAxeSpinbutton to the gui. * add the isValid method to the Geometry classes. * change the pseudoAxe interface + get_initialized() + get_min() + get_max() * add all the related test functions. TODO | 13 +- include/hkl/derivedpseudoaxe.h | 76 ++++++++-- include/hkl/diffractometer.h | 20 ++- include/hkl/geometry.h | 10 ++ include/hkl/geometry_kappa.h | 7 + include/hkl/pseudoaxe.h | 189 +++++++++++++---------- include/hkl/pseudoaxe_eulerian4C.h | 9 +- include/hkl/pseudoaxe_eulerian6C.h | 16 +- include/hkl/pseudoaxe_kappa4C.h | 24 +-- include/hkl/pseudoaxe_twoC.h | 32 ++-- src/axe.cpp | 4 +- src/geometry.cpp | 9 ++ src/geometry_kappa.cpp | 10 ++ src/gui/SConscript | 1 + src/gui/axespinbutton.cpp | 1 - src/gui/hklwindow.cpp | 81 ++++++++-- src/gui/hklwindow.h | 9 ++ src/gui/main.cpp | 9 +- src/gui/pseudoaxespinbutton.cpp | 89 +++++++++++ src/gui/pseudoaxespinbutton.h | 30 ++++ src/pseudoaxe_eulerian4C.cpp | 108 +++++++------- src/pseudoaxe_eulerian6C.cpp | 166 +++++++++++++-------- src/pseudoaxe_kappa4C.cpp | 187 +++++++++++++---------- src/pseudoaxe_twoC.cpp | 274 +++++++++++++++++----------------- test/axe_test.cpp | 8 +- test/geometry_eulerian4C_test.cpp | 3 +- test/geometry_eulerian4C_test.h | 64 ++++---- test/geometry_eulerian6C_test.cpp | 6 +- test/geometry_kappa6C_test.cpp | 2 +- test/geometry_kappa6C_test.h | 62 ++++---- test/geometry_test.cpp | 12 ++ test/geometry_test.h | 2 + test/geometry_twoC_test.h | 70 ++++----- test/pseudoaxe_eulerian4C_test.cpp | 156 ++++++++++++++----- test/pseudoaxe_eulerian6C_test.cpp | 76 ++++++++-- test/pseudoaxe_kappa4C_test.cpp | 297 +++++++++++++++++++++++++++---------- test/pseudoaxe_kappa6C_test.cpp | 181 +++++++++++++++++----- test/pseudoaxe_twoC_test.cpp | 124 ++++++++++++---- 38 files changed, 1684 insertions(+), 753 deletions(-) commit a9980b3eaa90952072e1c17e3c40cb73ca805f8e Author: picca Date: Fri Aug 11 19:08:54 2006 +0200 *add the PseudoAxeInterface *add a gui base on gtkmm SConstruct | 2 +- include/hkl/derivedpseudoaxe.h | 70 +- include/hkl/diffractometer.h | 8 +- include/hkl/pseudoaxe.h | 72 +- include/hkl/pseudoaxe_eulerian4C.h | 10 +- include/hkl/pseudoaxe_eulerian6C.h | 28 +- include/hkl/pseudoaxe_kappa4C.h | 30 +- include/hkl/pseudoaxe_twoC.h | 51 +- src/SConscript | 2 +- src/diffractometer_eulerian4C.cpp | 8 +- src/diffractometer_eulerian6C.cpp | 6 +- src/diffractometer_kappa4C.cpp | 14 +- src/diffractometer_kappa6C.cpp | 12 +- src/diffractometer_twoC.cpp | 6 +- src/gui/SConscript | 28 + src/gui/axespinbutton.cpp | 48 + src/gui/axespinbutton.h | 28 + src/gui/diffractometer2.glade | 2775 ++++++++++++++++++++++++++++++++++++ src/gui/hklwindow.cpp | 1762 +++++++++++++++++++++++ src/gui/hklwindow.h | 173 +++ src/gui/main.cpp | 63 + src/gui/modelcolumns.h | 33 + src/pseudoaxe_eulerian4C.cpp | 59 +- src/pseudoaxe_eulerian6C.cpp | 81 +- src/pseudoaxe_kappa4C.cpp | 105 +- src/pseudoaxe_twoC.cpp | 107 +- test/pseudoaxe_eulerian4C_test.cpp | 113 +- test/pseudoaxe_eulerian6C_test.cpp | 97 +- test/pseudoaxe_kappa4C_test.cpp | 136 +- test/pseudoaxe_kappa6C_test.cpp | 90 +- test/pseudoaxe_twoC_test.cpp | 67 +- 31 files changed, 5492 insertions(+), 592 deletions(-) commit cc8358f44a2a70c4cb5db6df04cfa4d0067416b4 Author: picca Date: Fri Aug 11 15:39:19 2006 +0200 * resolv a bug in the simplex affinement method * add some usefull methode to the DiffractometerInterface: getAxe and setAxesFromCrystalReflection include/hkl/crystal.h | 137 ++++++++----- include/hkl/diffractometer.h | 157 ++++++++++++++- src/affinement_simplex.cpp | 66 ++++++- test/affinement_simplex_test.cpp | 151 +++++++------- test/crystal_test.cpp | 411 ++++++++++++++++++++------------------- 5 files changed, 593 insertions(+), 329 deletions(-) commit 94116eb4fc55be62962a7c405866595b598efa76 Author: picca Date: Wed Jul 26 18:34:39 2006 +0200 * add the pseudoAxes to the geometry::printToStream() include/hkl/diffractometer.h | 35 +++++++++++++++++++++++++++-------- include/hkl/pseudoaxe.h | 2 +- 2 files changed, 28 insertions(+), 9 deletions(-) commit 7b73c78de34324e6d4fb58516a492a5eaa6e7272 Author: picca Date: Wed Jul 26 17:32:05 2006 +0200 * update the TODO list TODO | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) commit 5d2db5585e4ed98197b3fcc749af358d46fae024 Author: picca Date: Wed Jul 26 16:55:11 2006 +0200 * update the unit test with non deprecated class test/main.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) commit b98373bcd1eb4f319cb777e2664320254f605d8f Author: picca Date: Wed Jul 26 16:34:45 2006 +0200 * add the profile option to the build system SConstruct | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) commit bbaff8ac1a2cd83456d599d6072dca5854b85687 Author: picca Date: Wed Jul 26 14:36:08 2006 +0200 * put all the myvector files into only one. include/hkl/linux/myvector.h | 503 --------------------------------------- include/hkl/myvector.h | 542 ++++++++++++++++++++++++++++++++++++++++++- include/hkl/win32/myvector.h | 444 ----------------------------------- 3 files changed, 540 insertions(+), 949 deletions(-) commit 1b77d370affa8238ff2fbcf5327367db2d9af8f3 Author: picca Date: Tue Jul 25 18:40:41 2006 +0200 now most of the library is based on templates. include/hkl/crystal.h | 46 +- include/hkl/derivedmode.h | 17 +- include/hkl/derivedpseudoaxe.h | 6 +- include/hkl/diffractometer.h | 370 +++++++------- include/hkl/linux/mymap.h | 541 --------------------- include/hkl/linux/myvector.h | 47 +- include/hkl/mode.h | 74 ++- include/hkl/mymap.h | 595 ++++++++++++++++++++++- include/hkl/object.h | 181 ++++--- include/hkl/pseudoaxe.h | 17 +- include/hkl/source.h | 197 +------- include/hkl/win32/mymap.h | 424 ---------------- src/HKLException.cpp | 21 +- src/SConscript | 6 +- src/diffractometer_eulerian4C.cpp | 4 +- src/diffractometer_kappa4C.cpp | 2 +- src/geometry.cpp | 33 +- src/geometry_eulerian4C.cpp | 4 + src/geometry_eulerian6C.cpp | 4 + src/geometry_kappa4C.cpp | 28 +- src/geometry_kappa6C.cpp | 12 +- src/geometry_twoC.cpp | 4 + src/mode_eulerian4C.cpp | 308 ++++++------ src/mode_twoC.cpp | 54 +-- src/mystring.cpp | 5 +- src/object.cpp | 16 +- src/pseudoaxe_eulerian4C.cpp | 162 ++++--- src/pseudoaxe_eulerian6C.cpp | 31 +- src/pseudoaxe_kappa4C.cpp | 14 +- src/pseudoaxe_twoC.cpp | 73 +-- src/quaternion.cpp | 9 +- src/source.cpp | 169 ++++--- src/svector.cpp | 13 +- src/value.cpp | 2 +- test/SConscript | 15 +- test/crystal_test.cpp | 2 + test/crystallist_test.cpp | 12 + test/crystallist_test.h | 2 + test/diffractometer_eulerian4C_test.cpp | 830 ++++++++++++++++---------------- test/diffractometer_kappa4C_test.cpp | 1 - test/geometry_eulerian4C_test.cpp | 12 +- test/geometry_kappa4C_test.cpp | 65 ++- test/geometry_kappa6C_test.cpp | 47 +- test/geometry_test.cpp | 31 +- test/geometry_twoC_test.cpp | 12 +- test/mode_eulerian4C_test.cpp | 115 +++-- test/mode_twoC_test.cpp | 70 +-- test/pseudoaxe_eulerian4C_test.cpp | 33 +- test/pseudoaxe_eulerian6C_test.cpp | 19 +- test/pseudoaxe_kappa4C_test.cpp | 235 ++++----- test/pseudoaxe_kappa4C_test.h | 4 +- test/pseudoaxe_kappa6C_test.cpp | 140 +++--- test/pseudoaxe_kappa6C_test.h | 8 +- test/pseudoaxe_twoC_test.cpp | 6 +- test/source_test.cpp | 18 +- test/source_test.h | 2 + test/svecmat_test.cpp | 2 +- 57 files changed, 2512 insertions(+), 2658 deletions(-) commit 8c63bafe19f3eddf38ae425c261f6e7cd197775e Author: picca Date: Thu Jun 29 14:37:20 2006 +0200 * DO NOT COMPILE include/hkl/axe.h | 13 +- include/hkl/crystal.h | 1038 +++++++++++++---- include/hkl/crystallist.h | 105 +- include/hkl/derivedmode.h | 67 ++ include/hkl/derivedpseudoaxe.h | 163 +++ include/hkl/diffractometer.h | 1840 ++++++++++++++++++++++--------- include/hkl/diffractometer_eulerian4C.h | 52 +- include/hkl/diffractometer_eulerian6C.h | 49 +- include/hkl/diffractometer_kappa.h | 42 - include/hkl/diffractometer_kappa4C.h | 60 +- include/hkl/diffractometer_kappa6C.h | 8 +- include/hkl/diffractometer_twoC.h | 23 +- include/hkl/geometry.h | 37 +- include/hkl/geometry_eulerian4C.h | 71 +- include/hkl/geometry_eulerian6C.h | 170 ++- include/hkl/geometry_kappa.h | 6 + include/hkl/geometry_kappa4C.h | 76 +- include/hkl/geometry_kappa6C.h | 91 +- include/hkl/geometry_twoC.h | 76 +- include/hkl/mode.h | 123 ++- include/hkl/mode_eulerian4C.h | 52 +- include/hkl/mode_eulerian6C.h | 153 +-- include/hkl/mode_kappa4C.h | 131 +-- include/hkl/mode_kappa6C.h | 143 +-- include/hkl/mode_twoC.h | 9 +- include/hkl/pseudoaxe.h | 170 ++- include/hkl/pseudoaxe_eulerian4C.h | 173 +-- include/hkl/pseudoaxe_eulerian6C.h | 104 +- include/hkl/pseudoaxe_kappa4C.h | 195 +--- include/hkl/pseudoaxe_kappa6C.h | 222 +--- include/hkl/pseudoaxe_twoC.h | 60 +- include/hkl/reflection.h | 697 ++++++------ src/SConscript | 28 +- src/crystal.cpp | 609 ---------- src/crystallist.cpp | 33 - src/diffractometer.cpp | 724 ------------ src/diffractometer_eulerian4C.cpp | 80 +- src/diffractometer_eulerian6C.cpp | 9 +- src/diffractometer_kappa4C.cpp | 81 +- src/diffractometer_kappa6C.cpp | 16 +- src/diffractometer_twoC.cpp | 8 +- src/geometry.cpp | 190 ++-- src/geometry_eulerian4C.cpp | 274 +++-- src/geometry_eulerian6C.cpp | 269 +++-- src/geometry_kappa.cpp | 8 + src/geometry_kappa4C.cpp | 265 +++-- src/geometry_kappa6C.cpp | 293 ++--- src/geometry_twoC.cpp | 158 ++- src/mode.cpp | 38 - src/mode_eulerian4C.cpp | 60 +- src/mode_eulerian6C.cpp | 191 +--- src/mode_kappa4C.cpp | 189 ---- src/mode_kappa6C.cpp | 194 ---- src/mode_twoC.cpp | 46 +- src/pseudoaxe.cpp | 18 - src/pseudoaxe_eulerian4C.cpp | 302 +---- src/pseudoaxe_eulerian6C.cpp | 215 +--- src/pseudoaxe_kappa4C.cpp | 420 +------ src/pseudoaxe_kappa6C.cpp | 488 -------- src/pseudoaxe_twoC.cpp | 119 +- src/reflection.cpp | 161 --- test/SConscript | 24 +- test/affinement_simplex_test.cpp | 22 +- test/affinement_simplex_test.h | 2 +- test/crystal_test.cpp | 333 +++--- test/crystal_test.h | 2 +- test/crystallist_test.cpp | 46 +- test/crystallist_test.h | 3 + test/diffractometer_eulerian4C_test.cpp | 472 ++++---- test/diffractometer_eulerian4C_test.h | 102 +- test/diffractometer_kappa4C_test.cpp | 41 +- test/diffractometer_kappa4C_test.h | 2 +- test/diffractometer_kappa6C_test.cpp | 54 +- test/diffractometer_kappa6C_test.h | 2 +- test/diffractometer_twoC_test.cpp | 30 +- test/geometry_eulerian4C_test.cpp | 3 +- test/geometry_eulerian6C_test.cpp | 5 +- test/geometry_kappa4C_test.cpp | 23 +- test/geometry_kappa6C_test.cpp | 24 +- test/geometry_twoC_test.cpp | 4 + test/geometry_twoC_test.h | 2 +- test/mode_eulerian4C_test.cpp | 8 +- test/mode_eulerian4C_test.h | 2 +- test/mode_kappa4C_test.cpp | 188 ++-- test/mode_kappa4C_test.h | 4 +- test/mode_kappa6C_test.cpp | 222 ++-- test/mode_kappa6C_test.h | 4 +- test/mode_twoC_test.cpp | 142 +-- test/mode_twoC_test.h | 2 +- test/pseudoaxe_eulerian4C_test.cpp | 38 +- test/pseudoaxe_eulerian6C_test.cpp | 26 +- test/pseudoaxe_kappa4C_test.cpp | 17 +- test/pseudoaxe_kappa6C_test.cpp | 60 +- test/pseudoaxe_kappa6C_test.h | 2 +- test/reflection_test.cpp | 124 +-- 95 files changed, 5785 insertions(+), 7955 deletions(-) commit 2c89d376ca102d5ddef064f5b90d872351de58a5 Author: picca Date: Thu Jun 22 14:04:41 2006 +0200 * add the psi pseudoAxe to the kappa diffractometers TODO | 2 +- include/hkl/HKLException.h | 3 - include/hkl/svecmat.h | 185 ------------------------- src/HKLException.cpp | 300 ++++++++++++----------------------------- src/diffractometer_kappa4C.cpp | 1 + src/diffractometer_kappa6C.cpp | 1 + 6 files changed, 87 insertions(+), 405 deletions(-) commit 2ae66cf84550dd8cc7d3846ff926b57737f54dac Author: picca Date: Mon Jun 19 15:27:50 2006 +0200 * update the version of the library VERSION | 2 +- include/hkl/config.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 1e4a35be57e58cb4760d163aee3ec0679c1de83b Author: picca Date: Mon Jun 19 15:19:29 2006 +0200 * modification of the pseudoAxe API (add the uninitialize method) * add the doc/SConscript file to generate the doc with : scons doc doc/SConscript | 2 ++ include/hkl/pseudoaxe.h | 28 ++++++++------------------- src/mystring.cpp | 6 +++--- src/pseudoaxe.cpp | 7 +++---- src/pseudoaxe_eulerian4C.cpp | 2 +- src/pseudoaxe_eulerian6C.cpp | 7 +++---- src/pseudoaxe_kappa4C.cpp | 46 ++++++++++++++++++++++---------------------- src/pseudoaxe_twoC.cpp | 14 +++++++------- 8 files changed, 50 insertions(+), 62 deletions(-) commit 0ea3b21303830b11e066b7081d0150392cff5ea9 Author: picca Date: Thu Jun 8 16:11:28 2006 +0200 * Modification of the scons system - remove the bksys directory - add a tool directory with the doxygen tool SConstruct | 164 +++++++++++++++++++--------- binding/python/SConscript | 20 ++-- bksys/__init__.py | 116 -------------------- bksys/bksys.py | 170 ----------------------------- bksys/boost_python.py | 117 -------------------- bksys/cppunit.py | 127 ---------------------- bksys/generic.py | 191 --------------------------------- bksys/gtkmm.py | 132 ----------------------- bksys/gtkmm2.4.py | 130 ---------------------- bksys/linux2/detect_bksys.py | 34 ------ bksys/linux2/detect_boost_python.py | 17 --- bksys/linux2/detect_cppunit.py | 26 ----- bksys/linux2/detect_generic.py | 11 -- bksys/linux2/detect_python.py | 19 ---- bksys/python.py | 89 --------------- bksys/win32/detect_bksys.py | 36 ------- bksys/win32/detect_cppunit.py | 13 --- bksys/win32/detect_generic.py | 17 --- src/SConscript | 12 +-- test/SConscript | 26 +++-- tool/doxygen.py | 208 ++++++++++++++++++++++++++++++++++++ 21 files changed, 355 insertions(+), 1320 deletions(-) commit f63cfd1efc3e90f3e3e5424b96a2f19eb2313b0e Author: picca Date: Wed Jun 7 10:57:08 2006 +0200 * update the doc include/hkl/geometry_kappa6C.h | 6 +++--- include/hkl/geometry_twoC.h | 2 +- include/hkl/linux/mymap.h | 10 +++++----- include/hkl/objectwithparameters.h | 19 +++++++------------ test/pseudoaxe_kappa6C_test.cpp | 2 +- 5 files changed, 17 insertions(+), 22 deletions(-) commit ba96243587b546daae215fcd513ddf2d81f9c7ba Author: picca Date: Tue Jun 6 18:04:47 2006 +0200 * add the random test to the euleria4C and kappa4C pseudoAxe test/pseudoaxe_eulerian4C_test.cpp | 59 ++++++++++++++++++++++++++++++++++++ test/pseudoaxe_kappa4C_test.cpp | 61 +++++++++++++++++++++++++++++++++++++- 2 files changed, 119 insertions(+), 1 deletion(-) commit 14525001e82a37dc696e5fba8d18d1a89bb30d1c Author: picca Date: Tue Jun 6 17:15:05 2006 +0200 * add random test for all modes. * change the Value copy constructor to be correct * update the pseudoAxe::eulerian6C::Tth, add the direction parameter to deal with gamma = delta = 0. if direction = 1 choose the vertical diffraction plan if direction = 0 choose the horizontal one. TODO | 1 + binding/python/diffractometer_kappa_wrap.cpp | 3 +- binding/python/diffractometer_wrap.cpp | 2 +- include/hkl/affinement.h | 2 +- include/hkl/diffractometer.h | 8 +- include/hkl/geometry.h | 13 +- include/hkl/mode_eulerian6C.h | 426 +++++++++++------------ include/hkl/objectwithparameters.h | 10 +- include/hkl/pseudoaxe_eulerian6C.h | 63 ++-- src/SConscript | 1 + src/diffractometer.cpp | 36 +- src/diffractometer_kappa.cpp | 3 +- src/geometry.cpp | 39 +++ src/mode_eulerian4C.cpp | 19 +- src/mode_eulerian6C.cpp | 487 +++++++++------------------ src/objectwithparameters.cpp | 11 +- src/pseudoaxe_eulerian6C.cpp | 96 +++--- src/value.cpp | 2 +- test/affinement_simplex_test.cpp | 2 + test/diffractometer_eulerian4C_test.cpp | 8 +- test/diffractometer_twoC_test.cpp | 6 +- test/geometry_twoC_test.cpp | 20 +- test/geometry_twoC_test.h | 4 + test/mode_eulerian4C_test.cpp | 346 ++++++++++++------- test/mode_eulerian4C_test.h | 8 +- test/mode_kappa4C_test.cpp | 113 +++++++ test/mode_kappa4C_test.h | 6 + test/mode_kappa6C_test.cpp | 113 +++++++ test/mode_kappa6C_test.h | 6 + test/objectwithparameters_test.cpp | 10 +- test/pseudoaxe_eulerian6C_test.cpp | 6 +- 31 files changed, 1059 insertions(+), 811 deletions(-) commit 91a32a12d876ba9e91cc5f9a928fd96f514213fd Author: picca Date: Thu Jun 1 15:04:09 2006 +0200 * add the pseudoAxe::kappa6C "tth" and "q" + test functions TODO | 6 +- include/hkl/geometry_kappa4C.h | 6 ++ include/hkl/geometry_kappa6C.h | 13 ++++ include/hkl/pseudoaxe_kappa6C.h | 94 +++++++++++++++++++++++-- src/diffractometer_kappa6C.cpp | 2 + src/geometry_kappa4C.cpp | 4 ++ src/geometry_kappa6C.cpp | 38 ++++++++++ src/pseudoaxe_eulerian6C.cpp | 43 +++++++----- src/pseudoaxe_kappa6C.cpp | 152 ++++++++++++++++++++++++++++++++++++++++ test/SConscript | 2 +- test/pseudoaxe_kappa6C_test.cpp | 137 +++++++++++++++++++++++++++++------- test/pseudoaxe_kappa6C_test.h | 7 +- 12 files changed, 447 insertions(+), 57 deletions(-) commit 507a5b5d88f7ac7a23892c90b38e79af2516705d Author: picca Date: Wed May 31 16:22:18 2006 +0200 * add the pseudoAxe::eulerian6C::Tth, Q and eulerian4C::vertical::Psi + test functions TODO | 8 +- include/hkl/geometry.h | 6 + include/hkl/geometry_eulerian6C.h | 13 ++ include/hkl/pseudoaxe_eulerian6C.h | 129 +++++++++++ src/SConscript | 1 + src/affinement_simplex.cpp | 459 +++++++++++++++++++------------------ src/diffractometer_eulerian6C.cpp | 12 +- src/geometry.cpp | 19 ++ src/geometry_eulerian4C.cpp | 15 ++ src/geometry_eulerian6C.cpp | 22 ++ src/pseudoaxe_eulerian6C.cpp | 334 +++++++++++++++++++++++++++ src/svector.cpp | 20 +- test/SConscript | 1 + test/geometry_eulerian6C_test.cpp | 57 ++++- test/geometry_eulerian6C_test.h | 4 + test/pseudoaxe_eulerian6C_test.cpp | 297 ++++++++++++++++++++++++ test/pseudoaxe_eulerian6C_test.h | 39 ++++ 17 files changed, 1190 insertions(+), 246 deletions(-) commit e5e4e3ffd1a9b10ee6fca12d8a2bcb6b0090967b Author: picca Date: Tue May 23 14:09:26 2006 +0200 * add the geometry::Eulerian6C::setFromGeometry method and its test function. include/hkl/geometry_eulerian6C.h | 8 +++ src/geometry_eulerian6C.cpp | 101 ++++++++++++++++++++++++++++++++++++++ test/geometry_eulerian6C_test.cpp | 39 +++++++++++++++ test/geometry_eulerian6C_test.h | 2 + 4 files changed, 150 insertions(+) commit 1ecb565292dba5fe75061e84a1f2945cd88175fa Author: picca Date: Tue May 23 10:59:20 2006 +0200 * clean the pseudoAxe code (remove the unnecessary dynamic_cast) src/pseudoaxe_eulerian4C.cpp | 6 +++--- src/pseudoaxe_kappa4C.cpp | 2 +- src/pseudoaxe_kappa6C.cpp | 20 +++----------------- 3 files changed, 7 insertions(+), 21 deletions(-) commit eaf5395c0f4ed24556f8c66c310fee5fba7862b1 Author: picca Date: Mon May 22 18:08:38 2006 +0200 * add the HKLEXCEPTION macro to take care of the location of the exception. * update all class to use HKLEXCEPTION. include/hkl/HKLException.h | 481 +++++------ include/hkl/linux/mymap.h | 43 +- include/hkl/linux/myvector.h | 732 ++++++++-------- include/hkl/win32/mymap.h | 43 +- include/hkl/win32/myvector.h | 798 +++++++++--------- src/convenience.cpp | 16 +- src/crystal.cpp | 146 ++-- src/diffractometer.cpp | 147 ++-- src/diffractometer_eulerian4C.cpp | 3 + src/diffractometer_eulerian6C.cpp | 189 +---- src/diffractometer_kappa4C.cpp | 49 +- src/diffractometer_kappa6C.cpp | 53 +- src/fitparameter.cpp | 140 +-- src/fitparameterlist.cpp | 188 ++--- src/geometry.cpp | 24 +- src/geometry_eulerian4C.cpp | 5 +- src/geometry_eulerian6C.cpp | 44 +- src/geometry_kappa4C.cpp | 10 +- src/geometry_kappa6C.cpp | 5 +- src/geometry_twoC.cpp | 23 +- src/mode.cpp | 10 +- src/mode_eulerian4C.cpp | 95 ++- src/mode_eulerian6C.cpp | 1687 ++++++++++++++++--------------------- src/mode_kappa4C.cpp | 60 +- src/mode_kappa6C.cpp | 60 +- src/mystring.cpp | 84 +- src/object.cpp | 164 ++-- src/objectwithparameters.cpp | 138 +-- src/pseudoaxe_eulerian4C.cpp | 9 +- src/pseudoaxe_kappa4C.cpp | 50 +- src/pseudoaxe_twoC.cpp | 50 +- src/range.cpp | 116 +-- src/smatrix.cpp | 701 ++++++--------- src/source.cpp | 5 +- src/svector.cpp | 180 ---- src/value.cpp | 152 ++-- 36 files changed, 2901 insertions(+), 3799 deletions(-) commit 3e5dff905fad96e0e06699ea576d13399f7527c5 Author: picca Date: Mon May 22 15:00:57 2006 +0200 * update the gtk frontend TODO | 6 +- binding/python/diffractometer.gazpacho | 152 ++++++++++++++++++++++++++++----- binding/python/diffractometer2.py | 101 ++++++++++++++-------- 3 files changed, 200 insertions(+), 59 deletions(-) commit 70b2fbbbf483fdb58cbbd3956c3da8468d4a5857 Author: picca Date: Fri May 19 15:33:08 2006 +0200 * add the pseudoAxe::kappa4C::vertical::twoC::Th2th, Q2th and Q with test functions. * now pseudoAxe::initialize throw an exception depending one pseudoAxe. * modification in the pseudoAxe to call correctly all virtual method with int the virtual method. TODO | 1 + include/hkl/geometry_kappa4C.h | 10 + include/hkl/pseudoaxe.h | 2 +- include/hkl/pseudoaxe_eulerian4C.h | 10 +- include/hkl/pseudoaxe_kappa4C.h | 96 +++++++- include/hkl/pseudoaxe_kappa6C.h | 8 +- include/hkl/pseudoaxe_twoC.h | 35 ++- src/geometry_kappa4C.cpp | 9 + src/pseudoaxe_eulerian4C.cpp | 49 +++-- src/pseudoaxe_kappa4C.cpp | 437 ++++++++++++++++++++++++++++++------- src/pseudoaxe_kappa6C.cpp | 8 +- src/pseudoaxe_twoC.cpp | 154 ++++++++----- test/SConscript | 5 +- test/geometry_kappa4C_test.cpp | 15 ++ test/geometry_kappa4C_test.h | 68 +++--- test/pseudoaxe_kappa4C_test.cpp | 232 +++++++++++++++++--- test/pseudoaxe_kappa4C_test.h | 8 +- test/pseudoaxe_twoC_test.cpp | 35 ++- 18 files changed, 936 insertions(+), 246 deletions(-) commit 53bd70219dd900673f763b420503477cf50a8e15 Author: picca Date: Thu May 18 17:18:39 2006 +0200 * add the th2th, q2th and q pseudoAxe::eulerian4C::Vertical * add the test function of thoses pseudoaxe. * modification of the setFromGeometry function, add a stric flag to deal with the extra axes when doing conversion between Geometries. TODO | 11 +- include/hkl/geometry.h | 3 +- include/hkl/geometry_eulerian4C.h | 8 +- include/hkl/geometry_kappa4C.h | 3 +- include/hkl/geometry_kappa6C.h | 3 +- include/hkl/geometry_twoC.h | 9 +- include/hkl/pseudoaxe_eulerian4C.h | 114 ++++++++++-------- src/geometry.cpp | 2 +- src/geometry_eulerian4C.cpp | 21 ++-- src/geometry_kappa4C.cpp | 19 ++- src/geometry_kappa6C.cpp | 37 ++++-- src/geometry_twoC.cpp | 20 ++-- src/mode_kappa4C.cpp | 20 ++-- src/mode_kappa6C.cpp | 20 ++-- src/pseudoaxe_eulerian4C.cpp | 213 ++++++++++++++++++++++++++++++++++ src/pseudoaxe_kappa4C.cpp | 22 ++-- src/pseudoaxe_kappa6C.cpp | 40 +++---- test/geometry_eulerian4C_test.cpp | 10 +- test/geometry_kappa4C_test.cpp | 6 +- test/geometry_kappa6C_test.cpp | 6 +- test/geometry_twoC_test.cpp | 16 +-- test/mode_kappa4C_test.cpp | 4 +- test/mode_kappa6C_test.cpp | 4 +- test/pseudoaxe_eulerian4C_test.cpp | 231 +++++++++++++++++++++++++++++++------ test/pseudoaxe_eulerian4C_test.h | 8 +- test/pseudoaxe_kappa4C_test.cpp | 10 +- test/pseudoaxe_kappa6C_test.cpp | 24 ++-- test/pseudoaxe_twoC_test.cpp | 84 +++++++------- test/pseudoaxe_twoC_test.h | 2 +- 29 files changed, 709 insertions(+), 261 deletions(-) commit 7d9a8c7b4e298b1e9a49b329e079fa51556b657c Author: picca Date: Wed May 17 16:28:25 2006 +0200 * update the setFromGeometry method of all geometries include/hkl/geometry_twoC.h | 22 ++--------- src/geometry_eulerian4C.cpp | 59 +++++++++++++++++----------- src/geometry_kappa4C.cpp | 54 ++++++++++++++++++-------- src/geometry_kappa6C.cpp | 60 +++++++++++++++++++---------- src/geometry_twoC.cpp | 94 ++++++++++++++++++++++++++------------------- src/pseudoaxe_kappa4C.cpp | 2 +- 6 files changed, 173 insertions(+), 118 deletions(-) commit a52d8862905d6246d56c65f54666d31ee0ec7e19 Author: picca Date: Wed May 17 14:06:34 2006 +0200 * update the TODO TODO | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) commit 0f0e44befc03e319e519420643a1d1c5850c7d2a Author: picca Date: Wed May 17 13:58:25 2006 +0200 * add the diffractometer::twoC::Vertical and test functions bksys/linux2/detect_bksys.py | 4 +- include/hkl/diffractometer_twoC.h | 58 ++++++ src/SConscript | 1 + src/diffractometer_twoC.cpp | 44 ++++ src/mode_twoC.cpp | 2 +- test/SConscript | 1 + test/diffractometer_twoC_test.cpp | 421 ++++++++++++++++++++++++++++++++++++++ test/diffractometer_twoC_test.h | 61 ++++++ 8 files changed, 589 insertions(+), 3 deletions(-) commit 571bf7231e5310c7fce4f3f133270fb7484fcecb Author: picca Date: Tue May 16 16:42:25 2006 +0200 * add the twoC modes "symetric" and "fix_incidence" and test functions TODO | 7 ++-- include/hkl/mode_twoC.h | 53 ++++++++++++++++++++++++ src/SConscript | 1 + src/mode_twoC.cpp | 72 ++++++++++++++++++++++++++++++++ test/SConscript | 1 + test/mode_twoC_test.cpp | 106 ++++++++++++++++++++++++++++++++++++++++++++++++ test/mode_twoC_test.h | 41 +++++++++++++++++++ 7 files changed, 278 insertions(+), 3 deletions(-) commit b0f9651709be4acb7b8f950b911b36af2eb5fafc Author: picca Date: Tue May 16 13:58:07 2006 +0200 * add the pseudoAxe::TwoC::Vertical with test functions. * add the setFromGeometry method to Geometries. * remove CVS header of some files. TODO | 12 +- include/hkl/constants.h | 145 +-------- include/hkl/crystal.h | 266 ---------------- include/hkl/geometry.h | 235 +------------- include/hkl/geometry_eulerian4C.h | 24 +- include/hkl/geometry_kappa4C.h | 23 +- include/hkl/geometry_kappa6C.h | 13 +- include/hkl/pseudoaxe.h | 4 +- include/hkl/pseudoaxe_eulerian4C.h | 85 ++++- include/hkl/pseudoaxe_kappa4C.h | 24 +- include/hkl/pseudoaxe_kappa6C.h | 16 +- include/hkl/pseudoaxe_twoC.h | 111 +++++++ src/SConscript | 1 + src/crystal.cpp | 303 +----------------- src/diffractometer.cpp | 9 +- src/geometry.cpp | 4 + src/geometry_eulerian4C.cpp | 117 +++---- src/geometry_kappa4C.cpp | 137 ++++---- src/geometry_kappa6C.cpp | 74 +++-- src/pseudoaxe_eulerian4C.cpp | 29 +- src/pseudoaxe_kappa4C.cpp | 48 +-- src/pseudoaxe_kappa6C.cpp | 71 +++-- src/pseudoaxe_twoC.cpp | 247 +++++++++++++++ src/reflection.cpp | 536 +++++++++----------------------- src/source.cpp | 364 +++++++--------------- test/SConscript | 1 + test/crystal_test.cpp | 36 +-- test/diffractometer_eulerian4C_test.cpp | 6 +- test/pseudoaxe_twoC_test.cpp | 152 +++++++++ test/pseudoaxe_twoC_test.h | 39 +++ 30 files changed, 1190 insertions(+), 1942 deletions(-) commit 2b17a2dead48bf0ba572ac93aecfe715c8c98d81 Author: picca Date: Thu May 11 15:31:06 2006 +0200 * add the twoC geometry and is test functions TODO | 4 ++ include/hkl/geometry_twoC.h | 79 +++++++++++++++++++++ src/SConscript | 1 + src/geometry_twoC.cpp | 90 ++++++++++++++++++++++++ test/SConscript | 1 + test/geometry_twoC_test.cpp | 163 ++++++++++++++++++++++++++++++++++++++++++++ test/geometry_twoC_test.h | 45 ++++++++++++ 7 files changed, 383 insertions(+) commit 3457b83d80db3dbf3fc3054595c971aa5b95d691 Author: picca Date: Tue May 9 17:47:29 2006 +0200 * update the TODO list * change the name of pseudoAxe::kappa6C::kappa4C::psi in "psi_v" TODO | 16 +++++++++++----- src/pseudoaxe_kappa6C.cpp | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) commit a6903bfeba68d9aab12b6acb071a1a0220de034c Author: picca Date: Tue May 9 16:59:50 2006 +0200 * add the pseudoAxe::kappa6C::kappa4C::vertical and their test functions include/hkl/geometry_eulerian4C.h | 2 +- include/hkl/geometry_kappa4C.h | 13 +- include/hkl/geometry_kappa6C.h | 7 ++ include/hkl/pseudoaxe_kappa4C.h | 9 +- include/hkl/pseudoaxe_kappa6C.h | 103 ++++++++++----- src/geometry_eulerian4C.cpp | 4 +- src/geometry_kappa4C.cpp | 40 +++++- src/geometry_kappa6C.cpp | 12 ++ src/pseudoaxe_eulerian4C.cpp | 2 +- src/pseudoaxe_kappa6C.cpp | 256 +++++++++++++++++++++++++++++--------- test/SConscript | 1 + test/geometry_kappa6C_test.cpp | 1 - test/pseudoaxe_kappa6C_test.cpp | 179 ++++++++++++++++++++++++++ test/pseudoaxe_kappa6C_test.h | 41 ++++++ 14 files changed, 569 insertions(+), 101 deletions(-) commit dbbfc43f62ff6c5535b3d0dba0a881f4aeeb7272 Author: picca Date: Thu May 4 13:48:53 2006 +0200 * add the pseudoAxe::kappa4C::vertical::Psi and is test function TODO | 22 ++-- include/hkl/geometry_eulerian4C.h | 139 +++++++++++++++++-------- include/hkl/geometry_kappa4C.h | 47 ++++++++- include/hkl/pseudoaxe_kappa4C.h | 68 +++++++++---- include/hkl/pseudoaxe_kappa6C.h | 6 +- src/geometry_eulerian4C.cpp | 209 ++++++++++++++++++++++++++------------ src/geometry_kappa4C.cpp | 143 ++++++++++++++++++-------- src/pseudoaxe_eulerian4C.cpp | 18 ++-- src/pseudoaxe_kappa4C.cpp | 85 ++++++++++++++-- src/pseudoaxe_kappa6C.cpp | 27 +++-- test/pseudoaxe_kappa4C_test.cpp | 111 +++++++++++++++++--- test/pseudoaxe_kappa4C_test.h | 7 +- 12 files changed, 653 insertions(+), 229 deletions(-) commit 452fef17be32c9bd7346a3f9e099decd8a00f56b Author: picca Date: Wed Apr 26 15:20:11 2006 +0200 * now all vertical modes are working on win32 and linux include/hkl/mode_eulerian4C.h | 2 +- include/hkl/mode_kappa4C.h | 16 ++-- include/hkl/mode_kappa6C.h | 56 ++++++++++--- src/mode_kappa6C.cpp | 66 ++++++++++++---- test/SConscript | 1 + test/mode_kappa4C_test.cpp | 154 ++++++++++++++++++++++++++++++++++++ test/mode_kappa4C_test.h | 39 +++++++++ test/mode_kappa6C_test.cpp | 178 ++++++++++++++++++++++++++++++++++++++++++ test/mode_kappa6C_test.h | 39 +++++++++ 9 files changed, 514 insertions(+), 37 deletions(-) commit c97c726da8fea13916fc9e0bf7328780ba502824 Author: picca Date: Wed Apr 26 13:33:15 2006 +0200 * now mode::kappa4C works properly on windows include/hkl/mode_kappa4C.h | 44 ++++++++++++++++++- src/mode_kappa4C.cpp | 106 +++++++++++++++++++++++++++++++-------------- 2 files changed, 116 insertions(+), 34 deletions(-) commit 6445604fb1297a76d8f9b98a27d6a628d7ef5bc3 Author: picca Date: Wed Apr 26 10:29:57 2006 +0200 * update the mode::kappa4C before refactoring of the mode du to a bug of VC6 include/hkl/mode_eulerian4C.h | 24 ++++++++++++------------ include/hkl/mode_kappa4C.h | 30 +++++++++++++++--------------- src/mode_kappa4C.cpp | 3 ++- test/SConscript | 1 + 4 files changed, 30 insertions(+), 28 deletions(-) commit 6ca268ec4a66b3bb58dd7ed373a9b8767a6dab2c Author: picca Date: Mon Apr 24 13:32:16 2006 +0200 * add the test functions for the setFromGeometry of the kappa4C::Vertical and Kappa6C classes include/hkl/geometry_kappa4C.h | 8 ++++++- include/hkl/geometry_kappa6C.h | 9 +++++++- src/geometry_kappa4C.cpp | 43 +++++++++++++++++++++++------------- src/geometry_kappa6C.cpp | 49 ++++++++++++++++++++++++++---------------- test/geometry_kappa4C_test.cpp | 26 ++++++++++++++++++++++ test/geometry_kappa4C_test.h | 2 ++ test/geometry_kappa6C_test.cpp | 29 +++++++++++++++++++++++++ test/geometry_kappa6C_test.h | 2 ++ 8 files changed, 133 insertions(+), 35 deletions(-) commit f10e489f3815a2fde2dfb20700fe4a9484b301c4 Author: picca Date: Mon Apr 24 11:46:16 2006 +0200 * add the test functions for geometry::eulerian4C::Vertical::setFromGeometry TODO | 2 +- include/hkl/geometry_eulerian4C.h | 11 ++++++++++- src/geometry_eulerian4C.cpp | 36 ++++++++++++++++++++++-------------- test/geometry_eulerian4C_test.cpp | 37 +++++++++++++++++++++++++++++++++++++ test/geometry_eulerian4C_test.h | 2 ++ 5 files changed, 72 insertions(+), 16 deletions(-) commit 40066244225ec7ab1140bdc5ef819d66f2777639 Author: picca Date: Thu Apr 20 17:39:12 2006 +0200 * update the TODO list TODO | 20 ++++++++++++++------ src/pseudoaxe_kappa6C.cpp | 6 +++--- 2 files changed, 17 insertions(+), 9 deletions(-) commit 33b5e3ebc11e03ba3a514e1ba631d92a2977dafe Author: picca Date: Thu Apr 20 16:26:34 2006 +0200 * add the pseudoAxe::kappa6C::kappa4C::Vertical include/hkl/pseudoaxe_kappa4C.h | 4 +- include/hkl/pseudoaxe_kappa6C.h | 120 ++++++++++++++++++++++++ src/SConscript | 1 + src/diffractometer_kappa4C.cpp | 6 +- src/diffractometer_kappa6C.cpp | 6 ++ src/pseudoaxe_kappa6C.cpp | 200 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 332 insertions(+), 5 deletions(-) commit 77e3988300d8ed4f0124a782e4a434d53e31615e Author: picca Date: Wed Apr 19 17:03:54 2006 +0200 * add the kappa6C modes using the mode::eulerian4C::Vertical include/hkl/geometry_eulerian4C.h | 7 +- include/hkl/geometry_kappa4C.h | 8 +- include/hkl/geometry_kappa6C.h | 3 + include/hkl/mode_eulerian6C.h | 463 +++++++++++++++++++------------------- include/hkl/mode_kappa6C.h | 119 ++++++++++ src/SConscript | 1 + src/diffractometer_kappa6C.cpp | 9 +- src/geometry_eulerian4C.cpp | 24 +- src/geometry_kappa4C.cpp | 2 +- src/geometry_kappa6C.cpp | 23 ++ src/mode_kappa4C.cpp | 20 +- src/mode_kappa6C.cpp | 160 +++++++++++++ 12 files changed, 585 insertions(+), 254 deletions(-) commit ee4176cf30d082dd0fa18204c33c4eee91121464 Author: picca Date: Wed Apr 19 15:05:21 2006 +0200 * add a free method to the MyMap class. binding/python/diffractometer_eulerian4C_wrap.cpp | 17 +- binding/python/diffractometer_kappa4C_wrap.cpp | 16 +- include/hkl/linux/mymap.h | 966 +++++++++++----------- include/hkl/win32/mymap.h | 747 +++++++++-------- src/diffractometer_eulerian4C.cpp | 17 +- src/diffractometer_kappa4C.cpp | 16 +- src/diffractometer_kappa6C.cpp | 10 +- 7 files changed, 890 insertions(+), 899 deletions(-) commit 189f3e1636869714943c893fef306e7657d64ff5 Author: picca Date: Wed Apr 19 12:45:56 2006 +0200 * small modifications to make it compile with MSVC6 bksys/win32/detect_generic.py | 2 +- src/mode_kappa4C.cpp | 11 ++++++----- src/pseudoaxe_eulerian4C.cpp | 6 +++--- 3 files changed, 10 insertions(+), 9 deletions(-) commit 034cea905926d8ad7910b96484c1c3c87ac0f272 Author: picca Date: Wed Apr 19 11:52:22 2006 +0200 * modification to separate vertical and horizontal diffractometers binding/python/diffractometer_eulerian4C_wrap.cpp | 14 +- binding/python/diffractometer_kappa4C_wrap.cpp | 18 +- doc/example/psi.cpp | 4 +- include/hkl/diffractometer_kappa4C.h | 6 +- include/hkl/geometry_eulerian4C.h | 21 +- include/hkl/geometry_kappa4C.h | 71 +-- include/hkl/mode_eulerian4C.h | 244 +++++----- include/hkl/mode_kappa4C.h | 123 ++--- include/hkl/pseudoaxe_eulerian4C.h | 249 +++++----- include/hkl/pseudoaxe_kappa4C.h | 141 +++--- src/diffractometer_eulerian4C.cpp | 14 +- src/diffractometer_kappa4C.cpp | 24 +- src/geometry_eulerian4C.cpp | 12 +- src/geometry_kappa4C.cpp | 10 +- src/mode_eulerian4C.cpp | 558 +++++++++++----------- src/mode_kappa4C.cpp | 240 +++++----- src/pseudoaxe_eulerian4C.cpp | 288 +++++------ src/pseudoaxe_kappa4C.cpp | 350 +++++++------- test/affinement_simplex_test.h | 2 +- test/crystal_test.h | 2 +- test/diffractometer_kappa4C_test.cpp | 4 +- test/diffractometer_kappa4C_test.h | 4 +- test/geometry_eulerian4C_test.cpp | 28 +- test/geometry_eulerian4C_test.h | 2 +- test/geometry_kappa4C_test.cpp | 36 +- test/geometry_kappa4C_test.h | 2 +- test/mode_eulerian4C_test.cpp | 14 +- test/mode_eulerian4C_test.h | 6 +- test/pseudoaxe_eulerian4C_test.cpp | 40 +- test/pseudoaxe_eulerian4C_test.h | 6 +- test/pseudoaxe_kappa4C_test.cpp | 12 +- test/pseudoaxe_kappa4C_test.h | 2 +- test/reflection_test.h | 2 +- 33 files changed, 1290 insertions(+), 1259 deletions(-) commit 10ed094e41256eee225f1afea84d9835407b200b Author: picca Date: Tue Apr 18 13:24:10 2006 +0200 * remove unnecessary members of the Kappa4C pseudoAxe. include/hkl/pseudoaxe_kappa4C.h | 4 ---- src/pseudoaxe_kappa4C.cpp | 4 ---- test/pseudoaxe_kappa4C_test.cpp | 3 ++- 3 files changed, 2 insertions(+), 9 deletions(-) commit d5dc5995bb5f13dc59d8bda16525d3133a4a3ad1 Author: picca Date: Wed Apr 12 14:52:11 2006 +0200 * now kappa4C is ready with all eulerian4C modes implemented. SConstruct | 1 + TODO | 15 ++- binding/python/diffractometer2.py | 2 +- binding/python/diffractometer_kappa4C_wrap.cpp | 7 +- include/hkl/geometry_eulerian4C.h | 61 ++++++----- include/hkl/geometry_kappa4C.h | 5 + include/hkl/mode_kappa4C.h | 133 ++++++++++++++--------- src/SConscript | 1 + src/diffractometer_kappa4C.cpp | 7 +- src/geometry_eulerian4C.cpp | 80 +++++++++----- src/geometry_kappa4C.cpp | 21 ++++ src/mode_kappa4C.cpp | 145 +++++++++++++++++++++++++ 12 files changed, 363 insertions(+), 115 deletions(-) commit 54d87dcd37066cb290f3b1802e4aa4fbb81a21fd Author: picca Date: Mon Apr 10 10:58:42 2006 +0200 * add the Eulerian pseudoAxes and their test fonctions for the kappa4C geometry. binding/python/diffractometer_kappa4C_wrap.cpp | 6 +- include/hkl/pseudoaxe.h | 2 +- include/hkl/pseudoaxe_eulerian4C.h | 4 +- include/hkl/pseudoaxe_kappa4C.h | 8 +- src/pseudoaxe_eulerian4C.cpp | 2 +- src/pseudoaxe_kappa4C.cpp | 101 ++++++++++++++----------- test/pseudoaxe_kappa4C_test.cpp | 84 ++------------------ 7 files changed, 74 insertions(+), 133 deletions(-) commit 55879b90df4a5a416be1ba7abd9c27901bc472ca Author: picca Date: Thu Apr 6 16:14:06 2006 +0200 * start the pseudoaxe refactoring binding/python/diffractometer2.py | 12 +- binding/python/diffractometer_eulerian4C_wrap.cpp | 3 +- binding/python/diffractometer_eulerian4C_wrap.h | 1 - binding/python/diffractometer_kappa4C_wrap.cpp | 52 ++++ binding/python/diffractometer_kappa4C_wrap.h | 18 ++ binding/python/diffractometer_kappa_wrap.cpp | 9 + binding/python/diffractometer_kappa_wrap.h | 18 ++ binding/python/diffractometer_wrap.cpp | 309 ++++++++++++++++++++++ binding/python/diffractometer_wrap.h | 91 +++++++ include/hkl/diffractometer_eulerian4C.h | 3 - include/hkl/pseudoaxe_kappa4C.h | 118 +++++++++ src/diffractometer_eulerian4C.cpp | 3 + src/diffractometer_kappa4C.cpp | 16 ++ src/pseudoaxe_kappa4C.cpp | 209 +++++++++++++++ test/SConscript | 1 + test/pseudoaxe_kappa4C_test.cpp | 162 ++++++++++++ test/pseudoaxe_kappa4C_test.h | 37 +++ 17 files changed, 1051 insertions(+), 11 deletions(-) commit e7766c9de99e8684dfdc3d5b730a1db3f4ed3b99 Author: picca Date: Wed Apr 5 17:19:21 2006 +0200 * add the kappa4C pseudoAxes binding/python/SConscript | 3 + binding/python/diffractometer.gazpacho | 50 +-- binding/python/diffractometer2.py | 74 ++--- binding/python/diffractometer_eulerian4C_wrap.cpp | 356 +++------------------- binding/python/diffractometer_eulerian4C_wrap.h | 78 +---- binding/python/hkl_wrap.cpp | 109 ++++--- include/hkl/diffractometer.h | 10 +- include/hkl/diffractometer_kappa4C.h | 92 ++++++ include/hkl/mode.h | 244 ++------------- src/SConscript | 1 + src/diffractometer_kappa4C.cpp | 12 + src/diffractometer_kappa6C.cpp | 12 + src/mode.cpp | 16 + src/mode_eulerian4C.cpp | 203 ------------ 14 files changed, 338 insertions(+), 922 deletions(-) commit 4988b2292a9eb0420c85846c927b085d05b040d9 Author: picca Date: Wed Mar 29 09:05:39 2006 +0200 * add forgotten files include/hkl/diffractometer_kappa.h | 42 ++++++++++++++++++++++++++++++++++++ include/hkl/diffractometer_kappa6C.h | 39 +++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) commit e07c6ce897716a702fd52994d95a540067e4c3f8 Author: picca Date: Mon Mar 27 18:28:55 2006 +0200 * add the diffractometer kappa 4c and 6C + test functions include/hkl/diffractometer.h | 1590 ++++++++++++++-------------------- include/hkl/diffractometer_kappa4C.h | 64 +- src/SConscript | 3 + src/diffractometer.cpp | 359 +------- src/diffractometer_eulerian6C.cpp | 76 +- src/diffractometer_kappa.cpp | 16 + src/diffractometer_kappa4C.cpp | 27 +- src/diffractometer_kappa6C.cpp | 26 + test/SConscript | 2 + test/diffractometer_kappa4C_test.cpp | 48 + test/diffractometer_kappa4C_test.h | 28 + test/diffractometer_kappa6C_test.cpp | 54 ++ test/diffractometer_kappa6C_test.h | 28 + 13 files changed, 934 insertions(+), 1387 deletions(-) commit d9d61711e0a2461cdcf91c2a56beabc76e75eb70 Author: picca Date: Mon Mar 27 15:26:27 2006 +0200 * add the geometry Eulerian 4C and 6C test functions include/hkl/geometry_eulerian6C.h | 12 +++ src/geometry_eulerian6C.cpp | 13 ++- test/SConscript | 2 + test/geometry_eulerian4C_test.cpp | 120 +++++++++++++++++++++++++ test/geometry_eulerian4C_test.h | 43 +++++++++ test/geometry_eulerian6C_test.cpp | 137 +++++++++++++++++++++++++++++ test/geometry_eulerian6C_test.h | 43 +++++++++ test/geometry_test.cpp | 181 ++++++++++---------------------------- test/geometry_test.h | 59 +++++-------- 9 files changed, 434 insertions(+), 176 deletions(-) commit 67443e81bab02d2d92c8d432d6f5d7486e650a9b Author: picca Date: Mon Mar 27 14:35:05 2006 +0200 * add the geometry kappa 4c and 6C test functions. src/geometry_kappa6C.cpp | 4 +- test/SConscript | 2 + test/geometry_kappa4C_test.cpp | 142 ++++++++++++++++++++++++++++++++++++++ test/geometry_kappa4C_test.h | 44 ++++++++++++ test/geometry_kappa6C_test.cpp | 150 +++++++++++++++++++++++++++++++++++++++++ test/geometry_kappa6C_test.h | 42 ++++++++++++ 6 files changed, 382 insertions(+), 2 deletions(-) commit b9b1d24672a0a615dc232b179e06010052b78067 Author: picca Date: Thu Mar 23 18:09:08 2006 +0100 * add the kappa geometry for the kappa4C and kappa6C include/hkl/geometry.h | 78 +++++++++++++++++++++--------------------- include/hkl/geometry_kappa.h | 60 ++++++++++++++++++++++++++++++++ include/hkl/geometry_kappa4C.h | 45 +++++++++++++++--------- include/hkl/geometry_kappa6C.h | 45 ++++++++++++++++++++++++ src/SConscript | 3 ++ src/geometry_kappa.cpp | 40 ++++++++++++++++++++++ src/geometry_kappa4C.cpp | 32 +++++++++++------ src/geometry_kappa6C.cpp | 38 ++++++++++++++++++++ 8 files changed, 274 insertions(+), 67 deletions(-) commit f971a98d6e1a88dbaeef3c3abdbe2f496e1f43a6 Author: picca Date: Wed Mar 22 17:43:38 2006 +0100 * update the TODO list and the Makefile.vc TODO | 2 +- src/Makefile.vc | 55 ++++++++++++++++++++++++++------------------------ src/diffractometer.cpp | 12 +++++------ 3 files changed, 36 insertions(+), 33 deletions(-) commit 5f049a439adc84a98879e62715d8da778868747f Author: picca Date: Thu Mar 2 17:59:39 2006 +0100 * clean the bksys files bksys/bksys.py | 1 - bksys/cppunit.py | 3 +-- bksys/win32/detect_cppunit.py | 3 +-- 3 files changed, 2 insertions(+), 5 deletions(-) commit f855c54d964f184eaf351b86e71faef88cccc941 Author: picca Date: Thu Mar 2 14:02:46 2006 +0100 * add the detect_bksys.py file for win32 bksys/win32/detect_bksys.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) commit 3207b706e76238886ff35b937548c53c124395a7 Author: picca Date: Thu Mar 2 13:58:28 2006 +0100 * update to compile with MSVC6 SConstruct | 12 +- bksys/__init__.py | 190 +++++++++++------------ bksys/bksys.py | 302 +++++++++++++++++++------------------ bksys/win32/detect_cppunit.py | 15 +- bksys/win32/detect_generic.py | 2 +- include/hkl/affinement.h | 11 +- include/hkl/config.h | 2 +- include/hkl/mode.h | 2 +- include/hkl/mymap.h | 2 +- include/hkl/myvector.h | 2 +- include/hkl/pseudoaxe.h | 2 +- include/hkl/win32/mymap.h | 2 - src/affinement.cpp | 82 +++++----- src/affinement_simplex.cpp | 15 +- src/convenience.cpp | 6 + src/mode.cpp | 6 +- test/pseudoaxe_eulerian4C_test.cpp | 5 +- 17 files changed, 331 insertions(+), 327 deletions(-) commit af8a0bccc926937655e516c176447f50e608fb1c Author: picca Date: Tue Feb 28 17:42:18 2006 +0100 * modification of the uml diagramm SConstruct | 14 +- doc/uml/hkl.dia | 1835 ++++++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 1542 insertions(+), 307 deletions(-) commit e389307513cfc9937b0b1ac4fc0aaf8e1ac54a54 Author: picca Date: Fri Feb 24 17:25:10 2006 +0100 * update the documentation of quaternion.h include/hkl/quaternion.h | 287 +++++++++++++++++++++++------------------------ 1 file changed, 143 insertions(+), 144 deletions(-) commit c8fe7b59f732189d362c88200fe68f1dc24b15df Author: picca Date: Fri Feb 24 12:13:53 2006 +0100 * add the psi pseudomotor of the Eulerian4C diffractometer. TODO | 5 +- binding/python/diffractometer.gazpacho | 142 +-- binding/python/diffractometer.py | 1097 +++++++++++---------- binding/python/diffractometer2.py | 383 ++++--- binding/python/diffractometer_eulerian4C_wrap.cpp | 284 +++--- binding/python/diffractometer_eulerian4C_wrap.h | 17 +- binding/python/hkl_wrap.cpp | 12 +- doc/example/psi.cpp | 2 +- include/hkl/diffractometer.h | 218 ++-- include/hkl/geometry.h | 2 +- include/hkl/pseudoaxe.h | 29 +- include/hkl/pseudoaxe_eulerian4C.h | 8 +- include/hkl/quaternion.h | 17 +- src/diffractometer.cpp | 22 +- src/geometry.cpp | 550 ++++++----- src/pseudoaxe.cpp | 1 - src/pseudoaxe_eulerian4C.cpp | 32 +- src/quaternion.cpp | 361 +++---- src/svector.cpp | 426 ++++---- test/geometry_test.cpp | 22 +- test/pseudoaxe_eulerian4C_test.cpp | 44 +- test/quaternion_test.cpp | 51 +- test/quaternion_test.h | 7 +- 23 files changed, 2060 insertions(+), 1672 deletions(-) commit 0b2246ae6a5c90a18b37bb88e89c37203f85d04a Author: picca Date: Fri Feb 10 15:54:52 2006 +0100 * add the get_value of the Psi pseudoAxe * add the convenience function normalizeAngle * move the _atan2 and _asin in the hkl::convenience namespace and rename them atan2 and asin doc/hkl.lyx | 0 include/hkl/convenience.h | 35 + include/hkl/mode.h | 20 +- include/hkl/pseudoaxe.h | 45 +- include/hkl/pseudoaxe_eulerian4C.h | 192 ++--- include/hkl/quaternion.h | 4 +- src/SConscript | 1 + src/convenience.cpp | 49 ++ src/crystal.cpp | 1125 ++++++++++++++-------------- src/diffractometer.cpp | 1458 ++++++++++++++++++------------------ src/mode.cpp | 48 +- src/mode_eulerian4C.cpp | 568 +++++++------- src/pseudoaxe.cpp | 13 +- src/pseudoaxe_eulerian4C.cpp | 314 ++++---- src/quaternion.cpp | 71 +- test/pseudoaxe_eulerian4C_test.cpp | 129 ++-- test/pseudoaxe_eulerian4C_test.h | 9 +- 17 files changed, 2096 insertions(+), 1985 deletions(-) commit 62aa233b89e81ab33c46fe63da40434b13789258 Author: picca Date: Thu Feb 9 10:41:42 2006 +0100 * now the pseudoAxe::Psi::set_value is working bksys/linux2/detect_generic.py | 2 +- doc/example/plot.gnuplot | 48 ++++++++ doc/example/psi.cpp | 8 +- include/hkl/axe.h | 162 ++++++++++++++----------- include/hkl/geometry.h | 10 +- include/hkl/geometry_eulerian4C.h | 11 ++ include/hkl/pseudoaxe_eulerian4C.h | 15 ++- src/axe.cpp | 40 +++++-- src/geometry.cpp | 17 +++ src/geometry_eulerian4C.cpp | 10 ++ src/pseudoaxe_eulerian4C.cpp | 234 ++++++++++++++++++------------------- test/axe_test.cpp | 56 +++++++-- test/axe_test.h | 24 ++-- test/geometry_test.cpp | 39 +++++++ test/geometry_test.h | 4 + 15 files changed, 444 insertions(+), 236 deletions(-) commit 632172d34923318c0c1345cbf515e85f7b9d6345 Author: picca Date: Fri Feb 3 16:42:55 2006 +0100 * update comments and add the second solution to the psi pseudoAxe doc/Doxyfile | 6 ++-- doc/example/plot.gnuplot | 40 +++++++++++++++++++------ include/hkl/diffractometer.h | 4 +-- include/hkl/fitparameterlist.h | 26 ++++++++-------- include/hkl/geometry.h | 7 +++-- include/hkl/linux/mymap.h | 4 +-- include/hkl/pseudoaxe_eulerian4C.h | 9 +++--- include/hkl/range.h | 61 +++++++++++++++++++++----------------- src/pseudoaxe_eulerian4C.cpp | 36 ++++++++++++++-------- 9 files changed, 116 insertions(+), 77 deletions(-) commit fc9a5dd35f73c5b4364b2e9d82322b47e3b09361 Author: picca Date: Thu Feb 2 18:14:08 2006 +0100 * add the psi example use to compute curves * add the gnuplot script to plot these curves modified: SConstruct new file: doc/example/SConscript new file: doc/example/plot.gnuplot new file: doc/example/psi.cpp modified: include/hkl/diffractometer.h SConstruct | 2 +- doc/example/SConscript | 15 + doc/example/plot.gnuplot | 15 + doc/example/psi.cpp | 50 +++ include/hkl/diffractometer.h | 854 +++++++++++++++++++++---------------------- 5 files changed, 508 insertions(+), 428 deletions(-) commit 3ee6413b092193e97ace00790608b60ed45cca50 Author: picca Date: Thu Feb 2 14:30:23 2006 +0100 * modified: bksys/linux2/detect_cppunit.py to fill CXXFLAGS only if needed bksys/linux2/detect_cppunit.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) commit a221387369dfe8df34030e213d19708b3a7844c3 Merge: ef99b4b0 db5768a4 Author: picca Date: Thu Feb 2 11:30:48 2006 +0100 Merge branch 'cvshead' commit db5768a4bdabba2a0ea80bd3275183c3a903bb6d Author: picca Date: Thu Feb 2 09:48:32 2006 +0000 * bksys modification to compile only the python binding on linux * modification of the diffractometer_Euerlai4C_test to compile with MSVC6 SConstruct | 16 ++++++++++++---- bksys/cppunit.py | 6 ++++-- test/diffractometer_eulerian4C_test.cpp | 30 +++++++++++++++--------------- 3 files changed, 31 insertions(+), 21 deletions(-) commit ef99b4b00c1f3569d33854cf299f2360db8cd5d5 Author: picca Date: Wed Feb 1 16:20:21 2006 +0100 * add the clean target to the project. bksys/bksys.py | 5 +++++ bksys/generic.py | 7 +++++++ 2 files changed, 12 insertions(+) commit 5f096ba6ecf0ac3eed7328ddc03da66295f8c723 Author: picca Date: Wed Feb 1 14:42:17 2006 +0000 * add the affinement dialog to the gtk frontend binding/python/diffractometer.gazpacho | 842 +++++++++++++++++++++++++++++++-- binding/python/diffractometer2.py | 58 +-- 2 files changed, 825 insertions(+), 75 deletions(-) commit b05984f40c9adb35fbb83667e0f1a06e3926704d Author: picca Date: Wed Feb 1 14:42:08 2006 +0000 * add the new crystal dialog to the frontend binding/python/diffractometer.gazpacho | 541 +++++++++++++++++++-------------- binding/python/diffractometer2.py | 5 +- 2 files changed, 318 insertions(+), 228 deletions(-) commit 9f690807cedd350093d6e469fc9e70648563337b Author: picca Date: Wed Feb 1 14:41:59 2006 +0000 * update the gtk frontend to works with gazpacho binding/python/diffractometer.gazpacho | 1383 ++++----------------- binding/python/diffractometer.py | 15 +- binding/python/diffractometer2.py | 63 +- binding/python/diffractometer_eulerian4C_wrap.cpp | 17 + 4 files changed, 329 insertions(+), 1149 deletions(-) commit ff9218190c47e4880ca21fe210d14e686fda3165 Author: picca Date: Wed Feb 1 14:41:21 2006 +0000 * update diffractometer.h to use string instead of MyString. * So python binding ca compile without modification. * add link to the hkl library for the binding. * the diffractometer application is working now. binding/python/diffractometer.py | 15 ++++++--------- binding/python/diffractometer_eulerian4C_wrap.cpp | 17 ----------------- include/hkl/diffractometer.h | 8 +++++++- src/diffractometer.cpp | 8 +++++++- 4 files changed, 20 insertions(+), 28 deletions(-) commit 228ea237199f7305483a201e54537ec3a88503b2 Author: picca Date: Wed Feb 1 15:28:06 2006 +0100 * add the affinement dialog to the gtk frontend binding/python/diffractometer.gazpacho | 842 +++++++++++++++++++++++++++++++-- binding/python/diffractometer2.py | 58 +-- 2 files changed, 825 insertions(+), 75 deletions(-) commit a3f5e98c1a3467eeac29ec0c5a464807e1db60fe Author: picca Date: Wed Feb 1 14:34:00 2006 +0100 * add the new crystal dialog to the frontend binding/python/diffractometer.gazpacho | 541 +++++++++++++++++++-------------- binding/python/diffractometer2.py | 5 +- 2 files changed, 318 insertions(+), 228 deletions(-) commit ac297c572a8b4fbf3a774bcc3570e55eeabb281c Author: picca Date: Wed Feb 1 14:18:15 2006 +0100 * update the gtk frontend to works with gazpacho binding/python/diffractometer.gazpacho | 1005 +++++++++++++++++++++ binding/python/diffractometer.glade | 32 +- binding/python/diffractometer.py | 15 +- binding/python/diffractometer2.py | 649 +++++++++++++ binding/python/diffractometer_eulerian4C_wrap.cpp | 17 + binding/python/diffractometer_eulerian4C_wrap.h | 4 + bksys/gtkmm.py | 132 +++ bksys/gtkmm2.4.py | 130 +++ 8 files changed, 1948 insertions(+), 36 deletions(-) commit 2a6bb45695d68cc879bacbd23f00a8fb12731244 Author: picca Date: Tue Jan 31 10:00:34 2006 +0100 * update diffractometer.h to use string instead of MyString. * So python binding ca compile without modification. * add link to the hkl library for the binding. * the diffractometer application is working now. SConstruct | 5 +- binding/python/SConscript | 13 +- binding/python/diffractometer.py | 2 +- binding/python/diffractometer_eulerian4C_wrap.cpp | 12 +- include/hkl/diffractometer.h | 117 +++++------ src/diffractometer.cpp | 242 +++++++++++++++------- 6 files changed, 238 insertions(+), 153 deletions(-) commit 210598b734620fb333f3559b245f1c2daf387a5e Author: picca Date: Mon Jan 30 17:41:32 2006 +0100 * remove the construction of python binding by default * create a mymap.h and myvector.h deauling with the platform during compilation no more need to add include path depending on the platform. SConstruct | 3 +-- TODO | 2 +- include/hkl/linux/mymap.h | 6 +++--- include/hkl/linux/myvector.h | 6 +++--- include/hkl/mymap.h | 12 ++++++++++++ include/hkl/myvector.h | 12 ++++++++++++ include/hkl/win32/mymap.h | 6 +++--- include/hkl/win32/myvector.h | 6 +++--- src/SConscript | 6 ------ test/SConscript | 6 ------ 10 files changed, 38 insertions(+), 27 deletions(-) commit d462c6508b32b517161d93d81dfa8027658fa059 Author: picca Date: Mon Jan 30 16:38:17 2006 +0100 * update bksys to compile properly on linux SConstruct | 4 +- binding/python/diffractometer.py | 4 ++ binding/python/diffractometer_eulerian4C_wrap.cpp | 26 +++++---- binding/python/diffractometer_eulerian4C_wrap.h | 6 +- binding/python/hkl_wrap.cpp | 2 +- binding/python/reflection_wrap.cpp | 32 ----------- bksys/boost_python.py | 67 +++++++++++++---------- bksys/generic.py | 3 +- include/hkl/mystring.h | 6 ++ src/mystring.cpp | 3 + 10 files changed, 76 insertions(+), 77 deletions(-) commit 38b64182e3a6fbb2c8fc6afd7ba566ae95b89494 Author: picca Date: Mon Jan 30 14:56:28 2006 +0100 * update the bksys system to add the boost_python module SConstruct | 6 +- binding/SConscript | 2 - binding/python/SConscript | 27 +- binding/python/diffractometer_eulerian4C_wrap.cpp | 8 +- binding/python/diffractometer_eulerian4C_wrap.h | 1 + bksys/boost_python.py | 108 +++++++ bksys/cppunit.py | 183 ++++++------ bksys/generic.py | 334 +++++++++++----------- bksys/linux2/detect_boost_python.py | 17 ++ bksys/linux2/detect_cppunit.py | 27 +- bksys/linux2/detect_python.py | 19 ++ bksys/python.py | 89 ++++++ bksys/win32/detect_generic.py | 2 +- 13 files changed, 539 insertions(+), 284 deletions(-) commit 3c003acf6608233c5ae412d302c9c183bbe50fb9 Author: picca Date: Fri Jan 27 16:46:59 2006 +0100 modified: bksys/linux2/detect_cppunit.py bksys/linux2/detect_cppunit.py | 3 +++ 1 file changed, 3 insertions(+) commit 71b4d48abde6a2827dd71deccaa6d4b00cc870be Author: picca Date: Fri Jan 27 15:28:40 2006 +0100 modified: bksys/linux2/detect_generic.py deleted: toto bksys/linux2/detect_generic.py | 2 +- toto | 0 2 files changed, 1 insertion(+), 1 deletion(-) commit c5722bcd78b9a8469cbc348e04b8805d4f2267c6 Author: picca Date: Fri Jan 27 15:18:51 2006 +0100 new file: toto toto | 0 1 file changed, 0 insertions(+), 0 deletions(-) commit 4b15fca5af9c73fcd35453a2600bc3c8b6205a02 Author: picca Date: Fri Jan 27 15:03:11 2006 +0100 deleted: release_notes.txt release_notes.txt | 16 ---------------- 1 file changed, 16 deletions(-) commit 696d941ed850130adfd23ea0edfc3b9221282203 Author: picca Date: Fri Jan 27 15:01:40 2006 +0100 new file: release_notes.txt release_notes.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit 2cb7dba40c74462fe57c54a6c0453afb36fdaf90 Author: picca Date: Thu Jan 26 18:27:55 2006 +0100 include/hkl/linux/mymap.h | 530 +++++++++++++++++++++++++++++++++++++++++++ include/hkl/linux/myvector.h | 498 ++++++++++++++++++++++++++++++++++++++++ include/hkl/win32/mymap.h | 420 ++++++++++++++++++++++++++++++++++ include/hkl/win32/myvector.h | 458 +++++++++++++++++++++++++++++++++++++ 4 files changed, 1906 insertions(+) commit 9b7da4dcbd7de9c7a7088016743da2fd30e37713 Author: picca Date: Thu Jan 26 18:26:30 2006 +0100 release_notes.txt | 16 ---------------- 1 file changed, 16 deletions(-) commit a24fd18d4a8bb0398e3d0946a368b7ece9008123 Author: picca Date: Thu Jan 26 16:29:34 2006 +0000 * rename readme.txt README readme.txt => README | 0 1 file changed, 0 insertions(+), 0 deletions(-) commit e5f46b6b1959bdab857b81ecbae3a696073797dc Author: picca Date: Thu Jan 26 15:28:24 2006 +0000 * Add the VERSION file VERSION | 1 + 1 file changed, 1 insertion(+) commit c5a779e1e8eb67e45df3b9fced1e5ef5e5069140 Author: picca Date: Thu Jan 26 14:24:51 2006 +0000 * update documentation TODO | 6 +- doc/Doxyfile | 10 +- include/hkl/affinement.h | 104 +++++++------- include/hkl/axe.h | 6 +- include/hkl/crystal.h | 14 +- include/hkl/diffractometer.h | 52 ++++--- include/hkl/fitparameter.h | 102 +++++++------- include/hkl/geometry.h | 61 ++++----- include/hkl/mode.h | 72 ++++++---- include/hkl/mode_eulerian4C.h | 54 ++++---- include/hkl/mode_eulerian6C.h | 271 +++++++------------------------------ include/hkl/mystring.h | 24 +++- include/hkl/object.h | 69 ++++++---- include/hkl/objectwithparameters.h | 79 ++++++----- include/hkl/pseudoaxe.h | 13 +- include/hkl/pseudoaxe_eulerian4C.h | 55 ++------ include/hkl/quaternion.h | 113 ++++++++-------- include/hkl/range.h | 2 +- include/hkl/reflection.h | 39 +++--- include/hkl/value.h | 110 +++++++-------- src/diffractometer.cpp | 7 +- src/fitparameter.cpp | 4 +- src/geometry.cpp | 4 +- src/mode.cpp | 8 +- src/pseudoaxe_eulerian4C.cpp | 4 - src/value.cpp | 3 +- 26 files changed, 590 insertions(+), 696 deletions(-) commit c9124da9d415981c8a7b8daf8d200ea1fedbe970 Author: picca Date: Wed Jan 25 13:46:25 2006 +0000 * remove lattice.cpp and vertex.cpp src/lattice.cpp | 149 -------------------------------------------------------- src/vertex.cpp | 132 ------------------------------------------------- 2 files changed, 281 deletions(-) commit 0d5908c1a2ec450b7c63ef667be6c6900c2ea8e2 Author: picca Date: Wed Jan 25 13:44:39 2006 +0000 * remove constant.cpp superseded by constant.h src/constants.cpp | 141 ------------------------------------------------------ 1 file changed, 141 deletions(-) commit e1f7b6b260c6057beedb7a726a3c7cab51f909d3 Author: picca Date: Tue Jan 24 16:37:43 2006 +0000 * update scons files to compile with the new includes location src/SConscript | 6 +++--- test/SConscript | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) commit eacd28be00e69601062067084efac1ff4db0b22c Author: picca Date: Tue Jan 24 16:18:30 2006 +0000 *move the includes files include/{ => hkl}/HKLException.h | 7 +- include/{ => hkl}/affinement.h | 0 include/{ => hkl}/axe.h | 0 include/{ => hkl}/config.h | 0 include/{ => hkl}/constants.h | 7 +- include/{ => hkl}/crystal.h | 7 +- include/{ => hkl}/crystallist.h | 0 include/{ => hkl}/diffractometer.h | 7 +- include/{ => hkl}/diffractometer_eulerian4C.h | 0 include/{ => hkl}/diffractometer_eulerian6C.h | 0 include/{ => hkl}/diffractometer_kappa4C.h | 0 include/{ => hkl}/fitparameter.h | 0 include/{ => hkl}/fitparameterlist.h | 0 include/{ => hkl}/geometry.h | 7 +- include/{ => hkl}/geometry_eulerian4C.h | 0 include/{ => hkl}/geometry_eulerian6C.h | 0 include/{ => hkl}/geometry_kappa4C.h | 0 include/{ => hkl}/mode.h | 7 +- include/{ => hkl}/mode_eulerian4C.h | 0 include/{ => hkl}/mode_eulerian6C.h | 0 include/{ => hkl}/mode_kappa4C.h | 0 include/{ => hkl}/mystring.h | 0 include/{ => hkl}/object.h | 0 include/{ => hkl}/objectwithparameters.h | 0 include/{ => hkl}/pseudoaxe.h | 0 include/{ => hkl}/pseudoaxe_eulerian4C.h | 0 include/{ => hkl}/quaternion.h | 0 include/{ => hkl}/range.h | 0 include/{ => hkl}/reflection.h | 7 +- include/{ => hkl}/source.h | 7 +- include/{ => hkl}/svecmat.h | 7 +- include/{ => hkl}/value.h | 0 include/lattice.h | 52 --- include/linux/mymap.h | 452 ------------------------- include/linux/myvector.h | 447 ------------------------- include/vertex.h | 150 --------- include/win32/mymap.h | 420 ----------------------- include/win32/myvector.h | 458 -------------------------- 38 files changed, 45 insertions(+), 1997 deletions(-) commit a824eddf08228cb666f4be12850146ae3b8238ec Author: picca Date: Tue Jan 24 14:56:30 2006 +0000 *** empty log message *** include/{linux => }/mystring.h | 0 include/win32/mystring.h | 24 ------------------------ 2 files changed, 24 deletions(-) commit ac74a01e545b7bf065863740a946ebc50bcdae94 Author: picca Date: Tue Jan 24 14:54:09 2006 +0000 * now serialization works on win32 include/win32/mymap.h | 21 +++++++++++++++------ include/win32/myvector.h | 15 +++++++++++++-- 2 files changed, 28 insertions(+), 8 deletions(-) commit b859055bdecca48f19eaf200e42e2c04458349f4 Author: picca Date: Tue Jan 24 14:31:23 2006 +0000 * add the MyString class include/affinement.h | 4 +- include/axe.h | 6 +- include/crystal.h | 9 +- include/crystallist.h | 6 +- include/diffractometer.h | 126 +++--- include/fitparameter.h | 6 +- include/fitparameterlist.h | 3 +- include/geometry.h | 23 +- include/linux/mymap.h | 706 +++++++++++++++--------------- include/linux/mystring.h | 24 ++ include/linux/myvector.h | 737 ++++++++++++++++---------------- include/object.h | 18 +- include/objectwithparameters.h | 10 +- include/pseudoaxe.h | 5 +- include/range.h | 4 +- include/reflection.h | 15 +- include/value.h | 6 +- include/win32/mymap.h | 48 +-- include/win32/mystring.h | 24 ++ include/win32/myvector.h | 35 +- src/SConscript | 1 + src/affinement.cpp | 2 +- src/axe.cpp | 2 +- src/crystal.cpp | 9 +- src/crystallist.cpp | 2 +- src/diffractometer.cpp | 135 +++--- src/fitparameter.cpp | 2 +- src/geometry.cpp | 49 +-- src/mystring.cpp | 47 ++ src/object.cpp | 18 +- src/objectwithparameters.cpp | 8 +- src/range.cpp | 2 +- src/reflection.cpp | 11 +- src/value.cpp | 2 +- test/SConscript | 1 + test/axe_test.cpp | 4 +- test/crystal_test.cpp | 2 +- test/diffractometer_eulerian4C_test.cpp | 30 +- test/geometry_test.cpp | 10 +- test/mystring_test.cpp | 29 ++ test/mystring_test.h | 24 ++ test/object_test.cpp | 8 +- test/objectwithparameters_test.cpp | 6 +- test/reflection_test.cpp | 2 +- 44 files changed, 1201 insertions(+), 1020 deletions(-) commit 0c810e475098dcdc483fa70adf02f24b51966cd0 Author: picca Date: Tue Jan 24 09:06:46 2006 +0000 * update the win32 part include/linux/mymap.h | 30 ---------------------- include/win32/mymap.h | 70 ++++++++++++++++++++++++++++++++++++++++++-------- src/diffractometer.cpp | 6 ++--- 3 files changed, 63 insertions(+), 43 deletions(-) commit e6cff6276cd384a0b8d805b19848acbaf2a9ed12 Author: picca Date: Mon Jan 23 16:14:55 2006 +0000 * now diffractometer serialization works!!! SConstruct | 4 +- doc/uml/hkl.dia | 2248 ++++++++++++++++++++++++++----- include/affinement.h | 4 +- include/diffractometer.h | 14 +- include/diffractometer_eulerian4C.h | 2 +- include/linux/mymap.h | 213 ++- include/mode.h | 7 +- include/pseudoaxe.h | 4 +- include/reflection.h | 6 +- src/axe.cpp | 7 +- src/crystal.cpp | 104 +- src/diffractometer.cpp | 104 +- src/diffractometer_eulerian4C.cpp | 6 +- src/geometry.cpp | 59 +- src/reflection.cpp | 38 +- test/SConscript | 12 +- test/diffractometer_eulerian4C_test.cpp | 49 + 17 files changed, 2420 insertions(+), 461 deletions(-) commit 73cac96f3ca8743f640a86b7f467f4bba51e4432 Author: picca Date: Mon Jan 16 15:41:48 2006 +0000 * bksys update bksys/linux2/detect_cppunit.py | 3 +-- bksys/linux2/detect_generic.py | 2 +- bksys/win32/detect_cppunit.py | 7 ++++-- bksys/win32/detect_generic.py | 56 ++++-------------------------------------- 4 files changed, 12 insertions(+), 56 deletions(-) commit e9cd3b34472e706a53d68c11a0b1613942f51017 Author: picca Date: Mon Jan 16 15:30:09 2006 +0000 * update bksys SConstruct | 15 +- bksys/__init__.py | 56 +++-- bksys/bksys.py | 449 +++++++---------------------------------- bksys/cppunit.py | 13 +- bksys/generic.py | 66 +++--- bksys/linux2/detect_bksys.py | 10 +- bksys/linux2/detect_cppunit.py | 5 + bksys/linux2/detect_generic.py | 57 +----- 8 files changed, 175 insertions(+), 496 deletions(-) commit 25c7f3a17528e1d2bf7f7409042e0f4cfbf1791a Author: picca Date: Mon Jan 16 09:22:10 2006 +0000 *update bksys bksys/bksys.py | 8 ++++---- bksys/cppunit.py | 8 ++++---- bksys/generic.py | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) commit 85cea40d89cdab9c276161334235745365ca7736 Author: picca Date: Fri Jan 13 13:47:57 2006 +0000 * start refactoring of bksys SConstruct | 10 +---- bksys/__init__.py | 62 ++++++++++++++----------------- bksys/bksys.py | 87 +++++++++++++++++++++++++++++++++++++------- bksys/cppunit.py | 2 +- bksys/generic.py | 2 +- bksys/linux2/detect_bksys.py | 58 +++++++---------------------- test/SConscript | 3 +- 7 files changed, 119 insertions(+), 105 deletions(-) commit 3182ec44748769270c2562bffd5369902077771c Author: picca Date: Thu Jan 12 13:41:24 2006 +0000 * now it works on win32 and linux include/win32/mymap.h | 4 ++-- test/SConscript | 2 +- test/reflection_test.cpp | 3 --- 3 files changed, 3 insertions(+), 6 deletions(-) commit 434377bdb8f9fcf84cc56fdebe3169f10f0f1b4e Author: picca Date: Thu Jan 12 13:06:54 2006 +0000 * modification of MyMap for win32 include/win32/mymap.h | 19 +++++++++++++++++++ src/geometry.cpp | 3 +-- test/reflection_test.cpp | 3 +++ 3 files changed, 23 insertions(+), 2 deletions(-) commit 39c58d7bb71d8f4b0f0f8ba985cfb603974a7f42 Author: picca Date: Thu Jan 12 12:43:43 2006 +0000 * work on the persistance test/SConscript | 5 +++-- test/geometry_test.cpp | 8 ++++---- test/reflection_test.cpp | 4 ++-- 3 files changed, 9 insertions(+), 8 deletions(-) commit bd330b6fa56a742b1f088451884d3e16cc8bfda3 Author: picca Date: Thu Jan 12 09:52:13 2006 +0000 * clean the bksys files bksys/bksys.py | 1 - 1 file changed, 1 deletion(-) commit 8748a79f8e8e387fb7089e51678606a36c207881 Author: picca Date: Thu Jan 12 09:18:09 2006 +0000 * now bksys works on win32 bksys/bksys.py | 1 + bksys/generic.py | 2 +- bksys/win32/detect_cppunit.py | 2 + include/win32/mymap.h | 57 +++++++++++++++++++++++ include/win32/myvector.h | 104 +++++++++++++++++++++++++++++++++++++----- src/SConscript | 2 +- test/SConscript | 2 +- 7 files changed, 155 insertions(+), 15 deletions(-) commit 88ca1d1cd6240ba801580e29fcd5eddaaf71eb5b Author: picca Date: Wed Jan 11 16:34:08 2006 +0000 *** empty log message *** bksys/bksys.pyc | Bin 13026 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) commit ee7543951104e6474a233512d90cfbd8002f25d6 Author: picca Date: Wed Jan 11 16:33:24 2006 +0000 * add ToStream to MyStarMap bksys/bksys.pyc | Bin 11370 -> 13026 bytes include/win32/mymap.h | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+) commit efcb9e985aed4f755deef67e835eac65b3ca7b3b Author: picca Date: Wed Jan 11 15:30:55 2006 +0000 * update bksys to work on windows bksys/__init__.py | 25 +++++++++++++------------ bksys/bksys.py | 15 ++++++++++++--- bksys/bksys.pyc | Bin 12685 -> 11370 bytes bksys/cppunit.py | 25 +++++++++++++++---------- bksys/generic.py | 12 +++++++++++- bksys/linux2/detect_bksys.py | 12 ++++++++++++ bksys/linux2/detect_generic.py | 11 ----------- bksys/win32/detect_cppunit.py | 6 ++---- bksys/win32/detect_generic.py | 16 +--------------- 9 files changed, 66 insertions(+), 56 deletions(-) commit 5ea3753e54c4bc929d56aa43db0edb2bb641ea2a Author: picca Date: Wed Jan 11 13:44:01 2006 +0000 * refactoring of bksys bksys/linux2/detect_bksys.py | 54 +++++++++++++++++++++++++++++++++ bksys/linux2/detect_cppunit.py | 18 +++++++++++ bksys/linux2/detect_generic.py | 69 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 141 insertions(+) commit c7a4a07debfc10328d1a3d336608ac691f1c6d76 Author: picca Date: Wed Jan 11 13:41:42 2006 +0000 *remove the unix directory bksys/unix/detect_bksys.py | 54 ---------------- bksys/unix/detect_cppunit.py | 23 ------- bksys/unix/detect_generic.py | 142 ------------------------------------------- 3 files changed, 219 deletions(-) commit 268c92553f8351e391126fb0df0a0d736fcfb083 Author: picca Date: Wed Jan 11 13:12:37 2006 +0000 *update bksys SConstruct | 14 +- bksys/__init__.py | 109 ++++ bksys/bksys.py | 387 ++++++++++++++ bksys/bksys.pyc | Bin 0 -> 12685 bytes bksys/cppunit.py | 119 ++--- bksys/generic.py | 1159 +++-------------------------------------- bksys/unix/detect_bksys.py | 54 ++ bksys/win32/detect_generic.py | 90 +--- test/SConscript | 10 +- test/main.cpp | 16 + 10 files changed, 710 insertions(+), 1248 deletions(-) commit b19d05907c32c6947b001d1219f6a714d21d853f Author: picca Date: Fri Jan 6 17:13:24 2006 +0000 *** empty log message *** bksys/generic.py | 3 ++- bksys/win32/detect_cppunit.py | 3 ++- test/SConscript | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) commit 2e6e56fdf47dc95f6c2fbb0812115be888d81f5a Author: picca Date: Fri Jan 6 16:28:49 2006 +0000 * bksys modifications bksys/cppunit.py | 3 ++- bksys/win32/detect_cppunit.py | 26 +++++++------------------- 2 files changed, 9 insertions(+), 20 deletions(-) commit 596f6bfed6e5dd7716aca572bdc98409e52b7b3d Author: picca Date: Fri Jan 6 16:24:29 2006 +0000 * modification of the bksys files SConstruct | 3 +- TODO | 3 + bksys/cppunit.py | 35 +- bksys/unix/detect_cppunit.py | 13 +- bksys/win32/detect_cppunit.py | 17 +- include/affinement.h | 13 + include/config.h | 6 + include/crystal.h | 346 +++++----- include/crystallist.h | 8 - include/diffractometer.h | 982 +++++++++++++-------------- include/linux/mymap.h | 28 + include/mode.h | 13 +- include/pseudoaxe.h | 14 - include/pseudoaxe_eulerian4C.h | 29 +- include/reflection.h | 225 ++++--- include/svecmat.h | 6 +- src/affinement.cpp | 23 + src/crystal.cpp | 964 +++++++++++++------------- src/crystallist.cpp | 1 + src/diffractometer.cpp | 1114 ++++++++++++++++--------------- src/pseudoaxe.cpp | 12 - src/pseudoaxe_eulerian4C.cpp | 38 +- src/reflection.cpp | 41 +- src/smatrix.cpp | 7 +- src/svector.cpp | 7 +- test/affinement_simplex_test.cpp | 20 + test/affinement_simplex_test.h | 2 + test/crystal_test.cpp | 21 + test/crystal_test.h | 3 +- test/crystallist_test.cpp | 23 + test/crystallist_test.h | 2 + test/diffractometer_eulerian4C_test.cpp | 41 +- test/diffractometer_eulerian4C_test.h | 6 +- test/mode_eulerian4C_test.cpp | 28 + test/mode_eulerian4C_test.h | 3 + test/pseudoaxe_eulerian4C_test.cpp | 19 +- test/pseudoaxe_eulerian4C_test.h | 2 + test/reflection_test.cpp | 35 +- test/reflection_test.h | 6 +- 39 files changed, 2293 insertions(+), 1866 deletions(-) commit 9c2197a6bd75a3297e36986a64f9730ef2da670c Author: picca Date: Fri Jan 6 11:03:33 2006 +0000 *** empty log message *** bksys/cppunit.py | 25 +++++++++++++++---------- bksys/win32/detect_cppunit.py | 42 +++++++++++++++++++++++++++++------------- 2 files changed, 44 insertions(+), 23 deletions(-) commit 87aa14ce93593e46c96ea7116a5fe41c06954d19 Author: picca Date: Fri Jan 6 09:17:49 2006 +0000 * remove the unnecessary bksys files SConstruct | 2 +- bksys/compiler.py | 79 ---- bksys/lowlevel.py | 100 ----- bksys/unix/detect_lowlevel.py | 848 ----------------------------------------- bksys/win32/detect_lowlevel.py | 33 -- 5 files changed, 1 insertion(+), 1061 deletions(-) commit 04b04e48aca1bd6eea2d2b777e70b242fa0bdfc5 Author: picca Date: Thu Jan 5 16:34:57 2006 +0000 add the necessary files for bksys on win32 SConstruct | 2 +- bksys/compiler.py | 79 +++++++++++++++++++++++++++++++++++++++++++ bksys/win32/detect_cppunit.py | 20 +++++++++++ bksys/win32/detect_generic.py | 3 +- 4 files changed, 102 insertions(+), 2 deletions(-) commit 072562723169c3795076124582eddf1e1bdadaaf Author: picca Date: Thu Jan 5 15:55:09 2006 +0000 * modification of SCons files for bksys SConstruct | 92 ++++++++++++++++++++++++++++++--------------------------- src/SConscript | 76 +++++++++++++++++++++++------------------------ test/SConscript | 60 ++++++++++++++++--------------------- 3 files changed, 111 insertions(+), 117 deletions(-) commit b77566c628ed9fb2146f195c0d9ef03ba8901f2b Author: picca Date: Thu Jan 5 15:50:47 2006 +0000 add the bksys system for unix bksys/cppunit.py | 97 ++++ bksys/generic.py | 1173 ++++++++++++++++++++++++++++++++++++++++ bksys/lowlevel.py | 100 ++++ bksys/unix/detect_cppunit.py | 20 + bksys/unix/detect_generic.py | 142 +++++ bksys/unix/detect_lowlevel.py | 848 +++++++++++++++++++++++++++++ bksys/win32/detect_generic.py | 148 +++++ bksys/win32/detect_lowlevel.py | 33 ++ 8 files changed, 2561 insertions(+) commit cd83c021cccda61140dd302dc6e48ae9c617ef36 Author: picca Date: Tue Dec 13 16:58:26 2005 +0000 * now serialization is on the way. TODO | 1 + include/linux/mymap.h | 8 +++----- src/fitparameter.cpp | 6 +++--- src/geometry.cpp | 1 + src/object.cpp | 48 +++++++++--------------------------------------- src/range.cpp | 4 ++-- test/SConscript | 14 ++++++++++---- test/geometry_test.cpp | 8 +++++--- test/object_test.cpp | 19 +++++++++++++------ test/range_test.cpp | 2 +- test/value_test.cpp | 1 - 11 files changed, 48 insertions(+), 64 deletions(-) commit f9517dabb6210b6e9832bcb4f1f78f2512f4291e Author: picca Date: Tue Dec 13 12:44:24 2005 +0000 *** empty log message *** include/mymap.h | 300 ------------------------------- include/myvector.h | 506 ----------------------------------------------------- 2 files changed, 806 deletions(-) commit f6a5619c7b06a815ee61523e945c62d4c3526277 Author: picca Date: Tue Dec 13 10:57:25 2005 +0000 *now compile on windows include/win32/mymap.h | 123 ++++++++++++++++------------------------------- include/win32/myvector.h | 3 +- src/object.cpp | 10 ++-- test/object_test.cpp | 3 +- 4 files changed, 48 insertions(+), 91 deletions(-) commit 0d4dde6cdcd2538cc1f5e0ce442dcddea9d7f898 Author: picca Date: Tue Dec 13 09:57:59 2005 +0000 *** empty log message *** include/linux/mymap.h | 269 +++++++++++++++++++++++++++++ include/linux/myvector.h | 438 +++++++++++++++++++++++++++++++++++++++++++++++ include/win32/mymap.h | 306 +++++++++++++++++++++++++++++++++ include/win32/myvector.h | 367 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 1380 insertions(+) commit b54034f062a45d698a4a864911b9a37189c194c3 Author: picca Date: Tue Dec 13 09:56:34 2005 +0000 *for test include/crystallist.h | 62 +++++++++++++++++++++++++++++++++++++++++++++++ src/crystallist.cpp | 32 ++++++++++++++++++++++++ test/crystallist_test.cpp | 49 +++++++++++++++++++++++++++++++++++++ test/crystallist_test.h | 33 +++++++++++++++++++++++++ 4 files changed, 176 insertions(+) commit a0ef632df1fdedae8b3998d7a6054de5f1d8b4e4 Author: picca Date: Tue Dec 13 09:53:53 2005 +0000 * fir windows test compile. TODO | 28 +- doc/uml/hkl.dia | 453 +++++++++++++++++++++++++--- include/axe.h | 162 +++++----- include/constants.h | 8 +- include/crystal.h | 9 +- include/diffractometer.h | 34 ++- include/fitparameter.h | 201 +++++++------ include/fitparameterlist.h | 6 +- include/geometry.h | 24 +- include/object.h | 59 ++-- include/objectwithparameters.h | 15 +- include/quaternion.h | 233 ++++++++------- include/range.h | 215 +++++++------- include/source.h | 194 ++++++------ include/svecmat.h | 31 +- include/value.h | 26 +- src/SConscript | 1 + src/axe.cpp | 133 +++++---- src/diffractometer.cpp | 69 ++++- src/fitparameter.cpp | 42 ++- src/fitparameterlist.cpp | 142 ++++----- src/geometry.cpp | 65 ++++ src/object.cpp | 110 ++++++- src/objectwithparameters.cpp | 18 ++ src/quaternion.cpp | 36 ++- src/range.cpp | 78 +++-- src/smatrix.cpp | 511 +++++++++++++++++--------------- src/source.cpp | 185 +++++++----- src/svector.cpp | 29 +- src/value.cpp | 30 +- test/SConscript | 7 +- test/axe_test.cpp | 31 +- test/axe_test.h | 17 +- test/diffractometer_eulerian4C_test.cpp | 94 +++++- test/diffractometer_eulerian4C_test.h | 6 + test/fitparameter_test.cpp | 15 + test/fitparameter_test.h | 17 +- test/geometry_test.cpp | 14 + test/geometry_test.h | 2 + test/object_test.cpp | 18 ++ test/object_test.h | 2 + test/objectwithparameters_test.cpp | 23 ++ test/objectwithparameters_test.h | 2 + test/quaternion_test.cpp | 23 ++ test/quaternion_test.h | 2 + test/range_test.cpp | 21 ++ test/range_test.h | 14 +- test/source_test.cpp | 40 ++- test/source_test.h | 18 +- test/svecmat_test.cpp | 93 ++++-- test/svecmat_test.h | 6 + test/value_test.cpp | 20 ++ test/value_test.h | 3 + 53 files changed, 2462 insertions(+), 1173 deletions(-) commit 9b45d9a830e2abc8015ed59381443d5b7ca74acf Author: picca Date: Tue Dec 6 09:31:00 2005 +0000 *** empty log message *** include/crystal.h | 9 ++++++--- src/crystal.cpp | 37 +++++++++++++++++++++++++++++-------- 2 files changed, 35 insertions(+), 11 deletions(-) commit 5fe7aa95f39f29078fd3428ce0d8d5300d7b65b1 Author: picca Date: Mon Dec 5 10:34:43 2005 +0000 * When adding a reflection with the same (hkl) than another one, the flag is automatically set to false. include/crystal.h | 8 +++- include/geometry.h | 11 ++++-- include/source.h | 13 +++++-- src/crystal.cpp | 34 +++++++++++++++-- src/geometry.cpp | 15 +++++--- src/quaternion.cpp | 3 +- src/source.cpp | 16 ++++++-- test/SConscript | 13 +++---- test/affinement_simplex_test.cpp | 41 +++++++++++--------- test/crystal_test.cpp | 34 +++++++++++++---- test/diffractometer_eulerian4C_test.cpp | 66 +++++++++++++++++++++++++++++++-- test/diffractometer_eulerian4C_test.h | 2 + test/source_test.cpp | 4 +- 13 files changed, 200 insertions(+), 60 deletions(-) commit 6f4b68bc0b1d54b7d83f8578cc023a780b5fb2cb Author: picca Date: Thu Dec 1 09:41:25 2005 +0000 * modification of the affineCrystal behaviour SConstruct | 3 ++- TODO | 3 ++- include/pseudoaxe_eulerian4C.h | 30 +++++++++++++++++++++++++++--- src/affinement.cpp | 6 +++--- src/affinement_simplex.cpp | 32 ++++++++++++++++---------------- src/diffractometer.cpp | 14 +++++++++++++- src/pseudoaxe_eulerian4C.cpp | 34 +++++++++++++++++----------------- test/SConscript | 1 + test/affinement_simplex_test.cpp | 18 ++++++++++++------ test/pseudoaxe_eulerian4C_test.cpp | 11 ++++++----- 10 files changed, 99 insertions(+), 53 deletions(-) commit 4c88b1b0777d1901a203fa3ffae70470140b4322 Author: picca Date: Fri Nov 25 14:01:46 2005 +0000 * add getCrystalParametersNames SConstruct | 6 +- TODO | 3 +- binding/python/SConscript | 2 +- doc/uml/hkl.dia | 348 ++++++++++---------------------- include/affinement.h | 3 + include/diffractometer.h | 125 +++++++----- include/diffractometer_eulerian4C.h | 1 + include/geometry.h | 223 +++++++++----------- include/geometry_eulerian4C.h | 21 +- include/mode.h | 11 +- include/objectwithparameters.h | 132 ++++++------ include/pseudoaxe.h | 20 +- include/pseudoaxe_eulerian4C.h | 16 +- src/SConscript | 7 + src/affinement_simplex.cpp | 2 - src/diffractometer.cpp | 116 ++++++----- src/diffractometer_eulerian4C.cpp | 43 ++-- src/geometry.cpp | 79 +++----- src/geometry_eulerian4C.cpp | 11 +- src/mode.cpp | 4 +- src/objectwithparameters.cpp | 27 +-- src/pseudoaxe.cpp | 16 +- src/pseudoaxe_eulerian4C.cpp | 68 +++++-- test/SConscript | 17 +- test/diffractometer_eulerian4C_test.cpp | 26 ++- test/diffractometer_eulerian4C_test.h | 2 + test/libHKL_test.cpp | 3 +- test/pseudoaxe_eulerian4C_test.cpp | 26 +-- test/pseudoaxe_eulerian4C_test.h | 8 +- 29 files changed, 657 insertions(+), 709 deletions(-) commit af98251755365205ec2f2ae0f756903542afd0f7 Author: picca Date: Wed Nov 16 14:30:07 2005 +0000 * update to compile with MSVC++6 include/affinement.h | 1 + include/fitparameter.h | 8 +++---- include/myvector.h | 39 ++++++++++++++++++++++++++++----- include/pseudoaxe.h | 5 ++--- include/svecmat.h | 12 +++++----- src/fitparameter.cpp | 59 +++++++++++++++++++++++--------------------------- src/svector.cpp | 34 ++++++++++------------------- 7 files changed, 82 insertions(+), 76 deletions(-) commit 8df4a173e78fe135272d45f9ff328705a4b6841c Author: picca Date: Wed Nov 16 12:52:38 2005 +0000 * add the pseudoAxe part doc/uml/hkl.dia | 135 ++++++++++++++++++++++++++++++++++--- include/pseudoaxe_eulerian4C.h | 113 +++++++++++++++++++++++++++++++ include/svecmat.h | 18 ++++- src/pseudoaxe_eulerian4C.cpp | 77 +++++++++++++++++++++ test/pseudoaxe_eulerian4C_test.cpp | 79 ++++++++++++++++++++++ test/pseudoaxe_eulerian4C_test.h | 32 +++++++++ 6 files changed, 440 insertions(+), 14 deletions(-) commit 9563ec09af71a977998e6b74aff1ddf65393ca4b Author: picca Date: Wed Nov 16 12:42:49 2005 +0000 * modified crystal::randomize to deal with different combination of alpha, beta and gamma fit. SConstruct | 2 +- TODO | 7 +- doc/uml/hkl.dia | 158 +++++- include/crystal.h | 365 +++++++------- include/svecmat.h | 555 +++++++++++---------- src/affinement_simplex.cpp | 21 +- src/crystal.cpp | 840 +++++++++++++++++--------------- src/svector.cpp | 320 +++++++----- test/affinement_simplex_test.cpp | 12 +- test/affinement_simplex_test.h | 2 +- test/diffractometer_eulerian4C_test.cpp | 36 -- test/diffractometer_eulerian4C_test.h | 30 +- test/svecmat_test.cpp | 10 + test/svecmat_test.h | 59 ++- 14 files changed, 1328 insertions(+), 1089 deletions(-) commit a9aaa0faea4de553a677662b3d958cdfa02dc6d5 Author: picca Date: Mon Nov 14 13:34:13 2005 +0000 * update the Simplex method. SConstruct | 2 +- binding/python/diffractometer.glade | 242 ++- binding/python/diffractometer.py | 82 +- binding/python/diffractometer_eulerian4C_wrap.cpp | 8 +- binding/python/diffractometer_eulerian4C_wrap.h | 4 +- binding/python/hkl_wrap.cpp | 4 +- doc/Maxima/E4C_bissector.max | 12 +- doc/uml/hkl.dia | 2216 +++++++++++++-------- include/affinement.h | 14 +- include/diffractometer.h | 937 +++++---- include/geometry.h | 65 +- include/mode.h | 8 +- include/mode_eulerian4C.h | 13 +- include/mode_eulerian6C.h | 35 +- include/pseudoaxe.h | 29 +- include/quaternion.h | 20 + include/reflection.h | 62 +- src/affinement_simplex.cpp | 360 ++-- src/crystal.cpp | 25 +- src/diffractometer.cpp | 20 +- src/diffractometer_eulerian4C.cpp | 6 +- src/diffractometer_eulerian6C.cpp | 7 +- src/geometry.cpp | 19 +- src/mode_eulerian4C.cpp | 413 ++-- src/mode_eulerian6C.cpp | 57 +- src/quaternion.cpp | 258 +-- src/reflection.cpp | 41 +- test/SConscript | 2 + test/affinement_simplex_test.cpp | 63 +- test/affinement_simplex_test.h | 12 +- test/crystal_test.cpp | 22 +- test/diffractometer_eulerian4C_test.cpp | 36 + test/diffractometer_eulerian4C_test.h | 2 + test/geometry_test.cpp | 26 +- test/geometry_test.h | 34 +- test/mode_eulerian4C_test.cpp | 32 +- test/quaternion_test.cpp | 47 +- test/quaternion_test.h | 66 +- test/reflection_test.cpp | 41 +- test/reflection_test.h | 4 - 40 files changed, 3113 insertions(+), 2233 deletions(-) commit 1197a2e955aec19ddadf3857d8f10b7ae7ade257 Author: picca Date: Fri Oct 28 12:59:26 2005 +0000 *** empty log message *** doc/uml/hkl.dia | 550 +++++++++++++++++++++--------------------- include/geometry_eulerian4C.h | 5 + include/pseudoaxe.h | 6 + src/SConscript | 1 + src/geometry.cpp | 2 +- src/geometry_eulerian4C.cpp | 8 +- 6 files changed, 296 insertions(+), 276 deletions(-) commit 91ba98316476ad4c6157e0dde624117b06664277 Author: picca Date: Thu Oct 27 09:40:42 2005 +0000 * add the PseudoAxe part to the library. * update the uml diagramm doc/uml/hkl.dia | 326 +++++++++++++++++++++++--------- include/diffractometer.h | 79 ++++++-- include/geometry.h | 27 ++- include/pseudoaxe.h | 9 +- src/diffractometer.cpp | 71 ++++++- src/geometry.cpp | 12 ++ test/diffractometer_eulerian4C_test.cpp | 96 +++++----- 7 files changed, 447 insertions(+), 173 deletions(-) commit 8db4880b37fdc8be47360521ce9fadc72704d9fa Author: picca Date: Wed Oct 26 15:54:50 2005 +0000 * derive Mode from ObjectwithParameters * update uml diagram doc/uml/hkl.dia | 124 ++++++++++++------------------------- include/mode.h | 54 +++------------- include/objectwithparameters.h | 2 +- src/mode.cpp | 43 ------------- src/mode_eulerian4C.cpp | 23 ++++--- src/objectwithparameters.cpp | 2 +- test/objectwithparameters_test.cpp | 2 +- 7 files changed, 63 insertions(+), 187 deletions(-) commit 5957a2347551110fad7f9f62ae87dacafbbb2b42 Author: picca Date: Wed Oct 26 15:14:20 2005 +0000 * remove AngleConfiguration include/angleconfiguration.h | 329 -------------------------------- include/angleconfiguration_eulerian4C.h | 32 ---- include/angleconfiguration_eulerian6C.h | 34 ---- include/angleconfiguration_kappa4C.h | 30 --- test/angleconfiguration_test.cpp | 113 ----------- test/angleconfiguration_test.h | 43 ----- 6 files changed, 581 deletions(-) commit 5eedac15f0dfdb35e50e44e9fdcf70af0963ab18 Author: picca Date: Wed Oct 26 15:11:41 2005 +0000 * AngleConfiguration -> Geometry * add PseudoAxe class doc/uml/hkl.dia | 349 ++++--- include/diffractometer.h | 20 +- include/diffractometer_eulerian4C.h | 2 +- include/diffractometer_eulerian6C.h | 2 +- include/geometry.h | 354 +++++++ include/geometry_eulerian4C.h | 30 + include/geometry_eulerian6C.h | 30 + include/geometry_kappa4C.h | 30 + include/mode.h | 14 +- include/mode_eulerian4C.h | 36 +- include/mode_eulerian6C.h | 78 +- include/mode_kappa4C.h | 7 +- include/pseudoaxe.h | 78 ++ include/reflection.h | 19 +- src/SConscript | 31 +- src/angleconfiguration.cpp | 184 ---- src/diffractometer.cpp | 24 +- src/diffractometer_eulerian4C.cpp | 6 +- src/diffractometer_eulerian6C.cpp | 20 +- src/geometry.cpp | 192 ++++ ...tion_eulerian4C.cpp => geometry_eulerian4C.cpp} | 10 +- ...tion_eulerian6C.cpp => geometry_eulerian6C.cpp} | 13 +- ...figuration_kappa4C.cpp => geometry_kappa4C.cpp} | 13 +- src/mode.cpp | 136 +-- src/mode_eulerian4C.cpp | 62 +- src/mode_eulerian6C.cpp | 1078 ++++++++++---------- src/pseudoaxe.cpp | 31 + src/reflection.cpp | 43 +- test/SConscript | 2 +- test/affinement_simplex_test.cpp | 53 +- test/affinement_simplex_test.h | 4 +- test/crystal_test.cpp | 68 +- test/crystal_test.h | 4 +- test/geometry_test.cpp | 111 ++ test/geometry_test.h | 44 + test/mode_eulerian4C_test.cpp | 135 ++- test/mode_eulerian4C_test.h | 4 +- test/reflection_test.cpp | 26 +- test/reflection_test.h | 4 +- 39 files changed, 2075 insertions(+), 1272 deletions(-) commit 1395b2a7d5f06234726d2ca71d56cd7836bd3eed Author: picca Date: Wed Oct 26 08:50:38 2005 +0000 * the true add of ObjectWithParameter class test functions test/objectwithparameters_test.cpp | 41 ++++++++++++++++++++++++++++++++++++++ test/objectwithparameters_test.h | 26 ++++++++++++++++++++++++ 2 files changed, 67 insertions(+) commit 112a7ceff4cffa2483d8b17bcc227fb61734e6cb Author: picca Date: Wed Oct 26 08:48:11 2005 +0000 * add test functions for ObjectWithParameters class doc/uml/hkl.dia | 142 +++++++++++++++++++++++++++++++++++++++++++++++--------- test/SConscript | 1 + 2 files changed, 120 insertions(+), 23 deletions(-) commit 866d6ddfebfefb728c87d2d82774297650d8deeb Author: picca Date: Tue Oct 25 15:58:16 2005 +0000 * update implementation of the Value class src/value.cpp | 76 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 37 insertions(+), 39 deletions(-) commit 37cc7afab93647b6d2ec8a3a0409b719c81c7563 Author: picca Date: Tue Oct 25 15:52:26 2005 +0000 * add the ObjectWithParameters class * documentation of the template MyVector * add overload << for the MyVector template class SConstruct | 2 +- TODO | 2 + doc/uml/hkl.dia | 104 +++++++++++++++++++++++++++++++++-------- include/myvector.h | 50 ++++++++++++++++++++ include/objectwithparameters.h | 90 +++++++++++++++++++++++++++++++++++ include/value.h | 1 - src/SConscript | 1 + src/objectwithparameters.cpp | 59 +++++++++++++++++++++++ src/value.cpp | 2 +- 9 files changed, 289 insertions(+), 22 deletions(-) commit 2caa117b43d1fb6628c24e1578648329b8f3b7aa Author: picca Date: Tue Oct 25 14:27:31 2005 +0000 * Object add m_description, accessor and test functions doc/uml/hkl.dia | 175 +++++++++++++++++++++++++++++++++++++-------------- include/crystal.h | 19 +++--- include/object.h | 117 +++++++++++++++++++++------------- src/crystal.cpp | 29 +++++---- src/object.cpp | 70 ++++++++++++--------- test/object_test.cpp | 23 ++++--- test/object_test.h | 17 ++--- 7 files changed, 294 insertions(+), 156 deletions(-) commit 6d6df56f4423fca74d5711d1e9fad4e9a3644a4a Author: picca Date: Tue Oct 25 12:29:38 2005 +0000 * in axes.cpp use m_axe and m_direction instead of get_axe and get_direction for now in a class I am using directly the menbers not the accessors is it good I don't know? doc/uml/hkl.dia | Bin 18771 -> 1003104 bytes doc/uml/next_hkl.dia | Bin 20274 -> 997320 bytes src/axe.cpp | 8 ++++---- 3 files changed, 4 insertions(+), 4 deletions(-) commit 98d5c66b98482fe8cdcda228f539d5973f7b88de Author: picca Date: Tue Oct 25 11:34:22 2005 +0000 * oops forgot to modify in crystal_test.cpp: #include cristal_test.h test/crystal_test.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit fca08247b750483498a65dd99d304648f58dba00 Author: picca Date: Tue Oct 25 11:32:11 2005 +0000 * rename cristal.h and cristal.cpp -> crystal.h crystal.cpp * same for the cristal_test suite. include/affinement.h | 6 +++--- include/diffractometer.h | 8 ++++++-- src/crystal.cpp | 8 ++++++-- test/SConscript | 2 +- test/affinement_simplex_test.h | 2 +- test/{cristal_test.cpp => crystal_test.cpp} | 0 test/{cristal_test.h => crystal_test.h} | 2 +- test/mode_eulerian4C_test.h | 2 +- 8 files changed, 19 insertions(+), 11 deletions(-) commit 255b0219fe4aa165eb0d25dcc08491e6642ef9fa Author: picca Date: Tue Oct 25 11:25:11 2005 +0000 *** empty log message *** include/cristal.h | 451 ------------------------------------------------------ 1 file changed, 451 deletions(-) commit f21ba9ca3285cf9a6e91ca206714239d5dbb146d Author: picca Date: Tue Oct 25 10:07:37 2005 +0000 * rename cristal.h -> crystal.h include/crystal.h | 454 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 454 insertions(+) commit 6fad31cc0abca6bbe5bbf2ab4308da18a7c81887 Author: picca Date: Tue Oct 25 10:05:42 2005 +0000 * cristal.cpp -> crystal.cpp src/SConscript | 2 +- src/{cristal.cpp => crystal.cpp} | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) commit 7f933c9e141a92da82b808cd6fc0789239d72313 Author: picca Date: Thu Oct 20 12:48:47 2005 +0000 * right calculation for the number of usable reflections close: #976 #977 TODO | 3 +- include/cristal.h | 28 +- include/reflection.h | 20 +- src/angleconfiguration.cpp | 14 +- src/cristal.cpp | 763 ++++++++++++++++++++------------------- src/diffractometer.cpp | 40 +- src/reflection.cpp | 258 +++++++------ test/angleconfiguration_test.cpp | 4 + test/cristal_test.cpp | 17 + test/cristal_test.h | 2 + test/reflection_test.cpp | 56 +-- test/reflection_test.h | 20 +- 12 files changed, 682 insertions(+), 543 deletions(-) commit 64938494797ff3cd54918aa153437f3e6a0fa617 Author: picca Date: Tue Oct 11 14:23:47 2005 +0000 *** empty log message *** SConstruct | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c19565c57dfff97823fa7d2f87fd8d242a787c45 Author: picca Date: Tue Oct 11 14:14:26 2005 +0000 *** empty log message *** readme.txt | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) commit 6fbdd9c9d7bbb96ceb53f2f1ffbe5cfcf030027f Author: picca Date: Tue Oct 11 14:10:51 2005 +0000 *Modification to take care of the C4786 warning message for the debug version of the library SConstruct | 2 +- include/angleconfiguration.h | 7 ++++++- include/config.h | 5 +++++ include/cristal.h | 7 ++++++- include/diffractometer.h | 7 ++++++- 5 files changed, 24 insertions(+), 4 deletions(-) commit e7cf53df0b07d6c89d75fc0ff7b2846915fd195b Author: picca Date: Tue Oct 11 13:37:09 2005 +0000 * Add debug and profile option to the SConstruct file SConstruct | 31 +++++++++++++++++++++++++------ test/SConscript | 1 - 2 files changed, 25 insertions(+), 7 deletions(-) commit 880c2f25b8c7a1c52f56f2d770dadd42bb9b6fc8 Author: picca Date: Wed Oct 5 13:00:59 2005 +0000 futur uml digramme doc/uml/next_hkl.dia | Bin 0 -> 20274 bytes 1 file changed, 0 insertions(+), 0 deletions(-) commit 81887f08dab13fe57a4ef7fe658e1d9fb5771188 Author: picca Date: Wed Oct 5 12:57:47 2005 +0000 Add most of the figures in the doc doc/Doxyfile-to-tex | 248 - doc/Maxima/E4C_bissector.max | 12 + doc/Maxima/E4C_constant_chi.max | 12 + doc/Maxima/E4C_constant_chi_phi.max | 12 + doc/Maxima/E4C_constant_omega.max | 12 + doc/Maxima/E4C_delta_omega.max | 12 + doc/README.txt | 17 - doc/projetHKL_4C.doc | Bin 268288 -> 0 bytes doc/projetHKL_6C.doc | Bin 118784 -> 0 bytes doc/projetHKL_architecture.mdl | 8918 ----------------------------------- doc/projetHKL_architecture.pdf | Bin 218839 -> 0 bytes doc/projetHKL_reference_manual.pdf | Bin 466018 -> 0 bytes doc/uml/hkl.dia | Bin 0 -> 18771 bytes 13 files changed, 60 insertions(+), 9183 deletions(-) commit a4d4171f1dfdb3c641f9cdb8ef6b0969f6c969bd Author: picca Date: Wed Oct 5 09:02:33 2005 +0000 merge avec la branche head SConstruct | 24 + TODO | 70 + binding/SConscript | 2 + binding/python/SConscript | 14 + binding/python/diffractometer.glade | 3221 ++++++++++++++++++++ binding/python/diffractometer.py | 642 ++++ binding/python/diffractometer_eulerian4C_wrap.cpp | 222 ++ binding/python/diffractometer_eulerian4C_wrap.h | 67 + binding/python/hkl_wrap.cpp | 57 + binding/python/reflection_wrap.cpp | 32 + binding/python/reflection_wrap.h | 18 + doc/Doxyfile | 270 ++ doc/hkl.lyx | 3231 +++++++++++++++++++++ {src => include}/HKLException.h | 69 +- include/affinement.h | 137 + include/angleconfiguration.h | 324 +++ include/angleconfiguration_eulerian4C.h | 32 + include/angleconfiguration_eulerian6C.h | 34 + include/angleconfiguration_kappa4C.h | 30 + include/axe.h | 103 + include/config.h | 8 + include/constants.h | 156 + include/cristal.h | 430 +++ include/diffractometer.h | 906 ++++++ include/diffractometer_eulerian4C.h | 142 + include/diffractometer_eulerian6C.h | 73 + include/diffractometer_kappa4C.h | 41 + include/fitparameter.h | 123 + include/fitparameterlist.h | 92 + include/lattice.h | 52 + include/mode.h | 309 ++ include/mode_eulerian4C.h | 137 + include/mode_eulerian6C.h | 421 +++ include/mode_kappa4C.h | 70 + include/mymap.h | 300 ++ include/myvector.h | 429 +++ include/object.h | 63 + include/quaternion.h | 117 + include/range.h | 121 + include/reflection.h | 360 +++ include/source.h | 249 ++ include/svecmat.h | 472 +++ include/value.h | 116 + include/vertex.h | 150 + readme.txt | 41 +- src/HKLException.cpp | 68 +- src/LibUser.cpp | 208 -- src/{Makefile => Makefile.linux} | 0 src/Makefile.vc | 44 +- src/SConscript | 36 + src/affinement.cpp | 22 + src/affinement_simplex.cpp | 207 ++ src/angleconfig.h | 389 --- src/angleconfiguration.cpp | 184 ++ src/angleconfiguration_eulerian4C.cpp | 20 + src/angleconfiguration_eulerian6C.cpp | 22 + src/angleconfiguration_kappa4C.cpp | 19 + src/axe.cpp | 67 + src/constants.cpp | 113 +- src/constants.h | 170 -- src/cristal.cpp | 864 ++++-- src/cristal.h | 253 -- src/diffractometer.cpp | 3225 ++++---------------- src/diffractometer.h | 770 ----- src/diffractometer_eulerian4C.cpp | 41 + src/diffractometer_eulerian6C.cpp | 215 ++ src/diffractometer_kappa4C.cpp | 15 + src/eulerian_angleConfiguration6C.cpp | 212 -- src/eulerian_angleconfiguration4C.cpp | 163 -- src/eulerian_bissectormode4C.cpp | 588 ---- src/eulerian_diffractometer6C.cpp | 2010 ------------- src/eulerian_mode6C.cpp | 1166 -------- src/fitparameter.cpp | 74 + src/fitparameterlist.cpp | 106 + src/kappa_angleconfiguration4C.cpp | 151 - src/lattice.cpp | 149 + src/main.cpp | 910 ------ src/mode.cpp | 95 + src/mode.h | 676 ----- src/mode_eulerian4C.cpp | 489 ++++ src/mode_eulerian6C.cpp | 1009 +++++++ src/object.cpp | 35 + src/quaternion.cpp | 137 + src/range.cpp | 50 + src/reflection.cpp | 357 ++- src/reflection.h | 188 -- src/smatrix.cpp | 374 ++- src/source.cpp | 196 +- src/source.h | 159 - src/svecmat.h | 336 --- src/svector.cpp | 343 ++- src/value.cpp | 76 + src/vertex.cpp | 132 + test/SConscript | 44 + test/affinement_simplex_test.cpp | 73 + test/affinement_simplex_test.h | 37 + test/angleconfiguration_test.cpp | 109 + test/angleconfiguration_test.h | 43 + test/axe_test.cpp | 65 + test/axe_test.h | 35 + test/cristal_test.cpp | 373 +++ test/cristal_test.h | 61 + test/diffractometer_eulerian4C_test.cpp | 365 +++ test/diffractometer_eulerian4C_test.h | 51 + test/diffractometer_test.cpp | 366 +++ test/diffractometer_test.h | 54 + test/fitparameter_test.cpp | 54 + test/fitparameter_test.h | 31 + test/lattice_test.cpp | 146 + test/lattice_test.h | 39 + test/libHKL_test.cpp | 15 + test/mode_eulerian4C_test.cpp | 118 + test/mode_eulerian4C_test.h | 38 + test/object_test.cpp | 47 + test/object_test.h | 29 + test/quaternion_test.cpp | 169 ++ test/quaternion_test.h | 58 + test/range_test.cpp | 50 + test/range_test.h | 31 + test/reflection_test.cpp | 102 + test/reflection_test.h | 46 + test/source_test.cpp | 74 + test/source_test.h | 41 + test/svecmat_test.cpp | 282 ++ test/svecmat_test.h | 77 + test/value_test.cpp | 71 + test/value_test.h | 35 + 127 files changed, 22645 insertions(+), 11694 deletions(-) commit 7217579f8770d850ad2655a90d847d5afc7555d8 Author: picca Date: Fri Feb 11 15:52:45 2005 +0000 documentation src/mode.h | 766 +++++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 469 insertions(+), 297 deletions(-) commit 6c21981ce6ebdf629a8cae305e445c9377d35827 Author: picca Date: Fri Feb 11 14:30:17 2005 +0000 documentation src/diffractometer.h | 850 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 573 insertions(+), 277 deletions(-) commit 62228a6dfb9a0e5cb410a7da8dd8982e17561aff Author: picca Date: Thu Feb 10 16:47:04 2005 +0000 documentation update src/angleconfig.h | 485 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 269 insertions(+), 216 deletions(-) commit dfd8f995709112a5af73bc2f88fa53eda64c2e73 Author: picca Date: Thu Feb 10 16:16:12 2005 +0000 mistake in the comment after #endif src/constants.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 592b14f52e925626aeb398bdf58a7e842a3769e5 Author: picca Date: Thu Feb 10 14:09:34 2005 +0000 documentation src/constants.h | 147 +++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 93 insertions(+), 54 deletions(-) commit a017ef29c534929359d01d31292eff3cc4f3b913 Author: picca Date: Thu Feb 10 13:20:07 2005 +0000 documentation src/cristal.h | 294 +++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 176 insertions(+), 118 deletions(-) commit e48580adab165f4bbd14342c7110ab882879a99c Author: picca Date: Thu Feb 10 09:19:49 2005 +0000 Rewrite of the documentation src/HKLException.h | 208 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 139 insertions(+), 69 deletions(-) commit 3c1951af5eeb823f6e10f2a62ba13ea045620ab5 Author: picca Date: Tue Feb 8 17:03:08 2005 +0000 update the documentation src/reflection.cpp | 32 +++++++++++++++-- src/reflection.h | 101 ++++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 114 insertions(+), 19 deletions(-) commit 9f789cfe23bf64a2223fe0654acfa9e6c62fe33c Author: picca Date: Tue Feb 8 15:52:27 2005 +0000 update for doxygen src/Makefile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit be81041247de60c08c9c88d450e3093a5ced60e3 Author: picca Date: Tue Feb 8 15:51:05 2005 +0000 update the documenattion src/reflection.h | 27 +++-- src/source.cpp | 43 ++++++-- src/source.h | 131 ++++++++++++++++++------ src/svecmat.h | 296 +++++++++++++++++++++++++++++++++++++++++++------------ src/svector.cpp | 14 ++- 5 files changed, 393 insertions(+), 118 deletions(-) commit 6959b190c9ce105309724b969ab76347a181ab02 Author: dupuy Date: Thu Jan 27 16:05:46 2005 +0000 modif pour release_0_5_2 doc/projetHKL_reference_manual.pdf | Bin 351240 -> 466018 bytes 1 file changed, 0 insertions(+), 0 deletions(-) commit fb1c91b1375bf149026bbafa0e69d255fc97c8b8 Author: delos Date: Thu Jan 27 09:23:53 2005 +0000 Commentaires pour CVS en tete des fichiers src/HKLException.cpp | 45 ++++++++ src/HKLException.h | 45 ++++++++ src/LibUser.cpp | 44 ++++++++ src/angleconfig.h | 46 +++++++- src/constants.cpp | 47 +++++++- src/constants.h | 44 ++++++++ src/cristal.cpp | 44 ++++++++ src/cristal.h | 44 ++++++++ src/diffractometer.cpp | 44 ++++++++ src/diffractometer.h | 44 ++++++++ src/eulerian_angleConfiguration6C.cpp | 44 ++++++++ src/eulerian_angleconfiguration4C.cpp | 44 ++++++++ src/eulerian_bissectormode4C.cpp | 60 ++++++++-- src/eulerian_diffractometer6C.cpp | 52 ++++++++- src/eulerian_mode6C.cpp | 199 ++++++++++++++++++++++++++++++++-- src/kappa_angleconfiguration4C.cpp | 44 ++++++++ src/mode.h | 49 ++++++++- src/reflection.cpp | 44 ++++++++ src/reflection.h | 44 ++++++++ src/smatrix.cpp | 44 ++++++++ src/source.cpp | 44 ++++++++ src/source.h | 44 ++++++++ src/svecmat.h | 44 ++++++++ src/svector.cpp | 44 ++++++++ 24 files changed, 1218 insertions(+), 29 deletions(-) commit 145d7d79f2fcd7bcbb6ac4b412120edc27f8a16e Author: dupuy Date: Wed Jan 26 11:10:41 2005 +0000 modification avant release 5.2 readme.txt | 15 ++++++++++----- release_notes.txt | 4 ++++ 2 files changed, 14 insertions(+), 5 deletions(-) commit 25da915ad165f49c1da49a82dd65b278f2c58384 Author: delos Date: Wed Jan 26 10:41:26 2005 +0000 Makefile Linux src/Makefile | 43 +++++++++++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 12 deletions(-) commit fddadbe4c241f9d940138cc16c85873a1295d237 Author: delos Date: Tue Jan 25 15:08:19 2005 +0000 PREMIERE VERSION PORTABLE LINUX - WINDOWS !!! src/LibUser.cpp | 93 +++++----- src/diffractometer.cpp | 310 +++++++++++++++------------------- src/diffractometer.h | 15 +- src/eulerian_angleConfiguration6C.cpp | 28 +-- src/eulerian_angleconfiguration4C.cpp | 22 +-- src/eulerian_bissectormode4C.cpp | 7 - src/eulerian_diffractometer6C.cpp | 156 ++++++++--------- src/eulerian_mode6C.cpp | 22 +-- src/kappa_angleconfiguration4C.cpp | 14 +- src/mode.h | 25 +-- src/reflection.cpp | 75 +++----- src/smatrix.cpp | 22 ++- src/source.cpp | 8 +- src/svecmat.h | 5 +- src/svector.cpp | 6 +- 15 files changed, 378 insertions(+), 430 deletions(-) commit ad59582800ce14740f2b8e8f10d35ec2c23bd865 Author: delos Date: Mon Jan 24 16:49:09 2005 +0000 Ajout de eulerian_diffractometer6C.cpp (sans l'espace) src/eulerian_diffractometer6C.cpp | 1966 +++++++++++++++++++++++++++++++++++++ 1 file changed, 1966 insertions(+) commit 15aebc18395aefcdb78377e08c3d836ff14de7d4 Author: delos Date: Mon Jan 24 16:47:01 2005 +0000 Suppression de eulerian_ diffractometer6C.cpp (suppression de l'espace) src/eulerian_ diffractometer6C.cpp | 1966 ------------------------------------ 1 file changed, 1966 deletions(-) commit 06665e99a36a37ef3609c81c1b97d9a0efc4c5af Author: delos Date: Fri Jan 21 16:15:55 2005 +0000 Corrections du mode 3C bras levant, nouvelle mthode de rsolution doc/projetHKL_6C.doc | Bin 112128 -> 118784 bytes 1 file changed, 0 insertions(+), 0 deletions(-) commit bc0ebca92da0ea8ddb1e09d5b2d2f2c4d50b2056 Author: dupuy Date: Thu Jan 20 15:37:02 2005 +0000 modif pour release_0_5_1 release_notes.txt | 4 ++++ 1 file changed, 4 insertions(+) commit d58a10ccf3e7f7d43d047060a5c2bc1fb1d46b33 Author: dupuy Date: Wed Jan 19 13:36:06 2005 +0000 modif pour compil linux src/Makefile | 11 ++++----- src/cristal.cpp | 74 ++++++++++++++++++++++++++++----------------------------- src/svecmat.h | 4 ++-- 3 files changed, 43 insertions(+), 46 deletions(-) commit f0ab86c0425fa78e3e9e454dca1a6b106c6e831d Author: dupuy Date: Wed Jan 19 11:23:24 2005 +0000 marche pas : svector.h src/Makefile | 93 ++++++++---------------------------------------------------- 1 file changed, 12 insertions(+), 81 deletions(-) commit 86ed62a00c213a1241fd44570425bfde9f19cd30 Author: dupuy Date: Wed Jan 19 11:06:42 2005 +0000 plus de repertoire pour les obj src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e38714f2e95bc2c6ef568f1187111123e0ee0d09 Author: dupuy Date: Wed Jan 19 11:03:41 2005 +0000 ajout des dependance src/Makefile | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) commit dcc99560be908024228e7accda6894041fda6344 Author: dupuy Date: Wed Jan 19 10:59:41 2005 +0000 pour la compil avec des makefile sous linux src/Makefile | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) commit 4e67d89aa9284b1fad34698d9b59c5bb1a4e6b1d Author: dupuy Date: Wed Jan 19 10:07:54 2005 +0000 pour la compil avec des makefile src/README-compil.txt | 6 ++++++ 1 file changed, 6 insertions(+) commit a38c388a2ba2e7e45c493e2802fcc8da5886778f Author: delos Date: Wed Jan 19 09:17:18 2005 +0000 Corrections mineures doc/projetHKL_4C.doc | Bin 268288 -> 268288 bytes doc/projetHKL_6C.doc | Bin 101888 -> 112128 bytes src/diffractometer.h | 76 +++++++------------ src/eulerian_ diffractometer6C.cpp | 5 +- src/eulerian_bissectormode4C.cpp | 7 +- src/eulerian_mode6C.cpp | 149 +++++++++++++++++++++++++++++++++++-- src/mode.h | 18 +++-- src/reflection.h | 41 ++++------ src/svecmat.h | 18 ++--- 9 files changed, 211 insertions(+), 103 deletions(-) commit 0dd1e4dc39a9424362b06a4ec05c91f5bd501c86 Author: delos Date: Fri Jan 14 15:05:48 2005 +0000 Ajout du mode omega constant 4C src/LibUser.cpp | 9 +- src/eulerian_bissectormode4C.cpp | 240 +++++++++++++++++++++++++++++++++++++-- src/mode.h | 67 +++++++++-- 3 files changed, 293 insertions(+), 23 deletions(-) commit 8ad996869b1acf91df7098e079f033b3966388cc Author: delos Date: Fri Jan 14 15:05:15 2005 +0000 no message doc/projetHKL_6C.doc | Bin 100864 -> 101888 bytes doc/projetHKL_architecture.mdl | 512 ++++++++++++++++++++++++----------------- 2 files changed, 303 insertions(+), 209 deletions(-) commit 73eda918c4689dd08b17c973ec5e176d53a430ce Author: delos Date: Fri Jan 14 13:15:20 2005 +0000 no message doc/projetHKL_4C.doc | Bin 267776 -> 268288 bytes doc/projetHKL_6C.doc | Bin 100864 -> 100864 bytes 2 files changed, 0 insertions(+), 0 deletions(-) commit f7826ca7e1159a969758f15cc9230f7e414f4cb9 Author: delos Date: Fri Jan 14 13:07:55 2005 +0000 Corrections du mode 3C bras levant src/angleconfig.h | 119 ++++++++++++-------- src/eulerian_ diffractometer6C.cpp | 216 +++++++++++++++++++++++++++++++------ src/eulerian_mode6C.cpp | 180 ++++++++++++++++--------------- src/mode.h | 65 +++++------ 4 files changed, 370 insertions(+), 210 deletions(-) commit 2f5a4fd1022ea1d2702e7934df4f55e78cbdeadc Author: dupuy Date: Tue Jan 11 10:17:13 2005 +0000 ajout du logo soleil doc/projetHKL_4C.doc | Bin 257536 -> 267776 bytes doc/projetHKL_6C.doc | Bin 91648 -> 100864 bytes 2 files changed, 0 insertions(+), 0 deletions(-) commit 987e74b2497a84a22a55091c9b76ad446bcecd7c Author: dupuy Date: Tue Jan 11 10:10:09 2005 +0000 ajout du logo soleil commit fab46612b382b55818ac53e9a01fab04edcc43ae Author: dupuy Date: Tue Jan 11 09:42:20 2005 +0000 mise jour pour la release_0_5 readme.txt | 12 ++++++++++++ release_notes.txt | 5 +++-- 2 files changed, 15 insertions(+), 2 deletions(-) commit 9a7cec8a984cb0afc7abbac4827a53dc569d95cb Author: dupuy Date: Tue Jan 11 09:32:36 2005 +0000 generation du pdf pour la release_0_5 doc/projetHKL_reference_manual.pdf | Bin 336602 -> 351240 bytes 1 file changed, 0 insertions(+), 0 deletions(-) commit cccf4f25f2f59700111ce7874af26c304dd795ee Author: dupuy Date: Tue Jan 11 09:31:28 2005 +0000 correction (mauvais fichier commiter precedemment) : generation du pdf pour la release_0_5 doc/projetHKL_architecture.pdf | Bin 351240 -> 218839 bytes 1 file changed, 0 insertions(+), 0 deletions(-) commit 7e4dc80d186efe38bc75489977e31d43fdcf5c35 Author: dupuy Date: Tue Jan 11 09:22:30 2005 +0000 generation du pdf pour la release_0_5 doc/projetHKL_architecture.pdf | Bin 218839 -> 351240 bytes 1 file changed, 0 insertions(+), 0 deletions(-) commit 722ed4a653887294c88539f902c4bbb0c50e2a8d Author: dupuy Date: Tue Jan 11 09:18:30 2005 +0000 generation du latex pour la release_0_5 doc/Doxyfile-to-tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 81ef03e2f43c0ccb5fadbf70e26b69888a46fc25 Author: dupuy Date: Mon Jan 10 18:19:09 2005 +0000 avant tag pour la release 0.5 release_notes.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit e0620f030fe563b4ef0a19edbb47a84ef5741645 Author: dupuy Date: Mon Jan 10 18:16:03 2005 +0000 nouveau pdf, en une seule page doc/projetHKL_architecture.pdf | Bin 406062 -> 218839 bytes 1 file changed, 0 insertions(+), 0 deletions(-) commit a72746ffbc801e85ef07dc52bb355e15fbfdfb1d Author: dupuy Date: Mon Jan 10 18:15:29 2005 +0000 mise a jour du repertoire doc (nettoyage) doc/README.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 88df7f170dc6c0cadc91a1cf7c82f9619a24bf9b Author: dupuy Date: Mon Jan 10 17:48:01 2005 +0000 mise a jour du repertoire doc (nettoyage) doc/README.txt | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) commit 3eff6090e0f5b4d12af55995cd8e3c97e0ca3aea Author: dupuy Date: Mon Jan 10 17:40:13 2005 +0000 renommer en projetHKL_6C.doc doc/projetHKL_6C.doc | Bin 0 -> 91648 bytes 1 file changed, 0 insertions(+), 0 deletions(-) commit b0349d9949b58fcf43b8b82065d72aef52bbf2e9 Author: dupuy Date: Mon Jan 10 17:38:11 2005 +0000 renommer en projetHKL_4C.doc doc/projetHKL_4C.doc | Bin 0 -> 257536 bytes 1 file changed, 0 insertions(+), 0 deletions(-) commit 0fa05ebdeac41a16ee2575ae60bb1794409fdd8b Author: dupuy Date: Mon Jan 10 17:07:52 2005 +0000 remplac par les fichiers projetHKL_4C.doc et projetHKL_6C.doc doc/pilotage-diffract.doc | Bin 347648 -> 0 bytes doc/projetHKL_1.doc | Bin 257536 -> 0 bytes doc/projetHKL_4C.doc | Bin 257536 -> 0 bytes doc/projetHKL_6C.doc | Bin 91648 -> 0 bytes 4 files changed, 0 insertions(+), 0 deletions(-) commit 705227854f55c44424aade434b46e9c0aac5507e Author: delos Date: Mon Jan 10 15:37:20 2005 +0000 Test en 6C mode 4C horizontal et 4C vertical, implementation du 3C bras levant en cours doc/projetHKL_1.doc | Bin 258048 -> 257536 bytes doc/projetHKL_4C.doc | Bin 258048 -> 257536 bytes doc/projetHKL_6C.doc | Bin 90624 -> 91648 bytes src/eulerian_ diffractometer6C.cpp | 538 ++++++++++++++++++++++++++++++++++++- src/eulerian_mode6C.cpp | 306 +++++++++++++++++++++ src/mode.h | 131 +++++---- 6 files changed, 912 insertions(+), 63 deletions(-) commit 29c19c73cca2a42eca72320efa352e74e3c888a6 Author: delos Date: Thu Jan 6 14:46:17 2005 +0000 Corrections du 6-cercles en mode 4C horizontal et vertical doc/pilotage-diffract.doc | Bin 347648 -> 347648 bytes doc/projetHKL_1.doc | Bin 258048 -> 258048 bytes doc/projetHKL_4C.doc | Bin 258048 -> 258048 bytes doc/projetHKL_6C.doc | Bin 87040 -> 90624 bytes src/angleconfig.h | 8 +- src/eulerian_ diffractometer6C.cpp | 601 +++++++++++++++++++++++++++++++++- src/eulerian_angleconfiguration4C.cpp | 31 +- src/eulerian_bissectormode4C.cpp | 45 +-- src/eulerian_mode6C.cpp | 62 ++-- 9 files changed, 664 insertions(+), 83 deletions(-) commit d4105a569af4fb2ca7149ebae80e235c3e4d4196 Author: dupuy Date: Tue Jan 4 13:22:24 2005 +0000 regeneration du pdf avec la doc de l'implementation du 6C doc/projetHKL_reference_manual.pdf | Bin 154729 -> 336602 bytes 1 file changed, 0 insertions(+), 0 deletions(-) commit e61bdf5708fdcc0551313abfacffcb6f3d074222 Author: delos Date: Wed Dec 22 15:45:55 2004 +0000 Ajout du 6-cercles avec modes 4C horizontal et vertical doc/projetHKL_1.doc | Bin 257536 -> 258048 bytes doc/projetHKL_4C.doc | Bin 257536 -> 258048 bytes doc/projetHKL_6C.doc | Bin 86528 -> 87040 bytes doc/projetHKL_architecture.mdl | 765 ++++++++++++++++++++++------------ src/LibUser.cpp | 8 + src/angleconfig.h | 119 +++++- src/diffractometer.cpp | 12 +- src/diffractometer.h | 163 ++++++-- src/eulerian_ diffractometer6C.cpp | 696 +++++++++++++++++++++++++++++++ src/eulerian_angleConfiguration6C.cpp | 168 ++++++++ src/eulerian_mode6C.cpp | 546 ++++++++++++++++++++++++ src/mode.h | 124 +++++- src/source.h | 2 +- 13 files changed, 2267 insertions(+), 336 deletions(-) commit 952f7c271d694a285b013b929e9aa03414a13df7 Author: dupuy Date: Tue Dec 21 13:22:36 2004 +0000 ajout fichier release_notes.txt release_notes.txt | 2 ++ 1 file changed, 2 insertions(+) commit ca0bc8a80325ec8515f96f8885031cb30b7a86a1 Author: delos Date: Thu Dec 16 14:40:34 2004 +0000 no message doc/projetHKL_1.doc | Bin 254976 -> 257536 bytes doc/projetHKL_4C.doc | Bin 254976 -> 257536 bytes doc/projetHKL_6C.doc | Bin 86528 -> 86528 bytes 3 files changed, 0 insertions(+), 0 deletions(-) commit f867d357a6854040abcb3d31e596ca51274c6115 Author: delos Date: Wed Dec 15 16:35:44 2004 +0000 6C en 4C + Mathematica 5.1 doc/projetHKL_6C.doc | Bin 77312 -> 86528 bytes 1 file changed, 0 insertions(+), 0 deletions(-) commit df98b020643c56784ea6af86120e55f92855ec29 Author: delos Date: Wed Dec 15 14:00:08 2004 +0000 Calcul de U en 6 cercles et calcul de qaz doc/projetHKL_6C.doc | Bin 64512 -> 77312 bytes 1 file changed, 0 insertions(+), 0 deletions(-) commit 4c28fb0face989a32436e22f47e60084f71c6518 Author: delos Date: Wed Dec 15 10:55:14 2004 +0000 documentation src/diffractometer.h | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) commit 7af7bc15599ed8398bc3b263a1f9e9c675f92997 Author: delos Date: Wed Dec 15 10:52:53 2004 +0000 Nouvelle doc operationnelle en deux parties (remplace pilotage-diffract.doc) doc/projetHKL_1.doc | Bin 0 -> 254976 bytes doc/projetHKL_4C.doc | Bin 0 -> 254976 bytes doc/projetHKL_6C.doc | Bin 0 -> 64512 bytes 3 files changed, 0 insertions(+), 0 deletions(-) commit 5d9f669e9445b633b73a2c2ffa7f373e986d8a12 Author: delos Date: Tue Dec 7 14:42:34 2004 +0000 Calcul de (h,k,l) partir de (omga,phi,chi) refonte des signatures de fonctions src/diffractometer.cpp | 40 ++++++++++++++++++++-------------------- src/eulerian_bissectormode4C.cpp | 4 ++-- src/mode.h | 30 +++++++++++++++--------------- 3 files changed, 37 insertions(+), 37 deletions(-) commit 8eb0a271f2f3c4db5f1af5f16ff4c3096a905178 Author: delos Date: Tue Dec 7 14:25:16 2004 +0000 Calcul de (h,k,l) partir de (omga,phi,chi) src/diffractometer.cpp | 539 ++++++++++++++++++++++++++++++++++++++- src/diffractometer.h | 88 +++++-- src/eulerian_bissectormode4C.cpp | 118 +++++++-- src/mode.h | 107 +++++++- 4 files changed, 793 insertions(+), 59 deletions(-) commit 76745d6a6ec606490db301a142a3f3680459edaa Author: delos Date: Thu Dec 2 14:05:16 2004 +0000 plus de doc src/cristal.h | 30 ++++++++++++++++++++++++++++-- src/eulerian_bissectormode4C.cpp | 6 +++--- src/source.h | 4 ++++ 3 files changed, 35 insertions(+), 5 deletions(-) commit c0c5d4e64c58156e59ea8650696eb7b1bcb5a26f Author: delos Date: Thu Dec 2 10:27:05 2004 +0000 plus de doc src/cristal.h | 6 +++--- src/diffractometer.h | 34 ++++++++++++++++++++++++++++++---- src/mode.h | 39 +++++++++++++++++++++++++++++++++++---- src/source.h | 7 +++---- 4 files changed, 71 insertions(+), 15 deletions(-) commit 35044ce57444ad4c62804e43ae89407f2591a5b2 Author: delos Date: Wed Dec 1 16:10:49 2004 +0000 6cercles mode bras levant doc/pilotage-diffract.doc | Bin 341504 -> 347648 bytes 1 file changed, 0 insertions(+), 0 deletions(-) commit ab75d9305774aaf9fd11545acccaef08c49137a6 Author: delos Date: Tue Nov 30 15:04:58 2004 +0000 6cercles intro+commentaires doc/pilotage-diffract.doc | Bin 337920 -> 341504 bytes src/source.h | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) commit 75f96240b5e7f4fad83e115ea2657988af1cd7a1 Author: delos Date: Tue Nov 30 11:15:55 2004 +0000 6cercles intro doc/pilotage-diffract.doc | Bin 332288 -> 337920 bytes 1 file changed, 0 insertions(+), 0 deletions(-) commit cf88b734108d8be840ee769b034ac34023960edf Author: delos Date: Fri Nov 26 10:34:01 2004 +0000 Ajout de tests (Rafin) + pb de Q dans (yOz) doc/pilotage-diffract.doc | Bin 328192 -> 332288 bytes src/Makefile.vc | 3 +- src/cristal.h | 28 +- src/diffractometer.cpp | 676 ++++++++++++++++++++++++++++++++++++++- src/diffractometer.h | 86 +++-- src/eulerian_bissectormode4C.cpp | 13 +- src/mode.h | 47 ++- 7 files changed, 787 insertions(+), 66 deletions(-) commit 3f3058b293a29304d262f7807144910eb3bf3abc Author: buteau Date: Wed Nov 24 18:07:04 2004 +0000 added PDF version of class hierarchy doc/projetHKL_architecture.pdf | Bin 0 -> 406062 bytes 1 file changed, 0 insertions(+), 0 deletions(-) commit c1bdaae4100cde04e701aa4a2e4ef6a1dec175b6 Author: dupuy Date: Wed Nov 24 13:38:51 2004 +0000 ajout du fichier readme.txt dans le repertoire doc doc/README.txt | 4 ++++ 1 file changed, 4 insertions(+) commit 93db9afe0d30b9ff86e6b65802491a9252bb42af Author: dupuy Date: Wed Nov 24 10:45:57 2004 +0000 ajout des fichiers doxyfile-to-tex et HKL-code-doc.pdf utilis et/ou gnr par doxygen doc/Doxyfile-to-tex | 248 +++++++++++++++++++++++++++++++++++++ doc/projetHKL_reference_manual.pdf | Bin 0 -> 154729 bytes 2 files changed, 248 insertions(+) commit 00c7b692b71912a88d2c1bc654a8f8d5d038df70 Author: buteau Date: Wed Nov 24 09:27:18 2004 +0000 added target in Makefile.VC for generation of library with standard SOLEIL Makefiles src/Makefile.vc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 1a2acf416649773db41080c958349334959f89a5 Author: buteau Date: Wed Nov 24 08:05:02 2004 +0000 added Makefile.VC to recompile library with standard SOLEIL Makefiles src/Makefile.vc | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) commit d9794be2cc988d497924e58b571b3a48f2486fce Author: delos Date: Tue Nov 23 13:46:54 2004 +0000 Ajout de documentation dans diffractometer.h .cpp src/diffractometer.cpp | 8 ++++---- src/diffractometer.h | 17 ++++++++++------- 2 files changed, 14 insertions(+), 11 deletions(-) commit 17356d157b7928925a791d1e6cb13c4fe77f2bf8 Author: delos Date: Tue Nov 23 13:23:42 2004 +0000 Ajout de documentation Introduction du 6-cercle dans la doc. doc/pilotage-diffract.doc | Bin 297984 -> 328192 bytes src/HKLException.h | 60 +++++++++++++++++----------------- src/angleconfig.h | 71 +++++++++++++++++++++++----------------- src/constants.cpp | 18 +++++++---- src/constants.h | 42 ++++++++++++++---------- src/cristal.cpp | 2 ++ src/cristal.h | 80 ++++++++++++++++++++++++++++------------------ src/diffractometer.h | 10 ++++-- src/mode.h | 46 +++++++++++++------------- src/reflection.h | 36 ++++++++++----------- src/source.h | 12 +++---- src/svecmat.h | 60 +++++++++++++++++----------------- 12 files changed, 243 insertions(+), 194 deletions(-) commit bef5331a75dbeae8e64f55856b0d5096fab6738a Author: delos Date: Wed Nov 17 15:30:02 2004 +0000 First new project release src/Exception_hkl.h | 0 src/LibUser.cpp | 160 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/test_cristal.cpp | 19 ------ 3 files changed, 160 insertions(+), 19 deletions(-) commit 34aadf99f2be0badc07addacb3f7a8d5e8e0187e Author: delos Date: Wed Nov 17 15:01:59 2004 +0000 Architecture de base4 Modif eulerian bisector mode src/eulerian_bissectormode4C.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit a36be9db2cf48dcf8c1f94700bbaf1ead4e2987f Author: delos Date: Wed Nov 17 14:27:34 2004 +0000 Architecture de base4 Construction de diffractomtres avec settings diffrs src/cristal.cpp | 30 ++ src/cristal.h | 7 +- src/diffractometer.cpp | 657 ++++++++++++++++++++++++++++++++++++++- src/diffractometer.h | 62 +++- src/eulerian_bissectormode4C.cpp | 8 +- 5 files changed, 735 insertions(+), 29 deletions(-) commit 3788ff7d571cfdcc30a7f2a01c23d33b9f168030 Author: delos Date: Wed Nov 17 10:21:29 2004 +0000 Architecture de base3+constantes commit 68b0389fa4d73a9988d8fedc044264ef068317b0 Author: delos Date: Wed Nov 17 10:09:59 2004 +0000 Architecture de base3+constantes doc/projetHKL_architecture.mdl | 348 ++++++++++++++++++++++++++++++++------- src/angleconfig.h | 2 +- src/constants.cpp | 19 +++ src/constants.h | 76 +++++++++ src/cristal.cpp | 56 +++++-- src/diffractometer.cpp | 198 +++++++++++++++------- src/diffractometer.h | 89 +++++----- src/eulerian_bissectormode4C.cpp | 43 +++-- src/main.cpp | 5 +- src/mode.h | 32 ++-- src/reflection.cpp | 93 ++++++++++- src/reflection.h | 56 ++++--- 12 files changed, 784 insertions(+), 233 deletions(-) commit 5fdbdb6a33b117f941446ce191572dde33672886 Author: delos Date: Mon Nov 8 16:53:53 2004 +0000 Architecture de base2 doc/archi4.mdl | 8333 -------------------------------- doc/archi9.mdl | 8369 --------------------------------- doc/pilotage-diffract17.doc | Bin 262144 -> 0 bytes src/Exception_hkl.h | 0 src/HKLException.cpp | 204 + src/HKLException.h | 193 + src/angleconfig.h | 1 + src/cristal.cpp | 132 + src/cristal.h | 10 + src/diffractometer.cpp | 510 +- src/diffractometer.h | 4 + src/eulerian_angleconfiguration4C.cpp | 12 + src/eulerian_bissectormode4C.cpp | 114 +- src/main.cpp | 395 +- src/mode.h | 26 + src/smatrix.cpp | 24 + src/source.h | 5 +- src/svecmat.h | 2 + 18 files changed, 1600 insertions(+), 16734 deletions(-) commit a3900e250b93498e3814cddc4271f2382a5e31ff Author: delos Date: Tue Nov 2 13:11:27 2004 +0000 Architecture de base2 doc/pilotage-diffract.doc | Bin 299520 -> 297984 bytes src/cristal.cpp | 73 ++++++++++++++++-- src/cristal.h | 42 ++++++++--- src/diffractometer.cpp | 106 +++++++++++++++++++++----- src/diffractometer.h | 32 ++++++-- src/eulerian_bissectormode4C.cpp | 66 ++++++++++++++-- src/main.cpp | 157 +++++++++++++++++++++++++++++++-------- src/mode.h | 8 ++ src/smatrix.cpp | 6 +- src/svecmat.h | 4 + src/svector.cpp | 17 ++++- 11 files changed, 425 insertions(+), 86 deletions(-) commit c1bebd3cc88f17ea07caaf19246f463636cc87e4 Author: delos Date: Wed Oct 27 10:04:58 2004 +0000 Architecture de base doc/archi9.mdl | 8369 ++++++++++++++++++++++++++++++++++++++++ doc/pilotage-diffract.doc | Bin 0 -> 299520 bytes doc/projetHKL_architecture.mdl | 8369 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 16738 insertions(+) commit ed4a1031b25909b701420bbd8484ca0f9e31995c Author: delos Date: Wed Oct 27 09:58:10 2004 +0000 Architecture de base src/angleconfig.h | 168 +++++++++++++ src/cristal.cpp | 72 ++++++ src/cristal.h | 68 +++++ src/diffractometer.cpp | 322 ++++++++++++++++++++++++ src/diffractometer.h | 171 +++++++++++++ src/eulerian_angleconfiguration4C.cpp | 110 ++++++++ src/eulerian_bissectormode4C.cpp | 77 ++++++ src/kappa_angleconfiguration4C.cpp | 107 ++++++++ src/main.cpp | 459 ++++++++++++++++++++++++++++++++++ src/mode.h | 118 +++++++++ src/reflection.cpp | 56 +++++ src/reflection.h | 69 +++++ src/smatrix.cpp | 149 +++++++++++ src/source.cpp | 32 +++ src/source.h | 42 ++++ src/svecmat.h | 197 ++++++--------- src/svector.cpp | 138 ++++++++++ src/test_cristal.cpp | 19 ++ 18 files changed, 2253 insertions(+), 121 deletions(-) commit 6dd18d2a81df01d5433979d7850187599f2c4548 Author: petit Date: Thu Oct 14 15:35:59 2004 +0000 Initial revision doc/archi4.mdl | 8333 +++++++++++++++++++++++++++++++++++++++++++ doc/pilotage-diffract17.doc | Bin 0 -> 262144 bytes src/svecmat.h | 158 + 3 files changed, 8491 insertions(+) hkl-5.0.0.2449/Makefile.in0000644000175000017500000010703713237017633015175 0ustar00piccapicca00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HKL3D_TRUE@am__append_1 = hkl3d data @GUI_TRUE@am__append_2 = gui @HKL_DOC_TRUE@am__append_3 = Documentation @CONTRIB_TRUE@am__append_4 = contrib subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(dist_installed_mainheader_DATA) \ $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = hkl.pc hkl3d.pc \ Documentation/sphinx/source/conf.py CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(installed_mainheaderdir)" \ "$(DESTDIR)$(pkgconfigdir)" DATA = $(dist_installed_mainheader_DATA) $(noinst_DATA) \ $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = hkl hkl3d data tests gui Documentation contrib am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/hkl.pc.in $(srcdir)/hkl3d.pc.in \ $(top_srcdir)/Documentation/sphinx/source/conf.py.in \ $(top_srcdir)/config/compile $(top_srcdir)/config/config.guess \ $(top_srcdir)/config/config.sub \ $(top_srcdir)/config/install-sh $(top_srcdir)/config/ltmain.sh \ $(top_srcdir)/config/missing AUTHORS COPYING ChangeLog INSTALL \ NEWS README config/compile config/config.guess \ config/config.sub config/depcomp config/install-sh \ config/ltmain.sh config/missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASY = @ASY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BULLET_CFLAGS = @BULLET_CFLAGS@ BULLET_LIBS = @BULLET_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMACS = @EMACS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ G3D_CFLAGS = @G3D_CFLAGS@ G3D_LIBS = @G3D_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GNUPLOT = @GNUPLOT@ GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ GOBJECT_LIBS = @GOBJECT_LIBS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTKGLEXT_CFLAGS = @GTKGLEXT_CFLAGS@ GTKGLEXT_LIBS = @GTKGLEXT_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HDF5_CFLAGS = @HDF5_CFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VMAJ = @VMAJ@ YAML_CFLAGS = @YAML_CFLAGS@ YAML_LIBS = @YAML_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ release_info = @release_info@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ version_info = @version_info@ ACLOCAL_AMFLAGS = -I m4 AM_DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-introspection --enable-hkl3d SUBDIRS = hkl $(am__append_1) tests $(am__append_2) $(am__append_3) \ $(am__append_4) EXTRA_DIST = hkl.pc.in hkl3d.pc.in installed_mainheaderdir = $(includedir)/hkl-@VMAJ@ dist_installed_mainheader_DATA = hkl.h pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = hkl.pc #for not do not install @HKL3D_TRUE@noinst_DATA = hkl3d.pc CCAN_PUBLIC_MODULES = darray CCAN_PRIVATE_MODULES = array_size container_of autodata list generator CCAN_LOCAL_REPO = /tmp/ccan CCAN_LOCAL_EXTRACT = /tmp/ccan.tmp CCAN_URL = https://github.com/rustyrussell/ccan.git CCAN_CREATE_TREE = rm -rf $(CCAN_LOCAL_EXTRACT) && cd $(CCAN_LOCAL_REPO) && tools/create-ccan-tree -b automake $(CCAN_LOCAL_EXTRACT) CCAN_DEST = $(top_srcdir)/hkl/ CCAN_TMP_DEST = /tmp/ccan.next all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 hkl.pc: $(top_builddir)/config.status $(srcdir)/hkl.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ hkl3d.pc: $(top_builddir)/config.status $(srcdir)/hkl3d.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ Documentation/sphinx/source/conf.py: $(top_builddir)/config.status $(top_srcdir)/Documentation/sphinx/source/conf.py.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-dist_installed_mainheaderDATA: $(dist_installed_mainheader_DATA) @$(NORMAL_INSTALL) @list='$(dist_installed_mainheader_DATA)'; test -n "$(installed_mainheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(installed_mainheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(installed_mainheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(installed_mainheaderdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(installed_mainheaderdir)" || exit $$?; \ done uninstall-dist_installed_mainheaderDATA: @$(NORMAL_UNINSTALL) @list='$(dist_installed_mainheader_DATA)'; test -n "$(installed_mainheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(installed_mainheaderdir)'; $(am__uninstall_files_from_dir) install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(installed_mainheaderdir)" "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-local distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dist_installed_mainheaderDATA \ install-pkgconfigDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-dist_installed_mainheaderDATA \ uninstall-pkgconfigDATA .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \ dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-local distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_installed_mainheaderDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgconfigDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-dist_installed_mainheaderDATA \ uninstall-pkgconfigDATA .PRECIOUS: Makefile release: git clean -xdf git fetch git checkout next cd scripts && ./clean-all -git commit -a -m "pre-release" git checkout maint git merge -m "release" next ./autogen.sh ./configure $(AM_DISTCHECK_CONFIGURE_FLAGS) $(MAKE) $(MAKE) distcheck git tag v`./configure -V | head -n 1 | awk '{print $$3}'` git checkout next .PHONY: lcov genlcov lcov-clean release # use recursive makes in order to ignore errors during check lcov: -$(MAKE) $(AM_MAKEFLAGS) -k check $(MAKE) $(AM_MAKEFLAGS) genlcov # we have to massage the lcov.info file slightly to hide the effect of libtool # placing the objects files in the .libs/ directory separate from the *.c # we also have to delete tests/.libs/*.gcda genlcov: rm -f $(top_builddir)/test/hkl/.libs/*.gcda $(LTP) --directory $(top_builddir) --capture --output-file hkl-lcov.info --test-name hkl-lcov --no-checksum --compat-libtool LANG=C $(LTP_GENHTML) --prefix $(top_builddir) --output-directory hkl-lcov --title "hkl Code Coverage" --legend --show-details hkl-lcov.info lcov-clean: -$(LTP) --directory $(top_builddir) -z -rm -rf hkl-lcov.info hkl-lcov -find -name '*.gcda' -print | xargs rm -find -name '*.gcno' -print | xargs rm distclean-local: lcov-clean dist-hook: @if test -d "$(srcdir)/.git"; \ then \ echo Creating ChangeLog && \ ( cd "$(top_srcdir)" && \ echo '# Generated by Makefile. Do not edit.'; echo; \ $(top_srcdir)/config/missing --run git log --stat ) > ChangeLog.tmp \ && mv -f ChangeLog.tmp $(top_distdir)/ChangeLog \ || ( rm -f ChangeLog.tmp ; \ echo Failed to generate ChangeLog >&2 ); \ else \ echo A git clone is required to generate a ChangeLog >&2; \ fi ccan-update: @if test -d $(CCAN_LOCAL_REPO); \ then \ cd $(CCAN_LOCAL_REPO) && git pull; \ else \ git clone $(CCAN_URL) $(CCAN_LOCAL_REPO); \ fi @echo Extracting all the modules @$(CCAN_CREATE_TREE) $(CCAN_PUBLIC_MODULES) $(CCAN_PRIVATE_MODULES) @rm -rf $(CCAN_TMP_DEST) && mkdir -p $(CCAN_TMP_DEST) @rsync -av --exclude=Makefile.am $(CCAN_LOCAL_EXTRACT)/* $(CCAN_TMP_DEST) @find $(CCAN_TMP_DEST)/ccan -maxdepth 2 -name '*.[ch]' | xargs sed -i -e 's,ccan/,hkl/ccan/,' @find $(CCAN_TMP_DEST)/ccan -maxdepth 2 -name '*.[ch]' | xargs sed -i -e 's,"config.h",,' @find $(CCAN_TMP_DEST)/ccan -maxdepth 2 -name '_info' | xargs rm -f @find $(CCAN_TMP_DEST)/ccan -maxdepth 2 -name 'test' | xargs rm -rf @$(CCAN_CREATE_TREE) $(CCAN_PUBLIC_MODULES) @echo Generating the Makefile.am @(\ echo "AM_CFLAGS=-I\$$(top_srcdir)"; echo;\ echo "noinst_PROGRAMS=configurator";\ echo "BUILT_SOURCES=ccan_config.h";\ echo "ccan_config.h: configurator";\ (\ echo -e "\t\$$(builddir)/configurator \$$(CC) \$$(CCAN_CFLAGS) > \$$@.tmp && mv \$$@.tmp \$$@";\ );\ echo "noinst_LTLIBRARIES=libccan.la";\ echo "libccan_la_SOURCES = \\";\ (\ echo -e "\tccan_config.h \\";\ cd $(CCAN_TMP_DEST)/ccan && find . -maxdepth 2 -name '*.[ch]'\ | sed -e 's,^./,\t,;$$!s,$$, \\,'; echo;\ );\ echo "ccanincludedir=\$$(includedir)/hkl-@""VMAJ@/hkl/ccan";\ echo "nobase_ccaninclude_HEADERS= \\";\ (\ cd $(CCAN_LOCAL_EXTRACT)/ccan && find . -maxdepth 2 -name '*.[h]'\ | sed -e 's,^./,\t,;$$!s,$$, \\,';\ );\ echo "nodist_ccaninclude_HEADERS=ccan_config.h";\ echo "EXTRA_DIST=configurator.c";\ echo "CLEANFILES=configurator ccan_config.h";\ ) > $(CCAN_TMP_DEST)/ccan/Makefile.am @echo Extracting the configurator @rsync -av $(CCAN_LOCAL_REPO)/tools/configurator/configurator.c $(CCAN_TMP_DEST)/ccan @echo purge the previous ccan directory cd $(CCAN_DEST) && rm -rf licenses && find ccan -mindepth 1 -type d \! -name ".*" | xargs rm -rf rsync -av $(CCAN_TMP_DEST)/* $(top_srcdir)/hkl # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: hkl-5.0.0.2449/INSTALL0000644000175000017500000003661413237017633014163 0ustar00piccapicca00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell command './configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the 'README' file for instructions specific to this package. Some packages provide this 'INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a 'Makefile' in each directory of the package. It may also create one or more '.h' files containing system-dependent definitions. Finally, it creates a shell script 'config.status' that you can run in the future to recreate the current configuration, and a file 'config.log' containing compiler output (useful mainly for debugging 'configure'). It can also use an optional file (typically called 'config.cache' and enabled with '--cache-file=config.cache' or simply '-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how 'configure' could check whether to do them, and mail diffs or instructions to the address given in the 'README' so they can be considered for the next release. If you are using the cache, and at some point 'config.cache' contains results you don't want to keep, you may remove or edit it. The file 'configure.ac' (or 'configure.in') is used to create 'configure' by a program called 'autoconf'. You need 'configure.ac' if you want to change it or regenerate 'configure' using a newer version of 'autoconf'. The simplest way to compile this package is: 1. 'cd' to the directory containing the package's source code and type './configure' to configure the package for your system. Running 'configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type 'make' to compile the package. 3. Optionally, type 'make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type 'make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the 'make install' phase executed with root privileges. 5. Optionally, type 'make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior 'make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing 'make clean'. To also remove the files that 'configure' created (so you can compile the package for a different kind of computer), type 'make distclean'. There is also a 'make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type 'make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide 'make distcheck', which can by used by developers to test that all other targets like 'make install' and 'make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the 'configure' script does not know about. Run './configure --help' for details on some of the pertinent environment variables. You can give 'configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU 'make'. 'cd' to the directory where you want the object files and executables to go and run the 'configure' script. 'configure' automatically checks for the source code in the directory that 'configure' is in and in '..'. This is known as a "VPATH" build. With a non-GNU 'make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use 'make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple '-arch' options to the compiler but only a single '-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the 'lipo' tool if you have problems. Installation Names ================== By default, 'make install' installs the package's commands under '/usr/local/bin', include files under '/usr/local/include', etc. You can specify an installation prefix other than '/usr/local' by giving 'configure' the option '--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option '--exec-prefix=PREFIX' to 'configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like '--bindir=DIR' to specify different values for particular kinds of files. Run 'configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of '${prefix}', so that specifying just '--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to 'configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the 'make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, 'make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of '${prefix}'. Any directories that were specified during 'configure', but not in terms of '${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the 'DESTDIR' variable. For example, 'make install DESTDIR=/alternate/directory' will prepend '/alternate/directory' before all installation names. The approach of 'DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of '${prefix}' at 'configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving 'configure' the option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. Some packages pay attention to '--enable-FEATURE' options to 'configure', where FEATURE indicates an optional part of the package. They may also pay attention to '--with-PACKAGE' options, where PACKAGE is something like 'gnu-as' or 'x' (for the X Window System). The 'README' should mention any '--enable-' and '--with-' options that the package recognizes. For packages that use the X Window System, 'configure' can usually find the X include and library files automatically, but if it doesn't, you can use the 'configure' options '--x-includes=DIR' and '--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of 'make' will be. For these packages, running './configure --enable-silent-rules' sets the default to minimal output, which can be overridden with 'make V=1'; while running './configure --disable-silent-rules' sets the default to verbose, which can be overridden with 'make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX 'make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as 'configure' are involved. Use GNU 'make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its '' header file. The option '-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put '/usr/ucb' early in your 'PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in '/usr/bin'. So, if you need '/usr/ucb' in your 'PATH', put it _after_ '/usr/bin'. On Haiku, software installed for all users goes in '/boot/common', not '/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features 'configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, 'configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the '--build=TYPE' option. TYPE can either be a short name for the system type, such as 'sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file 'config.sub' for the possible values of each field. If 'config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option '--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with '--host=TYPE'. Sharing Defaults ================ If you want to set default values for 'configure' scripts to share, you can create a site shell script called 'config.site' that gives default values for variables like 'CC', 'cache_file', and 'prefix'. 'configure' looks for 'PREFIX/share/config.site' if it exists, then 'PREFIX/etc/config.site' if it exists. Or, you can set the 'CONFIG_SITE' environment variable to the location of the site script. A warning: not all 'configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to 'configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the 'configure' command line, using 'VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified 'gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash 'configure' Invocation ====================== 'configure' recognizes the following options to control how it operates. '--help' '-h' Print a summary of all of the options to 'configure', and exit. '--help=short' '--help=recursive' Print a summary of the options unique to this package's 'configure', and exit. The 'short' variant lists options used only in the top level, while the 'recursive' variant lists options also present in any nested packages. '--version' '-V' Print the version of Autoconf used to generate the 'configure' script, and exit. '--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally 'config.cache'. FILE defaults to '/dev/null' to disable caching. '--config-cache' '-C' Alias for '--cache-file=config.cache'. '--quiet' '--silent' '-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to '/dev/null' (any error messages will still be shown). '--srcdir=DIR' Look for the package's source code in directory DIR. Usually 'configure' can determine that directory automatically. '--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. '--no-create' '-n' Run the configure checks, but stop before creating any output files. 'configure' also accepts some other, not widely useful, options. Run 'configure --help' for more details. hkl-5.0.0.2449/data/0000755000175000017500000000000013237020540014020 5ustar00piccapicca00000000000000hkl-5.0.0.2449/data/Makefile.am0000644000175000017500000000015112710332473016057 0ustar00piccapicca00000000000000EXTRA_DIST=diffabs.dae diffabs.yaml hkl3ddir = $(pkgdatadir)/hkl3d hkl3d_DATA = diffabs.dae diffabs.yamlhkl-5.0.0.2449/data/diffabs.dae0000644000175000017500000572053312710332473016116 0ustar00piccapicca00000000000000 Illusoft Collada 1.4.0 plugin for Blender - http://colladablender.illusoft.com Blender v:249 - Illusoft Collada Exporter v:0.3.162 file:///home/picca/Diffractometers/Diffabs/test.blend 2010-08-23T17:37:20.704353 2010-08-23T17:37:20.704396 Z_UP 49.13434 0.1 100.0 0.00000 0.00000 0.00000 1 0.50000 0.50000 0.02401 1 1.00000 1.00000 0.04802 1 0.50000 0.50000 0.50000 1 12.5 1.00000 1.00000 1.00000 1 0.0 1 1 1 1 0.0 0.00000 0.00000 0.00000 1 0.00000 0.50000 0.00000 1 0.00000 1.00000 0.00000 1 0.50000 0.50000 0.50000 1 12.5 1.00000 1.00000 1.00000 1 0.0 1 1 1 1 0.0 0.00000 0.00000 0.00000 1 0.49094 0.16324 0.00000 1 0.98189 0.32649 0.00000 1 0.50000 0.50000 0.50000 1 12.5 1.00000 1.00000 1.00000 1 0.0 1 1 1 1 0.0 0.00000 0.00000 0.00000 1 0.13870 0.30519 0.42096 1 0.27740 0.61038 0.84193 1 0.50000 0.50000 0.50000 1 12.5 1.00000 1.00000 1.00000 1 0.0 1 1 1 1 0.0 0.00000 0.00000 0.00000 1 0.46232 0.15131 0.42289 1 0.92463 0.30262 0.84578 1 0.50000 0.50000 0.50000 1 12.5 1.00000 1.00000 1.00000 1 0.0 1 1 1 1 0.0 0.00000 0.00000 0.00000 1 0.00000 0.22623 0.50000 1 0.00000 0.45247 1.00000 1 0.50000 0.50000 0.50000 1 12.5 1.00000 1.00000 1.00000 1 0.0 1 1 1 1 0.0 0.00000 0.00000 0.00000 1 0.50000 0.48837 0.40500 1 1.00000 0.97675 0.81000 1 0.50000 0.50000 0.50000 1 12.5 1.00000 1.00000 1.00000 1 0.0 1 1 1 1 0.0 1.00000 1.00000 1.00000 1.0 0.0 0.0 -0.12774 -0.01927 -0.43605 -0.12774 -0.01927 -0.42805 -0.12211 0.04514 -0.43605 -0.12306 -0.03833 -0.43605 -0.12306 -0.03833 -0.42805 -0.12211 0.04514 -0.42805 -0.08354 0.05276 -0.42805 -0.11555 -0.05647 -0.43605 -0.11555 -0.05647 -0.42805 -0.11185 0.06728 -0.43605 -0.11185 0.06728 -0.42805 -0.09126 0.03703 -0.42805 -0.10539 -0.07326 -0.43605 -0.10539 -0.07326 -0.42805 -0.10211 -0.00693 -0.43980 -0.10211 -0.00693 -0.43605 -0.10211 0.01094 -0.43980 -0.10211 0.01094 -0.43605 -0.09901 -0.02453 -0.43980 -0.09901 0.02853 -0.43605 -0.09280 -0.08832 -0.43605 -0.09901 0.02853 -0.43980 -0.09901 -0.02453 -0.43605 -0.09775 0.00273 -0.43305 -0.09775 0.00273 -0.42805 -0.09631 -0.01473 -0.43305 -0.09631 -0.01473 -0.42805 -0.09605 0.02018 -0.43305 -0.09605 0.02018 -0.42805 -0.09126 0.03703 -0.43305 -0.07313 0.06687 -0.42805 -0.09290 -0.04132 -0.43980 -0.09290 -0.04132 -0.43605 -0.09290 0.04532 -0.43980 -0.09290 0.04532 -0.43605 -0.09280 -0.08832 -0.42805 -0.09177 -0.03166 -0.43305 -0.09177 -0.03166 -0.42805 -0.08452 -0.02064 -0.43305 -0.08986 0.10940 -0.43605 -0.08986 0.10940 -0.42805 -0.08724 -0.00473 -0.43980 -0.08724 -0.00473 -0.43305 -0.08699 0.01142 -0.43980 -0.08699 0.01142 -0.43305 -0.08452 -0.02064 -0.43980 -0.08080 0.07560 -0.42805 -0.08429 -0.04750 -0.43305 -0.08429 -0.04750 -0.42805 -0.08396 -0.05679 -0.43980 -0.08396 -0.05679 -0.43605 -0.08396 0.06079 -0.43980 -0.08396 0.06079 -0.43605 -0.08378 0.02724 -0.43980 -0.08378 0.02724 -0.43305 -0.08354 0.05276 -0.43305 -0.08080 0.07560 -0.43605 -0.07892 -0.03579 -0.43980 -0.07892 -0.03579 -0.43305 -0.07809 -0.10130 -0.43605 -0.07809 -0.10130 -0.42805 -0.07772 0.04221 -0.43980 -0.07772 0.04221 -0.43305 -0.07409 -0.06176 -0.43305 -0.07409 -0.06176 -0.42805 -0.07313 0.06687 -0.43305 -0.07248 0.07448 -0.43980 -0.07248 -0.07048 -0.43980 -0.07248 -0.07048 -0.43605 -0.07248 0.07448 -0.43605 -0.07063 -0.04965 -0.43980 -0.07063 -0.04965 -0.43305 -0.06901 0.05580 -0.43980 -0.06901 0.05580 -0.43305 -0.06037 0.07888 -0.43305 -0.06158 -0.11192 -0.43605 -0.06158 -0.11192 -0.42805 -0.06152 -0.07396 -0.43305 -0.06152 -0.07396 -0.42805 -0.04366 -0.11992 -0.43605 -0.06037 0.07888 -0.42805 -0.05994 -0.06175 -0.43980 -0.05994 -0.06175 -0.43305 -0.05879 -0.08196 -0.43980 -0.05879 -0.08196 -0.43605 -0.05879 0.08597 -0.43980 -0.05879 0.08597 -0.43605 -0.05795 0.06757 -0.43980 -0.05795 0.06757 -0.43305 -0.04366 -0.11992 -0.42805 -0.04720 -0.07167 -0.43980 -0.04720 -0.07167 -0.43305 -0.04696 -0.08373 -0.43305 -0.04696 -0.08373 -0.42805 -0.04568 0.08842 -0.43305 -0.04568 0.08842 -0.42805 -0.04491 0.07710 -0.43980 -0.04491 0.07710 -0.43305 -0.04332 -0.09089 -0.43980 -0.04332 -0.09089 -0.43605 -0.04332 0.09490 -0.43980 -0.04332 0.09490 -0.43605 -0.02473 -0.12511 -0.42805 -0.03287 0.12468 -0.43605 -0.03287 0.12468 -0.42805 -0.03286 -0.07909 -0.43980 -0.03286 -0.07909 -0.43305 -0.02653 0.10101 -0.43980 -0.03090 -0.09073 -0.43305 -0.03090 -0.09073 -0.42805 -0.02951 0.09519 -0.43305 -0.03035 0.08407 -0.43980 -0.03035 0.08407 -0.43305 -0.02951 0.09519 -0.42805 -0.02668 -0.09695 -0.43980 -0.02653 -0.09700 -0.43605 -0.02653 0.10101 -0.43605 -0.02473 -0.12511 -0.43605 -0.01740 -0.08375 -0.43980 -0.01740 -0.08375 -0.43305 -0.01475 0.08825 -0.43980 -0.01475 0.08825 -0.43305 -0.01384 -0.09476 -0.43305 -0.01384 -0.09476 -0.42805 -0.01240 0.09896 -0.43305 -0.01240 0.09896 -0.42805 -0.00893 -0.10011 -0.43980 -0.00893 -0.10011 -0.43605 -0.00893 0.10411 -0.43980 -0.00893 0.10411 -0.43605 -0.00524 -0.12739 -0.43605 -0.00524 -0.12739 -0.42805 -0.00135 -0.08549 -0.43980 -0.00135 -0.08549 -0.43305 0.00135 0.08949 -0.43980 0.00135 0.08949 -0.43305 0.00366 -0.09568 -0.43305 0.00366 -0.09568 -0.42805 0.00512 0.09962 -0.43305 0.00512 0.09962 -0.42805 0.00893 -0.10011 -0.43980 0.00893 -0.10011 -0.43605 0.00893 0.10411 -0.43980 0.00893 0.10411 -0.43605 0.01437 -0.12670 -0.43605 0.01437 -0.12670 -0.42805 0.01475 -0.08424 -0.43980 0.01475 -0.08424 -0.43305 0.02246 0.09714 -0.43305 0.01740 0.08776 -0.43980 0.01740 0.08776 -0.43305 0.02104 -0.09346 -0.43305 0.02104 -0.09346 -0.42805 0.02653 -0.09700 -0.43980 0.02246 0.09714 -0.42805 0.02412 0.13995 -0.43605 0.02412 0.13995 -0.42805 0.02653 -0.09700 -0.43605 0.02653 0.10101 -0.43980 0.02653 0.10101 -0.43605 0.02655 -0.09709 -0.43605 0.03035 -0.08007 -0.43980 0.03035 -0.08007 -0.43305 0.03286 0.08310 -0.43305 0.03286 0.08310 -0.43980 0.03359 -0.12306 -0.43605 0.03359 -0.12306 -0.42805 0.03909 0.09160 -0.42805 0.03525 0.09841 -0.43605 0.03525 0.09841 -0.42805 0.03774 -0.08817 -0.43305 0.03774 -0.08817 -0.42805 0.03909 0.09160 -0.43305 0.04332 0.09490 -0.43605 0.04332 -0.09089 -0.43980 0.04332 -0.09089 -0.43605 0.04332 0.09490 -0.43980 0.04491 -0.07309 -0.43980 0.04491 -0.07309 -0.43305 0.04720 0.07568 -0.43980 0.04720 0.07568 -0.43305 0.05217 -0.11652 -0.43605 0.05217 -0.11652 -0.42805 0.05324 -0.07998 -0.43305 0.05324 -0.07998 -0.42805 0.05879 -0.08196 -0.43980 0.05446 0.08318 -0.43305 0.05446 0.08318 -0.42805 0.05994 0.06575 -0.43980 0.05994 0.06575 -0.43305 0.05795 -0.06356 -0.43980 0.05795 -0.06356 -0.43305 0.05879 -0.08196 -0.43605 0.05879 0.08597 -0.43980 0.05879 0.08597 -0.43605 0.06808 0.07215 -0.42805 0.06702 -0.06915 -0.43305 0.07248 0.07448 -0.43605 0.06901 -0.05180 -0.43305 0.06702 -0.06915 -0.42805 0.07346 0.10865 -0.42805 0.06808 0.07215 -0.43305 0.06812 0.07210 -0.43305 0.06901 -0.05180 -0.43980 0.06948 -0.10728 -0.43605 0.06948 -0.10728 -0.42805 0.07346 0.10865 -0.43605 0.07063 0.05365 -0.43980 0.07063 0.05365 -0.43305 0.07236 0.07458 -0.43980 0.07258 -0.07035 -0.43980 0.07248 -0.07048 -0.43605 0.07951 0.05887 -0.43305 0.07772 -0.03820 -0.43980 0.07772 -0.03820 -0.43305 0.07865 -0.05604 -0.43305 0.07865 -0.05604 -0.42805 0.07892 0.03979 -0.43980 0.07892 0.03979 -0.43305 0.07951 0.05887 -0.42805 0.08452 0.02465 -0.43980 0.08452 0.02465 -0.43305 0.08520 -0.09552 -0.43605 0.08520 -0.09552 -0.42805 0.08396 -0.05679 -0.43605 0.08378 -0.02324 -0.43980 0.08378 -0.02324 -0.43305 0.08396 -0.05679 -0.43980 0.08396 0.06079 -0.43980 0.08396 0.06079 -0.43605 0.08699 -0.00741 -0.43980 0.08699 -0.00741 -0.43305 0.08724 0.00873 -0.43980 0.08724 0.00873 -0.43305 0.08775 -0.04107 -0.43305 0.08775 -0.04107 -0.42805 0.08838 0.04375 -0.43305 0.08838 0.04375 -0.42805 0.08873 0.09632 -0.43605 0.08873 0.09632 -0.42805 0.09442 0.02730 -0.43305 0.09290 -0.04132 -0.43980 0.09290 -0.04132 -0.43605 0.09290 0.04532 -0.43980 0.09290 0.04532 -0.43605 0.09403 -0.02471 -0.43305 0.09403 -0.02471 -0.42805 0.09442 0.02730 -0.42805 0.09729 -0.00749 -0.43305 0.10197 0.08183 -0.43605 0.10197 0.08183 -0.42805 0.09901 0.02853 -0.43980 0.09729 -0.00749 -0.42805 0.09742 0.01004 -0.43305 0.09742 0.01004 -0.42805 0.09895 -0.02468 -0.43980 0.09896 -0.08153 -0.43605 0.09896 -0.08153 -0.42805 0.09901 -0.02453 -0.43605 0.09901 0.02853 -0.43605 0.09910 0.02856 -0.43605 0.10211 -0.00693 -0.43605 0.10211 -0.00693 -0.43980 0.10211 0.01094 -0.43980 0.10211 0.01094 -0.43605 0.11044 -0.06562 -0.43605 0.11044 -0.06562 -0.42805 0.11286 0.06550 -0.43605 0.11286 0.06550 -0.42805 0.11939 -0.04815 -0.42805 0.11939 -0.04815 -0.43605 0.12116 0.04772 -0.43605 0.12116 0.04772 -0.42805 0.12668 0.02889 -0.43605 0.12668 0.02889 -0.42805 0.12560 -0.02953 -0.43605 0.12560 -0.02953 -0.42805 0.12892 -0.01019 -0.43605 0.12892 -0.01019 -0.42805 0.12929 0.00943 -0.43605 0.12929 0.00943 -0.42805 -0.03173 0.11463 -0.32905 -0.03173 0.11463 -0.29705 -0.02862 0.10304 -0.32905 -0.02862 0.10304 -0.29705 -0.02466 0.12688 -0.32905 -0.02466 0.12688 -0.29705 0.00432 0.13464 -0.29705 0.01967 0.11598 -0.32905 0.00432 0.13464 -0.32905 0.01657 0.12757 -0.32905 0.01657 0.12757 -0.29705 0.01967 0.11598 -0.29705 -0.12366 0.05491 -0.31205 -0.12366 0.05491 -0.29705 -0.11678 0.06873 -0.31205 -0.11678 0.06873 -0.29705 -0.10837 0.08167 -0.31205 -0.10837 0.08167 -0.29705 -0.08064 -0.10565 -0.31205 -0.08064 -0.10565 -0.29705 -0.06777 -0.11417 -0.29705 -0.06777 -0.11417 -0.31205 -0.05401 -0.12117 -0.31205 -0.05401 -0.12117 -0.29705 0.05401 0.12518 -0.31205 0.05401 0.12518 -0.29705 0.06795 0.11808 -0.31205 0.06795 0.11808 -0.29705 0.08096 0.10941 -0.31205 0.08096 0.10941 -0.29705 0.10837 -0.07766 -0.31205 0.10837 -0.07766 -0.29705 0.11688 -0.06455 -0.31205 0.11688 -0.06455 -0.29705 0.12382 -0.05053 -0.31205 0.12382 -0.05053 -0.29705 -0.12489 0.04308 -0.34105 -0.12489 0.04308 -0.32605 -0.11428 0.06145 -0.34105 -0.11428 0.06145 -0.32605 -0.08762 -0.09601 -0.34105 -0.08762 -0.09601 -0.32605 -0.06925 -0.10662 -0.34105 -0.06925 -0.10662 -0.32605 0.07408 0.11192 -0.34105 0.07408 0.11192 -0.32605 0.08632 0.10485 -0.34105 0.08632 0.10485 -0.32605 0.11911 -0.05615 -0.34105 0.11911 -0.05615 -0.32605 0.12618 -0.04390 -0.34105 0.12618 -0.04390 -0.32605 -0.13554 0.00554 -0.34105 -0.13554 0.00554 -0.30905 -0.12846 0.01779 -0.34105 -0.12846 0.01779 -0.30905 -0.12777 -0.02343 -0.34105 -0.12777 -0.02343 -0.30905 -0.11880 0.02038 -0.34105 -0.11880 0.02038 -0.30905 -0.11552 -0.03050 -0.34105 -0.11552 -0.03050 -0.30905 -0.10586 -0.02792 -0.34105 -0.10586 -0.02792 -0.30905 0.06732 0.10079 -0.29605 0.06732 0.10079 -0.26805 0.06739 0.10081 -0.26753 0.06758 0.10086 -0.26705 0.06789 0.10095 -0.26663 0.06829 0.10105 -0.29605 0.06829 0.10105 -0.26805 0.06829 0.10105 -0.26632 0.06832 0.10106 -0.26779 0.06842 0.10109 -0.26755 0.06857 0.10113 -0.26734 0.06876 0.10118 -0.26612 0.06877 0.10118 -0.26718 0.06901 0.10124 -0.26708 0.06926 0.10131 -0.26705 0.06926 0.10131 -0.26605 0.09221 0.10746 -0.26705 0.09221 0.10746 -0.26605 0.09864 -0.01608 -0.29605 0.09961 -0.01583 -0.29605 0.09864 -0.01608 -0.26805 0.09871 -0.01607 -0.26753 0.09890 -0.01601 -0.26705 0.09921 -0.01593 -0.26663 0.09961 -0.01583 -0.26805 0.09961 -0.01583 -0.26632 0.09964 -0.01582 -0.26779 0.09974 -0.01579 -0.26755 0.09989 -0.01575 -0.26734 0.10007 -0.01570 -0.26612 0.10009 -0.01570 -0.26718 0.10032 -0.01563 -0.26708 0.10057 -0.01557 -0.26705 0.10057 -0.01557 -0.26605 0.10134 0.09872 -0.26705 0.10134 0.09872 -0.26605 0.10965 0.08920 -0.26705 0.10965 0.08920 -0.26605 0.11706 0.07896 -0.26705 0.11706 0.07896 -0.26605 0.12352 0.06810 -0.26705 0.12352 0.06810 -0.26605 0.12898 0.05670 -0.26705 0.12898 0.05670 -0.26605 0.13992 -0.00502 -0.26705 0.13992 -0.00502 -0.26605 0.13339 0.04485 -0.26705 0.13339 0.04485 -0.26605 0.13671 0.03266 -0.26705 0.13671 0.03266 -0.26605 0.13891 0.02021 -0.26705 0.13891 0.02021 -0.26605 0.13998 0.00762 -0.26705 0.13998 0.00762 -0.26605 -0.11765 -0.00285 -0.46845 -0.11749 -0.00579 -0.46995 -0.11746 -0.00286 -0.46995 -0.11732 0.01207 -0.46995 -0.11721 0.00940 -0.46845 -0.11700 0.01530 -0.46845 -0.11680 0.01526 -0.46995 -0.11550 -0.02089 -0.46845 -0.11534 -0.02086 -0.46995 -0.11496 -0.02347 -0.46995 -0.11445 0.02970 -0.46995 -0.11356 0.03313 -0.46845 -0.11336 0.03306 -0.46995 -0.11061 -0.03838 -0.46845 -0.11046 -0.03833 -0.46995 -0.11001 -0.00529 -0.47745 -0.10985 0.01143 -0.47745 -0.10978 -0.04057 -0.46995 -0.10894 0.04670 -0.46995 -0.10764 -0.02185 -0.47745 -0.10742 0.05022 -0.46845 -0.10722 0.05012 -0.46995 -0.10716 0.02794 -0.47745 -0.10629 0.05230 -0.46845 -0.10308 -0.05491 -0.46845 -0.10296 -0.05485 -0.46995 -0.10279 -0.03786 -0.47745 -0.10200 0.04385 -0.47745 -0.10208 -0.05669 -0.46995 -0.10092 0.06266 -0.46995 -0.09873 0.06617 -0.46845 -0.09853 0.06603 -0.46995 -0.09782 -0.04825 -0.47745 -0.09777 -0.06299 -0.46845 -0.09688 0.06859 -0.46845 -0.09558 -0.05295 -0.47745 -0.09311 -0.07008 -0.46845 -0.09301 -0.07002 -0.46995 -0.09203 -0.07145 -0.46995 -0.08376 0.07372 -0.47745 -0.08617 -0.06677 -0.47745 -0.08091 -0.08354 -0.46845 -0.08084 -0.08347 -0.46995 -0.07986 -0.08453 -0.46995 -0.07477 -0.07902 -0.47745 -0.06976 0.07586 -0.46845 -0.06684 -0.09493 -0.46845 -0.06680 -0.09497 -0.46845 -0.06674 -0.09491 -0.46995 -0.06585 -0.09561 -0.46995 -0.06166 -0.08939 -0.47745 -0.05109 -0.10409 -0.46845 -0.05106 -0.10403 -0.46995 -0.05046 -0.10433 -0.46845 -0.05033 -0.10445 -0.46995 -0.04863 -0.09690 -0.47745 -0.03417 -0.11068 -0.46845 -0.03415 -0.11064 -0.46995 -0.03365 -0.11084 -0.46995 -0.03150 -0.10365 -0.47745 -0.01643 -0.11460 -0.46845 -0.01643 -0.11458 -0.46995 -0.01619 -0.11463 -0.46995 -0.01516 -0.10720 -0.47745 -0.00740 -0.11516 -0.46845 0.00153 -0.10824 -0.47745 0.00164 -0.11574 -0.46995 0.00170 -0.11573 -0.46995 0.00170 -0.11574 -0.46845 0.01819 -0.10674 -0.47745 0.01943 -0.11413 -0.46995 0.01977 -0.11405 -0.46995 0.01978 -0.11407 -0.46845 0.03402 0.09912 -0.46845 0.03443 -0.10273 -0.47745 0.03677 -0.10986 -0.46995 0.03738 -0.10961 -0.46995 0.03740 -0.10965 -0.46845 0.04298 -0.10729 -0.46845 0.04505 0.10317 -0.47745 0.04988 -0.09632 -0.47745 0.05327 -0.10301 -0.46995 0.05409 -0.10251 -0.46995 0.05412 -0.10257 -0.46845 0.05671 0.10520 -0.46995 0.05671 0.10520 -0.46845 0.06117 0.10262 -0.46995 0.06418 -0.08764 -0.47745 0.06696 0.09848 -0.46845 0.06839 0.08824 -0.47745 0.06854 -0.09374 -0.46995 0.06950 -0.09294 -0.46995 0.06956 -0.09301 -0.46845 0.07087 0.08646 -0.47745 0.07175 0.09503 -0.46995 0.07190 0.09525 -0.46845 0.07550 -0.08791 -0.46845 0.07569 0.09221 -0.46995 0.07840 -0.07532 -0.47745 0.08224 -0.08227 -0.46995 0.08283 0.07477 -0.47745 0.08326 -0.08111 -0.46995 0.08334 -0.08118 -0.46845 0.08397 0.08436 -0.46845 0.08521 0.08290 -0.46995 0.08539 0.08308 -0.46845 0.08805 -0.06435 -0.47745 0.08846 0.07972 -0.46995 0.09288 0.06140 -0.47745 0.09404 -0.06886 -0.46995 0.09504 -0.06730 -0.46995 0.09514 -0.06737 -0.46845 0.09664 0.06884 -0.46995 0.09666 -0.06491 -0.46845 0.09684 0.06899 -0.46845 0.09707 -0.05027 -0.47745 0.09797 0.06705 -0.46845 0.09920 0.06544 -0.46995 0.10080 0.04667 -0.47745 0.10386 -0.03498 -0.47745 0.10367 -0.05382 -0.46995 0.10455 -0.05186 -0.46995 0.10468 -0.05192 -0.46845 0.10578 0.05319 -0.46995 0.10599 0.05330 -0.46845 0.10626 -0.04817 -0.46845 0.10629 0.03257 -0.47710 0.10737 0.02944 -0.47688 0.10765 0.04971 -0.46995 0.10826 -0.01885 -0.47745 0.10954 0.01448 -0.47745 0.11017 -0.00223 -0.47745 0.11093 -0.03750 -0.46995 0.11157 -0.03514 -0.46995 0.11173 -0.03518 -0.46845 0.11241 0.03631 -0.46995 0.11262 0.03639 -0.46845 0.11363 0.03288 -0.46995 0.11378 -0.02691 -0.46845 0.11562 -0.02027 -0.46995 0.11594 -0.01753 -0.46995 0.11611 -0.01755 -0.46845 0.11636 0.01862 -0.46995 0.11657 0.01866 -0.46845 0.11699 0.01533 -0.46995 0.11721 -0.00539 -0.46845 0.11755 0.00053 -0.46995 0.11766 -0.00252 -0.46995 0.11774 0.00054 -0.46845 -0.12774 -0.01927 -0.45855 -0.12774 -0.01927 -0.43605 -0.12746 -0.01603 -0.45925 -0.12696 -0.01033 -0.46049 -0.12618 -0.00139 -0.46183 -0.12570 0.00409 -0.46226 -0.12539 0.00757 -0.46253 -0.12475 -0.03142 -0.43605 -0.12461 0.01656 -0.46259 -0.12442 0.01869 -0.46251 -0.12398 0.02376 -0.46209 -0.12382 -0.03594 -0.45855 -0.12362 0.02787 -0.46175 -0.12304 -0.03838 -0.43605 -0.12281 0.03712 -0.46032 -0.12221 0.04396 -0.45881 -0.12211 0.04514 -0.45855 -0.12211 0.04514 -0.43605 -0.11958 0.00399 -0.46845 -0.11750 0.05645 -0.43605 -0.11881 -0.00853 -0.46845 -0.11842 -0.01473 -0.46845 -0.11780 0.02267 -0.46845 -0.11720 0.05632 -0.45855 -0.11636 -0.05484 -0.45855 -0.11573 0.03071 -0.46845 -0.11550 -0.05656 -0.43605 -0.11491 0.03387 -0.46845 -0.11440 0.06268 -0.45855 -0.11435 -0.03304 -0.46845 -0.11312 0.04083 -0.46845 -0.11185 0.06728 -0.45855 -0.11185 0.06728 -0.43605 -0.11119 0.04528 -0.46845 -0.10746 -0.05049 -0.46845 -0.10566 0.05804 -0.46845 -0.10604 -0.07233 -0.45855 0.01299 -0.01567 -0.43605 -0.10530 -0.07338 -0.43605 -0.10163 0.07002 -0.46576 -0.09793 -0.06665 -0.46845 -0.09763 0.07109 -0.46845 -0.09311 -0.08800 -0.45855 -0.09266 -0.08846 -0.43605 -0.08599 -0.08112 -0.46845 -0.07789 -0.10146 -0.43605 -0.01974 0.08834 -0.43605 -0.07789 -0.10145 -0.45855 -0.07789 -0.10146 -0.45855 -0.07194 -0.09354 -0.46845 -0.06131 -0.11206 -0.43605 -0.06129 -0.11202 -0.45855 -0.05611 -0.10362 -0.46845 -0.04580 -0.11894 -0.43605 -0.04213 -0.12045 -0.45855 -0.03891 -0.11109 -0.46845 -0.03213 -0.12307 -0.43605 -0.02074 -0.11578 -0.46845 -0.02433 -0.12519 -0.43605 -0.02246 -0.12553 -0.45855 -0.00478 -0.12741 -0.43605 -0.00224 -0.12748 -0.45855 -0.00207 -0.11758 -0.46845 0.01666 -0.11643 -0.46845 0.01804 -0.12624 -0.45855 0.01488 -0.12664 -0.43605 0.03350 -0.12303 -0.43605 0.03787 -0.12184 -0.45855 0.03497 -0.11237 -0.46845 0.05242 -0.10549 -0.46845 0.05677 -0.11439 -0.45855 0.05273 -0.11628 -0.43605 0.05927 0.10588 -0.46845 0.07237 0.10939 -0.45855 0.06859 -0.09597 -0.46845 0.07427 -0.10408 -0.45855 0.07004 -0.10692 -0.43605 0.07206 0.09745 -0.46845 0.07237 0.10939 -0.43605 0.07673 -0.08927 -0.46845 0.07800 0.10494 -0.43605 0.07803 0.10536 -0.45855 0.08531 -0.08151 -0.46845 0.08625 0.08483 -0.46845 0.09135 -0.08927 -0.43605 0.09323 0.09188 -0.45855 0.08781 0.09719 -0.43605 0.08994 -0.09117 -0.45855 0.09550 -0.07000 -0.46845 0.10121 0.08279 -0.43605 0.09802 0.07053 -0.46845 0.09945 -0.08095 -0.43605 0.10614 0.07620 -0.45855 0.10340 -0.07596 -0.45855 0.10558 -0.05418 -0.46845 0.10753 0.05436 -0.46845 0.11307 -0.03698 -0.46845 0.11444 -0.05783 -0.43605 0.11643 0.05869 -0.45855 0.11228 0.06652 -0.43605 0.11432 -0.05883 -0.45855 0.11440 0.03690 -0.46845 0.11777 -0.01882 -0.46845 0.11845 0.01858 -0.46845 0.11958 -0.00014 -0.46845 0.12164 -0.04149 -0.43605 0.12386 0.03979 -0.45855 0.12076 0.04876 -0.43605 0.12243 -0.04020 -0.45855 0.12479 0.03544 -0.43605 0.12582 -0.02864 -0.43605 0.12825 0.01995 -0.45855 0.12752 -0.02054 -0.45855 0.12948 -0.00032 -0.45855 0.12901 -0.00923 -0.43605 0.12922 0.01045 -0.43605 0.03419 0.17578 -0.48185 0.03419 0.17578 -0.44314 0.03471 0.17385 -0.48385 0.03846 0.15984 -0.42930 0.03902 0.17708 -0.48185 0.03902 0.17708 -0.44314 0.04147 0.17566 -0.48385 0.04269 0.17496 -0.48385 0.04269 0.17496 -0.44063 0.04618 0.16192 -0.42930 0.05228 0.10826 -0.48385 0.05228 0.10826 -0.42930 0.05280 0.10633 -0.48185 0.05280 0.10633 -0.43130 0.06001 0.11033 -0.48385 0.06001 0.11033 -0.42930 0.06052 0.10840 -0.48185 0.06052 0.10840 -0.43130 -0.14680 0.04766 -0.49895 -0.14680 0.04766 -0.43395 -0.14159 0.10728 -0.49895 -0.14159 0.10728 -0.43395 -0.13485 0.04662 -0.46395 -0.13485 0.04662 -0.48745 -0.12339 0.04562 -0.46395 -0.12339 0.04562 -0.43395 -0.12272 0.04556 -0.46912 -0.12072 0.04538 -0.47395 -0.11756 0.04510 -0.47809 -0.11096 0.13792 -0.49895 -0.11343 0.04474 -0.48127 -0.11096 0.13792 -0.43395 -0.10863 0.04432 -0.48327 -0.10347 0.04387 -0.48395 -0.09700 0.04331 -0.49895 -0.09700 0.04331 -0.48395 -0.07478 0.04926 -0.48895 -0.07478 0.04926 -0.48395 0.03142 0.17451 -0.43395 0.03103 0.17596 -0.43395 0.03103 0.17596 -0.49895 0.03142 0.17451 -0.48395 0.04113 0.08032 -0.48895 0.04113 0.08032 -0.48395 0.05562 0.08420 -0.49895 0.05562 0.08420 -0.48395 0.06797 0.12448 -0.34105 0.06797 0.12448 -0.29605 0.06984 0.10147 -0.26805 0.06984 0.10147 -0.29505 0.07996 0.11702 -0.34105 0.07996 0.11702 -0.29605 0.09113 0.10839 -0.34105 0.09113 0.10839 -0.29605 0.09225 0.10747 -0.29505 0.09225 0.10747 -0.26805 0.09285 0.10689 -0.29605 0.09285 0.10689 -0.29505 0.09225 0.10747 -0.26805 0.10115 -0.01541 -0.26805 0.10115 -0.01541 -0.29605 0.10138 0.09868 -0.34105 0.10138 0.09868 -0.26805 0.10408 -0.01463 -0.29605 0.10408 -0.01463 -0.28005 0.10438 -0.01455 -0.27772 0.10525 -0.01431 -0.27555 0.10663 -0.01394 -0.27368 0.10843 -0.01346 -0.27225 0.11052 -0.01290 -0.27136 0.11060 0.08798 -0.34105 0.11060 0.08798 -0.26805 0.11277 -0.01230 -0.27105 0.11502 -0.01169 -0.27136 0.11712 -0.01113 -0.27225 0.11870 0.07642 -0.34105 0.11870 0.07642 -0.26805 0.11892 -0.01065 -0.27368 0.12030 -0.01028 -0.27555 0.12060 -0.01020 -0.34105 0.12060 -0.01020 -0.29605 0.12117 -0.01005 -0.27772 0.12147 -0.00997 -0.28905 0.12147 -0.00997 -0.28005 0.12559 0.06409 -0.34105 0.12559 0.06409 -0.26805 0.13120 0.05114 -0.34105 0.13120 0.05114 -0.26805 0.13245 -0.00702 -0.29605 0.13245 -0.00702 -0.28905 0.13326 -0.00681 -0.29595 0.13326 -0.00681 -0.28915 0.13402 -0.00660 -0.29565 0.13402 -0.00660 -0.28945 0.13469 -0.00642 -0.29517 0.13469 -0.00642 -0.28993 0.13523 -0.00628 -0.29454 0.13523 -0.00628 -0.29056 0.13548 0.03768 -0.34105 0.13548 0.03768 -0.26805 0.13561 -0.00618 -0.29379 0.13561 -0.00618 -0.29131 0.13581 -0.00613 -0.29297 0.13581 -0.00613 -0.29213 0.13995 -0.00521 -0.26805 0.13838 0.02387 -0.34105 0.13838 0.02387 -0.26805 0.13995 -0.00521 -0.34105 0.13988 0.00983 -0.34105 0.13988 0.00983 -0.26805 -0.01339 -0.11029 -0.33905 -0.01339 -0.11029 -0.33355 -0.00725 -0.13321 -0.33905 -0.00725 -0.13321 -0.33355 0.00504 -0.13331 -0.33905 0.00504 -0.13331 -0.33355 0.00931 -0.10421 -0.33905 0.01317 -0.10317 -0.33905 0.01486 -0.10272 -0.33905 0.01729 -0.13229 -0.33905 0.01729 -0.13229 -0.33355 0.02940 -0.13017 -0.33905 0.02940 -0.13017 -0.33355 0.04126 -0.12696 -0.33905 0.04126 -0.12696 -0.33355 0.04746 -0.09398 -0.33905 0.05279 -0.12268 -0.33905 0.05279 -0.12268 -0.33355 0.06388 -0.11738 -0.33905 0.06388 -0.11738 -0.33355 0.07444 -0.11110 -0.33905 0.07444 -0.11110 -0.33355 0.07644 -0.08622 -0.33905 0.08175 -0.08480 -0.33905 0.08440 -0.10389 -0.33905 0.08440 -0.10389 -0.33355 0.08489 -0.08396 -0.33905 0.09238 -0.08195 -0.33905 0.09365 -0.09580 -0.33905 0.09365 -0.09580 -0.33355 0.10214 -0.08691 -0.33905 0.10214 -0.08691 -0.33355 0.10978 -0.07728 -0.33905 0.10978 -0.07728 -0.33355 -0.01921 -0.10016 -0.27925 -0.01919 -0.10026 -0.28087 -0.01916 -0.10037 -0.27765 -0.01908 -0.10067 -0.28243 -0.01902 -0.10090 -0.27612 -0.01889 -0.10138 -0.28387 -0.01715 -0.10788 -0.27955 -0.01880 -0.10171 -0.27474 -0.01863 -0.10235 -0.28514 -0.01851 -0.10277 -0.27355 -0.01831 -0.10355 -0.28618 -0.01817 -0.10404 -0.27261 -0.01794 -0.10493 -0.28694 -0.01779 -0.10547 -0.27195 -0.01753 -0.10643 -0.28741 -0.01738 -0.10699 -0.27160 -0.01712 -0.10798 -0.28755 -0.01696 -0.10856 -0.27158 -0.01670 -0.10954 -0.28736 -0.01655 -0.11009 -0.27188 -0.01630 -0.11102 -0.28686 -0.01616 -0.11154 -0.27250 -0.01509 -0.11553 -0.28065 -0.01594 -0.11238 -0.28605 -0.01582 -0.11283 -0.27341 -0.01562 -0.11355 -0.28498 -0.01552 -0.11393 -0.27457 -0.01537 -0.11449 -0.28369 -0.01530 -0.11477 -0.27593 -0.01519 -0.11516 -0.28223 -0.01515 -0.11533 -0.27744 -0.01508 -0.11559 -0.27904 -0.01556 -0.09919 -0.27923 -0.01553 -0.09929 -0.28085 -0.01550 -0.09940 -0.27763 -0.01542 -0.09970 -0.28241 -0.01536 -0.09993 -0.27610 -0.01523 -0.10041 -0.28385 -0.01514 -0.10074 -0.27472 -0.01497 -0.10138 -0.28512 -0.01486 -0.10180 -0.27353 -0.01465 -0.10258 -0.28616 -0.01452 -0.10307 -0.27259 -0.01428 -0.10396 -0.28692 -0.01414 -0.10450 -0.27193 -0.01388 -0.10546 -0.28739 -0.01373 -0.10602 -0.27158 -0.01346 -0.10701 -0.28753 -0.01331 -0.10759 -0.27156 -0.01304 -0.10857 -0.28734 -0.01290 -0.10912 -0.27186 -0.01265 -0.11005 -0.28684 -0.01251 -0.11057 -0.27248 -0.01228 -0.11141 -0.28603 -0.01216 -0.11186 -0.27339 -0.01197 -0.11258 -0.28496 -0.01187 -0.11296 -0.27455 -0.01172 -0.11352 -0.28367 -0.01164 -0.11380 -0.27591 -0.01154 -0.11419 -0.28221 -0.01149 -0.11436 -0.27742 -0.01144 -0.11456 -0.28063 -0.01142 -0.11462 -0.27902 -0.01808 -0.09281 -0.29535 -0.01808 -0.09281 -0.26535 -0.00725 -0.13321 -0.26535 0.02050 -0.13184 -0.26534 0.04628 -0.12524 -0.26534 0.05856 -0.12008 -0.26534 0.07028 -0.11373 -0.26534 0.08132 -0.10627 -0.26534 0.09156 -0.09776 -0.26534 0.09783 -0.06175 -0.29535 0.10093 -0.08828 -0.26534 0.09783 -0.06174 -0.26527 0.10399 -0.08474 -0.26535 -0.01194 -0.11570 -0.29535 -0.01194 -0.11570 -0.33235 -0.00725 -0.13321 -0.33235 0.00724 -0.13321 -0.33235 0.00724 -0.13321 -0.26534 0.02050 -0.13184 -0.33235 0.03355 -0.12917 -0.33235 0.03355 -0.12917 -0.26534 0.04628 -0.12524 -0.33235 0.05856 -0.12008 -0.33235 0.07028 -0.11373 -0.33235 0.08132 -0.10627 -0.33235 0.09156 -0.09776 -0.33235 0.10093 -0.08828 -0.33235 0.10399 -0.08473 -0.29535 0.10932 -0.07793 -0.33235 0.10932 -0.07793 -0.29535 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.99988 -0.01542 0.00000 0.98003 -0.19885 0.00000 0.98003 -0.19885 0.00000 0.92680 -0.37555 0.00000 0.92680 -0.37555 0.00000 0.84200 -0.53947 0.00000 0.84200 -0.53947 0.00000 0.72857 -0.68497 0.00000 0.72857 -0.68497 0.00000 0.59027 -0.80721 0.00000 0.59027 -0.80721 0.00000 0.43189 -0.90193 0.00000 0.25882 -0.96592 0.00000 0.25882 -0.96592 0.00000 0.07692 -0.99704 0.00000 0.07692 -0.99704 0.00000 -0.10757 -0.99420 0.00000 -0.10757 -0.99420 -0.00000 -0.28849 -0.95748 0.00000 -0.28849 -0.95748 0.00000 -0.45946 -0.88820 0.00000 -0.45946 -0.88820 -0.00000 -0.61486 -0.78864 0.00000 -0.61486 -0.78864 0.00000 -0.74930 -0.66223 0.00000 -0.74930 -0.66223 -0.00000 -0.85821 -0.51330 0.00000 -0.85821 -0.51330 -0.00000 -0.93792 -0.34686 0.00000 -0.98569 -0.16857 0.00000 -0.98569 -0.16857 -0.00000 -0.99988 0.01542 0.00000 -0.99988 0.01542 0.00000 -0.98003 0.19887 0.00000 -0.98003 0.19887 0.00000 -0.92680 0.37555 0.00000 -0.92680 0.37555 0.00000 -0.84200 0.53947 0.00000 -0.84200 0.53947 0.00000 -0.72857 0.68497 0.00000 -0.72857 0.68497 0.00000 -0.59026 0.80721 0.00000 -0.59026 0.80721 0.00000 -0.43189 0.90193 0.00000 -0.25882 0.96592 0.00000 -0.25882 0.96592 0.00000 -0.07692 0.99704 0.00000 -0.07692 0.99704 0.00000 0.10757 0.99420 -0.00000 0.10757 0.99420 0.00000 0.28843 0.95750 -0.00000 0.28843 0.95750 0.00000 0.45946 0.88820 -0.00000 0.45946 0.88820 0.00000 0.61486 0.78864 -0.00000 0.61486 0.78864 0.00000 0.74930 0.66223 -0.00000 0.74930 0.66223 0.00000 0.85822 0.51328 -0.00000 0.85822 0.51328 0.00000 0.93792 0.34686 -0.00000 0.98569 0.16858 -0.00000 0.98569 0.16858 0.00000 0.99988 -0.01542 0.00000 0.96593 0.25881 0.00000 0.96593 0.25881 -0.00000 -0.25883 0.96592 0.00000 -0.25883 0.96592 0.00000 -0.25881 0.96593 0.00000 -0.25881 0.96593 0.00000 -0.96592 -0.25883 0.00000 -0.96592 -0.25883 0.00000 -0.25881 0.96593 0.00000 -0.25881 0.96593 0.00000 -0.90733 0.42041 0.00000 -0.90733 0.42041 0.00000 -0.99619 0.08715 0.00000 -0.99619 0.08715 0.00000 0.03536 -0.99937 0.00000 -0.97113 -0.23855 0.00000 -0.97113 -0.23855 0.00000 -0.92393 -0.38256 0.00000 -0.92393 -0.38256 -0.00000 -0.85549 -0.51783 0.00000 -0.85549 -0.51783 -0.00000 -0.76741 -0.64115 0.00000 -0.76741 -0.64115 -0.00000 -0.66174 -0.74973 0.00000 -0.66174 -0.74973 -0.00000 -0.54082 -0.84114 0.00000 -0.54082 -0.84114 -0.00000 -0.40753 -0.91319 0.00000 -0.40753 -0.91319 0.00000 -0.26479 -0.96431 0.00000 -0.26479 -0.96431 0.00000 -0.11607 -0.99324 0.00000 -0.11607 -0.99324 0.00000 0.03536 -0.99937 0.00000 0.18601 -0.98255 0.00000 0.18601 -0.98255 0.00000 0.33180 -0.94335 0.00000 0.33180 -0.94335 0.00000 0.47106 -0.88210 0.00000 0.47106 -0.88210 0.00000 0.59896 -0.80078 0.00000 0.59896 -0.80078 0.00000 0.71304 -0.70112 0.00000 0.71304 -0.70112 0.00000 0.81083 -0.58528 0.00000 0.81083 -0.58528 0.00000 0.88996 -0.45604 0.00000 0.88996 -0.45604 0.00000 0.94866 -0.31630 0.00000 0.94866 -0.31630 0.00000 0.98556 -0.16931 0.00000 0.98556 -0.16931 0.00000 0.99983 -0.01845 0.00000 0.99983 -0.01845 0.00000 0.99113 0.13288 -0.00000 0.99113 0.13288 0.00000 0.95967 0.28112 -0.00000 0.95967 0.28112 0.00000 0.90616 0.42294 -0.00000 0.90616 0.42294 0.00000 0.83186 0.55498 -0.00000 0.73841 0.67436 -0.00000 0.83186 0.55498 0.00000 0.73841 0.67436 0.00000 0.62806 0.77817 -0.00000 0.62806 0.77817 0.00000 -0.25882 0.96593 0.00000 -0.25882 0.96593 0.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.93883 -0.34439 -0.00000 -0.93883 -0.34439 0.00000 -0.86228 -0.50643 -0.00000 -0.86228 -0.50643 0.00000 -0.75797 -0.65229 -0.00000 -0.75797 -0.65229 -0.00001 -0.75727 -0.65310 0.00000 -0.62934 -0.77713 -0.00000 -0.62934 -0.77713 0.00000 -0.48041 -0.87705 -0.00000 -0.48041 -0.87705 0.00000 -0.31614 -0.94871 -0.00000 -0.31614 -0.94871 0.00000 0.03738 -0.99930 0.00000 -0.14163 -0.98992 0.00000 -0.14163 -0.98992 -0.00000 0.68562 -0.72796 0.00000 0.68562 -0.72796 0.00000 0.54463 -0.83868 0.00000 0.54463 -0.83868 0.00000 0.38613 -0.92244 0.00000 0.38613 -0.92244 0.00000 0.21524 -0.97656 0.00000 0.21524 -0.97656 0.00000 0.03738 -0.99930 0.00000 0.80463 -0.59378 0.00000 0.80463 -0.59378 0.00000 0.89770 -0.44061 0.00000 0.89770 -0.44061 0.00000 0.96194 -0.27327 0.00000 0.96194 -0.27327 0.00000 0.99528 -0.09706 0.00000 0.99528 -0.09706 0.00000 0.99662 0.08217 0.00000 0.99662 0.08217 -0.00000 0.96592 0.25884 0.00000 0.96592 0.25884 0.00000 0.90420 0.42711 0.00000 0.90420 0.42711 -0.00000 0.81339 0.58171 0.00000 0.81339 0.58171 0.00000 0.69644 0.71761 0.00000 0.69644 0.71761 -0.00000 0.55711 0.83044 0.00000 0.55711 0.83044 -0.00000 0.39990 0.91656 0.00000 0.39990 0.91656 -0.00000 0.22979 0.97324 0.00000 0.22979 0.97324 0.00000 0.05233 0.99863 0.00000 -0.12679 0.99193 0.00000 0.05233 0.99863 -0.00000 -0.30191 0.95334 0.00000 -0.12679 0.99193 0.00000 -0.46726 0.88412 0.00000 -0.30191 0.95334 0.00000 -0.61763 0.78647 0.00000 -0.61763 0.78647 0.00000 -0.46726 0.88412 0.00000 -0.93358 0.35837 0.00000 -0.85459 0.51930 0.00000 -0.85459 0.51930 0.00000 -0.74813 0.66355 0.00000 -0.74813 0.66355 0.00000 -0.98524 -0.17119 0.00000 -0.98524 -0.17119 0.00000 -0.99997 0.00748 0.00000 -0.99997 0.00748 0.00000 -0.98257 0.18591 0.00000 -0.98257 0.18591 0.00000 -0.93358 0.35837 0.00000 -0.50000 0.86602 0.00000 0.98480 0.17368 0.00000 0.98480 0.17368 0.00000 1.00000 -0.00000 0.00000 0.98453 -0.17519 0.00000 0.98478 -0.17366 -0.00746 0.93970 -0.34199 -0.00002 0.93971 -0.34198 0.00000 0.86601 -0.50003 0.00000 0.86601 -0.50003 0.00000 0.76606 -0.64277 0.00000 0.76604 -0.64280 0.00016 0.64281 -0.76599 -0.00730 0.49996 -0.86605 0.00000 0.49996 -0.86605 0.00000 0.34204 -0.93969 0.00000 0.34204 -0.93969 0.00000 0.17366 -0.98480 0.00000 0.17366 -0.98480 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.17518 -0.98454 -0.00000 -0.17366 -0.98478 -0.00741 -0.34204 -0.93969 0.00008 -0.34205 -0.93968 0.00000 -0.49996 -0.86605 -0.00000 -0.49996 -0.86605 0.00000 -0.64282 -0.76602 -0.00000 -0.64282 -0.76602 0.00000 -0.76604 -0.64280 -0.00000 -0.76604 -0.64280 0.00000 -0.86601 -0.50003 -0.00000 -0.93970 -0.34199 0.00000 -0.93970 -0.34199 0.00000 -0.86601 -0.50003 0.00000 -1.00000 0.00000 0.00000 -0.98480 -0.17367 0.00000 -0.98480 -0.17367 -0.00000 -0.98480 0.17368 0.00000 -0.98480 0.17368 0.00000 -1.00000 0.00000 0.00000 -0.93971 0.34197 0.00000 -0.93971 0.34197 0.00000 -0.86601 0.50003 0.00000 -0.86601 0.50003 0.00000 -0.76604 0.64280 0.00000 -0.76604 0.64280 0.00000 -0.64279 0.76604 0.00000 -0.64279 0.76604 0.00000 -0.50000 0.86602 0.00000 -0.34204 0.93969 0.00000 -0.34204 0.93969 0.00000 -0.17361 0.98481 0.00000 -0.17361 0.98481 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.17361 0.98481 0.00000 0.17361 0.98481 -0.00000 0.34204 0.93969 0.00000 0.34204 0.93969 -0.00000 0.50000 0.86602 0.00000 0.86601 0.50003 0.00000 0.64279 0.76604 -0.00004 0.64280 0.76604 0.00000 0.50000 0.86602 -0.00000 0.93971 0.34197 -0.00000 0.93971 0.34197 0.00000 0.86601 0.50003 -0.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.76553 0.64339 -0.00372 -0.00000 0.00000 -1.00000 1.00000 0.00000 -0.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.43189 -0.90193 0.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.93792 0.34686 0.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.43189 0.90193 0.00000 0.64399 -0.76504 0.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.93792 -0.34686 -0.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.96592 -0.25883 0.00000 -0.96592 -0.25883 -0.00000 -0.25880 0.96593 0.00000 -0.25880 0.96593 0.00000 0.96594 0.25876 0.00000 0.96594 0.25876 -0.00000 0.25882 -0.96593 0.00000 0.25882 -0.96593 0.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.86604 0.49998 0.00000 -0.86604 0.49998 0.00000 0.49998 0.86604 0.00000 0.49998 0.86604 -0.00000 -0.55259 -0.83345 0.00000 -0.55259 -0.83345 0.00000 -0.45350 -0.89126 -0.00000 -0.45350 -0.89126 0.00000 -0.83835 0.54512 0.00000 -0.83835 0.54512 0.00000 -0.89529 0.44547 0.00000 -0.89529 0.44548 0.00000 0.89629 -0.44348 0.00000 0.89629 -0.44348 0.00000 0.55450 0.83219 -0.00002 0.55451 0.83218 0.00000 0.45416 0.89092 -0.00000 0.45416 0.89092 0.00000 0.25882 -0.96593 0.00000 0.25882 -0.96593 0.00000 -0.25882 0.96593 0.00000 -0.25882 0.96593 0.00000 0.96592 0.25882 0.00000 -0.96593 -0.25882 0.00005 -0.96593 -0.25882 -0.00000 0.83880 -0.54445 0.00000 0.83880 -0.54445 0.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.99999 -0.00522 0.00000 0.99999 -0.00522 0.00000 0.99638 0.08497 -0.00000 0.99638 0.08497 0.00000 0.98465 0.17454 -0.00000 0.98465 0.17454 0.00000 0.96491 0.26259 -0.00000 0.96491 0.26259 0.00000 0.93730 0.34851 -0.00000 0.93730 0.34851 0.00000 0.90203 0.43167 -0.00000 0.90203 0.43167 0.00000 0.85944 0.51124 -0.00000 0.85944 0.51124 0.00000 0.80984 0.58665 -0.00000 0.80984 0.58665 0.00000 0.75357 0.65737 -0.00000 0.75357 0.65737 0.00000 0.69127 0.72260 -0.00000 0.69127 0.72260 0.00000 -0.25895 0.96589 0.00000 -0.25895 0.96589 0.00000 -0.25895 0.96589 -0.00058 -0.25895 0.96589 -0.00056 -0.25906 0.96586 -0.00097 -0.25905 0.96586 -0.00042 -0.25835 0.96605 0.00083 -0.25849 0.96601 0.00031 -0.25985 0.96565 -0.00110 -0.25885 0.96592 0.00063 -0.25764 0.96624 0.00135 -0.25905 0.96586 -0.00006 -0.25887 0.96591 -0.00001 -0.25885 0.96592 0.00000 -0.25881 0.96593 0.00000 -0.25881 0.96593 0.00000 -0.96593 -0.25882 -0.00000 -0.96593 -0.25882 0.00000 0.25881 -0.96593 0.00000 0.25881 -0.96593 0.00000 0.25908 -0.96586 0.00000 0.25896 -0.96589 0.00003 0.25728 -0.96634 -0.00043 0.25923 -0.96582 -0.00040 0.26043 -0.96549 0.00032 0.25856 -0.96599 -0.00023 0.25816 -0.96610 -0.00065 0.25859 -0.96599 -0.00038 0.25927 -0.96580 0.00084 0.25893 -0.96590 0.00048 0.25896 -0.96589 0.00058 0.25895 -0.96589 0.00057 0.25895 -0.96589 0.00000 0.25895 -0.96589 0.00000 0.96593 0.25882 0.00000 0.96593 0.25882 -0.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.95761 0.25659 -0.13091 0.95761 0.25659 -0.13091 0.89290 0.23925 -0.38143 0.89286 0.23924 -0.38153 0.76538 0.20508 -0.61003 0.76540 0.20509 -0.61000 0.58809 0.15758 -0.79329 0.58809 0.15758 -0.79329 0.37000 0.09914 -0.92372 0.37002 0.09915 -0.92372 0.12583 0.03372 -0.99148 0.12583 0.03371 -0.99148 -0.12577 -0.03370 0.99149 -0.12577 -0.03370 0.99149 -0.36990 -0.09911 0.92377 -0.36990 -0.09911 0.92377 -0.58833 -0.15764 0.79311 -0.58833 -0.15764 0.79311 -0.76625 -0.20532 0.60885 -0.76625 -0.20532 0.60885 -0.89225 -0.23908 0.38306 -0.89225 -0.23908 0.38306 -0.95761 -0.25659 0.13095 -0.95761 -0.25659 0.13095 0.67248 0.23882 -0.70053 0.70119 0.13439 -0.70019 0.41326 0.57521 -0.70594 0.41285 0.57536 -0.70606 0.49500 0.50643 -0.70605 0.49500 0.50639 -0.70607 0.49501 0.50639 -0.70607 0.56593 0.42566 -0.70607 0.56593 0.42570 -0.70605 0.62381 0.33514 -0.70608 0.62379 0.33516 -0.70608 0.62380 0.33521 -0.70605 0.56593 0.42570 -0.70605 0.70763 0.02658 -0.70608 0.70761 0.02659 -0.70610 0.70765 0.02647 -0.70607 0.70353 -0.08078 -0.70606 0.70352 -0.08079 -0.70607 0.70352 -0.08089 -0.70606 0.68322 -0.18627 -0.70605 0.68318 -0.18629 -0.70609 0.68321 -0.18611 -0.70611 0.64712 -0.28748 -0.70611 0.64714 -0.28747 -0.70610 0.64716 -0.28740 -0.70611 0.59624 -0.38206 -0.70606 0.53158 -0.46785 -0.70607 0.53158 -0.46785 -0.70607 0.53167 -0.46776 -0.70606 0.44508 -0.53142 -0.72076 0.46356 -0.53470 -0.70655 0.45476 -0.54285 -0.70605 0.36735 -0.60543 -0.70605 0.36735 -0.60541 -0.70607 0.27230 -0.65371 -0.70606 0.27153 -0.65404 -0.70605 0.27152 -0.65403 -0.70606 0.36724 -0.60548 -0.70606 0.16890 -0.68768 -0.70609 0.06352 -0.70528 -0.70607 0.06351 -0.70528 -0.70608 0.06084 -0.70542 -0.70617 -0.04386 -0.70678 -0.70607 -0.04389 -0.70680 -0.70605 -0.14969 -0.69214 -0.70607 -0.15031 -0.69202 -0.70606 -0.15030 -0.69201 -0.70607 -0.25281 -0.66146 -0.70609 -0.25958 -0.65886 -0.70606 -0.25028 -0.65356 -0.71430 -0.43916 -0.55548 -0.70610 -0.43938 -0.55529 -0.70611 -0.43946 -0.55531 -0.70605 -0.51815 -0.48270 -0.70606 -0.51835 -0.48245 -0.70608 -0.51837 -0.48245 -0.70607 -0.58529 -0.39862 -0.70607 -0.58539 -0.39846 -0.70608 -0.58538 -0.39846 -0.70609 -0.63884 -0.30549 -0.70609 -0.63884 -0.30547 -0.70609 -0.63893 -0.30537 -0.70606 -0.63893 -0.30536 -0.70607 -0.70096 -0.10051 -0.70608 -0.70096 -0.10030 -0.70611 -0.70097 -0.10030 -0.70610 -0.70808 0.00699 -0.70610 -0.70810 0.00686 -0.70608 -0.70807 0.00683 -0.70611 -0.69889 0.11389 -0.70611 -0.69889 0.11389 -0.70611 -0.67361 0.21831 -0.70610 -0.67363 0.21835 -0.70608 -0.67367 0.21827 -0.70606 -0.69892 0.11395 -0.70606 0.50064 0.86566 0.00000 0.53812 0.82193 0.18668 0.58274 0.81258 -0.01134 0.53920 0.82364 -0.17574 0.57391 0.79981 -0.17589 0.65904 0.73035 0.17961 0.69396 0.70998 -0.11977 0.66018 0.73184 -0.16900 0.68895 0.70480 -0.16913 0.76441 0.62109 0.17298 0.91953 0.36037 0.15686 0.87039 0.46762 -0.15413 0.85353 0.49775 -0.15404 0.86138 0.46288 0.20920 0.85202 0.49676 0.16518 0.78858 0.59317 -0.16212 0.78860 0.59315 -0.16212 0.96524 0.21497 0.14864 0.93232 0.33110 -0.14541 0.93232 0.33110 -0.14541 0.98819 0.06406 0.13918 0.97295 0.18637 -0.13653 0.97293 0.18647 -0.13653 0.75739 -0.64739 0.08511 0.83898 -0.53761 -0.08417 0.84809 -0.52313 -0.08417 0.84085 -0.53884 -0.05126 0.84700 -0.52267 0.09697 0.90972 -0.40400 -0.09593 0.91748 -0.38604 -0.09590 0.91305 -0.40561 -0.04272 0.91619 -0.38570 0.10875 0.95934 -0.26133 -0.10668 0.96484 -0.24024 -0.10664 0.96462 -0.26299 0.01841 0.96346 -0.23996 0.11900 0.98660 -0.11343 -0.11724 0.98912 -0.08889 -0.11721 0.99007 -0.11368 0.08268 0.98759 -0.08882 0.12952 0.99121 0.03707 -0.12700 0.99120 0.03723 -0.12700 0.52581 -0.84848 0.06007 0.64105 -0.76522 -0.05905 0.65003 -0.75761 -0.05904 0.64207 -0.76664 0.00310 0.64948 -0.75685 0.07310 0.74886 -0.65884 -0.07166 0.74874 -0.65898 -0.07166 0.24335 -0.96939 0.03254 0.38432 -0.92262 -0.03257 0.38955 -0.92043 -0.03257 0.38342 -0.92356 -0.00478 0.38937 -0.91991 0.04648 0.51805 -0.85413 -0.04565 0.51821 -0.85403 -0.04565 0.09149 -0.99564 0.01829 0.23848 -0.97099 -0.01729 0.23930 -0.97079 -0.01729 -0.06269 -0.99796 0.01194 -0.06197 -0.99805 0.00772 -0.06285 -0.99802 0.00243 0.08592 -0.99630 -0.00333 0.08969 -0.99596 -0.00332 -0.21543 -0.97615 0.02699 -0.21222 -0.97714 -0.01230 -0.21137 -0.97733 -0.01230 -0.73006 -0.68011 -0.06679 -0.62764 -0.77556 0.06766 -0.61969 -0.78304 -0.05326 -0.62558 -0.77832 -0.05356 -0.61929 -0.78333 -0.05356 -0.50133 -0.86351 0.05498 -0.49437 -0.86830 -0.04057 -0.36316 -0.93086 -0.04016 -0.49459 -0.86878 0.02457 -0.36276 -0.93098 0.04094 -0.35750 -0.93354 -0.02637 -0.35689 -0.93377 -0.02637 -0.73038 -0.67977 -0.06679 -0.73873 -0.66914 0.08080 -0.82394 -0.56115 -0.07889 -0.82409 -0.56094 -0.07889 -0.83199 -0.54708 0.09221 -0.83199 -0.54705 0.09233 -0.90516 -0.41212 0.10410 -0.89849 -0.42942 -0.09115 -0.89840 -0.42962 -0.09115 -0.95663 -0.26768 0.11489 -0.95207 -0.28821 -0.10243 -0.95202 -0.28837 -0.10243 -0.98512 -0.11723 0.12565 -0.98358 -0.14073 -0.11302 -0.98353 -0.14103 -0.11302 -0.97157 0.18719 0.14494 -0.97826 0.15949 -0.13254 -0.99067 0.03558 -0.13153 -0.92877 0.15135 0.33834 -0.99003 0.03564 0.13625 -0.99228 0.00957 -0.12367 -0.99228 0.00980 -0.12367 -0.78373 0.60041 -0.15900 -0.80510 0.57141 -0.15910 -0.86636 0.47228 0.16241 -0.88939 0.44646 -0.09830 -0.86809 0.47313 -0.15021 -0.88360 0.44347 -0.15030 -0.92992 0.33393 0.15407 -0.94164 0.30518 -0.14207 -0.94166 0.30510 -0.14207 0.00000 0.00000 1.00000 -0.25883 0.96592 0.00000 -0.92616 0.37713 0.00000 -0.91558 0.40187 -0.01461 -0.91557 0.40189 -0.01461 -0.88647 0.46275 0.00626 -0.87378 0.48632 0.00000 0.58086 0.81401 0.00000 0.62012 0.78436 0.01519 0.66319 0.74831 0.01458 0.61985 0.78392 -0.03543 0.73185 0.68129 0.01575 0.77202 0.63537 -0.01707 0.82658 0.56259 0.01618 0.90228 0.43084 0.01647 0.86185 0.50686 -0.01744 0.98413 0.17468 0.03120 0.97642 0.21588 0.00166 0.95714 0.28914 0.01661 0.93052 0.36583 -0.01766 0.99981 -0.01078 0.01649 0.99801 0.06050 -0.01764 0.96790 -0.25075 -0.01711 0.98663 -0.16215 0.01623 0.99520 -0.09628 -0.01746 0.95068 -0.30976 0.01580 0.91690 -0.39901 0.00949 0.91516 -0.40288 0.01304 0.84309 -0.53743 0.01940 0.83865 -0.54401 0.02688 0.74874 -0.66269 -0.01526 0.71700 -0.69694 0.01370 0.63575 -0.77149 0.02507 0.63762 -0.77002 0.02268 0.47530 -0.87975 0.01168 0.50748 -0.86156 -0.01334 0.19001 -0.98174 0.00903 0.21650 -0.97623 -0.00996 0.33161 -0.94331 0.01411 0.36645 -0.93036 -0.01210 0.06114 -0.99809 -0.00934 0.03908 -0.99921 0.00748 -0.11272 -0.99358 -0.00970 -0.09565 -0.99539 0.00725 -0.26197 -0.96505 -0.00708 -0.25010 -0.96822 -0.00163 -0.28953 -0.95702 0.01719 -0.40277 -0.91529 -0.00410 -0.40520 -0.91422 -0.00210 -0.53901 -0.84230 -0.00212 -0.76652 -0.64222 0.00211 -0.66040 -0.75091 -0.00224 -0.66228 -0.74926 0.00002 -0.59239 -0.80565 0.00000 -0.53696 -0.84361 0.00000 -0.85500 -0.51862 0.00403 -0.77128 -0.63648 -0.00420 -0.92369 -0.38310 0.00587 -0.86131 -0.50805 -0.00604 -0.97109 -0.23870 0.00000 -0.97339 -0.22910 0.00549 -0.97103 -0.23885 0.00754 -0.93015 -0.36711 -0.00775 -0.70163 0.11945 -0.70246 -0.58480 0.35996 -0.72693 -0.69023 0.17781 -0.70140 -0.66707 0.11930 -0.73538 -0.67281 0.17342 -0.71920 -0.67200 0.17064 -0.72063 -0.67124 0.17290 -0.72079 -0.67488 0.21497 -0.70592 -0.65073 0.28213 -0.70495 -0.65744 0.21728 -0.72150 -0.64696 0.28059 -0.70902 -0.64836 0.28458 -0.70615 -0.64836 0.28460 -0.70614 -0.61791 0.34391 -0.70704 -0.60039 0.36209 -0.71304 -0.69166 0.06600 -0.71920 -0.67870 0.05431 -0.73240 -0.69373 0.08785 -0.71486 -0.69302 -0.04291 -0.71964 -0.69243 -0.04692 -0.71995 -0.69038 -0.04273 -0.72218 -0.71145 0.00706 -0.70270 -0.71146 0.00661 -0.70270 -0.68399 -0.15217 -0.71344 -0.70389 -0.09157 -0.70438 -0.70389 -0.09159 -0.70438 0.38437 0.58342 -0.71546 0.41081 0.57570 -0.70697 0.54683 0.45003 -0.70601 0.54683 0.45005 -0.70600 0.46886 0.52903 -0.70732 0.47078 0.52914 -0.70596 0.61046 0.35901 -0.70601 0.61046 0.35900 -0.70602 0.65909 0.25912 -0.70602 0.65910 0.25914 -0.70600 0.69151 0.15289 -0.70600 0.69148 0.15285 -0.70604 0.70688 0.04285 -0.70604 0.70692 0.04289 -0.70600 0.70492 -0.06820 -0.70600 0.70489 -0.06822 -0.70603 0.68555 -0.17760 -0.70603 0.68559 -0.17758 -0.70599 0.64939 -0.28260 -0.70599 0.64937 -0.28261 -0.70601 0.59718 -0.38068 -0.70601 0.59718 -0.38068 -0.70602 0.53032 -0.46937 -0.70602 0.53033 -0.46937 -0.70601 0.46539 -0.51486 -0.71995 0.45039 -0.54655 -0.70600 0.45040 -0.54654 -0.70600 0.35939 -0.61025 -0.70600 0.35941 -0.61018 -0.70605 0.25957 -0.65888 -0.70605 0.25954 -0.65893 -0.70601 0.15331 -0.69141 -0.70600 0.15333 -0.69138 -0.70603 0.04334 -0.70685 -0.70603 0.04330 -0.70689 -0.70600 -0.06776 -0.70497 -0.70600 -0.06774 -0.70495 -0.70602 -0.17712 -0.68569 -0.70602 -0.28529 -0.64833 -0.70589 -0.17713 -0.68568 -0.70603 -0.46902 -0.53062 -0.70602 -0.46905 -0.53062 -0.70600 -0.41890 -0.56971 -0.70707 -0.38027 -0.59744 -0.70602 -0.38026 -0.59744 -0.70603 -0.28359 -0.65277 -0.70247 -0.54622 -0.45075 -0.70602 -0.54622 -0.45078 -0.70600 -0.61000 -0.35981 -0.70600 -0.60998 -0.35975 -0.70605 -0.65872 -0.25998 -0.70604 -0.65872 -0.25999 -0.70604 -0.68903 -0.16217 -0.70635 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.99616 0.08755 -0.00207 -0.99625 0.08649 0.00381 -0.99620 0.08713 0.00033 -0.99622 0.08683 0.00212 -0.99614 0.08769 -0.00366 -0.99619 0.08716 0.00000 -0.99620 0.08712 -0.00001 -0.99619 0.08716 0.00001 -0.99620 0.08712 0.00010 -0.99619 0.08717 0.00000 -0.99619 0.08725 -0.00108 -0.99620 0.08710 0.00060 -0.99619 0.08715 0.00259 0.96593 0.25882 0.00000 -0.96592 -0.25883 0.00000 -0.86602 0.50001 0.00000 0.00000 0.00000 -1.00000 -0.25890 0.96590 0.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 -0.50001 -0.86602 0.00000 0.25880 -0.96593 0.00000 -0.16634 0.62092 0.76602 0.18296 -0.68299 -0.70714 0.18296 -0.68303 -0.70711 -0.18302 0.68302 -0.70710 -0.18297 0.68298 -0.70715 -0.25882 0.96592 0.00000 -0.25882 0.96592 0.00000 0.96593 0.25881 -0.00000 0.96593 0.25882 -0.00005 0.96580 0.25927 0.00000 0.96580 0.25927 0.00000 0.25883 -0.96592 0.00000 0.25883 -0.96592 0.00000 0.25883 -0.96592 0.00001 0.25882 -0.96592 0.00004 0.25880 -0.96593 0.00000 0.25880 -0.96593 0.00000 -0.08716 -0.99619 0.00004 -0.08715 -0.99620 -0.00001 -0.08672 -0.99623 0.00058 -0.08714 -0.99620 -0.00002 -0.08717 -0.99619 -0.00008 -0.08717 -0.99619 -0.00000 -0.08724 -0.99619 0.00073 -0.08717 -0.99619 0.00000 -0.08713 -0.99620 0.00000 -0.08713 -0.99620 0.00000 -0.99619 0.08715 0.00000 -0.99619 0.08715 0.00000 -0.70711 0.70711 0.00000 -0.70711 0.70711 0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.25881 0.96593 0.00000 -0.25879 0.96593 0.00000 -0.21650 0.97628 0.00077 -0.22283 0.97473 -0.01550 -0.22283 0.97471 0.01681 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.66538 0.24178 -0.70627 0.67715 0.21337 -0.70423 0.69547 0.13322 -0.70610 0.69744 0.12813 -0.70509 0.59621 -0.38202 -0.70611 0.59623 -0.38208 -0.70606 0.16948 -0.68754 -0.70609 0.16948 -0.68755 -0.70609 -0.35220 -0.61866 -0.70229 -0.35569 -0.61708 -0.70192 -0.35036 -0.61537 -0.70610 -0.67774 -0.20529 -0.70606 -0.67776 -0.20517 -0.70608 -0.67776 -0.20517 -0.70608 -0.63287 0.31763 -0.70611 -0.59454 0.36307 -0.71743 -0.52341 0.26275 -0.81056 -0.57286 0.40658 -0.71170 0.38031 0.59441 -0.70855 0.37447 0.52217 -0.76623 0.35190 0.60848 -0.71128 -0.58390 0.65718 -0.47663 -0.25505 0.95179 0.17044 -0.21890 0.96578 0.13912 -0.24878 0.96004 0.12817 0.47970 0.10293 -0.87138 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.20324 0.05522 -0.97757 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.49997 0.86604 -0.00000 0.50018 0.86592 0.00003 0.49987 0.86610 0.00000 -0.25877 0.96594 0.00000 -0.16638 0.62088 0.76605 -0.64223 -0.44087 0.62700 -0.69710 -0.68825 0.20075 0.87170 -0.41548 0.25974 0.87170 -0.41548 0.25974 0.54677 -0.20188 0.81256 -0.64223 -0.44087 0.62700 -0.53185 0.17005 0.82955 -0.64223 -0.44087 0.62700 0.54677 -0.20188 0.81256 0.54677 -0.20188 0.81256 0.87298 0.35850 0.33064 -0.53185 0.17005 0.82955 0.25874 -0.96595 0.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.96593 0.25882 0.00000 0.96593 0.25882 0.00000 0.96591 0.25889 -0.00007 0.96592 0.25882 -0.00000 0.96593 0.25882 0.00014 -0.96592 -0.25882 0.00002 -0.96594 -0.25877 0.00028 -0.96589 -0.25895 0.00000 -0.96601 -0.25850 0.00000 -0.96592 -0.25882 -0.00001 -0.96593 -0.25882 -0.00001 -0.08719 -0.99619 0.00000 -0.08717 -0.99619 -0.00003 -0.08714 -0.99620 -0.00016 -0.08714 -0.99620 -0.00012 0.69364 0.72032 0.00000 0.52829 0.84906 0.00000 0.52829 0.84906 0.00000 0.99999 0.00494 0.00000 0.99999 0.00501 0.00001 0.97863 0.20561 -0.00000 0.97863 0.20561 0.00000 0.95295 0.30313 -0.00000 0.95295 0.30313 0.00000 0.91758 0.39756 -0.00000 0.91758 0.39756 0.00000 0.87288 0.48793 -0.00000 0.87288 0.48793 0.00000 0.81926 0.57342 -0.00000 0.81926 0.57342 0.00000 0.75738 0.65298 -0.00000 0.75738 0.65298 0.00000 0.69364 0.72032 -0.00000 0.69349 0.72047 0.00009 -0.25882 0.96592 0.00000 -0.25882 0.96592 0.00000 0.25239 -0.96759 -0.00827 0.25892 -0.96590 0.00002 0.25883 -0.96592 -0.00003 0.25867 -0.96596 -0.00019 0.25912 -0.96584 0.00002 0.25896 -0.96589 0.00000 0.25859 -0.96599 -0.00010 0.25883 -0.96592 0.00009 0.25885 -0.96592 0.00015 0.25417 -0.96697 -0.01906 0.25511 -0.96649 -0.02868 0.25336 -0.96727 -0.01397 0.25173 -0.96778 -0.00560 0.25095 -0.96799 -0.00344 0.24982 -0.96829 -0.00109 0.25880 -0.96593 0.00000 0.24956 -0.96835 0.00260 0.25567 -0.96673 -0.00799 0.24916 -0.96846 0.00000 0.25882 -0.96588 -0.00909 0.25803 -0.96610 -0.00879 0.21517 -0.97658 0.00000 0.21520 -0.97657 0.00000 0.24001 -0.97076 -0.00449 0.24649 -0.96914 0.00284 0.25139 -0.96788 0.00332 0.25485 -0.96697 0.00369 0.25683 -0.96645 0.00393 0.25715 -0.96636 0.00398 0.25858 -0.96598 0.00420 0.25437 -0.96708 -0.00761 0.25140 -0.96786 -0.00685 0.24677 -0.96906 -0.00582 0.00000 0.00000 0.00000 0.69140 0.72248 0.00000 0.61113 0.79153 0.00000 0.61113 0.79153 -0.00000 0.65651 0.75431 0.00000 0.68776 0.72593 -0.00214 0.99437 0.10596 0.00000 0.99437 0.10596 -0.00000 -0.25881 0.96593 0.00000 0.78301 -0.62201 0.00000 0.78301 -0.62201 0.00000 0.72343 -0.69040 0.00000 0.72343 -0.69040 0.00000 0.65786 -0.75314 0.00000 0.65786 -0.75314 0.00000 0.58692 -0.80965 0.00000 0.58692 -0.80965 0.00000 0.51108 -0.85953 0.00000 0.51108 -0.85953 0.00000 0.43120 -0.90226 0.00000 0.43120 -0.90226 0.00000 0.34761 -0.93764 0.00000 0.34761 -0.93764 0.00000 0.26116 -0.96530 0.00000 0.26116 -0.96530 0.00000 0.17263 -0.98499 0.00000 0.17263 -0.98499 0.00000 0.08266 -0.99658 0.00000 0.08266 -0.99658 0.00000 -0.00797 -0.99997 -0.00000 -0.00797 -0.99997 0.00000 -0.00000 -0.00000 1.00000 -0.96592 -0.25882 0.00000 -0.96592 -0.25882 0.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.25882 0.96593 0.00000 -0.25882 0.96593 -0.00002 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.04330 -0.18293 0.98217 0.09342 -0.37074 0.92403 0.09346 -0.37079 0.92400 0.13946 -0.54228 0.82854 0.13925 -0.54205 0.82873 0.17986 -0.69264 0.69850 0.18004 -0.69282 0.69828 0.21301 -0.81394 0.54048 0.21308 -0.81400 0.54037 0.23749 -0.90238 0.35960 0.23749 -0.90238 0.35960 0.25209 -0.95353 0.16504 0.25209 -0.95353 0.16504 0.25644 -0.96585 -0.03715 0.25644 -0.96585 -0.03716 0.25025 -0.93848 -0.23799 0.25019 -0.93853 -0.23784 0.23378 -0.87285 -0.42834 0.23362 -0.87313 -0.42785 0.20762 -0.77153 -0.60136 0.20774 -0.77120 -0.60174 0.17337 -0.63865 -0.74971 0.17340 -0.63856 -0.74979 0.13179 -0.47937 -0.86766 0.13178 -0.47945 -0.86762 0.08467 -0.30021 -0.95011 0.08464 -0.30040 -0.95005 0.03420 -0.10917 -0.99343 0.03422 -0.10910 -0.99344 -0.01755 0.08613 -0.99613 -0.01755 0.08612 -0.99613 -0.06874 0.27831 -0.95803 -0.06874 0.27836 -0.95802 -0.11697 0.45866 -0.88088 -0.11697 0.45866 -0.88088 -0.16058 0.62080 -0.76734 -0.16060 0.62072 -0.76741 -0.19749 0.75687 -0.62301 -0.19746 0.75696 -0.62292 -0.22641 0.86271 -0.45219 -0.22641 0.86271 -0.45219 -0.24595 0.93262 -0.26408 -0.24576 0.93282 -0.26352 -0.25528 0.96475 -0.06397 -0.25551 0.96465 -0.06456 -0.25459 0.95712 0.13818 -0.25459 0.95712 0.13819 -0.24325 0.91043 0.33457 -0.24297 0.91031 0.33510 -0.22166 0.82621 0.51792 -0.22194 0.82641 0.51749 -0.19152 0.70847 0.67926 -0.19159 0.70853 0.67917 -0.15342 0.56199 0.81279 -0.15336 0.56193 0.81284 -0.10877 0.39179 0.91360 -0.10881 0.39184 0.91358 -0.05983 0.20594 0.97673 -0.05981 0.20591 0.97674 -0.00844 0.01180 0.99989 -0.00844 0.01180 0.99989 0.04330 -0.18293 0.98217 -0.96601 -0.25849 0.00039 -0.96595 -0.25872 0.00002 -0.00007 0.00104 1.00000 -0.00002 0.00006 1.00000 -0.00003 0.00005 1.00000 -0.00003 0.00004 1.00000 -0.00003 0.00004 1.00000 -0.00003 0.00003 1.00000 0.00021 -0.00320 0.99999 -0.25886 0.96591 -0.00016 -0.25881 0.96593 0.00002 0.77696 -0.62955 0.00000 0.78763 -0.61612 -0.00618 0.00008 -1.00000 -0.00001 0.00014 -1.00000 0.00000 0.10267 -0.99472 0.00000 0.10267 -0.99472 0.00000 0.19988 -0.97982 0.00000 0.19988 -0.97982 0.00000 0.29512 -0.95546 0.00000 0.29512 -0.95546 0.00000 0.38756 -0.92184 0.00000 0.38756 -0.92184 0.00000 0.47619 -0.87934 0.00000 0.47619 -0.87934 0.00000 0.56028 -0.82830 0.00000 0.56028 -0.82830 0.00000 0.63887 -0.76931 0.00000 0.63887 -0.76931 0.00000 0.71137 -0.70282 0.00000 0.71137 -0.70282 0.00000 0.75665 -0.65381 0.00000 0.75648 -0.65402 -0.00004 0.96593 0.25880 -0.00000 0.96593 0.25881 0.00000 -0.96594 -0.25877 -0.00000 -0.96593 -0.25879 0.00001 -0.96592 -0.25883 -0.00002 -0.00002 0.00007 1.00000 -0.00002 0.00007 1.00000 -0.00001 0.00008 1.00000 -0.00024 -0.00006 1.00000 -0.96584 -0.25915 -0.00012 -0.96589 -0.25896 -0.00030 -0.96587 -0.25903 0.00010 -0.96588 -0.25900 0.00012 -0.96594 -0.25877 0.00003 -0.96581 -0.25926 -0.00015 -0.96591 -0.25887 0.00007 -0.96588 -0.25898 -0.00021 -0.96599 -0.25857 0.00020 -0.96597 -0.25865 0.00004 -0.96587 -0.25901 -0.00028 -0.96600 -0.25854 -0.00016 -0.96596 -0.25871 0.00038 -0.96596 -0.25871 -0.00004 -0.96594 -0.25875 -0.00003 -0.96592 -0.25885 0.00000 -0.96593 -0.25879 -0.00003 -0.96595 -0.25872 -0.00004 -0.96592 -0.25883 -0.00005 -0.96589 -0.25896 0.00023 -0.96591 -0.25889 0.00027 -0.96593 -0.25879 0.00007 -0.96591 -0.25887 0.00019 -0.96594 -0.25878 -0.00001 -0.96594 -0.25876 -0.00006 -0.96596 -0.25871 -0.00030 -0.96590 -0.25890 0.00003 -0.96591 -0.25890 0.00010 -0.96593 -0.25879 -0.00013 -0.96592 -0.25885 -0.00000 -0.18064 -0.65767 -0.73128 0.00430 -0.68203 0.73128 -0.66161 -0.67003 0.33653 -0.18064 -0.65767 -0.73128 -0.66161 -0.67003 0.33653 -0.81845 -0.46568 -0.33653 -0.87191 0.11478 0.47594 -0.33729 0.59279 0.73128 -0.48531 0.47923 -0.73128 -0.87191 0.11478 0.47594 -0.48531 0.47923 -0.73128 -0.67278 0.08856 -0.73449 0.57158 0.57884 -0.58150 -0.00513 0.81350 -0.58150 0.21549 0.78445 0.58150 0.57158 0.57884 -0.58150 0.21549 0.78445 0.58150 0.70708 0.40229 0.58150 0.95700 -0.12598 -0.26118 0.87191 -0.11478 0.47594 0.40782 -0.40272 0.81942 0.95700 -0.12598 -0.26118 0.40782 -0.40272 0.81942 0.28343 -0.49818 -0.81942 0.95700 -0.12598 -0.26118 0.57158 0.57884 -0.58150 0.70708 0.40229 0.58150 0.95700 -0.12598 -0.26118 0.70708 0.40229 0.58150 0.87191 -0.11478 0.47594 0.28343 -0.49818 -0.81942 0.40782 -0.40272 0.81942 0.00430 -0.68203 0.73128 0.28343 -0.49818 -0.81942 0.00430 -0.68203 0.73128 -0.18064 -0.65767 -0.73128 -0.87191 0.11478 0.47594 -0.67278 0.08856 -0.73449 -0.81845 -0.46568 -0.33653 -0.87191 0.11478 0.47594 -0.81845 -0.46568 -0.33653 -0.66161 -0.67003 0.33653 -0.00513 0.81350 -0.58150 -0.48531 0.47923 -0.73128 -0.33729 0.59279 0.73128 -0.00513 0.81350 -0.58150 -0.33729 0.59279 0.73128 0.21549 0.78445 0.58150 0.21549 0.78445 0.58150 -0.33729 0.59279 0.73128 0.40782 -0.40272 0.81942 -0.33729 0.59279 0.73128 0.00430 -0.68203 0.73128 0.40782 -0.40272 0.81942 -0.00513 0.81350 -0.58150 0.28343 -0.49818 -0.81942 -0.48531 0.47923 -0.73128 0.28343 -0.49818 -0.81942 -0.18064 -0.65767 -0.73128 -0.48531 0.47923 -0.73128 -0.66161 -0.67003 0.33653 0.00430 -0.68203 0.73128 -0.87191 0.11478 0.47594 0.00430 -0.68203 0.73128 -0.33729 0.59279 0.73128 -0.87191 0.11478 0.47594 -0.81845 -0.46568 -0.33653 -0.67278 0.08856 -0.73449 -0.18064 -0.65767 -0.73128 -0.67278 0.08856 -0.73449 -0.48531 0.47923 -0.73128 -0.18064 -0.65767 -0.73128 -0.00513 0.81350 -0.58150 0.57158 0.57884 -0.58150 0.28343 -0.49818 -0.81942 0.57158 0.57884 -0.58150 0.95700 -0.12598 -0.26118 0.28343 -0.49818 -0.81942 0.21549 0.78445 0.58150 0.40782 -0.40272 0.81942 0.70708 0.40229 0.58150 0.40782 -0.40272 0.81942 0.87191 -0.11478 0.47594 0.70708 0.40229 0.58150

87 0 72 0 66 0 179 1 164 1 176 1 176 2 164 2 158 2 158 3 164 3 149 3 158 4 149 4 134 4 72 5 51 5 66 5 67 6 70 6 81 6 67 7 81 7 83 7 83 8 81 8 90 8 83 9 90 9 98 9 98 10 90 10 105 10 98 11 105 11 114 11 210 12 190 12 227 12 227 13 190 13 203 13 227 14 203 14 241 14 241 15 203 15 213 15 241 16 213 16 255 16 255 17 213 17 225 17 51 18 72 18 33 18 33 19 72 19 61 19 33 20 61 20 21 20 21 21 61 21 53 21 21 22 53 22 43 22 176 23 193 23 179 23 179 24 193 24 209 24 179 25 209 25 188 25 188 26 209 26 207 26 225 27 230 27 255 27 255 28 230 28 232 28 105 29 118 29 114 29 114 30 118 30 132 30 42 31 43 31 44 31 44 32 43 32 53 32 44 33 53 33 54 33 54 34 53 34 62 34 53 35 61 35 62 35 62 36 61 36 72 36 62 37 72 37 73 37 73 38 72 38 88 38 72 39 87 39 88 39 88 40 87 40 96 40 88 41 96 41 97 41 97 42 111 42 112 42 112 43 111 43 121 43 121 44 111 44 120 44 121 45 120 45 134 45 121 46 134 46 135 46 135 47 134 47 149 47 135 48 149 48 150 48 150 49 149 49 163 49 163 50 149 50 164 50 163 51 164 51 179 51 163 52 179 52 180 52 180 53 179 53 189 53 189 54 179 54 188 54 189 55 188 55 207 55 189 56 207 56 208 56 208 57 207 57 217 57 208 58 217 58 218 58 218 59 217 59 221 59 221 60 220 60 233 60 220 61 232 61 233 61 233 62 232 62 230 62 233 63 230 63 231 63 231 64 230 64 225 64 231 65 225 65 226 65 226 66 225 66 213 66 226 67 213 67 214 67 214 68 213 68 203 68 214 69 203 69 198 69 198 70 203 70 190 70 198 71 190 71 191 71 191 72 190 72 177 72 191 73 177 73 178 73 178 74 161 74 162 74 162 75 161 75 147 75 147 76 161 76 146 76 147 77 146 77 132 77 147 78 132 78 133 78 133 79 132 79 118 79 133 80 118 80 119 80 119 81 118 81 105 81 119 82 105 82 106 82 106 83 105 83 90 83 106 84 90 84 91 84 91 85 90 85 81 85 91 86 81 86 82 86 82 87 81 87 70 87 82 88 70 88 71 88 71 89 70 89 57 89 71 90 57 90 58 90 58 91 57 91 38 91 38 92 45 92 42 92 42 93 45 93 41 93 42 94 41 94 43 94 156 95 169 95 155 95 155 96 169 96 168 96 39 97 40 97 103 97 103 98 40 98 104 98 103 99 104 99 155 99 155 100 104 100 156 100 46 101 40 101 56 101 56 102 40 102 39 102 46 103 56 103 9 103 46 104 9 104 10 104 10 105 9 105 2 105 2 106 5 106 10 106 0 107 1 107 2 107 2 108 1 108 5 108 144 109 145 109 131 109 1 110 0 110 4 110 4 111 0 111 3 111 4 112 3 112 7 112 4 113 7 113 8 113 8 114 7 114 12 114 8 115 12 115 13 115 13 116 12 116 20 116 13 117 20 117 35 117 35 118 20 118 59 118 35 119 59 119 60 119 60 120 59 120 75 120 60 121 75 121 76 121 76 122 75 122 89 122 89 123 75 123 79 123 89 124 79 124 102 124 102 125 79 125 117 125 102 126 117 126 131 126 131 127 117 127 130 127 131 128 130 128 144 128 145 129 144 129 166 129 166 130 144 130 165 130 166 131 165 131 181 131 166 132 181 132 182 132 182 133 181 133 204 133 182 134 204 134 205 134 205 135 204 135 223 135 223 136 204 136 222 136 223 137 222 137 257 137 257 138 222 138 256 138 257 139 256 139 266 139 266 140 256 140 265 140 266 141 265 141 269 141 269 142 265 142 270 142 269 143 270 143 276 143 276 144 270 144 275 144 276 145 275 145 277 145 276 146 277 146 278 146 278 147 277 147 279 147 278 148 279 148 280 148 280 149 279 149 273 149 280 150 273 150 274 150 274 151 273 151 272 151 273 152 271 152 272 152 272 153 271 153 267 153 272 154 267 154 268 154 268 155 267 155 249 155 239 156 250 156 249 156 249 157 250 157 268 157 249 158 238 158 239 158 239 159 238 159 206 159 239 160 206 160 200 160 168 161 169 161 200 161 168 162 200 162 206 162 167 163 169 163 154 163 139 164 156 164 125 164 189 165 202 165 201 165 147 166 133 166 122 166 122 167 133 167 119 167 221 168 233 168 248 168 248 169 233 169 231 169 240 170 247 170 237 170 240 171 237 171 236 171 236 172 237 172 219 172 236 173 219 173 212 173 212 174 219 174 195 174 212 175 195 175 202 175 202 176 195 176 201 176 201 177 195 177 186 177 195 178 187 178 186 178 186 179 187 179 167 179 186 180 167 180 172 180 172 181 167 181 148 181 148 182 167 182 154 182 125 183 138 183 139 183 139 184 138 184 148 184 139 185 148 185 154 185 30 186 65 186 74 186 30 187 74 187 80 187 80 188 74 188 94 188 80 189 94 189 95 189 95 190 94 190 110 190 95 191 110 191 113 191 113 192 110 192 125 192 125 193 110 193 124 193 125 194 124 194 138 194 65 195 30 195 6 195 65 196 6 196 55 196 55 197 6 197 11 197 55 198 11 198 29 198 29 199 11 199 28 199 29 200 28 200 27 200 27 201 28 201 24 201 27 202 24 202 23 202 23 203 24 203 26 203 23 204 26 204 25 204 25 205 26 205 36 205 36 206 26 206 37 206 36 207 37 207 48 207 36 208 48 208 47 208 47 209 48 209 63 209 63 210 48 210 64 210 63 211 64 211 77 211 64 212 78 212 77 212 77 213 78 213 93 213 77 214 93 214 92 214 92 215 93 215 108 215 93 216 109 216 108 216 108 217 109 217 122 217 122 218 109 218 123 218 122 219 123 219 137 219 152 220 136 220 137 220 137 221 136 221 122 221 171 222 151 222 152 222 152 223 151 223 136 223 184 224 170 224 171 224 171 225 170 225 151 225 199 226 196 226 184 226 184 227 196 227 183 227 184 228 183 228 170 228 246 229 234 229 235 229 235 230 234 230 215 230 235 231 215 231 216 231 216 232 215 232 196 232 216 233 196 233 199 233 247 234 240 234 254 234 254 235 240 235 253 235 254 236 253 236 252 236 252 237 253 237 248 237 252 238 248 238 246 238 246 239 248 239 245 239 246 240 245 240 234 240 101 241 100 241 85 241 263 242 251 242 264 242 264 243 251 243 259 243 263 244 264 244 262 244 262 245 261 245 255 245 255 246 261 246 258 246 255 247 258 247 242 247 255 248 242 248 241 248 241 249 242 249 224 249 241 250 224 250 227 250 227 251 224 251 210 251 210 252 224 252 211 252 210 253 211 253 192 253 185 254 192 254 175 254 185 255 175 255 174 255 174 256 175 256 153 256 153 257 175 257 157 257 153 258 157 258 141 258 153 259 141 259 140 259 140 260 141 260 126 260 126 261 141 261 127 261 126 262 127 262 114 262 114 263 127 263 115 263 114 264 115 264 99 264 114 265 99 265 98 265 98 266 99 266 84 266 98 267 84 267 83 267 83 268 84 268 67 268 67 269 84 269 68 269 67 270 68 270 50 270 67 271 50 271 49 271 49 272 50 272 32 272 22 273 18 273 32 273 32 274 18 274 31 274 32 275 31 275 49 275 17 276 14 276 15 276 15 277 14 277 18 277 15 278 18 278 22 278 19 279 21 279 17 279 17 280 21 280 16 280 17 281 16 281 14 281 21 282 19 282 33 282 19 283 34 283 33 283 33 284 34 284 52 284 33 285 52 285 51 285 51 286 52 286 66 286 66 287 52 287 69 287 66 288 69 288 85 288 85 289 69 289 86 289 85 290 86 290 101 290 100 291 101 291 107 291 107 292 101 292 116 292 107 293 116 293 129 293 107 294 129 294 128 294 128 295 129 295 143 295 128 296 143 296 142 296 142 297 143 297 159 297 142 298 159 298 158 298 158 299 159 299 173 299 158 300 173 300 176 300 176 301 173 301 194 301 244 302 228 302 229 302 197 303 209 303 194 303 194 304 209 304 193 304 194 305 193 305 176 305 259 306 251 306 244 306 244 307 251 307 243 307 244 308 243 308 228 308 157 309 160 309 141 309 86 310 39 310 101 310 173 311 168 311 206 311 95 312 40 312 80 312 25 313 36 313 38 313 237 314 272 314 268 314 145 315 137 315 131 315 257 316 266 316 216 316 5 317 28 317 11 317 24 318 28 318 5 318 8 319 13 319 48 319 4 320 8 320 37 320 8 321 48 321 37 321 1 322 4 322 26 322 4 323 37 323 26 323 26 324 24 324 1 324 24 325 5 325 1 325 223 326 257 326 199 326 257 327 216 327 199 327 64 328 35 328 78 328 35 329 60 329 78 329 182 330 171 330 166 330 171 331 152 331 166 331 205 332 184 332 182 332 184 333 171 333 182 333 35 334 64 334 13 334 64 335 48 335 13 335 205 336 223 336 184 336 223 337 199 337 184 337 166 338 152 338 145 338 152 339 137 339 145 339 40 340 46 340 80 340 46 341 30 341 80 341 156 342 139 342 169 342 139 343 154 343 169 343 113 344 125 344 104 344 125 345 156 345 104 345 40 346 95 346 104 346 95 347 113 347 104 347 30 348 46 348 6 348 46 349 10 349 6 349 78 350 60 350 93 350 60 351 76 351 93 351 167 352 187 352 169 352 187 353 200 353 169 353 195 354 239 354 187 354 239 355 200 355 187 355 219 356 250 356 195 356 250 357 239 357 195 357 237 358 268 358 219 358 268 359 250 359 219 359 5 360 11 360 10 360 11 361 6 361 10 361 278 362 252 362 276 362 252 363 246 363 276 363 278 364 280 364 252 364 280 365 254 365 252 365 280 366 274 366 254 366 274 367 247 367 254 367 274 368 272 368 247 368 272 369 237 369 247 369 102 370 131 370 123 370 131 371 137 371 123 371 276 372 246 372 269 372 246 373 235 373 269 373 216 374 266 374 235 374 266 375 269 375 235 375 123 376 109 376 102 376 109 377 89 377 102 377 76 378 89 378 93 378 89 379 109 379 93 379 121 380 135 380 124 380 135 381 138 381 124 381 112 382 121 382 110 382 121 383 124 383 110 383 97 384 112 384 94 384 112 385 110 385 94 385 23 386 25 386 42 386 25 387 38 387 42 387 27 388 23 388 44 388 23 389 42 389 44 389 65 390 55 390 73 390 55 391 62 391 73 391 74 392 65 392 88 392 65 393 73 393 88 393 88 394 97 394 74 394 97 395 94 395 74 395 92 396 91 396 77 396 91 397 82 397 77 397 108 398 106 398 92 398 106 399 91 399 92 399 122 400 119 400 108 400 119 401 106 401 108 401 148 402 138 402 150 402 138 403 135 403 150 403 178 404 183 404 191 404 183 405 196 405 191 405 201 406 186 406 189 406 186 407 180 407 189 407 208 408 218 408 212 408 218 409 236 409 212 409 234 410 214 410 215 410 214 411 198 411 215 411 245 412 226 412 234 412 226 413 214 413 234 413 248 414 231 414 245 414 231 415 226 415 245 415 44 416 54 416 27 416 54 417 29 417 27 417 54 418 62 418 29 418 62 419 55 419 29 419 77 420 82 420 63 420 82 421 71 421 63 421 215 422 198 422 196 422 198 423 191 423 196 423 172 424 148 424 163 424 148 425 150 425 163 425 212 426 202 426 208 426 202 427 189 427 208 427 186 428 172 428 180 428 172 429 163 429 180 429 38 430 36 430 58 430 36 431 47 431 58 431 58 432 47 432 71 432 47 433 63 433 71 433 183 434 178 434 170 434 178 435 162 435 170 435 170 436 162 436 151 436 162 437 147 437 151 437 151 438 147 438 136 438 147 439 122 439 136 439 218 440 221 440 236 440 221 441 240 441 236 441 240 442 221 442 253 442 221 443 248 443 253 443 197 444 229 444 228 444 228 444 209 444 197 444 173 445 206 445 194 445 261 446 262 446 264 446 211 447 256 447 222 447 79 448 115 448 117 448 0 449 17 449 15 449 56 450 69 450 52 450 244 451 267 451 271 451 159 452 168 452 173 452 155 453 168 453 159 453 143 454 155 454 159 454 129 455 155 455 143 455 273 456 260 456 271 456 260 457 244 457 271 457 279 458 264 458 273 458 264 459 260 459 273 459 277 460 261 460 279 460 261 461 264 461 279 461 19 462 17 462 2 462 17 463 0 463 2 463 34 464 9 464 52 464 9 465 56 465 52 465 19 466 2 466 34 466 2 467 9 467 34 467 3 468 0 468 22 468 0 469 15 469 22 469 7 470 3 470 32 470 3 471 22 471 32 471 12 472 7 472 50 472 7 473 32 473 50 473 68 474 20 474 50 474 20 475 12 475 50 475 84 476 59 476 68 476 59 477 20 477 68 477 99 478 75 478 84 478 75 479 59 479 84 479 130 480 117 480 127 480 117 481 115 481 127 481 144 482 130 482 141 482 130 483 127 483 141 483 165 484 144 484 160 484 144 485 141 485 160 485 175 486 181 486 160 486 181 487 165 487 160 487 192 488 204 488 175 488 204 489 181 489 175 489 211 490 222 490 192 490 222 491 204 491 192 491 115 492 79 492 99 492 79 493 75 493 99 493 265 494 256 494 224 494 256 495 211 495 224 495 39 496 103 496 101 496 103 497 116 497 101 497 39 498 86 498 56 498 86 499 69 499 56 499 224 500 242 500 265 500 242 501 270 501 265 501 242 502 258 502 270 502 258 503 275 503 270 503 258 504 261 504 275 504 261 505 277 505 275 505 249 506 267 506 229 506 267 507 244 507 229 507 238 508 249 508 197 508 249 509 229 509 197 509 206 510 238 510 194 510 238 511 197 511 194 511 116 512 103 512 129 512 103 513 155 513 129 513 134 514 142 514 158 514 128 515 142 515 134 515 120 516 128 516 134 516 107 517 128 517 120 517 107 518 120 518 111 518 100 519 107 519 111 519 96 520 111 520 97 520 96 521 100 521 111 521 85 522 100 522 96 522 85 523 96 523 87 523 66 524 85 524 87 524 16 525 21 525 43 525 16 526 43 526 41 526 14 527 16 527 41 527 14 528 41 528 45 528 14 529 45 529 18 529 18 530 45 530 31 530 38 531 57 531 45 531 31 532 45 532 57 532 31 533 57 533 49 533 49 534 57 534 70 534 49 535 70 535 67 535 114 536 132 536 126 536 161 537 178 537 177 537 185 538 210 538 192 538 126 539 132 539 140 539 132 540 146 540 140 540 140 541 146 541 153 541 146 542 161 542 153 542 153 543 161 543 174 543 161 544 177 544 174 544 174 545 177 545 185 545 177 546 190 546 185 546 185 547 190 547 210 547 232 548 262 548 255 548 232 549 263 549 262 549 220 550 263 550 232 550 217 551 220 551 221 551 220 552 251 552 263 552 217 553 251 553 220 553 217 554 243 554 251 554 217 555 228 555 243 555 207 556 228 556 217 556 207 557 209 557 228 557 281 558 283 558 282 558 282 559 283 559 284 559 287 560 285 560 286 560 285 561 287 561 289 561 291 562 292 562 290 562 290 563 292 563 288 563 284 564 288 564 292 564 283 565 288 565 284 565 289 566 290 566 285 566 285 567 290 567 288 567 288 568 281 568 285 568 281 569 288 569 283 569 282 570 284 570 286 570 286 571 284 571 292 571 286 572 292 572 287 572 287 573 292 573 291 573 286 574 281 574 282 574 281 575 286 575 285 575 287 576 291 576 289 576 289 577 291 577 290 577 300 578 299 578 301 578 301 579 299 579 302 579 303 580 304 580 302 580 302 581 304 581 301 581 298 582 297 582 296 582 296 583 297 583 295 583 296 584 295 584 294 584 295 585 293 585 294 585 314 586 313 586 315 586 314 587 315 587 316 587 310 588 309 588 308 588 308 589 309 589 307 589 308 590 307 590 306 590 306 591 307 591 305 591 303 592 311 592 312 592 303 593 312 593 304 593 297 594 298 594 306 594 297 595 306 595 305 595 309 596 310 596 316 596 316 596 315 596 309 596 293 597 299 597 294 597 299 598 300 598 294 598 311 599 313 599 314 599 311 600 314 600 312 600 296 601 308 601 306 601 296 602 306 602 298 602 294 603 310 603 308 603 294 604 308 604 296 604 300 605 301 605 314 605 300 606 314 606 316 606 312 607 314 607 301 607 312 608 301 608 304 608 310 609 294 609 300 609 310 610 300 610 316 610 295 611 297 611 305 611 295 612 305 612 307 612 293 613 295 613 307 613 293 614 307 614 309 614 293 615 309 615 299 615 309 616 315 616 299 616 299 617 315 617 313 617 299 618 313 618 302 618 302 619 313 619 311 619 302 620 311 620 303 620 342 621 344 621 338 621 334 622 340 622 336 622 380 623 362 623 382 623 362 624 360 624 378 624 362 625 378 625 390 625 382 626 362 626 384 626 392 627 388 627 362 627 362 628 388 628 386 628 362 629 386 629 384 629 390 630 398 630 396 630 390 631 396 631 394 631 390 632 394 632 392 632 390 633 392 633 362 633 383 634 385 634 387 634 359 635 389 635 377 635 381 636 361 636 379 636 361 637 389 637 359 637 381 638 383 638 361 638 361 639 383 639 387 639 361 640 387 640 391 640 389 641 361 641 397 641 397 642 361 642 395 642 395 643 361 643 391 643 395 644 391 644 393 644 390 645 389 645 397 645 390 646 397 646 398 646 398 647 397 647 395 647 398 648 395 648 396 648 396 649 395 649 393 649 396 650 393 650 394 650 394 651 393 651 391 651 394 652 391 652 392 652 392 653 391 653 387 653 392 654 387 654 388 654 388 655 387 655 385 655 388 656 385 656 386 656 386 657 385 657 383 657 386 658 383 658 384 658 384 659 383 659 381 659 384 660 381 660 382 660 382 661 381 661 379 661 382 662 379 662 380 662 380 663 379 663 361 663 380 664 361 664 362 664 350 665 345 665 351 665 351 666 345 666 346 666 351 667 346 667 353 667 353 668 346 668 347 668 353 669 347 669 354 669 354 670 347 670 348 670 354 671 348 671 355 671 355 672 348 672 349 672 355 673 349 673 357 673 357 674 349 674 352 674 357 675 352 675 358 675 358 676 352 676 356 676 358 677 356 677 359 677 359 678 356 678 360 678 359 679 360 679 361 679 361 680 360 680 362 680 345 681 363 681 365 681 345 682 365 682 346 682 389 683 390 683 377 683 377 684 390 684 378 684 377 685 378 685 376 685 376 686 378 686 374 686 376 687 374 687 375 687 375 688 374 688 370 688 375 689 370 689 373 689 373 690 370 690 368 690 373 691 368 691 372 691 372 692 368 692 367 692 372 693 367 693 371 693 371 694 367 694 366 694 371 695 366 695 369 695 369 696 366 696 365 696 369 697 365 697 364 697 364 698 365 698 363 698 351 699 369 699 350 699 369 700 364 700 350 700 345 701 350 701 363 701 363 702 350 702 364 702 369 703 351 703 353 703 369 704 353 704 371 704 371 705 353 705 354 705 371 706 354 706 372 706 372 707 354 707 355 707 372 708 355 708 373 708 373 709 355 709 357 709 373 710 357 710 375 710 375 711 357 711 358 711 375 712 358 712 376 712 376 713 358 713 359 713 376 714 359 714 377 714 378 715 360 715 356 715 378 716 356 716 374 716 374 717 356 717 352 717 374 718 352 718 370 718 370 719 352 719 349 719 370 720 349 720 368 720 368 721 349 721 348 721 368 722 348 722 367 722 367 723 348 723 347 723 367 724 347 724 366 724 366 725 347 725 346 725 366 726 346 726 365 726 534 727 525 727 527 727 541 728 526 728 536 728 488 729 493 729 492 729 492 730 493 730 496 730 492 731 496 731 503 731 492 732 503 732 499 732 503 733 506 733 499 733 499 734 506 734 511 734 499 735 511 735 507 735 527 736 517 736 522 736 522 737 517 737 507 737 522 738 507 738 516 738 516 739 507 739 511 739 545 740 530 740 543 740 543 741 530 741 529 741 545 742 546 742 530 742 530 743 546 743 539 743 530 744 539 744 528 744 539 745 538 745 528 745 528 746 538 746 532 746 528 747 532 747 518 747 518 748 532 748 531 748 518 749 531 749 520 749 518 750 520 750 514 750 514 751 520 751 519 751 505 752 509 752 508 752 505 753 508 753 497 753 497 754 508 754 500 754 500 755 498 755 497 755 497 756 498 756 490 756 497 757 490 757 486 757 486 758 490 758 489 758 486 759 489 759 479 759 479 760 489 760 481 760 474 761 473 761 475 761 475 762 473 762 479 762 475 763 479 763 480 763 480 764 479 764 481 764 470 765 469 765 468 765 468 766 469 766 466 766 468 767 466 767 464 767 464 768 466 768 465 768 464 769 465 769 462 769 462 770 465 770 461 770 462 771 461 771 460 771 462 772 460 772 458 772 458 773 460 773 457 773 458 774 457 774 456 774 458 775 456 775 454 775 454 776 456 776 453 776 449 777 448 777 447 777 449 778 447 778 443 778 447 779 442 779 443 779 443 780 442 780 441 780 443 781 441 781 439 781 441 782 437 782 439 782 439 783 437 783 436 783 439 784 436 784 434 784 436 785 427 785 434 785 434 786 427 786 424 786 434 787 424 787 431 787 431 788 424 788 416 788 431 789 416 789 425 789 418 790 408 790 407 790 418 791 407 791 414 791 407 792 400 792 414 792 414 793 400 793 401 793 414 794 401 794 415 794 401 795 402 795 415 795 415 796 402 796 405 796 415 797 405 797 421 797 417 798 426 798 411 798 411 799 426 799 421 799 411 800 421 800 409 800 409 801 421 801 405 801 483 802 484 802 485 802 485 803 484 803 487 803 485 804 487 804 493 804 493 805 487 805 494 805 493 806 494 806 496 806 496 807 494 807 502 807 496 808 502 808 503 808 503 809 502 809 504 809 503 810 504 810 506 810 506 811 504 811 513 811 535 812 527 812 523 812 523 813 527 813 522 813 523 814 522 814 515 814 515 815 522 815 516 815 515 816 516 816 513 816 513 817 516 817 511 817 513 818 511 818 506 818 542 819 536 819 535 819 535 820 536 820 534 820 535 821 534 821 527 821 547 822 543 822 542 822 542 823 543 823 541 823 542 824 541 824 536 824 501 825 508 825 510 825 510 826 508 826 509 826 510 827 509 827 512 827 512 828 509 828 519 828 512 829 519 829 521 829 521 830 519 830 520 830 521 831 520 831 524 831 524 832 520 832 531 832 524 833 531 833 533 833 533 834 531 834 532 834 533 835 532 835 537 835 537 836 532 836 538 836 537 837 538 837 540 837 540 838 538 838 539 838 540 839 539 839 544 839 544 840 539 840 546 840 544 841 546 841 547 841 547 842 546 842 545 842 547 843 545 843 543 843 482 844 489 844 491 844 491 845 489 845 490 845 491 846 490 846 495 846 495 847 490 847 498 847 495 848 498 848 501 848 501 849 498 849 500 849 501 850 500 850 508 850 471 851 474 851 476 851 476 852 474 852 475 852 476 853 475 853 477 853 477 854 475 854 480 854 477 855 480 855 482 855 482 856 480 856 481 856 482 857 481 857 489 857 467 858 469 858 471 858 471 859 469 859 470 859 471 860 470 860 474 860 459 861 461 861 463 861 463 862 461 862 465 862 463 863 465 863 467 863 467 864 465 864 466 864 467 865 466 865 469 865 455 866 457 866 459 866 459 867 457 867 460 867 459 868 460 868 461 868 440 869 441 869 442 869 440 870 442 870 445 870 445 871 442 871 447 871 445 872 447 872 446 872 446 873 447 873 448 873 446 874 448 874 450 874 450 875 448 875 451 875 450 876 451 876 452 876 452 877 451 877 453 877 452 878 453 878 455 878 455 879 453 879 456 879 455 880 456 880 457 880 441 881 440 881 437 881 437 882 440 882 435 882 437 883 435 883 436 883 436 884 435 884 427 884 427 885 435 885 432 885 427 886 432 886 423 886 412 887 416 887 423 887 423 888 416 888 424 888 423 889 424 889 427 889 406 890 408 890 412 890 412 891 408 891 413 891 412 892 413 892 416 892 399 893 400 893 406 893 406 894 400 894 407 894 406 895 407 895 408 895 410 896 409 896 404 896 404 897 409 897 405 897 404 898 405 898 403 898 403 899 405 899 402 899 403 900 402 900 399 900 399 901 402 901 401 901 399 902 401 902 400 902 433 903 430 903 429 903 429 904 430 904 428 904 429 905 428 905 422 905 422 906 428 906 420 906 422 907 420 907 419 907 419 908 420 908 417 908 419 909 417 909 410 909 410 910 417 910 411 910 410 911 411 911 409 911 513 912 504 912 502 912 483 913 472 913 484 913 564 914 565 914 567 914 564 915 567 915 571 915 571 916 567 916 576 916 576 917 567 917 580 917 576 918 580 918 579 918 629 919 621 919 626 919 626 920 628 920 629 920 629 921 628 921 633 921 633 922 628 922 634 922 633 923 634 923 637 923 633 924 637 924 640 924 640 925 637 925 647 925 655 926 646 926 647 926 647 927 646 927 640 927 663 928 659 928 657 928 657 929 659 929 654 929 657 930 654 930 655 930 655 931 654 931 646 931 662 932 661 932 663 932 663 933 661 933 659 933 658 934 656 934 660 934 658 935 660 935 662 935 662 936 660 936 661 936 658 937 653 937 656 937 656 938 653 938 648 938 648 939 653 939 645 939 648 940 645 940 641 940 641 941 645 941 639 941 641 942 639 942 635 942 635 943 639 943 632 943 635 944 632 944 623 944 623 945 632 945 624 945 619 946 618 946 624 946 624 947 618 947 623 947 613 948 612 948 614 948 614 949 612 949 615 949 614 950 615 950 619 950 619 951 615 951 618 951 612 952 613 952 609 952 609 953 613 953 608 953 609 954 608 954 606 954 609 955 606 955 607 955 607 956 606 956 604 956 607 957 604 957 602 957 602 958 604 958 601 958 602 959 601 959 599 959 599 960 601 960 598 960 599 961 598 961 593 961 586 962 590 962 591 962 591 963 590 963 593 963 593 964 590 964 595 964 593 965 595 965 596 965 593 966 596 966 599 966 574 967 584 967 586 967 586 968 584 968 590 968 561 969 572 969 574 969 574 970 572 970 584 970 549 971 548 971 555 971 555 972 548 972 559 972 555 973 559 973 561 973 561 974 559 974 572 974 557 975 558 975 570 975 587 976 589 976 583 976 570 977 558 977 573 977 573 978 558 978 560 978 573 979 560 979 575 979 575 980 560 980 562 980 575 981 562 981 578 981 578 982 562 982 563 982 578 983 563 983 581 983 581 984 563 984 564 984 581 985 564 985 583 985 583 986 564 986 571 986 583 987 571 987 576 987 583 988 576 988 579 988 583 989 579 989 587 989 566 990 554 990 570 990 570 991 554 991 556 991 570 992 556 992 557 992 569 993 551 993 568 993 568 994 551 994 552 994 568 995 552 995 566 995 566 996 552 996 553 996 566 997 553 997 554 997 577 998 548 998 569 998 569 999 548 999 550 999 569 1000 550 1000 551 1000 620 1001 621 1001 625 1001 625 1002 621 1002 629 1002 638 1003 631 1003 640 1003 640 1004 631 1004 633 1004 633 1005 631 1005 629 1005 629 1006 631 1006 625 1006 638 1007 640 1007 646 1007 638 1008 646 1008 643 1008 643 1009 646 1009 654 1009 643 1010 654 1010 649 1010 649 1011 654 1011 659 1011 649 1012 659 1012 651 1012 651 1013 659 1013 661 1013 651 1014 661 1014 652 1014 652 1015 661 1015 660 1015 652 1016 660 1016 650 1016 650 1017 660 1017 656 1017 650 1018 656 1018 644 1018 644 1019 656 1019 648 1019 644 1020 648 1020 642 1020 642 1021 648 1021 636 1021 636 1022 648 1022 641 1022 636 1023 641 1023 635 1023 636 1024 635 1024 630 1024 630 1025 635 1025 627 1025 627 1026 635 1026 623 1026 627 1027 623 1027 622 1027 622 1028 623 1028 617 1028 617 1029 623 1029 618 1029 617 1030 618 1030 616 1030 618 1031 615 1031 616 1031 616 1032 615 1032 611 1032 611 1033 615 1033 612 1033 611 1034 612 1034 610 1034 612 1035 609 1035 610 1035 610 1036 609 1036 605 1036 605 1037 609 1037 607 1037 605 1038 607 1038 602 1038 599 1039 603 1039 602 1039 602 1040 603 1040 605 1040 595 1041 590 1041 592 1041 595 1042 592 1042 597 1042 595 1043 597 1043 596 1043 596 1044 597 1044 599 1044 599 1045 597 1045 600 1045 599 1046 600 1046 603 1046 592 1047 590 1047 584 1047 592 1048 584 1048 588 1048 588 1049 584 1049 572 1049 588 1050 572 1050 582 1050 582 1051 572 1051 559 1051 582 1052 559 1052 577 1052 577 1053 559 1053 548 1053 637 1054 634 1054 628 1054 655 1055 585 1055 657 1055 658 1056 585 1056 653 1056 585 1057 632 1057 639 1057 563 1058 562 1058 560 1058 563 1059 560 1059 564 1059 560 1060 558 1060 564 1060 564 1061 558 1061 557 1061 564 1062 557 1062 556 1062 548 1063 549 1063 550 1063 550 1064 549 1064 551 1064 551 1065 549 1065 565 1065 551 1066 565 1066 552 1066 552 1067 565 1067 564 1067 552 1068 564 1068 553 1068 553 1069 564 1069 556 1069 553 1070 556 1070 554 1070 339 1071 340 1071 344 1071 344 1071 343 1071 339 1071 333 1072 337 1072 338 1072 338 1072 334 1072 333 1072 335 1073 333 1073 334 1073 334 1073 336 1073 335 1073 335 1074 341 1074 337 1074 337 1074 333 1074 335 1074 336 1075 340 1075 339 1075 339 1075 335 1075 336 1075 339 1076 343 1076 341 1076 341 1076 335 1076 339 1076 344 1077 340 1077 334 1077 334 1077 338 1077 344 1077 337 1078 341 1078 342 1078 342 1078 338 1078 337 1078 341 1079 343 1079 344 1079 344 1079 342 1079 341 1079 672 1080 669 1080 665 1080 678 1081 680 1081 674 1081 674 1082 680 1082 676 1082 670 1083 666 1083 668 1083 666 1084 664 1084 668 1084 704 1085 693 1085 703 1085 703 1086 693 1086 695 1086 709 1087 708 1087 705 1087 708 1088 704 1088 705 1088 705 1089 704 1089 702 1089 702 1090 704 1090 703 1090 699 1091 698 1091 701 1091 701 1092 698 1092 700 1092 700 1093 698 1093 706 1093 706 1094 698 1094 708 1094 706 1095 708 1095 707 1095 707 1096 708 1096 709 1096 698 1097 687 1097 682 1097 683 1098 686 1098 689 1098 686 1099 692 1099 691 1099 691 1100 690 1100 686 1100 686 1101 690 1101 688 1101 686 1102 688 1102 689 1102 697 1103 687 1103 699 1103 699 1104 687 1104 698 1104 686 1105 682 1105 687 1105 682 1106 686 1106 683 1106 684 1107 682 1107 685 1107 685 1108 682 1108 683 1108 684 1109 685 1109 695 1109 693 1110 684 1110 695 1110 684 1111 698 1111 682 1111 693 1112 698 1112 684 1112 708 1113 698 1113 704 1113 704 1114 698 1114 693 1114 620 1115 626 1115 621 1115 579 1116 580 1116 589 1116 594 1117 620 1117 589 1117 626 1118 620 1118 594 1118 594 1119 589 1119 580 1119 549 1120 567 1120 565 1120 594 1121 628 1121 626 1121 549 1122 555 1122 585 1122 585 1123 598 1123 601 1123 585 1124 601 1124 604 1124 585 1125 604 1125 606 1125 585 1126 606 1126 608 1126 628 1127 594 1127 585 1127 628 1128 585 1128 637 1128 645 1129 585 1129 639 1129 585 1130 645 1130 653 1130 593 1131 598 1131 585 1131 593 1132 585 1132 591 1132 586 1133 591 1133 585 1133 586 1134 585 1134 574 1134 585 1135 555 1135 561 1135 585 1136 561 1136 574 1136 613 1137 614 1137 585 1137 613 1138 585 1138 608 1138 632 1139 585 1139 624 1139 619 1140 624 1140 585 1140 619 1141 585 1141 614 1141 662 1142 663 1142 585 1142 662 1143 585 1143 658 1143 585 1144 663 1144 657 1144 585 1145 655 1145 647 1145 585 1146 647 1146 637 1146 567 1147 549 1147 585 1147 567 1148 585 1148 580 1148 580 1149 585 1149 594 1149 517 1150 527 1150 525 1150 525 1151 534 1151 536 1151 536 1151 526 1151 525 1151 529 1152 541 1152 543 1152 526 1153 541 1153 529 1153 505 1154 514 1154 519 1154 505 1155 519 1155 509 1155 468 1156 473 1156 474 1156 470 1157 468 1157 474 1157 451 1158 454 1158 453 1158 449 1159 454 1159 451 1159 448 1160 449 1160 451 1160 413 1161 425 1161 416 1161 413 1162 418 1162 425 1162 408 1163 418 1163 413 1163 417 1164 420 1164 426 1164 420 1165 438 1165 426 1165 420 1166 428 1166 438 1166 428 1167 430 1167 438 1167 478 1168 493 1168 488 1168 478 1169 485 1169 493 1169 478 1170 483 1170 485 1170 430 1171 433 1171 438 1171 433 1172 444 1172 438 1172 438 1173 444 1173 472 1173 472 1173 478 1173 438 1173 472 1174 483 1174 478 1174 525 1175 526 1175 529 1175 418 1176 431 1176 425 1176 497 1177 486 1177 479 1177 497 1178 514 1178 505 1178 499 1179 488 1179 492 1179 473 1180 497 1180 479 1180 414 1181 431 1181 418 1181 462 1182 458 1182 454 1182 497 1183 473 1183 468 1183 439 1184 434 1184 431 1184 443 1185 439 1185 431 1185 518 1186 514 1186 497 1186 528 1187 518 1187 497 1187 449 1188 443 1188 431 1188 449 1189 431 1189 454 1189 415 1190 431 1190 414 1190 507 1191 488 1191 499 1191 421 1192 431 1192 415 1192 517 1193 488 1193 507 1193 525 1194 529 1194 517 1194 478 1195 488 1195 438 1195 529 1196 488 1196 517 1196 530 1197 488 1197 529 1197 528 1198 497 1198 530 1198 497 1199 488 1199 530 1199 468 1200 464 1200 497 1200 464 1201 431 1201 497 1201 497 1202 431 1202 488 1202 431 1203 438 1203 488 1203 431 1204 464 1204 462 1204 431 1205 462 1205 454 1205 431 1206 421 1206 426 1206 431 1207 426 1207 438 1207 669 1208 672 1208 671 1208 669 1209 671 1209 670 1209 668 1210 669 1210 670 1210 664 1211 665 1211 669 1211 669 1211 668 1211 664 1211 665 1212 667 1212 673 1212 673 1212 672 1212 665 1212 675 1213 677 1214 681 1215 681 1216 679 1217 675 1218 667 1219 675 1220 679 1221 679 1222 673 1223 667 1224 676 1225 680 1225 681 1225 681 1225 677 1225 676 1225 666 1226 671 1226 678 1226 678 1226 674 1226 666 1226 666 1227 670 1227 671 1227 671 1228 672 1228 673 1228 671 1229 673 1229 678 1229 673 1230 680 1230 678 1230 673 1231 681 1231 680 1231 673 1232 679 1232 681 1232 665 1233 675 1233 667 1233 665 1234 677 1234 675 1234 665 1235 664 1235 666 1235 677 1236 674 1236 676 1236 666 1237 674 1237 665 1237 674 1238 677 1238 665 1238 686 1239 687 1239 692 1239 687 1240 694 1240 692 1240 687 1241 696 1241 694 1241 687 1242 697 1242 696 1242 721 1243 725 1243 720 1243 714 1244 710 1244 715 1244 715 1245 710 1245 711 1245 773 1246 768 1246 772 1246 772 1247 768 1247 771 1247 770 1248 769 1248 762 1248 770 1249 762 1249 763 1249 763 1250 762 1250 750 1250 763 1251 750 1251 751 1251 751 1252 750 1252 748 1252 751 1253 748 1253 749 1253 749 1254 748 1254 739 1254 749 1255 739 1255 740 1255 740 1256 739 1256 734 1256 740 1257 734 1257 735 1257 735 1258 734 1258 725 1258 735 1259 725 1259 726 1259 726 1260 725 1260 721 1260 726 1261 721 1261 722 1261 713 1262 712 1262 718 1262 718 1263 712 1263 719 1263 738 1264 741 1264 768 1264 729 1265 730 1265 723 1265 723 1266 730 1266 731 1266 723 1267 731 1267 732 1267 724 1268 727 1268 723 1268 723 1269 727 1269 728 1269 723 1270 728 1270 729 1270 732 1271 733 1271 723 1271 723 1272 733 1272 736 1272 723 1273 736 1273 768 1273 768 1274 736 1274 737 1274 768 1275 737 1275 738 1275 741 1276 742 1276 768 1276 768 1277 742 1277 745 1277 768 1278 745 1278 747 1278 744 1279 743 1279 752 1279 752 1280 743 1280 771 1280 768 1281 755 1281 757 1281 747 1282 746 1282 768 1282 768 1283 746 1283 753 1283 768 1284 753 1284 755 1284 766 1285 771 1285 767 1285 767 1286 771 1286 768 1286 767 1287 768 1287 765 1287 766 1288 764 1288 771 1288 771 1289 764 1289 760 1289 771 1290 760 1290 758 1290 758 1291 756 1291 771 1291 771 1292 756 1292 754 1292 771 1293 754 1293 752 1293 757 1294 759 1294 768 1294 768 1295 759 1295 761 1295 768 1296 761 1296 765 1296 718 1297 719 1297 722 1297 718 1298 722 1298 721 1298 714 1299 715 1299 717 1299 714 1300 717 1300 716 1300 716 1301 717 1301 720 1301 716 1302 720 1302 725 1302 769 1303 770 1303 773 1303 769 1304 773 1304 772 1304 780 1305 774 1305 775 1305 806 1306 807 1306 805 1306 806 1307 805 1307 804 1307 804 1308 805 1308 803 1308 804 1309 803 1309 802 1309 802 1310 803 1310 799 1310 802 1311 799 1311 798 1311 798 1312 799 1312 795 1312 798 1313 795 1313 794 1313 794 1314 795 1314 793 1314 794 1315 793 1315 792 1315 792 1316 793 1316 791 1316 792 1317 791 1317 790 1317 790 1318 791 1318 788 1318 790 1319 788 1319 787 1319 787 1320 788 1320 786 1320 787 1321 786 1321 785 1321 785 1322 786 1322 784 1322 785 1323 784 1323 783 1323 783 1324 784 1324 779 1324 783 1325 779 1325 778 1325 778 1326 779 1326 777 1326 778 1327 777 1327 776 1327 795 1328 775 1328 793 1328 775 1329 774 1329 777 1329 777 1330 774 1330 776 1330 776 1331 774 1331 778 1331 778 1332 774 1332 780 1332 778 1333 780 1333 783 1333 806 1334 804 1334 801 1334 801 1335 804 1335 802 1335 801 1336 802 1336 800 1336 797 1337 798 1337 796 1337 796 1338 798 1338 794 1338 796 1339 794 1339 789 1339 789 1340 794 1340 792 1340 789 1341 792 1341 790 1341 780 1342 781 1342 783 1342 783 1343 781 1343 782 1343 783 1344 782 1344 785 1344 787 1345 789 1345 790 1345 775 1346 807 1346 806 1346 775 1347 806 1347 780 1347 786 1348 788 1348 775 1348 786 1349 775 1349 784 1349 775 1350 788 1350 791 1350 775 1351 791 1351 793 1351 775 1352 795 1352 799 1352 775 1353 799 1353 803 1353 805 1354 807 1354 775 1354 805 1355 775 1355 803 1355 779 1356 784 1356 775 1356 779 1357 775 1357 777 1357 782 1358 789 1358 787 1358 782 1359 787 1359 785 1359 802 1360 798 1360 797 1360 802 1361 797 1361 800 1361 856 1362 827 1362 858 1362 858 1363 827 1363 829 1363 858 1364 829 1364 860 1364 860 1365 829 1365 832 1365 860 1366 832 1366 862 1366 862 1367 832 1367 834 1367 862 1368 834 1368 864 1368 864 1369 834 1369 836 1369 864 1370 836 1370 866 1370 866 1371 836 1371 838 1371 866 1372 838 1372 868 1372 868 1373 838 1373 839 1373 868 1374 839 1374 870 1374 870 1375 839 1375 830 1375 870 1376 830 1376 869 1376 869 1377 830 1377 837 1377 869 1378 837 1378 867 1378 867 1379 837 1379 835 1379 867 1380 835 1380 865 1380 865 1381 835 1381 833 1381 865 1382 833 1382 863 1382 863 1383 833 1383 831 1383 863 1384 831 1384 861 1384 861 1385 831 1385 828 1385 861 1386 828 1386 859 1386 859 1387 828 1387 826 1387 859 1388 826 1388 857 1388 857 1389 826 1389 824 1389 857 1390 824 1390 855 1390 855 1391 824 1391 822 1391 855 1392 822 1392 853 1392 853 1393 822 1393 820 1393 853 1394 820 1394 851 1394 851 1395 820 1395 818 1395 851 1396 818 1396 849 1396 849 1397 818 1397 816 1397 849 1398 816 1398 847 1398 847 1399 816 1399 813 1399 847 1400 813 1400 845 1400 845 1401 813 1401 811 1401 845 1402 811 1402 843 1402 843 1403 811 1403 809 1403 843 1404 809 1404 841 1404 809 1405 808 1405 841 1405 841 1406 808 1406 840 1406 840 1407 808 1407 810 1407 840 1408 810 1408 842 1408 842 1409 810 1409 812 1409 842 1410 812 1410 844 1410 844 1411 812 1411 815 1411 844 1412 815 1412 846 1412 846 1413 815 1413 817 1413 846 1414 817 1414 848 1414 848 1415 817 1415 819 1415 848 1416 819 1416 850 1416 850 1417 819 1417 821 1417 850 1418 821 1418 852 1418 852 1419 821 1419 823 1419 852 1420 823 1420 854 1420 854 1421 823 1421 825 1421 854 1422 825 1422 856 1422 856 1423 825 1423 827 1423 832 1424 814 1424 834 1424 821 1425 814 1425 823 1425 872 1426 881 1426 883 1426 872 1427 875 1427 876 1427 872 1428 876 1428 877 1428 872 1429 877 1429 878 1429 872 1430 878 1430 879 1430 872 1431 879 1431 881 1431 882 1432 872 1432 883 1432 880 1433 872 1433 882 1433 880 1434 871 1434 872 1434 900 1435 897 1435 899 1435 898 1436 897 1436 900 1436 873 1437 886 1437 887 1437 873 1438 887 1438 888 1438 888 1439 887 1439 889 1439 888 1440 889 1440 874 1440 874 1441 889 1441 890 1441 874 1442 890 1442 891 1442 891 1443 890 1443 892 1443 891 1444 892 1444 875 1444 875 1445 892 1445 893 1445 875 1446 893 1446 876 1446 876 1447 893 1447 894 1447 876 1448 894 1448 877 1448 877 1449 894 1449 895 1449 877 1450 895 1450 878 1450 878 1451 895 1451 896 1451 878 1452 896 1452 879 1452 879 1453 896 1453 897 1453 879 1454 897 1454 881 1454 881 1455 897 1455 898 1455 881 1456 898 1456 883 1456 880 1457 883 1457 898 1457 883 1458 880 1458 882 1458 884 1459 885 1459 886 1459 884 1460 886 1460 873 1460 872 1461 884 1461 873 1461 872 1462 891 1462 875 1462 872 1463 874 1463 891 1463 872 1464 888 1464 874 1464 872 1465 873 1465 888 1465 814 1466 820 1466 822 1466 811 1467 813 1467 814 1467 831 1468 814 1468 828 1468 819 1469 814 1469 821 1469 814 1470 825 1470 823 1470 827 1471 814 1471 829 1471 829 1472 814 1472 832 1472 836 1473 814 1473 838 1473 816 1474 818 1474 814 1474 827 1475 825 1475 814 1475 814 1476 836 1476 834 1476 819 1477 817 1477 814 1477 809 1478 811 1478 814 1478 822 1479 824 1479 814 1479 826 1480 814 1480 824 1480 818 1481 820 1481 814 1481 813 1482 816 1482 814 1482 814 1483 826 1483 828 1483 833 1484 814 1484 831 1484 814 1485 817 1485 815 1485 839 1486 814 1486 830 1486 808 1487 814 1487 810 1487 814 1488 837 1488 830 1488 814 1489 815 1489 812 1489 810 1490 814 1490 812 1490 835 1491 837 1491 814 1491 835 1492 814 1492 833 1492 814 1493 839 1493 838 1493 814 1494 808 1494 809 1494 871 1495 884 1495 872 1495 323 1496 324 1497 322 1498 323 1499 322 1500 321 1501 318 1502 320 1503 319 1504 318 1505 319 1506 317 1507 327 1508 325 1509 326 1510 327 1511 326 1512 328 1513 331 1514 332 1515 330 1516 331 1517 330 1518 329 1519 331 1520 327 1521 328 1522 331 1523 328 1524 332 1525 329 1526 330 1527 324 1528 329 1529 324 1530 323 1531 318 1532 317 1533 321 1534 318 1535 321 1536 322 1537 325 1538 319 1539 320 1540 325 1541 320 1542 326 1543 326 1544 320 1545 330 1546 320 1547 324 1548 330 1549 325 1550 329 1551 319 1552 329 1553 323 1554 319 1555 322 1556 324 1557 318 1558 324 1559 320 1560 318 1561 321 1562 317 1563 323 1564 317 1565 319 1566 323 1567 325 1568 327 1569 329 1570 327 1571 331 1572 329 1573 326 1574 330 1575 328 1576 330 1577 332 1578 328 1579

259 260 197 212

-0.29000 -0.39309 -0.17954 -0.29000 -0.39046 -0.18573 -0.29000 -0.38795 -0.17523 -0.29000 -0.38168 -0.17836 -0.28126 -0.37423 -0.17212 -0.27997 -0.39640 -0.19072 -0.27765 -0.41043 -0.15888 -0.27765 -0.40529 -0.15457 -0.27168 -0.41681 -0.15126 -0.27168 -0.41167 -0.14695 -0.25695 -0.43257 -0.13249 -0.25695 -0.42743 -0.12817 -0.24909 -0.43895 -0.12488 -0.24909 -0.43381 -0.12057 -0.24124 -0.34067 -0.14396 -0.23831 -0.42111 -0.21145 -0.23525 -0.42111 -0.21145 -0.23525 -0.39640 -0.19072 -0.23525 -0.34067 -0.14396 -0.23525 -0.33565 -0.13974 -0.23321 -0.42782 -0.20344 -0.23215 -0.33305 -0.13756 -0.23199 -0.45282 -0.10835 -0.23199 -0.44769 -0.10404 -0.22217 -0.45898 -0.10101 -0.22217 -0.45384 -0.09670 -0.21582 -0.44642 -0.18128 -0.21451 -0.31877 -0.12558 -0.20320 -0.47085 -0.08686 -0.20320 -0.46571 -0.08255 -0.19486 -0.46344 -0.16100 -0.19347 -0.42111 -0.21145 -0.19347 -0.39640 -0.19072 -0.19347 -0.38281 -0.17931 -0.19138 -0.47655 -0.08007 -0.19138 -0.47141 -0.07576 -0.19027 -0.29916 -0.10913 -0.17656 -0.28858 -0.10025 -0.17105 -0.48636 -0.06839 -0.17105 -0.48122 -0.06408 -0.17067 -0.47858 -0.14296 -0.15946 -0.27537 -0.08916 -0.15897 -0.27502 -0.08886 -0.15726 -0.49137 -0.06241 -0.15726 -0.48623 -0.05810 -0.16300 -0.38281 -0.17931 -0.14367 -0.49160 -0.12744 -0.13750 -0.34067 -0.14396 -0.13750 -0.28858 -0.10025 -0.13750 -0.25935 -0.07572 -0.13606 -0.49908 -0.05323 -0.13606 -0.49394 -0.04891 -0.13384 -0.25668 -0.07348 -0.12235 -0.24887 -0.06692 -0.12040 -0.50317 -0.04835 -0.12040 -0.49803 -0.04404 -0.11428 -0.50229 -0.11470 -0.11216 -0.24194 -0.06111 -0.10966 -0.24032 -0.05975 -0.10049 -0.23983 -0.05412 -0.09883 -0.50881 -0.04163 -0.09883 -0.50367 -0.03732 -0.09882 -0.24076 -0.05300 -0.08318 -0.24830 -0.04402 -0.08301 -0.51046 -0.10497 -0.08145 -0.51175 -0.03813 -0.08145 -0.50661 -0.03381 0.00000 -0.28858 -0.10025 -0.06617 -0.25449 -0.03665 -0.05996 -0.51539 -0.03379 -0.05996 -0.51025 -0.02948 -0.05130 -0.47347 -0.14905 -0.05036 -0.51598 -0.09838 -0.04806 -0.25922 -0.03101 -0.04108 -0.51696 -0.03192 -0.04108 -0.51182 -0.02761 -0.02916 -0.26242 -0.02719 -0.02010 -0.51870 -0.02984 -0.02010 -0.51356 -0.02553 -0.01688 -0.51877 -0.09506 -0.00977 -0.26403 -0.02527 0.00000 -0.51870 -0.02984 0.00000 -0.51356 -0.02553 0.00000 -0.24032 -0.05975 0.00977 -0.26403 -0.02527 0.01688 -0.51877 -0.09506 0.02010 -0.51870 -0.02984 0.02010 -0.51356 -0.02553 0.02916 -0.26242 -0.02719 0.04108 -0.51696 -0.03192 0.04108 -0.51182 -0.02761 0.05130 -0.47347 -0.14905 0.04806 -0.25922 -0.03101 0.05036 -0.51598 -0.09838 0.05996 -0.51539 -0.03379 0.05996 -0.51025 -0.02948 0.06617 -0.25449 -0.03665 0.08145 -0.51175 -0.03813 0.08145 -0.50661 -0.03381 0.08301 -0.51046 -0.10497 0.08318 -0.24830 -0.04402 0.09882 -0.24076 -0.05300 0.09883 -0.50881 -0.04163 0.09883 -0.50367 -0.03732 0.10049 -0.23983 -0.05412 0.10966 -0.24032 -0.05975 0.11428 -0.50229 -0.11470 0.12040 -0.50317 -0.04835 0.12040 -0.49803 -0.04404 0.12204 -0.24856 -0.06667 0.12509 -0.25060 -0.06837 0.13606 -0.49908 -0.05323 0.13606 -0.49394 -0.04891 0.13750 -0.34067 -0.14396 0.13750 -0.28858 -0.10025 0.13750 -0.25939 -0.07575 0.14367 -0.49160 -0.12744 0.14626 -0.26560 -0.08096 0.15726 -0.49137 -0.06241 0.15726 -0.48623 -0.05810 0.15937 -0.27539 -0.08918 0.16811 -0.28193 -0.09466 0.17067 -0.47858 -0.14296 0.17105 -0.48636 -0.06839 0.17105 -0.48122 -0.06408 0.17666 -0.28858 -0.10025 0.19073 -0.29953 -0.10943 0.19138 -0.47655 -0.08007 0.19138 -0.47141 -0.07576 0.19347 -0.42111 -0.21145 0.19347 -0.39640 -0.19072 0.19347 -0.38281 -0.17931 0.19486 -0.46344 -0.16100 0.20320 -0.47085 -0.08686 0.20320 -0.46571 -0.08255 0.21307 -0.31744 -0.12446 0.21418 -0.31834 -0.12521 0.21582 -0.44642 -0.18128 0.22217 -0.45898 -0.10101 0.22217 -0.45384 -0.09670 0.23199 -0.45282 -0.10835 0.23199 -0.44769 -0.10404 0.23321 -0.42782 -0.20344 0.23831 -0.42111 -0.21145 0.23852 -0.33832 -0.14198 0.24134 -0.34067 -0.14396 0.24909 -0.43895 -0.12488 0.24909 -0.43381 -0.12057 0.25695 -0.43257 -0.13249 0.25695 -0.42743 -0.12817 0.26378 -0.35944 -0.15970 0.27168 -0.41681 -0.15126 0.27168 -0.41167 -0.14695 0.27765 -0.41043 -0.15888 0.27765 -0.40529 -0.15457 0.27997 -0.39640 -0.19072 0.29000 -0.39309 -0.17954 0.29000 -0.39046 -0.18573 0.29000 -0.38795 -0.17523 0.29000 -0.38168 -0.17836 -0.20000 -0.40962 -0.20181 -0.20000 -0.30237 -0.11182 -0.20000 -0.18455 -0.47003 -0.20000 -0.14088 -0.30428 -0.20000 -0.13359 -0.31136 -0.20000 -0.12502 -0.31682 -0.20000 -0.11552 -0.32043 -0.20000 0.09198 -0.47003 -0.20000 0.09198 -0.37603 -0.18800 -0.40962 -0.20181 -0.18800 -0.39813 -0.19217 -0.18800 -0.38281 -0.17931 -0.18800 -0.21774 -0.37603 -0.18800 -0.18455 -0.47003 -0.18800 -0.17578 -0.42603 -0.18800 -0.16672 -0.46794 -0.18800 -0.15140 -0.45509 -0.18800 -0.14495 -0.30021 -0.18800 -0.13359 -0.31136 -0.18800 -0.12502 -0.31682 -0.18800 -0.11552 -0.32043 -0.18800 0.08198 -0.42603 -0.18800 0.08198 -0.47003 -0.18800 0.09198 -0.37603 -0.18300 0.08198 -0.47003 -0.18300 0.09198 -0.47003 -0.13000 -0.21774 -0.37603 -0.00854 -0.32381 -0.28073 -0.16435 -0.22177 -0.40233 -0.13228 -0.16672 -0.46794 -0.15700 0.08198 -0.42603 -0.15700 0.09198 -0.42603 -0.14221 -0.22177 -0.40233 -0.13228 -0.15140 -0.45509 -0.13000 -0.19256 -0.40603 -0.13000 0.09198 -0.40603 -0.13000 0.09198 -0.37603 0.13000 0.09198 -0.40603 -0.09742 -0.18912 -0.44124 -0.09742 -0.17380 -0.42839 -0.09583 -0.18996 -0.44024 -0.09583 -0.17464 -0.42739 -0.00010 0.08897 -0.42603 -0.09402 -0.19059 -0.43950 -0.09402 -0.17527 -0.42664 0.00000 0.09198 -0.41203 -0.09205 -0.19097 -0.43904 -0.09205 -0.17565 -0.42619 -0.09000 -0.17578 -0.42603 -0.07937 0.09198 -0.42603 -0.09000 -0.19110 -0.43889 -0.07937 0.09198 -0.41203 -0.08210 -0.22177 -0.40233 -0.08210 -0.19110 -0.43889 -0.05923 0.10634 -0.42603 -0.05923 0.10634 -0.41203 -0.04935 -0.44933 -0.13114 -0.04528 0.11246 -0.42603 -0.04528 0.11246 -0.41203 -0.03658 0.11627 -0.42603 -0.03658 0.11627 -0.41203 -0.01237 0.12134 -0.42603 -0.01237 0.12134 -0.41203 0.00000 -0.19110 -0.43889 0.00000 0.12134 -0.42603 0.00000 0.12134 -0.41203 0.01237 0.12134 -0.42603 0.01237 0.12134 -0.41203 0.03658 0.11627 -0.42603 0.03658 0.11627 -0.41203 0.09000 -0.17578 -0.42603 0.04528 0.11246 -0.42603 0.04528 0.11246 -0.41203 0.04935 -0.44933 -0.13114 0.05923 0.10634 -0.42603 0.05923 0.10634 -0.41203 0.07937 0.09198 -0.42603 0.07937 0.09198 -0.41203 0.18800 -0.39813 -0.19217 0.08210 -0.22177 -0.40233 0.08210 -0.19110 -0.43889 0.09000 -0.19110 -0.43889 0.09205 -0.19097 -0.43904 0.09205 -0.17565 -0.42619 0.09402 -0.19059 -0.43950 0.09402 -0.17527 -0.42664 0.09583 -0.18996 -0.44024 0.09583 -0.17464 -0.42739 0.09743 -0.18912 -0.44124 0.09743 -0.17380 -0.42839 0.13000 -0.21774 -0.37603 0.13000 -0.19256 -0.40603 0.13000 0.09198 -0.37603 0.13228 -0.16672 -0.46794 0.13228 -0.15140 -0.45509 0.14221 -0.22177 -0.40233 0.15700 0.08198 -0.42603 0.15700 0.09198 -0.42603 0.20000 -0.30237 -0.11182 0.18300 0.08198 -0.47003 0.18300 0.09198 -0.47003 0.18800 -0.40962 -0.20181 0.18800 -0.21774 -0.37603 0.18800 -0.18455 -0.47003 0.18800 -0.17578 -0.42603 0.18800 -0.16672 -0.46794 0.18800 -0.15140 -0.45509 0.18800 -0.14495 -0.30021 0.18800 -0.13359 -0.31136 0.18800 -0.12502 -0.31682 0.18800 -0.11552 -0.32043 0.18800 0.08198 -0.42603 0.18800 0.08198 -0.47003 0.18800 0.09198 -0.37603 0.20000 -0.40962 -0.20181 0.20000 -0.18455 -0.47003 0.20000 -0.14088 -0.30428 0.20000 -0.13359 -0.31136 0.20000 -0.12502 -0.31682 0.20000 -0.11552 -0.32043 0.20000 0.09198 -0.47003 0.20000 0.09198 -0.37603 0.15327 0.09575 -0.36135 0.00005 0.21124 -0.36135 0.00006 0.21124 -0.36235 0.00005 0.21495 -0.42135 0.00005 0.21495 -0.36877 0.00669 0.21495 -0.36895 0.01312 0.21084 -0.36135 0.01312 0.21084 -0.36235 0.01330 0.21495 -0.36948 0.01602 0.21495 -0.36980 0.01744 0.21495 -0.37003 0.02318 0.21495 -0.37093 0.02608 0.20962 -0.36135 0.02609 0.20962 -0.36235 0.03033 0.21495 -0.37247 0.03502 0.21495 -0.37374 0.03750 0.21495 -0.37442 0.03895 0.20760 -0.36135 0.03895 0.20760 -0.36235 0.04471 0.21495 -0.37678 0.05167 0.20479 -0.36235 0.05167 0.20479 -0.36135 0.05196 0.21495 -0.37955 0.05307 0.21495 -0.38003 0.05927 0.21495 -0.38274 0.06418 0.20119 -0.36135 0.06418 0.20119 -0.36235 0.06667 0.21495 -0.38637 0.06961 0.21495 -0.38792 0.07187 0.21495 -0.38920 0.07645 0.19682 -0.36135 0.07645 0.19682 -0.36235 0.07793 0.21495 -0.39263 0.08843 0.19169 -0.36235 0.08633 0.21495 -0.39786 0.08843 0.19169 -0.36135 0.09173 0.21495 -0.40152 0.09482 0.21495 -0.40361 0.10005 0.18583 -0.36135 0.10006 0.18583 -0.36235 0.15328 0.09575 -0.42135 0.10344 0.21495 -0.40990 -0.15600 0.09575 -0.42135 0.11130 0.17926 -0.36135 0.11130 0.17926 -0.36235 0.11372 0.21495 -0.41785 0.11372 0.21495 -0.42135 0.12211 0.17200 -0.36135 0.12211 0.17200 -0.36235 0.12312 0.20945 -0.41796 0.15327 0.14971 -0.42135 0.13009 0.20536 -0.41796 0.13245 0.16408 -0.36135 0.13257 0.20375 -0.42135 0.13257 0.20375 -0.41770 0.13245 0.16408 -0.36235 0.13561 0.19585 -0.40958 0.15327 0.14477 -0.36135 0.13841 0.18856 -0.40216 0.13958 0.18551 -0.39920 0.14228 0.15553 -0.36235 0.14228 0.15553 -0.36135 0.14121 0.18126 -0.39506 0.14402 0.17395 -0.38829 0.14683 0.16662 -0.38187 0.14712 0.16588 -0.38125 0.15327 0.14477 -0.36237 0.14966 0.15926 -0.37580 0.15250 0.15185 -0.37010 0.15328 0.14982 -0.36784 -0.15600 0.09575 -0.36135 -0.15600 0.14205 -0.42135 -0.15600 0.14205 -0.36335 -0.15600 0.14189 -0.36135 -0.15321 0.14931 -0.36804 -0.15035 0.15676 -0.37363 -0.14941 0.15922 -0.37562 -0.14708 0.15085 -0.36235 -0.14708 0.16529 -0.38055 -0.14708 0.15085 -0.36135 -0.14375 0.17397 -0.38812 -0.14181 0.17901 -0.39282 -0.14035 0.18282 -0.39637 -0.13711 0.16008 -0.36235 -0.13711 0.16008 -0.36135 -0.13688 0.19187 -0.40532 -0.13224 0.20395 -0.41796 -0.13225 0.20395 -0.42135 -0.12656 0.16864 -0.36235 -0.12656 0.16864 -0.36135 -0.11373 0.21495 -0.41796 -0.11547 0.17650 -0.36235 -0.11548 0.17650 -0.36135 -0.11391 0.21495 -0.42135 -0.10566 0.21495 -0.41167 -0.10390 0.18363 -0.36235 -0.10390 0.18363 -0.36135 -0.09819 0.21495 -0.40609 -0.09569 0.21495 -0.40433 -0.09190 0.18999 -0.36235 -0.09190 0.18999 -0.36135 -0.09069 0.21495 -0.40082 -0.08315 0.21495 -0.39588 -0.07950 0.19556 -0.36235 -0.07950 0.19556 -0.36135 -0.07555 0.21495 -0.39129 -0.07481 0.21495 -0.39088 -0.06677 0.20031 -0.36235 -0.06894 0.21495 -0.38762 -0.06677 0.20031 -0.36135 -0.06249 0.21495 -0.38432 -0.05602 0.21495 -0.38132 -0.05514 0.21495 -0.38095 -0.05376 0.20422 -0.36235 -0.05376 0.20422 -0.36135 -0.04952 0.21495 -0.37861 -0.04299 0.21495 -0.37621 -0.04052 0.20728 -0.36235 -0.04052 0.20728 -0.36135 -0.03643 0.21495 -0.37413 -0.03632 0.21495 -0.37410 -0.02983 0.21495 -0.37237 -0.02711 0.20948 -0.36235 -0.02711 0.20948 -0.36135 -0.02319 0.21495 -0.37095 -0.01803 0.21495 -0.37012 -0.01358 0.21080 -0.36235 -0.01650 0.21495 -0.36988 -0.01550 0.21495 -0.36975 -0.01358 0.21080 -0.36135 -0.00885 0.21495 -0.36909 -0.00221 0.21495 -0.36879 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 -0.00000 0.76602 0.64281 0.00000 0.76602 0.64281 -0.00000 0.76602 0.64282 0.00000 0.76602 0.64282 -0.00000 0.76603 0.64281 0.00000 0.76603 0.64281 -0.00000 0.76609 0.64273 0.00000 0.76609 0.64273 -0.00000 0.76601 0.64283 0.00000 0.76601 0.64283 -0.00000 0.76600 0.64284 0.00000 0.76600 0.64284 -0.00000 -0.76604 -0.64279 -0.00000 -0.76604 -0.64279 -0.00000 -0.76604 -0.64279 0.00000 -0.76604 -0.64279 -0.00001 -0.76604 -0.64279 0.00002 -0.76604 -0.64279 -0.00000 -0.76605 -0.64279 0.00000 -0.76605 -0.64279 0.00001 -0.76604 -0.64279 -0.00002 -0.76604 -0.64279 0.00003 -0.76604 -0.64279 -0.00000 -0.76605 -0.64278 -0.00001 -0.76605 -0.64279 -0.00000 -0.76605 -0.64279 0.00000 -0.76603 -0.64280 0.00000 -0.76604 -0.64279 -0.00001 -0.76606 -0.64277 0.00001 -0.76606 -0.64277 -0.00000 -0.76604 -0.64279 -0.00000 -0.76603 -0.64280 0.00000 -0.76605 -0.64279 0.00001 -0.76605 -0.64279 -0.00000 -0.76605 -0.64278 0.90928 -0.26756 0.31880 0.90927 -0.26753 0.31884 0.85710 -0.33112 0.39463 0.85712 -0.33115 0.39457 0.85714 -0.33112 0.39454 0.85714 -0.33109 0.39459 0.78396 -0.39904 0.47558 0.78394 -0.39901 0.47563 0.78391 -0.39903 0.47566 0.78392 -0.39907 0.47561 0.69776 -0.46044 0.54875 0.69779 -0.46049 0.54868 0.69777 -0.46050 0.54869 0.69775 -0.46044 0.54876 0.60004 -0.51420 0.61282 0.60001 -0.51416 0.61288 0.60005 -0.51414 0.61286 0.60007 -0.51419 0.61280 0.49238 -0.55947 0.66675 0.49238 -0.55946 0.66676 0.49241 -0.55945 0.66674 0.49239 -0.55940 0.66681 0.37659 -0.59539 0.70971 0.37662 -0.59545 0.70965 0.37662 -0.59545 0.70965 0.37661 -0.59544 0.70965 0.25459 -0.62159 0.74082 0.25460 -0.62160 0.74081 0.25459 -0.62160 0.74081 0.25456 -0.62153 0.74087 0.12832 -0.63739 0.75978 0.12839 -0.63754 0.75965 0.12837 -0.63754 0.75965 0.12831 -0.63739 0.75978 0.00000 -0.64271 0.76611 0.00000 -0.64271 0.76611 0.00000 -0.64271 0.76611 0.00000 -0.64271 0.76611 -0.12837 -0.63739 0.75977 -0.12831 -0.63754 0.75965 -0.12832 -0.63754 0.75965 -0.12839 -0.63739 0.75977 -0.25459 -0.62153 0.74087 -0.25456 -0.62160 0.74082 -0.25459 -0.62160 0.74081 -0.25460 -0.62159 0.74082 -0.37662 -0.59544 0.70965 -0.37661 -0.59545 0.70965 -0.37659 -0.59545 0.70966 -0.37662 -0.59538 0.70970 -0.49241 -0.55939 0.66680 -0.49239 -0.55946 0.66675 -0.49238 -0.55946 0.66676 -0.49238 -0.55947 0.66675 -0.60005 -0.51420 0.61281 -0.60007 -0.51413 0.61285 -0.60004 -0.51414 0.61287 -0.60001 -0.51421 0.61284 -0.69777 -0.46043 0.54874 -0.69775 -0.46051 0.54870 -0.69776 -0.46051 0.54870 -0.69779 -0.46043 0.54873 -0.78391 -0.39908 0.47562 -0.78392 -0.39903 0.47565 -0.78396 -0.39900 0.47561 -0.78394 -0.39906 0.47560 -0.85714 -0.33108 0.39458 -0.85714 -0.33113 0.39455 -0.85711 -0.33116 0.39459 -0.85712 -0.33110 0.39460 -0.90928 -0.26752 0.31883 -0.90927 -0.26756 0.31880 0.62760 0.21058 0.74952 0.71273 0.31373 0.62737 0.69853 0.28486 0.65644 0.69864 0.28487 0.65631 0.69861 0.28485 0.65635 0.68865 0.27640 0.67034 0.67306 0.25723 0.69342 0.65712 0.23805 0.71521 0.67073 0.25059 0.69809 0.65840 0.23615 0.71466 0.65168 0.23156 0.72228 0.65163 0.23152 0.72234 -0.70059 0.28754 0.65306 -0.67994 0.26755 0.68271 -0.71420 0.31306 0.62602 -0.69299 0.29203 0.65915 -0.70068 0.28763 0.65293 -0.70074 0.28768 0.65284 -0.67989 0.26749 0.68278 -0.65842 0.23617 0.71464 -0.64446 0.22015 0.73226 -0.65780 0.23703 0.71493 -0.64754 0.22868 0.72691 -0.61038 0.19434 0.76790 -0.28873 0.03526 0.95676 -0.28875 0.03526 0.95676 -0.28875 0.03527 0.95675 -0.19520 0.01522 0.98065 -0.19519 0.01522 0.98065 -0.19519 0.01522 0.98065 -0.09843 0.00306 0.99514 -0.09841 0.00306 0.99514 -0.09838 0.00305 0.99514 0.00000 -0.00102 1.00000 0.00000 -0.00102 1.00000 0.00000 -0.00102 1.00000 0.09838 0.00305 0.99514 0.09841 0.00306 0.99514 0.09843 0.00306 0.99514 0.19519 0.01522 0.98065 0.19519 0.01522 0.98065 0.28873 0.03526 0.95676 0.28875 0.03526 0.95676 0.28875 0.03527 0.95675 0.19520 0.01522 0.98065 -0.58646 -0.76456 -0.26740 -0.53774 -0.77594 -0.32978 0.59506 -0.73965 -0.31436 0.57848 -0.76122 -0.29309 0.59058 -0.75353 -0.28882 0.57759 -0.76821 -0.27612 0.55160 -0.79943 -0.23801 0.55163 -0.79940 -0.23804 0.55163 -0.79940 -0.23804 0.50456 -0.84311 -0.18595 0.50451 -0.84315 -0.18591 0.50449 -0.84317 -0.18587 0.44909 -0.88264 -0.13884 0.44906 -0.88265 -0.13883 0.44906 -0.88265 -0.13883 0.38618 -0.91725 -0.09760 0.38616 -0.91725 -0.09760 0.38616 -0.91725 -0.09760 0.31687 -0.94638 -0.06288 0.31691 -0.94637 -0.06289 0.31691 -0.94637 -0.06290 0.24236 -0.96955 -0.03527 0.24236 -0.96954 -0.03527 0.24238 -0.96954 -0.03528 0.16385 -0.98637 -0.01523 0.16385 -0.98637 -0.01523 0.16385 -0.98637 -0.01523 0.08258 -0.99658 -0.00306 0.08259 -0.99658 -0.00306 0.08261 -0.99658 -0.00307 0.00000 -1.00000 0.00101 0.00000 -1.00000 0.00101 0.00000 -1.00000 0.00101 -0.08261 -0.99658 -0.00307 -0.08259 -0.99658 -0.00306 -0.08258 -0.99658 -0.00306 -0.16385 -0.98637 -0.01523 -0.16385 -0.98637 -0.01523 -0.16385 -0.98637 -0.01523 -0.24238 -0.96954 -0.03528 -0.24236 -0.96954 -0.03527 -0.24236 -0.96955 -0.03527 -0.31691 -0.94637 -0.06290 -0.31691 -0.94637 -0.06289 -0.31687 -0.94638 -0.06288 -0.38616 -0.91725 -0.09760 -0.38616 -0.91725 -0.09760 -0.38618 -0.91725 -0.09760 -0.44906 -0.88265 -0.13883 -0.44906 -0.88265 -0.13883 -0.44909 -0.88264 -0.13884 -0.50449 -0.84317 -0.18587 -0.50451 -0.84315 -0.18591 -0.59057 -0.75353 -0.28882 -0.58685 -0.75593 -0.29015 -0.55160 -0.79943 -0.23802 -0.55163 -0.79940 -0.23804 -0.55163 -0.79940 -0.23804 -0.50456 -0.84312 -0.18595 -0.49712 0.55772 -0.66470 0.49712 0.55772 -0.66470 0.00000 0.99620 -0.08714 0.00000 0.99620 -0.08714 0.00000 0.99620 -0.08714 0.00000 0.64279 -0.76604 0.00000 0.64279 -0.76604 -0.00000 0.76620 0.64261 -0.00001 0.76560 0.64332 0.00000 0.76860 0.63973 -0.00000 0.76605 0.64279 -0.00001 0.76604 0.64279 -0.00000 0.76609 0.64273 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -0.00031 -0.76609 -0.64273 0.00006 -0.76604 -0.64279 0.00000 -0.76605 -0.64278 -0.00000 -0.76604 -0.64279 -0.00006 -0.76604 -0.64279 -0.00001 -0.76604 -0.64279 0.00000 -0.00000 -1.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -0.20501 0.97876 -0.00000 0.20501 0.97876 0.00000 0.58062 0.81417 -0.00000 0.58062 0.81417 0.00000 0.40132 0.91594 0.00000 0.40133 0.91594 0.00001 0.40143 0.91589 0.00001 0.40141 0.91590 -0.00000 0.20501 0.97876 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.20501 0.97876 0.00000 -0.40143 0.91589 -0.00000 -0.40141 0.91590 0.00001 -0.40132 0.91594 0.00001 -0.58062 0.81417 0.00000 -0.58062 0.81417 0.00000 -0.40133 0.91594 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.64279 -0.76604 0.00000 0.64279 -0.76604 0.00001 0.76560 0.64332 0.00000 0.76860 0.63973 -0.00000 0.76603 0.64280 0.00001 0.76605 0.64279 0.00000 0.76609 0.64273 0.00000 0.76620 0.64261 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.76604 -0.64279 -0.00000 -0.76604 -0.64279 -0.00445 0.70050 0.71364 -0.00000 0.69675 0.71732 0.00000 0.53730 0.84339 -0.00000 0.53730 0.84339 0.00000 0.35560 0.93464 -0.00000 0.35560 0.93464 0.00000 0.25882 0.96593 0.00000 0.25882 0.96593 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.86093 -0.00000 -0.50873 0.86093 0.00000 -0.50873 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.76604 -0.64279 0.00000 -0.76604 -0.64279 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.25882 0.96593 -0.00000 0.25882 0.96593 -0.00000 0.35560 0.93464 0.00000 0.35560 0.93464 -0.00000 0.53730 0.84339 0.00000 0.53730 0.84339 -0.00000 0.70051 0.71364 0.00697 0.69673 0.71730 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.86093 0.00000 -0.50873 -0.86093 -0.00000 -0.50873 -0.70711 0.45452 -0.54167 -0.70710 0.45454 -0.54166 -0.09800 0.63970 -0.76235 -0.09763 0.63969 -0.76241 -0.28997 0.61515 -0.73315 -0.29060 0.61508 -0.73296 -0.47176 0.56679 -0.67542 -0.47121 0.56693 -0.67569 -0.63404 0.49705 -0.59240 -0.63445 0.49687 -0.59210 0.00000 0.64279 -0.76604 0.00000 0.64279 -0.76604 0.00000 0.64279 -0.76604 0.00000 0.64279 -0.76604 0.00000 0.64279 -0.76604 0.63404 0.49709 -0.59236 0.63446 0.49683 -0.59214 0.47176 0.56674 -0.67546 0.47121 0.56698 -0.67565 0.28997 0.61520 -0.73311 0.29060 0.61502 -0.73300 0.09800 0.63967 -0.76238 0.09763 0.63972 -0.76238 0.70711 0.45454 -0.54166 0.70710 0.45452 -0.54168 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.37752 0.06286 0.92387 -0.37754 0.06287 0.92386 -0.37751 0.06286 0.92387 -0.46007 0.09757 0.88251 -0.46002 0.09754 0.88253 -0.46005 0.09756 0.88252 -0.53496 0.13877 0.83341 -0.61203 0.19584 0.76620 -0.60156 0.18499 0.77712 -0.50442 0.11654 0.85556 -0.52414 0.13054 0.84157 -0.53543 0.13793 0.83324 -0.54292 0.14359 0.82742 -0.57090 0.16471 0.80433 -0.60080 0.18622 0.77740 -0.56605 0.15294 0.81006 -0.61111 0.19357 0.76751 0.37752 0.06286 0.92387 0.37754 0.06287 0.92386 0.37751 0.06286 0.92387 0.46007 0.09757 0.88251 0.46002 0.09754 0.88253 0.46005 0.09756 0.88252 0.50247 0.12071 0.85613 0.52409 0.13240 0.84131 0.53539 0.13791 0.83327 0.53543 0.13793 0.83324 0.60081 0.18624 0.77739 0.62554 0.20513 0.75275 0.59279 0.17738 0.78558 0.60147 0.18510 0.77715 0.58742 0.17614 0.78988 0.55867 0.15561 0.81466 0.00000 0.64281 -0.76602 -0.00002 0.64277 -0.76606 -0.00010 0.64278 -0.76605 0.00001 0.64278 -0.76605 0.00001 0.64276 -0.76607 0.00001 0.64278 -0.76605 -0.00004 0.64283 -0.76601 0.00000 0.64278 -0.76605 0.00000 0.64278 -0.76605 0.00001 0.64278 -0.76605 0.00002 0.64279 -0.76604 -0.00001 0.64279 -0.76605 0.00000 0.64282 -0.76602 0.00001 0.64279 -0.76604 0.00000 0.64279 -0.76604 0.00000 0.64279 -0.76604 -0.00012 0.64285 -0.76599 0.00000 0.64285 -0.76599 0.00000 0.64278 -0.76605 0.00000 0.64279 -0.76604 -0.00010 0.64278 -0.76605 -0.00003 0.64281 -0.76603 0.00000 0.64277 -0.76606 0.00000 0.64277 -0.76606 0.00000 0.64277 -0.76606 0.00000 0.64277 -0.76606 0.72142 0.48386 0.49542 -0.00000 0.64279 -0.76604 0.00003 0.64281 -0.76603 0.00004 0.64280 -0.76603 0.00001 0.64279 -0.76604 0.00000 0.64279 -0.76604 -0.00000 0.64278 -0.76605 -0.00001 0.64278 -0.76605 -0.00001 0.64279 -0.76604 0.00004 0.64281 -0.76602 0.00000 0.64277 -0.76606 -0.00002 0.64280 -0.76604 0.00008 0.64278 -0.76605 -0.00009 0.64279 -0.76604 0.00001 0.64279 -0.76604 0.00000 0.64280 -0.76604 0.00007 0.64265 -0.76616 0.00002 0.64277 -0.76606 0.00000 0.64281 -0.76603 0.00013 0.64290 -0.76595 0.00000 0.64278 -0.76605 -0.00008 0.64268 -0.76614 0.00000 0.64278 -0.76605 0.00000 0.64278 -0.76605 -0.00001 0.64279 -0.76604 0.00000 0.64279 -0.76605 0.00000 0.64279 -0.76604 0.00002 -0.76604 -0.64279 -0.00000 0.76604 0.64279 0.00000 0.76604 0.64279 0.00024 -0.76600 -0.64284 0.00031 -0.76609 -0.64273 0.00000 -0.76604 -0.64279 -0.00024 -0.76600 -0.64284 -0.00000 -0.76604 -0.64279 0.00000 -0.76605 -0.64278 0.00000 -0.76604 -0.64279 0.00000 -0.76604 -0.64279 -0.00000 -0.76604 -0.64279 -0.00000 -0.76604 -0.64279 0.00000 -0.76604 -0.64279 0.00000 -0.76604 -0.64279 -0.00000 -0.76605 -0.64278 -0.00000 -0.76605 -0.64278 0.00000 -0.76605 -0.64279 0.00006 -0.76606 -0.64277 0.00000 -0.76605 -0.64278 -0.00000 -0.76605 -0.64278 -0.00000 -0.76605 -0.64278 -0.00000 -0.76605 -0.64278 -0.00006 -0.76606 -0.64277 0.00000 -0.76605 -0.64279 0.00000 -0.76605 -0.64278 -0.00000 -0.76605 -0.64278 0.93471 0.35540 -0.00083 0.93386 0.35764 -0.00090 0.93386 0.35764 -0.00090 0.00000 -1.00000 -0.00000 0.54530 0.83824 -0.00000 0.50521 0.86300 -0.00003 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.58790 0.63680 0.49886 0.56441 0.65591 0.50123 0.07972 0.85921 0.50538 0.01325 0.86614 0.49962 0.02690 0.85987 0.50981 0.04018 0.86503 0.50010 0.05908 0.86401 0.49999 0.07982 0.85917 0.50542 0.08041 0.85882 0.50594 0.10713 0.86055 0.49797 0.13736 0.85157 0.50593 0.13744 0.85153 0.50597 0.13388 0.85356 0.50350 0.16325 0.85131 0.49861 0.18669 0.84334 0.50390 0.19180 0.84357 0.50160 0.28342 0.81809 0.50040 0.26338 0.82506 0.49990 0.24556 0.82996 0.50086 0.21828 0.83860 0.49911 0.21800 0.83866 0.49913 0.23890 0.83065 0.50293 0.33935 0.79594 0.50132 0.31547 0.80223 0.50685 0.28327 0.81815 0.50039 0.29033 0.81467 0.50201 0.34197 0.79876 0.49500 0.38940 0.77269 0.50131 0.48248 0.71860 0.50082 0.49483 0.70823 0.50354 0.43482 0.74973 0.49884 0.43839 0.74753 0.49901 0.43732 0.74810 0.49909 0.44204 0.74492 0.49970 0.52748 0.68882 0.49729 0.53821 0.67455 0.50528 0.52416 0.68862 0.50106 0.52413 0.68865 0.50105 0.50639 0.70278 0.49967 0.57637 0.64012 0.50799 0.56742 0.65254 0.50222 0.58465 0.59588 0.55056 0.69966 0.71447 0.00045 0.57573 0.69653 0.42823 0.60404 0.61846 0.50264 1.00000 -0.00030 -0.00009 0.39358 0.91929 0.00077 0.27646 0.96103 -0.00083 0.50461 0.86334 -0.00071 0.03119 0.99951 -0.00038 0.03127 0.99951 0.00067 0.09322 0.99565 -0.00076 0.09319 0.99565 -0.00044 0.15498 0.98792 -0.00074 0.27640 0.96104 -0.00157 0.21606 0.97638 -0.00153 0.21614 0.97636 -0.00040 0.15495 0.98792 -0.00039 0.33569 0.94197 0.00071 0.33581 0.94193 -0.00087 0.39350 0.91933 -0.00037 0.50467 0.86331 0.00020 0.45004 0.89301 0.00020 0.45008 0.89299 -0.00040 0.55743 0.83023 -0.00141 0.55738 0.83025 -0.00077 0.60798 0.79395 -0.00024 0.60805 0.79390 -0.00139 0.69971 0.71442 -0.00063 0.65616 0.75462 -0.00061 0.65617 0.75461 -0.00030 -0.39224 0.77013 0.50304 -0.40517 0.76517 0.50035 -0.37361 0.78144 0.49977 -0.35210 0.79017 0.50166 -0.35212 0.79016 0.50166 -0.35459 0.78941 0.50110 -0.32692 0.80225 0.49952 -0.23528 0.82929 0.50688 -0.25589 0.82667 0.50113 -0.27788 0.82055 0.49948 -0.30250 0.81066 0.50133 -0.28195 0.81438 0.50724 -0.30321 0.81024 0.50157 -0.13696 0.85125 0.50657 -0.19693 0.85152 0.48593 -0.16509 0.83786 0.52032 -0.24960 0.82979 0.49915 -0.20810 0.84049 0.50027 -0.20829 0.84045 0.50026 -0.18632 0.84169 0.50680 -0.04920 0.86566 0.49821 -0.02300 0.85855 0.51222 -0.02805 0.86225 0.50570 -0.00442 0.86620 0.49967 -0.06498 0.86309 0.50085 -0.08132 0.85924 0.50506 -0.08391 0.85839 0.50609 -0.08157 0.85741 0.50813 -0.14143 0.86324 0.48458 -0.11236 0.84339 0.52542 -0.13501 0.85117 0.50722 -0.70420 0.70766 0.05760 -0.61553 0.61047 0.49845 -0.62824 0.57793 0.52088 -0.58836 0.63342 0.50261 -0.58823 0.63351 0.50264 -0.58702 0.63420 0.50319 -0.56897 0.65374 0.49890 -0.53878 0.67580 0.50300 -0.53902 0.67565 0.50295 -0.54542 0.67191 0.50105 -0.51949 0.69330 0.49946 -0.50051 0.70563 0.50157 -0.49273 0.71217 0.50003 -0.44297 0.74544 0.49809 -0.45397 0.73707 0.50063 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.93358 0.35836 -0.00000 -0.93359 0.35835 0.00000 -0.93387 0.35762 -0.00120 -0.93362 0.35826 0.00148 -0.93360 0.35832 0.00017 -0.93399 0.35730 -0.00124 -0.93358 0.35836 0.00002 -0.93355 0.35844 -0.00010 -0.93359 0.35835 0.00000 -0.93318 0.35942 0.00145 -0.00000 0.00000 1.00000 -1.00000 0.00006 -0.00005 -1.00000 -0.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.51424 0.85723 0.02679 -0.51085 0.85967 0.00026 -0.03237 0.99948 0.00064 -0.03251 0.99947 -0.00128 -0.09733 0.99525 -0.00121 -0.09729 0.99526 -0.00064 -0.16168 0.98684 -0.00058 -0.16165 0.98685 -0.00098 -0.22532 0.97428 -0.00094 -0.22534 0.97428 -0.00063 -0.28804 0.95762 -0.00063 -0.28805 0.95762 -0.00083 -0.34958 0.93691 -0.00082 -0.34960 0.93690 -0.00120 -0.40974 0.91220 -0.00124 -0.40973 0.91220 -0.00135 -0.46796 0.88375 -0.00134 -0.46797 0.88374 -0.00114 -0.52449 0.85141 -0.00109 -0.52442 0.85146 0.00013 -0.57846 0.81571 0.00010 -0.57855 0.81565 -0.00133 -0.63024 0.77640 -0.00122 -0.63024 0.77640 -0.00124 -0.70871 0.70550 -0.00201 -0.67923 0.73393 -0.00212 -0.67928 0.73388 -0.00118 -1.00000 0.00001 -0.00136 1.00000 0.00024 0.00020 1.00000 -0.00005 0.00052 1.00000 -0.00007 -0.00007 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.93389 0.35756 -0.00075 0.93387 0.35762 -0.00090 0.93371 0.35803 -0.00109 0.93386 0.35763 -0.00089 0.93384 0.35768 -0.00093 0.93382 0.35775 -0.00094 0.93384 0.35770 -0.00122 0.93320 0.35935 0.00005 0.51081 0.85943 -0.02138 0.50546 0.86190 -0.04050 0.00002 1.00000 0.00002 0.33940 0.79592 0.50132 0.36475 0.78577 0.49952 0.38725 0.77404 0.50089 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00075 1.00000 -0.00064 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -1.00000 0.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.64278 -0.76605 1.00000 0.00000 -0.00000 0.00000 0.64279 -0.76604 -1.00000 -0.00000 0.00000 -0.04175 0.76538 0.64223 0.00000 0.76736 0.64122 -0.00000 0.76736 0.64122 0.04175 0.76538 0.64223 0.00000 0.72139 -0.69253 0.00000 0.72139 -0.69253 0.00000 0.72139 -0.69253 0.00000 0.72139 -0.69253

3 0 0 0 2 0 0 1 3 1 1 1 159 2 158 2 157 2 157 3 158 3 156 3 104 4 59 4 62 4 104 5 62 5 101 5 101 6 62 6 63 6 101 7 63 7 100 7 100 8 63 8 68 8 100 9 68 9 96 9 96 10 68 10 73 10 96 11 73 11 92 11 92 12 73 12 76 12 92 13 76 13 88 13 88 14 76 14 80 14 88 15 80 15 84 15 20 16 15 16 16 16 106 17 99 17 91 17 129 18 143 18 142 18 56 19 71 19 64 19 64 20 71 20 72 20 72 21 71 21 79 21 79 22 71 22 91 22 79 23 91 23 85 23 91 24 99 24 93 24 91 25 93 25 85 25 20 26 16 26 26 26 26 27 16 27 31 27 26 28 31 28 30 28 30 29 31 29 71 29 30 30 71 30 40 30 40 31 71 31 56 31 40 32 56 32 46 32 116 33 106 33 122 33 122 34 106 34 91 34 122 35 91 35 132 35 132 36 91 36 129 36 132 37 129 37 137 37 137 38 129 38 142 38 156 39 158 39 153 39 153 40 158 40 154 40 153 41 154 41 151 41 151 42 154 42 152 42 151 43 152 43 148 43 148 44 152 44 149 44 148 45 149 45 146 45 146 46 149 46 147 46 146 47 147 47 140 47 140 48 147 48 141 48 140 49 141 49 138 49 138 50 141 50 139 50 138 51 139 51 133 51 133 52 139 52 134 52 133 53 134 53 127 53 127 54 134 54 128 54 127 55 128 55 123 55 123 56 128 56 124 56 123 57 124 57 118 57 118 58 124 58 119 58 118 59 119 59 111 59 111 60 119 60 112 60 111 61 112 61 107 61 107 62 112 62 108 62 107 63 108 63 102 63 102 64 108 64 103 64 102 65 103 65 97 65 97 66 103 66 98 66 97 67 98 67 94 67 94 68 98 68 95 68 94 69 95 69 89 69 89 70 95 70 90 70 89 71 90 71 86 71 86 72 90 72 87 72 86 73 87 73 81 73 81 74 87 74 82 74 81 75 82 75 77 75 77 76 82 76 78 76 77 77 78 77 74 77 74 78 78 78 75 78 74 79 75 79 69 79 69 80 75 80 70 80 69 81 70 81 65 81 65 82 70 82 66 82 65 83 66 83 60 83 60 84 66 84 61 84 60 85 61 85 54 85 54 86 61 86 55 86 54 87 55 87 50 87 50 88 55 88 51 88 50 89 51 89 43 89 43 90 51 90 44 90 43 91 44 91 38 91 38 92 44 92 39 92 38 93 39 93 34 93 34 94 39 94 35 94 34 95 35 95 28 95 28 96 35 96 29 96 28 97 29 97 24 97 24 98 29 98 25 98 24 99 25 99 22 99 22 100 25 100 23 100 22 101 23 101 12 101 12 102 23 102 13 102 12 103 13 103 10 103 10 104 13 104 11 104 10 105 11 105 8 105 8 106 11 106 9 106 8 107 9 107 6 107 6 108 9 108 7 108 7 109 0 109 6 109 0 110 7 110 2 110 120 111 149 111 121 111 158 112 159 112 150 112 158 113 150 113 154 113 154 114 150 114 145 114 154 115 145 115 144 115 144 116 136 116 154 116 154 117 136 117 135 117 154 118 135 118 152 118 152 119 135 119 126 119 152 120 126 120 149 120 149 121 126 121 125 121 149 122 125 122 121 122 19 123 7 123 21 123 21 124 7 124 27 124 3 125 2 125 4 125 4 126 2 126 7 126 4 127 7 127 14 127 14 128 7 128 19 128 27 129 7 129 36 129 36 130 7 130 9 130 36 131 9 131 37 131 37 132 9 132 11 132 37 133 11 133 41 133 11 134 42 134 41 134 68 135 51 135 55 135 68 136 55 136 73 136 55 137 61 137 73 137 73 138 61 138 66 138 73 139 66 139 76 139 66 140 70 140 76 140 76 141 70 141 75 141 76 142 75 142 80 142 75 143 78 143 80 143 80 144 78 144 82 144 80 145 82 145 84 145 82 146 87 146 84 146 84 147 87 147 90 147 84 148 90 148 88 148 90 149 95 149 88 149 88 150 95 150 98 150 88 151 98 151 92 151 112 152 96 152 108 152 108 153 96 153 92 153 108 154 92 154 103 154 103 155 92 155 98 155 5 156 15 156 20 156 6 157 0 157 1 157 157 158 156 158 155 158 155 159 156 159 153 159 155 160 153 160 143 160 143 161 153 161 142 161 142 162 153 162 151 162 142 163 151 163 137 163 151 164 148 164 137 164 137 165 148 165 146 165 137 166 146 166 132 166 146 167 140 167 132 167 132 168 140 168 138 168 132 169 138 169 122 169 138 170 133 170 122 170 122 171 133 171 127 171 122 172 127 172 116 172 127 173 123 173 116 173 116 174 123 174 118 174 116 175 118 175 106 175 118 176 111 176 106 176 106 177 111 177 107 177 106 178 107 178 99 178 107 179 102 179 99 179 99 180 102 180 97 180 99 181 97 181 93 181 97 182 94 182 93 182 93 183 94 183 89 183 93 184 89 184 85 184 89 185 86 185 85 185 85 186 86 186 81 186 85 187 81 187 79 187 81 188 77 188 79 188 79 189 77 189 74 189 79 190 74 190 72 190 74 191 69 191 72 191 72 192 69 192 65 192 72 193 65 193 64 193 65 194 60 194 64 194 64 195 60 195 54 195 64 196 54 196 56 196 54 197 50 197 56 197 56 198 50 198 43 198 56 199 43 199 46 199 43 200 38 200 46 200 46 201 38 201 34 201 46 202 34 202 40 202 34 203 28 203 40 203 40 204 28 204 24 204 40 205 24 205 30 205 24 206 22 206 30 206 30 207 22 207 12 207 30 208 12 208 26 208 1 209 5 209 6 209 6 210 5 210 20 210 6 211 20 211 8 211 8 212 20 212 26 212 8 213 26 213 10 213 10 214 26 214 12 214 129 215 91 215 130 215 32 216 71 216 31 216 58 217 59 217 83 217 83 218 59 218 104 218 83 219 104 219 105 219 253 220 254 220 266 220 253 221 266 221 265 221 247 222 245 222 264 222 264 223 245 223 243 223 264 224 243 224 230 224 266 225 254 225 264 225 264 226 254 226 249 226 264 227 249 227 247 227 194 228 195 228 186 228 186 229 195 229 196 229 252 230 197 230 250 230 268 231 269 231 262 231 262 232 269 232 270 232 262 233 270 233 273 233 262 234 267 234 268 234 212 235 203 235 206 235 210 236 212 236 206 236 189 237 198 237 192 237 233 238 187 238 238 238 241 239 242 239 239 239 255 240 265 240 238 240 209 241 190 241 191 241 266 242 264 242 271 242 238 243 263 243 261 243 266 244 271 244 272 244 266 245 272 245 265 245 265 246 272 246 263 246 265 247 263 247 238 247 183 248 180 248 172 248 172 249 180 249 179 249 177 250 172 250 178 250 178 251 172 251 179 251 170 252 169 252 173 252 170 253 173 253 175 253 175 254 173 254 182 254 175 255 182 255 176 255 176 256 182 256 181 256 176 257 181 257 174 257 219 258 220 258 222 258 226 259 227 259 229 259 237 260 236 260 235 260 235 261 236 261 234 261 235 262 234 262 232 262 232 263 234 263 231 263 232 264 231 264 229 264 229 265 231 265 228 265 229 266 228 266 226 266 227 267 226 267 225 267 225 268 226 268 224 268 225 269 224 269 222 269 222 270 224 270 221 270 222 271 221 271 219 271 220 272 219 272 218 272 218 273 219 273 217 273 218 274 217 274 215 274 209 275 211 275 215 275 209 276 215 276 214 276 214 277 215 277 217 277 185 278 167 278 191 278 191 279 167 279 168 279 191 280 168 280 183 280 211 281 209 281 191 281 211 282 191 282 195 282 195 283 191 283 183 283 195 284 183 284 196 284 175 285 176 285 189 285 189 286 176 286 193 286 204 287 174 287 207 287 207 288 174 288 208 288 193 289 176 289 199 289 199 290 176 290 174 290 199 291 174 291 201 291 201 292 174 292 204 292 237 293 197 293 257 293 237 294 257 294 236 294 280 295 260 295 281 295 281 296 260 296 257 296 281 297 257 297 273 297 273 298 257 298 197 298 273 299 197 299 252 299 218 300 205 300 220 300 220 301 205 301 222 301 222 302 205 302 225 302 211 303 205 303 215 303 215 304 205 304 218 304 227 305 205 305 229 305 229 306 205 306 232 306 225 307 205 307 227 307 235 308 232 308 237 308 237 309 232 309 205 309 160 310 162 310 169 310 169 311 162 311 173 311 163 312 177 312 178 312 163 313 178 313 164 313 164 314 178 314 179 314 164 315 179 315 165 315 165 316 179 316 180 316 165 317 180 317 166 317 168 318 166 318 183 318 183 319 166 319 180 319 173 320 162 320 182 320 182 321 162 321 167 321 182 322 167 322 184 322 184 323 167 323 185 323 162 324 161 324 163 324 162 325 163 325 164 325 168 326 167 326 166 326 166 327 167 327 162 327 166 328 162 328 165 328 165 329 162 329 164 329 181 330 182 330 190 330 190 331 182 331 184 331 190 332 184 332 191 332 191 333 184 333 185 333 172 334 186 334 183 334 273 335 252 335 262 335 262 336 252 336 250 336 183 337 186 337 196 337 275 338 274 338 263 338 263 339 274 339 261 339 259 340 260 340 272 340 272 341 260 341 280 341 272 342 280 342 263 342 263 343 280 343 275 343 279 344 281 344 270 344 270 345 281 345 273 345 279 346 270 346 269 346 279 347 269 347 278 347 278 348 269 348 268 348 278 349 268 349 277 349 277 350 268 350 267 350 277 351 267 351 276 351 280 352 281 352 275 352 275 353 281 353 279 353 275 354 279 354 278 354 276 355 274 355 275 355 276 356 275 356 277 356 277 357 275 357 278 357 256 358 259 358 271 358 271 359 259 359 272 359 259 360 256 360 260 360 260 361 256 361 257 361 254 362 253 362 249 362 249 363 253 363 248 363 241 364 230 364 243 364 241 365 243 365 242 365 242 366 243 366 245 366 242 367 245 367 244 367 244 368 245 368 247 368 244 369 247 369 246 369 246 370 247 370 249 370 246 371 249 371 248 371 213 372 210 372 208 372 230 373 241 373 240 373 230 374 240 374 223 374 213 375 208 375 223 375 223 376 208 376 230 376 198 377 199 377 201 377 198 378 201 378 200 378 200 379 201 379 204 379 200 380 204 380 203 380 203 381 204 381 207 381 203 382 207 382 206 382 206 383 207 383 208 383 206 384 208 384 210 384 199 385 198 385 193 385 193 386 198 386 189 386 205 387 211 387 195 387 197 388 205 388 195 388 197 389 237 389 205 389 195 390 194 390 197 390 224 391 226 391 202 391 236 392 230 392 202 392 231 393 202 393 228 393 202 394 226 394 228 394 230 395 256 395 264 395 256 396 271 396 264 396 236 397 202 397 234 397 202 398 231 398 234 398 217 399 202 399 214 399 202 400 209 400 214 400 181 401 190 401 174 401 190 402 208 402 174 402 221 403 224 403 202 403 208 404 202 404 230 404 257 405 256 405 236 405 256 406 230 406 236 406 208 407 190 407 209 407 208 408 209 408 202 408 219 409 221 409 202 409 219 410 202 410 217 410 44 411 51 411 68 411 44 412 68 412 63 412 39 413 44 413 63 413 35 414 39 414 63 414 35 415 63 415 62 415 29 416 35 416 62 416 25 417 29 417 62 417 11 418 49 418 42 418 11 419 13 419 49 419 25 420 62 420 59 420 25 421 59 421 58 421 23 422 25 422 58 422 23 423 58 423 57 423 23 424 57 424 53 424 13 425 23 425 53 425 13 426 53 426 52 426 13 427 52 427 49 427 96 428 112 428 119 428 96 429 119 429 100 429 100 430 119 430 124 430 100 431 124 431 128 431 100 432 128 432 101 432 101 433 128 433 134 433 101 434 134 434 104 434 104 435 134 435 105 435 105 436 134 436 139 436 105 437 139 437 141 437 120 438 147 438 149 438 117 439 147 439 120 439 115 440 147 440 117 440 115 441 141 441 147 441 109 442 141 442 115 442 105 443 141 443 109 443 17 444 33 444 32 444 27 445 36 445 47 445 114 446 110 446 115 446 53 447 48 447 52 447 105 448 109 448 67 448 57 449 48 449 53 449 18 450 21 450 27 450 47 451 45 451 33 451 105 452 67 452 83 452 47 453 67 453 45 453 18 454 27 454 33 454 27 455 47 455 33 455 37 456 48 456 36 456 48 457 47 457 36 457 125 458 126 458 114 458 126 459 113 459 114 459 21 460 18 460 19 460 18 461 14 461 19 461 5 462 4 462 17 462 4 463 14 463 17 463 4 464 5 464 3 464 5 465 1 465 3 465 17 466 32 466 31 466 17 467 31 467 16 467 5 468 17 468 15 468 17 469 16 469 15 469 126 470 135 470 136 470 126 471 136 471 113 471 157 472 155 472 159 472 155 473 150 473 159 473 33 474 17 474 18 474 17 475 14 475 18 475 131 476 136 476 144 476 155 477 143 477 131 477 155 478 131 478 150 478 130 479 131 479 143 479 130 480 143 480 129 480 117 481 120 481 114 481 117 482 114 482 115 482 49 483 52 483 48 483 49 484 48 484 42 484 110 485 114 485 67 485 110 486 67 486 109 486 114 487 120 487 121 487 114 488 121 488 125 488 41 489 42 489 48 489 41 490 48 490 37 490 67 491 57 491 58 491 67 492 58 492 83 492 145 493 150 493 131 493 145 494 131 494 144 494 48 495 57 495 67 495 48 496 67 496 47 496 170 497 175 497 188 497 250 498 251 498 194 498 250 499 194 499 186 499 212 500 200 500 203 500 244 501 239 501 242 501 192 502 170 502 188 502 246 503 239 503 244 503 187 504 212 504 239 504 212 505 223 505 239 505 212 506 187 506 192 506 187 507 170 507 192 507 239 508 255 508 187 508 255 509 238 509 187 509 216 510 187 510 233 510 170 511 187 511 216 511 248 512 253 512 255 512 253 513 265 513 255 513 248 514 255 514 239 514 248 515 239 515 246 515 241 516 239 516 240 516 239 517 223 517 240 517 210 518 213 518 212 518 213 519 223 519 212 519 198 520 200 520 212 520 198 521 212 521 192 521 192 522 188 522 189 522 188 523 175 523 189 523 351 524 332 524 350 524 345 525 332 525 344 525 344 526 332 526 341 526 322 527 282 527 324 527 336 528 335 528 333 528 331 529 328 529 327 529 283 530 282 530 288 530 288 531 282 531 294 531 325 532 282 532 329 532 349 533 347 533 342 533 346 534 345 534 337 534 289 535 292 535 291 535 286 536 284 536 287 536 287 537 284 537 289 537 287 538 289 538 290 538 290 539 289 539 291 539 292 540 289 540 293 540 293 541 289 541 295 541 293 542 295 542 296 542 296 543 295 543 297 543 297 544 295 544 298 544 298 545 295 545 300 545 298 546 300 546 301 546 301 547 300 547 302 547 301 548 302 548 304 548 311 549 310 549 308 549 308 550 310 550 309 550 308 551 309 551 306 551 304 552 302 552 305 552 305 553 302 553 306 553 306 554 302 554 308 554 318 555 316 555 315 555 315 556 316 556 314 556 311 557 308 557 314 557 314 558 308 558 313 558 314 559 313 559 315 559 327 560 315 560 321 560 330 561 338 561 326 561 326 562 338 562 336 562 326 563 336 563 333 563 326 564 333 564 331 564 326 565 331 565 321 565 321 566 331 566 327 566 337 567 345 567 330 567 345 568 344 568 330 568 330 569 344 569 341 569 330 570 341 570 340 570 330 571 340 571 338 571 346 572 337 572 347 572 347 573 337 573 342 573 348 574 351 574 342 574 348 575 342 575 339 575 342 576 351 576 350 576 342 577 350 577 349 577 348 578 332 578 351 578 315 579 313 579 312 579 307 580 308 580 303 580 320 581 325 581 326 581 283 582 288 582 289 582 283 583 289 583 284 583 294 584 295 584 289 584 288 585 294 585 289 585 294 586 299 586 295 586 308 587 302 587 303 587 303 588 302 588 299 588 299 589 302 589 300 589 299 590 300 590 295 590 313 591 308 591 312 591 312 592 308 592 307 592 312 593 317 593 315 593 326 594 321 594 320 594 320 595 321 595 315 595 320 596 315 596 317 596 330 597 326 597 329 597 329 598 326 598 325 598 337 599 330 599 334 599 334 600 330 600 329 600 343 601 339 601 342 601 334 602 343 602 342 602 334 603 342 603 337 603 372 604 377 604 376 604 376 605 377 605 381 605 376 606 381 606 379 606 379 607 381 607 380 607 380 608 381 608 383 608 383 609 381 609 385 609 383 610 385 610 384 610 393 611 392 611 389 611 392 612 390 612 389 612 389 613 390 613 388 613 389 614 388 614 385 614 385 615 388 615 387 615 385 616 387 616 384 616 399 617 402 617 401 617 399 618 401 618 395 618 395 619 401 619 398 619 393 620 389 620 395 620 393 621 395 621 394 621 394 622 395 622 397 622 397 623 395 623 398 623 410 624 408 624 412 624 412 625 408 625 413 625 413 626 408 626 284 626 413 627 284 627 286 627 410 628 409 628 408 628 408 629 409 629 407 629 408 630 407 630 404 630 404 631 407 631 406 631 404 632 406 632 399 632 399 633 406 633 403 633 399 634 403 634 402 634 354 635 355 635 359 635 359 636 357 636 356 636 354 637 359 637 356 637 357 638 359 638 358 638 358 639 359 639 360 639 360 640 359 640 365 640 360 641 365 641 362 641 362 642 365 642 363 642 363 643 365 643 364 643 364 644 365 644 370 644 364 645 370 645 367 645 367 646 370 646 373 646 367 647 373 647 368 647 377 648 372 648 368 648 368 649 373 649 377 649 413 650 286 650 285 650 394 651 397 651 285 651 383 652 285 652 380 652 390 653 285 653 388 653 358 654 353 654 357 654 357 655 353 655 354 655 357 656 354 656 356 656 368 657 369 657 353 657 368 658 353 658 367 658 364 659 367 659 363 659 363 660 367 660 353 660 363 661 353 661 362 661 362 662 353 662 358 662 362 663 358 663 360 663 282 664 283 664 411 664 352 665 354 665 324 665 324 666 354 666 353 666 282 667 352 667 324 667 372 668 375 668 369 668 372 669 369 669 368 669 411 670 283 670 284 670 284 671 408 671 411 671 411 672 408 672 405 672 408 673 404 673 405 673 405 674 404 674 399 674 405 675 399 675 400 675 400 676 399 676 395 676 400 677 395 677 396 677 396 678 395 678 391 678 395 679 389 679 391 679 391 680 389 680 386 680 389 681 385 681 386 681 386 682 385 682 381 682 386 683 381 683 382 683 382 684 381 684 377 684 382 685 377 685 378 685 378 686 377 686 374 686 377 687 373 687 374 687 374 688 373 688 371 688 373 689 370 689 371 689 371 690 370 690 365 690 371 691 365 691 366 691 359 692 355 692 361 692 359 693 361 693 366 693 359 694 366 694 365 694 352 695 355 695 354 695 282 696 322 696 332 696 282 697 348 697 339 697 282 698 332 698 348 698 332 699 328 699 335 699 285 700 328 700 332 700 285 701 332 701 322 701 285 702 322 702 324 702 353 703 369 703 375 703 285 704 324 704 353 704 285 705 353 705 375 705 282 706 299 706 294 706 282 707 339 707 343 707 352 708 361 708 355 708 320 709 282 709 325 709 282 710 411 710 405 710 334 711 282 711 343 711 366 712 361 712 352 712 329 713 282 713 334 713 371 714 366 714 352 714 307 715 282 715 312 715 299 716 282 716 303 716 303 717 282 717 307 717 312 718 282 718 317 718 317 719 282 719 320 719 374 720 371 720 352 720 378 721 374 721 352 721 382 722 378 722 352 722 386 723 382 723 352 723 391 724 386 724 352 724 396 725 391 725 352 725 400 726 396 726 352 726 405 727 400 727 352 727 352 728 282 728 405 728 340 729 341 729 332 729 340 730 332 730 338 730 346 731 347 731 332 731 346 732 332 732 345 732 332 733 347 733 349 733 332 734 349 734 350 734 338 735 332 735 335 735 338 736 335 736 336 736 335 737 328 737 331 737 335 738 331 738 333 738 323 739 327 739 328 739 315 740 319 740 318 740 315 741 323 741 319 741 315 742 327 742 323 742 379 743 380 743 285 743 387 744 388 744 285 744 393 745 394 745 285 745 376 746 375 746 372 746 304 747 305 747 285 747 285 748 375 748 379 748 375 749 376 749 379 749 323 750 328 750 319 750 328 751 285 751 319 751 285 752 290 752 291 752 285 753 291 753 292 753 287 754 290 754 285 754 287 755 285 755 286 755 293 756 296 756 285 756 293 757 285 757 292 757 285 758 298 758 301 758 285 759 301 759 304 759 285 760 296 760 297 760 285 761 297 761 298 761 285 762 305 762 306 762 285 763 306 763 309 763 285 764 410 764 412 764 285 765 412 765 413 765 285 766 403 766 406 766 285 767 406 767 407 767 285 768 309 768 310 768 285 769 310 769 311 769 285 770 311 770 314 770 285 771 314 771 316 771 285 772 316 772 318 772 285 773 318 773 319 773 285 774 407 774 409 774 285 775 409 775 410 775 285 776 401 776 402 776 285 777 402 777 403 777 398 778 401 778 285 778 398 779 285 779 397 779 392 780 393 780 285 780 392 781 285 781 390 781 384 782 387 782 285 782 384 783 285 783 383 783 197 784 251 784 250 784 194 785 251 785 197 785 113 786 136 786 131 786 258 787 274 787 276 787 67 788 114 788 113 788 160 789 161 789 162 789 258 790 276 790 267 790 161 791 258 791 267 791 161 792 267 792 177 792 161 793 177 793 163 793 172 794 177 794 186 794 177 795 267 795 186 795 186 796 267 796 250 796 250 797 267 797 262 797

45 171 33 171 322 366

-0.30000 0.24700 -0.55802 -0.30000 0.24700 -0.39016 -0.30000 0.26107 -0.39921 -0.30000 0.27013 -0.55164 -0.30000 0.29749 -0.42394 -0.30000 0.29938 -0.54297 -0.30000 0.32036 -0.53675 -0.30000 0.33364 -0.45002 -0.30000 0.37027 -0.47783 -0.30000 0.37027 -0.52080 -0.28007 0.24700 -0.37493 -0.25000 0.24700 -0.47100 -0.26141 0.24700 -0.57035 -0.25966 0.39970 -0.52080 -0.25966 0.39970 -0.47783 -0.24833 0.24700 -0.57426 -0.24597 0.24700 -0.35000 -0.22402 0.24700 -0.58151 -0.21982 0.27072 -0.35000 -0.21648 0.42476 -0.52080 -0.21648 0.42476 -0.47783 -0.20085 0.24700 -0.58783 -0.19030 0.29237 -0.35000 -0.18773 0.24700 -0.59141 -0.17091 0.44516 -0.52080 -0.17091 0.44516 -0.47783 -0.16086 0.24700 -0.59791 -0.15867 0.31079 -0.35000 -0.15220 0.24700 -0.60000 -0.13110 0.25782 -0.60000 -0.12528 0.32578 -0.35000 -0.12345 0.46066 -0.52080 -0.12345 0.46066 -0.47783 -0.11000 0.24700 -0.60000 -0.11000 0.24700 -0.46847 -0.11000 0.26863 -0.60000 -0.11000 0.29158 -0.59094 -0.07462 0.47109 -0.52080 -0.09049 0.33717 -0.35000 -0.07907 0.29287 -0.59448 -0.07854 0.29288 -0.59452 -0.07462 0.47109 -0.47783 -0.05470 0.34484 -0.35000 -0.04657 0.29377 -0.59697 -0.02497 0.47634 -0.52080 -0.02497 0.47634 -0.47783 -0.01830 0.34869 -0.35000 -0.01543 0.29421 -0.59817 0.01543 0.29421 -0.59816 0.01830 0.34869 -0.35000 0.02504 0.47634 -0.52080 0.02504 0.47634 -0.47783 0.04262 0.29387 -0.59723 0.05470 0.34484 -0.35000 0.07352 0.29306 -0.59500 0.07462 0.47109 -0.52080 0.07484 0.47107 -0.47783 0.09049 0.33717 -0.35000 0.11000 0.29158 -0.59094 0.11000 0.24700 -0.60000 0.11000 0.24700 -0.46847 0.11000 0.26863 -0.60000 0.12381 0.46058 -0.52080 0.12381 0.46058 -0.47783 0.12528 0.32578 -0.35000 0.13183 0.25854 -0.60000 0.15220 0.24700 -0.60000 0.15867 0.31079 -0.35000 0.16086 0.24700 -0.59791 0.17141 0.44500 -0.52080 0.17141 0.44500 -0.47783 0.18762 0.24700 -0.59144 0.19030 0.29237 -0.35000 0.20097 0.24700 -0.58777 0.21710 0.42449 -0.52080 0.21710 0.42449 -0.47783 0.21982 0.27072 -0.35000 0.23010 0.24700 -0.57976 0.25000 0.24700 -0.47100 0.26037 0.39928 -0.47783 0.24597 0.24700 -0.35000 0.24863 0.24700 -0.57411 0.26037 0.39928 -0.52080 0.27656 0.24700 -0.56560 0.30000 0.24700 -0.55802 0.30000 0.24700 -0.39016 0.30000 0.26107 -0.39921 0.30000 0.27013 -0.55164 0.30000 0.27080 -0.40563 0.30000 0.30108 -0.42648 0.30000 0.29938 -0.54297 0.30000 0.32041 -0.53673 0.30000 0.33652 -0.45217 0.30000 0.37027 -0.47783 0.30000 0.37027 -0.52080 -0.14994 0.00623 -0.62000 -0.14994 0.00623 -0.54000 -0.14724 -0.02664 -0.62000 -0.14724 -0.02664 -0.54000 -0.14539 0.03891 -0.62000 -0.14539 0.03891 -0.54000 -0.13587 -0.08508 -0.62000 -0.13587 -0.08508 -0.54000 -0.11700 0.00200 -0.54000 -0.13381 0.06979 -0.62000 -0.13381 0.06979 -0.54000 -0.12200 0.00200 -0.62000 -0.12981 -0.11621 -0.54000 -0.12937 -0.11848 -0.62000 -0.11575 0.09740 -0.62000 -0.11575 0.09740 -0.54000 -0.12000 0.00200 -0.61800 -0.12000 0.00200 -0.61000 -0.11846 -0.02719 -0.62000 -0.11846 0.03120 -0.62000 -0.10996 -0.21828 -0.62000 -0.10878 -0.04107 -0.54000 -0.09465 0.07077 -0.54000 -0.11746 -0.17971 -0.54000 -0.09465 -0.06677 -0.54000 -0.11608 0.01667 -0.54000 -0.11651 -0.02672 -0.61800 -0.11651 0.03072 -0.61800 -0.11623 -0.02784 -0.61000 -0.11623 0.03184 -0.61000 -0.11608 -0.01266 -0.54000 -0.11500 0.00200 -0.61000 -0.11500 0.00200 -0.54200 -0.10803 -0.05469 -0.62000 -0.10803 0.05870 -0.62000 -0.11409 -0.01241 -0.61000 -0.11409 -0.01241 -0.54200 -0.11409 0.01642 -0.61000 -0.11409 0.01642 -0.54200 -0.10878 0.04507 -0.54000 -0.10692 -0.04033 -0.61000 -0.10692 -0.04033 -0.54200 -0.10692 0.04434 -0.61000 -0.10692 0.04434 -0.54200 -0.10626 -0.05377 -0.61800 -0.10626 0.05777 -0.61800 -0.10516 -0.05581 -0.61000 -0.10516 0.05981 -0.61000 -0.10000 0.24222 -0.49042 -0.10000 0.25350 -0.48631 -0.10000 0.25932 -0.53740 -0.10000 0.27642 -0.58438 -0.10000 0.28770 -0.58028 -0.09985 -0.27024 -0.59000 -0.09306 0.11946 -0.54000 -0.09304 -0.06559 -0.61000 -0.09304 -0.06559 -0.54200 -0.09304 0.06960 -0.61000 -0.09304 0.06960 -0.54200 -0.09250 -0.30800 -0.54500 -0.09250 -0.30800 -0.54000 -0.09216 0.12034 -0.62000 0.07358 0.24615 -0.53811 -0.09132 -0.07890 -0.62000 -0.09132 0.08290 -0.62000 -0.09000 -0.28985 -0.53900 -0.09000 -0.17232 -0.53900 -0.08916 -0.16568 -0.53921 -0.08915 -0.29649 -0.53879 -0.09000 -0.43464 -0.36639 -0.09000 -0.36570 -0.30854 -0.09000 -0.34984 -0.29523 -0.08982 -0.07757 -0.61800 -0.08982 0.08158 -0.61800 -0.08979 -0.44620 -0.38420 -0.08950 -0.45018 -0.37945 -0.08920 -0.43079 -0.37880 -0.08924 -0.35430 -0.31479 -0.08884 -0.45944 -0.36842 -0.08850 -0.42933 -0.38330 -0.08858 -0.35018 -0.31712 -0.08800 -0.34831 -0.29395 -0.08779 -0.44782 -0.38538 -0.08698 -0.16021 -0.53939 -0.08696 -0.30195 -0.53861 -0.08748 -0.08014 -0.61000 -0.08748 0.08415 -0.61000 -0.08708 -0.30800 -0.54000 0.10996 -0.21828 -0.62000 -0.07458 -0.08815 -0.54000 -0.07458 0.09215 -0.54000 -0.04326 0.11607 -0.62000 -0.08708 0.12348 -0.54000 -0.08693 -0.36482 -0.27739 -0.08693 -0.33487 -0.31308 -0.08582 -0.42552 -0.39412 -0.08604 -0.34030 -0.32300 -0.08545 -0.43203 -0.40108 -0.08641 -0.45548 -0.35365 -0.08500 -0.36295 -0.27650 -0.08500 -0.33367 -0.31139 -0.08355 -0.43397 -0.40189 -0.08412 -0.15635 -0.53951 -0.08410 -0.30580 -0.53849 -0.08354 -0.45082 -0.33626 -0.08022 -0.30800 -0.53920 -0.07937 -0.32643 -0.33302 -0.08198 -0.42144 -0.40378 -0.00337 -0.35048 -0.29136 -0.08107 -0.15392 -0.53959 -0.07878 -0.41840 -0.40956 -0.07802 -0.15261 -0.53963 -0.07794 -0.37877 -0.26076 -0.07794 -0.32092 -0.32970 -0.07579 -0.41899 -0.41662 -0.07750 -0.44573 -0.31726 -0.07712 0.24222 -0.49042 -0.07712 0.25932 -0.53740 -0.08404 0.24957 -0.54751 -0.07621 -0.37659 -0.26024 -0.07621 -0.32003 -0.32765 -0.07418 -0.41414 -0.41572 -0.07500 -0.32108 -0.33838 -0.07500 -0.30800 -0.54066 -0.07500 -0.15220 -0.53964 -0.07248 -0.44204 -0.30349 -0.07410 -0.42122 -0.41708 -0.07330 -0.08661 -0.61000 -0.07330 -0.08661 -0.54200 -0.07330 0.09061 -0.61000 -0.07330 0.09061 -0.54200 -0.04982 -0.10386 -0.54000 -0.07000 0.25055 -0.51622 -0.07100 0.25932 -0.53740 -0.07000 0.26621 -0.55926 -0.06970 0.24963 -0.51369 -0.06959 0.26729 -0.56220 -0.07053 0.13439 -0.60692 -0.07053 0.13439 -0.55818 -0.07052 0.13439 -0.60757 -0.07016 0.13458 -0.55479 -0.07009 0.13462 -0.61042 -0.06975 0.13480 -0.61154 -0.06974 0.13480 -0.55326 -0.06880 0.24875 -0.51129 -0.06930 -0.09840 -0.62000 -0.06930 0.10241 -0.62000 -0.06838 0.26828 -0.56495 -0.06859 0.13540 -0.61387 -0.06814 0.13563 -0.54967 -0.06817 -0.09676 -0.61800 -0.06817 0.10076 -0.61800 -0.06736 0.24797 -0.50913 -0.06769 0.13586 -0.61508 -0.06765 0.13588 -0.54888 -0.06646 0.26914 -0.56730 -0.06544 0.24731 -0.50733 -0.06581 0.13680 -0.61679 -0.06395 0.26980 -0.56911 -0.06501 0.13718 -0.54576 -0.06443 0.13746 -0.61761 -0.06430 -0.09932 -0.61000 -0.06430 0.10332 -0.61000 -0.06399 0.13767 -0.62000 -0.06399 0.13767 -0.54488 -0.06399 0.13767 -0.54000 -0.06315 0.24682 -0.50598 -0.06297 -0.40557 -0.42593 -0.06367 -0.31242 -0.34870 -0.06364 -0.39075 -0.24648 -0.06364 -0.30894 -0.34398 -0.06124 -0.43616 -0.28157 -0.06140 -0.40790 -0.42984 -0.06183 0.13867 -0.61851 -0.06222 -0.38831 -0.24628 -0.06222 -0.30831 -0.34161 -0.06103 0.27021 -0.57024 -0.06086 0.13910 -0.54298 -0.06059 0.24652 -0.50514 -0.06064 0.13920 -0.61869 -0.06004 -0.41037 -0.43001 -0.05895 0.13993 -0.54230 -0.05752 0.14054 -0.61861 -0.05752 0.14054 -0.54199 -0.05790 0.24641 -0.50485 -0.05790 0.27035 -0.57063 -0.04223 -0.40210 -0.43986 -0.04400 -0.39730 -0.23557 -0.04400 -0.29932 -0.35233 -0.04942 -0.39855 -0.43429 -0.04997 -0.30532 -0.35716 -0.04982 0.10787 -0.54000 -0.04896 -0.10205 -0.61000 -0.04896 -0.10205 -0.54200 -0.04896 0.10606 -0.61000 -0.04896 0.10606 -0.54200 -0.04498 -0.43077 -0.26143 -0.04500 -0.39994 -0.23553 -0.04500 -0.29974 -0.35494 -0.04319 -0.39944 -0.43992 -0.04455 0.14523 -0.54027 -0.04326 -0.11207 -0.62000 -0.04255 -0.11020 -0.61800 -0.04255 0.11420 -0.61800 -0.03156 0.14968 -0.54000 -0.03832 0.14702 -0.61623 -0.03708 -0.11213 -0.61000 -0.03708 0.11613 -0.61000 -0.03401 -0.39334 -0.44051 -0.03439 -0.30005 -0.36344 -0.03279 0.14837 -0.62000 -0.03271 0.14787 -0.61592 -0.01471 -0.11911 -0.62000 -0.02192 -0.11293 -0.54000 -0.02192 0.11693 -0.54000 -0.03187 0.14848 -0.62000 -0.02877 -0.42744 -0.24902 -0.02329 -0.40572 -0.22864 -0.02329 -0.29396 -0.36183 -0.02229 -0.39415 -0.44623 -0.01733 -0.39013 -0.44433 -0.01752 -0.29681 -0.36730 -0.02278 -0.40295 -0.22883 -0.02278 -0.29367 -0.35906 -0.02180 -0.39692 -0.44604 -0.02155 -0.11096 -0.61000 -0.02155 -0.11096 -0.54200 -0.02155 0.11496 -0.61000 -0.02155 0.11496 -0.54200 -0.01410 -0.42581 -0.24295 -0.01471 0.12311 -0.62000 -0.01446 -0.11712 -0.61800 -0.01446 0.12113 -0.61800 -0.00753 -0.11776 -0.61000 -0.00753 0.12176 -0.61000 0.00735 -0.11477 -0.54000 -0.00616 0.15188 -0.61445 0.01471 -0.11911 -0.62000 -0.00000 -0.42533 -0.24112 -0.00004 0.15146 -0.61461 0.00000 -0.40769 -0.22629 0.00000 -0.40488 -0.22654 0.00000 -0.39516 -0.44814 0.00000 -0.39234 -0.44838 0.00000 -0.38905 -0.44562 0.00000 -0.29572 -0.36861 0.00000 -0.29199 -0.36418 0.00000 -0.29175 -0.36136 0.00000 0.15200 -0.62000 0.00722 -0.11277 -0.61000 0.00722 -0.11277 -0.54200 0.00722 0.11677 -0.61000 0.00722 0.11677 -0.54200 0.00735 0.11877 -0.54000 0.01324 -0.42575 -0.24272 0.01446 -0.11712 -0.61800 0.01446 0.12113 -0.61800 0.01471 0.12311 -0.62000 0.01733 -0.39013 -0.44433 0.01752 -0.29681 -0.36730 0.02278 -0.40295 -0.22883 0.02180 -0.39692 -0.44604 0.02278 -0.29367 -0.35906 0.02229 -0.39415 -0.44623 0.02249 -0.11587 -0.61000 0.02249 0.11988 -0.61000 0.02782 -0.42730 -0.24849 0.02329 -0.40572 -0.22864 0.02329 -0.29396 -0.36183 0.04326 -0.11207 -0.62000 0.02630 0.14968 -0.61526 0.03158 0.14963 -0.54001 0.07500 -0.15220 -0.53964 0.03616 -0.10927 -0.54000 0.03616 0.11328 -0.54000 0.04326 0.11607 -0.62000 0.03187 0.14848 -0.62000 0.03263 0.14782 -0.61594 0.03401 -0.39334 -0.44051 0.03439 -0.30005 -0.36344 0.03554 -0.10737 -0.61000 0.03554 -0.10737 -0.54200 0.03554 0.11137 -0.61000 0.03554 0.11137 -0.54200 0.04223 -0.40210 -0.43986 0.04255 -0.11020 -0.61800 0.04255 0.11420 -0.61800 0.04319 -0.39944 -0.43992 0.04400 -0.39730 -0.23557 0.04400 -0.29932 -0.35233 0.04495 -0.43079 -0.26151 0.04455 0.14523 -0.54027 0.04942 -0.39855 -0.43429 0.04996 -0.30532 -0.35716 0.04500 -0.39994 -0.23553 0.04500 -0.29974 -0.35494 0.05109 -0.10658 -0.61000 0.05109 0.11058 -0.61000 0.06004 -0.41037 -0.43001 0.06269 -0.09678 -0.54000 0.05752 0.14054 -0.54199 0.05752 0.14054 -0.61861 0.05790 0.24641 -0.50485 0.05790 0.27035 -0.57063 0.05880 0.14000 -0.61874 0.12937 -0.11848 -0.62000 0.06930 0.10241 -0.62000 0.05962 0.13964 -0.61875 0.06032 -0.43578 -0.28015 0.06059 0.24652 -0.50514 0.06059 0.27025 -0.57035 0.06080 0.13913 -0.54295 0.06140 -0.40790 -0.42984 0.06162 -0.09510 -0.61000 0.06162 -0.09510 -0.54200 0.06162 0.09910 -0.61000 0.06162 0.09910 -0.54200 0.06217 0.13851 -0.54365 0.06222 -0.38831 -0.24628 0.06222 -0.30831 -0.34161 0.06260 0.13831 -0.61831 0.06269 0.10079 -0.54000 0.06297 -0.40557 -0.42593 0.06367 -0.31242 -0.34870 0.06337 0.13796 -0.61806 0.06315 0.24682 -0.50598 0.06315 0.26994 -0.56951 0.06364 -0.39075 -0.24648 0.06364 -0.30894 -0.34398 0.06399 0.13766 -0.54504 0.06399 0.13767 -0.62000 0.06399 0.13767 -0.54000 0.06530 0.13704 -0.54604 0.06578 0.13681 -0.61681 0.06544 0.24731 -0.50733 0.06544 0.26945 -0.56815 0.06605 0.13668 -0.54682 0.06656 0.13642 -0.61620 0.06736 0.24797 -0.50913 0.06829 0.13555 -0.61431 0.06736 0.26879 -0.56635 0.06839 0.13550 -0.55011 0.06817 -0.09676 -0.61800 0.06817 0.10076 -0.61800 0.06880 0.24875 -0.51129 0.06916 0.13511 -0.55169 0.06897 0.13520 -0.61324 0.06880 0.26801 -0.56419 0.06930 -0.09840 -0.62000 0.07621 -0.37659 -0.26024 0.07621 -0.32003 -0.32765 0.06998 0.13468 -0.61083 0.07023 0.13455 -0.55513 0.06970 0.24963 -0.51369 0.07024 0.13454 -0.60979 0.06970 0.26714 -0.56179 0.07044 0.13444 -0.55648 0.07053 0.13439 -0.60692 0.07053 0.13439 -0.55818 0.07000 0.25055 -0.51622 0.07000 0.26621 -0.55926 0.07100 0.25932 -0.53740 0.07262 -0.44204 -0.30349 0.07410 -0.42122 -0.41708 0.07418 -0.41414 -0.41572 0.07500 -0.32108 -0.33838 0.07500 -0.30800 -0.54066 0.07579 -0.41899 -0.41662 0.07649 -0.09046 -0.61000 0.07649 0.09446 -0.61000 0.08529 -0.07809 -0.54000 0.08529 0.08209 -0.54000 0.07878 -0.41840 -0.40956 0.07937 -0.32643 -0.33302 0.07794 -0.37877 -0.26076 0.07794 -0.32092 -0.32970 0.07802 -0.15261 -0.53963 0.07865 -0.30800 -0.53995 0.08150 -0.30792 -0.53842 0.08107 -0.15392 -0.53959 0.08198 -0.42144 -0.40378 0.08240 -0.33157 -0.32891 0.08307 -0.45030 -0.33431 0.08750 0.24564 -0.49981 0.08355 -0.43397 -0.40189 0.08383 -0.07672 -0.61000 0.08383 -0.07672 -0.54200 0.08383 0.08072 -0.61000 0.08383 0.08072 -0.54200 0.08412 -0.30578 -0.53849 0.08412 -0.15635 -0.53951 0.09132 -0.07890 -0.62000 0.09132 0.08290 -0.62000 0.08500 -0.36295 -0.27650 0.08500 -0.33367 -0.31139 0.08545 -0.43203 -0.40108 0.08604 -0.34030 -0.32300 0.08582 -0.42552 -0.39412 0.08643 -0.45548 -0.35365 0.08698 -0.30192 -0.53861 0.08693 -0.36482 -0.27739 0.08693 -0.33487 -0.31308 0.08698 -0.16021 -0.53939 0.08708 -0.30800 -0.54000 0.08708 -0.11621 -0.54000 0.09216 0.12034 -0.62000 0.08708 0.12348 -0.62000 0.08708 0.12348 -0.54000 0.08779 -0.44782 -0.38538 0.08858 -0.35018 -0.31712 0.08800 -0.34831 -0.29395 0.08916 -0.29645 -0.53879 0.08850 -0.42933 -0.38330 0.08884 -0.45944 -0.36842 0.08916 -0.16568 -0.53921 0.08920 -0.43079 -0.37880 0.08924 -0.35430 -0.31479 0.08950 -0.45018 -0.37945 0.08979 -0.44620 -0.38420 0.08982 -0.07757 -0.61800 0.08982 0.08158 -0.61800 0.09000 -0.43463 -0.36645 0.09000 -0.43463 -0.36645 0.09000 -0.43463 -0.36645 0.09000 -0.43463 -0.36645 0.09000 -0.43463 -0.36645 0.09000 -0.43462 -0.36645 0.09000 -0.43462 -0.36645 0.09000 -0.36570 -0.30854 0.09000 -0.43464 -0.36639 0.09000 -0.34984 -0.29523 0.09000 -0.28981 -0.53900 0.09000 -0.17232 -0.53900 0.09210 0.12040 -0.54000 0.09250 -0.30800 -0.54500 0.09250 -0.30800 -0.54000 0.10625 -0.05377 -0.61800 0.09708 -0.06853 -0.61000 0.09708 0.07254 -0.61000 0.09985 -0.27024 -0.59000 0.10000 0.24222 -0.49042 0.10000 0.25350 -0.48631 0.10000 0.25932 -0.53740 0.10000 0.27642 -0.58438 0.10000 0.28770 -0.58028 0.10078 -0.05340 -0.61000 0.10078 -0.05340 -0.54200 0.10078 0.05740 -0.61000 0.10078 0.05740 -0.54200 0.10253 -0.05436 -0.54000 0.10253 0.05837 -0.54000 0.10803 -0.05469 -0.62000 0.10803 0.05870 -0.62000 0.10625 0.05777 -0.61800 0.11139 -0.02660 -0.61000 0.11139 -0.02660 -0.54200 0.11139 0.03060 -0.61000 0.11139 0.03060 -0.54200 0.11157 -0.04217 -0.61000 0.11157 0.04618 -0.61000 0.11332 -0.02710 -0.54000 0.11332 0.03110 -0.54000 0.11500 0.00200 -0.61000 0.11500 0.00200 -0.54200 0.11575 0.09740 -0.62000 0.11575 0.09740 -0.54000 0.11651 -0.02672 -0.61800 0.11651 0.03072 -0.61800 0.11700 0.00200 -0.54000 0.11845 -0.02719 -0.62000 0.11845 0.03120 -0.62000 0.11746 -0.17971 -0.54000 0.12981 -0.11621 -0.54000 0.13587 -0.08508 -0.54000 0.12000 0.00200 -0.61800 0.11905 -0.01304 -0.61000 0.11905 0.01704 -0.61000 0.12200 0.00200 -0.62000 0.13381 0.06979 -0.62000 0.13381 0.06979 -0.54000 0.13587 -0.08508 -0.62000 0.14539 0.03891 -0.62000 0.14539 0.03891 -0.54000 0.14661 -0.02987 -0.62000 0.14661 -0.02987 -0.54000 0.14994 0.00623 -0.62000 0.14994 0.00623 -0.54000 0.00000 -0.45944 -0.36842 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.23094 0.31664 -0.92000 -0.25115 0.29865 -0.92072 -0.25678 0.29407 -0.92064 -0.25097 0.30140 -0.91988 -0.27892 0.27296 -0.92071 -0.27473 0.27870 -0.92025 -0.28070 0.27278 -0.92022 -0.27412 0.28560 -0.91831 -0.29443 0.25412 -0.92127 -0.15976 0.35695 -0.92036 -0.18490 0.36078 -0.91414 -0.16708 0.35152 -0.92115 -0.19557 0.33688 -0.92101 -0.17957 0.35039 -0.91923 -0.22247 0.32091 -0.92061 -0.22249 0.32090 -0.92061 -0.12086 0.37231 -0.92020 -0.08411 0.39241 -0.91594 -0.12144 0.37188 -0.92030 -0.08110 0.38268 -0.92031 -0.08170 0.38243 -0.92037 -0.04076 0.38891 -0.92037 -0.04111 0.38880 -0.92040 0.00031 0.39097 -0.92040 0.00000 0.39091 -0.92043 0.03639 0.38903 -0.92051 0.04123 0.38935 -0.92017 0.07627 0.38318 -0.92052 0.08182 0.38298 -0.92013 0.11759 0.37244 -0.92058 0.12180 0.37195 -0.92023 0.14374 0.36330 -0.92052 0.16040 0.35731 -0.92011 0.16407 0.35493 -0.92038 0.19268 0.34023 -0.92039 0.19714 0.33847 -0.92009 0.22240 0.32082 -0.92066 0.22244 0.32079 -0.92066 0.23145 0.31620 -0.92003 0.25324 0.29676 -0.92076 0.29758 0.25386 -0.92033 0.28064 0.27124 -0.92069 0.27981 0.27287 -0.92046 0.28053 0.27216 -0.92045 0.27997 0.27288 -0.92041 0.25313 0.29835 -0.92028 0.25650 0.29411 -0.92071 -0.20893 0.97793 0.00000 -0.20893 0.97793 0.00000 -0.31044 0.95059 0.00000 -0.31044 0.95059 0.00000 -0.40853 0.91275 0.00000 -0.40853 0.91275 0.00000 -0.50207 0.86483 0.00000 -0.50207 0.86483 0.00000 -0.58928 0.80793 0.00000 -0.58928 0.80793 0.00000 -0.10515 0.99446 0.00000 -0.10515 0.99446 0.00000 0.00000 1.00000 0.00000 0.10529 0.99444 -0.00002 0.10530 0.99444 0.00000 0.00000 1.00000 0.00000 0.20940 0.97783 -0.00057 0.20893 0.97793 0.00000 0.31119 0.95035 0.00000 0.31119 0.95035 0.00000 0.40953 0.91229 0.00000 0.40953 0.91229 0.00000 0.50330 0.86411 0.00000 0.50330 0.86411 0.00000 0.59066 0.80692 0.00000 0.59066 0.80692 0.00000 0.41794 0.57096 0.70664 0.41845 0.57044 0.70675 0.51344 0.48666 0.70678 0.47538 0.52429 0.70649 0.48209 0.51406 0.70946 0.45964 0.53753 0.70696 0.52477 0.46916 0.71028 0.53011 0.45869 0.71315 -0.54049 0.45513 0.70762 -0.51587 0.48614 0.70537 -0.51902 0.48019 0.70713 0.35614 0.61144 0.70662 0.35613 0.61144 0.70662 0.28978 0.64554 0.70662 0.28978 0.64554 0.70662 0.22020 0.67246 0.70662 0.22020 0.67246 0.70662 0.14817 0.69191 0.70662 0.14818 0.69191 0.70662 0.07450 0.70366 0.70662 0.07450 0.70366 0.70662 0.00000 0.70760 0.70662 -0.00000 0.70760 0.70662 -0.14785 0.69204 0.70656 -0.07450 0.70367 0.70661 -0.07440 0.70369 0.70660 -0.14818 0.69191 0.70662 -0.21969 0.67273 0.70652 -0.22020 0.67246 0.70662 -0.28978 0.64554 0.70662 -0.28912 0.64598 0.70649 -0.41708 0.57184 0.70643 -0.41845 0.57044 0.70675 -0.46082 0.53654 0.70694 -0.47390 0.52266 0.70869 -0.49059 0.50989 0.70664 -0.35534 0.61210 0.70645 -0.35613 0.61144 0.70662 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 0.00000 -1.00000 0.00000 -0.22231 0.97498 0.25723 -0.28488 0.92340 -0.10287 -0.46480 0.87942 -0.31725 -0.20590 0.92572 0.00000 -0.22358 0.97469 -0.19450 -0.04671 0.97979 0.93633 0.35112 -0.00000 0.41208 0.91113 0.00494 0.39968 0.91642 0.02096 0.35539 0.91926 0.16929 0.20325 0.55096 0.80940 0.52026 0.84976 -0.08502 0.52718 0.84777 -0.05794 0.52524 0.84851 -0.06442 0.53163 0.84615 -0.03731 0.53616 0.84381 -0.02270 0.54110 0.84094 0.00502 0.54409 0.83903 0.00000 0.52435 0.85047 0.04195 0.52294 0.85119 0.04483 0.53002 0.84758 0.02639 0.53642 0.84384 0.01364 0.51591 0.85438 0.06221 0.50886 0.85636 0.08777 0.52331 0.85177 0.02532 0.42353 0.90588 -0.00196 0.42351 0.90589 -0.00196 0.40901 0.91244 -0.01285 0.42077 0.90717 -0.00116 0.52306 0.85135 0.04009 0.50071 0.84513 -0.18720 0.51307 0.84950 -0.12292 0.10913 0.98652 -0.12197 0.28943 0.95207 0.09896 0.28940 0.95208 0.09896 0.28862 0.85764 -0.42562 0.36708 0.91346 -0.17560 0.39164 0.91661 -0.08030 -0.42046 0.90731 0.00168 -0.40984 0.91200 -0.01685 -0.39150 0.91749 -0.07025 -0.29705 0.86567 -0.40297 -0.30593 0.94563 -0.11044 -0.15468 0.98015 0.12402 -0.10907 0.98628 0.12393 -0.15432 0.98143 0.11392 -0.10941 0.98905 -0.09903 0.06977 0.99254 0.10003 0.06965 0.99254 0.10003 -0.51938 0.85282 0.05425 -0.55717 0.82890 -0.04987 -0.53222 0.84555 0.04229 -0.53927 0.84175 0.02550 -0.54468 0.83865 0.00000 -0.54408 0.83903 -0.00141 -0.53904 0.84217 -0.01372 -0.53449 0.84471 -0.02800 -0.52979 0.84697 -0.04433 -0.52450 0.84863 -0.06873 -0.51748 0.84918 -0.10537 -0.52289 0.84993 -0.06479 -0.43515 0.90036 -0.00160 -0.40408 0.91460 0.01515 -0.21235 0.57370 0.79106 -0.35539 0.91926 0.16929 -0.39501 0.91788 0.03828 -0.41613 0.90930 -0.00007 -0.52348 0.85204 -0.00015 -0.50308 0.85709 0.11098 -0.51157 0.85591 0.07565 -0.99044 0.13796 0.00000 -0.99044 0.13796 0.00000 -0.93633 0.35112 0.00000 -0.54588 0.83779 0.01119 -0.55056 0.83479 0.00294 -0.69705 0.71702 0.00000 -0.69705 0.71702 0.00000 -0.83694 0.54729 0.00000 -0.83694 0.54729 0.00000 -0.93633 0.35112 0.00000 0.54068 0.84118 -0.00934 0.54458 0.83871 -0.00022 0.69705 0.71702 -0.00001 0.69706 0.71701 -0.00000 0.83694 0.54729 0.00000 0.83694 0.54729 0.00000 0.93633 0.35112 0.00000 0.99044 0.13796 0.00000 0.99044 0.13796 0.00000 0.99866 -0.04814 0.01917 0.98241 -0.06031 0.17670 0.98832 -0.09797 0.11675 0.88001 -0.29018 0.37602 0.92360 -0.26484 0.27718 0.79334 -0.38512 0.47148 0.74331 -0.43485 0.50833 0.60875 -0.51172 0.60627 0.59136 -0.51038 0.62434 0.13054 -0.63831 0.75863 0.07682 -0.59896 0.79709 0.22581 -0.63358 0.73999 0.38263 -0.58087 0.71846 0.41000 -0.58800 0.69725 -0.07632 -0.64193 0.76296 -0.13049 -0.61401 0.77844 -0.38262 -0.57918 0.71982 -0.23545 -0.63291 0.73755 -0.59750 -0.50980 0.61895 -0.60875 -0.51064 0.60718 -0.41321 -0.58604 0.69700 -0.75346 -0.42646 0.50044 -0.79335 -0.38630 0.47050 -0.92385 -0.24034 0.29788 -0.87823 -0.31176 0.36265 -0.84818 -0.34483 0.40208 -0.98818 -0.09853 0.11743 -0.98216 -0.06041 0.17809 -0.84971 0.35455 -0.39023 -0.76612 0.35396 -0.53645 -0.93316 0.23637 -0.27083 -0.89763 0.19278 -0.39635 -0.89786 0.19067 -0.39686 -0.99866 -0.04816 0.01920 -0.99866 -0.04814 0.01917 -0.99738 0.05455 -0.04745 -0.98849 0.08210 -0.12704 -0.97989 0.08430 -0.18087 -0.97104 0.14645 -0.18878 -0.99804 0.04019 -0.04790 -0.99144 -0.08391 0.10000 -0.99090 -0.08994 0.10012 -0.96185 -0.17934 0.20659 -0.91408 0.35466 -0.19668 -0.93128 0.27768 -0.23580 -0.99090 0.05850 -0.12123 -0.97522 0.21097 -0.06662 -0.99032 0.12197 -0.06625 -0.60270 0.69338 -0.39494 -0.59752 0.64700 -0.47367 -0.78444 0.50153 -0.36485 -0.72417 0.63962 -0.25780 -0.86379 0.40426 -0.30072 -0.46273 0.65102 -0.60170 -0.36552 0.79416 -0.48550 -0.28494 0.69391 -0.66128 -0.12571 0.81972 -0.55880 -0.09525 0.76198 -0.64056 0.09525 0.76198 -0.64056 0.12571 0.81972 -0.55880 0.28494 0.69391 -0.66128 0.36552 0.79416 -0.48550 0.46274 0.65102 -0.60170 0.58805 0.69067 -0.42091 0.61612 0.63564 -0.46514 0.86379 0.40426 -0.30072 0.76226 0.58838 -0.26976 0.75598 0.52910 -0.38543 0.90655 0.36349 -0.21459 0.91147 0.36780 -0.18424 0.94437 0.24520 -0.21920 0.95803 -0.18763 0.21674 0.99092 -0.08971 0.10011 0.99144 -0.08391 0.10000 0.99804 0.04019 -0.04790 0.99032 0.12197 -0.06625 0.99009 0.12384 -0.06626 0.97415 0.14938 -0.16945 0.98109 0.11246 -0.15754 0.97375 0.08543 -0.21097 0.98849 0.08210 -0.12704 0.99742 0.01320 0.07061 0.99809 0.01761 -0.05926 0.99964 -0.02562 -0.00764 0.89755 0.19213 -0.39685 0.89789 0.19305 -0.39564 0.93316 0.23637 -0.27083 0.84971 0.35455 -0.39023 0.76328 0.35379 -0.54059 0.76696 0.36728 -0.52619 0.62676 0.53290 -0.56850 0.57980 0.40743 -0.70557 0.46357 0.63904 -0.61378 0.26951 0.31881 -0.90869 0.36083 0.72467 -0.58708 0.12402 0.54641 -0.82828 -0.76437 0.37098 -0.52736 -0.62676 0.53290 -0.56850 -0.57980 0.40743 -0.70557 -0.46357 0.63904 -0.61378 -0.36192 0.46766 -0.80642 -0.28564 0.67565 -0.67964 -0.12402 0.54641 -0.82828 -0.09671 0.63977 -0.76246 0.09671 0.63977 -0.76246 -0.00075 -0.76117 -0.64856 -0.62825 -0.59520 -0.50104 -0.70761 -0.53976 -0.45602 -0.83315 -0.42354 -0.35564 -0.88027 -0.36255 -0.30607 -0.93060 -0.28020 -0.23551 -0.98753 -0.12062 -0.10118 -0.98546 -0.12998 -0.10942 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -0.98589 0.12823 0.10760 -0.98733 0.12164 0.10188 -0.92883 0.28380 0.23820 -0.83157 0.42616 0.35620 -0.88135 0.36125 0.30450 -0.71016 0.53962 0.45221 -0.52918 0.64893 0.54668 -0.50938 0.65844 0.55406 -0.30447 0.72988 0.61203 -0.14644 0.75745 0.63626 -0.10111 0.76212 0.63949 0.00005 0.76605 0.64279 -0.00000 0.76604 0.64279 0.00002 0.76605 0.64279 -0.00002 0.76605 0.64279 0.00000 0.76604 0.64279 -0.00005 0.76605 0.64279 -0.00003 0.76604 0.64279 0.00001 0.76605 0.64279 0.00000 0.76604 0.64279 -0.00001 0.76605 0.64279 0.00003 0.76604 0.64279 0.10111 0.76212 0.63949 0.14644 0.75745 0.63626 0.30447 0.72987 0.61203 0.39390 0.70390 0.59108 0.51000 0.65917 0.55262 0.62103 0.60000 0.50430 0.71016 0.53962 0.45221 0.82945 0.42755 0.35945 0.88194 0.36143 0.30256 0.92883 0.28380 0.23820 0.98591 0.12822 0.10741 0.98727 0.12183 0.10222 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 0.98589 -0.12825 -0.10761 0.99994 0.01042 0.00348 0.98752 -0.12048 -0.10142 0.93061 -0.28019 -0.23551 0.88124 -0.36116 -0.30492 0.83314 -0.42356 -0.35564 0.70889 -0.53878 -0.45519 0.62825 -0.59520 -0.50104 0.51899 -0.65260 -0.55205 0.40390 -0.69869 -0.59051 0.34552 -0.71601 -0.60659 0.99803 0.06281 0.00000 0.99803 -0.06280 0.00000 0.99803 0.06281 -0.00000 0.96858 0.24869 0.00000 0.96858 0.24869 -0.00000 0.87631 0.48174 0.00000 0.87631 0.48174 -0.00000 0.72898 0.68454 0.00000 0.72898 0.68454 -0.00000 0.53583 0.84433 0.00000 0.53583 0.84433 -0.00000 0.30902 0.95106 0.00000 0.30902 0.95106 -0.00000 0.06279 0.99803 0.00000 0.06279 0.99803 -0.00000 -0.18740 0.98228 0.00000 -0.18740 0.98228 0.00000 -0.42576 0.90484 0.00000 -0.42576 0.90484 0.00000 -0.63743 0.77051 0.00000 -0.63743 0.77051 0.00000 -0.80902 0.58778 0.00000 -0.80902 0.58778 0.00000 -0.92977 0.36813 0.00000 -0.92977 0.36813 0.00000 -0.99211 0.12534 0.00000 -0.99211 0.12534 0.00000 -0.99211 -0.12533 -0.00000 -0.99211 -0.12533 0.00000 -0.92977 -0.36813 -0.00000 -0.92977 -0.36813 0.00000 -0.80901 -0.58779 -0.00000 -0.80901 -0.58779 0.00000 -0.63743 -0.77050 -0.00000 -0.63743 -0.77050 0.00000 -0.42579 -0.90482 -0.00000 -0.42579 -0.90482 0.00000 -0.18736 -0.98229 -0.00000 -0.18736 -0.98229 0.00000 0.06279 -0.99803 0.00000 0.06279 -0.99803 0.00000 0.30902 -0.95106 0.00000 0.30902 -0.95106 0.00000 0.53583 -0.84433 0.00000 0.53583 -0.84433 0.00000 0.72896 -0.68456 0.00000 0.72896 -0.68456 0.00000 0.87631 -0.48174 0.00000 0.87631 -0.48174 0.00000 0.96858 -0.24869 0.00000 0.96858 -0.24869 0.00000 0.99803 -0.06280 0.00000 0.98159 -0.19098 0.00001 0.00000 -1.00000 0.00000 -0.02014 -0.99956 -0.02181 0.01104 -0.99948 0.03030 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.98159 -0.19098 0.00001 0.99196 -0.12531 -0.01747 0.93489 -0.35454 0.01679 0.92926 -0.36791 -0.03354 0.82255 -0.56778 0.03217 0.80807 -0.58711 -0.04818 0.66242 -0.74771 0.04612 0.63623 -0.76905 -0.06141 0.46393 -0.88393 0.05871 0.42463 -0.90240 -0.07325 0.23872 -0.96858 0.06981 0.18671 -0.97885 -0.08365 0.00000 -0.99683 0.07950 -0.06249 -0.99374 -0.09260 -0.23838 -0.96719 0.08791 -0.30748 -0.94626 -0.10026 -0.46264 -0.88147 0.09473 -0.53277 -0.83954 -0.10644 -0.65978 -0.74473 0.10031 -0.72445 -0.68028 -0.11128 -0.81848 -0.56497 0.10438 -0.87052 -0.47857 -0.11477 -0.92964 -0.35255 0.10713 -0.96195 -0.24700 -0.11677 -0.98684 -0.11982 0.10857 -0.99308 0.00000 -0.11743 -0.98684 0.11982 0.10857 -0.96195 0.24700 -0.11677 -0.92964 0.35255 0.10713 -0.87052 0.47857 -0.11477 -0.81848 0.56497 0.10438 -0.72444 0.68030 -0.11131 -0.65979 0.74474 0.10022 -0.53279 0.83952 -0.10650 -0.46264 0.88147 0.09473 -0.30745 0.94626 -0.10030 -0.23838 0.96720 0.08779 -0.06253 0.99373 -0.09270 -0.00000 0.99684 0.07950 0.18671 0.97885 -0.08366 0.23872 0.96858 0.06981 0.42465 0.90239 -0.07327 0.46393 0.88393 0.05860 0.63622 0.76905 -0.06150 0.66242 0.74772 0.04603 0.80807 0.58711 -0.04825 0.82255 0.56778 0.03210 0.92925 0.36792 -0.03358 0.93489 0.35454 0.01679 0.99196 0.12531 -0.01747 0.99271 0.12054 0.00000 0.99271 -0.12054 0.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.08900 -0.31858 0.94371 0.00530 -0.33099 0.94362 -0.00530 -0.33099 0.94362 0.08977 -0.31846 0.94367 0.00000 -0.34152 0.93987 -0.00020 -0.34136 0.93993 -0.06240 -0.33053 0.94173 -0.19249 -0.32383 0.92633 -0.11193 -0.32996 0.93734 -0.38886 -0.30529 0.86925 -0.33034 -0.31465 0.88987 -0.70699 -0.23546 0.66687 -0.54493 -0.27814 0.79100 -0.53214 -0.28063 0.79879 -0.94387 -0.10726 0.31241 -0.88843 -0.15216 0.43307 -0.84666 -0.17543 0.50239 -0.80237 -0.19766 0.56315 -0.69023 -0.24028 0.68253 -0.99372 -0.03398 0.10664 -0.99308 -0.03597 0.11176 -0.95810 -0.09296 0.27092 -0.99999 0.00355 0.00129 -0.99999 0.00456 0.00000 -0.99970 0.01176 -0.02142 -0.99145 0.04832 -0.12125 -0.92388 0.13450 -0.35827 -0.95437 0.10520 -0.27948 -0.98822 0.05558 -0.14258 -0.79334 0.21190 -0.57070 -0.81934 0.19923 -0.53758 -0.90113 0.15106 -0.40638 -0.28796 0.33139 -0.89848 -0.38270 0.32026 -0.86659 -0.43646 0.31098 -0.84427 -0.58769 0.28028 -0.75899 -0.60860 0.27527 -0.74420 -0.71519 0.24169 -0.65581 -0.13066 0.34352 -0.93001 -0.12263 0.34373 -0.93103 -0.00102 0.34666 -0.93799 -0.00047 0.34673 -0.93796 0.00023 0.34700 -0.93786 0.00000 0.34686 -0.93792 0.00089 0.34666 -0.93799 0.99829 -0.01575 0.05622 0.99371 -0.03333 0.10687 0.75775 -0.21727 0.61531 0.84666 -0.17532 0.50243 0.86982 -0.16283 0.46573 0.94388 -0.10799 0.31214 0.94454 -0.10739 0.31033 0.98630 -0.05185 0.15661 0.11193 -0.32926 0.93758 0.13415 -0.32893 0.93478 0.33033 -0.31295 0.89047 0.31404 -0.31444 0.89583 0.49033 -0.29027 0.82178 0.53215 -0.28160 0.79845 0.49068 -0.28914 0.82197 0.70699 -0.23503 0.66703 0.63592 -0.25423 0.72868 0.05096 0.34608 -0.93682 0.11181 0.34473 -0.93202 0.13148 0.34365 -0.92985 0.28056 0.33173 -0.90069 0.33035 0.32694 -0.88543 0.42342 0.31342 -0.84999 0.53225 0.29309 -0.79424 0.54797 0.28929 -0.78489 0.70701 0.24511 -0.66337 0.66828 0.25863 -0.69750 0.85641 0.17982 -0.48398 0.84667 0.18545 -0.49875 0.76743 0.22188 -0.60152 0.92436 0.13321 -0.35752 0.94385 0.11647 -0.30918 0.96870 0.08799 -0.23210 0.99372 0.04166 -0.10384 0.99438 0.03949 -0.09818 0.99999 0.00403 0.00147 0.99999 0.00402 -0.00000 0.00000 -0.34198 0.93971 0.00000 -0.34198 0.93971 0.00000 -0.34198 0.93971 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 0.93970 0.11696 -0.32139 -0.00000 -0.65180 -0.75839 -0.23171 0.33267 -0.91413 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 0.09525 -0.92126 -0.37711 0.00000 -0.93970 -0.34201 0.00000 -0.93968 -0.34205 -0.00003 -0.93969 -0.34202 -0.00664 -0.95793 -0.28692 -0.00000 -0.98852 -0.15111 0.01348 -0.97357 -0.22798 0.02368 -0.96046 -0.27740 0.02916 -0.95417 -0.29783 0.03361 -0.95015 -0.30997 0.03825 -0.94692 -0.31919 0.04353 -0.94402 -0.32700 0.05148 -0.94039 -0.33617 0.00438 -0.96189 -0.27340 -0.06195 -0.94520 -0.32057 -0.04535 -0.94806 -0.31485 -0.03400 -0.95026 -0.30960 -0.02508 -0.95232 -0.30406 -0.01652 -0.95471 -0.29708 0.00000 -0.05382 0.99855 0.43109 -0.84789 -0.30861 -0.11259 0.77351 0.62370 -0.21471 0.74270 0.63427 -0.98140 -0.19137 -0.01545 -0.99255 -0.08403 0.08828 -0.83712 0.33396 0.43325 -0.56480 0.57860 0.58841 -0.35732 0.68863 0.63096 0.47371 0.37849 0.79520 0.78730 -0.09074 0.60986 0.21226 0.60690 0.76591 0.82804 -0.53407 0.17066 0.69749 -0.69922 -0.15687 0.00000 -0.95371 -0.30072 -0.00000 -0.93969 -0.34202 -0.25406 -0.89774 -0.35987 -0.09796 -0.93887 -0.33005 0.00000 -0.93969 -0.34202 0.00000 -0.93969 -0.34202 -0.66359 0.25166 -0.70450 -0.66360 0.25166 -0.70449 -0.70452 0.08554 -0.70451 -0.70452 0.08554 -0.70451 -0.66354 -0.25164 -0.70455 -0.66359 -0.25167 -0.70450 -0.70452 -0.08554 -0.70451 -0.70450 -0.08554 -0.70453 -0.58409 -0.40318 -0.70448 -0.58409 -0.40318 -0.70448 -0.47064 -0.53124 -0.70447 -0.47063 -0.53122 -0.70449 -0.32982 -0.62841 -0.70450 -0.32983 -0.62843 -0.70448 -0.16985 -0.68909 -0.70449 -0.16981 -0.68898 -0.70461 0.00000 -0.70959 -0.70462 0.00000 -0.70959 -0.70462 0.16982 -0.68897 -0.70461 0.16984 -0.68909 -0.70449 0.32983 -0.62843 -0.70448 0.32982 -0.62841 -0.70450 0.47063 -0.53122 -0.70449 0.47064 -0.53124 -0.70447 0.58409 -0.40318 -0.70448 0.58409 -0.40318 -0.70447 0.66359 -0.25167 -0.70449 0.66354 -0.25164 -0.70455 -0.58409 0.40318 -0.70448 -0.58408 0.40318 -0.70448 -0.47064 0.53124 -0.70447 -0.47063 0.53122 -0.70449 -0.32982 0.62841 -0.70450 -0.32983 0.62843 -0.70448 -0.16984 0.68909 -0.70449 -0.16984 0.68915 -0.70443 0.00000 0.70977 -0.70443 0.16984 0.68915 -0.70443 0.16984 0.68909 -0.70449 0.32983 0.62843 -0.70448 0.32982 0.62841 -0.70450 0.47063 0.53122 -0.70449 0.47064 0.53124 -0.70447 0.58409 0.40318 -0.70448 0.58409 0.40318 -0.70447 0.66359 0.25166 -0.70449 0.66360 0.25166 -0.70449 0.70451 0.08554 -0.70452 0.70452 0.08554 -0.70451 0.70452 -0.08554 -0.70451 0.70449 -0.08554 -0.70454 -0.57432 0.41726 0.70430 -0.45252 0.54698 0.70430 -0.13304 0.69734 0.70428 -0.30225 0.64236 0.70428 -0.30229 0.64241 0.70423 -0.45254 0.54702 0.70426 0.21940 0.67523 0.70422 0.04458 0.70859 0.70421 0.04459 0.70850 0.70430 -0.13304 0.69735 0.70427 0.51746 0.48592 0.70436 0.51749 0.48594 0.70432 0.38038 0.59938 0.70432 0.38038 0.59939 0.70430 0.21935 0.67513 0.70433 0.62206 0.34198 0.70434 0.62205 0.34196 0.70436 0.68753 0.17653 0.70437 0.70644 0.04447 0.70638 0.70640 0.04445 0.70641 0.70640 -0.04446 0.70641 0.70645 -0.04445 0.70636 0.68766 -0.17655 0.70424 0.68753 -0.17653 0.70437 0.62204 -0.34198 0.70436 0.62214 -0.34202 0.70425 0.51755 -0.48601 0.70423 0.51748 -0.48595 0.70432 0.21934 -0.67507 0.70439 0.21937 -0.67513 0.70433 0.38039 -0.59939 0.70430 0.38038 -0.59938 0.70431 -0.13301 -0.69735 0.70428 -0.13301 -0.69735 0.70428 0.04457 -0.70850 0.70430 0.04456 -0.70842 0.70438 -0.45252 -0.54698 0.70430 -0.45247 -0.54691 0.70439 -0.30223 -0.64226 0.70438 -0.30226 -0.64236 0.70428 -0.57432 -0.41727 0.70430 -0.66010 -0.26136 0.70425 -0.66002 -0.26132 0.70434 -0.57431 -0.41727 0.70431 -0.57423 0.41721 0.70442 -0.65996 0.26129 0.70440 -0.66003 0.26133 0.70431 -0.70432 0.08898 0.70429 -0.70430 0.08898 0.70430 -0.70430 -0.08897 0.70430 -0.70434 -0.08898 0.70426 -0.09267 0.99192 -0.08667 -0.27173 0.96108 -0.04990 -0.27181 0.96105 -0.05009 -0.43232 0.90148 0.02089 -0.56352 0.81715 0.12128 -0.56329 0.81727 0.12153 -0.43224 0.90151 0.02110 -0.70397 0.59899 0.38162 -0.65599 0.71408 0.24446 -0.65618 0.71396 0.24430 -0.70405 0.47976 0.52358 -0.70398 0.47984 0.52362 -0.70399 0.59898 0.38160 -0.56326 0.26163 0.78377 -0.65594 0.36482 0.66079 -0.65606 0.36467 0.66076 -0.43234 0.17716 0.88414 -0.43236 0.17710 0.88414 -0.56343 0.26143 0.78371 -0.09273 0.08669 0.99191 -0.27176 0.11755 0.95516 -0.27176 0.11755 0.95516 0.09273 0.08669 0.99191 0.09268 0.08694 0.99189 -0.09268 0.08694 0.99189 0.43234 0.17716 0.88414 0.43236 0.17710 0.88414 0.27176 0.11755 0.95516 0.27176 0.11755 0.95516 0.56343 0.26143 0.78371 0.56326 0.26163 0.78377 0.70405 0.47977 0.52359 0.65607 0.36469 0.66074 0.65593 0.36481 0.66081 0.70397 0.59899 0.38162 0.70399 0.59898 0.38160 0.70398 0.47984 0.52362 0.56329 0.81727 0.12153 0.56352 0.81715 0.12128 0.65616 0.71399 0.24428 0.65600 0.71407 0.24449 0.43224 0.90151 0.02110 0.43232 0.90148 0.02089 -0.09266 0.99192 -0.08662 0.09266 0.99192 -0.08662 0.09267 0.99192 -0.08667 0.27175 0.96107 -0.04989 0.27178 0.96105 -0.05010 0.70877 -0.56067 -0.42812 -0.08867 -0.08653 -0.99230 -0.26039 -0.11473 -0.95866 -0.26022 -0.11516 -0.95866 -0.41571 -0.16983 -0.89350 -0.41573 -0.16976 -0.89350 -0.54530 -0.24743 -0.80089 -0.54545 -0.24725 -0.80084 -0.64101 -0.34320 -0.68653 -0.64097 -0.34324 -0.68655 -0.69660 -0.45141 -0.55765 -0.69660 -0.45141 -0.55765 -0.70877 -0.56067 -0.42812 0.54532 -0.24745 -0.80087 0.41574 -0.16976 -0.89350 0.41570 -0.16983 -0.89351 0.26022 -0.11516 -0.95866 0.26039 -0.11473 -0.95866 0.08867 -0.08653 -0.99230 0.08857 -0.08697 -0.99227 -0.08857 -0.08697 -0.99227 0.69661 -0.45141 -0.55765 0.69660 -0.45141 -0.55765 0.64097 -0.34324 -0.68655 0.64101 -0.34320 -0.68653 0.54544 -0.24723 -0.80086 -0.70704 -0.66452 -0.24187 0.70704 -0.66453 -0.24187 -0.46272 -0.88428 -0.06277 0.15312 -0.98469 -0.08328 -0.06730 -0.75534 -0.65187 -0.24327 -0.53418 -0.80961 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.99790 0.00000 -0.06471 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.99790 0.00000 -0.06471 1.00000 0.00000 0.00000 0.31780 -0.20556 0.92560 -0.00001 0.76603 0.64281 0.00001 0.76605 0.64278 0.00001 0.76605 0.64278 -0.00001 0.76605 0.64278 -0.00001 0.76604 0.64279 0.00001 0.76605 0.64279 0.00001 0.76605 0.64279 -0.00000 0.76604 0.64279 -0.00001 0.76605 0.64278 -0.00001 0.76605 0.64278 0.00001 0.76603 0.64281 -0.00000 0.76604 0.64279 0.00002 0.76604 0.64279 0.00000 0.76604 0.64279 0.00001 0.76605 0.64279 -0.00001 0.76605 0.64279 0.00000 0.76606 0.64277 0.00000 0.76604 0.64279 -0.00001 0.76605 0.64278 0.00001 0.76605 0.64278 -0.00000 0.76604 0.64279 -0.00000 0.76606 0.64277 0.00000 -0.96591 0.25887 -0.00001 -0.96593 0.25882 -0.00002 -0.96594 0.25878 0.00001 -0.96592 0.25883 0.00001 -0.96592 0.25883 -0.00001 -0.96593 0.25882 0.00003 -0.96592 0.25883 -0.00005 -0.96593 0.25881 0.00001 -0.96593 0.25882 0.00001 -0.96593 0.25882 -0.00001 -0.96593 0.25882 0.00001 -0.96593 0.25882 -0.00001 -0.96592 0.25883 0.00000 -0.96593 0.25882 0.00000 -0.96593 0.25882 -0.00000 -0.96592 0.25884 0.00000 -0.96593 0.25881 0.00000 -0.76601 -0.64282 0.04846 -0.92311 -0.38148 -0.02177 -0.76861 -0.63934 -0.01932 -0.77177 -0.63561 -0.01591 -0.77440 -0.63249 -0.01182 -0.77642 -0.63011 -0.00728 -0.77777 -0.62851 -0.00245 -0.77845 -0.62770 0.00245 -0.77845 -0.62770 0.00728 -0.77777 -0.62851 0.01932 -0.77177 -0.63561 0.02177 -0.76861 -0.63934 -0.04846 -0.92311 -0.38148 0.00000 -0.76601 -0.64282 0.00000 -0.50000 -0.86602 -0.00000 -0.50000 -0.86602 -0.00000 -0.76604 -0.64279 0.00000 -0.76604 -0.64279 0.00000 0.93969 0.34202 0.01407 -0.84039 -0.54180 0.78353 -0.61842 0.06038 0.00000 -0.71954 0.69445 -0.62045 -0.73695 -0.26823 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.76604 0.64279 -0.00001 0.76605 0.64279 0.01591 -0.77440 -0.63249 0.01182 -0.77642 -0.63011 0.00000 0.70977 -0.70443 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.01045 0.02410 0.99965 0.00039 -0.03185 -0.99949 -0.00048 -0.03147 -0.99950 -0.00000 0.00000 1.00000 0.00053 0.00838 0.99996 0.00000 -0.00000 1.00000 0.68762 0.17654 0.70428 0.00000 0.00000 1.00000 -0.00013 -0.03180 -0.99949 0.00838 0.02208 0.99972 0.19500 -0.04640 0.97970 0.31255 -0.00926 0.94985 -0.00571 0.01184 0.99991 -0.00010 -0.03235 -0.99948 -0.03640 0.00001 0.99934 -0.04651 0.03774 0.99820 -0.00013 0.00015 1.00000 0.00003 0.00017 1.00000 0.00000 -0.00000 1.00000 0.00010 0.00005 1.00000 -0.00004 0.00011 1.00000 -0.00001 0.00012 1.00000 0.00003 0.00017 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00300 0.00590 0.99998 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00205 0.00632 0.99998 0.16328 -0.03177 0.98607 0.03640 -0.00000 0.99934 -0.01493 0.01331 0.99980 -0.00000 0.01221 0.99993 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.05435 0.05360 0.99708 -0.01788 -0.00348 0.99983 -0.00000 0.00000 1.00000 0.00129 0.00949 0.99995 0.04816 0.04390 0.99787 0.01788 -0.00348 0.99983 -0.00135 0.00709 0.99997 0.00000 0.00954 0.99995 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00355 0.00555 0.99998 0.00352 0.00555 0.99998 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.99664 -0.08188 -0.00000 -0.99664 -0.08188 0.00000 -0.98159 -0.19099 0.00000 -0.98159 -0.19098 0.00000 -0.98160 -0.19096 -0.00000 -0.98159 -0.19098 -0.00001 -0.98160 -0.19097 0.00000 -0.98160 -0.19097 0.00000 -0.98160 -0.19097 -0.00000 -0.98160 -0.19097 0.00000 0.98160 -0.19097 0.00000 0.98160 -0.19097 0.00000 0.98159 -0.19098 0.00000 0.98159 -0.19099 0.00000 0.99578 -0.09181 0.00000 0.99578 -0.09181 0.00000 0.98160 -0.19097 0.00000 0.98160 -0.19097 0.00000 0.98160 -0.19096 0.00000 0.98159 -0.19098 -0.00001 -0.40749 -0.69608 -0.59112 0.15586 -0.75378 -0.63837 0.01024 -0.76045 -0.64932 -0.17110 -0.74557 -0.64409 0.00712 -0.76026 -0.64958 0.00497 -0.75997 -0.64993 -0.02763 -0.75062 -0.66015 -0.01956 -0.75002 -0.66113 -0.00000 -0.76087 -0.64890 0.00075 -0.76117 -0.64856 0.00208 -0.76156 -0.64809 0.11825 -0.77917 -0.61555 -0.00208 -0.76156 -0.64809 -0.16730 -0.78317 -0.59888 -0.00661 -0.75793 -0.65230 -0.49712 -0.72368 -0.47871 -0.31155 -0.00949 0.95018 -0.16366 -0.03184 0.98600 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000

16 0 80 0 18 0 18 1 80 1 76 1 18 2 76 2 22 2 22 3 76 3 72 3 22 4 72 4 27 4 27 5 72 5 67 5 27 6 67 6 30 6 30 7 67 7 64 7 30 8 64 8 38 8 38 9 64 9 57 9 38 10 57 10 42 10 42 11 57 11 53 11 42 12 53 12 46 12 46 13 53 13 49 13 61 14 65 14 59 14 59 15 65 15 66 15 13 16 23 16 9 16 9 17 23 17 21 17 9 18 21 18 6 18 6 19 21 19 17 19 6 20 17 20 5 20 5 21 17 21 15 21 5 22 15 22 3 22 3 23 15 23 12 23 12 24 0 24 3 24 24 25 36 25 19 25 36 26 35 26 29 26 19 27 36 27 29 27 19 28 29 28 13 28 13 29 29 29 28 29 13 30 28 30 26 30 13 31 26 31 23 31 36 32 24 32 39 32 39 33 24 33 40 33 40 34 24 34 31 34 40 35 31 35 43 35 43 36 31 36 37 36 43 37 37 37 47 37 47 38 37 38 44 38 47 39 44 39 48 39 44 40 50 40 48 40 48 41 50 41 52 41 52 42 50 42 55 42 52 43 55 43 54 43 54 44 55 44 62 44 54 45 62 45 58 45 58 46 62 46 69 46 58 47 69 47 61 47 61 48 69 48 74 48 61 49 74 49 65 49 65 50 74 50 66 50 66 51 74 51 82 51 66 52 82 52 68 52 68 53 82 53 71 53 71 54 82 54 94 54 71 55 94 55 73 55 84 56 83 56 87 56 87 57 83 57 81 57 87 58 81 58 90 58 90 59 81 59 77 59 90 60 77 60 91 60 91 61 77 61 73 61 91 62 73 62 94 62 41 63 37 63 32 63 32 64 37 64 31 64 32 65 31 65 25 65 25 66 31 66 24 66 25 67 24 67 20 67 20 68 24 68 19 68 20 69 19 69 14 69 14 70 19 70 13 70 14 71 13 71 8 71 8 72 13 72 9 72 37 73 41 73 44 73 44 74 41 74 45 74 44 75 45 75 51 75 56 76 55 76 51 76 51 77 55 77 50 77 51 78 50 78 44 78 63 79 55 79 56 79 62 80 55 80 63 80 62 81 63 81 69 81 69 82 63 82 70 82 69 83 70 83 74 83 74 84 70 84 75 84 74 85 75 85 82 85 82 86 75 86 79 86 82 87 79 87 94 87 94 88 79 88 93 88 93 89 79 89 72 89 93 90 72 90 76 90 88 91 89 91 80 91 80 92 89 92 76 92 76 93 89 93 92 93 76 94 92 94 93 94 88 95 80 95 86 95 86 96 80 96 85 96 1 97 10 97 2 97 2 98 10 98 16 98 2 99 16 99 4 99 72 100 79 100 67 100 67 101 79 101 75 101 67 102 75 102 64 102 64 103 75 103 70 103 64 104 70 104 57 104 57 105 70 105 63 105 63 106 56 106 57 106 57 107 56 107 53 107 53 108 56 108 49 108 49 109 56 109 51 109 49 110 51 110 46 110 46 111 51 111 45 111 41 112 32 112 42 112 41 113 42 113 46 113 41 114 46 114 45 114 42 115 32 115 38 115 38 116 32 116 25 116 38 117 25 117 30 117 20 118 27 118 30 118 20 119 30 119 25 119 22 120 14 120 8 120 22 121 8 121 18 121 18 122 8 122 7 122 18 123 7 123 16 123 16 124 7 124 4 124 20 125 14 125 27 125 27 126 14 126 22 126 61 127 59 127 58 127 58 128 59 128 60 128 36 129 34 129 33 129 36 130 33 130 35 130 0 131 1 131 3 131 3 132 1 132 2 132 3 133 2 133 5 133 2 134 4 134 5 134 5 135 4 135 6 135 6 136 4 136 7 136 6 137 7 137 9 137 9 138 7 138 8 138 86 139 85 139 84 139 88 140 86 140 89 140 89 141 86 141 84 141 89 142 84 142 87 142 87 143 90 143 89 143 89 144 90 144 91 144 89 145 91 145 94 145 89 146 94 146 92 146 92 147 94 147 93 147 16 148 34 148 80 148 80 149 34 149 60 149 15 150 11 150 12 150 11 151 0 151 12 151 11 152 16 152 10 152 11 153 10 153 1 153 0 154 11 154 1 154 34 155 11 155 33 155 78 156 85 156 80 156 85 157 78 157 84 157 84 158 78 158 83 158 83 159 78 159 81 159 81 160 78 160 77 160 77 161 78 161 73 161 73 162 78 162 71 162 16 163 11 163 34 163 28 164 33 164 26 164 26 165 33 165 11 165 26 166 11 166 23 166 23 167 11 167 21 167 21 168 11 168 17 168 17 169 11 169 15 169 71 170 78 170 68 170 68 171 78 171 66 171 60 172 78 172 80 172 66 173 78 173 59 173 59 174 78 174 60 174 108 175 128 175 158 175 530 176 494 176 498 176 498 177 484 177 473 177 200 178 198 178 182 178 182 179 198 179 179 179 182 180 179 180 155 180 155 181 179 181 163 181 577 182 576 182 573 182 426 183 412 183 406 183 406 184 395 184 426 184 426 185 395 185 386 185 426 186 386 186 366 186 432 187 434 187 501 187 501 188 434 188 441 188 501 189 441 189 500 189 500 190 441 190 446 190 500 191 446 191 449 191 453 192 451 192 528 192 453 193 528 193 452 193 436 194 502 194 440 194 440 195 502 195 528 195 440 196 528 196 447 196 447 197 528 197 451 197 436 198 431 198 502 198 502 199 431 199 427 199 502 200 427 200 426 200 426 201 427 201 424 201 426 202 424 202 412 202 402 203 415 203 425 203 415 204 419 204 425 204 425 205 419 205 501 205 501 206 419 206 428 206 501 207 428 207 432 207 343 208 365 208 371 208 371 209 365 209 372 209 371 210 372 210 396 210 371 211 396 211 425 211 425 212 396 212 399 212 425 213 399 213 402 213 258 214 255 214 268 214 268 215 274 215 258 215 258 216 274 216 277 216 258 217 277 217 305 217 277 218 300 218 305 218 305 219 300 219 306 219 305 220 306 220 310 220 310 221 306 221 331 221 310 222 331 222 343 222 343 223 331 223 334 223 343 224 334 224 365 224 187 225 249 225 244 225 187 226 244 226 149 226 149 227 244 227 238 227 149 228 238 228 235 228 233 229 232 229 156 229 232 230 234 230 156 230 156 231 234 231 236 231 156 232 236 232 237 232 156 233 237 233 243 233 243 234 248 234 156 234 156 235 248 235 252 235 156 236 252 236 258 236 258 237 252 237 255 237 276 238 272 238 260 238 299 239 295 239 260 239 260 240 295 240 278 240 260 241 278 241 276 241 272 242 259 242 260 242 260 243 259 243 187 243 187 244 259 244 254 244 187 245 254 245 249 245 95 246 96 246 99 246 99 247 96 247 100 247 99 248 100 248 105 248 235 249 233 249 149 249 149 250 233 250 156 250 149 251 156 251 110 251 110 252 156 252 109 252 110 253 109 253 105 253 105 254 109 254 104 254 105 255 104 255 99 255 449 256 452 256 500 256 500 257 452 257 528 257 500 258 528 258 559 258 528 259 560 259 559 259 559 260 560 260 573 260 573 261 560 261 574 261 573 262 574 262 577 262 576 263 577 263 580 263 580 264 577 264 581 264 508 265 512 265 524 265 508 266 524 266 493 266 493 267 524 267 523 267 477 268 495 268 457 268 457 269 495 269 469 269 457 270 469 270 422 270 457 271 422 271 403 271 389 272 385 272 422 272 422 273 385 273 403 273 335 274 333 274 362 274 333 275 349 275 362 275 362 276 349 276 361 276 362 277 361 277 389 277 389 278 361 278 385 278 333 279 335 279 324 279 324 280 335 280 312 280 292 281 311 281 312 281 312 282 311 282 324 282 264 283 266 283 291 283 264 284 291 284 292 284 292 285 291 285 311 285 266 286 264 286 220 286 220 287 264 287 207 287 188 288 199 288 207 288 207 289 199 289 210 289 207 290 210 290 220 290 165 291 164 291 193 291 193 292 164 292 173 292 209 293 205 293 216 293 209 294 216 294 267 294 192 295 190 295 202 295 192 296 202 296 209 296 209 297 202 297 205 297 164 298 169 298 170 298 164 299 170 299 173 299 164 300 171 300 169 300 169 301 171 301 174 301 169 302 174 302 192 302 192 303 174 303 190 303 172 304 165 304 166 304 166 305 165 305 188 305 188 306 165 306 193 306 188 307 193 307 199 307 201 308 189 308 208 308 201 309 191 309 189 309 189 310 191 310 166 310 166 311 191 311 175 311 166 312 175 312 172 312 293 313 285 313 263 313 293 314 263 314 265 314 265 315 263 315 208 315 208 316 263 316 217 316 208 317 217 317 201 317 285 318 293 318 304 318 304 319 293 319 313 319 304 320 313 320 316 320 316 321 313 321 341 321 316 322 341 322 340 322 340 323 341 323 354 323 354 324 341 324 363 324 354 325 363 325 374 325 374 326 363 326 390 326 374 327 390 327 388 327 388 328 390 328 423 328 388 329 423 329 418 329 470 330 468 330 460 330 470 331 460 331 423 331 423 332 460 332 418 332 468 333 470 333 476 333 476 334 470 334 496 334 476 335 496 335 491 335 477 336 493 336 495 336 495 337 493 337 523 337 495 338 523 338 525 338 523 339 511 339 525 339 525 340 511 340 504 340 525 341 504 341 496 341 496 342 504 342 491 342 513 343 490 343 492 343 492 344 507 344 513 344 513 345 507 345 510 345 513 346 510 346 512 346 512 347 510 347 516 347 512 348 516 348 524 348 462 349 467 349 490 349 490 350 467 350 475 350 490 351 475 351 492 351 467 352 462 352 459 352 459 353 462 353 417 353 417 354 462 354 407 354 417 355 407 355 387 355 387 356 407 356 382 356 387 357 382 357 373 357 373 358 382 358 353 358 382 359 358 359 353 359 353 360 358 360 338 360 216 361 262 361 267 361 267 362 262 362 284 362 267 363 284 363 294 363 294 364 284 364 303 364 294 365 303 365 314 365 314 366 303 366 315 366 314 367 315 367 338 367 338 368 315 368 339 368 338 369 339 369 353 369 218 370 339 370 315 370 198 371 202 371 190 371 198 372 190 372 179 372 179 373 190 373 174 373 179 374 174 374 163 374 163 375 174 375 171 375 164 376 160 376 171 376 171 377 160 377 163 377 160 378 164 378 161 378 161 379 164 379 165 379 162 380 161 380 165 380 162 381 165 381 172 381 162 382 172 382 175 382 162 383 175 383 191 383 162 384 191 384 178 384 178 385 191 385 197 385 197 386 191 386 201 386 197 387 201 387 204 387 204 388 201 388 206 388 206 389 201 389 217 389 206 390 217 390 219 390 217 391 263 391 219 391 219 392 263 392 285 392 219 393 285 393 304 393 374 394 388 394 367 394 367 395 388 395 418 395 367 396 418 396 460 396 304 397 316 397 219 397 219 398 316 398 340 398 219 399 340 399 367 399 367 400 340 400 354 400 367 401 354 401 374 401 367 402 460 402 471 402 471 403 460 403 468 403 471 404 468 404 474 404 468 405 476 405 474 405 474 406 476 406 485 406 485 407 476 407 491 407 485 408 491 408 497 408 497 409 491 409 504 409 497 410 504 410 509 410 504 411 511 411 509 411 509 412 511 412 527 412 527 413 511 413 523 413 527 414 523 414 526 414 526 415 523 415 524 415 526 416 524 416 506 416 506 417 524 417 522 417 506 418 522 418 510 418 506 419 510 419 507 419 506 420 507 420 494 420 507 421 492 421 494 421 494 422 492 422 484 422 484 423 492 423 475 423 484 424 475 424 473 424 473 425 475 425 467 425 473 426 467 426 472 426 130 427 126 427 127 427 127 428 126 428 133 428 127 429 131 429 130 429 130 430 131 430 136 430 130 431 136 431 135 431 135 432 136 432 151 432 135 433 151 433 150 433 150 434 151 434 223 434 150 435 223 435 222 435 222 436 223 436 288 436 222 437 288 437 287 437 287 438 288 438 321 438 287 439 321 439 320 439 320 440 321 440 345 440 320 441 345 441 344 441 344 442 345 442 376 442 344 443 376 443 375 443 375 444 376 444 409 444 375 445 409 445 408 445 408 446 409 446 481 446 408 447 481 447 480 447 480 448 481 448 541 448 480 449 541 449 540 449 540 450 541 450 550 450 540 451 550 451 549 451 549 452 550 452 558 452 549 453 558 453 557 453 557 454 558 454 552 454 557 455 552 455 551 455 551 456 552 456 543 456 551 457 543 457 542 457 542 458 543 458 483 458 542 459 483 459 482 459 482 460 483 460 411 460 482 461 411 461 410 461 410 462 411 462 378 462 410 463 378 463 377 463 377 464 378 464 347 464 377 465 347 465 346 465 346 466 347 466 323 466 346 467 323 467 322 467 322 468 323 468 290 468 322 469 290 469 289 469 289 470 290 470 225 470 289 471 225 471 224 471 224 472 225 472 153 472 224 473 153 473 152 473 152 474 153 474 138 474 152 475 138 475 137 475 137 476 138 476 133 476 137 477 133 477 132 477 132 478 133 478 126 478 566 479 534 479 183 479 530 480 498 480 529 480 529 481 498 481 473 481 529 482 473 482 472 482 472 483 461 483 529 483 529 484 461 484 154 484 154 485 461 485 218 485 154 486 218 486 200 486 155 487 154 487 182 487 182 488 154 488 200 488 148 489 118 489 115 489 122 490 124 490 112 490 124 491 122 491 140 491 124 492 140 492 142 492 142 493 140 493 168 493 142 494 168 494 181 494 181 495 168 495 246 495 181 496 246 496 257 496 257 497 246 497 298 497 257 498 298 498 302 498 302 499 298 499 327 499 302 500 327 500 329 500 329 501 327 501 351 501 329 502 351 502 360 502 360 503 351 503 381 503 360 504 381 504 392 504 392 505 381 505 438 505 392 506 438 506 464 506 464 507 438 507 515 507 464 508 515 508 533 508 533 509 515 509 548 509 533 510 548 510 554 510 554 511 548 511 562 511 554 512 562 512 571 512 571 513 562 513 569 513 571 514 569 514 570 514 570 515 569 515 561 515 570 516 561 516 553 516 561 517 531 517 553 517 553 518 531 518 532 518 532 519 531 519 514 519 532 520 514 520 463 520 514 521 437 521 463 521 463 522 437 522 391 522 437 523 380 523 391 523 391 524 380 524 359 524 380 525 350 525 359 525 359 526 350 526 328 526 350 527 326 527 328 527 328 528 326 528 301 528 326 529 297 529 301 529 301 530 297 530 256 530 297 531 245 531 256 531 256 532 245 532 180 532 245 533 167 533 180 533 180 534 167 534 141 534 167 535 139 535 141 535 141 536 139 536 123 536 139 537 121 537 123 537 123 538 121 538 112 538 112 539 121 539 111 539 112 540 111 540 122 540 463 541 408 541 480 541 553 542 549 542 570 542 571 543 557 543 551 543 152 544 181 544 224 544 377 545 360 545 392 545 328 546 301 546 320 546 287 547 256 547 222 547 397 548 366 548 386 548 397 549 386 549 395 549 278 550 295 550 279 550 279 551 295 551 299 551 279 552 299 552 397 552 397 553 299 553 366 553 276 554 278 554 279 554 276 555 279 555 272 555 272 556 279 556 273 556 272 557 273 557 259 557 259 558 273 558 261 558 247 559 254 559 251 559 251 560 254 560 259 560 251 561 259 561 261 561 230 562 238 562 239 562 239 563 238 563 244 563 239 564 244 564 247 564 247 565 244 565 249 565 247 566 249 566 254 566 227 567 233 567 230 567 230 568 233 568 235 568 230 569 235 569 238 569 229 570 232 570 227 570 227 571 232 571 233 571 232 572 229 572 234 572 234 573 229 573 231 573 242 574 237 574 231 574 231 575 237 575 236 575 231 576 236 576 234 576 250 577 248 577 242 577 242 578 248 578 243 578 242 579 243 579 237 579 271 580 274 580 268 580 271 581 268 581 253 581 253 582 268 582 255 582 253 583 255 583 252 583 253 584 252 584 250 584 250 585 252 585 248 585 274 586 271 586 280 586 274 587 280 587 277 587 277 588 280 588 300 588 300 589 280 589 331 589 331 590 280 590 365 590 365 591 280 591 398 591 365 592 398 592 396 592 453 593 454 593 451 593 451 594 454 594 448 594 433 595 431 595 436 595 433 596 436 596 439 596 439 597 436 597 440 597 439 598 440 598 448 598 448 599 440 599 447 599 448 600 447 600 451 600 397 601 395 601 404 601 404 602 395 602 406 602 404 603 406 603 420 603 420 604 406 604 412 604 420 605 412 605 424 605 420 606 424 606 429 606 429 607 424 607 427 607 429 608 427 608 433 608 433 609 427 609 431 609 396 610 398 610 399 610 399 611 398 611 405 611 399 612 405 612 402 612 402 613 405 613 415 613 415 614 405 614 421 614 415 615 421 615 419 615 419 616 421 616 430 616 419 617 430 617 428 617 428 618 430 618 435 618 428 619 435 619 432 619 442 620 441 620 434 620 442 621 434 621 435 621 435 622 434 622 432 622 441 623 442 623 446 623 446 624 442 624 450 624 446 625 450 625 449 625 449 626 450 626 455 626 449 627 455 627 452 627 454 628 453 628 455 628 455 629 453 629 452 629 535 630 536 630 211 630 211 631 536 631 144 631 211 632 144 632 143 632 143 633 144 633 145 633 145 634 144 634 147 634 145 635 147 635 146 635 146 636 147 636 213 636 213 637 147 637 539 637 213 638 539 638 538 638 538 639 539 639 537 639 537 640 539 640 536 640 537 641 536 641 535 641 478 642 454 642 456 642 537 643 478 643 456 643 211 644 478 644 535 644 535 645 478 645 537 645 211 646 273 646 279 646 279 647 397 647 478 647 478 648 397 648 404 648 478 649 404 649 420 649 420 650 429 650 478 650 478 651 429 651 433 651 478 652 433 652 439 652 478 653 439 653 448 653 478 654 448 654 454 654 279 655 478 655 211 655 230 656 239 656 211 656 211 657 239 657 247 657 247 658 251 658 211 658 211 659 251 659 261 659 211 660 261 660 273 660 456 661 157 661 537 661 537 662 157 662 538 662 405 663 157 663 421 663 421 664 157 664 430 664 456 665 455 665 157 665 157 666 455 666 450 666 157 667 450 667 442 667 157 668 442 668 435 668 157 669 435 669 430 669 253 670 250 670 213 670 213 671 250 671 242 671 213 672 271 672 253 672 242 673 231 673 213 673 213 674 231 674 229 674 212 675 229 675 228 675 212 676 228 676 211 676 211 677 228 677 227 677 211 678 227 678 230 678 212 679 143 679 145 679 211 680 143 680 212 680 546 681 531 681 564 681 564 682 531 682 561 682 564 683 561 683 569 683 564 684 569 684 572 684 562 685 548 685 565 685 565 686 548 686 547 686 572 687 569 687 562 687 572 688 562 688 565 688 547 689 548 689 515 689 547 690 515 690 487 690 487 691 515 691 438 691 487 692 438 692 401 692 401 693 438 693 381 693 401 694 381 694 370 694 370 695 381 695 352 695 352 696 381 696 351 696 352 697 351 697 327 697 352 698 327 698 325 698 325 699 327 699 186 699 186 700 327 700 298 700 186 701 298 701 246 701 186 702 246 702 241 702 241 703 246 703 159 703 159 704 246 704 168 704 159 705 168 705 140 705 159 706 140 706 129 706 129 707 140 707 114 707 114 708 140 708 122 708 531 709 546 709 486 709 531 710 486 710 514 710 514 711 486 711 437 711 437 712 486 712 443 712 437 713 443 713 380 713 380 714 443 714 364 714 380 715 364 715 350 715 350 716 364 716 332 716 350 717 332 717 326 717 326 718 307 718 296 718 326 719 296 719 297 719 297 720 296 720 245 720 245 721 296 721 240 721 245 722 240 722 158 722 245 723 158 723 167 723 167 724 158 724 139 724 139 725 158 725 128 725 139 726 128 726 113 726 139 727 113 727 121 727 121 728 113 728 111 728 111 729 113 729 106 729 111 730 106 730 122 730 122 731 106 731 114 731 541 732 481 732 465 732 409 733 465 733 481 733 345 734 368 734 376 734 376 735 368 735 409 735 409 736 368 736 394 736 409 737 394 737 465 737 288 738 308 738 321 738 321 739 308 739 345 739 345 740 308 740 330 740 345 741 330 741 368 741 151 742 119 742 184 742 151 743 184 743 223 743 223 744 184 744 288 744 288 745 184 745 226 745 288 746 226 746 308 746 119 747 151 747 116 747 116 748 151 748 136 748 116 749 136 749 131 749 125 750 131 750 103 750 103 751 131 751 127 751 103 752 127 752 120 752 120 753 127 753 133 753 120 754 133 754 134 754 134 755 133 755 138 755 134 756 138 756 117 756 117 757 138 757 153 757 117 758 153 758 185 758 185 759 153 759 225 759 323 760 309 760 290 760 290 761 309 761 286 761 290 762 286 762 225 762 225 763 286 763 185 763 378 764 369 764 347 764 347 765 369 765 348 765 347 766 348 766 323 766 323 767 348 767 309 767 483 768 466 768 411 768 411 769 466 769 416 769 411 770 416 770 378 770 378 771 416 771 369 771 543 772 466 772 483 772 552 773 556 773 543 773 543 774 556 774 545 774 543 775 545 775 466 775 465 776 544 776 541 776 541 777 544 777 555 777 541 778 555 778 550 778 550 779 555 779 558 779 558 780 555 780 563 780 558 781 563 781 552 781 552 782 563 782 556 782 313 783 318 783 341 783 318 784 313 784 283 784 283 785 313 785 293 785 283 786 293 786 265 786 208 787 215 787 265 787 265 788 215 788 270 788 265 789 270 789 283 789 166 790 195 790 189 790 189 791 195 791 208 791 208 792 195 792 215 792 188 793 194 793 166 793 166 794 194 794 176 794 166 795 176 795 195 795 214 796 207 796 264 796 207 797 214 797 188 797 188 798 214 798 194 798 292 799 282 799 264 799 264 800 282 800 269 800 264 801 269 801 214 801 335 802 317 802 312 802 312 803 317 803 292 803 292 804 317 804 282 804 362 805 355 805 335 805 335 806 355 806 336 806 335 807 336 807 317 807 383 808 389 808 422 808 383 809 422 809 413 809 389 810 383 810 362 810 362 811 383 811 355 811 413 812 422 812 444 812 444 813 422 813 469 813 525 814 488 814 495 814 495 815 488 815 469 815 469 816 488 816 444 816 496 817 489 817 525 817 525 818 489 818 505 818 525 819 505 819 488 819 414 820 445 820 423 820 423 821 445 821 470 821 470 822 445 822 496 822 496 823 445 823 489 823 414 824 423 824 384 824 384 825 423 825 390 825 318 826 342 826 341 826 341 827 342 827 357 827 341 828 357 828 363 828 363 829 357 829 390 829 390 830 357 830 384 830 512 831 503 831 513 831 338 832 319 832 314 832 314 833 319 833 281 833 314 834 281 834 294 834 294 835 281 835 267 835 267 836 281 836 275 836 267 837 275 837 221 837 267 838 221 838 209 838 209 839 221 839 196 839 209 840 196 840 192 840 192 841 196 841 169 841 169 842 196 842 177 842 169 843 177 843 170 843 462 844 393 844 407 844 407 845 393 845 382 845 382 846 393 846 379 846 382 847 379 847 358 847 358 848 379 848 356 848 358 849 356 849 338 849 338 850 356 850 337 850 338 851 337 851 319 851 513 852 503 852 490 852 490 853 503 853 479 853 490 854 479 854 462 854 462 855 479 855 458 855 462 856 458 856 393 856 228 857 229 857 227 857 456 858 454 858 455 858 412 859 424 859 427 859 331 860 306 860 300 860 365 861 334 861 331 861 396 862 372 862 365 862 519 863 520 863 524 863 510 864 522 864 521 864 521 865 522 865 524 865 518 866 519 866 524 866 517 867 518 867 524 867 516 868 517 868 524 868 510 869 521 869 520 869 510 870 520 870 519 870 510 871 519 871 518 871 510 872 518 872 517 872 510 873 517 873 516 873 520 874 521 874 524 874 484 875 498 875 494 875 488 876 203 876 444 876 413 877 444 877 203 877 413 878 203 878 383 878 384 879 357 879 203 879 383 880 203 880 355 880 318 881 283 881 203 881 203 882 283 882 270 882 203 883 270 883 215 883 269 884 282 884 203 884 269 885 203 885 214 885 194 886 214 886 203 886 215 887 195 887 203 887 203 888 282 888 317 888 203 889 489 889 445 889 336 890 355 890 203 890 336 891 203 891 317 891 203 892 488 892 505 892 203 893 505 893 489 893 203 894 357 894 342 894 203 895 342 895 318 895 203 896 195 896 176 896 203 897 176 897 194 897 173 898 582 898 193 898 193 899 582 899 199 899 199 900 582 900 210 900 210 901 582 901 220 901 220 902 582 902 266 902 266 903 582 903 291 903 291 904 582 904 311 904 311 905 582 905 324 905 324 906 582 906 333 906 333 907 582 907 349 907 349 908 582 908 361 908 361 909 582 909 385 909 385 910 582 910 403 910 403 911 582 911 457 911 457 912 582 912 477 912 477 913 582 913 493 913 493 914 582 914 508 914 508 915 582 915 512 915 503 916 512 916 582 916 479 917 503 917 582 917 458 918 479 918 582 918 393 919 458 919 582 919 379 920 393 920 582 920 356 921 379 921 582 921 337 922 356 922 582 922 319 923 337 923 582 923 281 924 319 924 582 924 196 925 221 925 582 925 177 926 196 926 582 926 170 927 177 927 582 927 170 928 582 928 173 928 148 929 183 929 534 929 115 930 183 930 148 930 148 931 534 931 529 931 148 932 529 932 154 932 144 933 536 933 539 933 539 933 147 933 144 933 157 934 213 934 538 934 212 935 213 935 229 935 145 936 213 936 212 936 145 937 146 937 213 937 28 938 29 938 33 938 29 939 35 939 33 939 203 940 445 940 414 940 203 941 414 941 384 941 221 942 275 942 582 942 275 943 281 943 582 943 307 944 326 944 332 944 97 945 113 945 128 945 486 946 400 946 443 946 500 947 401 947 501 947 305 948 310 948 325 948 310 949 343 949 325 949 443 950 400 950 364 950 400 951 183 951 364 951 425 952 370 952 371 952 370 953 352 953 371 953 486 954 546 954 400 954 546 955 575 955 400 955 95 956 106 956 97 956 106 957 113 957 97 957 99 958 104 958 114 958 104 959 129 959 114 959 487 960 559 960 547 960 559 961 573 961 547 961 576 962 565 962 573 962 565 963 547 963 573 963 559 964 487 964 500 964 487 965 401 965 500 965 564 966 572 966 578 966 572 967 580 967 578 967 159 968 129 968 109 968 129 969 104 969 109 969 258 970 305 970 186 970 305 971 325 971 186 971 370 972 425 972 401 972 425 973 501 973 401 973 99 974 114 974 95 974 114 975 106 975 95 975 572 976 565 976 580 976 565 977 576 977 580 977 109 978 156 978 159 978 156 979 241 979 159 979 186 980 241 980 258 980 241 981 156 981 258 981 97 982 128 982 101 982 128 983 108 983 101 983 575 984 546 984 578 984 546 985 564 985 578 985 240 986 108 986 158 986 240 987 296 987 108 987 296 988 115 988 108 988 371 989 352 989 343 989 352 990 325 990 343 990 364 991 183 991 332 991 115 992 296 992 307 992 115 993 307 993 332 993 115 994 332 994 183 994 485 995 497 995 567 995 509 996 527 996 497 996 197 997 204 997 178 997 568 998 544 998 465 998 330 999 308 999 219 999 465 1000 394 1000 499 1000 116 1001 131 1001 125 1001 98 1002 116 1002 125 1002 178 1003 204 1003 206 1003 178 1004 206 1004 107 1004 494 1005 530 1005 506 1005 530 1006 526 1006 506 1006 474 1007 499 1007 367 1007 474 1008 367 1008 471 1008 160 1009 161 1009 118 1009 161 1010 162 1010 118 1010 426 1011 366 1011 369 1011 366 1012 348 1012 369 1012 502 1013 416 1013 528 1013 299 1014 260 1014 286 1014 299 1015 286 1015 309 1015 299 1016 309 1016 348 1016 299 1017 348 1017 366 1017 103 1018 120 1018 96 1018 120 1019 100 1019 96 1019 184 1020 107 1020 206 1020 555 1021 544 1021 579 1021 544 1022 568 1022 579 1022 555 1023 579 1023 563 1023 579 1024 581 1024 563 1024 581 1025 577 1025 556 1025 581 1026 556 1026 563 1026 556 1027 577 1027 574 1027 556 1028 574 1028 545 1028 466 1029 545 1029 560 1029 545 1030 574 1030 560 1030 560 1031 528 1031 466 1031 528 1032 416 1032 466 1032 308 1033 226 1033 219 1033 530 1034 566 1034 526 1034 566 1035 527 1035 526 1035 474 1036 485 1036 499 1036 485 1037 567 1037 499 1037 184 1038 119 1038 107 1038 119 1039 102 1039 107 1039 96 1040 98 1040 125 1040 96 1041 125 1041 103 1041 120 1042 134 1042 100 1042 134 1043 105 1043 100 1043 162 1044 178 1044 118 1044 178 1045 107 1045 118 1045 499 1046 394 1046 368 1046 499 1047 368 1047 367 1047 527 1048 566 1048 497 1048 566 1049 567 1049 497 1049 368 1050 330 1050 367 1050 330 1051 219 1051 367 1051 119 1052 116 1052 102 1052 116 1053 98 1053 102 1053 110 1054 105 1054 117 1054 105 1055 134 1055 117 1055 184 1056 206 1056 219 1056 184 1057 219 1057 226 1057 185 1058 110 1058 117 1058 286 1059 260 1059 187 1059 286 1060 187 1060 185 1060 426 1061 369 1061 416 1061 426 1062 416 1062 502 1062 465 1063 499 1063 567 1063 465 1064 567 1064 568 1064 149 1065 110 1065 185 1065 149 1066 185 1066 187 1066 97 1067 98 1067 96 1067 97 1068 96 1068 95 1068 102 1069 101 1069 107 1069 101 1070 108 1070 107 1070 154 1071 155 1071 148 1071 155 1072 118 1072 148 1072 107 1073 108 1073 118 1073 108 1074 115 1074 118 1074 97 1075 101 1075 102 1075 97 1076 102 1076 98 1076 566 1077 183 1077 400 1077 566 1078 400 1078 567 1078 400 1079 575 1079 567 1079 575 1080 568 1080 567 1080 578 1081 580 1081 581 1081 578 1082 581 1082 579 1082 578 1083 579 1083 568 1083 578 1084 568 1084 575 1084 530 1085 529 1085 534 1085 530 1086 534 1086 566 1086 205 1087 202 1087 198 1087 472 1088 467 1088 459 1088 417 1089 472 1089 459 1089 198 1090 216 1090 205 1090 387 1091 472 1091 417 1091 373 1092 472 1092 387 1092 198 1093 262 1093 216 1093 284 1094 262 1094 198 1094 218 1095 461 1095 339 1095 461 1096 353 1096 339 1096 353 1097 461 1097 373 1097 461 1098 472 1098 373 1098 315 1099 303 1099 218 1099 303 1100 200 1100 218 1100 200 1101 303 1101 284 1101 200 1102 284 1102 198 1102 155 1103 163 1103 160 1103 118 1104 155 1104 160 1104 549 1105 557 1105 570 1105 557 1106 571 1106 570 1106 551 1107 542 1107 554 1107 551 1108 554 1108 571 1108 482 1109 533 1109 542 1109 533 1110 554 1110 542 1110 553 1111 532 1111 540 1111 553 1112 540 1112 549 1112 463 1113 480 1113 532 1113 480 1114 540 1114 532 1114 410 1115 464 1115 482 1115 464 1116 533 1116 482 1116 410 1117 377 1117 392 1117 410 1118 392 1118 464 1118 391 1119 375 1119 408 1119 391 1120 408 1120 463 1120 344 1121 375 1121 359 1121 375 1122 391 1122 359 1122 329 1123 360 1123 346 1123 360 1124 377 1124 346 1124 302 1125 329 1125 322 1125 329 1126 346 1126 322 1126 328 1127 320 1127 344 1127 328 1128 344 1128 359 1128 257 1129 302 1129 289 1129 302 1130 322 1130 289 1130 301 1131 256 1131 287 1131 301 1132 287 1132 320 1132 181 1133 257 1133 224 1133 257 1134 289 1134 224 1134 222 1135 256 1135 180 1135 222 1136 180 1136 150 1136 137 1137 142 1137 152 1137 142 1138 181 1138 152 1138 150 1139 180 1139 141 1139 150 1140 141 1140 135 1140 135 1141 141 1141 123 1141 135 1142 123 1142 130 1142 132 1143 124 1143 137 1143 124 1144 142 1144 137 1144 130 1145 123 1145 112 1145 130 1146 112 1146 126 1146 126 1147 112 1147 132 1147 112 1148 124 1148 132 1148

-0.07000 -0.02637 -0.06691 -0.07000 -0.02637 0.03309 -0.07000 -0.02437 -0.06691 -0.07000 -0.02437 0.03309 -0.05200 -0.02437 -0.06691 -0.05200 -0.02437 0.03309 -0.05000 -0.08967 0.20809 -0.05000 -0.05967 0.26005 -0.05000 -0.04637 0.03509 -0.05000 -0.04637 0.18309 -0.05000 -0.02237 -0.06691 -0.05000 -0.02237 0.03309 -0.05000 -0.02237 0.03509 -0.05000 0.01363 -0.06691 -0.05000 0.01363 0.21773 0.05000 -0.05967 0.26005 0.05000 0.01363 0.21773 0.05000 0.01363 -0.06691 0.05000 -0.08967 0.20809 0.05000 -0.04637 0.03509 0.05000 -0.04637 0.18309 0.05000 -0.02237 -0.06691 0.05000 -0.02237 0.03309 0.05000 -0.02237 0.03509 0.05200 -0.02437 -0.06691 0.05200 -0.02437 0.03309 0.07000 -0.02637 -0.06691 0.07000 -0.02637 0.03309 0.07000 -0.02437 -0.06691 0.07000 -0.02437 0.03309 -0.48750 -0.24983 0.62075 -0.48750 -0.24981 0.62297 -0.48750 -0.24944 0.61857 -0.48750 -0.24938 0.62514 -0.48750 -0.24866 0.61650 -0.48750 -0.24856 0.62720 -0.48750 -0.24751 0.61461 -0.48750 -0.24738 0.62907 -0.48750 -0.24604 0.61296 -0.48750 -0.24587 0.63069 -0.48750 -0.24428 0.61161 -0.48750 -0.24409 0.63201 -0.48750 -0.24231 0.61060 -0.48750 -0.24210 0.63298 -0.48750 -0.24019 0.60997 -0.48750 -0.23997 0.63357 -0.48750 -0.23798 0.60975 -0.48750 -0.23776 0.63375 -0.48750 -0.23578 0.60993 -0.48750 -0.23556 0.63353 -0.48750 -0.23364 0.61052 -0.48750 -0.23343 0.63290 -0.48750 -0.23165 0.61149 -0.48750 -0.23146 0.63189 -0.48750 -0.22987 0.61281 -0.48750 -0.22971 0.63054 -0.48750 -0.22836 0.61443 -0.48750 -0.22823 0.62889 -0.48750 -0.22718 0.61630 -0.48750 -0.22708 0.62700 -0.48750 -0.22636 0.61836 -0.48750 -0.22630 0.62493 -0.48750 -0.22593 0.62053 -0.48750 -0.22591 0.62275 -0.45050 -0.24983 0.62075 -0.45050 -0.24981 0.62297 -0.45050 -0.24944 0.61857 -0.45050 -0.24938 0.62514 -0.45050 -0.24866 0.61650 -0.45050 -0.24856 0.62720 -0.45050 -0.24751 0.61461 -0.45050 -0.24738 0.62907 -0.45050 -0.24604 0.61296 -0.45050 -0.24587 0.63069 -0.45050 -0.24428 0.61161 -0.45050 -0.24409 0.63201 -0.45050 -0.24231 0.61060 -0.45050 -0.24210 0.63298 -0.45050 -0.24019 0.60997 -0.45050 -0.23997 0.63357 -0.45050 -0.23798 0.60975 -0.45050 -0.23776 0.63375 -0.45050 -0.23578 0.60993 -0.45050 -0.23556 0.63353 -0.45050 -0.23364 0.61052 -0.45050 -0.23343 0.63290 -0.45050 -0.23165 0.61149 -0.45050 -0.23146 0.63189 -0.45050 -0.22987 0.61281 -0.45050 -0.22971 0.63054 -0.45050 -0.22836 0.61443 -0.45050 -0.22823 0.62889 -0.45050 -0.22718 0.61630 -0.45050 -0.22708 0.62700 -0.45050 -0.22636 0.61836 -0.45050 -0.22630 0.62493 -0.45050 -0.22593 0.62053 -0.45050 -0.22591 0.62275 -0.48750 -0.12483 0.62075 -0.48750 -0.12481 0.62297 -0.48750 -0.12444 0.61857 -0.48750 -0.12438 0.62514 -0.48750 -0.12366 0.61650 -0.48750 -0.12356 0.62720 -0.48750 -0.12251 0.61461 -0.48750 -0.12238 0.62907 -0.48750 -0.12104 0.61296 -0.48750 -0.12087 0.63069 -0.48750 -0.11928 0.61161 -0.48750 -0.11909 0.63201 -0.48750 -0.11731 0.61060 -0.48750 -0.11710 0.63298 -0.48750 -0.11519 0.60997 -0.48750 -0.11497 0.63357 -0.48750 -0.11298 0.60975 -0.48750 -0.11276 0.63375 -0.48750 -0.11078 0.60993 -0.48750 -0.11056 0.63353 -0.48750 -0.10864 0.61052 -0.48750 -0.10843 0.63290 -0.48750 -0.10665 0.61149 -0.48750 -0.10646 0.63189 -0.48750 -0.10487 0.61281 -0.48750 -0.10471 0.63054 -0.48750 -0.10336 0.61443 -0.48750 -0.10323 0.62889 -0.48750 -0.10218 0.61630 -0.48750 -0.10208 0.62700 -0.48750 -0.10136 0.61836 -0.48750 -0.10130 0.62493 -0.48750 -0.10093 0.62053 -0.48750 -0.10091 0.62275 -0.45050 -0.12483 0.62075 -0.45050 -0.12481 0.62297 -0.45050 -0.12444 0.61857 -0.45050 -0.12438 0.62514 -0.45050 -0.12366 0.61650 -0.45050 -0.12356 0.62720 -0.45050 -0.12251 0.61461 -0.45050 -0.12238 0.62907 -0.45050 -0.12104 0.61296 -0.45050 -0.12087 0.63069 -0.45050 -0.11928 0.61161 -0.45050 -0.11909 0.63201 -0.45050 -0.11731 0.61060 -0.45050 -0.11710 0.63298 -0.45050 -0.11519 0.60997 -0.45050 -0.11497 0.63357 -0.45050 -0.11298 0.60975 -0.45050 -0.11276 0.63375 -0.45050 -0.11078 0.60993 -0.45050 -0.11056 0.63353 -0.45050 -0.10864 0.61052 -0.45050 -0.10843 0.63290 -0.45050 -0.10665 0.61149 -0.45050 -0.10646 0.63189 -0.45050 -0.10487 0.61281 -0.45050 -0.10471 0.63054 -0.45050 -0.10336 0.61443 -0.45050 -0.10323 0.62889 -0.45050 -0.10218 0.61630 -0.45050 -0.10208 0.62700 -0.45050 -0.10136 0.61836 -0.45050 -0.10130 0.62493 -0.45050 -0.10093 0.62053 -0.45050 -0.10091 0.62275 -0.48750 -0.11287 0.62175 -0.45050 -0.11287 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.48750 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.62175 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.45050 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.48750 -0.23787 0.29676 -0.45050 -0.11287 0.29676 -0.48750 -0.11287 0.29676 -0.45050 -0.10091 0.29776 -0.45050 -0.10093 0.29554 -0.45050 -0.10130 0.29994 -0.45050 -0.10136 0.29337 -0.45050 -0.10208 0.30201 -0.45050 -0.10218 0.29131 -0.45050 -0.10323 0.30390 -0.45050 -0.10336 0.28944 -0.45050 -0.10471 0.30555 -0.45050 -0.10487 0.28782 -0.45050 -0.10646 0.30690 -0.45050 -0.10665 0.28650 -0.45050 -0.10843 0.30791 -0.45050 -0.10864 0.28553 -0.45050 -0.11056 0.30853 -0.45050 -0.11078 0.28494 -0.45050 -0.11276 0.30876 -0.45050 -0.11298 0.28476 -0.45050 -0.11497 0.30858 -0.45050 -0.11519 0.28498 -0.45050 -0.11710 0.30799 -0.45050 -0.11731 0.28561 -0.45050 -0.11909 0.30702 -0.45050 -0.11928 0.28662 -0.45050 -0.12087 0.30570 -0.45050 -0.12104 0.28797 -0.45050 -0.12238 0.30408 -0.45050 -0.12251 0.28962 -0.45050 -0.12356 0.30221 -0.45050 -0.12366 0.29151 -0.45050 -0.12438 0.30015 -0.45050 -0.12444 0.29358 -0.45050 -0.12481 0.29798 -0.45050 -0.12483 0.29576 -0.48750 -0.10091 0.29776 -0.48750 -0.10093 0.29554 -0.48750 -0.10130 0.29994 -0.48750 -0.10136 0.29337 -0.48750 -0.10208 0.30201 -0.48750 -0.10218 0.29131 -0.48750 -0.10323 0.30390 -0.48750 -0.10336 0.28944 -0.48750 -0.10471 0.30555 -0.48750 -0.10487 0.28782 -0.48750 -0.10646 0.30690 -0.48750 -0.10665 0.28650 -0.48750 -0.10843 0.30791 -0.48750 -0.10864 0.28553 -0.48750 -0.11056 0.30853 -0.48750 -0.11078 0.28494 -0.48750 -0.11276 0.30876 -0.48750 -0.11298 0.28476 -0.48750 -0.11497 0.30858 -0.48750 -0.11519 0.28498 -0.48750 -0.11710 0.30799 -0.48750 -0.11731 0.28561 -0.48750 -0.11909 0.30702 -0.48750 -0.11928 0.28662 -0.48750 -0.12087 0.30570 -0.48750 -0.12104 0.28797 -0.48750 -0.12238 0.30408 -0.48750 -0.12251 0.28962 -0.48750 -0.12356 0.30221 -0.48750 -0.12366 0.29151 -0.48750 -0.12438 0.30015 -0.48750 -0.12444 0.29358 -0.48750 -0.12481 0.29798 -0.48750 -0.12483 0.29576 -0.45050 -0.22591 0.29776 -0.45050 -0.22593 0.29554 -0.45050 -0.22630 0.29994 -0.45050 -0.22636 0.29337 -0.45050 -0.22708 0.30201 -0.45050 -0.22718 0.29131 -0.45050 -0.22823 0.30390 -0.45050 -0.22836 0.28944 -0.45050 -0.22971 0.30555 -0.45050 -0.22987 0.28782 -0.45050 -0.23146 0.30690 -0.45050 -0.23165 0.28650 -0.45050 -0.23343 0.30791 -0.45050 -0.23364 0.28553 -0.45050 -0.23556 0.30853 -0.45050 -0.23578 0.28494 -0.45050 -0.23776 0.30876 -0.45050 -0.23798 0.28476 -0.45050 -0.23997 0.30858 -0.45050 -0.24019 0.28498 -0.45050 -0.24210 0.30799 -0.45050 -0.24231 0.28561 -0.45050 -0.24409 0.30702 -0.45050 -0.24428 0.28662 -0.45050 -0.24587 0.30570 -0.45050 -0.24604 0.28797 -0.45050 -0.24738 0.30408 -0.45050 -0.24751 0.28962 -0.45050 -0.24856 0.30221 -0.45050 -0.24866 0.29151 -0.45050 -0.24938 0.30015 -0.45050 -0.24944 0.29358 -0.45050 -0.24981 0.29798 -0.45050 -0.24983 0.29576 -0.48750 -0.22591 0.29776 -0.48750 -0.22593 0.29554 -0.48750 -0.22630 0.29994 -0.48750 -0.22636 0.29337 -0.48750 -0.22708 0.30201 -0.48750 -0.22718 0.29131 -0.48750 -0.22823 0.30390 -0.48750 -0.22836 0.28944 -0.48750 -0.22971 0.30555 -0.48750 -0.22987 0.28782 -0.48750 -0.23146 0.30690 -0.48750 -0.23165 0.28650 -0.48750 -0.23343 0.30791 -0.48750 -0.23364 0.28553 -0.48750 -0.23556 0.30853 -0.48750 -0.23578 0.28494 -0.48750 -0.23776 0.30876 -0.48750 -0.23798 0.28476 -0.48750 -0.23997 0.30858 -0.48750 -0.24019 0.28498 -0.48750 -0.24210 0.30799 -0.48750 -0.24231 0.28561 -0.48750 -0.24409 0.30702 -0.48750 -0.24428 0.28662 -0.48750 -0.24587 0.30570 -0.48750 -0.24604 0.28797 -0.48750 -0.24738 0.30408 -0.48750 -0.24751 0.28962 -0.48750 -0.24856 0.30221 -0.48750 -0.24866 0.29151 -0.48750 -0.24938 0.30015 -0.48750 -0.24944 0.29358 -0.48750 -0.24981 0.29798 -0.48750 -0.24983 0.29576 0.45051 -0.24983 0.29576 0.45051 -0.24981 0.29798 0.45051 -0.24944 0.29358 0.45051 -0.24938 0.30015 0.45051 -0.24866 0.29151 0.45051 -0.24856 0.30221 0.45051 -0.24751 0.28962 0.45051 -0.24738 0.30408 0.45051 -0.24604 0.28797 0.45051 -0.24587 0.30570 0.45051 -0.24428 0.28662 0.45051 -0.24409 0.30702 0.45051 -0.24231 0.28561 0.45051 -0.24210 0.30799 0.45051 -0.24019 0.28498 0.45051 -0.23997 0.30858 0.45051 -0.23798 0.28476 0.45051 -0.23776 0.30876 0.45051 -0.23578 0.28494 0.45051 -0.23556 0.30853 0.45051 -0.23364 0.28553 0.45051 -0.23343 0.30791 0.45051 -0.23165 0.28650 0.45051 -0.23146 0.30690 0.45051 -0.22987 0.28782 0.45051 -0.22971 0.30555 0.45051 -0.22836 0.28944 0.45051 -0.22823 0.30390 0.45051 -0.22718 0.29131 0.45051 -0.22708 0.30201 0.45051 -0.22636 0.29337 0.45051 -0.22630 0.29994 0.45051 -0.22593 0.29554 0.45051 -0.22591 0.29776 0.48751 -0.24983 0.29576 0.48751 -0.24981 0.29798 0.48751 -0.24944 0.29358 0.48751 -0.24938 0.30015 0.48751 -0.24866 0.29151 0.48751 -0.24856 0.30221 0.48751 -0.24751 0.28962 0.48751 -0.24738 0.30408 0.48751 -0.24604 0.28797 0.48751 -0.24587 0.30570 0.48751 -0.24428 0.28662 0.48751 -0.24409 0.30702 0.48751 -0.24231 0.28561 0.48751 -0.24210 0.30799 0.48751 -0.24019 0.28498 0.48751 -0.23997 0.30858 0.48751 -0.23798 0.28476 0.48751 -0.23776 0.30876 0.48751 -0.23578 0.28494 0.48751 -0.23556 0.30853 0.48751 -0.23364 0.28553 0.48751 -0.23343 0.30791 0.48751 -0.23165 0.28650 0.48751 -0.23146 0.30690 0.48751 -0.22987 0.28782 0.48751 -0.22971 0.30555 0.48751 -0.22836 0.28944 0.48751 -0.22823 0.30390 0.48751 -0.22718 0.29131 0.48751 -0.22708 0.30201 0.48751 -0.22636 0.29337 0.48751 -0.22630 0.29994 0.48751 -0.22593 0.29554 0.48751 -0.22591 0.29776 0.45051 -0.12483 0.29576 0.45051 -0.12481 0.29798 0.45051 -0.12444 0.29358 0.45051 -0.12438 0.30015 0.45051 -0.12366 0.29151 0.45051 -0.12356 0.30221 0.45051 -0.12251 0.28962 0.45051 -0.12238 0.30408 0.45051 -0.12104 0.28797 0.45051 -0.12087 0.30570 0.45051 -0.11928 0.28662 0.45051 -0.11909 0.30702 0.45051 -0.11731 0.28561 0.45051 -0.11710 0.30799 0.45051 -0.11519 0.28498 0.45051 -0.11497 0.30858 0.45051 -0.11298 0.28476 0.45051 -0.11276 0.30876 0.45051 -0.11078 0.28494 0.45051 -0.11056 0.30853 0.45051 -0.10864 0.28553 0.45051 -0.10843 0.30791 0.45051 -0.10665 0.28650 0.45051 -0.10646 0.30690 0.45051 -0.10487 0.28782 0.45051 -0.10471 0.30555 0.45051 -0.10336 0.28944 0.45051 -0.10323 0.30390 0.45051 -0.10218 0.29131 0.45051 -0.10208 0.30201 0.45051 -0.10136 0.29337 0.45051 -0.10130 0.29994 0.45051 -0.10093 0.29554 0.45051 -0.10091 0.29776 0.48751 -0.12483 0.29576 0.48751 -0.12481 0.29798 0.48751 -0.12444 0.29358 0.48751 -0.12438 0.30015 0.48751 -0.12366 0.29151 0.48751 -0.12356 0.30221 0.48751 -0.12251 0.28962 0.48751 -0.12238 0.30408 0.48751 -0.12104 0.28797 0.48751 -0.12087 0.30570 0.48751 -0.11928 0.28662 0.48751 -0.11909 0.30702 0.48751 -0.11731 0.28561 0.48751 -0.11710 0.30799 0.48751 -0.11519 0.28498 0.48751 -0.11497 0.30858 0.48751 -0.11298 0.28476 0.48751 -0.11276 0.30876 0.48751 -0.11078 0.28494 0.48751 -0.11056 0.30853 0.48751 -0.10864 0.28553 0.48751 -0.10843 0.30791 0.48751 -0.10665 0.28650 0.48751 -0.10646 0.30690 0.48751 -0.10487 0.28782 0.48751 -0.10471 0.30555 0.48751 -0.10336 0.28944 0.48751 -0.10323 0.30390 0.48751 -0.10218 0.29131 0.48751 -0.10208 0.30201 0.48751 -0.10136 0.29337 0.48751 -0.10130 0.29994 0.48751 -0.10093 0.29554 0.48751 -0.10091 0.29776 0.45051 -0.11287 0.29676 0.48751 -0.11287 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.45051 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.29676 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.48751 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.45051 -0.23787 0.62175 0.48751 -0.11287 0.62175 0.45051 -0.11287 0.62175 0.48751 -0.10091 0.62275 0.48751 -0.10093 0.62053 0.48751 -0.10130 0.62493 0.48751 -0.10136 0.61836 0.48751 -0.10208 0.62700 0.48751 -0.10218 0.61630 0.48751 -0.10323 0.62889 0.48751 -0.10336 0.61443 0.48751 -0.10471 0.63054 0.48751 -0.10487 0.61281 0.48751 -0.10646 0.63189 0.48751 -0.10665 0.61149 0.48751 -0.10843 0.63290 0.48751 -0.10864 0.61052 0.48751 -0.11056 0.63353 0.48751 -0.11078 0.60993 0.48751 -0.11276 0.63375 0.48751 -0.11298 0.60975 0.48751 -0.11497 0.63357 0.48751 -0.11519 0.60997 0.48751 -0.11710 0.63298 0.48751 -0.11731 0.61060 0.48751 -0.11909 0.63201 0.48751 -0.11928 0.61161 0.48751 -0.12087 0.63069 0.48751 -0.12104 0.61296 0.48751 -0.12238 0.62907 0.48751 -0.12251 0.61461 0.48751 -0.12356 0.62720 0.48751 -0.12366 0.61650 0.48751 -0.12438 0.62514 0.48751 -0.12444 0.61857 0.48751 -0.12481 0.62297 0.48751 -0.12483 0.62075 0.45051 -0.10091 0.62275 0.45051 -0.10093 0.62053 0.45051 -0.10130 0.62493 0.45051 -0.10136 0.61836 0.45051 -0.10208 0.62700 0.45051 -0.10218 0.61630 0.45051 -0.10323 0.62889 0.45051 -0.10336 0.61443 0.45051 -0.10471 0.63054 0.45051 -0.10487 0.61281 0.45051 -0.10646 0.63189 0.45051 -0.10665 0.61149 0.45051 -0.10843 0.63290 0.45051 -0.10864 0.61052 0.45051 -0.11056 0.63353 0.45051 -0.11078 0.60993 0.45051 -0.11276 0.63375 0.45051 -0.11298 0.60975 0.45051 -0.11497 0.63357 0.45051 -0.11519 0.60997 0.45051 -0.11710 0.63298 0.45051 -0.11731 0.61060 0.45051 -0.11909 0.63201 0.45051 -0.11928 0.61161 0.45051 -0.12087 0.63069 0.45051 -0.12104 0.61296 0.45051 -0.12238 0.62907 0.45051 -0.12251 0.61461 0.45051 -0.12356 0.62720 0.45051 -0.12366 0.61650 0.45051 -0.12438 0.62514 0.45051 -0.12444 0.61857 0.45051 -0.12481 0.62297 0.45051 -0.12483 0.62075 0.48751 -0.22591 0.62275 0.48751 -0.22593 0.62053 0.48751 -0.22630 0.62493 0.48751 -0.22636 0.61836 0.48751 -0.22708 0.62700 0.48751 -0.22718 0.61630 0.48751 -0.22823 0.62889 0.48751 -0.22836 0.61443 0.48751 -0.22971 0.63054 0.48751 -0.22987 0.61281 0.48751 -0.23146 0.63189 0.48751 -0.23165 0.61149 0.48751 -0.23343 0.63290 0.48751 -0.23364 0.61052 0.48751 -0.23556 0.63353 0.48751 -0.23578 0.60993 0.48751 -0.23776 0.63375 0.48751 -0.23798 0.60975 0.48751 -0.23997 0.63357 0.48751 -0.24019 0.60997 0.48751 -0.24210 0.63298 0.48751 -0.24231 0.61060 0.48751 -0.24409 0.63201 0.48751 -0.24428 0.61161 0.48751 -0.24587 0.63069 0.48751 -0.24604 0.61296 0.48751 -0.24738 0.62907 0.48751 -0.24751 0.61461 0.48751 -0.24856 0.62720 0.48751 -0.24866 0.61650 0.48751 -0.24938 0.62514 0.48751 -0.24944 0.61857 0.48751 -0.24981 0.62297 0.48751 -0.24983 0.62075 0.45051 -0.22591 0.62275 0.45051 -0.22593 0.62053 0.45051 -0.22630 0.62493 0.45051 -0.22636 0.61836 0.45051 -0.22708 0.62700 0.45051 -0.22718 0.61630 0.45051 -0.22823 0.62889 0.45051 -0.22836 0.61443 0.45051 -0.22971 0.63054 0.45051 -0.22987 0.61281 0.45051 -0.23146 0.63189 0.45051 -0.23165 0.61149 0.45051 -0.23343 0.63290 0.45051 -0.23364 0.61052 0.45051 -0.23556 0.63353 0.45051 -0.23578 0.60993 0.45051 -0.23776 0.63375 0.45051 -0.23798 0.60975 0.45051 -0.23997 0.63357 0.45051 -0.24019 0.60997 0.45051 -0.24210 0.63298 0.45051 -0.24231 0.61060 0.45051 -0.24409 0.63201 0.45051 -0.24428 0.61161 0.45051 -0.24587 0.63069 0.45051 -0.24604 0.61296 0.45051 -0.24738 0.62907 0.45051 -0.24751 0.61461 0.45051 -0.24856 0.62720 0.45051 -0.24866 0.61650 0.45051 -0.24938 0.62514 0.45051 -0.24944 0.61857 0.45051 -0.24981 0.62297 0.45051 -0.24983 0.62075 -0.40000 -0.28437 1.15125 -0.40000 -0.28437 1.21725 -0.40000 -0.07837 1.15125 -0.40000 -0.07837 1.21725 -0.39800 -0.28637 1.15125 -0.39800 -0.28637 1.21725 -0.39800 -0.28437 1.14925 -0.39800 -0.28437 1.21925 -0.39800 -0.07837 1.14925 -0.39800 -0.07837 1.21925 -0.39800 -0.07637 1.15125 -0.39800 -0.07637 1.21725 0.39800 -0.28637 1.15125 0.39800 -0.28637 1.21725 0.39800 -0.28437 1.14925 0.39800 -0.28437 1.21925 0.39800 -0.07837 1.14925 0.39800 -0.07837 1.21925 0.39800 -0.07637 1.15125 0.39800 -0.07637 1.21725 0.40000 -0.28437 1.15125 0.40000 -0.28437 1.21725 0.40000 -0.07837 1.15125 0.40000 -0.07837 1.21725 -0.20000 -0.28437 1.29125 -0.20000 -0.28437 1.34725 -0.20000 -0.07837 1.29125 -0.20000 -0.07837 1.34725 -0.19800 -0.28637 1.29125 -0.19800 -0.28637 1.34725 -0.19800 -0.28437 1.28925 -0.19800 -0.28437 1.34925 -0.19800 -0.07837 1.28925 -0.19800 -0.07837 1.34925 -0.19800 -0.07637 1.29125 -0.19800 -0.07637 1.34725 0.19800 -0.28637 1.29125 0.19800 -0.28637 1.34725 0.19800 -0.28437 1.28925 0.19800 -0.28437 1.34925 0.19800 -0.07837 1.28925 0.19800 -0.07837 1.34925 0.19800 -0.07637 1.29125 0.19800 -0.07637 1.34725 0.20000 -0.28437 1.29125 0.20000 -0.28437 1.34725 0.20000 -0.07837 1.29125 0.20000 -0.07837 1.34725 -0.36750 -0.28437 1.22125 -0.36750 -0.28437 1.28725 -0.36750 -0.07837 1.22125 -0.36750 -0.07837 1.28725 -0.36550 -0.28637 1.22125 -0.36550 -0.28637 1.28725 -0.36550 -0.28437 1.21925 -0.36550 -0.28437 1.28925 -0.36550 -0.07837 1.21925 -0.36550 -0.07837 1.28925 -0.36550 -0.07637 1.22125 -0.36550 -0.07637 1.28725 0.36550 -0.28637 1.22125 0.36550 -0.28637 1.28725 0.36550 -0.28437 1.21925 0.36550 -0.28437 1.28925 0.36550 -0.07837 1.21925 0.36550 -0.07837 1.28925 0.36550 -0.07637 1.22125 0.36550 -0.07637 1.28725 0.36750 -0.28437 1.22125 0.36750 -0.28437 1.28725 0.36750 -0.07837 1.22125 0.36750 -0.07837 1.28725 0.20000 -0.07837 1.34725 0.20000 -0.07837 1.29125 0.20000 -0.28437 1.34725 0.20000 -0.28437 1.29125 0.19800 -0.07637 1.34725 0.19800 -0.07637 1.29125 0.19800 -0.07837 1.34925 0.19800 -0.07837 1.28925 0.19800 -0.28437 1.34925 0.19800 -0.28437 1.28925 0.19800 -0.28637 1.34725 0.19800 -0.28637 1.29125 -0.19800 -0.07637 1.34725 -0.19800 -0.07637 1.29125 -0.19800 -0.07837 1.34925 -0.19800 -0.07837 1.28925 -0.19800 -0.28437 1.34925 -0.19800 -0.28437 1.28925 -0.19800 -0.28637 1.34725 -0.19800 -0.28637 1.29125 -0.20000 -0.07837 1.34725 -0.20000 -0.07837 1.29125 -0.20000 -0.28437 1.34725 -0.20000 -0.28437 1.29125 0.40000 -0.07837 1.14722 0.40000 -0.07837 1.08122 0.40000 -0.28437 1.14722 0.40000 -0.28437 1.08122 0.39800 -0.07637 1.14722 0.39800 -0.07637 1.08122 0.39800 -0.07837 1.14922 0.39800 -0.07837 1.07922 0.39800 -0.28437 1.14922 0.39800 -0.28437 1.07922 0.39800 -0.28637 1.14722 0.39800 -0.28637 1.08122 -0.39800 -0.07637 1.14722 -0.39800 -0.07637 1.08122 -0.39800 -0.07837 1.14922 -0.39800 -0.07837 1.07922 -0.39800 -0.28437 1.14922 -0.39800 -0.28437 1.07922 -0.39800 -0.28637 1.14722 -0.39800 -0.28637 1.08122 -0.40000 -0.07837 1.14722 -0.40000 -0.07837 1.08122 -0.40000 -0.28437 1.14722 -0.40000 -0.28437 1.08122 0.36808 -0.04007 -0.03896 0.36807 -0.06007 -0.03896 0.26417 -0.06007 -0.41277 0.32638 -0.04007 0.03323 0.32638 -0.06007 0.03323 0.26417 -0.04007 -0.41277 -0.25111 -0.04007 -0.41275 -0.25111 -0.06007 -0.41275 -0.31297 -0.04007 0.03331 -0.31297 -0.06007 0.03328 -0.35477 -0.04007 -0.03893 -0.35477 -0.06007 -0.03893 -0.31777 -0.02337 -0.03681 -0.31777 0.01663 -0.03681 -0.31710 0.03663 -0.03593 -0.31511 0.03663 -0.04448 -0.30595 -0.02337 -0.02119 -0.30595 0.03663 -0.02119 -0.30265 0.03663 -0.04734 -0.30248 -0.02337 -0.01762 -0.30248 0.03663 -0.01762 -0.30090 0.14623 -0.08501 -0.29000 0.03663 -0.03325 -0.29824 -0.02337 -0.01502 -0.29824 0.03663 -0.01502 -0.29348 -0.02337 -0.01356 -0.29348 0.03663 -0.01356 -0.29234 0.21517 -0.10891 -0.28994 0.23568 -0.11539 -0.28852 -0.02337 -0.01331 -0.28852 0.03663 -0.01331 -0.28545 0.27397 -0.12749 -0.28364 -0.02337 -0.01429 -0.28364 0.03663 -0.01429 -0.28279 0.29788 -0.13444 -0.28114 -0.00337 -0.01532 -0.28114 0.01663 -0.01532 -0.27915 -0.02337 -0.01645 -0.27915 -0.00337 -0.01645 -0.27915 0.01663 -0.01645 -0.27915 0.03663 -0.01645 -0.27787 0.34491 -0.14678 -0.27605 0.03663 -0.05344 -0.27534 -0.02337 -0.01964 -0.27534 -0.00337 -0.01964 -0.27534 0.01663 -0.01964 -0.27534 0.03663 -0.01964 -0.27381 0.38804 -0.15613 -0.27244 -0.02337 -0.02368 -0.27244 -0.00337 -0.02368 -0.27244 0.01663 -0.02368 -0.27244 0.03663 -0.02368 -0.27062 -0.02337 -0.02831 -0.27062 -0.00337 -0.02831 -0.27062 0.01663 -0.02831 -0.27062 0.03663 -0.02831 -0.27053 0.42820 -0.16271 -0.27000 -0.02337 -0.15396 -0.27000 -0.02337 -0.03325 -0.27000 -0.00337 -0.15396 -0.27000 -0.00337 -0.03325 -0.27000 0.01663 -0.03325 -0.27000 0.01663 -0.04739 -0.27000 0.02161 -0.04923 -0.27000 0.03663 -0.05475 -0.27000 0.03663 -0.03325 -0.26986 0.43793 -0.16376 -0.26818 0.46231 -0.16639 -0.25795 0.20663 -0.25844 -0.26754 0.47391 -0.16700 -0.26629 0.49572 -0.16825 -0.26575 0.50823 -0.16825 -0.26525 0.18674 -0.10801 -0.26523 0.18597 -0.10777 -0.26520 0.18567 -0.16825 -0.26518 0.18568 -0.10769 -0.26514 0.18812 -0.16825 -0.26514 0.18812 -0.10849 -0.26505 0.47418 -0.16825 -0.26504 0.18874 -0.10871 -0.26480 0.18366 -0.10714 -0.26467 0.18328 -0.16825 -0.26467 0.18328 -0.10706 -0.26452 0.18288 -0.10696 -0.26357 0.18108 -0.16825 -0.26355 0.18110 -0.10665 -0.26345 0.18090 -0.10661 -0.26287 0.18015 -0.10653 -0.26250 0.20557 -0.16825 -0.26197 0.17923 -0.16825 -0.26193 0.17927 -0.10649 -0.26127 0.17864 -0.10647 -0.26040 0.17805 -0.10651 -0.25997 0.17781 -0.16825 -0.25995 0.17785 -0.10656 -0.25995 0.44021 -0.16825 -0.25940 0.55553 -0.16825 -0.25839 0.17713 -0.10674 -0.25815 0.01663 -0.29325 -0.25808 0.08239 -0.28120 -0.25769 0.17693 -0.16825 -0.25768 0.17693 -0.10687 -0.25763 0.50788 -0.20325 -0.25751 0.17689 -0.10689 -0.25734 0.23977 -0.12683 -0.25614 0.24770 -0.16825 -0.25550 0.25196 -0.16825 -0.25525 0.17663 -0.16825 -0.25525 0.17663 -0.10741 -0.25479 0.25662 -0.16825 -0.25330 0.26650 -0.16825 -0.25292 0.26903 -0.13659 -0.25267 0.01663 -0.29826 -0.25204 0.27483 -0.16825 -0.25192 0.01663 -0.31076 -0.25121 0.55370 -0.20325 -0.25118 -0.02337 -0.32325 -0.25118 0.01663 -0.32325 -0.25081 0.55655 -0.20325 -0.25051 0.40718 -0.16825 -0.25041 0.08226 -0.28822 -0.24989 0.28904 -0.14326 -0.24613 0.20663 -0.26919 -0.24670 0.50740 -0.21325 -0.24600 0.49663 -0.16825 -0.24590 -0.02337 -0.37527 -0.24590 0.01663 -0.37527 -0.24478 -0.02337 -0.38014 -0.24478 0.01663 -0.38014 -0.24469 0.60094 -0.16825 -0.24422 0.26177 -0.26076 -0.24389 0.32881 -0.15539 -0.24279 0.33607 -0.15761 -0.24248 -0.02337 -0.38458 -0.24248 0.01663 -0.38458 -0.24235 0.26171 -0.29200 -0.24212 0.01663 -0.36221 -0.24157 0.01663 -0.05306 -0.24127 0.44864 -0.16825 -0.24127 0.54462 -0.16825 -0.24099 0.35569 -0.24639 -0.24048 0.26164 -0.32325 -0.23916 -0.02337 -0.38831 -0.23916 0.01663 -0.38831 -0.23863 0.09654 -0.36221 -0.23689 0.37563 -0.16825 -0.23683 0.37552 -0.16825 -0.23675 0.59759 -0.20325 -0.23660 0.35334 -0.32125 -0.23649 0.35311 -0.32378 -0.22600 0.01663 -0.37325 -0.23577 0.50692 -0.22325 -0.23544 0.37970 -0.32125 -0.23501 -0.02337 -0.39110 -0.23501 0.01663 -0.39110 -0.23489 0.60305 -0.20325 -0.23421 0.40802 -0.32125 -0.23346 0.01663 -0.05446 -0.23278 0.50679 -0.27325 -0.23257 0.44562 -0.32125 -0.23062 0.01663 -0.32325 -0.23030 -0.02337 -0.39278 -0.23030 0.01663 -0.39278 -0.23030 0.49760 -0.32125 -0.22990 0.50667 -0.32125 -0.22954 0.55147 -0.22325 -0.22849 -0.02337 -0.33251 -0.22849 -0.00337 -0.33251 -0.22727 0.40249 -0.16825 -0.22727 0.59077 -0.16825 -0.22689 -0.02337 -0.33694 -0.22689 -0.00337 -0.33694 -0.22533 -0.02337 -0.39324 -0.22533 0.01663 -0.39324 -0.22429 -0.02337 -0.34088 -0.22429 -0.00337 -0.34088 -0.22382 0.55010 -0.32125 -0.22262 0.01663 -0.35769 -0.22211 0.64299 -0.16825 -0.22084 -0.02337 -0.34410 -0.22084 -0.00337 -0.34410 -0.22039 -0.02337 -0.39245 -0.22039 0.01663 -0.39245 -0.21674 -0.02337 -0.34642 -0.21674 -0.00337 -0.34642 -0.21581 -0.02337 -0.39046 -0.21581 0.01663 -0.39046 -0.21496 0.59403 -0.22325 -0.21474 0.63817 -0.20325 -0.21220 -0.02337 -0.34772 -0.21220 -0.00337 -0.34772 -0.21186 -0.02337 -0.38739 -0.21186 0.01663 -0.38739 -0.21075 0.17663 -0.11838 -0.21043 0.64569 -0.20325 -0.20961 0.59160 -0.32125 -0.20749 -0.02337 -0.34792 -0.20749 -0.00337 -0.34792 -0.20454 0.35996 -0.16825 -0.20454 0.63330 -0.16825 -0.20286 -0.02337 -0.34701 -0.20286 -0.00337 -0.34701 -0.20221 0.17663 -0.12048 -0.19857 -0.02337 -0.34504 -0.19857 -0.00337 -0.34504 -0.19492 0.17663 -0.16825 -0.19492 0.20557 -0.16825 -0.19492 0.24770 -0.16825 -0.19492 0.25196 -0.16825 -0.19492 0.25662 -0.16825 -0.19492 0.26650 -0.16825 -0.19492 0.27483 -0.16825 -0.19492 0.34824 -0.16825 -0.19492 0.64502 -0.16825 -0.19492 0.67713 -0.16825 -0.19487 -0.02337 -0.34212 -0.19487 -0.00337 -0.34212 -0.19258 0.63304 -0.22325 -0.19239 0.68032 -0.16825 -0.18778 0.62964 -0.32125 -0.18587 0.67416 -0.20325 -0.18500 0.01663 -0.06280 -0.18500 -0.00337 -0.06280 -0.18000 0.17663 -0.16825 -0.18000 0.17663 -0.12531 -0.17890 0.17669 -0.12557 -0.17832 0.68290 -0.20325 -0.17778 0.17689 -0.12587 -0.17777 0.17688 -0.16825 -0.17762 0.17691 -0.12591 -0.17567 0.17765 -0.12658 -0.17566 0.17762 -0.16825 -0.17540 0.17775 -0.12668 -0.17437 0.17836 -0.12712 -0.17395 0.32268 -0.16825 -0.17395 0.67058 -0.16825 -0.17381 0.17886 -0.12742 -0.17377 0.17881 -0.16825 -0.17346 -0.00337 -0.06452 -0.17249 0.18002 -0.12812 -0.17219 0.18040 -0.12832 -0.17218 0.18039 -0.16825 -0.17186 0.18082 -0.12855 -0.17106 0.18232 -0.12927 -0.17099 0.18229 -0.16825 -0.17065 0.18308 -0.12963 -0.17064 -0.00337 -0.34618 -0.17064 0.01663 -0.34618 -0.17032 0.18411 -0.13009 -0.17028 0.18441 -0.13020 -0.17025 0.18440 -0.16825 -0.17000 0.18663 -0.16825 -0.17000 0.18663 -0.13109 -0.17000 0.20557 -0.16825 -0.17000 0.22097 -0.14369 -0.17000 0.23673 -0.14922 -0.17000 0.24770 -0.16825 -0.17000 0.25196 -0.16825 -0.17000 0.25662 -0.16825 -0.17000 0.26650 -0.16825 -0.17000 0.27151 -0.16142 -0.17000 0.27483 -0.16825 -0.17000 0.29204 -0.16825 -0.16857 -0.00337 -0.34459 -0.16857 0.01663 -0.34459 -0.16616 -0.00337 -0.34359 -0.16616 0.01663 -0.34359 -0.16357 -0.00337 -0.34325 -0.16357 0.01663 -0.34325 -0.16320 0.66710 -0.22325 -0.16073 0.01663 -0.06628 -0.15980 0.01663 -0.06642 -0.15978 -0.00337 -0.06623 -0.15913 0.66286 -0.32125 -0.15646 0.71175 -0.16825 -0.15108 0.70441 -0.20325 -0.15000 0.18663 -0.16825 -0.15000 0.18663 -0.13498 -0.15000 0.18787 -0.13545 -0.15000 0.20557 -0.16825 -0.15000 0.21584 -0.14603 -0.15000 0.24770 -0.16825 -0.15000 0.25196 -0.16825 -0.15000 0.25662 -0.16825 -0.15000 0.26650 -0.16825 -0.15000 0.26728 -0.16473 -0.15000 0.27483 -0.16825 -0.15000 0.27696 -0.16825 -0.14997 0.18586 -0.13469 -0.14966 0.18404 -0.16825 -0.14961 0.18405 -0.13407 -0.14949 0.18347 -0.13386 -0.14921 0.18274 -0.13364 -0.14866 0.18163 -0.16825 -0.14860 0.18166 -0.13333 -0.14806 0.18071 -0.13307 -0.14753 0.18005 -0.13291 -0.14707 0.17956 -0.16825 -0.14704 0.17960 -0.13282 -0.14588 0.17854 -0.13262 -0.14508 0.17802 -0.13256 -0.14500 0.17797 -0.16825 -0.14500 0.17798 -0.13256 -0.13835 0.25524 -0.16825 -0.14308 0.17712 -0.13256 -0.14259 0.17697 -0.16825 -0.14258 0.17698 -0.13259 -0.14220 0.17687 -0.13262 -0.14000 0.17663 -0.16825 -0.14000 0.17663 -0.13290 -0.13974 0.71335 -0.20325 -0.13151 0.27424 -0.16825 -0.13667 0.29209 -0.16825 -0.13667 0.70117 -0.16825 -0.12789 0.69497 -0.22325 -0.12470 0.69003 -0.32125 -0.12300 -0.00337 -0.07083 -0.11550 0.73624 -0.16825 -0.11379 0.17663 -0.16825 -0.11379 0.20557 -0.16825 -0.11379 0.24770 -0.16825 -0.11379 0.25196 -0.16825 -0.11379 0.25662 -0.16825 -0.11379 0.26650 -0.16825 -0.11379 0.27483 -0.16825 -0.11379 0.27985 -0.16825 -0.11379 0.71340 -0.16825 -0.11379 0.73689 -0.16825 -0.11148 0.72797 -0.20325 -0.10728 0.17663 -0.13776 -0.10438 0.27483 -0.16825 -0.09606 0.24001 -0.16825 -0.08574 0.71018 -0.32125 -0.09986 0.17663 -0.13887 -0.09608 0.73593 -0.20325 -0.08907 0.25864 -0.16825 -0.09452 0.01663 -0.07295 -0.09414 0.26935 -0.16825 -0.09414 0.72390 -0.16825 -0.08793 0.71564 -0.22325 -0.08714 0.17663 -0.16825 -0.08714 0.20557 -0.16825 -0.08714 0.24770 -0.16825 -0.08714 0.25196 -0.16825 -0.08714 0.26650 -0.16825 -0.08714 0.26723 -0.16825 -0.08714 0.72602 -0.16825 -0.08714 0.74690 -0.16825 -0.08472 0.26650 -0.16825 -0.07392 0.01663 -0.07501 -0.07391 -0.00337 -0.07500 -0.07330 -0.00337 -0.07505 -0.07082 0.75303 -0.16825 -0.06834 0.74410 -0.20325 -0.06287 0.17663 -0.14265 -0.05944 0.17663 -0.14300 -0.05215 0.25662 -0.16825 -0.04893 0.74981 -0.20325 -0.04799 0.25535 -0.16825 -0.04799 0.73790 -0.16825 -0.04478 0.72834 -0.22325 -0.04366 0.72257 -0.32125 -0.03116 0.01663 -0.07634 -0.02828 -0.02337 -0.17553 -0.02828 -0.00337 -0.17553 -0.02399 -0.00337 -0.07716 -0.02386 0.76156 -0.16825 -0.02302 0.75229 -0.20325 -0.02071 0.17663 -0.14503 -0.02000 -0.02337 -0.16918 -0.02000 -0.00337 -0.16918 -0.02000 0.17663 -0.16825 -0.02000 0.17663 -0.14506 -0.01869 0.17671 -0.14513 -0.01778 0.17689 -0.14523 -0.01777 0.17688 -0.16825 -0.01752 0.17694 -0.14526 -0.01567 0.17764 -0.14559 -0.01566 0.17762 -0.16825 -0.01543 0.17773 -0.14564 -0.01432 0.17840 -0.14594 -0.01414 -0.02337 -0.18968 -0.01414 -0.00337 -0.18968 -0.01380 0.17885 -0.14615 -0.01377 0.17881 -0.16825 -0.01357 0.25196 -0.16825 -0.01256 0.17995 -0.14663 -0.01220 0.18040 -0.14683 -0.01218 0.18039 -0.16825 -0.01180 0.18090 -0.14705 -0.01105 0.18232 -0.14766 -0.01099 0.18229 -0.16825 -0.01065 0.18308 -0.14799 -0.01035 -0.02337 -0.16518 -0.01035 -0.00337 -0.16518 -0.01033 0.18410 -0.14843 -0.01029 0.18441 -0.14856 -0.01025 0.18440 -0.16825 -0.01000 -0.02337 -0.18650 -0.01000 -0.00337 -0.18650 -0.01000 0.18663 -0.16825 -0.01000 0.18663 -0.14950 -0.01000 0.20557 -0.16825 -0.01000 0.21303 -0.16071 -0.01000 0.23082 -0.16825 -0.00518 -0.02337 -0.18450 -0.00518 -0.00337 -0.18450 0.00000 -0.02337 -0.18382 0.00000 -0.02337 -0.16382 0.00000 -0.00337 -0.18382 0.00000 -0.00337 -0.16382 0.00000 0.25063 -0.16825 0.00000 0.72675 -0.32125 0.00000 0.73263 -0.22325 0.00000 0.74263 -0.16825 0.00000 0.75450 -0.20325 0.00294 -0.00337 -0.07713 0.00294 0.01663 -0.07741 0.00518 -0.02337 -0.18450 0.00518 -0.00337 -0.18450 0.01000 -0.02337 -0.18650 0.01000 -0.00337 -0.18650 0.01000 0.18663 -0.16825 0.01000 0.18663 -0.14950 0.01000 0.20557 -0.16825 0.01000 0.21303 -0.16071 0.01000 0.23082 -0.16825 0.01000 0.18630 -0.14937 0.01025 0.18440 -0.16825 0.01031 0.18441 -0.14856 0.01035 -0.02337 -0.16518 0.01035 -0.00337 -0.16518 0.01041 0.18379 -0.14830 0.01068 0.18301 -0.14796 0.01099 0.18229 -0.16825 0.01105 0.18232 -0.14766 0.01187 0.18081 -0.14701 0.01218 0.18039 -0.16825 0.01219 0.18040 -0.14683 0.01234 0.18021 -0.14674 0.01357 0.25196 -0.16825 0.01377 0.17881 -0.16825 0.01379 0.17884 -0.14614 0.01408 0.17857 -0.14602 0.01414 -0.02337 -0.18968 0.01414 -0.00337 -0.18968 0.01478 0.17810 -0.14581 0.01566 0.17762 -0.16825 0.01569 0.17768 -0.14561 0.01686 0.17713 -0.14536 0.01777 0.17688 -0.16825 0.01777 0.17688 -0.14523 0.01780 0.17687 -0.14522 0.02000 -0.02337 -0.16918 0.02000 -0.00337 -0.16918 0.02000 0.17663 -0.16825 0.02000 0.17663 -0.14506 0.02071 0.17663 -0.14502 0.02133 0.17663 -0.16825 0.02133 0.20557 -0.16825 0.02133 0.24770 -0.16825 0.02133 0.25196 -0.16825 0.02133 0.25273 -0.16825 0.02133 0.74053 -0.16825 0.02133 0.76156 -0.16825 0.02302 0.75229 -0.20325 0.02386 0.76156 -0.16825 0.02583 -0.00337 -0.07712 0.02828 -0.02337 -0.17553 0.02828 -0.00337 -0.17553 0.03118 0.01663 -0.07622 0.04366 0.72257 -0.32125 0.04478 0.72834 -0.22325 0.04799 0.25535 -0.16825 0.04799 0.73790 -0.16825 0.04893 0.74981 -0.20325 0.05215 0.25662 -0.16825 0.06198 0.17663 -0.14280 0.06284 0.17663 -0.14272 0.06834 0.74410 -0.20325 0.07082 0.75303 -0.16825 0.07724 -0.00337 -0.07479 0.08472 0.26650 -0.16825 0.08926 0.70836 -0.32125 0.08793 0.71564 -0.22325 0.09318 -0.00337 -0.07336 0.09320 0.01663 -0.07361 0.09414 0.26935 -0.16825 0.09414 0.72390 -0.16825 0.09426 0.01663 -0.07348 0.09608 0.73593 -0.20325 0.10079 0.17663 -0.13875 0.10438 0.27483 -0.16825 0.10726 0.17663 -0.13778 0.11148 0.72797 -0.20325 0.11550 0.73624 -0.16825 0.12470 0.69003 -0.32125 0.13188 0.26551 -0.16825 0.12789 0.69497 -0.22325 0.13094 -0.00337 -0.06997 0.13888 0.28422 -0.16825 0.13667 0.29209 -0.16825 0.13667 0.70117 -0.16825 0.13974 0.71335 -0.20325 0.14000 0.17663 -0.16825 0.14000 0.17663 -0.13290 0.14080 0.17673 -0.16825 0.14080 0.20557 -0.16825 0.14080 0.24770 -0.16825 0.14080 0.25196 -0.16825 0.14080 0.25662 -0.16825 0.14080 0.26650 -0.16825 0.14080 0.27483 -0.16825 0.14080 0.29547 -0.16825 0.14080 0.69778 -0.16825 0.14080 0.72111 -0.16825 0.14218 0.17687 -0.13262 0.14259 0.17698 -0.13259 0.14259 0.17697 -0.16825 0.14313 0.17713 -0.13255 0.14499 0.17798 -0.13256 0.14500 0.17797 -0.16825 0.14513 0.17804 -0.13256 0.14609 0.17869 -0.13264 0.14703 0.17960 -0.13282 0.14707 0.17956 -0.16825 0.14769 0.18023 -0.13295 0.14840 0.18121 -0.13319 0.14862 0.18165 -0.13332 0.14866 0.18163 -0.16825 0.14942 0.18328 -0.13380 0.14965 0.18404 -0.13405 0.14966 0.18404 -0.16825 0.14970 0.18422 -0.13411 0.15000 0.18663 -0.16825 0.15000 0.18663 -0.13498 0.15000 0.18787 -0.13545 0.15000 0.20557 -0.16825 0.15000 0.21584 -0.14603 0.15000 0.24770 -0.16825 0.15000 0.25196 -0.16825 0.15000 0.25662 -0.16825 0.15000 0.26650 -0.16825 0.15000 0.26728 -0.16473 0.15000 0.27483 -0.16825 0.15000 0.27696 -0.16825 0.15108 0.70441 -0.20325 0.15913 0.66286 -0.32125 0.15646 0.71175 -0.16825 0.16129 0.01663 -0.06559 0.16320 0.66710 -0.22325 0.16357 -0.00337 -0.34325 0.16357 0.01663 -0.34325 0.16552 -0.00337 -0.34344 0.16552 0.01663 -0.34344 0.16740 -0.00337 -0.34401 0.16740 0.01663 -0.34401 0.16913 -0.00337 -0.34493 0.16913 0.01663 -0.34493 0.17000 0.18663 -0.16825 0.17000 0.18663 -0.13109 0.17000 0.20557 -0.16825 0.17000 0.22097 -0.14369 0.17000 0.23630 -0.14903 0.17000 0.24770 -0.16825 0.17000 0.25196 -0.16825 0.17000 0.25662 -0.16825 0.17000 0.26650 -0.16825 0.17000 0.27483 -0.16825 0.17000 0.28244 -0.16509 0.17000 0.29204 -0.16825 0.17019 0.18468 -0.13032 0.17025 0.18440 -0.16825 0.17026 0.18441 -0.13021 0.17045 0.18366 -0.12989 0.17064 -0.00337 -0.34618 0.17064 0.01663 -0.34618 0.17099 0.18229 -0.16825 0.17106 0.18232 -0.12927 0.17152 0.18133 -0.12881 0.17202 0.18061 -0.12843 0.17218 0.18039 -0.16825 0.17220 0.18041 -0.12832 0.17377 0.17881 -0.16825 0.17377 0.17881 -0.12741 0.17380 0.17879 -0.12739 0.17395 0.32268 -0.16825 0.17395 0.67058 -0.16825 0.17447 0.17830 -0.12707 0.17566 0.17762 -0.16825 0.17570 0.17769 -0.12659 0.17667 0.17720 -0.12621 0.17767 0.17690 -0.12590 0.17777 0.17688 -0.16825 0.17778 0.17689 -0.12587 0.17832 0.68290 -0.20325 0.18000 0.17663 -0.16825 0.18000 0.17663 -0.12531 0.18500 -0.00337 -0.06280 0.18500 0.01663 -0.06280 0.18587 0.67416 -0.20325 0.18778 0.62964 -0.32125 0.18877 0.17663 -0.12346 0.19238 0.68032 -0.16825 0.19258 0.63304 -0.22325 0.19487 -0.02337 -0.34212 0.19487 -0.00337 -0.34212 0.19511 0.17663 -0.16825 0.19511 0.20557 -0.16825 0.19511 0.24770 -0.16825 0.19511 0.25196 -0.16825 0.19511 0.25662 -0.16825 0.19511 0.26650 -0.16825 0.19511 0.27483 -0.16825 0.19511 0.34846 -0.16825 0.19511 0.64479 -0.16825 0.19511 0.67690 -0.16825 0.19857 -0.02337 -0.34504 0.19857 -0.00337 -0.34504 0.20286 -0.02337 -0.34701 0.20286 -0.00337 -0.34701 0.20454 0.35996 -0.16825 0.20454 0.63330 -0.16825 0.20749 -0.02337 -0.34792 0.20749 -0.00337 -0.34792 0.20946 0.01663 -0.05886 0.20961 0.59160 -0.32125 0.21043 0.64569 -0.20325 0.21096 0.17663 -0.11824 0.21186 -0.02337 -0.38739 0.21186 0.01663 -0.38739 0.21220 -0.02337 -0.34772 0.21220 -0.00337 -0.34772 0.21474 0.63817 -0.20325 0.21496 0.59403 -0.22325 0.21581 -0.02337 -0.39046 0.21581 0.01663 -0.39046 0.22600 0.01663 -0.37325 0.21674 -0.02337 -0.34642 0.21674 -0.00337 -0.34642 0.22039 -0.02337 -0.39245 0.22039 0.01663 -0.39245 0.22084 -0.02337 -0.34410 0.22084 -0.00337 -0.34410 0.22212 0.64299 -0.16825 0.22262 0.01663 -0.35769 0.22382 0.55010 -0.32125 0.22429 -0.02337 -0.34088 0.22429 -0.00337 -0.34088 0.22533 -0.02337 -0.39324 0.22533 0.01663 -0.39324 0.22689 -0.02337 -0.33694 0.22689 -0.00337 -0.33694 0.22727 0.40249 -0.16825 0.22727 0.59077 -0.16825 0.22849 -0.02337 -0.33251 0.22849 -0.00337 -0.33251 0.22954 0.55147 -0.22325 0.23030 -0.02337 -0.39278 0.23030 0.01663 -0.39278 0.23062 0.01663 -0.32325 0.23370 0.01663 -0.05427 0.23489 0.60305 -0.20325 0.23501 -0.02337 -0.39110 0.23501 0.01663 -0.39110 0.23577 0.50692 -0.22325 0.23649 0.35311 -0.32378 0.23660 0.35334 -0.32125 0.23675 0.59759 -0.20325 0.23683 0.37552 -0.16825 0.23689 0.37563 -0.16825 0.23809 0.17663 -0.11186 0.23863 0.09654 -0.36221 0.23916 -0.02337 -0.38831 0.23916 0.01663 -0.38831 0.24127 0.44864 -0.16825 0.24127 0.54462 -0.16825 0.24212 0.01663 -0.36221 0.24248 -0.02337 -0.38458 0.24248 0.01663 -0.38458 0.24373 0.32989 -0.15581 0.24382 0.32924 -0.15561 0.25267 0.01663 -0.29826 0.24469 0.60094 -0.16825 0.24478 -0.02337 -0.38014 0.24478 0.01663 -0.38014 0.24590 -0.02337 -0.37527 0.24590 0.01663 -0.37527 0.24600 0.49663 -0.16825 0.25763 0.50788 -0.20325 0.25051 0.40718 -0.16825 0.25081 0.55655 -0.20325 0.25789 0.26225 -0.24825 0.25118 -0.02337 -0.32325 0.25118 0.01663 -0.32325 0.25121 0.55370 -0.20325 0.25204 0.27483 -0.16825 0.25267 0.27065 -0.13727 0.25276 0.27004 -0.13706 0.25330 0.26650 -0.16825 0.25479 0.25662 -0.16825 0.25525 0.17663 -0.16825 0.25525 0.17663 -0.10741 0.25815 0.01663 -0.29325 0.25550 0.25196 -0.16825 0.25610 0.17666 -0.10720 0.25614 0.24770 -0.16825 0.25691 0.17677 -0.10701 0.25767 0.17698 -0.10688 0.25769 0.17693 -0.16825 0.25908 0.17739 -0.10664 0.25940 0.55553 -0.16825 0.25993 0.17779 -0.10655 0.25995 0.44021 -0.16825 0.25997 0.17782 -0.10654 0.25997 0.17781 -0.16825 0.26175 0.17903 -0.10646 0.26197 0.17923 -0.10647 0.26197 0.17923 -0.16825 0.26250 0.20557 -0.16825 0.26255 0.17980 -0.10650 0.26301 0.20223 -0.11359 0.26354 0.18111 -0.10666 0.26357 0.18108 -0.16825 0.26387 0.18156 -0.10671 0.26441 0.18261 -0.10691 0.26462 0.18329 -0.10707 0.26467 0.18328 -0.16825 0.26504 0.18879 -0.10873 0.26505 0.47418 -0.16825 0.26508 0.18478 -0.10743 0.26514 0.18812 -0.16825 0.26514 0.18812 -0.10849 0.26520 0.18567 -0.10768 0.26520 0.18567 -0.16825 0.26521 0.18573 -0.10770 0.26575 0.50823 -0.16825 0.26629 0.49572 -0.16825 0.26818 0.46231 -0.16639 0.27053 0.42820 -0.16271 0.27000 -0.02337 -0.15396 0.27000 -0.02337 -0.03325 0.27000 -0.00337 -0.15396 0.27000 -0.00337 -0.03325 0.27000 0.01663 -0.03325 0.27000 0.01663 -0.04739 0.27000 0.02161 -0.04923 0.27000 0.03663 -0.05475 0.27000 0.03663 -0.03325 0.27062 -0.02337 -0.02831 0.27062 -0.00337 -0.02831 0.27062 0.01663 -0.02831 0.27062 0.03663 -0.02831 0.27244 -0.02337 -0.02368 0.27244 -0.00337 -0.02368 0.27244 0.01663 -0.02368 0.27244 0.03663 -0.02368 0.27381 0.38804 -0.15613 0.27534 -0.02337 -0.01964 0.27534 -0.00337 -0.01964 0.27534 0.01663 -0.01964 0.27534 0.03663 -0.01964 0.27787 0.34491 -0.14678 0.27915 -0.02337 -0.01645 0.27915 -0.00337 -0.01645 0.27915 0.01663 -0.01645 0.27915 0.03663 -0.01645 0.29000 0.03663 -0.03325 0.28114 -0.00337 -0.01532 0.28114 0.01663 -0.01532 0.28229 0.30263 -0.13569 0.28364 -0.02337 -0.01429 0.28364 0.03663 -0.01429 0.28545 0.27397 -0.12749 0.28852 -0.02337 -0.01331 0.28852 0.03663 -0.01331 0.28994 0.23568 -0.11539 0.29234 0.21517 -0.10891 0.29348 -0.02337 -0.01356 0.29348 0.03663 -0.01356 0.29824 -0.02337 -0.01502 0.29824 0.03663 -0.01502 0.30090 0.14623 -0.08501 0.30204 0.13710 -0.08184 0.30248 -0.02337 -0.01762 0.30248 0.03663 -0.01762 0.30265 0.03663 -0.04734 0.30595 -0.02337 -0.02119 0.30595 0.03663 -0.02119 0.31260 0.03663 -0.04508 0.31511 0.03663 -0.04448 0.31710 0.03663 -0.03593 0.31777 -0.02337 -0.03681 0.31777 0.01663 -0.03681 0.00000 0.35334 -0.32125 0.00000 0.50667 -0.32125 0.23021 0.50666 -0.32125 -0.48229 -0.28537 0.43313 -0.48229 -0.28537 0.48537 -0.48229 -0.07537 0.43313 -0.48229 -0.07537 0.48537 -0.47665 -0.28537 0.38120 -0.47665 -0.28537 0.53730 -0.47665 -0.07537 0.38120 -0.47665 -0.07537 0.53731 -0.46543 -0.28537 0.33017 -0.46543 -0.28537 0.58833 -0.46543 -0.07537 0.33017 -0.46543 -0.07537 0.58833 -0.36155 -0.28536 0.96308 -0.36155 -0.07664 0.96308 -0.30589 -0.28537 0.99854 -0.30589 -0.07537 0.99854 -0.24871 -0.28537 1.02718 -0.24871 -0.07537 1.02718 -0.26839 -0.28549 -0.37974 -0.25857 -0.22976 -0.41575 -0.25858 -0.07546 -0.41575 -0.18889 -0.28537 1.04978 -0.18889 -0.07537 1.04978 -0.13427 -0.28549 -0.41581 -0.12705 -0.28537 1.06609 -0.12705 -0.07537 1.06609 -0.06387 -0.28537 1.07595 -0.06387 -0.07537 1.07595 0.00000 -0.28537 1.07925 0.00000 -0.07537 1.07925 0.13429 -0.28549 -0.41581 0.06387 -0.28537 1.07595 0.06387 -0.07537 1.07595 0.12705 -0.28537 1.06609 0.12705 -0.07537 1.06609 0.18889 -0.28537 1.04978 0.18889 -0.07537 1.04978 0.24871 -0.28537 1.02718 0.24871 -0.07537 1.02718 0.25857 -0.07537 -0.41575 0.25857 -0.22976 -0.41575 0.26853 -0.28549 -0.37974 0.30589 -0.28537 0.99854 0.30589 -0.07537 0.99854 0.36157 -0.28537 0.96308 0.36157 -0.07537 0.96308 0.46543 -0.28537 0.33017 0.46544 -0.28537 0.58833 0.46543 -0.07537 0.33017 0.46544 -0.07537 0.58833 0.47665 -0.28537 0.53731 0.47665 -0.28517 0.38119 0.47665 -0.07537 0.38119 0.47665 -0.07537 0.53731 0.48229 -0.28537 0.43313 0.48229 -0.28537 0.48537 0.48229 -0.07537 0.43313 0.48229 -0.07537 0.48537 0.00001 -0.28537 0.96308 0.00001 -0.07601 0.96308 0.28181 -0.04637 0.00272 0.28181 -0.02637 0.00272 0.31940 -0.04637 -0.01096 0.31940 -0.02637 -0.01096 0.26060 -0.04637 -0.05554 0.26060 -0.02637 -0.05554 0.29819 -0.04637 -0.06922 0.29819 -0.02637 -0.06922 -0.31940 -0.04637 -0.01096 -0.31940 -0.02637 -0.01096 -0.28181 -0.04637 0.00272 -0.28181 -0.02637 0.00272 -0.29819 -0.04637 -0.06922 -0.29819 -0.02637 -0.06922 -0.26060 -0.04637 -0.05554 -0.26060 -0.02637 -0.05554 -0.22782 -0.04637 -0.33640 -0.22782 -0.02637 -0.33640 -0.19318 -0.04637 -0.35640 -0.19318 -0.02637 -0.35640 -0.25882 -0.04637 -0.39010 -0.25882 -0.02637 -0.39010 -0.22418 -0.04637 -0.41010 -0.22418 -0.02637 -0.41010 0.22418 -0.04637 -0.41010 0.22418 -0.02637 -0.41010 0.25882 -0.04637 -0.39010 0.25882 -0.02637 -0.39010 0.19318 -0.04637 -0.35640 0.19318 -0.02637 -0.35640 0.22782 -0.04637 -0.33640 0.22782 -0.02637 -0.33640 0.48800 -0.24937 0.21925 0.48800 -0.24937 0.69750 0.48800 -0.24937 0.69925 0.48800 -0.24907 0.21692 0.48800 -0.24907 0.70158 0.48800 -0.24817 0.21475 0.48800 -0.24817 0.70375 0.48800 -0.24674 0.21289 0.48800 -0.24674 0.70561 0.48800 -0.24487 0.21146 0.48800 -0.24487 0.70704 0.48800 -0.24270 0.21056 0.48800 -0.24270 0.70794 0.48800 -0.24037 0.70825 0.48800 -0.11037 0.70825 0.48800 -0.10804 0.21056 0.48800 -0.10804 0.70794 0.48800 -0.10587 0.21146 0.48800 -0.10587 0.70704 0.48800 -0.10401 0.21289 0.48800 -0.10401 0.70561 0.48800 -0.10258 0.21475 0.48800 -0.10258 0.70375 0.48800 -0.10168 0.21692 0.48800 -0.10168 0.70158 0.48800 -0.10137 0.21925 0.48800 -0.10137 0.69750 0.48800 -0.10137 0.69925 0.48900 -0.25037 0.21925 0.48900 -0.25037 0.69925 0.48900 -0.25003 0.21666 0.48900 -0.25003 0.70184 0.48900 -0.24903 0.21425 0.48900 -0.24903 0.70425 0.48900 -0.24744 0.21218 0.48900 -0.24744 0.70632 0.48900 -0.24537 0.21059 0.48900 -0.24537 0.70791 0.48900 -0.24296 0.20959 0.48900 -0.24296 0.70891 0.48900 -0.24037 0.70925 0.48900 -0.11037 0.70925 0.48900 -0.10778 0.20959 0.48900 -0.10778 0.70891 0.48900 -0.10537 0.21059 0.48900 -0.10537 0.70791 0.48900 -0.10330 0.21218 0.48900 -0.10330 0.70632 0.48900 -0.10171 0.21425 0.48900 -0.10171 0.70425 0.48900 -0.10071 0.21666 0.48900 -0.10071 0.70184 0.48900 -0.10037 0.21925 0.48900 -0.10037 0.69925 0.49900 -0.25037 0.21925 0.49900 -0.25037 0.69925 0.49900 -0.25003 0.21666 0.49900 -0.25003 0.70184 0.49900 -0.24903 0.21425 0.49900 -0.24903 0.70425 0.49900 -0.24744 0.21218 0.49900 -0.24744 0.70632 0.49900 -0.24537 0.21059 0.49900 -0.24537 0.70791 0.49900 -0.24296 0.20959 0.49900 -0.24296 0.70891 0.49900 -0.24037 0.20925 0.49900 -0.24037 0.70925 0.49900 -0.11037 0.20925 0.49900 -0.11037 0.70925 0.49900 -0.10778 0.20959 0.49900 -0.10778 0.70891 0.49900 -0.10537 0.21059 0.49900 -0.10537 0.70791 0.49900 -0.10330 0.21218 0.49900 -0.10330 0.70632 0.49900 -0.10171 0.21425 0.49900 -0.10171 0.70425 0.49900 -0.10071 0.21666 0.49900 -0.10071 0.70184 0.49900 -0.10037 0.21925 0.49900 -0.10037 0.69925 0.50000 -0.24937 0.21925 0.50000 -0.24937 0.69750 0.50000 -0.24937 0.69925 0.50000 -0.24907 0.21692 0.50000 -0.24907 0.70158 0.50000 -0.24817 0.21475 0.50000 -0.24817 0.70375 0.50000 -0.24712 0.21339 0.50000 -0.24712 0.70511 0.50000 -0.24674 0.21289 0.50000 -0.24674 0.70561 0.50000 -0.24487 0.21146 0.50000 -0.24487 0.70704 0.50000 -0.24270 0.21056 0.50000 -0.24270 0.70794 0.50000 -0.24037 0.21025 0.50000 -0.24037 0.70825 0.50000 -0.11037 0.21025 0.50000 -0.11037 0.70825 0.50000 -0.10804 0.21056 0.50000 -0.10804 0.70794 0.50000 -0.10587 0.21146 0.50000 -0.10587 0.70704 0.50000 -0.10401 0.21289 0.50000 -0.10401 0.70561 0.50000 -0.10258 0.21475 0.50000 -0.10258 0.70375 0.50000 -0.10168 0.21692 0.50000 -0.10168 0.70158 0.50000 -0.10137 0.21925 0.50000 -0.10137 0.69750 0.50000 -0.10137 0.69925 0.28760 -0.07637 0.01425 0.28760 -0.06637 0.01425 0.28772 -0.07637 0.01270 0.28772 -0.07637 0.01580 0.28772 -0.06637 0.01270 0.28772 -0.06637 0.01580 0.28809 -0.07637 0.01119 0.28809 -0.07637 0.01731 0.28809 -0.06637 0.01119 0.28809 -0.06637 0.01731 0.28868 -0.07637 0.00976 0.28868 -0.07637 0.01874 0.28868 -0.06637 0.00976 0.28868 -0.06637 0.01874 0.28949 -0.07637 0.00843 0.28949 -0.07637 0.02007 0.28949 -0.06637 0.00843 0.28949 -0.06637 0.02007 0.29050 -0.07637 0.00725 0.29050 -0.07637 0.02125 0.29050 -0.06637 0.00725 0.29050 -0.06637 0.02125 0.29168 -0.07637 0.00624 0.29168 -0.07637 0.02226 0.29168 -0.06637 0.00624 0.29168 -0.06637 0.02226 0.29300 -0.07637 0.00543 0.29300 -0.07637 0.02307 0.29300 -0.06637 0.00543 0.29300 -0.06637 0.02307 0.29444 -0.07637 0.00484 0.29444 -0.07637 0.02367 0.29444 -0.06637 0.00484 0.29444 -0.06637 0.02367 0.29595 -0.07637 0.00447 0.29595 -0.07637 0.02403 0.29595 -0.06637 0.00447 0.29595 -0.06637 0.02403 0.29750 -0.07637 0.00435 0.29750 -0.07637 0.02415 0.29750 -0.06637 0.00435 0.29750 -0.06637 0.02415 0.29905 -0.07637 0.00447 0.29905 -0.07637 0.02403 0.29905 -0.06637 0.00447 0.29905 -0.06637 0.02403 0.30056 -0.07637 0.00484 0.30056 -0.07637 0.02367 0.30056 -0.06637 0.00484 0.30056 -0.06637 0.02367 0.30200 -0.07637 0.00543 0.30200 -0.07637 0.02307 0.30200 -0.06637 0.00543 0.30200 -0.06637 0.02307 0.30332 -0.07637 0.00624 0.30332 -0.07637 0.02226 0.30332 -0.06637 0.00624 0.30332 -0.06637 0.02226 0.30450 -0.07637 0.00725 0.30450 -0.07637 0.02125 0.30450 -0.06637 0.00725 0.30450 -0.06637 0.02125 0.30551 -0.07637 0.00843 0.30551 -0.07637 0.02007 0.30551 -0.06637 0.00843 0.30551 -0.06637 0.02007 0.30632 -0.07637 0.00976 0.30632 -0.07637 0.01874 0.30632 -0.06637 0.00976 0.30632 -0.06637 0.01874 0.30691 -0.07637 0.01119 0.30691 -0.07637 0.01731 0.30691 -0.06637 0.01119 0.30691 -0.06637 0.01731 0.30728 -0.07637 0.01270 0.30728 -0.07637 0.01580 0.30728 -0.06637 0.01270 0.30728 -0.06637 0.01580 0.30740 -0.07637 0.01425 0.30740 -0.06637 0.01425 0.29750 -0.07637 0.01425 0.29750 -0.06637 0.01425 0.34499 -0.06637 -0.04574 0.34499 -0.07637 -0.04574 0.35489 -0.06637 -0.04574 0.35489 -0.07637 -0.04574 0.35477 -0.06637 -0.04419 0.35477 -0.06637 -0.04729 0.35477 -0.07637 -0.04419 0.35477 -0.07637 -0.04729 0.35441 -0.06637 -0.04268 0.35441 -0.06637 -0.04880 0.35441 -0.07637 -0.04268 0.35441 -0.07637 -0.04880 0.35381 -0.06637 -0.04124 0.35381 -0.06637 -0.05023 0.35381 -0.07637 -0.04124 0.35381 -0.07637 -0.05023 0.35300 -0.06637 -0.03992 0.35300 -0.06637 -0.05156 0.35300 -0.07637 -0.03992 0.35300 -0.07637 -0.05156 0.35199 -0.06637 -0.03874 0.35199 -0.06637 -0.05274 0.35199 -0.07637 -0.03874 0.35199 -0.07637 -0.05274 0.35081 -0.06637 -0.03773 0.35081 -0.06637 -0.05375 0.35081 -0.07637 -0.03773 0.35081 -0.07637 -0.05375 0.34949 -0.06637 -0.03692 0.34949 -0.06637 -0.05456 0.34949 -0.07637 -0.03692 0.34949 -0.07637 -0.05456 0.34805 -0.06637 -0.03632 0.34805 -0.06637 -0.05515 0.34805 -0.07637 -0.03632 0.34805 -0.07637 -0.05515 0.34654 -0.06637 -0.03596 0.34654 -0.06637 -0.05551 0.34654 -0.07637 -0.03596 0.34654 -0.07637 -0.05551 0.34499 -0.06637 -0.03584 0.34499 -0.06637 -0.05564 0.34499 -0.07637 -0.03584 0.34499 -0.07637 -0.05564 0.34344 -0.06637 -0.03596 0.34344 -0.06637 -0.05551 0.34344 -0.07637 -0.03596 0.34344 -0.07637 -0.05551 0.34193 -0.06637 -0.03632 0.34193 -0.06637 -0.05515 0.34193 -0.07637 -0.03632 0.34193 -0.07637 -0.05515 0.34050 -0.06637 -0.03692 0.34050 -0.06637 -0.05456 0.34050 -0.07637 -0.03692 0.34050 -0.07637 -0.05456 0.33917 -0.06637 -0.03773 0.33917 -0.06637 -0.05375 0.33917 -0.07637 -0.03773 0.33917 -0.07637 -0.05375 0.33799 -0.06637 -0.03874 0.33799 -0.06637 -0.05274 0.33799 -0.07637 -0.03874 0.33799 -0.07637 -0.05274 0.33698 -0.06637 -0.03992 0.33698 -0.06637 -0.05156 0.33698 -0.07637 -0.03992 0.33698 -0.07637 -0.05156 0.33617 -0.06637 -0.04124 0.33617 -0.06637 -0.05023 0.33617 -0.07637 -0.04124 0.33617 -0.07637 -0.05023 0.33558 -0.06637 -0.04268 0.33558 -0.06637 -0.04880 0.33558 -0.07637 -0.04268 0.33558 -0.07637 -0.04880 0.33521 -0.06637 -0.04419 0.33521 -0.06637 -0.04729 0.33521 -0.07637 -0.04419 0.33521 -0.07637 -0.04729 0.33509 -0.06637 -0.04574 0.33509 -0.07637 -0.04574 0.24759 -0.07637 -0.36573 0.24759 -0.06637 -0.36573 0.24771 -0.07637 -0.36728 0.24771 -0.07637 -0.36418 0.24771 -0.06637 -0.36728 0.24771 -0.06637 -0.36418 0.24807 -0.07637 -0.36879 0.24807 -0.07637 -0.36267 0.24807 -0.06637 -0.36879 0.24807 -0.06637 -0.36267 0.24867 -0.07637 -0.37023 0.24867 -0.07637 -0.36124 0.24867 -0.06637 -0.37023 0.24867 -0.06637 -0.36124 0.24948 -0.07637 -0.37155 0.24948 -0.07637 -0.35991 0.24948 -0.06637 -0.37155 0.24948 -0.06637 -0.35991 0.25049 -0.07637 -0.37273 0.25049 -0.07637 -0.35873 0.25049 -0.06637 -0.37273 0.25049 -0.06637 -0.35873 0.25167 -0.07637 -0.37374 0.25167 -0.07637 -0.35772 0.25167 -0.06637 -0.37374 0.25167 -0.06637 -0.35772 0.25299 -0.07637 -0.37455 0.25299 -0.07637 -0.35691 0.25299 -0.06637 -0.37455 0.25299 -0.06637 -0.35691 0.25443 -0.07637 -0.37515 0.25443 -0.07637 -0.35632 0.25443 -0.06637 -0.37515 0.25443 -0.06637 -0.35632 0.25594 -0.07637 -0.37551 0.25594 -0.07637 -0.35595 0.25594 -0.06637 -0.37551 0.25594 -0.06637 -0.35595 0.25749 -0.07637 -0.37563 0.25749 -0.07637 -0.35583 0.25749 -0.06637 -0.37563 0.25749 -0.06637 -0.35583 0.25904 -0.07637 -0.37551 0.25904 -0.07637 -0.35595 0.25904 -0.06637 -0.37551 0.25904 -0.06637 -0.35595 0.26055 -0.07637 -0.37515 0.26055 -0.07637 -0.35632 0.26055 -0.06637 -0.37515 0.26055 -0.06637 -0.35632 0.26198 -0.07637 -0.37455 0.26198 -0.07637 -0.35691 0.26198 -0.06637 -0.37455 0.26198 -0.06637 -0.35691 0.26331 -0.07637 -0.37374 0.26331 -0.07637 -0.35772 0.26331 -0.06637 -0.37374 0.26331 -0.06637 -0.35772 0.26449 -0.07637 -0.37273 0.26449 -0.07637 -0.35873 0.26449 -0.06637 -0.37273 0.26449 -0.06637 -0.35873 0.26550 -0.07637 -0.37155 0.26550 -0.07637 -0.35991 0.26550 -0.06637 -0.37155 0.26550 -0.06637 -0.35991 0.26631 -0.07637 -0.37023 0.26631 -0.07637 -0.36124 0.26631 -0.06637 -0.37023 0.26631 -0.06637 -0.36124 0.26690 -0.07637 -0.36879 0.26690 -0.07637 -0.36267 0.26690 -0.06637 -0.36879 0.26690 -0.06637 -0.36267 0.26727 -0.07637 -0.36728 0.26727 -0.07637 -0.36418 0.26727 -0.06637 -0.36728 0.26727 -0.06637 -0.36418 0.26739 -0.07637 -0.36573 0.26739 -0.06637 -0.36573 0.25749 -0.07637 -0.36573 0.25749 -0.06637 -0.36573 0.20002 -0.06637 -0.39074 0.20002 -0.07637 -0.39074 0.20992 -0.06637 -0.39074 0.20992 -0.07637 -0.39074 0.20979 -0.06637 -0.38919 0.20979 -0.06637 -0.39228 0.20979 -0.07637 -0.38919 0.20979 -0.07637 -0.39228 0.20943 -0.06637 -0.38768 0.20943 -0.06637 -0.39379 0.20943 -0.07637 -0.38768 0.20943 -0.07637 -0.39379 0.20884 -0.06637 -0.38624 0.20884 -0.06637 -0.39523 0.20884 -0.07637 -0.38624 0.20884 -0.07637 -0.39523 0.20802 -0.06637 -0.38492 0.20802 -0.06637 -0.39655 0.20802 -0.07637 -0.38492 0.20802 -0.07637 -0.39655 0.20702 -0.06637 -0.38374 0.20702 -0.06637 -0.39774 0.20702 -0.07637 -0.38374 0.20702 -0.07637 -0.39774 0.20583 -0.06637 -0.38273 0.20583 -0.06637 -0.39874 0.20583 -0.07637 -0.38273 0.20583 -0.07637 -0.39874 0.20451 -0.06637 -0.38191 0.20451 -0.06637 -0.39956 0.20451 -0.07637 -0.38191 0.20451 -0.07637 -0.39956 0.20307 -0.06637 -0.38132 0.20307 -0.06637 -0.40015 0.20307 -0.07637 -0.38132 0.20307 -0.07637 -0.40015 0.20156 -0.06637 -0.38096 0.20156 -0.06637 -0.40051 0.20156 -0.07637 -0.38096 0.20156 -0.07637 -0.40051 0.20002 -0.06637 -0.38084 0.20002 -0.06637 -0.40064 0.20002 -0.07637 -0.38084 0.20002 -0.07637 -0.40064 0.19847 -0.06637 -0.38096 0.19847 -0.06637 -0.40051 0.19847 -0.07637 -0.38096 0.19847 -0.07637 -0.40051 0.19696 -0.06637 -0.38132 0.19696 -0.06637 -0.40015 0.19696 -0.07637 -0.38132 0.19696 -0.07637 -0.40015 0.19552 -0.06637 -0.38191 0.19552 -0.06637 -0.39956 0.19552 -0.07637 -0.38191 0.19552 -0.07637 -0.39956 0.19420 -0.06637 -0.38273 0.19420 -0.06637 -0.39874 0.19420 -0.07637 -0.38273 0.19420 -0.07637 -0.39874 0.19302 -0.06637 -0.38374 0.19302 -0.06637 -0.39774 0.19302 -0.07637 -0.38374 0.19302 -0.07637 -0.39774 0.19201 -0.06637 -0.38492 0.19201 -0.06637 -0.39655 0.19201 -0.07637 -0.38492 0.19201 -0.07637 -0.39655 0.19119 -0.06637 -0.38624 0.19119 -0.06637 -0.39523 0.19119 -0.07637 -0.38624 0.19119 -0.07637 -0.39523 0.19060 -0.06637 -0.38768 0.19060 -0.06637 -0.39379 0.19060 -0.07637 -0.38768 0.19060 -0.07637 -0.39379 0.19024 -0.06637 -0.38919 0.19024 -0.06637 -0.39228 0.19024 -0.07637 -0.38919 0.19024 -0.07637 -0.39228 0.19012 -0.06637 -0.39074 0.19012 -0.07637 -0.39074 -0.20990 -0.07637 -0.39073 -0.20990 -0.06637 -0.39073 -0.20978 -0.07637 -0.39228 -0.20978 -0.07637 -0.38918 -0.20978 -0.06637 -0.39228 -0.20978 -0.06637 -0.38918 -0.20941 -0.07637 -0.39379 -0.20941 -0.07637 -0.38767 -0.20941 -0.06637 -0.39379 -0.20941 -0.06637 -0.38767 -0.20882 -0.07637 -0.39523 -0.20882 -0.07637 -0.38624 -0.20882 -0.06637 -0.39523 -0.20882 -0.06637 -0.38624 -0.20801 -0.07637 -0.39655 -0.20801 -0.07637 -0.38491 -0.20801 -0.06637 -0.39655 -0.20801 -0.06637 -0.38491 -0.20700 -0.07637 -0.39773 -0.20700 -0.07637 -0.38373 -0.20700 -0.06637 -0.39773 -0.20700 -0.06637 -0.38373 -0.20582 -0.07637 -0.39874 -0.20582 -0.07637 -0.38272 -0.20582 -0.06637 -0.39874 -0.20582 -0.06637 -0.38272 -0.20449 -0.07637 -0.39955 -0.20449 -0.07637 -0.38191 -0.20449 -0.06637 -0.39955 -0.20449 -0.06637 -0.38191 -0.20306 -0.07637 -0.40015 -0.20306 -0.07637 -0.38132 -0.20306 -0.06637 -0.40015 -0.20306 -0.06637 -0.38132 -0.20155 -0.07637 -0.40051 -0.20155 -0.07637 -0.38096 -0.20155 -0.06637 -0.40051 -0.20155 -0.06637 -0.38096 -0.20000 -0.07637 -0.40063 -0.20000 -0.07637 -0.38083 -0.20000 -0.06637 -0.40063 -0.20000 -0.06637 -0.38083 -0.19845 -0.07637 -0.40051 -0.19845 -0.07637 -0.38096 -0.19845 -0.06637 -0.40051 -0.19845 -0.06637 -0.38096 -0.19694 -0.07637 -0.40015 -0.19694 -0.07637 -0.38132 -0.19694 -0.06637 -0.40015 -0.19694 -0.06637 -0.38132 -0.19550 -0.07637 -0.39955 -0.19550 -0.07637 -0.38191 -0.19550 -0.06637 -0.39955 -0.19550 -0.06637 -0.38191 -0.19418 -0.07637 -0.39874 -0.19418 -0.07637 -0.38272 -0.19418 -0.06637 -0.39874 -0.19418 -0.06637 -0.38272 -0.19300 -0.07637 -0.39773 -0.19300 -0.07637 -0.38373 -0.19300 -0.06637 -0.39773 -0.19300 -0.06637 -0.38373 -0.19199 -0.07637 -0.39655 -0.19199 -0.07637 -0.38491 -0.19199 -0.06637 -0.39655 -0.19199 -0.06637 -0.38491 -0.19118 -0.07637 -0.39523 -0.19118 -0.07637 -0.38624 -0.19118 -0.06637 -0.39523 -0.19118 -0.06637 -0.38624 -0.19058 -0.07637 -0.39379 -0.19058 -0.07637 -0.38767 -0.19058 -0.06637 -0.39379 -0.19058 -0.06637 -0.38767 -0.19022 -0.07637 -0.39228 -0.19022 -0.07637 -0.38918 -0.19022 -0.06637 -0.39228 -0.19022 -0.06637 -0.38918 -0.19010 -0.07637 -0.39073 -0.19010 -0.06637 -0.39073 -0.20000 -0.07637 -0.39073 -0.20000 -0.06637 -0.39073 -0.25749 -0.06637 -0.36577 -0.25749 -0.07637 -0.36577 -0.24759 -0.06637 -0.36577 -0.24759 -0.07637 -0.36577 -0.24771 -0.06637 -0.36422 -0.24771 -0.06637 -0.36732 -0.24771 -0.07637 -0.36422 -0.24771 -0.07637 -0.36732 -0.24807 -0.06637 -0.36271 -0.24807 -0.06637 -0.36883 -0.24807 -0.07637 -0.36271 -0.24807 -0.07637 -0.36883 -0.24867 -0.06637 -0.36127 -0.24867 -0.06637 -0.37026 -0.24867 -0.07637 -0.36127 -0.24867 -0.07637 -0.37026 -0.24948 -0.06637 -0.35995 -0.24948 -0.06637 -0.37159 -0.24948 -0.07637 -0.35995 -0.24948 -0.07637 -0.37159 -0.25049 -0.06637 -0.35877 -0.25049 -0.06637 -0.37277 -0.25049 -0.07637 -0.35877 -0.25049 -0.07637 -0.37277 -0.25167 -0.06637 -0.35776 -0.25167 -0.06637 -0.37378 -0.25167 -0.07637 -0.35776 -0.25167 -0.07637 -0.37378 -0.25299 -0.06637 -0.35695 -0.25299 -0.06637 -0.37459 -0.25299 -0.07637 -0.35695 -0.25299 -0.07637 -0.37459 -0.25443 -0.06637 -0.35635 -0.25443 -0.06637 -0.37518 -0.25443 -0.07637 -0.35635 -0.25443 -0.07637 -0.37518 -0.25594 -0.06637 -0.35599 -0.25594 -0.06637 -0.37554 -0.25594 -0.07637 -0.35599 -0.25594 -0.07637 -0.37554 -0.25749 -0.06637 -0.35587 -0.25749 -0.06637 -0.37567 -0.25749 -0.07637 -0.35587 -0.25749 -0.07637 -0.37567 -0.25904 -0.06637 -0.35599 -0.25904 -0.06637 -0.37554 -0.25904 -0.07637 -0.35599 -0.25904 -0.07637 -0.37554 -0.26055 -0.06637 -0.35635 -0.26055 -0.06637 -0.37518 -0.26055 -0.07637 -0.35635 -0.26055 -0.07637 -0.37518 -0.26198 -0.06637 -0.35695 -0.26198 -0.06637 -0.37459 -0.26198 -0.07637 -0.35695 -0.26198 -0.07637 -0.37459 -0.26331 -0.06637 -0.35776 -0.26331 -0.06637 -0.37378 -0.26331 -0.07637 -0.35776 -0.26331 -0.07637 -0.37378 -0.26449 -0.06637 -0.35877 -0.26449 -0.06637 -0.37277 -0.26449 -0.07637 -0.35877 -0.26449 -0.07637 -0.37277 -0.26550 -0.06637 -0.35995 -0.26550 -0.06637 -0.37159 -0.26550 -0.07637 -0.35995 -0.26550 -0.07637 -0.37159 -0.26631 -0.06637 -0.36127 -0.26631 -0.06637 -0.37026 -0.26631 -0.07637 -0.36127 -0.26631 -0.07637 -0.37026 -0.26690 -0.06637 -0.36271 -0.26690 -0.06637 -0.36883 -0.26690 -0.07637 -0.36271 -0.26690 -0.07637 -0.36883 -0.26727 -0.06637 -0.36422 -0.26727 -0.06637 -0.36732 -0.26727 -0.07637 -0.36422 -0.26727 -0.07637 -0.36732 -0.26739 -0.06637 -0.36577 -0.26739 -0.07637 -0.36577 -0.35491 -0.07637 -0.04575 -0.35491 -0.06637 -0.04575 -0.35478 -0.07637 -0.04730 -0.35478 -0.07637 -0.04420 -0.35478 -0.06637 -0.04730 -0.35478 -0.06637 -0.04420 -0.35442 -0.07637 -0.04881 -0.35442 -0.07637 -0.04269 -0.35442 -0.06637 -0.04881 -0.35442 -0.06637 -0.04269 -0.35383 -0.07637 -0.05025 -0.35383 -0.07637 -0.04126 -0.35383 -0.06637 -0.05025 -0.35383 -0.06637 -0.04126 -0.35301 -0.07637 -0.05157 -0.35301 -0.07637 -0.03993 -0.35301 -0.06637 -0.05157 -0.35301 -0.06637 -0.03993 -0.35201 -0.07637 -0.05275 -0.35201 -0.07637 -0.03875 -0.35201 -0.06637 -0.05275 -0.35201 -0.06637 -0.03875 -0.35082 -0.07637 -0.05376 -0.35082 -0.07637 -0.03774 -0.35082 -0.06637 -0.05376 -0.35082 -0.06637 -0.03774 -0.34950 -0.07637 -0.05457 -0.34950 -0.07637 -0.03693 -0.34950 -0.06637 -0.05457 -0.34950 -0.06637 -0.03693 -0.34806 -0.07637 -0.05517 -0.34806 -0.07637 -0.03634 -0.34806 -0.06637 -0.05517 -0.34806 -0.06637 -0.03634 -0.34655 -0.07637 -0.05553 -0.34655 -0.07637 -0.03597 -0.34655 -0.06637 -0.05553 -0.34655 -0.06637 -0.03597 -0.34501 -0.07637 -0.05565 -0.34501 -0.07637 -0.03585 -0.34501 -0.06637 -0.05565 -0.34501 -0.06637 -0.03585 -0.34346 -0.07637 -0.05553 -0.34346 -0.07637 -0.03597 -0.34346 -0.06637 -0.05553 -0.34346 -0.06637 -0.03597 -0.34195 -0.07637 -0.05517 -0.34195 -0.07637 -0.03634 -0.34195 -0.06637 -0.05517 -0.34195 -0.06637 -0.03634 -0.34051 -0.07637 -0.05457 -0.34051 -0.07637 -0.03693 -0.34051 -0.06637 -0.05457 -0.34051 -0.06637 -0.03693 -0.33919 -0.07637 -0.05376 -0.33919 -0.07637 -0.03774 -0.33919 -0.06637 -0.05376 -0.33919 -0.06637 -0.03774 -0.33801 -0.07637 -0.05275 -0.33801 -0.07637 -0.03875 -0.33801 -0.06637 -0.05275 -0.33801 -0.06637 -0.03875 -0.33700 -0.07637 -0.05157 -0.33700 -0.07637 -0.03993 -0.33700 -0.06637 -0.05157 -0.33700 -0.06637 -0.03993 -0.33618 -0.07637 -0.05025 -0.33618 -0.07637 -0.04126 -0.33618 -0.06637 -0.05025 -0.33618 -0.06637 -0.04126 -0.33559 -0.07637 -0.04881 -0.33559 -0.07637 -0.04269 -0.33559 -0.06637 -0.04881 -0.33559 -0.06637 -0.04269 -0.33523 -0.07637 -0.04730 -0.33523 -0.07637 -0.04420 -0.33523 -0.06637 -0.04730 -0.33523 -0.06637 -0.04420 -0.33511 -0.07637 -0.04575 -0.33511 -0.06637 -0.04575 -0.34501 -0.07637 -0.04575 -0.34501 -0.06637 -0.04575 -0.29751 -0.06637 0.01425 -0.29751 -0.07637 0.01425 -0.28761 -0.06637 0.01425 -0.28761 -0.07637 0.01425 -0.28773 -0.06637 0.01580 -0.28773 -0.06637 0.01270 -0.28773 -0.07637 0.01580 -0.28773 -0.07637 0.01270 -0.28809 -0.06637 0.01731 -0.28809 -0.06637 0.01119 -0.28809 -0.07637 0.01731 -0.28809 -0.07637 0.01119 -0.28869 -0.06637 0.01875 -0.28869 -0.06637 0.00976 -0.28869 -0.07637 0.01875 -0.28869 -0.07637 0.00976 -0.28950 -0.06637 0.02007 -0.28950 -0.06637 0.00843 -0.28950 -0.07637 0.02007 -0.28950 -0.07637 0.00843 -0.29051 -0.06637 0.02125 -0.29051 -0.06637 0.00725 -0.29051 -0.07637 0.02125 -0.29051 -0.07637 0.00725 -0.29169 -0.06637 0.02226 -0.29169 -0.06637 0.00624 -0.29169 -0.07637 0.02226 -0.29169 -0.07637 0.00624 -0.29301 -0.06637 0.02307 -0.29301 -0.06637 0.00543 -0.29301 -0.07637 0.02307 -0.29301 -0.07637 0.00543 -0.29445 -0.06637 0.02367 -0.29445 -0.06637 0.00484 -0.29445 -0.07637 0.02367 -0.29445 -0.07637 0.00484 -0.29596 -0.06637 0.02403 -0.29596 -0.06637 0.00447 -0.29596 -0.07637 0.02403 -0.29596 -0.07637 0.00447 -0.29751 -0.06637 0.02415 -0.29751 -0.06637 0.00435 -0.29751 -0.07637 0.02415 -0.29751 -0.07637 0.00435 -0.29906 -0.06637 0.02403 -0.29906 -0.06637 0.00447 -0.29906 -0.07637 0.02403 -0.29906 -0.07637 0.00447 -0.30057 -0.06637 0.02367 -0.30057 -0.06637 0.00484 -0.30057 -0.07637 0.02367 -0.30057 -0.07637 0.00484 -0.30200 -0.06637 0.02307 -0.30200 -0.06637 0.00543 -0.30200 -0.07637 0.02307 -0.30200 -0.07637 0.00543 -0.30333 -0.06637 0.02226 -0.30333 -0.06637 0.00624 -0.30333 -0.07637 0.02226 -0.30333 -0.07637 0.00624 -0.30451 -0.06637 0.02125 -0.30451 -0.06637 0.00725 -0.30451 -0.07637 0.02125 -0.30451 -0.07637 0.00725 -0.30552 -0.06637 0.02007 -0.30552 -0.06637 0.00843 -0.30552 -0.07637 0.02007 -0.30552 -0.07637 0.00843 -0.30633 -0.06637 0.01875 -0.30633 -0.06637 0.00976 -0.30633 -0.07637 0.01875 -0.30633 -0.07637 0.00976 -0.30692 -0.06637 0.01731 -0.30692 -0.06637 0.01119 -0.30692 -0.07637 0.01731 -0.30692 -0.07637 0.01119 -0.30729 -0.06637 0.01580 -0.30729 -0.06637 0.01270 -0.30729 -0.07637 0.01580 -0.30729 -0.07637 0.01270 -0.30741 -0.06637 0.01425 -0.30741 -0.07637 0.01425 -0.50000 -0.24937 0.21925 -0.50000 -0.24937 0.69750 -0.50000 -0.24937 0.69925 -0.50000 -0.24907 0.21692 -0.50000 -0.24907 0.70158 -0.50000 -0.24817 0.21475 -0.50000 -0.24817 0.70375 -0.50000 -0.24674 0.21289 -0.50000 -0.24674 0.70561 -0.50000 -0.24487 0.21146 -0.50000 -0.24487 0.70704 -0.50000 -0.24270 0.21056 -0.50000 -0.24270 0.70794 -0.50000 -0.24037 0.21025 -0.50000 -0.24037 0.70825 -0.50000 -0.11037 0.21025 -0.50000 -0.11037 0.70825 -0.50000 -0.10804 0.21056 -0.50000 -0.10804 0.70794 -0.50000 -0.10587 0.21146 -0.50000 -0.10587 0.70704 -0.50000 -0.10401 0.21289 -0.50000 -0.10401 0.70561 -0.50000 -0.10258 0.21475 -0.50000 -0.10258 0.70375 -0.50000 -0.10168 0.21692 -0.50000 -0.10168 0.70158 -0.50000 -0.10137 0.21925 -0.50000 -0.10137 0.69750 -0.50000 -0.10137 0.69925 -0.49900 -0.25037 0.21925 -0.49900 -0.25037 0.69925 -0.49900 -0.25003 0.21666 -0.49900 -0.25003 0.70184 -0.49900 -0.24903 0.21425 -0.49900 -0.24903 0.70425 -0.49900 -0.24744 0.21218 -0.49900 -0.24744 0.70632 -0.49900 -0.24537 0.21059 -0.49900 -0.24537 0.70791 -0.49900 -0.24296 0.20959 -0.49900 -0.24296 0.70891 -0.49900 -0.24037 0.20925 -0.49900 -0.24037 0.70925 -0.49900 -0.11037 0.20925 -0.49900 -0.11037 0.70925 -0.49900 -0.10778 0.20959 -0.49900 -0.10778 0.70891 -0.49900 -0.10537 0.21059 -0.49900 -0.10537 0.70791 -0.49900 -0.10330 0.21218 -0.49900 -0.10330 0.70632 -0.49900 -0.10171 0.21425 -0.49900 -0.10171 0.70425 -0.49900 -0.10071 0.21666 -0.49900 -0.10071 0.70184 -0.49900 -0.10037 0.21925 -0.49900 -0.10037 0.69925 -0.48900 -0.25037 0.21925 -0.48900 -0.25037 0.69925 -0.48900 -0.25003 0.21666 -0.48900 -0.25003 0.70184 -0.48900 -0.24903 0.21425 -0.48900 -0.24903 0.70425 -0.48900 -0.24744 0.21218 -0.48900 -0.24744 0.70632 -0.48900 -0.24537 0.21059 -0.48900 -0.24537 0.70791 -0.48900 -0.24296 0.20959 -0.48900 -0.24296 0.70891 -0.48900 -0.24037 0.20925 -0.48900 -0.24037 0.70925 -0.48900 -0.11037 0.20925 -0.48900 -0.11037 0.70925 -0.48900 -0.10778 0.20959 -0.48900 -0.10778 0.70891 -0.48900 -0.10537 0.21059 -0.48900 -0.10537 0.70791 -0.48900 -0.10330 0.21218 -0.48900 -0.10330 0.70632 -0.48900 -0.10171 0.21425 -0.48900 -0.10171 0.70425 -0.48900 -0.10071 0.21666 -0.48900 -0.10071 0.70184 -0.48900 -0.10037 0.21925 -0.48900 -0.10037 0.69925 -0.48800 -0.24937 0.21925 -0.48800 -0.24937 0.69750 -0.48800 -0.24937 0.69925 -0.48800 -0.24907 0.21692 -0.48800 -0.24907 0.70158 -0.48800 -0.24817 0.21475 -0.48800 -0.24817 0.70375 -0.48800 -0.24674 0.21289 -0.48800 -0.24674 0.70561 -0.48800 -0.24487 0.21146 -0.48800 -0.24487 0.70704 -0.48800 -0.24270 0.21056 -0.48800 -0.24270 0.70794 -0.48800 -0.24037 0.21025 -0.48800 -0.24037 0.70825 -0.48800 -0.11037 0.21025 -0.48800 -0.11037 0.70825 -0.48800 -0.10804 0.21056 -0.48800 -0.10804 0.70794 -0.48800 -0.10587 0.21146 -0.48800 -0.10587 0.70704 -0.48800 -0.10401 0.21289 -0.48800 -0.10401 0.70561 -0.48800 -0.10258 0.21475 -0.48800 -0.10258 0.70375 -0.48800 -0.10168 0.21692 -0.48800 -0.10168 0.70158 -0.48800 -0.10137 0.21925 -0.48800 -0.10137 0.69750 -0.48800 -0.10137 0.69925 0.10250 -0.18093 1.35025 0.10257 -0.18361 1.35825 0.10264 -0.17825 1.35825 0.10267 -0.18360 1.35025 0.10274 -0.17826 1.35025 0.10284 -0.18628 1.35025 0.10298 -0.17559 1.35025 0.10332 -0.18891 1.35825 0.10342 -0.18889 1.35025 0.10350 -0.18094 1.34925 0.10352 -0.17296 1.35825 0.10357 -0.18354 1.35925 0.10362 -0.17299 1.35025 0.10364 -0.17834 1.35925 0.10384 -0.18613 1.34925 0.10397 -0.17576 1.34925 0.10400 -0.19151 1.35025 0.10427 -0.17039 1.35025 0.10430 -0.18870 1.35925 0.10449 -0.17321 1.35925 0.10487 -0.19404 1.35825 0.10496 -0.19122 1.34925 0.10497 -0.19401 1.35025 0.10521 -0.16788 1.35825 0.10522 -0.17070 1.34925 0.10530 -0.16792 1.35025 0.10581 -0.19368 1.35925 0.10594 -0.19650 1.35025 0.10613 -0.16826 1.35925 0.10633 -0.16544 1.35025 0.10684 -0.19607 1.34925 0.10719 -0.19887 1.35825 0.10723 -0.16590 1.34925 0.10728 -0.19882 1.35025 0.10765 -0.16311 1.35825 0.10773 -0.16316 1.35025 0.10806 -0.19837 1.35925 0.10850 -0.16363 1.35925 0.10862 -0.20114 1.35025 0.10913 -0.16087 1.35025 0.10944 -0.20058 1.34925 0.10994 -0.16146 1.34925 0.11022 -0.20330 1.35825 0.11030 -0.20323 1.35025 0.11078 -0.15876 1.35825 0.11086 -0.15883 1.35025 0.11100 -0.20267 1.35925 0.11155 -0.15941 1.35925 0.11197 -0.20532 1.35025 0.11259 -0.15678 1.35025 0.11259 -0.15678 1.35825 0.11270 -0.20464 1.34925 0.11330 -0.15749 1.34925 0.11330 -0.15749 1.35925 0.11388 -0.20720 1.35825 0.11395 -0.20713 1.35025 0.11455 -0.15495 1.35825 0.11456 -0.20647 1.35925 0.11461 -0.15503 1.35025 0.11520 -0.15570 1.35925 0.11593 -0.20894 1.35025 0.11655 -0.20815 1.34925 0.11664 -0.15327 1.35025 0.11723 -0.15407 1.34925 0.11810 -0.21051 1.35825 0.11816 -0.21042 1.35025 0.11866 -0.20967 1.35925 0.11885 -0.15176 1.35825 0.11891 -0.15184 1.35025 0.11938 -0.15260 1.35925 0.12039 -0.21191 1.35025 0.12088 -0.21103 1.34925 0.12117 -0.15041 1.35025 0.12164 -0.15130 1.34925 0.12278 -0.21313 1.35825 0.12282 -0.21303 1.35025 0.12320 -0.21222 1.35925 0.12359 -0.14926 1.35825 0.12363 -0.14935 1.35025 0.12399 -0.15017 1.35925 0.12525 -0.21416 1.35025 0.12560 -0.21322 1.34925 0.12609 -0.14828 1.35025 0.12641 -0.14923 1.34925 0.12780 -0.21500 1.35825 0.12783 -0.21490 1.35025 0.12808 -0.21404 1.35925 0.12866 -0.14751 1.35825 0.12868 -0.14761 1.35025 0.12891 -0.14848 1.35925 0.13040 -0.21564 1.35025 0.13060 -0.21467 1.34925 0.13127 -0.14693 1.35025 0.13145 -0.14791 1.34925 0.13750 -0.18137 1.34925 0.13750 -0.18137 1.35925 0.13305 -0.21609 1.35825 0.13306 -0.21599 1.35025 0.13317 -0.21510 1.35925 0.13393 -0.14656 1.35825 0.13394 -0.14666 1.35025 0.13403 -0.14755 1.35925 0.13572 -0.21633 1.35025 0.13577 -0.21533 1.34925 0.13660 -0.14638 1.35025 0.13663 -0.14738 1.34925 0.13837 -0.21536 1.35925 0.13839 -0.21626 1.35025 0.13840 -0.21636 1.35825 0.13923 -0.14742 1.35925 0.13928 -0.14652 1.35025 0.13928 -0.14642 1.35825 0.14097 -0.21519 1.34925 0.14107 -0.21619 1.35025 0.14183 -0.14765 1.34925 0.14196 -0.14666 1.35025 0.14355 -0.21483 1.35925 0.14371 -0.21571 1.35025 0.14373 -0.21581 1.35825 0.14440 -0.14808 1.35925 0.14458 -0.14720 1.35025 0.14460 -0.14710 1.35825 0.14609 -0.21427 1.34925 0.14635 -0.21524 1.35025 0.14693 -0.14870 1.34925 0.14720 -0.14774 1.35025 0.14859 -0.21351 1.35925 0.14888 -0.21436 1.35025 0.14891 -0.21446 1.35825 0.14940 -0.14952 1.35925 0.14971 -0.14868 1.35025 0.14975 -0.14859 1.35825 0.15101 -0.21257 1.34925 0.15141 -0.21349 1.35025 0.15180 -0.15053 1.34925 0.15222 -0.14962 1.35025 0.15336 -0.21145 1.35925 0.15378 -0.21224 1.35025 0.15383 -0.21233 1.35825 0.15412 -0.15171 1.35925 0.15456 -0.15093 1.35025 0.15461 -0.15084 1.35825 0.15562 -0.21014 1.34925 0.15615 -0.21099 1.35025 0.15634 -0.15307 1.34925 0.15690 -0.15224 1.35025 0.15777 -0.20867 1.35925 0.15830 -0.20939 1.35025 0.15836 -0.20947 1.35825 0.15845 -0.15460 1.35925 0.15901 -0.15389 1.35025 0.15907 -0.15381 1.35825 0.15980 -0.20704 1.34925 0.16044 -0.15628 1.34925 0.16045 -0.20780 1.35025 0.16112 -0.15554 1.35025 0.16170 -0.20526 1.35925 0.16229 -0.15811 1.35925 0.16233 -0.20589 1.35025 0.16241 -0.20596 1.35825 0.16295 -0.15749 1.35025 0.16303 -0.15742 1.35825 0.16345 -0.20334 1.34925 0.16400 -0.16008 1.34925 0.16422 -0.20398 1.35025 0.16478 -0.15945 1.35025 0.16506 -0.20128 1.35925 0.16556 -0.16217 1.35925 0.16579 -0.20181 1.35025 0.16587 -0.20187 1.35825 0.16630 -0.16166 1.35025 0.16638 -0.16160 1.35825 0.16650 -0.19912 1.34925 0.16694 -0.16437 1.34925 0.16736 -0.19964 1.35025 0.16778 -0.19684 1.35925 0.16781 -0.16387 1.35025 0.16816 -0.16667 1.35925 0.16857 -0.19725 1.35025 0.16867 -0.19730 1.35825 0.16887 -0.19448 1.34925 0.16897 -0.16629 1.35025 0.16906 -0.16624 1.35825 0.16919 -0.16906 1.34925 0.16978 -0.19204 1.35925 0.16979 -0.19487 1.35025 0.17004 -0.17153 1.35925 0.17013 -0.16870 1.35025 0.17050 -0.18954 1.34925 0.17063 -0.19232 1.35025 0.17070 -0.17405 1.34925 0.17073 -0.19236 1.35825 0.17090 -0.17127 1.35025 0.17100 -0.17124 1.35825 0.17103 -0.18699 1.35925 0.17116 -0.17661 1.35925 0.17136 -0.18441 1.34925 0.17143 -0.17920 1.34925 0.17147 -0.18978 1.35025 0.17150 -0.18180 1.35925 0.17168 -0.17383 1.35025 0.17192 -0.18714 1.35025 0.17202 -0.18715 1.35825 0.17205 -0.17648 1.35025 0.17215 -0.17647 1.35825 0.17236 -0.18449 1.35025 0.17239 -0.18182 1.35025 0.17243 -0.17914 1.35025 0.17250 -0.18182 1.35825 -0.17248 -0.18267 1.35825 -0.17247 -0.17999 1.35025 -0.17237 -0.18267 1.35025 -0.17227 -0.18535 1.35025 -0.17226 -0.17732 1.35825 -0.17216 -0.17733 1.35025 -0.17187 -0.18800 1.35825 -0.17185 -0.17467 1.35025 -0.17177 -0.18798 1.35025 -0.17148 -0.18264 1.35925 -0.17147 -0.18003 1.34925 -0.17128 -0.18523 1.34925 -0.17127 -0.17744 1.35925 -0.17126 -0.19061 1.35025 -0.17124 -0.17206 1.35825 -0.17114 -0.17209 1.35025 -0.17088 -0.18781 1.35925 -0.17087 -0.17486 1.34925 -0.17045 -0.19317 1.35825 -0.17043 -0.16951 1.35025 -0.17036 -0.19313 1.35025 -0.17030 -0.19035 1.34925 -0.17028 -0.17233 1.35925 -0.16951 -0.19283 1.35925 -0.16949 -0.16984 1.34925 -0.16945 -0.19565 1.35025 -0.16942 -0.16702 1.35825 -0.16933 -0.16706 1.35025 -0.16854 -0.19525 1.34925 -0.16851 -0.16743 1.35925 -0.16827 -0.19806 1.35825 -0.16823 -0.16462 1.35025 -0.16818 -0.19801 1.35025 -0.16739 -0.19758 1.35925 -0.16735 -0.16510 1.34925 -0.16690 -0.20036 1.35025 -0.16686 -0.16231 1.35825 -0.16677 -0.16237 1.35025 -0.16606 -0.19982 1.34925 -0.16602 -0.16286 1.35925 -0.16536 -0.20256 1.35825 -0.16531 -0.16012 1.35025 -0.16528 -0.20250 1.35025 -0.16456 -0.20195 1.35925 -0.16452 -0.16073 1.34925 -0.16365 -0.20463 1.35025 -0.16360 -0.15806 1.35825 -0.16353 -0.15813 1.35025 -0.16291 -0.20397 1.34925 -0.16286 -0.15872 1.35925 -0.16180 -0.20656 1.35825 -0.16174 -0.15613 1.35025 -0.16173 -0.20649 1.35025 -0.16110 -0.20584 1.35925 -0.16105 -0.15685 1.34925 -0.15980 -0.20835 1.35025 -0.15974 -0.15435 1.35825 -0.15967 -0.15442 1.35025 -0.15916 -0.20758 1.34925 -0.15910 -0.15512 1.35925 -0.15767 -0.20998 1.35825 -0.15761 -0.20989 1.35025 -0.15760 -0.15272 1.35025 -0.15709 -0.20916 1.35925 -0.15703 -0.15354 1.34925 -0.15542 -0.21144 1.35025 -0.15535 -0.15127 1.35825 -0.15530 -0.15136 1.35025 -0.15491 -0.21058 1.34925 -0.15484 -0.15213 1.35925 -0.15306 -0.21272 1.35825 -0.15302 -0.21263 1.35025 -0.15300 -0.14999 1.35025 -0.15262 -0.21183 1.35925 -0.15255 -0.15089 1.34925 -0.15062 -0.21382 1.35025 -0.15055 -0.14890 1.35825 -0.15051 -0.14899 1.35025 -0.15024 -0.21289 1.34925 -0.15018 -0.14982 1.35925 -0.14810 -0.21473 1.35825 -0.14807 -0.21463 1.35025 -0.14802 -0.14799 1.35025 -0.14779 -0.21378 1.35925 -0.14772 -0.14895 1.34925 -0.14551 -0.21544 1.35025 -0.14544 -0.14728 1.35825 -0.14541 -0.14738 1.35025 -0.14528 -0.21447 1.34925 -0.14521 -0.14826 1.35925 -0.14288 -0.21596 1.35825 -0.14287 -0.21585 1.35025 -0.14280 -0.14678 1.35025 -0.14273 -0.21497 1.35925 -0.14265 -0.14777 1.34925 -0.13750 -0.18137 1.35925 -0.14022 -0.21627 1.35025 -0.14014 -0.14647 1.35825 -0.14014 -0.21527 1.34925 -0.14013 -0.14657 1.35025 -0.14006 -0.14747 1.35925 -0.13754 -0.21637 1.35825 -0.13754 -0.21627 1.35025 -0.13754 -0.21537 1.35925 -0.13746 -0.14737 1.34925 -0.13746 -0.14637 1.35025 -0.13494 -0.21528 1.34925 -0.13486 -0.14747 1.35925 -0.13486 -0.21627 1.35025 -0.13479 -0.14658 1.35025 -0.13478 -0.14648 1.35825 -0.13235 -0.21498 1.35925 -0.13227 -0.14778 1.34925 -0.13221 -0.21587 1.35025 -0.13220 -0.21597 1.35825 -0.13212 -0.14679 1.35025 -0.12979 -0.21449 1.34925 -0.12972 -0.14828 1.35925 -0.12956 -0.21546 1.35025 -0.12951 -0.14740 1.35025 -0.12949 -0.14730 1.35825 -0.12728 -0.21380 1.35925 -0.12721 -0.14897 1.34925 -0.12701 -0.21465 1.35025 -0.12698 -0.21475 1.35825 -0.12690 -0.14802 1.35025 -0.12483 -0.21292 1.34925 -0.12476 -0.14985 1.35925 -0.12445 -0.21385 1.35025 -0.12442 -0.14902 1.35025 -0.12438 -0.14892 1.35825 -0.12245 -0.21186 1.35925 -0.12238 -0.15092 1.34925 -0.12238 -0.15092 1.35925 -0.12205 -0.21266 1.35025 -0.12201 -0.21276 1.35825 -0.12194 -0.15002 1.35025 -0.12194 -0.15002 1.35825 -0.12016 -0.21062 1.34925 -0.12009 -0.15217 1.35925 -0.11965 -0.21148 1.35025 -0.11963 -0.15140 1.35025 -0.11958 -0.15131 1.35825 -0.11797 -0.20920 1.35925 -0.11791 -0.15358 1.34925 -0.11745 -0.20994 1.35025 -0.11740 -0.21002 1.35825 -0.11733 -0.15277 1.35025 -0.11590 -0.20763 1.34925 -0.11584 -0.15517 1.35925 -0.11527 -0.15447 1.35025 -0.11526 -0.20840 1.35025 -0.11520 -0.15439 1.35825 -0.11395 -0.20590 1.35925 -0.11390 -0.15690 1.34925 -0.11333 -0.20654 1.35025 -0.11326 -0.20662 1.35825 -0.11320 -0.15618 1.35025 -0.11214 -0.20402 1.34925 -0.11209 -0.15878 1.35925 -0.11142 -0.15818 1.35025 -0.11140 -0.20469 1.35025 -0.11135 -0.15811 1.35825 -0.11048 -0.20201 1.35925 -0.11044 -0.16079 1.34925 -0.10977 -0.20256 1.35025 -0.10969 -0.20262 1.35825 -0.10964 -0.16019 1.35025 -0.10898 -0.19989 1.34925 -0.10894 -0.16292 1.35925 -0.10819 -0.16244 1.35025 -0.10814 -0.20043 1.35025 -0.10810 -0.16238 1.35825 -0.10765 -0.19765 1.35925 -0.10761 -0.16516 1.34925 -0.10686 -0.19808 1.35025 -0.10677 -0.19813 1.35825 -0.10673 -0.16469 1.35025 -0.10649 -0.19531 1.34925 -0.10646 -0.16750 1.35925 -0.10564 -0.16713 1.35025 -0.10558 -0.19573 1.35025 -0.10555 -0.16709 1.35825 -0.10551 -0.19290 1.35925 -0.10549 -0.16992 1.34925 -0.10473 -0.19042 1.34925 -0.10470 -0.17240 1.35925 -0.10467 -0.19320 1.35025 -0.10457 -0.19324 1.35825 -0.10455 -0.16958 1.35025 -0.10413 -0.18788 1.35925 -0.10412 -0.17494 1.34925 -0.10384 -0.17216 1.35025 -0.10376 -0.19068 1.35025 -0.10374 -0.17214 1.35825 -0.10373 -0.18531 1.34925 -0.10372 -0.17751 1.35925 -0.10353 -0.18271 1.35925 -0.10352 -0.18011 1.34925 -0.10325 -0.18805 1.35025 -0.10315 -0.18807 1.35825 -0.10313 -0.17475 1.35025 -0.10283 -0.17741 1.35025 -0.10273 -0.18542 1.35025 -0.10273 -0.17740 1.35825 -0.10263 -0.18275 1.35025 -0.10253 -0.18275 1.35825 -0.10252 -0.18007 1.35025 1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 0.00000 0.98122 -0.19290 0.00000 0.92913 -0.36975 0.00000 0.84534 -0.53422 0.00000 0.73261 -0.68065 0.00000 0.59558 -0.80330 0.00000 0.43725 -0.89934 0.00000 -0.43727 0.89933 0.00000 -0.59537 0.80345 0.00000 -0.73260 0.68066 0.00000 -0.84536 0.53420 0.00000 -0.92912 0.36977 0.00000 -0.98122 0.19290 0.00000 -0.99996 0.00901 0.00000 -0.98468 -0.17435 0.00000 -0.93574 -0.35270 0.00000 -0.85497 -0.51867 0.00000 -0.74531 -0.66672 0.00000 -0.60999 -0.79241 0.00000 -0.45388 -0.89106 0.00000 -0.26509 0.96422 0.00000 -0.28272 -0.95920 0.00000 -0.08263 0.99658 0.00000 -0.10115 -0.99487 0.00000 0.10116 0.99487 0.00000 0.08263 -0.99658 0.00000 0.28271 0.95920 0.00000 0.26501 -0.96425 0.00000 0.45388 0.89106 0.00000 0.60999 0.79241 0.00000 0.74508 0.66697 0.00000 0.85518 0.51834 0.00000 0.93574 0.35270 0.00000 0.98460 0.17480 0.00000 0.99995 -0.00950 0.00000 -0.99996 0.00901 0.00000 -0.98468 -0.17435 0.00000 -0.93574 -0.35270 0.00000 -0.85497 -0.51867 0.00000 -0.74531 -0.66672 0.00000 -0.60999 -0.79241 0.00000 -0.45388 -0.89106 0.00000 -0.26509 0.96422 0.00000 -0.28272 -0.95920 0.00000 -0.08263 0.99658 0.00000 -0.10115 -0.99487 0.00000 0.10116 0.99487 0.00000 0.08263 -0.99658 0.00000 0.28271 0.95920 0.00000 0.26501 -0.96425 0.00000 0.45388 0.89106 0.00000 0.60999 0.79241 0.00000 0.74508 0.66697 0.00000 0.85518 0.51834 0.00000 0.93574 0.35270 0.00000 0.98460 0.17480 0.00000 0.99995 -0.00950 0.00000 0.98122 -0.19290 0.00000 0.92913 -0.36975 0.00000 0.84534 -0.53422 0.00000 0.73261 -0.68065 0.00000 0.59558 -0.80330 0.00000 0.43725 -0.89934 0.00000 -0.43727 0.89933 0.00000 -0.59537 0.80345 0.00000 -0.73260 0.68066 0.00000 -0.84536 0.53420 0.00000 -0.92912 0.36977 0.00000 -0.98122 0.19290 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 1.00000 0.00002 -0.00000 1.00000 0.00002 0.00000 1.00000 0.00002 -0.00000 1.00000 0.00002 0.00001 1.00000 0.00002 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00002 1.00000 0.00001 -0.00002 1.00000 0.00000 0.00002 1.00000 0.00000 -0.00002 1.00000 0.00000 0.00002 1.00000 0.00000 -0.00002 1.00000 -0.00000 0.00002 1.00000 -0.00000 -0.00002 1.00000 -0.00000 0.00002 1.00000 -0.00000 -0.00002 1.00000 -0.00001 0.00002 1.00000 -0.00001 -0.00002 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00002 0.00001 1.00000 -0.00002 -0.00001 1.00000 -0.00002 0.00000 1.00000 -0.00002 -0.00000 1.00000 -0.00002 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 1.00000 0.00002 -0.00000 1.00000 0.00002 0.00000 1.00000 0.00002 -0.00000 1.00000 0.00002 0.00001 1.00000 0.00002 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00002 1.00000 0.00001 -0.00002 1.00000 0.00000 0.00002 1.00000 0.00000 -0.00002 1.00000 0.00000 0.00002 1.00000 0.00000 -0.00002 1.00000 -0.00000 0.00002 1.00000 -0.00000 -0.00002 1.00000 -0.00000 0.00002 1.00000 -0.00000 -0.00002 1.00000 -0.00001 0.00002 1.00000 -0.00001 -0.00002 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00002 0.00001 1.00000 -0.00002 -0.00001 1.00000 -0.00002 0.00000 1.00000 -0.00002 -0.00000 1.00000 -0.00002 0.00000 1.00000 -0.00002 0.00000 1.00000 -0.00002 -0.00000 1.00000 -0.00002 0.00000 1.00000 -0.00002 -0.00001 1.00000 -0.00002 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00002 1.00000 -0.00001 0.00002 1.00000 -0.00000 -0.00002 1.00000 -0.00000 0.00002 1.00000 -0.00000 -0.00002 1.00000 -0.00000 0.00002 1.00000 0.00000 -0.00002 1.00000 0.00000 0.00002 1.00000 0.00000 -0.00002 1.00000 0.00000 0.00002 1.00000 0.00001 -0.00002 1.00000 0.00001 0.00002 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00002 -0.00001 1.00000 0.00002 0.00001 1.00000 0.00002 -0.00000 1.00000 0.00002 0.00000 1.00000 0.00002 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 1.00000 -0.00002 0.00000 1.00000 -0.00002 -0.00000 1.00000 -0.00002 0.00000 1.00000 -0.00002 -0.00001 1.00000 -0.00002 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00002 1.00000 -0.00001 0.00002 1.00000 -0.00000 -0.00002 1.00000 -0.00000 0.00002 1.00000 -0.00000 -0.00002 1.00000 -0.00000 0.00002 1.00000 0.00000 -0.00002 1.00000 0.00000 0.00002 1.00000 0.00000 -0.00002 1.00000 0.00000 0.00002 1.00000 0.00001 -0.00002 1.00000 0.00001 0.00002 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00002 -0.00001 1.00000 0.00002 0.00001 1.00000 0.00002 -0.00000 1.00000 0.00002 0.00000 1.00000 0.00002 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 0.00000 -0.98122 0.19290 0.00000 -0.92912 0.36977 0.00000 -0.84536 0.53420 0.00000 -0.73260 0.68066 0.00000 -0.59537 0.80345 0.00000 -0.43726 0.89934 0.00000 0.43725 -0.89934 0.00000 0.59558 -0.80330 0.00000 0.73261 -0.68065 0.00000 0.84534 -0.53422 0.00000 0.92913 -0.36975 0.00000 0.98122 -0.19290 0.00000 0.99995 -0.00950 0.00000 0.98460 0.17480 0.00000 0.93574 0.35270 0.00000 0.85518 0.51834 0.00000 0.74508 0.66697 0.00000 0.60999 0.79241 0.00000 0.45388 0.89106 0.00000 0.26500 -0.96425 0.00000 0.28271 0.95920 0.00000 0.08264 -0.99658 0.00000 0.10116 0.99487 0.00000 -0.10117 -0.99487 0.00000 -0.08263 0.99658 0.00000 -0.28271 -0.95921 0.00000 -0.26511 0.96422 0.00000 -0.45388 -0.89106 0.00000 -0.60999 -0.79241 0.00000 -0.74532 -0.66671 0.00000 -0.85497 -0.51867 0.00000 -0.93573 -0.35271 0.00000 -0.98468 -0.17435 0.00000 -0.99996 0.00901 0.00000 0.99995 -0.00950 0.00000 0.98460 0.17480 0.00000 0.93574 0.35270 0.00000 0.85518 0.51834 0.00000 0.74508 0.66697 0.00000 0.60999 0.79241 0.00000 0.45388 0.89106 0.00000 0.26500 -0.96425 0.00000 0.28271 0.95920 0.00000 0.08264 -0.99658 0.00000 0.10116 0.99487 0.00000 -0.10117 -0.99487 0.00000 -0.08263 0.99658 0.00000 -0.28271 -0.95921 0.00000 -0.26511 0.96422 0.00000 -0.45388 -0.89106 0.00000 -0.60999 -0.79241 0.00000 -0.74532 -0.66671 0.00000 -0.85497 -0.51867 0.00000 -0.93573 -0.35271 0.00000 -0.98468 -0.17435 0.00000 -0.99996 0.00901 0.00000 -0.98122 0.19290 0.00000 -0.92912 0.36977 0.00000 -0.84536 0.53420 0.00000 -0.73260 0.68066 0.00000 -0.59537 0.80345 0.00000 -0.43726 0.89934 0.00000 0.43725 -0.89934 0.00000 0.59558 -0.80330 0.00000 0.73261 -0.68065 0.00000 0.84534 -0.53422 0.00000 0.92913 -0.36975 0.00000 0.98122 -0.19290 0.00000 0.98122 -0.19290 0.00000 0.92913 -0.36975 0.00000 0.84534 -0.53422 0.00000 0.73261 -0.68065 0.00000 0.59558 -0.80330 0.00000 0.43725 -0.89934 0.00000 -0.43726 0.89934 0.00000 -0.59537 0.80345 0.00000 -0.73260 0.68066 0.00000 -0.84536 0.53420 0.00000 -0.92912 0.36977 0.00000 -0.98122 0.19290 0.00000 -0.99996 0.00901 0.00000 -0.98468 -0.17435 0.00000 -0.93573 -0.35271 0.00000 -0.85497 -0.51867 0.00000 -0.74532 -0.66671 0.00000 -0.60999 -0.79241 0.00000 -0.45388 -0.89106 0.00000 -0.26511 0.96422 0.00000 -0.28271 -0.95921 0.00000 -0.08263 0.99658 0.00000 -0.10117 -0.99487 0.00000 0.10116 0.99487 0.00000 0.08264 -0.99658 0.00000 0.28271 0.95920 0.00000 0.26500 -0.96425 0.00000 0.45388 0.89106 0.00000 0.60999 0.79241 0.00000 0.74508 0.66697 0.00000 0.85518 0.51834 0.00000 0.93574 0.35270 0.00000 0.98460 0.17480 0.00000 0.99995 -0.00950 0.00000 -0.99996 0.00901 0.00000 -0.98468 -0.17435 0.00000 -0.93573 -0.35271 0.00000 -0.85497 -0.51867 0.00000 -0.74532 -0.66671 0.00000 -0.60999 -0.79241 0.00000 -0.45388 -0.89106 0.00000 -0.26511 0.96422 0.00000 -0.28271 -0.95921 0.00000 -0.08263 0.99658 0.00000 -0.10117 -0.99487 0.00000 0.10116 0.99487 0.00000 0.08264 -0.99658 0.00000 0.28271 0.95920 0.00000 0.26500 -0.96425 0.00000 0.45388 0.89106 0.00000 0.60999 0.79241 0.00000 0.74508 0.66697 0.00000 0.85518 0.51834 0.00000 0.93574 0.35270 0.00000 0.98460 0.17480 0.00000 0.99995 -0.00950 0.00000 0.98122 -0.19290 0.00000 0.92913 -0.36975 0.00000 0.84534 -0.53422 0.00000 0.73261 -0.68065 0.00000 0.59558 -0.80330 0.00000 0.43725 -0.89934 0.00000 -0.43726 0.89934 0.00000 -0.59537 0.80345 0.00000 -0.73260 0.68066 0.00000 -0.84536 0.53420 0.00000 -0.92912 0.36977 0.00000 -0.98122 0.19290 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 1.00000 0.00002 -0.00000 1.00000 0.00002 0.00000 1.00000 0.00002 -0.00000 1.00000 0.00002 0.00001 1.00000 0.00002 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00002 1.00000 0.00001 -0.00002 1.00000 0.00000 0.00002 1.00000 0.00000 -0.00002 1.00000 0.00000 0.00002 1.00000 0.00000 -0.00002 1.00000 -0.00000 0.00002 1.00000 -0.00000 -0.00002 1.00000 -0.00000 0.00002 1.00000 -0.00000 -0.00002 1.00000 -0.00001 0.00002 1.00000 -0.00001 -0.00002 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00002 0.00001 1.00000 -0.00002 -0.00001 1.00000 -0.00002 0.00000 1.00000 -0.00002 -0.00000 1.00000 -0.00002 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 1.00000 0.00002 -0.00000 1.00000 0.00002 0.00000 1.00000 0.00002 -0.00000 1.00000 0.00002 0.00001 1.00000 0.00002 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00002 1.00000 0.00001 -0.00002 1.00000 0.00000 0.00002 1.00000 0.00000 -0.00002 1.00000 0.00000 0.00002 1.00000 0.00000 -0.00002 1.00000 -0.00000 0.00002 1.00000 -0.00000 -0.00002 1.00000 -0.00000 0.00002 1.00000 -0.00000 -0.00002 1.00000 -0.00001 0.00002 1.00000 -0.00001 -0.00002 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00002 0.00001 1.00000 -0.00002 -0.00001 1.00000 -0.00002 0.00000 1.00000 -0.00002 -0.00000 1.00000 -0.00002 0.00000 1.00000 -0.00002 0.00000 1.00000 -0.00002 -0.00000 1.00000 -0.00002 0.00000 1.00000 -0.00002 -0.00001 1.00000 -0.00002 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00002 1.00000 -0.00001 0.00002 1.00000 -0.00000 -0.00002 1.00000 -0.00000 0.00002 1.00000 -0.00000 -0.00002 1.00000 -0.00000 0.00002 1.00000 0.00000 -0.00002 1.00000 0.00000 0.00002 1.00000 0.00000 -0.00002 1.00000 0.00000 0.00002 1.00000 0.00001 -0.00002 1.00000 0.00001 0.00002 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00002 -0.00001 1.00000 0.00002 0.00001 1.00000 0.00002 -0.00000 1.00000 0.00002 0.00000 1.00000 0.00002 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 1.00000 -0.00002 0.00000 1.00000 -0.00002 -0.00000 1.00000 -0.00002 0.00000 1.00000 -0.00002 -0.00001 1.00000 -0.00002 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00002 1.00000 -0.00001 0.00002 1.00000 -0.00000 -0.00002 1.00000 -0.00000 0.00002 1.00000 -0.00000 -0.00002 1.00000 -0.00000 0.00002 1.00000 0.00000 -0.00002 1.00000 0.00000 0.00002 1.00000 0.00000 -0.00002 1.00000 0.00000 0.00002 1.00000 0.00001 -0.00002 1.00000 0.00001 0.00002 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00001 -0.00001 1.00000 0.00001 0.00001 1.00000 0.00002 -0.00001 1.00000 0.00002 0.00001 1.00000 0.00002 -0.00000 1.00000 0.00002 0.00000 1.00000 0.00002 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 0.00000 -0.98122 0.19290 0.00000 -0.92912 0.36977 0.00000 -0.84536 0.53420 0.00000 -0.73260 0.68066 0.00000 -0.59537 0.80345 0.00000 -0.43727 0.89933 0.00000 0.43725 -0.89934 0.00000 0.59558 -0.80330 0.00000 0.73261 -0.68065 0.00000 0.84534 -0.53422 0.00000 0.92913 -0.36975 0.00000 0.98122 -0.19290 0.00000 0.99995 -0.00950 0.00000 0.98460 0.17480 0.00000 0.93574 0.35270 0.00000 0.85518 0.51834 0.00000 0.74508 0.66697 0.00000 0.60999 0.79241 0.00000 0.45388 0.89106 0.00000 0.26501 -0.96425 0.00000 0.28271 0.95920 0.00000 0.08263 -0.99658 0.00000 0.10116 0.99487 0.00000 -0.10115 -0.99487 0.00000 -0.08263 0.99658 0.00000 -0.28272 -0.95920 0.00000 -0.26509 0.96422 0.00000 -0.45388 -0.89106 0.00000 -0.60999 -0.79241 0.00000 -0.74531 -0.66672 0.00000 -0.85497 -0.51867 0.00000 -0.93574 -0.35270 0.00000 -0.98468 -0.17435 0.00000 -0.99996 0.00901 0.00000 0.99995 -0.00950 0.00000 0.98460 0.17480 0.00000 0.93574 0.35270 0.00000 0.85518 0.51834 0.00000 0.74508 0.66697 0.00000 0.60999 0.79241 0.00000 0.45388 0.89106 0.00000 0.26501 -0.96425 0.00000 0.28271 0.95920 0.00000 0.08263 -0.99658 0.00000 0.10116 0.99487 0.00000 -0.10115 -0.99487 0.00000 -0.08263 0.99658 0.00000 -0.28272 -0.95920 0.00000 -0.26509 0.96422 0.00000 -0.45388 -0.89106 0.00000 -0.60999 -0.79241 0.00000 -0.74531 -0.66672 0.00000 -0.85497 -0.51867 0.00000 -0.93574 -0.35270 0.00000 -0.98468 -0.17435 0.00000 -0.99996 0.00901 0.00000 -0.98122 0.19290 0.00000 -0.92912 0.36977 0.00000 -0.84536 0.53420 0.00000 -0.73260 0.68066 0.00000 -0.59537 0.80345 0.00000 -0.43727 0.89933 0.00000 0.43725 -0.89934 0.00000 0.59558 -0.80330 0.00000 0.73261 -0.68065 0.00000 0.84534 -0.53422 0.00000 0.92913 -0.36975 0.00000 0.98122 -0.19290 0.00000 -1.00000 -0.00000 -0.00000 0.00000 -1.00000 0.00000 -0.50000 -0.86602 0.00000 -1.00000 -0.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -1.00000 -0.00000 -0.00000 -0.86603 0.50000 0.00000 0.49998 0.86604 0.00000 1.00000 0.00001 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 0.70711 0.70710 0.00000 1.00000 0.00000 -0.00000 -0.70711 0.70710 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 0.00000 0.70709 -0.70713 0.00000 0.70709 -0.70713 0.57733 0.57734 -0.57738 -0.57733 0.57734 -0.57738 0.70710 0.70711 0.00000 0.70710 0.70711 -0.00000 0.70708 0.00000 -0.70713 0.70708 0.00000 -0.70713 0.00000 -0.70709 -0.70713 0.00000 -0.70709 -0.70713 -0.70708 0.00000 -0.70713 -0.70708 -0.00000 -0.70713 -0.70710 0.70711 0.00000 -0.70710 0.70711 0.00000 0.00000 0.70709 0.70713 0.00000 0.70709 0.70713 0.57733 0.57734 0.57738 0.57733 -0.57734 -0.57738 -0.57733 -0.57734 -0.57738 -0.57733 0.57734 0.57738 0.70708 0.00000 0.70713 0.70708 0.00000 0.70713 0.70710 -0.70711 0.00000 0.70710 -0.70711 0.00000 -0.70710 -0.70711 0.00000 -0.70710 -0.70711 0.00000 -0.70708 0.00000 0.70713 -0.70708 0.00000 0.70713 0.57733 -0.57734 0.57738 -0.57733 -0.57734 0.57738 0.00000 -0.70709 0.70713 0.00000 -0.70709 0.70713 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 0.00000 0.70713 0.70709 -0.00000 0.70713 0.70709 -0.57736 0.57736 0.57733 0.57736 0.57736 0.57733 -0.70710 0.70711 0.00000 -0.70710 0.70711 0.00000 -0.70712 0.00000 0.70709 -0.70712 0.00000 0.70709 0.00000 -0.70713 0.70709 0.00000 -0.70713 0.70709 0.70712 0.00000 0.70709 0.70712 0.00000 0.70709 0.70710 0.70711 0.00000 0.70710 0.70711 0.00000 -0.57736 0.57736 -0.57733 -0.57736 -0.57736 0.57733 0.57736 -0.57736 0.57733 0.57736 0.57736 -0.57733 -0.70712 0.00000 -0.70709 -0.70712 -0.00000 -0.70709 -0.70710 -0.70711 0.00000 -0.70710 -0.70711 -0.00000 0.70710 -0.70711 0.00000 0.70710 -0.70711 0.00000 0.70712 0.00000 -0.70709 0.70712 0.00000 -0.70709 -0.57736 -0.57736 -0.57733 0.57736 -0.57736 -0.57733 0.00000 -0.70713 -0.70709 0.00000 -0.70713 -0.70709 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 0.00000 0.70709 0.70713 -0.00000 0.70709 0.70713 -0.57733 0.57734 0.57738 0.57733 0.57734 0.57738 -0.70710 0.70711 0.00000 -0.70710 0.70711 0.00000 -0.70708 0.00000 0.70713 -0.70708 0.00000 0.70713 0.00000 -0.70709 0.70713 0.00000 -0.70709 0.70713 0.70708 0.00000 0.70713 0.70708 0.00000 0.70713 0.70710 0.70711 0.00000 0.70710 0.70711 0.00000 0.00000 0.70713 -0.70709 0.00000 0.70713 -0.70709 -0.57736 0.57736 -0.57733 -0.57733 -0.57734 0.57738 0.57733 -0.57734 0.57738 0.57736 0.57736 -0.57733 -0.70712 0.00000 -0.70709 -0.70712 -0.00000 -0.70709 -0.70710 -0.70711 0.00000 -0.70710 -0.70711 -0.00000 0.70710 -0.70711 0.00000 0.70710 -0.70711 0.00000 0.70712 0.00000 -0.70709 0.70712 0.00000 -0.70709 -0.57736 -0.57736 -0.57733 0.57736 -0.57736 -0.57733 0.00000 -0.70713 -0.70709 0.00000 -0.70713 -0.70709 -0.00000 0.00000 -1.00000 0.00000 0.70713 -0.70709 0.00000 1.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 1.00000 0.00000 0.00000 0.70713 -0.70709 -0.00000 0.00000 -1.00000 0.00000 -0.70713 -0.70709 0.00000 -0.70713 -0.70709 0.57736 -0.57736 -0.57733 -0.57736 -0.57736 -0.57733 0.70712 0.00000 -0.70709 0.70712 0.00000 -0.70709 0.70710 -0.70711 0.00000 0.70710 -0.70711 0.00000 -0.70710 -0.70711 -0.00000 -0.70710 -0.70711 0.00000 -0.70712 -0.00000 -0.70709 -0.70712 0.00000 -0.70709 0.57736 0.57736 -0.57733 0.57736 -0.57736 0.57733 -0.57736 -0.57736 0.57733 -0.57736 0.57736 -0.57733 0.70710 0.70711 0.00000 0.70710 0.70711 0.00000 0.70712 0.00000 0.70709 0.70712 0.00000 0.70709 0.00000 -0.70713 0.70709 0.00000 -0.70713 0.70709 -0.70712 0.00000 0.70709 -0.70712 0.00000 0.70709 -0.70710 0.70711 0.00000 -0.70710 0.70711 0.00000 0.57736 0.57736 0.57733 -0.57736 0.57736 0.57733 -0.00000 0.70713 0.70709 0.00000 0.70713 0.70709 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 1.00000 0.00000 0.00000 0.00000 1.00000 -0.00125 -0.00485 -0.99999 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00125 -0.00485 -0.99999 0.00000 0.00000 1.00000 0.00000 -0.70713 0.70709 0.00000 -0.70713 0.70709 -0.57736 -0.57736 0.57733 0.57736 -0.57736 0.57733 -0.70712 0.00000 0.70709 -0.70712 0.00000 0.70709 -0.70710 -0.70711 0.00000 -0.70710 -0.70711 0.00000 0.70710 -0.70711 0.00000 0.70710 -0.70711 0.00000 0.70712 0.00000 0.70709 0.70712 0.00000 0.70709 -0.57736 0.57736 0.57733 -0.57733 -0.57734 -0.57738 0.57733 -0.57734 -0.57738 0.57736 0.57736 0.57733 0.00000 0.70713 0.70709 0.00000 0.70713 0.70709 -0.70710 0.70711 0.00000 -0.70710 0.70711 0.00000 -0.70708 -0.00000 -0.70713 -0.70708 0.00000 -0.70713 0.00000 -0.70709 -0.70713 0.00000 -0.70709 -0.70713 0.70708 0.00000 -0.70713 0.70708 0.00000 -0.70713 0.70710 0.70711 -0.00000 0.70710 0.70711 0.00000 -0.57733 0.57734 -0.57738 0.57733 0.57734 -0.57738 0.00000 0.70709 -0.70713 0.00000 0.70709 -0.70713 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 -0.97402 0.00000 -0.22646 -0.97402 -0.00001 -0.22644 -0.97402 -0.00000 -0.22644 0.33134 0.20675 0.92058 -0.17190 0.35217 0.92002 -0.17096 0.35264 0.92001 -0.16960 0.35331 0.92000 -0.16908 0.35357 0.92000 -0.16869 0.35377 0.91999 -0.16738 0.35444 0.91998 -0.16471 0.35582 0.91992 -0.16561 0.35535 0.91994 -0.16322 0.35662 0.91988 -0.15962 0.35853 0.91977 -0.17431 0.35064 0.92014 -0.16127 0.35600 0.92047 -0.14846 0.36133 0.92054 -0.10849 0.37228 0.92176 -0.16077 0.36448 0.91723 -0.16012 0.36458 0.91730 -0.15837 0.36487 0.91749 0.01226 0.48621 0.87376 0.00060 0.39939 0.91678 0.00013 0.39670 0.91795 0.00020 0.39735 0.91767 -0.00000 0.39051 0.92060 0.00000 0.39051 0.92060 -0.00000 0.39054 0.92059 0.00000 0.39054 0.92059 -0.00000 0.39285 0.91960 -0.00002 0.39201 0.91996 -0.00005 0.39232 0.91983 -0.00005 0.39317 0.91947 -0.00002 0.39130 0.92026 0.00005 0.39489 0.91873 0.00976 0.44272 0.89661 0.00373 0.41727 0.90877 0.00135 0.40638 0.91370 -0.00115 0.39427 0.91899 0.00203 0.40651 0.91364 0.00139 0.40341 0.91502 0.00923 0.44057 0.89767 -0.00185 0.39805 0.91736 -0.00202 0.39730 0.91769 0.07726 0.92895 0.36207 0.02524 0.56079 0.82758 -0.00192 0.40124 0.91597 -0.00166 0.40305 0.91518 -0.13723 0.36851 0.91944 -0.13726 0.36849 0.91944 -0.10814 0.37927 0.91894 -0.09614 0.37932 0.92026 -0.10888 0.37667 0.91992 -0.09579 0.37932 0.92029 -0.03874 0.39027 0.91988 -0.04944 0.39184 0.91870 -0.04914 0.39186 0.91871 -0.00235 0.40818 0.91290 -0.00243 0.40723 0.91332 -0.00320 0.39505 0.91865 0.01259 0.39876 0.91697 0.01814 0.40008 0.91630 0.01543 0.39944 0.91663 -0.03885 0.38526 0.92199 0.02348 0.39219 0.91958 0.02165 0.39201 0.91971 0.02345 0.39220 0.91958 0.02868 0.39278 0.91919 0.04784 0.39136 0.91899 0.04795 0.39135 0.91899 0.02873 0.38875 0.92090 0.09430 0.38213 0.91928 0.09202 0.38235 0.91942 0.09199 0.38236 0.91943 0.09411 0.38120 0.91969 0.13184 0.36749 0.92064 0.13705 0.36552 0.92066 0.13691 0.36556 0.92066 0.15828 0.36196 0.91866 0.16029 0.36164 0.91844 0.13214 0.36597 0.92120 0.16204 0.35651 0.92013 0.15838 0.35846 0.92001 0.16152 0.35759 0.91980 0.15923 0.35825 0.91995 0.16282 0.35610 0.92015 0.16436 0.35529 0.92019 0.16452 0.35520 0.92020 0.16655 0.35415 0.92024 0.16772 0.35355 0.92026 0.16706 0.35389 0.92025 0.16941 0.35271 0.92027 0.16878 0.35302 0.92027 0.16995 0.35244 0.92027 0.17209 0.35139 0.92028 0.17837 0.34829 0.92026 0.15843 0.35798 0.92019 0.18676 0.34385 0.92026 0.17983 0.34338 0.92182 0.17914 0.34597 0.92099 0.17856 0.34776 0.92042 0.17862 0.34758 0.92048 0.17728 0.35080 0.91952 0.17801 0.34911 0.92002 0.18787 0.34312 0.92031 0.18834 0.34282 0.92033 0.18901 0.34238 0.92035 0.18588 0.34439 0.92024 0.19061 0.34136 0.92040 0.19955 0.33565 0.92061 0.19056 0.34171 0.92028 0.21119 0.32784 0.92082 0.20015 0.33704 0.91997 0.22686 0.31815 0.92050 0.17538 0.35500 0.91827 0.17797 0.34958 0.91985 0.18669 0.34306 0.92058 0.18382 0.33916 0.92260 0.18400 0.34058 0.92203 0.22688 0.31814 0.92050 0.24459 0.31121 0.91833 0.24570 0.31079 0.91817 0.24770 0.31003 0.91789 0.24883 0.30960 0.91773 0.21157 0.32287 0.92249 0.24840 0.30685 0.91877 0.24583 0.30798 0.91908 0.24878 0.30448 0.91946 0.25044 0.30257 0.91964 0.25014 0.30290 0.91961 0.25188 0.30104 0.91975 0.25228 0.30062 0.91977 0.25282 0.30006 0.91981 0.25302 0.29988 0.91981 0.25445 0.29851 0.91986 0.25501 0.29797 0.91988 0.25397 0.29891 0.91987 0.25626 0.29686 0.91989 0.30998 0.23421 0.92145 0.31416 0.25741 0.91381 0.25725 0.29599 0.91990 0.26944 0.28549 0.91973 0.26969 0.28528 0.91972 0.27003 0.28563 0.91951 0.29102 0.25721 0.92149 0.28981 0.26318 0.92019 0.29610 0.25619 0.92016 0.29469 0.23635 0.92590 0.35427 0.15296 0.92255 0.33907 0.22716 0.91292 0.33436 0.19811 0.92139 0.34818 0.17877 0.92022 0.35742 0.16568 0.91913 0.30198 0.03255 0.95276 0.39774 0.07143 0.91471 0.38862 0.11106 0.91468 0.34082 0.07774 0.93691 0.37923 0.11940 0.91757 0.44347 0.06661 0.89381 0.44794 0.02583 0.89369 0.24953 0.33083 0.91010 0.21865 0.30813 0.92588 0.22084 0.32285 0.92033 0.20292 0.33456 0.92027 0.19182 0.32482 0.92612 0.19645 0.34702 0.91705 0.18035 0.33887 0.92339 0.17961 0.34424 0.92154 -0.17493 0.34116 0.92359 -0.17995 0.34819 0.91999 -0.17569 0.35028 0.92002 -0.19263 0.33857 0.92101 -0.19511 0.33852 0.92051 -0.20892 0.33046 0.92041 -0.19056 0.34139 0.92040 -0.18697 0.34369 0.92028 -0.18961 0.34200 0.92037 -0.18843 0.34276 0.92033 -0.18781 0.34316 0.92031 -0.17812 0.34947 0.91986 -0.17151 0.36290 0.91591 -0.18900 0.32624 0.92620 -0.17653 0.35254 0.91899 -0.17701 0.35143 0.91933 -0.17834 0.34830 0.92026 -0.17863 0.34757 0.92048 -0.17909 0.34628 0.92088 -0.17917 0.34600 0.92097 -0.17912 0.34622 0.92090 -0.17965 0.34402 0.92162 -0.17907 0.34819 0.92016 -0.19456 0.33793 0.92084 -0.19399 0.33517 0.92197 -0.22645 0.32021 0.91988 -0.20452 0.33441 0.91997 -0.23293 0.31971 0.91844 -0.22972 0.30456 0.92438 -0.26095 0.29283 0.91987 -0.25640 0.29672 0.91990 -0.26231 0.29141 0.91993 -0.25558 0.29747 0.91989 -0.25392 0.29900 0.91985 -0.25437 0.29856 0.91987 -0.25312 0.29978 0.91982 -0.25149 0.30144 0.91972 -0.25182 0.30110 0.91974 -0.25021 0.30284 0.91961 -0.26483 0.28637 0.92079 -0.24945 0.30081 0.92048 -0.24765 0.30251 0.92041 -0.23916 0.31093 0.91985 -0.25886 0.30217 0.91743 -0.22031 0.31914 0.92175 -0.20948 0.32360 0.92271 -0.24930 0.30944 0.91766 -0.24691 0.31032 0.91801 -0.24621 0.31059 0.91811 -0.24529 0.31094 0.91823 -0.24332 0.31171 0.91849 -0.23817 0.31373 0.91915 -0.21658 0.32444 0.92078 -0.21653 0.32447 0.92078 -0.26050 0.29320 0.91988 -0.27244 0.28472 0.91908 -0.27002 0.27824 0.92178 -0.43699 0.02520 0.89911 -0.35259 0.05296 0.93428 -0.36558 0.10447 0.92490 -0.39775 0.07143 0.91471 -0.29976 0.25545 0.91918 -0.29976 0.25545 0.91918 -0.30029 0.27148 0.91440 -0.29958 0.23166 0.92552 -0.30950 0.24114 0.91982 -0.30949 0.24115 0.91982 -0.33411 0.20623 0.91970 -0.33228 0.20099 0.92152 -0.34820 0.17874 0.92022 -0.35742 0.16568 0.91913 -0.35427 0.15296 0.92255 -0.37923 0.11940 0.91757 0.97315 0.04249 -0.22622 0.97315 0.04246 -0.22623 0.97315 0.04248 -0.22623 0.97315 0.04248 -0.22623 0.97314 0.04250 -0.22626 0.97315 0.04248 -0.22624 0.97315 0.04249 -0.22624 0.97314 0.04249 -0.22625 0.97314 0.04250 -0.22624 0.97315 0.04249 -0.22624 0.97315 0.04246 -0.22622 0.97315 0.04249 -0.22624 0.97315 0.04249 -0.22624 0.97315 0.04249 -0.22624 0.97315 0.04248 -0.22623 0.97314 0.04249 -0.22624 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.97315 0.04246 -0.22623 -0.97315 0.04249 -0.22624 -0.97314 0.04265 -0.22625 -0.97315 0.04249 -0.22623 -0.97314 0.04250 -0.22627 -0.97315 0.04249 -0.22623 -0.97315 0.04248 -0.22623 -0.97315 0.04249 -0.22623 -0.97315 0.04249 -0.22624 -0.97315 0.04249 -0.22624 -0.20280 0.17667 -0.96315 -0.97315 0.04250 -0.22622 -0.97315 0.04248 -0.22623 -0.97315 0.04249 -0.22623 -0.97314 0.04250 -0.22626 -0.97318 0.04243 -0.22610 -0.97315 0.04248 -0.22623 -0.97315 0.04248 -0.22623 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.98858 0.13838 -0.05962 -0.94437 0.32344 -0.05962 -0.98858 0.13839 -0.05962 -0.98858 0.13839 -0.05962 -0.75585 0.65202 -0.05962 -0.86585 0.49674 -0.05962 -0.86585 0.49674 -0.05962 -0.94437 0.32344 -0.05962 -0.61842 0.78358 -0.05962 -0.75586 0.65201 -0.05962 -0.45851 0.88669 -0.05963 -0.45852 0.88668 -0.05962 -0.61841 0.78359 -0.05962 -0.28193 0.95758 -0.05963 -0.09513 0.99368 -0.05962 -0.28195 0.95757 -0.05962 0.09513 0.99368 -0.05962 -0.09513 0.99368 -0.05962 0.45852 0.88668 -0.05962 0.28180 0.95711 -0.06725 0.29700 0.95302 -0.05952 0.09513 0.99368 -0.05962 0.61841 0.78359 -0.05962 0.61842 0.78358 -0.05962 0.45853 0.88668 -0.05962 0.75585 0.65202 -0.05962 0.86585 0.49674 -0.05962 0.75586 0.65201 -0.05962 0.94437 0.32345 -0.05962 0.94437 0.32344 -0.05962 0.86585 0.49674 -0.05962 -0.97437 0.04126 -0.22112 -0.97314 0.04249 -0.22624 -0.97315 0.04249 -0.22623 0.60872 0.00000 -0.79339 0.60872 0.00000 -0.79339 0.38265 0.00000 -0.92389 0.38265 0.00000 -0.92389 0.13065 0.00000 -0.99143 0.13065 0.00000 -0.99143 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.09801 -0.00000 -0.99519 -0.09801 0.00000 -0.99519 -0.29024 -0.00000 -0.95695 -0.29024 0.00000 -0.95695 -0.47133 -0.00000 -0.88196 -0.47133 0.00000 -0.88196 -0.63433 -0.00000 -0.77306 -0.63433 0.00000 -0.77306 0.97402 0.00000 -0.22644 0.97402 -0.00001 -0.22644 0.97402 0.00000 -0.22646 0.22603 -0.00987 -0.97407 -0.22603 -0.00987 -0.97407 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 0.00001 0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00001 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00002 1.00000 0.00000 0.00001 1.00000 0.00002 0.00016 1.00000 0.00000 -0.00002 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00002 0.00000 1.00000 -0.00000 0.00001 1.00000 0.00000 -0.00002 1.00000 0.00002 0.00000 1.00000 -0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00002 1.00000 -0.00001 0.00002 1.00000 -0.00002 0.00002 1.00000 0.00000 -0.00002 1.00000 0.00002 0.00000 1.00000 -0.00002 0.00002 1.00000 0.00001 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00001 -0.00001 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00002 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00002 1.00000 -0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00000 -0.00002 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00002 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00002 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00002 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00001 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00002 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.96561 0.12965 -0.22536 -0.92399 0.29917 -0.23819 -0.96489 0.13509 -0.22525 -0.96401 0.12943 -0.23223 -0.96324 0.13490 -0.23234 -0.92345 0.31627 -0.21729 -0.75808 0.60337 -0.24749 -0.73433 0.63346 -0.24391 -0.76507 0.60924 -0.20853 -0.84126 0.48256 -0.24374 -0.85454 0.45887 -0.24329 -0.84835 0.48671 -0.20837 -0.91874 0.31471 -0.23848 -0.45220 0.87441 -0.17586 -0.59959 0.75974 -0.25156 -0.63732 0.72863 -0.25084 -0.60851 0.77104 -0.18766 -0.73354 0.63274 -0.24810 -0.34003 0.90518 -0.25501 -0.27536 0.93520 -0.22266 -0.34458 0.91733 -0.19939 -0.44487 0.86041 -0.24858 -0.34007 0.90567 -0.25321 -0.49655 0.83021 -0.25335 0.17516 0.96441 -0.19808 0.09210 0.96207 -0.25678 0.00000 0.96673 -0.25580 0.09225 0.96370 -0.25053 0.00000 0.98027 -0.19765 -0.09210 0.96207 -0.25678 -0.17276 0.95116 -0.25582 -0.09423 0.98430 -0.14928 -0.27306 0.92734 -0.25591 0.34458 0.91733 -0.19940 0.27304 0.92734 -0.25591 0.27306 0.92734 -0.25591 0.76509 0.60922 -0.20854 0.73438 0.63350 -0.24363 0.75794 0.60355 -0.24750 0.73354 0.63274 -0.24810 0.64444 0.73677 -0.20462 0.59959 0.75974 -0.25156 0.49693 0.83080 -0.25066 0.60831 0.77079 -0.18931 0.50274 0.84060 -0.20159 0.44427 0.85908 -0.25417 0.44420 0.85912 -0.25417 0.86074 0.46220 -0.21332 0.84123 0.48262 -0.24375 0.84126 0.48256 -0.24374 0.96324 0.13486 -0.23233 0.96324 0.13490 -0.23234 0.92829 0.30056 -0.21894 0.91876 0.31466 -0.23848 0.91874 0.31471 -0.23848 0.66996 0.09378 -0.73645 -0.66998 0.09378 -0.73643 -0.66998 0.09378 -0.73643 -0.66995 0.09379 -0.73646 -0.66998 0.09383 -0.73643 -0.64002 0.21920 -0.73643 -0.64002 0.21920 -0.73643 -0.64001 0.21923 -0.73643 -0.58681 0.33666 -0.73642 -0.58681 0.33666 -0.73642 -0.58683 0.33661 -0.73643 -0.51226 0.44189 -0.73643 -0.51226 0.44189 -0.73643 -0.51227 0.44187 -0.73643 -0.41911 0.53105 -0.73643 -0.41911 0.53105 -0.73643 -0.41911 0.53105 -0.73643 -0.31076 0.60092 -0.73643 -0.31074 0.60091 -0.73644 -0.31072 0.60094 -0.73642 -0.19108 0.64897 -0.73643 -0.19107 0.64897 -0.73643 -0.19109 0.64896 -0.73644 -0.06447 0.67343 -0.73644 -0.06447 0.67343 -0.73644 -0.06447 0.67343 -0.73643 0.06447 0.67343 -0.73643 0.06447 0.67343 -0.73644 0.06447 0.67343 -0.73644 0.19109 0.64896 -0.73644 0.19107 0.64897 -0.73643 0.19108 0.64897 -0.73643 0.31072 0.60094 -0.73642 0.31074 0.60091 -0.73644 0.31076 0.60092 -0.73643 0.41911 0.53105 -0.73643 0.41911 0.53105 -0.73643 0.41911 0.53105 -0.73643 0.51227 0.44187 -0.73643 0.51226 0.44189 -0.73643 0.51226 0.44189 -0.73643 0.58683 0.33661 -0.73643 0.58681 0.33666 -0.73642 0.58681 0.33666 -0.73642 0.64001 0.21923 -0.73643 0.64002 0.21920 -0.73643 0.66998 0.09380 -0.73643 0.66998 0.09383 -0.73643 0.64002 0.21920 -0.73643 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00001 -0.00000 1.00000 0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00001 1.00000 -0.00001 0.00001 -1.00000 -0.00002 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00001 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00001 -0.00000 1.00000 -0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00001 -0.00000 1.00000 -0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.61323 -0.00000 -0.78990 -0.61323 0.00000 -0.78990 -0.39815 -0.00000 -0.91732 -0.39815 0.00000 -0.91732 -0.15844 -0.00000 -0.98737 -0.15844 0.00000 -0.98737 0.09142 0.00000 -0.99581 0.09142 0.00000 -0.99581 0.33550 0.00000 -0.94204 0.33550 0.00000 -0.94204 0.55867 0.00000 -0.82939 0.55867 0.00000 -0.82939 0.74684 0.00000 -0.66501 0.74684 0.00000 -0.66501 0.88834 0.00000 -0.45918 0.88834 0.00000 -0.45918 0.97448 0.00000 -0.22446 0.97448 0.00000 -0.22446 0.99489 0.00000 -0.10095 0.99489 0.00000 -0.10095 0.79760 0.00001 0.60319 0.79759 -0.00000 0.60320 0.79759 0.00000 0.60320 -0.64259 0.00000 0.76621 -0.81183 0.00000 0.58390 -0.81183 0.00000 0.58390 -0.93084 0.00000 0.36542 -0.93084 0.00000 0.36542 -0.99223 0.00000 0.12440 -0.99223 0.00000 0.12440 -0.49324 0.01678 0.86973 -0.43348 -0.00771 0.90113 -0.49331 0.00000 0.86986 -0.64259 0.00000 0.76621 -0.43350 0.00000 0.90116 -0.64259 0.00000 0.76621 -0.64259 0.00000 0.76621 -0.81183 0.00000 0.58390 -0.81183 0.00000 0.58390 -0.93084 0.00000 0.36542 -0.93084 0.00000 0.36542 -0.99223 0.00000 0.12440 -0.99223 0.00000 0.12440 0.71639 0.00000 0.69770 0.71639 -0.00000 0.69770 0.52195 0.00000 0.85297 0.52195 -0.00000 0.85297 0.29528 0.00000 0.95541 0.29528 -0.00000 0.95541 0.05045 0.00000 0.99873 0.05045 -0.00000 0.99873 -0.19777 0.00000 0.98025 -0.19777 0.00000 0.98025 -0.38128 0.00000 0.92446 -0.38128 0.00000 0.92446 -0.44283 0.00000 0.89660 -0.44284 0.00002 0.89660 -0.04206 -0.02555 0.99879 -0.08944 0.01245 0.99591 -0.11753 0.01244 0.99299 -0.08946 0.01095 0.99593 -0.11678 -0.03980 0.99236 -0.13136 -0.01742 0.99118 -0.11689 0.00001 0.99314 0.14689 0.00001 0.98915 0.14199 -0.00288 0.98986 0.12414 0.00869 0.99223 0.14175 0.00952 0.98986 0.12411 0.00953 0.99222 0.09949 -0.03626 0.99438 0.08463 -0.01489 0.99630 0.09959 0.00065 0.99503 0.08431 0.00065 0.99644 0.03119 -0.00099 0.99951 0.04268 -0.02526 0.99877 0.03118 -0.02939 0.99908 -0.00082 0.01370 0.99991 -0.04209 0.01369 0.99902 -0.00079 -0.04465 0.99900 -0.04518 -0.03275 0.99844 0.44283 0.00002 0.89660 0.44284 0.00000 0.89660 0.38128 0.00000 0.92446 0.49324 -0.01678 0.86973 0.43348 0.00771 0.90113 0.43350 0.00000 0.90116 0.64259 -0.00000 0.76621 0.64259 0.00000 0.76621 0.81183 -0.00000 0.58390 0.81183 0.00000 0.58390 0.93084 -0.00000 0.36542 0.93084 0.00000 0.36542 0.99223 -0.00000 0.12440 0.99223 0.00000 0.12440 0.49331 0.00000 0.86986 0.64259 -0.00000 0.76621 0.64259 0.00000 0.76621 0.81183 -0.00000 0.58390 0.81183 0.00000 0.58390 0.93084 -0.00000 0.36542 0.93084 0.00000 0.36542 0.99223 -0.00000 0.12440 0.99223 0.00000 0.12440 0.38128 -0.00000 0.92446 0.19777 0.00000 0.98025 0.19777 -0.00000 0.98025 -0.05045 0.00000 0.99873 -0.05045 0.00000 0.99873 -0.29528 0.00000 0.95541 -0.29528 0.00000 0.95541 -0.52195 0.00000 0.85297 -0.52195 0.00000 0.85297 -0.71639 0.00000 0.69770 -0.71639 0.00000 0.69770 -0.79759 0.00000 0.60320 -0.79759 0.00000 0.60320 -0.79760 0.00001 0.60319 -0.99489 0.00000 -0.10094 -0.99489 -0.00000 -0.10094 -0.97448 -0.00000 -0.22446 -0.97448 0.00000 -0.22446 -0.88834 -0.00000 -0.45918 -0.88834 0.00000 -0.45918 -0.74684 -0.00000 -0.66500 -0.74684 0.00000 -0.66500 -0.55866 -0.00000 -0.82939 -0.55866 0.00000 -0.82939 -0.33549 -0.00000 -0.94204 -0.33549 0.00000 -0.94204 -0.09142 -0.00000 -0.99581 -0.09142 0.00000 -0.99581 0.15844 0.00000 -0.98737 0.15844 0.00000 -0.98737 0.39815 0.00000 -0.91732 0.39815 0.00000 -0.91732 0.61323 0.00000 -0.78990 0.61323 0.00000 -0.78990 0.70711 0.00000 -0.70711 0.70711 0.00000 -0.70711 0.70711 0.00000 -0.70711 0.70711 0.00000 -0.70711 -0.70711 0.00000 -0.70711 -0.70711 0.00000 -0.70711 -0.70711 0.00000 -0.70711 -0.70711 0.00000 -0.70711 -0.60873 0.00000 0.79338 -0.60873 0.00000 0.79338 -0.38277 0.00000 0.92384 -0.38277 0.00000 0.92384 -0.13043 0.00000 0.99146 -0.13043 0.00000 0.99146 0.13043 -0.00000 0.99146 0.13043 0.00000 0.99146 0.38277 -0.00000 0.92384 0.38277 0.00000 0.92384 0.60873 -0.00000 0.79338 0.60873 0.00000 0.79338 -0.70711 0.00000 0.70711 -0.70711 0.00000 0.70711 0.94057 -0.00000 0.33960 0.94057 0.00000 0.33960 0.83471 -0.00000 0.55069 0.83471 0.00000 0.55069 0.68263 -0.00000 0.73076 0.68263 0.00000 0.73076 0.49242 -0.00000 0.87036 0.49242 0.00000 0.87036 0.27497 -0.00000 0.96145 0.27497 0.00000 0.96145 0.04219 -0.00000 0.99911 0.04219 0.00000 0.99911 -0.19314 0.00000 0.98117 -0.19314 0.00000 0.98117 -0.41756 0.00000 0.90865 -0.41756 0.00000 0.90865 -0.61885 0.00000 0.78551 -0.61885 0.00000 0.78551 0.97402 0.00000 0.22644 0.97402 -0.00000 0.22644 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -0.97402 0.00000 0.22644 -0.97402 0.00000 0.22644 0.61886 -0.00000 0.78550 0.61886 0.00000 0.78550 0.41756 -0.00000 0.90865 0.41756 0.00000 0.90865 0.19314 -0.00000 0.98117 0.19314 0.00000 0.98117 -0.04219 0.00000 0.99911 -0.04219 0.00000 0.99911 -0.27497 0.00000 0.96145 -0.27497 0.00000 0.96145 -0.49242 0.00000 0.87036 -0.49242 0.00000 0.87036 -0.68263 0.00000 0.73076 -0.68263 0.00000 0.73076 -0.83471 0.00000 0.55068 -0.83471 0.00000 0.55068 -0.94057 0.00000 0.33960 -0.94057 0.00000 0.33960 0.70711 0.00000 0.70711 0.70711 -0.00000 0.70711 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.60873 0.00000 -0.79338 -0.60873 -0.00000 -0.79338 -0.38266 0.00000 -0.92389 -0.38266 -0.00000 -0.92389 -0.13044 0.00000 -0.99146 -0.13044 -0.00000 -0.99146 0.13044 0.00000 -0.99146 0.13044 0.00000 -0.99146 0.38266 0.00000 -0.92389 0.38266 0.00000 -0.92389 0.60873 0.00000 -0.79338 0.60873 0.00000 -0.79338 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.66902 0.13463 -0.73095 0.66910 0.13461 -0.73088 0.66575 0.13522 -0.73382 0.00000 1.00000 0.00000 -0.99726 0.04354 -0.05978 -0.99726 0.04351 -0.05977 -0.99726 0.04352 -0.05979 -0.99725 0.04358 -0.05989 -0.99726 0.04352 -0.05988 -0.99725 0.04356 -0.05992 -0.99726 0.04355 -0.05987 -0.99726 0.04354 -0.05989 -0.99726 0.04353 -0.05985 -0.99726 0.04353 -0.05987 -0.99726 0.04353 -0.05987 -0.99726 0.04354 -0.05987 -0.99794 0.04330 -0.04732 -0.99726 0.04354 -0.05989 -0.99726 0.04354 -0.05988 -0.99726 0.04353 -0.05987 -0.99726 0.04354 -0.05987 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 0.70710 0.70711 -0.00010 0.11210 0.99370 0.00000 0.11751 0.99307 -0.00028 0.11842 0.99296 -0.00028 0.33039 0.94385 0.00029 0.28290 0.95915 0.00279 0.70714 0.70708 -0.00010 0.58724 0.80941 0.00004 0.53193 0.84679 0.00146 0.44661 0.89473 -0.00180 0.44742 0.89432 -0.00180 0.90937 0.41598 -0.00207 0.82348 0.56734 0.00274 0.84659 0.53224 0.00066 0.71481 0.69931 -0.00078 0.71576 0.69835 -0.00078 0.99370 0.11210 0.00000 0.99519 0.09798 0.00086 0.96915 0.24648 -0.00027 0.94398 0.33001 -0.00027 0.96872 0.24811 0.00476 0.90940 0.41593 -0.00207 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.99955 -0.03014 0.00000 -0.99964 -0.02691 0.00013 -0.99231 0.12380 -0.00003 -0.99041 0.13815 -0.00003 -0.97619 0.21693 0.00115 -0.95563 0.29455 -0.00091 -0.95547 0.29507 -0.00091 -0.89394 0.44819 0.00103 -0.89042 0.45513 0.00081 -0.75813 0.65210 0.00109 -0.80143 0.59809 -0.00075 -0.80004 0.59995 -0.00075 -0.55988 0.82857 -0.00007 -0.56259 0.82674 -0.00007 -0.57644 0.81714 0.00052 -0.69176 0.72212 -0.00019 -0.69093 0.72292 -0.00019 -0.12273 0.99244 0.00000 -0.04312 0.99906 0.00322 -0.12606 0.99202 0.00104 -0.27693 0.96089 -0.00095 -0.36053 0.93275 -0.00095 -0.27682 0.96092 0.00258 -0.42628 0.90459 0.00004 -0.98878 -0.14941 -0.00004 -0.98879 -0.14934 0.00001 -0.98880 -0.14925 -0.00004 -0.98863 -0.15035 0.00044 -0.98878 -0.14940 0.00000 -0.98878 -0.14936 -0.00000 -0.98879 -0.14933 -0.00018 -0.98884 -0.14900 -0.00163 -0.98878 -0.14936 -0.00001 -0.98878 -0.14937 -0.00001 -0.98879 -0.14934 -0.00001 -0.98878 -0.14936 -0.00000 -0.98873 -0.14972 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 0.11083 0.99384 -0.00000 0.13063 0.99143 0.00124 0.38266 0.92389 0.00151 0.26473 0.96432 -0.00029 0.26347 0.96467 -0.00029 0.54936 0.83559 0.00015 0.41379 0.91037 -0.00028 0.41061 0.91181 -0.00028 0.67454 0.73823 0.00482 0.60873 0.79338 -0.00149 0.67482 0.73799 -0.00150 0.79338 0.60873 0.00187 0.78086 0.62470 0.00298 0.98023 0.19785 -0.00161 0.93588 0.35231 0.00118 0.92389 0.38265 0.00247 0.86991 0.49321 -0.00195 0.87011 0.49285 -0.00195 0.98029 0.19755 -0.00161 0.99143 0.13064 0.00212 0.99928 0.03785 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.99370 0.11210 0.00000 -0.99190 0.12702 -0.00180 -0.99193 0.12680 -0.00180 -0.94398 0.32999 0.00152 -0.95214 0.30565 0.00402 -0.84659 0.53225 0.00241 -0.88486 0.46584 -0.00341 -0.88456 0.46642 -0.00341 -0.70710 0.70711 0.00222 -0.78306 0.62195 -0.00086 -0.78335 0.62158 -0.00086 -0.35298 0.93563 -0.00113 -0.51387 0.85787 0.00094 -0.53193 0.84678 0.00242 -0.66184 0.74964 -0.00260 -0.66125 0.75016 -0.00260 -0.35546 0.93469 -0.00113 -0.33039 0.94384 0.00116 -0.18883 0.98201 -0.00053 -0.18960 0.98186 -0.00053 -0.11210 0.99369 0.00264 -0.06569 0.99784 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 0.11063 0.99386 -0.00000 0.11210 0.99370 0.00014 0.27898 0.96030 -0.00004 0.26794 0.96344 -0.00004 0.33039 0.94384 0.00268 0.42083 0.90713 -0.00283 0.42154 0.90680 -0.00283 0.53193 0.84678 0.00278 0.55664 0.83075 0.00116 0.70710 0.70711 0.00112 0.68461 0.72890 -0.00179 0.68461 0.72891 -0.00179 0.84659 0.53225 0.00211 0.79085 0.61200 -0.00030 0.79054 0.61241 -0.00030 0.98723 0.15927 -0.00304 0.94616 0.32369 0.00232 0.94398 0.32999 0.00280 0.88061 0.47382 -0.00333 0.88047 0.47410 -0.00333 0.98745 0.15788 -0.00304 0.99370 0.11210 0.00165 0.99988 0.01545 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.99258 0.12155 0.00000 -0.99143 0.13063 0.00065 -0.92389 0.38266 0.00211 -0.95757 0.28819 -0.00021 -0.95801 0.28674 -0.00021 -0.69343 0.72052 -0.00168 -0.80589 0.59206 0.00275 -0.79338 0.60873 0.00149 -0.89702 0.44199 -0.00128 -0.89741 0.44119 -0.00128 -0.69297 0.72096 -0.00168 -0.60873 0.79337 0.00240 -0.56146 0.82751 0.00026 -0.38265 0.92389 0.00165 -0.41582 0.90944 -0.00043 -0.42030 0.90739 -0.00043 -0.13029 0.99148 0.00000 -0.10978 0.99396 0.00047 -0.13079 0.99141 0.00130 -0.26617 0.96393 -0.00032 -0.26636 0.96387 -0.00032 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 0.98878 -0.14936 -0.00006 0.98870 -0.14994 0.00000 0.98879 -0.14934 -0.00001 0.98878 -0.14935 -0.00001 0.98878 -0.14938 0.00009 0.98878 -0.14936 -0.00001 0.98879 -0.14933 -0.00003 0.98878 -0.14935 -0.00001 0.98878 -0.14937 0.00001 0.98878 -0.14941 -0.00000 0.98878 -0.14938 0.00001 0.98880 -0.14925 -0.00006 0.98878 -0.14940 -0.00000 0.11352 0.99354 -0.00000 0.12273 0.99244 0.00034 0.36053 0.93275 0.00103 0.27113 0.96254 -0.00010 0.27100 0.96258 -0.00010 0.68551 0.72806 -0.00095 0.55957 0.82878 0.00144 0.57644 0.81714 0.00079 0.41560 0.90955 -0.00067 0.41663 0.90908 -0.00067 0.68613 0.72748 -0.00095 0.75813 0.65210 0.00122 0.79132 0.61140 0.00022 0.89394 0.44819 0.00071 0.87888 0.47704 -0.00037 0.87963 0.47566 -0.00037 0.97619 0.21693 0.00068 0.94147 0.33711 -0.00014 0.94212 0.33528 -0.00014 0.99964 -0.02691 0.00000 0.99679 -0.08003 0.00218 0.99962 0.02743 0.00028 0.98320 0.18251 -0.00050 0.98321 0.18248 -0.00050 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.99370 0.11210 0.00000 -0.99197 0.12650 -0.00087 -0.99211 0.12536 -0.00087 -0.94398 0.33000 0.00076 -0.95257 0.30432 0.00214 -0.84659 0.53224 0.00115 -0.88224 0.47079 -0.00189 -0.88237 0.47054 -0.00189 -0.70710 0.70711 0.00107 -0.78378 0.62103 -0.00032 -0.78400 0.62076 -0.00032 -0.35389 0.93529 -0.00072 -0.51225 0.85883 0.00053 -0.53193 0.84679 0.00136 -0.66269 0.74889 -0.00161 -0.66232 0.74922 -0.00161 -0.35150 0.93619 -0.00072 -0.33039 0.94385 0.00038 -0.17386 0.98477 -0.00021 -0.17484 0.98460 -0.00021 -0.11210 0.99370 0.00148 -0.05522 0.99847 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00003 -0.00001 -1.00000 0.00009 -0.00071 1.00000 -0.96364 -0.00000 -0.26721 -0.86549 -0.00041 0.50092 0.96347 0.00000 -0.26781 -0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.86594 -0.00002 0.50015 -0.00000 0.14813 -0.98897 0.00001 0.99581 -0.09143 0.00000 0.99589 -0.09054 0.00000 0.99573 -0.09232 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.66641 -0.13510 0.73324 0.99726 -0.04352 0.05979 -0.99793 0.04350 -0.04734 0.99726 -0.04354 0.05989 -0.99726 0.04354 -0.05989 0.99888 0.01505 -0.04475 0.98858 0.13838 -0.05962 0.97315 0.04249 -0.22623 0.97355 0.04349 -0.22431 0.99726 0.04353 -0.05988 0.99726 0.04354 -0.05979 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.99752 0.04156 -0.05678 0.98778 0.14525 -0.05650 -0.21619 -0.01197 -0.97628 -0.59206 0.35892 -0.72155 -0.46040 0.21415 -0.86150 -0.29000 0.04070 -0.95616 -0.09701 -0.14263 -0.98501 0.21619 -0.01197 -0.97628 0.57297 0.33762 -0.74680 0.37937 0.13058 -0.91598 0.12983 -0.11185 -0.98521 0.00000 -0.23089 -0.97298 -0.53727 -0.00000 0.84341 -0.53728 -0.00000 0.84341 -0.44788 -0.00000 0.89409 -0.44790 0.00000 0.89409 -0.35337 0.00000 0.93548 -0.35336 -0.00000 0.93549 0.05159 0.00000 0.99867 0.05158 0.00000 0.99867 0.35334 0.00000 0.93550 0.35336 -0.00001 0.93549 0.44790 -0.00001 0.89408 0.44788 0.00000 0.89410 0.53710 0.00000 0.84352 0.53710 0.00000 0.84352 0.97668 0.00000 0.21468 0.97668 -0.00000 0.21468 0.99415 -0.00000 0.10802 0.99415 0.00000 0.10802 1.00000 0.00000 -0.00004 1.00000 0.00001 -0.00002 0.99415 0.00001 -0.10800 0.97667 -0.00000 -0.21473 0.97667 -0.00000 -0.21474 0.99415 -0.00000 -0.10797 -0.22482 -0.50055 -0.83601 0.22469 -0.50016 -0.83627 0.15416 0.00000 0.98805 0.00047 0.00000 -1.00000 -0.00048 -0.00000 -1.00000 0.00000 0.00028 -1.00000 -0.99415 0.00000 -0.10801 -1.00000 0.00000 0.00001 -0.99415 0.00000 0.10799 -0.96366 0.00000 0.26713 -0.97668 -0.00000 -0.21470 -0.97667 0.00001 0.21472 -0.25512 -0.00000 0.96691 -0.15417 -0.00001 0.98804 -0.05159 -0.00000 0.99867 0.25515 0.00000 0.96690 0.96367 0.00000 0.26708 0.96378 0.00000 -0.26669 0.96363 -0.00005 -0.26725 -0.96471 -0.00008 -0.26331 -0.96360 -0.00041 -0.26733 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00011 -1.00000 -0.00197 0.00011 -1.00000 0.00201 -0.00000 -1.00000 0.00002 -0.00002 -1.00000 -0.00001 -0.00002 -1.00000 0.00005 -0.00002 -1.00000 -0.00042 0.00002 -1.00000 -0.00004 0.00002 -1.00000 -0.00005 0.00002 -1.00000 -0.00006 0.00001 -1.00000 -0.00006 0.00000 -1.00000 -0.00007 -0.00000 -1.00000 -0.00007 -0.00001 -1.00000 -0.00006 -0.00002 -1.00000 -0.00006 -0.00002 -1.00000 -0.00005 -0.00002 -1.00000 -0.00004 -0.00002 -1.00000 -0.00003 0.00000 -1.00000 0.00016 0.00000 -1.00000 0.00010 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00006 1.00000 -0.00006 -0.00000 1.00000 0.00170 -0.00176 0.99999 0.00388 -0.00176 1.00000 -0.00049 -0.00176 0.99999 -0.00276 -0.00169 0.99999 -0.00337 -0.00152 0.99999 -0.00402 -0.00123 0.99999 -0.00465 -0.00081 0.99999 -0.00517 -0.00028 0.99998 -0.00547 0.00028 0.99998 -0.00547 0.00081 0.99999 -0.00517 0.00123 0.99999 -0.00465 0.00152 0.99999 -0.00402 0.00169 0.99999 -0.00337 -0.00176 0.99945 -0.03306 0.73998 -0.57732 0.34504 0.34504 -0.57735 -0.73998 0.34504 0.57735 -0.73998 0.34504 0.57735 -0.73998 0.73998 0.57732 0.34504 0.73998 -0.57732 0.34504 -0.34504 -0.57735 0.73998 -0.73998 -0.57732 -0.34504 0.34504 -0.57735 -0.73998 0.34504 -0.57735 -0.73998 0.73998 -0.57732 0.34504 -0.34504 -0.57735 0.73998 -0.34504 -0.57735 0.73998 -0.34504 0.57735 0.73998 -0.73998 0.57732 -0.34504 -0.73998 0.57732 -0.34504 -0.73998 -0.57732 -0.34504 -0.34504 -0.57735 0.73998 -0.34504 0.57735 0.73998 0.73998 0.57732 0.34504 0.34504 0.57735 -0.73998 0.34504 0.57735 -0.73998 -0.73998 0.57732 -0.34504 -0.34504 0.57735 0.73998 -0.34504 -0.57735 0.73998 0.73998 -0.57732 0.34504 0.73998 0.57732 0.34504 0.73998 0.57732 0.34504 -0.34504 0.57735 0.73998 -0.34504 -0.57735 0.73998 -0.73998 -0.57732 -0.34504 -0.73998 0.57732 -0.34504 0.34504 0.57735 -0.73998 0.34504 0.57735 -0.73998 0.34504 -0.57735 -0.73998 -0.73998 -0.57732 -0.34504 0.34504 -0.57735 0.73998 0.73998 -0.57732 -0.34504 0.73998 0.57732 -0.34504 0.73998 0.57732 -0.34504 0.34504 0.57735 0.73998 0.34504 -0.57735 0.73998 -0.73998 -0.57732 0.34504 -0.34504 -0.57735 -0.73998 0.73998 -0.57732 -0.34504 0.73998 -0.57732 -0.34504 0.34504 -0.57735 0.73998 -0.73998 -0.57732 0.34504 -0.73998 0.57732 0.34504 0.34504 0.57735 0.73998 0.73998 0.57732 -0.34504 0.73998 0.57732 -0.34504 -0.34504 0.57735 -0.73998 -0.73998 0.57732 0.34504 -0.73998 -0.57732 0.34504 -0.73998 0.57732 0.34504 -0.34504 0.57735 -0.73998 -0.34504 0.57735 -0.73998 -0.34504 -0.57735 -0.73998 -0.73998 -0.57732 0.34504 -0.34504 -0.57735 -0.73998 -0.34504 0.57735 -0.73998 0.73998 0.57732 -0.34504 0.73998 0.57732 -0.34504 0.73998 -0.57732 -0.34504 -0.34504 -0.57735 -0.73998 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 0.78866 -0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.78866 0.57735 0.21131 -0.73998 -0.57732 0.34504 0.34504 -0.57735 0.73998 0.34504 0.57735 0.73998 0.34504 0.57735 0.73998 -0.73998 0.57732 0.34504 -0.73998 -0.57732 0.34504 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 0.00000 0.13063 -0.99143 -0.70711 0.70711 0.00000 -0.70711 -0.70711 0.00000 0.70711 0.70711 -0.00000 0.70403 -0.56337 0.43238 0.70402 -0.56340 -0.43235 0.70711 -0.70711 0.00000 0.07853 0.00000 -0.99691 -0.07852 0.00000 -0.99691 -0.07852 -0.00000 -0.99691 -0.23373 0.00000 -0.97230 -0.23373 -0.00000 -0.97230 -0.38223 0.00000 -0.92407 -0.38223 -0.00000 -0.92407 -0.52280 0.00000 -0.85245 -0.52280 -0.00000 -0.85245 -0.64958 0.00000 -0.76030 -0.64958 -0.00000 -0.76030 -0.76031 0.00000 -0.64956 -0.76031 -0.00000 -0.64956 -0.85245 0.00000 -0.52280 -0.85245 -0.00000 -0.52280 -0.92407 0.00000 -0.38223 -0.92407 -0.00000 -0.38223 -0.97230 0.00000 -0.23375 -0.97230 -0.00000 -0.23375 -0.99691 0.00000 -0.07850 -0.99691 -0.00000 -0.07850 -0.99691 0.00000 0.07850 -0.99691 0.00000 0.07850 -0.97230 0.00000 0.23375 -0.97230 0.00000 0.23375 -0.92397 0.00000 0.38246 -0.92397 0.00000 0.38246 -0.85263 0.00000 0.52251 -0.85263 0.00000 0.52251 -0.76031 0.00000 0.64956 -0.76031 0.00000 0.64956 -0.64956 0.00000 0.76031 -0.64956 0.00000 0.76031 -0.52280 0.00000 0.85245 -0.52280 0.00000 0.85245 -0.38224 0.00000 0.92406 -0.38224 0.00000 0.92406 -0.23373 0.00000 0.97230 -0.23373 0.00000 0.97230 -0.07852 0.00000 0.99691 -0.07852 0.00000 0.99691 0.07853 -0.00000 0.99691 0.07853 0.00000 0.99691 0.23373 -0.00000 0.97230 0.23373 0.00000 0.97230 0.38225 -0.00000 0.92406 0.38225 0.00000 0.92406 0.52280 -0.00000 0.85245 0.52280 0.00000 0.85245 0.64956 -0.00000 0.76031 0.64956 0.00000 0.76031 0.76031 -0.00000 0.64956 0.76031 0.00000 0.64956 0.85263 -0.00000 0.52251 0.85263 0.00000 0.52251 0.92397 -0.00000 0.38246 0.92397 0.00000 0.38246 0.97230 -0.00000 0.23375 0.97230 0.00000 0.23375 0.99691 -0.00000 0.07850 0.99691 0.00000 0.07850 0.99691 0.00000 -0.07850 0.99691 0.00000 -0.07850 0.97230 0.00000 -0.23375 0.97230 0.00000 -0.23375 0.92407 0.00000 -0.38223 0.92407 0.00000 -0.38223 0.85245 0.00000 -0.52280 0.85245 0.00000 -0.52280 0.76031 0.00000 -0.64956 0.76031 0.00000 -0.64956 0.64958 0.00000 -0.76030 0.64958 0.00000 -0.76030 0.52280 0.00000 -0.85245 0.52280 0.00000 -0.85245 0.38223 0.00000 -0.92407 0.38223 0.00000 -0.92407 0.23373 0.00000 -0.97230 0.23373 0.00000 -0.97230 0.07853 0.00000 -0.99691 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 0.07853 0.00000 -0.99691 0.23373 0.00000 -0.97230 0.23373 0.00000 -0.97230 0.38223 0.00000 -0.92407 0.38223 0.00000 -0.92407 0.52280 0.00000 -0.85245 0.52280 0.00000 -0.85245 0.64958 0.00000 -0.76030 0.64958 0.00000 -0.76030 0.76031 0.00000 -0.64956 0.76031 0.00000 -0.64956 0.85245 0.00000 -0.52280 0.85245 0.00000 -0.52280 0.92407 0.00000 -0.38223 0.92407 0.00000 -0.38223 0.97230 0.00000 -0.23375 0.97230 0.00000 -0.23375 0.99691 0.00000 -0.07850 0.99691 0.00000 -0.07850 0.99691 0.00000 0.07850 0.99691 -0.00000 0.07850 0.97230 0.00000 0.23375 0.97230 -0.00000 0.23375 0.92397 0.00000 0.38246 0.92397 -0.00000 0.38246 0.85263 0.00000 0.52251 0.85263 -0.00000 0.52251 0.76031 0.00000 0.64956 0.76031 -0.00000 0.64956 0.64956 0.00000 0.76031 0.64956 -0.00000 0.76031 0.52280 0.00000 0.85245 0.52280 -0.00000 0.85245 0.38225 0.00000 0.92406 0.38225 -0.00000 0.92406 0.23373 0.00000 0.97230 0.23373 -0.00000 0.97230 0.07853 0.00000 0.99691 0.07853 -0.00000 0.99691 -0.07852 0.00000 0.99691 -0.07852 0.00000 0.99691 -0.23373 0.00000 0.97230 -0.23373 0.00000 0.97230 -0.38224 0.00000 0.92406 -0.38224 0.00000 0.92406 -0.52280 0.00000 0.85245 -0.52280 0.00000 0.85245 -0.64956 0.00000 0.76031 -0.64956 0.00000 0.76031 -0.76031 0.00000 0.64956 -0.76031 0.00000 0.64956 -0.85263 0.00000 0.52251 -0.85263 0.00000 0.52251 -0.92397 0.00000 0.38246 -0.92397 0.00000 0.38246 -0.97230 0.00000 0.23375 -0.97230 0.00000 0.23375 -0.99691 0.00000 0.07850 -0.99691 0.00000 0.07850 -0.99691 -0.00000 -0.07850 -0.99691 0.00000 -0.07850 -0.97230 -0.00000 -0.23375 -0.97230 0.00000 -0.23375 -0.92407 -0.00000 -0.38223 -0.92407 0.00000 -0.38223 -0.85245 -0.00000 -0.52280 -0.85245 0.00000 -0.52280 -0.76031 -0.00000 -0.64956 -0.76031 0.00000 -0.64956 -0.64958 -0.00000 -0.76030 -0.64958 0.00000 -0.76030 -0.52280 -0.00000 -0.85245 -0.52280 0.00000 -0.85245 -0.38223 -0.00000 -0.92407 -0.38223 0.00000 -0.92407 -0.23373 -0.00000 -0.97230 -0.23373 0.00000 -0.97230 -0.07852 -0.00000 -0.99691 -0.07852 0.00000 -0.99691 0.07853 0.00000 -0.99691 0.07849 0.00000 -0.99692 -0.07849 0.00000 -0.99692 -0.07849 -0.00000 -0.99692 -0.23373 0.00000 -0.97230 -0.23373 -0.00000 -0.97230 -0.38224 0.00000 -0.92406 -0.38224 -0.00000 -0.92406 -0.52280 0.00000 -0.85245 -0.52280 -0.00000 -0.85245 -0.64959 0.00000 -0.76029 -0.64959 -0.00000 -0.76029 -0.76031 0.00000 -0.64956 -0.76031 -0.00000 -0.64956 -0.85244 0.00000 -0.52282 -0.85244 -0.00000 -0.52282 -0.92407 0.00000 -0.38223 -0.92407 -0.00000 -0.38223 -0.97230 0.00000 -0.23375 -0.97230 -0.00000 -0.23375 -0.99691 0.00000 -0.07850 -0.99691 -0.00000 -0.07850 -0.99691 0.00000 0.07850 -0.99691 0.00000 0.07850 -0.97230 0.00000 0.23375 -0.97230 0.00000 0.23375 -0.92396 0.00000 0.38248 -0.92396 0.00000 0.38248 -0.85263 0.00000 0.52251 -0.85263 0.00000 0.52251 -0.76031 0.00000 0.64956 -0.76031 0.00000 0.64956 -0.64956 0.00000 0.76031 -0.64956 0.00000 0.76031 -0.52283 0.00000 0.85244 -0.52283 0.00000 0.85244 -0.38224 0.00000 0.92406 -0.38224 0.00000 0.92406 -0.23373 0.00000 0.97230 -0.23373 0.00000 0.97230 -0.07849 0.00000 0.99692 -0.07849 0.00000 0.99692 0.07849 -0.00000 0.99692 0.07849 0.00000 0.99692 0.23373 -0.00000 0.97230 0.23373 0.00000 0.97230 0.38225 -0.00000 0.92406 0.38225 0.00000 0.92406 0.52283 -0.00000 0.85244 0.52283 0.00000 0.85244 0.64956 -0.00000 0.76031 0.64956 0.00000 0.76031 0.76031 -0.00000 0.64956 0.76031 0.00000 0.64956 0.85263 -0.00000 0.52251 0.85263 0.00000 0.52251 0.92396 -0.00000 0.38248 0.92396 0.00000 0.38248 0.97230 -0.00000 0.23375 0.97230 0.00000 0.23375 0.99691 -0.00000 0.07850 0.99691 0.00000 0.07850 0.99691 0.00000 -0.07850 0.99691 0.00000 -0.07850 0.97230 0.00000 -0.23375 0.97230 0.00000 -0.23375 0.92407 0.00000 -0.38223 0.92407 0.00000 -0.38223 0.85244 0.00000 -0.52282 0.85244 0.00000 -0.52282 0.76031 0.00000 -0.64956 0.76031 0.00000 -0.64956 0.64959 0.00000 -0.76029 0.64959 0.00000 -0.76029 0.52280 0.00000 -0.85245 0.52280 0.00000 -0.85245 0.38225 0.00000 -0.92406 0.38225 0.00000 -0.92406 0.23373 0.00000 -0.97230 0.23373 0.00000 -0.97230 0.07849 0.00000 -0.99692 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 0.07849 0.00000 -0.99692 0.23373 0.00000 -0.97230 0.23373 0.00000 -0.97230 0.38225 0.00000 -0.92406 0.38225 0.00000 -0.92406 0.52280 0.00000 -0.85245 0.52280 0.00000 -0.85245 0.64959 0.00000 -0.76029 0.64959 0.00000 -0.76029 0.76031 0.00000 -0.64956 0.76031 0.00000 -0.64956 0.85244 0.00000 -0.52282 0.85244 0.00000 -0.52282 0.92407 0.00000 -0.38223 0.92407 0.00000 -0.38223 0.97230 0.00000 -0.23375 0.97230 0.00000 -0.23375 0.99691 0.00000 -0.07850 0.99691 0.00000 -0.07850 0.99691 0.00000 0.07850 0.99691 -0.00000 0.07850 0.97230 0.00000 0.23375 0.97230 -0.00000 0.23375 0.92396 0.00000 0.38248 0.92396 -0.00000 0.38248 0.85263 0.00000 0.52251 0.85263 -0.00000 0.52251 0.76031 0.00000 0.64956 0.76031 -0.00000 0.64956 0.64956 0.00000 0.76031 0.64956 -0.00000 0.76031 0.52283 0.00000 0.85244 0.52283 -0.00000 0.85244 0.38225 0.00000 0.92406 0.38225 -0.00000 0.92406 0.23373 0.00000 0.97230 0.23373 -0.00000 0.97230 0.07849 0.00000 0.99692 0.07849 -0.00000 0.99692 -0.07849 0.00000 0.99692 -0.07849 0.00000 0.99692 -0.23373 0.00000 0.97230 -0.23373 0.00000 0.97230 -0.38224 0.00000 0.92406 -0.38224 0.00000 0.92406 -0.52283 0.00000 0.85244 -0.52283 0.00000 0.85244 -0.64956 0.00000 0.76031 -0.64956 0.00000 0.76031 -0.76031 0.00000 0.64956 -0.76031 0.00000 0.64956 -0.85263 0.00000 0.52251 -0.85263 0.00000 0.52251 -0.92396 0.00000 0.38248 -0.92396 0.00000 0.38248 -0.97230 0.00000 0.23375 -0.97230 0.00000 0.23375 -0.99691 0.00000 0.07850 -0.99691 0.00000 0.07850 -0.99691 -0.00000 -0.07850 -0.99691 0.00000 -0.07850 -0.97230 -0.00000 -0.23375 -0.97230 0.00000 -0.23375 -0.92407 -0.00000 -0.38223 -0.92407 0.00000 -0.38223 -0.85244 -0.00000 -0.52282 -0.85244 0.00000 -0.52282 -0.76031 -0.00000 -0.64956 -0.76031 0.00000 -0.64956 -0.64959 -0.00000 -0.76029 -0.64959 0.00000 -0.76029 -0.52280 -0.00000 -0.85245 -0.52280 0.00000 -0.85245 -0.38224 -0.00000 -0.92406 -0.38224 0.00000 -0.92406 -0.23373 -0.00000 -0.97230 -0.23373 0.00000 -0.97230 -0.07849 -0.00000 -0.99692 -0.07849 0.00000 -0.99692 0.07849 0.00000 -0.99692 0.07849 0.00000 -0.99692 -0.07849 0.00000 -0.99692 -0.07849 -0.00000 -0.99692 -0.23373 0.00000 -0.97230 -0.23373 -0.00000 -0.97230 -0.38224 0.00000 -0.92406 -0.38224 -0.00000 -0.92406 -0.52280 0.00000 -0.85245 -0.52280 -0.00000 -0.85245 -0.64959 0.00000 -0.76029 -0.64959 -0.00000 -0.76029 -0.76031 0.00000 -0.64956 -0.76031 -0.00000 -0.64956 -0.85244 0.00000 -0.52282 -0.85244 -0.00000 -0.52282 -0.92407 0.00000 -0.38223 -0.92407 -0.00000 -0.38223 -0.97230 0.00000 -0.23375 -0.97230 -0.00000 -0.23375 -0.99691 0.00000 -0.07850 -0.99691 -0.00000 -0.07850 -0.99691 0.00000 0.07850 -0.99691 0.00000 0.07850 -0.97230 0.00000 0.23375 -0.97230 0.00000 0.23375 -0.92396 0.00000 0.38248 -0.92396 0.00000 0.38248 -0.85263 0.00000 0.52251 -0.85263 0.00000 0.52251 -0.76031 0.00000 0.64956 -0.76031 0.00000 0.64956 -0.64956 0.00000 0.76031 -0.64956 0.00000 0.76031 -0.52283 0.00000 0.85244 -0.52283 0.00000 0.85244 -0.38224 0.00000 0.92406 -0.38224 0.00000 0.92406 -0.23373 0.00000 0.97230 -0.23373 0.00000 0.97230 -0.07849 0.00000 0.99692 -0.07849 0.00000 0.99692 0.07849 -0.00000 0.99692 0.07849 0.00000 0.99692 0.23373 -0.00000 0.97230 0.23373 0.00000 0.97230 0.38225 -0.00000 0.92406 0.38225 0.00000 0.92406 0.52283 -0.00000 0.85244 0.52283 0.00000 0.85244 0.64956 -0.00000 0.76031 0.64956 0.00000 0.76031 0.76031 -0.00000 0.64956 0.76031 0.00000 0.64956 0.85263 -0.00000 0.52251 0.85263 0.00000 0.52251 0.92396 -0.00000 0.38248 0.92396 0.00000 0.38248 0.97230 -0.00000 0.23375 0.97230 0.00000 0.23375 0.99691 -0.00000 0.07850 0.99691 0.00000 0.07850 0.99691 0.00000 -0.07850 0.99691 0.00000 -0.07850 0.97230 0.00000 -0.23375 0.97230 0.00000 -0.23375 0.92407 0.00000 -0.38223 0.92407 0.00000 -0.38223 0.85244 0.00000 -0.52282 0.85244 0.00000 -0.52282 0.76031 0.00000 -0.64956 0.76031 0.00000 -0.64956 0.64959 0.00000 -0.76029 0.64959 0.00000 -0.76029 0.52280 0.00000 -0.85245 0.52280 0.00000 -0.85245 0.38225 0.00000 -0.92406 0.38225 0.00000 -0.92406 0.23373 0.00000 -0.97230 0.23373 0.00000 -0.97230 0.07849 0.00000 -0.99692 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 0.07849 0.00000 -0.99692 0.23373 0.00000 -0.97230 0.23373 0.00000 -0.97230 0.38225 0.00000 -0.92406 0.38225 0.00000 -0.92406 0.52280 0.00000 -0.85245 0.52280 0.00000 -0.85245 0.64959 0.00000 -0.76029 0.64959 0.00000 -0.76029 0.76031 0.00000 -0.64956 0.76031 0.00000 -0.64956 0.85244 0.00000 -0.52282 0.85244 0.00000 -0.52282 0.92407 0.00000 -0.38223 0.92407 0.00000 -0.38223 0.97230 0.00000 -0.23375 0.97230 0.00000 -0.23375 0.99691 0.00000 -0.07850 0.99691 0.00000 -0.07850 0.99691 0.00000 0.07850 0.99691 -0.00000 0.07850 0.97230 0.00000 0.23375 0.97230 -0.00000 0.23375 0.92396 0.00000 0.38248 0.92396 -0.00000 0.38248 0.85263 0.00000 0.52251 0.85263 -0.00000 0.52251 0.76031 0.00000 0.64956 0.76031 -0.00000 0.64956 0.64956 0.00000 0.76031 0.64956 -0.00000 0.76031 0.52283 0.00000 0.85244 0.52283 -0.00000 0.85244 0.38225 0.00000 0.92406 0.38225 -0.00000 0.92406 0.23373 0.00000 0.97230 0.23373 -0.00000 0.97230 0.07849 0.00000 0.99692 0.07849 -0.00000 0.99692 -0.07849 0.00000 0.99692 -0.07849 0.00000 0.99692 -0.23373 0.00000 0.97230 -0.23373 0.00000 0.97230 -0.38224 0.00000 0.92406 -0.38224 0.00000 0.92406 -0.52283 0.00000 0.85244 -0.52283 0.00000 0.85244 -0.64956 0.00000 0.76031 -0.64956 0.00000 0.76031 -0.76031 0.00000 0.64956 -0.76031 0.00000 0.64956 -0.85263 0.00000 0.52251 -0.85263 0.00000 0.52251 -0.92396 0.00000 0.38248 -0.92396 0.00000 0.38248 -0.97230 0.00000 0.23375 -0.97230 0.00000 0.23375 -0.99691 0.00000 0.07850 -0.99691 0.00000 0.07850 -0.99691 -0.00000 -0.07850 -0.99691 0.00000 -0.07850 -0.97230 -0.00000 -0.23375 -0.97230 0.00000 -0.23375 -0.92407 -0.00000 -0.38223 -0.92407 0.00000 -0.38223 -0.85244 -0.00000 -0.52282 -0.85244 0.00000 -0.52282 -0.76031 -0.00000 -0.64956 -0.76031 0.00000 -0.64956 -0.64959 -0.00000 -0.76029 -0.64959 0.00000 -0.76029 -0.52280 -0.00000 -0.85245 -0.52280 0.00000 -0.85245 -0.38224 -0.00000 -0.92406 -0.38224 0.00000 -0.92406 -0.23373 -0.00000 -0.97230 -0.23373 0.00000 -0.97230 -0.07849 -0.00000 -0.99692 -0.07849 0.00000 -0.99692 0.07849 0.00000 -0.99692 0.07849 0.00000 -0.99692 -0.07849 0.00000 -0.99692 -0.07849 -0.00000 -0.99692 -0.23373 0.00000 -0.97230 -0.23373 -0.00000 -0.97230 -0.38224 0.00000 -0.92406 -0.38224 -0.00000 -0.92406 -0.52280 0.00000 -0.85245 -0.52280 -0.00000 -0.85245 -0.64959 0.00000 -0.76029 -0.64959 -0.00000 -0.76029 -0.76031 0.00000 -0.64956 -0.76031 -0.00000 -0.64956 -0.85244 0.00000 -0.52282 -0.85244 -0.00000 -0.52282 -0.92407 0.00000 -0.38223 -0.92407 -0.00000 -0.38223 -0.97230 0.00000 -0.23375 -0.97230 -0.00000 -0.23375 -0.99691 0.00000 -0.07850 -0.99691 -0.00000 -0.07850 -0.99691 0.00000 0.07850 -0.99691 0.00000 0.07850 -0.97230 0.00000 0.23375 -0.97230 0.00000 0.23375 -0.92396 0.00000 0.38248 -0.92396 0.00000 0.38248 -0.85263 0.00000 0.52251 -0.85263 0.00000 0.52251 -0.76031 0.00000 0.64956 -0.76031 0.00000 0.64956 -0.64956 0.00000 0.76031 -0.64956 0.00000 0.76031 -0.52283 0.00000 0.85244 -0.52283 0.00000 0.85244 -0.38224 0.00000 0.92406 -0.38224 0.00000 0.92406 -0.23373 0.00000 0.97230 -0.23373 0.00000 0.97230 -0.07849 0.00000 0.99692 -0.07849 0.00000 0.99692 0.07849 -0.00000 0.99692 0.07849 0.00000 0.99692 0.23373 -0.00000 0.97230 0.23373 0.00000 0.97230 0.38225 -0.00000 0.92406 0.38225 0.00000 0.92406 0.52283 -0.00000 0.85244 0.52283 0.00000 0.85244 0.64956 -0.00000 0.76031 0.64956 0.00000 0.76031 0.76031 -0.00000 0.64956 0.76031 0.00000 0.64956 0.85263 -0.00000 0.52251 0.85263 0.00000 0.52251 0.92396 -0.00000 0.38248 0.92396 0.00000 0.38248 0.97230 -0.00000 0.23375 0.97230 0.00000 0.23375 0.99691 -0.00000 0.07850 0.99691 0.00000 0.07850 0.99691 0.00000 -0.07850 0.99691 0.00000 -0.07850 0.97230 0.00000 -0.23375 0.97230 0.00000 -0.23375 0.92407 0.00000 -0.38223 0.92407 0.00000 -0.38223 0.85244 0.00000 -0.52282 0.85244 0.00000 -0.52282 0.76031 0.00000 -0.64956 0.76031 0.00000 -0.64956 0.64959 0.00000 -0.76029 0.64959 0.00000 -0.76029 0.52280 0.00000 -0.85245 0.52280 0.00000 -0.85245 0.38225 0.00000 -0.92406 0.38225 0.00000 -0.92406 0.23373 0.00000 -0.97230 0.23373 0.00000 -0.97230 0.07849 0.00000 -0.99692 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 0.07849 0.00000 -0.99692 0.23373 0.00000 -0.97230 0.23373 0.00000 -0.97230 0.38225 0.00000 -0.92406 0.38225 0.00000 -0.92406 0.52280 0.00000 -0.85245 0.52280 0.00000 -0.85245 0.64959 0.00000 -0.76029 0.64959 0.00000 -0.76029 0.76031 0.00000 -0.64956 0.76031 0.00000 -0.64956 0.85244 0.00000 -0.52282 0.85244 0.00000 -0.52282 0.92407 0.00000 -0.38223 0.92407 0.00000 -0.38223 0.97230 0.00000 -0.23375 0.97230 0.00000 -0.23375 0.99691 0.00000 -0.07850 0.99691 0.00000 -0.07850 0.99691 0.00000 0.07850 0.99691 -0.00000 0.07850 0.97230 0.00000 0.23375 0.97230 -0.00000 0.23375 0.92396 0.00000 0.38248 0.92396 -0.00000 0.38248 0.85263 0.00000 0.52251 0.85263 -0.00000 0.52251 0.76031 0.00000 0.64956 0.76031 -0.00000 0.64956 0.64956 0.00000 0.76031 0.64956 -0.00000 0.76031 0.52283 0.00000 0.85244 0.52283 -0.00000 0.85244 0.38225 0.00000 0.92406 0.38225 -0.00000 0.92406 0.23373 0.00000 0.97230 0.23373 -0.00000 0.97230 0.07849 0.00000 0.99692 0.07849 -0.00000 0.99692 -0.07849 0.00000 0.99692 -0.07849 0.00000 0.99692 -0.23373 0.00000 0.97230 -0.23373 0.00000 0.97230 -0.38224 0.00000 0.92406 -0.38224 0.00000 0.92406 -0.52283 0.00000 0.85244 -0.52283 0.00000 0.85244 -0.64956 0.00000 0.76031 -0.64956 0.00000 0.76031 -0.76031 0.00000 0.64956 -0.76031 0.00000 0.64956 -0.85263 0.00000 0.52251 -0.85263 0.00000 0.52251 -0.92396 0.00000 0.38248 -0.92396 0.00000 0.38248 -0.97230 0.00000 0.23375 -0.97230 0.00000 0.23375 -0.99691 0.00000 0.07850 -0.99691 0.00000 0.07850 -0.99691 -0.00000 -0.07850 -0.99691 0.00000 -0.07850 -0.97230 -0.00000 -0.23375 -0.97230 0.00000 -0.23375 -0.92407 -0.00000 -0.38223 -0.92407 0.00000 -0.38223 -0.85244 -0.00000 -0.52282 -0.85244 0.00000 -0.52282 -0.76031 -0.00000 -0.64956 -0.76031 0.00000 -0.64956 -0.64959 -0.00000 -0.76029 -0.64959 0.00000 -0.76029 -0.52280 -0.00000 -0.85245 -0.52280 0.00000 -0.85245 -0.38224 -0.00000 -0.92406 -0.38224 0.00000 -0.92406 -0.23373 -0.00000 -0.97230 -0.23373 0.00000 -0.97230 -0.07849 -0.00000 -0.99692 -0.07849 0.00000 -0.99692 0.07849 0.00000 -0.99692 0.70711 0.00000 -0.70710 0.70711 -0.70711 0.00000 0.70709 0.00000 0.70713 0.70711 0.70711 0.00000 -0.69478 0.00000 -0.71922 0.00000 -0.13063 -0.99143 -0.03408 0.00000 -0.99942 -0.70711 -0.70711 0.00000 -0.70709 0.00000 0.70713 -0.70711 0.70711 0.00000 -1.00000 0.00000 0.00000 -0.88392 -0.35857 -0.30020 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -0.99852 0.00334 -0.05436 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 -0.70407 -0.70404 -0.09278 -0.70408 -0.65608 -0.27171 -0.70407 -0.70404 0.09278 -0.70404 -0.56343 -0.43228 -0.70408 -0.65608 0.27171 -0.70404 -0.56343 0.43228 -0.70404 -0.43228 -0.56344 -0.70403 -0.43228 0.56345 -0.70409 -0.27171 0.65607 -0.70409 -0.09278 0.70403 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -0.70402 0.27179 -0.65612 -1.00000 -0.00000 -0.00000 -0.70406 0.09277 0.70405 -0.70404 0.43228 -0.56344 -0.70402 0.27179 0.65611 -0.70405 0.56343 -0.43227 -0.70404 0.43228 0.56344 -0.70393 0.65617 -0.27189 -0.70405 0.56343 0.43227 -0.70390 0.70422 -0.09267 -0.70393 0.65617 0.27189 -0.70391 0.70422 0.09267 0.00000 -1.00000 -0.00000 0.00000 -0.99143 0.13063 0.00000 -0.99143 -0.13063 0.00000 -0.92389 0.38265 0.00000 -0.92389 -0.38265 0.00000 -0.79338 0.60872 0.00000 -0.79338 -0.60873 0.00000 -0.60871 0.79339 0.00000 -0.60872 -0.79338 0.00000 -0.38269 0.92388 0.00000 -0.38266 -0.92389 0.00000 -0.13061 0.99143 0.00000 0.00000 1.00000 0.00000 0.13061 0.99143 0.00000 0.38268 0.92388 0.00000 0.38265 -0.92389 0.00000 0.60871 0.79339 0.00000 0.60872 -0.79338 0.00000 0.79338 0.60872 0.00000 0.79338 -0.60873 0.00000 0.92389 0.38265 0.00000 0.92389 -0.38265 0.00000 0.99143 0.13063 0.00000 0.99143 -0.13063 0.00000 1.00000 -0.00000 0.70407 -0.70404 -0.09278 0.70408 -0.65608 -0.27171 0.70407 -0.70404 0.09278 0.70403 -0.56345 -0.43228 0.70408 -0.65608 0.27171 0.70402 -0.56346 0.43228 0.70404 -0.43228 -0.56344 0.70409 -0.27171 -0.65608 0.70403 -0.43228 0.56345 0.70409 -0.09278 -0.70403 0.70409 -0.27171 0.65607 0.70409 -0.09278 0.70403 0.70406 0.09277 -0.70406 0.70402 0.27179 -0.65612 0.70406 0.09277 0.70405 0.70404 0.43228 -0.56344 0.70402 0.27179 0.65611 0.70405 0.56343 -0.43227 0.70404 0.43228 0.56344 0.70393 0.65617 -0.27189 0.70405 0.56343 0.43227 0.70390 0.70422 -0.09267 0.70393 0.65617 0.27189 0.70391 0.70422 0.09267 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -0.70409 -0.27171 -0.65608 1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.13063 0.99143 -0.00000 0.13063 0.99143 0.00000 0.38264 0.92390 -0.00000 0.38264 0.92390 0.00000 0.60874 0.79337 -0.00000 0.60874 0.79337 0.00000 0.79337 0.60874 -0.00000 0.79337 0.60874 0.00000 0.92390 0.38264 -0.00000 0.92390 0.38264 0.00000 0.99143 0.13063 -0.00000 0.99143 0.13063 0.00000 0.99143 -0.13063 0.00000 0.92390 -0.38264 0.00000 0.92390 -0.38264 0.00000 0.79337 -0.60874 0.00000 0.79337 -0.60874 0.00000 0.60874 -0.79337 0.00000 0.60874 -0.79337 0.00000 0.38264 -0.92390 0.00000 0.38264 -0.92390 0.00000 0.13063 -0.99143 0.00000 0.13063 -0.99143 -0.00000 -0.13063 -0.99143 0.00000 -0.13063 -0.99143 -0.00000 -0.38265 -0.92389 0.00000 -0.38265 -0.92389 -0.00000 -0.60874 -0.79337 0.00000 -0.60874 -0.79337 -0.00000 -0.79337 -0.60874 0.00000 -0.79337 -0.60874 -0.00000 -0.92390 -0.38264 0.00000 -0.92390 -0.38264 -0.00000 -0.99143 -0.13063 0.00000 -0.99143 0.13063 0.00000 -0.92390 0.38264 0.00000 -0.92390 0.38264 0.00000 -0.79337 0.60874 0.00000 -0.79337 0.60874 0.00000 -0.60874 0.79337 0.00000 -0.60874 0.79337 0.00000 -0.38265 0.92389 0.00000 -0.38265 0.92389 0.00000 -0.13063 0.99143 0.00000 -0.13063 0.99143 0.70406 -0.09277 -0.70406 0.70412 -0.09281 -0.70399 0.70413 -0.27171 -0.65603 0.70407 -0.27169 -0.65610 0.70407 -0.43228 -0.56340 0.70401 -0.43228 -0.56348 0.70401 -0.56344 -0.43232 0.70407 -0.56343 -0.43225 0.70406 -0.65610 -0.27173 0.70410 -0.65607 -0.27168 0.70409 -0.70403 -0.09276 0.70406 -0.70406 -0.09280 0.70406 0.09277 -0.70406 0.70406 0.09277 -0.70405 0.70398 0.27184 -0.65614 0.70408 0.27172 -0.65608 0.70409 0.43223 -0.56342 0.70401 0.43232 -0.56344 0.70406 0.70406 -0.09277 0.70373 0.70441 -0.09255 0.70378 0.65635 -0.27184 0.70409 0.65597 -0.27195 0.70408 0.56339 -0.43227 0.70401 0.56348 -0.43227 0.70711 -0.70711 0.00000 0.70711 0.70711 -0.00000 0.70406 -0.70406 0.09277 0.70409 -0.70402 0.09279 0.70410 -0.65606 0.27172 0.70406 -0.65611 0.27170 0.70407 -0.56340 0.43228 0.70401 -0.56347 0.43228 0.70401 -0.43232 0.56344 0.70407 -0.43224 0.56342 0.70407 -0.27173 0.65608 0.70413 -0.27167 0.65605 0.70411 -0.09276 0.70400 0.70405 -0.09281 0.70405 0.70407 0.70407 0.09251 0.70375 0.70436 0.09281 0.70377 0.65627 0.27207 0.70408 0.65608 0.27172 0.70409 0.56342 0.43223 0.70401 0.56344 0.43232 0.70401 0.43227 0.56348 0.70408 0.43228 0.56339 0.70406 0.09277 0.70406 0.70406 0.09277 0.70405 0.70398 0.27176 0.65617 0.70408 0.27180 0.65604 -0.70711 -0.70711 0.00000 -0.70412 -0.09281 0.70399 -0.70413 -0.27171 0.65603 -0.70407 -0.27169 0.65610 -0.70407 -0.43228 0.56340 -0.70401 -0.43228 0.56348 -0.70401 -0.56344 0.43232 -0.70407 -0.56343 0.43225 -0.70406 -0.65610 0.27173 -0.70410 -0.65607 0.27168 -0.70409 -0.70403 0.09276 -0.70406 -0.70406 0.09280 -0.70406 -0.70406 -0.09277 -0.70409 -0.70402 -0.09279 -0.70410 -0.65606 -0.27172 -0.70406 -0.65611 -0.27170 -0.70407 -0.56340 -0.43228 -0.70401 -0.56347 -0.43228 -0.70401 -0.43232 -0.56344 -0.70407 -0.43224 -0.56342 -0.70407 -0.27173 -0.65608 -0.70413 -0.27167 -0.65605 -0.70411 -0.09276 -0.70400 -0.70405 -0.09281 -0.70405 -0.70406 0.09277 0.70406 -0.70406 0.09277 0.70405 -0.70398 0.27184 0.65614 -0.70408 0.27172 0.65608 -0.70409 0.43223 0.56342 -0.70401 0.43232 0.56344 -0.70401 0.56344 0.43232 -0.70406 0.70406 0.09277 -0.70373 0.70441 0.09255 -0.70378 0.65635 0.27184 -0.70409 0.65597 0.27195 -0.70409 0.56342 0.43223 -0.70407 0.70407 -0.09251 -0.70375 0.70436 -0.09281 -0.70377 0.65627 -0.27207 -0.70408 0.65608 -0.27172 -0.70409 0.56342 -0.43223 -0.70401 0.56344 -0.43232 -0.70406 0.09277 -0.70406 -0.70406 0.09277 -0.70405 -0.70398 0.27176 -0.65617 -0.70408 0.27180 -0.65604 -0.70408 0.43228 -0.56339 -0.70401 0.43227 -0.56348 -0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 -0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 -0.00001 0.00000 1.00000 0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 0.00001 0.00000 1.00000 0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00001 -0.00000 1.00000 -0.00001 0.00000 1.00000 -0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 -0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 0.00001 -0.00000 1.00000 0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.76330 -0.64591 0.01290 0.81055 -0.58553 -0.01280 0.81055 -0.58553 -0.01280 0.85291 -0.52190 0.01282 0.89036 -0.45507 -0.01286 0.89029 -0.45522 -0.01286 0.92260 -0.38554 0.01288 0.94950 -0.31352 -0.01289 0.94939 -0.31385 -0.01289 0.97064 -0.24018 0.01281 0.98615 -0.16536 -0.01280 0.98622 -0.16493 -0.01280 0.99593 -0.08920 0.01279 0.99984 -0.01269 -0.01288 0.99983 -0.01306 -0.01288 0.99788 0.06382 0.01290 0.99002 0.14032 -0.01287 0.99007 0.13999 -0.01287 0.97641 0.21555 0.01286 0.95708 0.28955 -0.01277 0.95705 0.28965 -0.01277 0.93217 0.36179 0.01280 0.90169 0.43218 -0.01291 0.90169 0.43220 -0.01291 0.86586 0.50011 0.01282 0.82503 0.56494 -0.01286 0.82520 0.56470 -0.01286 0.77949 0.62628 0.01284 0.72927 0.68411 -0.01282 0.72928 0.68410 -0.01282 0.67472 0.73796 0.01287 0.61618 0.78750 -0.01283 0.61618 0.78750 -0.01283 0.55409 0.83236 0.01284 0.48877 0.87232 -0.01282 0.48863 0.87240 -0.01282 0.42056 0.90717 0.01280 0.35005 0.93664 -0.01281 0.34982 0.93673 -0.01281 0.27731 0.96070 0.01278 0.20299 0.97910 -0.01289 0.20263 0.97917 -0.01289 0.12726 0.99179 0.01272 0.05113 0.99861 -0.01289 0.05114 0.99861 -0.01289 -0.02575 0.99959 0.01288 -0.10227 0.99467 -0.01282 -0.10191 0.99471 -0.01282 -0.17784 0.98398 0.01287 -0.25260 0.96749 -0.01279 -0.25269 0.96746 -0.01279 -0.32604 0.94527 0.01289 -0.39740 0.91756 -0.01277 -0.39752 0.91750 -0.01277 -0.46648 0.88444 0.01286 -0.53294 0.84606 -0.01286 -0.53267 0.84623 -0.01286 -0.59606 0.80284 0.01288 -0.65568 0.75493 -0.01276 -0.68393 0.72944 -0.01275 -0.65572 0.75500 0.00000 -0.73811 0.67468 0.00000 -0.76322 0.64602 -0.01277 -0.76339 0.64581 -0.01277 -0.81049 0.58562 0.01284 -0.85288 0.52195 -0.01280 -0.85295 0.52184 -0.01280 -0.89036 0.45507 0.01286 -0.92260 0.38554 -0.01283 -0.92261 0.38553 -0.01283 -0.94942 0.31374 0.01284 -0.97061 0.24032 -0.01276 -0.97070 0.23997 -0.01276 -0.98619 0.16514 0.01285 -0.99593 0.08922 -0.01280 -0.99593 0.08918 -0.01280 -0.99984 0.01287 0.01281 -0.99788 -0.06382 -0.01290 -0.99788 -0.06381 -0.01290 -0.99005 -0.14013 0.01282 -0.97645 -0.21537 -0.01280 -0.97637 -0.21572 -0.01280 -0.95706 -0.28960 0.01279 -0.93224 -0.36163 -0.01274 -0.93206 -0.36207 -0.01274 -0.90169 -0.43219 0.01286 -0.86586 -0.50011 -0.01288 -0.86586 -0.50011 -0.01288 -0.82506 -0.56491 0.01278 -0.77957 -0.62618 -0.01280 -0.77941 -0.62638 -0.01280 -0.72927 -0.68410 0.01282 -0.67463 -0.73804 -0.01291 -0.67480 -0.73788 -0.01291 -0.61619 -0.78750 0.01283 -0.55422 -0.83227 -0.01279 -0.55422 -0.83227 -0.01279 -0.48884 -0.87228 0.01290 -0.42056 -0.90717 -0.01280 -0.42056 -0.90717 -0.01280 -0.34994 -0.93669 0.01285 -0.27697 -0.96079 -0.01289 -0.27730 -0.96070 -0.01289 -0.20281 -0.97913 0.01283 -0.12724 -0.99179 -0.01286 -0.12729 -0.99178 -0.01286 -0.05095 -0.99862 0.01282 0.02539 -0.99960 -0.01276 0.02573 -0.99959 -0.01276 0.10190 -0.99471 0.01282 0.17806 -0.98394 -0.01294 0.17762 -0.98401 -0.01294 0.25282 -0.96743 0.01287 0.32615 -0.94523 -0.01280 0.32594 -0.94530 -0.01280 0.39730 -0.91760 0.01285 0.46647 -0.88444 -0.01286 0.46649 -0.88444 -0.01286 0.53294 -0.84606 0.01286 0.59606 -0.80284 -0.01278 0.59606 -0.80284 -0.01278 0.65567 -0.75494 0.01285 0.71152 -0.70255 -0.01282 0.71152 -0.70255 -0.01282 -0.46433 0.53450 -0.70619 -0.46434 0.53463 -0.70609 -0.37722 0.59928 -0.70609 -0.37755 0.59940 -0.70581 -0.37755 0.59938 -0.70583 -0.28161 0.64997 -0.70585 -0.28130 0.64980 -0.70613 -0.28135 0.64961 -0.70629 -0.17889 0.68493 -0.70630 -0.17901 0.68502 -0.70619 -0.17891 0.68526 -0.70598 -0.07218 0.70450 -0.70602 -0.07223 0.70455 -0.70596 -0.07241 0.70427 -0.70623 0.03621 0.70707 -0.70621 0.03606 0.70729 -0.70601 0.03623 0.70748 -0.70580 0.14356 0.69372 -0.70579 0.14367 0.69348 -0.70600 0.14380 0.69359 -0.70587 0.24780 0.66353 -0.70592 0.24786 0.66332 -0.70610 0.24792 0.66335 -0.70605 0.34605 0.61783 -0.70607 0.34609 0.61753 -0.70631 0.34598 0.61748 -0.70641 0.43616 0.55742 -0.70644 0.43616 0.55742 -0.70643 0.43616 0.55742 -0.70643 0.51623 0.48425 -0.70640 0.51624 0.48429 -0.70637 0.51625 0.48429 -0.70636 0.58418 0.39976 -0.70635 0.58428 0.40009 -0.70607 0.58429 0.40009 -0.70607 0.63857 0.30608 -0.70608 0.63857 0.30609 -0.70607 0.63860 0.30608 -0.70605 0.67780 0.20514 -0.70605 0.67771 0.20500 -0.70618 0.67766 0.20502 -0.70622 0.70100 0.09911 -0.70625 0.70120 0.09932 -0.70602 0.70110 0.09937 -0.70610 0.70806 -0.00925 -0.70609 0.70823 -0.00912 -0.70592 0.70807 -0.00899 -0.70608 0.69843 -0.11680 -0.70608 0.69835 -0.11685 -0.70616 0.69862 -0.11714 -0.70584 0.67258 -0.22234 -0.70583 0.67253 -0.22236 -0.70588 0.67227 -0.22198 -0.70624 0.63033 -0.32230 -0.70626 0.63052 -0.32227 -0.70611 0.63052 -0.32226 -0.70611 0.57399 -0.41464 -0.70612 0.57407 -0.41464 -0.70605 0.57410 -0.41472 -0.70599 0.50394 -0.49759 -0.70600 0.50400 -0.49760 -0.70596 0.50401 -0.49766 -0.70591 0.42220 -0.56867 -0.70595 0.42214 -0.56865 -0.70600 0.42214 -0.56859 -0.70605 0.33038 -0.62638 -0.70604 0.33032 -0.62636 -0.70609 0.33033 -0.62632 -0.70612 0.23080 -0.66939 -0.70615 0.23085 -0.66942 -0.70611 0.23091 -0.66922 -0.70627 0.12576 -0.69670 -0.70626 0.12599 -0.69690 -0.70601 0.12608 -0.69672 -0.70618 0.01822 -0.70779 -0.70619 0.01823 -0.70781 -0.70617 0.01798 -0.70815 -0.70584 -0.09017 -0.70262 -0.70583 -0.09022 -0.70253 -0.70591 -0.09012 -0.70243 -0.70603 -0.19639 -0.68040 -0.70604 -0.19635 -0.68051 -0.70594 -0.19612 -0.68034 -0.70617 -0.29780 -0.64237 -0.70617 -0.29782 -0.64229 -0.70624 -0.29774 -0.64225 -0.70631 -0.39238 -0.58922 -0.70630 -0.39236 -0.58948 -0.70609 -0.39260 -0.58956 -0.70589 -0.47802 -0.52270 -0.70589 -0.47801 -0.52265 -0.70593 -0.47769 -0.52259 -0.70619 -0.55185 -0.44350 -0.70624 -0.55187 -0.44359 -0.70616 -0.55227 -0.44360 -0.70585 -0.61337 -0.35428 -0.70588 -0.61331 -0.35414 -0.70600 -0.61316 -0.35416 -0.70612 -0.66001 -0.25639 -0.70615 -0.65992 -0.25624 -0.70629 -0.66029 -0.25614 -0.70598 -0.69153 -0.15279 -0.70600 -0.69135 -0.15258 -0.70623 -0.69148 -0.15252 -0.70612 -0.70671 -0.04519 -0.70606 -0.70668 -0.04517 -0.70609 -0.70665 -0.04519 -0.70612 -0.70526 0.06315 -0.70613 -0.70531 0.06312 -0.70608 -0.70539 0.06319 -0.70600 -0.68752 0.16996 -0.70599 -0.68716 0.17012 -0.70631 -0.68717 0.17014 -0.70629 -0.65319 0.27295 -0.70629 -0.65320 0.27295 -0.70628 -0.65321 0.27297 -0.70626 -0.60390 0.36948 -0.70625 -0.60399 0.36947 -0.70618 -0.60407 0.36968 -0.70600 -0.54066 0.45739 -0.70603 -0.54034 0.45737 -0.70629 -0.54033 0.45736 -0.70630 -0.46419 0.53447 -0.70630 0.37743 -0.59918 0.70606 0.37740 -0.59916 0.70610 0.28134 -0.64978 0.70614 0.28151 -0.64995 0.70592 0.17908 -0.68528 0.70592 0.17886 -0.68496 0.70629 0.07214 -0.70419 0.70634 0.07238 -0.70467 0.70584 -0.03609 -0.70747 0.70582 -0.03618 -0.70719 0.70610 -0.14363 -0.69342 0.70608 -0.14364 -0.69331 0.70618 -0.24777 -0.66323 0.70621 -0.24777 -0.66357 0.70589 -0.34630 -0.61792 0.70587 -0.34626 -0.61770 0.70608 -0.43635 -0.55766 0.70613 -0.43636 -0.55769 0.70610 -0.51644 -0.48446 0.70611 -0.51646 -0.48449 0.70607 -0.58427 -0.40005 0.70611 -0.58432 -0.40011 0.70603 -0.63861 -0.30609 0.70604 -0.63864 -0.30612 0.70600 -0.67787 -0.20512 0.70599 -0.67763 -0.20493 0.70627 -0.70097 -0.09921 0.70625 -0.70115 -0.09931 0.70606 -0.70810 0.00912 0.70606 -0.70810 0.00912 0.70605 -0.69840 0.11695 0.70609 -0.69866 0.11690 0.70584 -0.67255 0.22224 0.70589 -0.67234 0.22225 0.70609 -0.63057 0.32229 0.70605 -0.63055 0.32229 0.70607 -0.57398 0.41473 0.70607 -0.57411 0.41477 0.70595 -0.52219 0.47732 0.70674 -0.52182 0.47728 0.70704 -0.48370 0.51588 0.70704 -0.48417 0.51596 0.70665 -0.42223 0.56870 0.70590 -0.42213 0.56864 0.70602 -0.33039 0.62642 0.70600 -0.33058 0.62659 0.70576 -0.23100 0.66972 0.70578 -0.23092 0.66962 0.70589 -0.12598 0.69705 0.70587 -0.12603 0.69713 0.70578 -0.01824 0.70819 0.70579 -0.01810 0.70783 0.70615 0.09012 0.70231 0.70615 0.09017 0.70210 0.70634 0.19632 0.68011 0.70634 0.19630 0.68033 0.70613 0.29782 0.64241 0.70613 0.29783 0.64261 0.70594 0.39247 0.58957 0.70596 0.39242 0.58937 0.70615 0.47780 0.52259 0.70612 0.47778 0.52254 0.70617 0.55193 0.44345 0.70620 0.55203 0.44361 0.70602 0.61325 0.35421 0.70602 0.61309 0.35400 0.70626 0.66002 0.25616 0.70623 0.66025 0.25637 0.70593 0.69160 0.15267 0.70596 0.69157 0.15265 0.70600 0.70677 0.04520 0.70600 0.70669 0.04516 0.70608 0.70529 -0.06317 0.70609 0.70541 -0.06314 0.70599 0.68745 -0.17011 0.70603 0.68720 -0.17014 0.70626 0.65321 -0.27297 0.70626 0.65326 -0.27297 0.70621 0.60393 -0.36954 0.70619 0.60418 -0.36959 0.70595 0.54064 -0.45749 0.70599 0.54060 -0.45748 0.70602 0.46440 -0.53471 0.70599 0.46433 -0.53467 0.70606 -0.00001 0.00000 1.00000 -0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 -0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 -0.00001 0.00000 1.00000 -0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 0.00001 0.00000 1.00000 0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 0.00001 -0.00000 1.00000 -0.00000 -0.00001 1.00000 -0.00000 -0.00001 1.00000 0.00001 0.00000 1.00000 0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 -0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 -0.00001 -0.00000 1.00000 0.00001 0.00000 1.00000 0.00001 0.00000 1.00000 0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 0.00001 -0.00000 1.00000 0.00001 0.00000 1.00000 -0.37486 -0.92699 0.01290 -0.30262 -0.95303 -0.01285 -0.30273 -0.95299 -0.01285 -0.22897 -0.97335 0.01279 -0.15372 -0.98803 -0.01291 -0.15380 -0.98802 -0.01291 -0.07763 -0.99690 0.01279 -0.00111 -0.99992 -0.01287 -0.00111 -0.99992 -0.01287 0.07539 -0.99707 0.01279 0.15153 -0.98837 -0.01288 0.15155 -0.98837 -0.01288 0.22690 -0.97383 0.01284 0.30081 -0.95360 -0.01285 0.30038 -0.95373 -0.01285 0.37268 -0.92787 0.01289 0.44270 -0.89658 -0.01280 0.44298 -0.89644 -0.01280 0.51000 -0.86008 0.01275 0.57415 -0.81865 -0.01283 0.57422 -0.81860 -0.01283 0.63535 -0.77212 0.01291 0.69272 -0.72110 -0.01282 0.69254 -0.72126 -0.01282 0.74576 -0.66609 0.01288 0.79466 -0.60692 -0.01285 0.79449 -0.60715 -0.01285 0.83872 -0.54440 0.01288 0.87797 -0.47855 -0.01281 0.87781 -0.47884 -0.01281 0.91193 -0.41015 0.01289 0.94076 -0.33883 -0.01289 0.94059 -0.33929 -0.01289 0.96390 -0.26593 0.01290 0.98142 -0.19143 -0.01275 0.98142 -0.19143 -0.01275 0.99318 -0.11587 0.01289 0.99915 -0.03919 -0.01288 0.99913 -0.03956 -0.01288 0.99922 0.03732 0.01288 0.99342 0.11382 -0.01284 0.99346 0.11345 -0.01284 0.98185 0.18924 0.01286 0.96447 0.26388 -0.01283 0.96447 0.26389 -0.01283 0.94141 0.33701 0.01287 0.91292 0.40794 -0.01276 0.91278 0.40825 -0.01276 0.87905 0.47656 0.01278 0.84010 0.54227 -0.01282 0.83982 0.54272 -0.01282 0.79586 0.60534 0.01281 0.74708 0.66461 -0.01292 0.74743 0.66421 -0.01292 0.69415 0.71972 0.01286 0.63708 0.77069 -0.01278 0.63686 0.77087 -0.01278 0.57614 0.81725 0.01282 0.51192 0.85894 -0.01284 0.47880 0.87783 -0.01283 0.51213 0.85891 0.00000 0.40999 0.91209 -0.00000 0.37472 0.92705 -0.01284 0.37470 0.92706 -0.01284 0.30284 0.95295 0.01277 0.22914 0.97331 -0.01286 0.22880 0.97339 -0.01286 0.15375 0.98803 0.01278 0.07762 0.99690 -0.01291 0.07764 0.99690 -0.01291 0.00093 0.99992 0.01281 -0.07538 0.99707 -0.01279 -0.07541 0.99707 -0.01279 -0.15154 0.98837 0.01289 -0.22685 0.97385 -0.01282 -0.22659 0.97391 -0.01282 -0.30060 0.95366 0.01289 -0.37285 0.92780 -0.01284 -0.37283 0.92781 -0.01284 -0.44269 0.89658 0.01280 -0.50979 0.86021 -0.01278 -0.51022 0.85995 -0.01278 -0.57431 0.81854 0.01280 -0.63524 0.77221 -0.01286 -0.63546 0.77202 -0.01286 -0.69253 0.72127 0.01273 -0.74568 0.66618 -0.01293 -0.74567 0.66619 -0.01293 -0.79457 0.60703 0.01280 -0.83864 0.54453 -0.01283 -0.83892 0.54411 -0.01283 -0.87793 0.47862 0.01272 -0.91190 0.41022 -0.01287 -0.91196 0.41008 -0.01287 -0.94068 0.33906 0.01281 -0.96384 0.26616 -0.01283 -0.96397 0.26571 -0.01283 -0.98142 0.19147 0.01273 -0.99316 0.11607 -0.01284 -0.99320 0.11571 -0.01284 -0.99914 0.03937 0.01282 -0.99922 -0.03731 -0.01288 -0.99923 -0.03695 -0.01288 -0.99344 -0.11366 0.01289 -0.98178 -0.18956 -0.01285 -0.98185 -0.18920 -0.01285 -0.96448 -0.26384 0.01284 -0.94139 -0.33706 -0.01289 -0.94143 -0.33695 -0.01289 -0.91285 -0.40810 0.01281 -0.87900 -0.47664 -0.01281 -0.87900 -0.47664 -0.01281 -0.83996 -0.54249 0.01284 -0.79593 -0.60525 -0.01285 -0.79579 -0.60543 -0.01285 -0.74717 -0.66451 0.01279 -0.69425 -0.71962 -0.01282 -0.69405 -0.71981 -0.01282 -0.63708 -0.77069 0.01278 -0.57634 -0.81711 -0.01283 -0.57617 -0.81723 -0.01283 -0.51187 -0.85897 0.01286 -0.44449 -0.89569 -0.01286 -0.44495 -0.89547 -0.01286 0.36254 0.60837 -0.70601 0.36260 0.60839 -0.70596 0.45109 0.54601 -0.70597 0.45108 0.54576 -0.70617 0.45116 0.54578 -0.70610 0.52933 0.47039 -0.70607 0.52940 0.47074 -0.70580 0.52913 0.47072 -0.70601 0.59478 0.38437 -0.70604 0.59470 0.38413 -0.70624 0.59507 0.38410 -0.70595 0.64652 0.28916 -0.70598 0.64634 0.28883 -0.70627 0.64636 0.28883 -0.70626 0.68285 0.18683 -0.70626 0.68291 0.18692 -0.70618 0.68302 0.18687 -0.70609 0.70353 0.08034 -0.70611 0.70359 0.08040 -0.70604 0.70329 0.08058 -0.70632 0.70732 -0.02801 -0.70634 0.70749 -0.02789 -0.70617 0.70732 -0.02774 -0.70635 0.69476 -0.13552 -0.70636 0.69486 -0.13547 -0.70627 0.69494 -0.13555 -0.70617 0.66599 -0.24024 -0.70622 0.66628 -0.24014 -0.70598 0.66614 -0.23992 -0.70619 0.62152 -0.33904 -0.70623 0.62181 -0.33899 -0.70600 0.62177 -0.33891 -0.70608 0.56267 -0.42999 -0.70605 0.56280 -0.42999 -0.70594 0.56275 -0.42981 -0.70610 0.49045 -0.51079 -0.70609 0.49036 -0.51077 -0.70616 0.49032 -0.51041 -0.70645 0.40644 -0.57943 -0.70645 0.40663 -0.57949 -0.70629 0.40662 -0.57978 -0.70606 0.31372 -0.63487 -0.70606 0.31351 -0.63476 -0.70625 0.31348 -0.63489 -0.70615 0.21271 -0.67538 -0.70613 0.21293 -0.67553 -0.70592 0.21302 -0.67528 -0.70613 0.10732 -0.69991 -0.70612 0.10733 -0.69992 -0.70611 0.10731 -0.69996 -0.70607 -0.00079 -0.70817 -0.70604 -0.00081 -0.70814 -0.70607 -0.00079 -0.70811 -0.70610 -0.10891 -0.69967 -0.70612 -0.10884 -0.69981 -0.70599 -0.10889 -0.69986 -0.70594 -0.21443 -0.67503 -0.70595 -0.21444 -0.67500 -0.70596 -0.21431 -0.67492 -0.70609 -0.31510 -0.63415 -0.70609 -0.31504 -0.63445 -0.70585 -0.31479 -0.63432 -0.70608 -0.40803 -0.57875 -0.70609 -0.40804 -0.57859 -0.70621 -0.40813 -0.57862 -0.70614 -0.49149 -0.50973 -0.70612 -0.49149 -0.50972 -0.70614 -0.49179 -0.50976 -0.70589 -0.56371 -0.42887 -0.70591 -0.56363 -0.42857 -0.70615 -0.56359 -0.42857 -0.70618 -0.62243 -0.33752 -0.70616 -0.62253 -0.33773 -0.70597 -0.62276 -0.33770 -0.70578 -0.66701 -0.23873 -0.70576 -0.66700 -0.23871 -0.70579 -0.66683 -0.23876 -0.70592 -0.69551 -0.13402 -0.70591 -0.69552 -0.13404 -0.70589 -0.69516 -0.13422 -0.70621 -0.70748 -0.02616 -0.70624 -0.70776 -0.02639 -0.70596 -0.70771 -0.02643 -0.70600 -0.70341 0.08195 -0.70604 -0.70328 0.08203 -0.70616 -0.70348 0.08222 -0.70594 -0.68277 0.18820 -0.70598 -0.68241 0.18835 -0.70629 -0.68250 0.18847 -0.70617 -0.64577 0.29038 -0.70616 -0.64578 0.29038 -0.70615 -0.64587 0.29055 -0.70600 -0.59420 0.38539 -0.70597 -0.59378 0.38542 -0.70631 -0.59383 0.38557 -0.70619 -0.52801 0.47173 -0.70617 -0.52822 0.47175 -0.70600 -0.52825 0.47193 -0.70585 -0.45016 0.54690 -0.70587 -0.44984 0.54683 -0.70613 -0.44984 0.54684 -0.70613 -0.36129 0.60894 -0.70616 -0.36125 0.60892 -0.70619 -0.36119 0.60946 -0.70576 -0.26415 0.65735 -0.70577 -0.26398 0.65725 -0.70593 -0.26404 0.65704 -0.70610 -0.16046 0.68965 -0.70614 -0.16052 0.68971 -0.70607 -0.16061 0.68951 -0.70624 -0.05339 0.70592 -0.70628 -0.05345 0.70599 -0.70620 -0.05338 0.70610 -0.70609 0.05498 0.70599 -0.70609 0.05497 0.70601 -0.70606 0.05497 0.70601 -0.70606 0.16204 0.68934 -0.70608 0.16212 0.68915 -0.70625 0.16227 0.68927 -0.70610 0.26535 0.65650 -0.70611 0.26537 0.65642 -0.70618 0.26532 0.65639 -0.70623 0.36258 0.60809 -0.70623 -0.45128 -0.54592 0.70592 -0.45123 -0.54577 0.70606 -0.52917 -0.47062 0.70604 -0.52920 -0.47069 0.70597 -0.59493 -0.38424 0.70599 -0.59486 -0.38415 0.70610 -0.64647 -0.28901 0.70608 -0.64637 -0.28891 0.70621 -0.68291 -0.18681 0.70622 -0.68305 -0.18692 0.70605 -0.70355 -0.08049 0.70607 -0.70331 -0.08037 0.70632 -0.70738 0.02787 0.70628 -0.70735 0.02788 0.70631 -0.69479 0.13555 0.70632 -0.69507 0.13550 0.70606 -0.66620 0.24013 0.70606 -0.66623 0.24013 0.70603 -0.62179 0.33898 0.70602 -0.62159 0.33895 0.70622 -0.56259 0.42980 0.70623 -0.56254 0.42979 0.70628 -0.49029 0.51064 0.70631 -0.49044 0.51071 0.70615 -0.40670 0.57965 0.70612 -0.40680 0.57972 0.70601 -0.31354 0.63502 0.70601 -0.31346 0.63495 0.70611 -0.21288 0.67536 0.70609 -0.21288 0.67536 0.70609 -0.10732 0.69995 0.70608 -0.10735 0.70000 0.70603 0.00066 0.70821 0.70600 0.00067 0.70818 0.70603 0.10889 0.69973 0.70606 0.10893 0.69953 0.70625 0.21442 0.67472 0.70624 0.21441 0.67493 0.70605 0.29002 0.64519 0.70684 0.29006 0.64503 0.70697 0.33865 0.62089 0.70697 0.33863 0.62105 0.70684 0.40802 0.57878 0.70606 0.40802 0.57876 0.70609 0.49159 0.50970 0.70608 0.49158 0.50967 0.70611 0.56362 0.42870 0.70608 0.56359 0.42864 0.70614 0.62250 0.33748 0.70612 0.62276 0.33779 0.70574 0.66704 0.23879 0.70572 0.66690 0.23867 0.70588 0.69554 0.13406 0.70587 0.69552 0.13404 0.70590 0.70785 0.02644 0.70587 0.70774 0.02639 0.70598 0.70349 -0.08207 0.70595 0.70354 -0.08206 0.70590 0.68277 -0.18837 0.70593 0.68256 -0.18839 0.70613 0.64578 -0.29045 0.70612 0.64580 -0.29045 0.70610 0.59395 -0.38552 0.70611 0.59392 -0.38552 0.70614 0.52810 -0.47169 0.70613 0.52842 -0.47181 0.70580 0.45011 -0.54700 0.70582 0.44987 -0.54686 0.70609 0.36116 -0.60907 0.70612 0.36124 -0.60913 0.70602 0.26393 -0.65713 0.70606 0.26418 -0.65739 0.70573 0.16076 -0.68998 0.70576 0.16049 -0.68958 0.70621 0.05338 -0.70596 0.70624 0.05347 -0.70614 0.70605 -0.05498 -0.70603 0.70604 -0.05497 -0.70606 0.70602 -0.16217 -0.68936 0.70603 -0.16217 -0.68934 0.70606 -0.26548 -0.65650 0.70606 -0.26548 -0.65671 0.70587 -0.36259 -0.60846 0.70591 -0.36259 -0.60845 0.70592 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.70711 0.00000 -0.70711 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.70711 0.00000 0.70711 0.00000 -1.00000 -0.00000 0.00000 -0.99143 0.13063 0.00000 -0.99143 -0.13063 0.70711 -0.70711 0.00000 -0.70711 -0.70711 0.00000 -0.70406 -0.09277 0.70406 -0.70711 0.00000 0.70711 0.00000 0.00000 1.00000 0.70711 0.70711 0.00000 0.00000 0.99143 -0.13063 0.00000 1.00000 0.00000 -0.70711 0.70711 0.00000 -0.70711 0.70711 0.00000 -0.70711 0.00000 -0.70711 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000

22 0 16 0 23 0 12 1 14 1 11 1 128 2 130 2 164 2 164 2 162 2 128 2 126 3 128 3 162 3 162 3 160 3 126 3 124 4 126 4 160 4 160 4 158 4 124 4 122 5 124 5 158 5 158 5 156 5 122 5 120 6 122 6 156 6 156 6 154 6 120 6 118 7 120 7 154 7 154 7 152 7 118 7 109 8 143 8 145 8 145 8 111 8 109 8 107 9 141 9 143 9 143 9 109 9 107 9 105 10 139 10 141 10 141 10 107 10 105 10 103 11 137 11 139 11 139 11 105 11 103 11 101 12 135 12 137 12 137 12 103 12 101 12 99 13 133 13 135 13 135 13 101 13 99 13 132 14 133 14 99 14 99 14 98 14 132 14 134 15 132 15 98 15 98 15 100 15 134 15 136 16 134 16 100 16 100 16 102 16 136 16 138 17 136 17 102 17 102 17 104 17 138 17 140 18 138 18 104 18 104 18 106 18 140 18 142 19 140 19 106 19 106 19 108 19 142 19 144 20 142 20 108 20 108 20 110 20 144 20 145 21 147 21 113 21 113 21 111 21 145 21 146 22 144 22 110 22 110 22 112 22 146 22 147 23 149 23 115 23 115 23 113 23 147 23 148 24 146 24 112 24 112 24 114 24 148 24 149 25 151 25 117 25 117 25 115 25 149 25 150 26 148 26 114 26 114 26 116 26 150 26 151 27 153 27 119 27 119 27 117 27 151 27 152 28 150 28 116 28 116 28 118 28 152 28 153 29 155 29 121 29 121 29 119 29 153 29 155 30 157 30 123 30 123 30 121 30 155 30 157 31 159 31 125 31 125 31 123 31 157 31 159 32 161 32 127 32 127 32 125 32 159 32 161 33 163 33 129 33 129 33 127 33 161 33 163 34 165 34 131 34 131 34 129 34 163 34 165 35 164 35 130 35 130 35 131 35 165 35 64 36 65 36 31 36 31 36 30 36 64 36 66 37 64 37 30 37 30 37 32 37 66 37 68 38 66 38 32 38 32 38 34 38 68 38 70 39 68 39 34 39 34 39 36 39 70 39 72 40 70 40 36 40 36 40 38 40 72 40 74 41 72 41 38 41 38 41 40 41 74 41 76 42 74 42 40 42 40 42 42 42 76 42 77 43 79 43 45 43 45 43 43 43 77 43 78 44 76 44 42 44 42 44 44 44 78 44 79 45 81 45 47 45 47 45 45 45 79 45 80 46 78 46 44 46 44 46 46 46 80 46 81 47 83 47 49 47 49 47 47 47 81 47 82 48 80 48 46 48 46 48 48 48 82 48 83 49 85 49 51 49 51 49 49 49 83 49 84 50 82 50 48 50 48 50 50 50 84 50 85 51 87 51 53 51 53 51 51 51 85 51 87 52 89 52 55 52 55 52 53 52 87 52 89 53 91 53 57 53 57 53 55 53 89 53 91 54 93 54 59 54 59 54 57 54 91 54 93 55 95 55 61 55 61 55 59 55 93 55 95 56 97 56 63 56 63 56 61 56 95 56 97 57 96 57 62 57 62 57 63 57 97 57 60 58 62 58 96 58 96 58 94 58 60 58 58 59 60 59 94 59 94 59 92 59 58 59 56 60 58 60 92 60 92 60 90 60 56 60 54 61 56 61 90 61 90 61 88 61 54 61 52 62 54 62 88 62 88 62 86 62 52 62 50 63 52 63 86 63 86 63 84 63 50 63 41 64 75 64 77 64 77 64 43 64 41 64 39 65 73 65 75 65 75 65 41 65 39 65 37 66 71 66 73 66 73 66 39 66 37 66 35 67 69 67 71 67 71 67 37 67 35 67 33 68 67 68 69 68 69 68 35 68 33 68 31 69 65 69 67 69 67 69 33 69 31 69 98 70 99 70 166 70 100 71 98 71 166 71 99 72 101 72 166 72 102 73 100 73 166 73 101 74 103 74 166 74 104 75 102 75 166 75 103 76 105 76 166 76 106 77 104 77 166 77 105 78 107 78 166 78 108 79 106 79 166 79 107 80 109 80 166 80 110 81 108 81 166 81 109 82 111 82 166 82 112 83 110 83 166 83 111 84 113 84 166 84 114 85 112 85 166 85 113 86 115 86 166 86 116 87 114 87 166 87 115 88 117 88 166 88 118 89 116 89 166 89 117 90 119 90 166 90 120 91 118 91 166 91 119 92 121 92 166 92 122 93 120 93 166 93 121 94 123 94 166 94 124 95 122 95 166 95 123 96 125 96 166 96 126 97 124 97 166 97 125 98 127 98 166 98 128 99 126 99 166 99 127 100 129 100 166 100 130 101 128 101 166 101 129 102 131 102 166 102 131 103 130 103 166 103 133 104 132 104 167 104 132 105 134 105 167 105 135 106 133 106 167 106 134 107 136 107 167 107 137 108 135 108 167 108 136 109 138 109 167 109 139 110 137 110 167 110 138 111 140 111 167 111 141 112 139 112 167 112 140 113 142 113 167 113 143 114 141 114 167 114 142 115 144 115 167 115 145 116 143 116 167 116 144 117 146 117 167 117 147 118 145 118 167 118 146 119 148 119 167 119 149 120 147 120 167 120 148 121 150 121 167 121 151 122 149 122 167 122 150 123 152 123 167 123 153 124 151 124 167 124 152 125 154 125 167 125 155 126 153 126 167 126 154 127 156 127 167 127 157 128 155 128 167 128 156 129 158 129 167 129 159 130 157 130 167 130 158 131 160 131 167 131 161 132 159 132 167 132 160 133 162 133 167 133 163 134 161 134 167 134 162 135 164 135 167 135 165 136 163 136 167 136 164 137 165 137 167 137 30 138 31 138 169 138 169 138 168 138 30 138 32 139 30 139 168 139 168 139 170 139 32 139 31 140 33 140 171 140 171 140 169 140 31 140 34 141 32 141 170 141 170 141 172 141 34 141 33 142 35 142 173 142 173 142 171 142 33 142 36 143 34 143 172 143 172 143 174 143 36 143 35 144 37 144 175 144 175 144 173 144 35 144 38 145 36 145 174 145 174 145 176 145 38 145 37 146 39 146 177 146 177 146 175 146 37 146 40 147 38 147 176 147 176 147 178 147 40 147 39 148 41 148 179 148 179 148 177 148 39 148 42 149 40 149 178 149 178 149 180 149 42 149 41 150 43 150 181 150 181 150 179 150 41 150 44 151 42 151 180 151 180 151 182 151 44 151 43 152 45 152 183 152 183 152 181 152 43 152 46 153 44 153 182 153 182 153 184 153 46 153 45 154 47 154 185 154 185 154 183 154 45 154 48 155 46 155 184 155 184 155 186 155 48 155 47 156 49 156 187 156 187 156 185 156 47 156 50 157 48 157 186 157 186 157 188 157 50 157 49 158 51 158 189 158 189 158 187 158 49 158 52 159 50 159 188 159 188 159 190 159 52 159 51 160 53 160 191 160 191 160 189 160 51 160 54 161 52 161 190 161 190 161 192 161 54 161 53 162 55 162 193 162 193 162 191 162 53 162 56 163 54 163 192 163 192 163 194 163 56 163 55 164 57 164 195 164 195 164 193 164 55 164 58 165 56 165 194 165 194 165 196 165 58 165 57 166 59 166 197 166 197 166 195 166 57 166 60 167 58 167 196 167 196 167 198 167 60 167 59 168 61 168 199 168 199 168 197 168 59 168 62 169 60 169 198 169 198 169 200 169 62 169 61 170 63 170 201 170 201 170 199 170 61 170 63 171 62 171 200 171 200 171 201 171 63 171 65 172 64 172 202 172 202 172 203 172 65 172 64 173 66 173 204 173 204 173 202 173 64 173 67 174 65 174 203 174 203 174 205 174 67 174 66 175 68 175 206 175 206 175 204 175 66 175 69 176 67 176 205 176 205 176 207 176 69 176 68 177 70 177 208 177 208 177 206 177 68 177 71 178 69 178 207 178 207 178 209 178 71 178 70 179 72 179 210 179 210 179 208 179 70 179 73 180 71 180 209 180 209 180 211 180 73 180 72 181 74 181 212 181 212 181 210 181 72 181 75 182 73 182 211 182 211 182 213 182 75 182 74 183 76 183 214 183 214 183 212 183 74 183 77 184 75 184 213 184 213 184 215 184 77 184 76 185 78 185 216 185 216 185 214 185 76 185 79 186 77 186 215 186 215 186 217 186 79 186 78 187 80 187 218 187 218 187 216 187 78 187 81 188 79 188 217 188 217 188 219 188 81 188 80 189 82 189 220 189 220 189 218 189 80 189 83 190 81 190 219 190 219 190 221 190 83 190 82 191 84 191 222 191 222 191 220 191 82 191 85 192 83 192 221 192 221 192 223 192 85 192 84 193 86 193 224 193 224 193 222 193 84 193 87 194 85 194 223 194 223 194 225 194 87 194 86 195 88 195 226 195 226 195 224 195 86 195 89 196 87 196 225 196 225 196 227 196 89 196 88 197 90 197 228 197 228 197 226 197 88 197 91 198 89 198 227 198 227 198 229 198 91 198 90 199 92 199 230 199 230 199 228 199 90 199 93 200 91 200 229 200 229 200 231 200 93 200 92 201 94 201 232 201 232 201 230 201 92 201 95 202 93 202 231 202 231 202 233 202 95 202 94 203 96 203 234 203 234 203 232 203 94 203 97 204 95 204 233 204 233 204 235 204 97 204 96 205 97 205 235 205 235 205 234 205 96 205 375 206 374 206 236 206 236 206 237 206 375 206 374 207 376 207 238 207 238 207 236 207 374 207 377 208 375 208 237 208 237 208 239 208 377 208 376 209 378 209 240 209 240 209 238 209 376 209 379 210 377 210 239 210 239 210 241 210 379 210 378 211 380 211 242 211 242 211 240 211 378 211 381 212 379 212 241 212 241 212 243 212 381 212 380 213 382 213 244 213 244 213 242 213 380 213 383 214 381 214 243 214 243 214 245 214 383 214 382 215 384 215 246 215 246 215 244 215 382 215 385 216 383 216 245 216 245 216 247 216 385 216 384 217 386 217 248 217 248 217 246 217 384 217 387 218 385 218 247 218 247 218 249 218 387 218 386 219 388 219 250 219 250 219 248 219 386 219 389 220 387 220 249 220 249 220 251 220 389 220 388 221 390 221 252 221 252 221 250 221 388 221 391 222 389 222 251 222 251 222 253 222 391 222 390 223 392 223 254 223 254 223 252 223 390 223 393 224 391 224 253 224 253 224 255 224 393 224 392 225 394 225 256 225 256 225 254 225 392 225 395 226 393 226 255 226 255 226 257 226 395 226 394 227 396 227 258 227 258 227 256 227 394 227 397 228 395 228 257 228 257 228 259 228 397 228 396 229 398 229 260 229 260 229 258 229 396 229 399 230 397 230 259 230 259 230 261 230 399 230 398 231 400 231 262 231 262 231 260 231 398 231 401 232 399 232 261 232 261 232 263 232 401 232 400 233 402 233 264 233 264 233 262 233 400 233 403 234 401 234 263 234 263 234 265 234 403 234 402 235 404 235 266 235 266 235 264 235 402 235 405 236 403 236 265 236 265 236 267 236 405 236 404 237 406 237 268 237 268 237 266 237 404 237 407 238 405 238 267 238 267 238 269 238 407 238 406 239 407 239 269 239 269 239 268 239 406 239 408 240 409 240 271 240 271 240 270 240 408 240 410 241 408 241 270 241 270 241 272 241 410 241 409 242 411 242 273 242 273 242 271 242 409 242 412 243 410 243 272 243 272 243 274 243 412 243 411 244 413 244 275 244 275 244 273 244 411 244 414 245 412 245 274 245 274 245 276 245 414 245 413 246 415 246 277 246 277 246 275 246 413 246 416 247 414 247 276 247 276 247 278 247 416 247 415 248 417 248 279 248 279 248 277 248 415 248 418 249 416 249 278 249 278 249 280 249 418 249 417 250 419 250 281 250 281 250 279 250 417 250 420 251 418 251 280 251 280 251 282 251 420 251 419 252 421 252 283 252 283 252 281 252 419 252 422 253 420 253 282 253 282 253 284 253 422 253 421 254 423 254 285 254 285 254 283 254 421 254 424 255 422 255 284 255 284 255 286 255 424 255 423 256 425 256 287 256 287 256 285 256 423 256 426 257 424 257 286 257 286 257 288 257 426 257 425 258 427 258 289 258 289 258 287 258 425 258 428 259 426 259 288 259 288 259 290 259 428 259 427 260 429 260 291 260 291 260 289 260 427 260 430 261 428 261 290 261 290 261 292 261 430 261 429 262 431 262 293 262 293 262 291 262 429 262 432 263 430 263 292 263 292 263 294 263 432 263 431 264 433 264 295 264 295 264 293 264 431 264 434 265 432 265 294 265 294 265 296 265 434 265 433 266 435 266 297 266 297 266 295 266 433 266 436 267 434 267 296 267 296 267 298 267 436 267 435 268 437 268 299 268 299 268 297 268 435 268 438 269 436 269 298 269 298 269 300 269 438 269 437 270 439 270 301 270 301 270 299 270 437 270 440 271 438 271 300 271 300 271 302 271 440 271 439 272 441 272 303 272 303 272 301 272 439 272 441 273 440 273 302 273 302 273 303 273 441 273 307 274 306 274 304 274 306 275 308 275 304 275 309 276 307 276 304 276 308 277 310 277 304 277 311 278 309 278 304 278 310 279 312 279 304 279 313 280 311 280 304 280 312 281 314 281 304 281 315 282 313 282 304 282 314 283 316 283 304 283 317 284 315 284 304 284 316 285 318 285 304 285 319 286 317 286 304 286 318 287 320 287 304 287 321 288 319 288 304 288 320 289 322 289 304 289 323 290 321 290 304 290 322 291 324 291 304 291 325 292 323 292 304 292 324 293 326 293 304 293 327 294 325 294 304 294 326 295 328 295 304 295 329 296 327 296 304 296 328 297 330 297 304 297 331 298 329 298 304 298 330 299 332 299 304 299 333 300 331 300 304 300 332 301 334 301 304 301 335 302 333 302 304 302 334 303 336 303 304 303 337 304 335 304 304 304 336 305 338 305 304 305 339 306 337 306 304 306 338 307 339 307 304 307 340 308 341 308 305 308 342 309 340 309 305 309 341 310 343 310 305 310 344 311 342 311 305 311 343 312 345 312 305 312 346 313 344 313 305 313 345 314 347 314 305 314 348 315 346 315 305 315 347 316 349 316 305 316 350 317 348 317 305 317 349 318 351 318 305 318 352 319 350 319 305 319 351 320 353 320 305 320 354 321 352 321 305 321 353 322 355 322 305 322 356 323 354 323 305 323 355 324 357 324 305 324 358 325 356 325 305 325 357 326 359 326 305 326 360 327 358 327 305 327 359 328 361 328 305 328 362 329 360 329 305 329 361 330 363 330 305 330 364 331 362 331 305 331 363 332 365 332 305 332 366 333 364 333 305 333 365 334 367 334 305 334 368 335 366 335 305 335 367 336 369 336 305 336 370 337 368 337 305 337 369 338 371 338 305 338 372 339 370 339 305 339 371 340 373 340 305 340 373 341 372 341 305 341 440 342 406 342 404 342 404 342 438 342 440 342 438 343 404 343 402 343 402 343 436 343 438 343 436 344 402 344 400 344 400 344 434 344 436 344 434 345 400 345 398 345 398 345 432 345 434 345 432 346 398 346 396 346 396 346 430 346 432 346 430 347 396 347 394 347 394 347 428 347 430 347 421 348 419 348 385 348 385 348 387 348 421 348 419 349 417 349 383 349 383 349 385 349 419 349 417 350 415 350 381 350 381 350 383 350 417 350 415 351 413 351 379 351 379 351 381 351 415 351 413 352 411 352 377 352 377 352 379 352 413 352 411 353 409 353 375 353 375 353 377 353 411 353 374 354 375 354 409 354 409 354 408 354 374 354 376 355 374 355 408 355 408 355 410 355 376 355 378 356 376 356 410 356 410 356 412 356 378 356 380 357 378 357 412 357 412 357 414 357 380 357 382 358 380 358 414 358 414 358 416 358 382 358 384 359 382 359 416 359 416 359 418 359 384 359 386 360 384 360 418 360 418 360 420 360 386 360 387 361 389 361 423 361 423 361 421 361 387 361 388 362 386 362 420 362 420 362 422 362 388 362 389 363 391 363 425 363 425 363 423 363 389 363 390 364 388 364 422 364 422 364 424 364 390 364 391 365 393 365 427 365 427 365 425 365 391 365 392 366 390 366 424 366 424 366 426 366 392 366 393 367 395 367 429 367 429 367 427 367 393 367 394 368 392 368 426 368 426 368 428 368 394 368 395 369 397 369 431 369 431 369 429 369 395 369 397 370 399 370 433 370 433 370 431 370 397 370 399 371 401 371 435 371 435 371 433 371 399 371 401 372 403 372 437 372 437 372 435 372 401 372 403 373 405 373 439 373 439 373 437 373 403 373 405 374 407 374 441 374 441 374 439 374 405 374 407 375 406 375 440 375 440 375 441 375 407 375 306 376 307 376 341 376 341 376 340 376 306 376 308 377 306 377 340 377 340 377 342 377 308 377 310 378 308 378 342 378 342 378 344 378 310 378 312 379 310 379 344 379 344 379 346 379 312 379 314 380 312 380 346 380 346 380 348 380 314 380 316 381 314 381 348 381 348 381 350 381 316 381 318 382 316 382 350 382 350 382 352 382 318 382 319 383 321 383 355 383 355 383 353 383 319 383 320 384 318 384 352 384 352 384 354 384 320 384 321 385 323 385 357 385 357 385 355 385 321 385 322 386 320 386 354 386 354 386 356 386 322 386 323 387 325 387 359 387 359 387 357 387 323 387 324 388 322 388 356 388 356 388 358 388 324 388 325 389 327 389 361 389 361 389 359 389 325 389 326 390 324 390 358 390 358 390 360 390 326 390 327 391 329 391 363 391 363 391 361 391 327 391 329 392 331 392 365 392 365 392 363 392 329 392 331 393 333 393 367 393 367 393 365 393 331 393 333 394 335 394 369 394 369 394 367 394 333 394 335 395 337 395 371 395 371 395 369 395 335 395 337 396 339 396 373 396 373 396 371 396 337 396 339 397 338 397 372 397 372 397 373 397 339 397 372 398 338 398 336 398 336 398 370 398 372 398 370 399 336 399 334 399 334 399 368 399 370 399 368 400 334 400 332 400 332 400 366 400 368 400 366 401 332 401 330 401 330 401 364 401 366 401 364 402 330 402 328 402 328 402 362 402 364 402 362 403 328 403 326 403 326 403 360 403 362 403 353 404 351 404 317 404 317 404 319 404 353 404 351 405 349 405 315 405 315 405 317 405 351 405 349 406 347 406 313 406 313 406 315 406 349 406 347 407 345 407 311 407 311 407 313 407 347 407 345 408 343 408 309 408 309 408 311 408 345 408 343 409 341 409 307 409 307 409 309 409 343 409 540 410 542 410 576 410 576 410 574 410 540 410 538 411 540 411 574 411 574 411 572 411 538 411 536 412 538 412 572 412 572 412 570 412 536 412 534 413 536 413 570 413 570 413 568 413 534 413 532 414 534 414 568 414 568 414 566 414 532 414 530 415 532 415 566 415 566 415 564 415 530 415 521 416 555 416 557 416 557 416 523 416 521 416 519 417 553 417 555 417 555 417 521 417 519 417 517 418 551 418 553 418 553 418 519 418 517 418 515 419 549 419 551 419 551 419 517 419 515 419 513 420 547 420 549 420 549 420 515 420 513 420 511 421 545 421 547 421 547 421 513 421 511 421 544 422 545 422 511 422 511 422 510 422 544 422 546 423 544 423 510 423 510 423 512 423 546 423 548 424 546 424 512 424 512 424 514 424 548 424 550 425 548 425 514 425 514 425 516 425 550 425 552 426 550 426 516 426 516 426 518 426 552 426 554 427 552 427 518 427 518 427 520 427 554 427 556 428 554 428 520 428 520 428 522 428 556 428 557 429 559 429 525 429 525 429 523 429 557 429 558 430 556 430 522 430 522 430 524 430 558 430 559 431 561 431 527 431 527 431 525 431 559 431 560 432 558 432 524 432 524 432 526 432 560 432 561 433 563 433 529 433 529 433 527 433 561 433 562 434 560 434 526 434 526 434 528 434 562 434 563 435 565 435 531 435 531 435 529 435 563 435 564 436 562 436 528 436 528 436 530 436 564 436 565 437 567 437 533 437 533 437 531 437 565 437 567 438 569 438 535 438 535 438 533 438 567 438 569 439 571 439 537 439 537 439 535 439 569 439 571 440 573 440 539 440 539 440 537 440 571 440 573 441 575 441 541 441 541 441 539 441 573 441 575 442 577 442 543 442 543 442 541 442 575 442 577 443 576 443 542 443 542 443 543 443 577 443 476 444 477 444 443 444 443 444 442 444 476 444 478 445 476 445 442 445 442 445 444 445 478 445 480 446 478 446 444 446 444 446 446 446 480 446 482 447 480 447 446 447 446 447 448 447 482 447 484 448 482 448 448 448 448 448 450 448 484 448 486 449 484 449 450 449 450 449 452 449 486 449 488 450 486 450 452 450 452 450 454 450 488 450 489 451 491 451 457 451 457 451 455 451 489 451 490 452 488 452 454 452 454 452 456 452 490 452 491 453 493 453 459 453 459 453 457 453 491 453 492 454 490 454 456 454 456 454 458 454 492 454 493 455 495 455 461 455 461 455 459 455 493 455 494 456 492 456 458 456 458 456 460 456 494 456 495 457 497 457 463 457 463 457 461 457 495 457 496 458 494 458 460 458 460 458 462 458 496 458 497 459 499 459 465 459 465 459 463 459 497 459 499 460 501 460 467 460 467 460 465 460 499 460 501 461 503 461 469 461 469 461 467 461 501 461 503 462 505 462 471 462 471 462 469 462 503 462 505 463 507 463 473 463 473 463 471 463 505 463 507 464 509 464 475 464 475 464 473 464 507 464 509 465 508 465 474 465 474 465 475 465 509 465 472 466 474 466 508 466 508 466 506 466 472 466 470 467 472 467 506 467 506 467 504 467 470 467 468 468 470 468 504 468 504 468 502 468 468 468 466 469 468 469 502 469 502 469 500 469 466 469 464 470 466 470 500 470 500 470 498 470 464 470 462 471 464 471 498 471 498 471 496 471 462 471 453 472 487 472 489 472 489 472 455 472 453 472 451 473 485 473 487 473 487 473 453 473 451 473 449 474 483 474 485 474 485 474 451 474 449 474 447 475 481 475 483 475 483 475 449 475 447 475 445 476 479 476 481 476 481 476 447 476 445 476 443 477 477 477 479 477 479 477 445 477 443 477 510 478 511 478 578 478 512 479 510 479 578 479 511 480 513 480 578 480 514 481 512 481 578 481 513 482 515 482 578 482 516 483 514 483 578 483 515 484 517 484 578 484 518 485 516 485 578 485 517 486 519 486 578 486 520 487 518 487 578 487 519 488 521 488 578 488 522 489 520 489 578 489 521 490 523 490 578 490 524 491 522 491 578 491 523 492 525 492 578 492 526 493 524 493 578 493 525 494 527 494 578 494 528 495 526 495 578 495 527 496 529 496 578 496 530 497 528 497 578 497 529 498 531 498 578 498 532 499 530 499 578 499 531 500 533 500 578 500 534 501 532 501 578 501 533 502 535 502 578 502 536 503 534 503 578 503 535 504 537 504 578 504 538 505 536 505 578 505 537 506 539 506 578 506 540 507 538 507 578 507 539 508 541 508 578 508 542 509 540 509 578 509 541 510 543 510 578 510 543 511 542 511 578 511 545 512 544 512 579 512 544 513 546 513 579 513 547 514 545 514 579 514 546 515 548 515 579 515 549 516 547 516 579 516 548 517 550 517 579 517 551 518 549 518 579 518 550 519 552 519 579 519 553 520 551 520 579 520 552 521 554 521 579 521 555 522 553 522 579 522 554 523 556 523 579 523 557 524 555 524 579 524 556 525 558 525 579 525 559 526 557 526 579 526 558 527 560 527 579 527 561 528 559 528 579 528 560 529 562 529 579 529 563 530 561 530 579 530 562 531 564 531 579 531 565 532 563 532 579 532 564 533 566 533 579 533 567 534 565 534 579 534 566 535 568 535 579 535 569 536 567 536 579 536 568 537 570 537 579 537 571 538 569 538 579 538 570 539 572 539 579 539 573 540 571 540 579 540 572 541 574 541 579 541 575 542 573 542 579 542 574 543 576 543 579 543 577 544 575 544 579 544 576 545 577 545 579 545 442 546 443 546 581 546 581 546 580 546 442 546 444 547 442 547 580 547 580 547 582 547 444 547 443 548 445 548 583 548 583 548 581 548 443 548 446 549 444 549 582 549 582 549 584 549 446 549 445 550 447 550 585 550 585 550 583 550 445 550 448 551 446 551 584 551 584 551 586 551 448 551 447 552 449 552 587 552 587 552 585 552 447 552 450 553 448 553 586 553 586 553 588 553 450 553 449 554 451 554 589 554 589 554 587 554 449 554 452 555 450 555 588 555 588 555 590 555 452 555 451 556 453 556 591 556 591 556 589 556 451 556 454 557 452 557 590 557 590 557 592 557 454 557 453 558 455 558 593 558 593 558 591 558 453 558 456 559 454 559 592 559 592 559 594 559 456 559 455 560 457 560 595 560 595 560 593 560 455 560 458 561 456 561 594 561 594 561 596 561 458 561 457 562 459 562 597 562 597 562 595 562 457 562 460 563 458 563 596 563 596 563 598 563 460 563 459 564 461 564 599 564 599 564 597 564 459 564 462 565 460 565 598 565 598 565 600 565 462 565 461 566 463 566 601 566 601 566 599 566 461 566 464 567 462 567 600 567 600 567 602 567 464 567 463 568 465 568 603 568 603 568 601 568 463 568 466 569 464 569 602 569 602 569 604 569 466 569 465 570 467 570 605 570 605 570 603 570 465 570 468 571 466 571 604 571 604 571 606 571 468 571 467 572 469 572 607 572 607 572 605 572 467 572 470 573 468 573 606 573 606 573 608 573 470 573 469 574 471 574 609 574 609 574 607 574 469 574 472 575 470 575 608 575 608 575 610 575 472 575 471 576 473 576 611 576 611 576 609 576 471 576 474 577 472 577 610 577 610 577 612 577 474 577 473 578 475 578 613 578 613 578 611 578 473 578 475 579 474 579 612 579 612 579 613 579 475 579 477 580 476 580 614 580 614 580 615 580 477 580 476 581 478 581 616 581 616 581 614 581 476 581 479 582 477 582 615 582 615 582 617 582 479 582 478 583 480 583 618 583 618 583 616 583 478 583 481 584 479 584 617 584 617 584 619 584 481 584 480 585 482 585 620 585 620 585 618 585 480 585 483 586 481 586 619 586 619 586 621 586 483 586 482 587 484 587 622 587 622 587 620 587 482 587 485 588 483 588 621 588 621 588 623 588 485 588 484 589 486 589 624 589 624 589 622 589 484 589 487 590 485 590 623 590 623 590 625 590 487 590 486 591 488 591 626 591 626 591 624 591 486 591 489 592 487 592 625 592 625 592 627 592 489 592 488 593 490 593 628 593 628 593 626 593 488 593 491 594 489 594 627 594 627 594 629 594 491 594 490 595 492 595 630 595 630 595 628 595 490 595 493 596 491 596 629 596 629 596 631 596 493 596 492 597 494 597 632 597 632 597 630 597 492 597 495 598 493 598 631 598 631 598 633 598 495 598 494 599 496 599 634 599 634 599 632 599 494 599 497 600 495 600 633 600 633 600 635 600 497 600 496 601 498 601 636 601 636 601 634 601 496 601 499 602 497 602 635 602 635 602 637 602 499 602 498 603 500 603 638 603 638 603 636 603 498 603 501 604 499 604 637 604 637 604 639 604 501 604 500 605 502 605 640 605 640 605 638 605 500 605 503 606 501 606 639 606 639 606 641 606 503 606 502 607 504 607 642 607 642 607 640 607 502 607 505 608 503 608 641 608 641 608 643 608 505 608 504 609 506 609 644 609 644 609 642 609 504 609 507 610 505 610 643 610 643 610 645 610 507 610 506 611 508 611 646 611 646 611 644 611 506 611 509 612 507 612 645 612 645 612 647 612 509 612 508 613 509 613 647 613 647 613 646 613 508 613 787 614 786 614 648 614 648 614 649 614 787 614 786 615 788 615 650 615 650 615 648 615 786 615 789 616 787 616 649 616 649 616 651 616 789 616 788 617 790 617 652 617 652 617 650 617 788 617 791 618 789 618 651 618 651 618 653 618 791 618 790 619 792 619 654 619 654 619 652 619 790 619 793 620 791 620 653 620 653 620 655 620 793 620 792 621 794 621 656 621 656 621 654 621 792 621 795 622 793 622 655 622 655 622 657 622 795 622 794 623 796 623 658 623 658 623 656 623 794 623 797 624 795 624 657 624 657 624 659 624 797 624 796 625 798 625 660 625 660 625 658 625 796 625 799 626 797 626 659 626 659 626 661 626 799 626 798 627 800 627 662 627 662 627 660 627 798 627 801 628 799 628 661 628 661 628 663 628 801 628 800 629 802 629 664 629 664 629 662 629 800 629 803 630 801 630 663 630 663 630 665 630 803 630 802 631 804 631 666 631 666 631 664 631 802 631 805 632 803 632 665 632 665 632 667 632 805 632 804 633 806 633 668 633 668 633 666 633 804 633 807 634 805 634 667 634 667 634 669 634 807 634 806 635 808 635 670 635 670 635 668 635 806 635 809 636 807 636 669 636 669 636 671 636 809 636 808 637 810 637 672 637 672 637 670 637 808 637 811 638 809 638 671 638 671 638 673 638 811 638 810 639 812 639 674 639 674 639 672 639 810 639 813 640 811 640 673 640 673 640 675 640 813 640 812 641 814 641 676 641 676 641 674 641 812 641 815 642 813 642 675 642 675 642 677 642 815 642 814 643 816 643 678 643 678 643 676 643 814 643 817 644 815 644 677 644 677 644 679 644 817 644 816 645 818 645 680 645 680 645 678 645 816 645 819 646 817 646 679 646 679 646 681 646 819 646 818 647 819 647 681 647 681 647 680 647 818 647 820 648 821 648 683 648 683 648 682 648 820 648 822 649 820 649 682 649 682 649 684 649 822 649 821 650 823 650 685 650 685 650 683 650 821 650 824 651 822 651 684 651 684 651 686 651 824 651 823 652 825 652 687 652 687 652 685 652 823 652 826 653 824 653 686 653 686 653 688 653 826 653 825 654 827 654 689 654 689 654 687 654 825 654 828 655 826 655 688 655 688 655 690 655 828 655 827 656 829 656 691 656 691 656 689 656 827 656 830 657 828 657 690 657 690 657 692 657 830 657 829 658 831 658 693 658 693 658 691 658 829 658 832 659 830 659 692 659 692 659 694 659 832 659 831 660 833 660 695 660 695 660 693 660 831 660 834 661 832 661 694 661 694 661 696 661 834 661 833 662 835 662 697 662 697 662 695 662 833 662 836 663 834 663 696 663 696 663 698 663 836 663 835 664 837 664 699 664 699 664 697 664 835 664 838 665 836 665 698 665 698 665 700 665 838 665 837 666 839 666 701 666 701 666 699 666 837 666 840 667 838 667 700 667 700 667 702 667 840 667 839 668 841 668 703 668 703 668 701 668 839 668 842 669 840 669 702 669 702 669 704 669 842 669 841 670 843 670 705 670 705 670 703 670 841 670 844 671 842 671 704 671 704 671 706 671 844 671 843 672 845 672 707 672 707 672 705 672 843 672 846 673 844 673 706 673 706 673 708 673 846 673 845 674 847 674 709 674 709 674 707 674 845 674 848 675 846 675 708 675 708 675 710 675 848 675 847 676 849 676 711 676 711 676 709 676 847 676 850 677 848 677 710 677 710 677 712 677 850 677 849 678 851 678 713 678 713 678 711 678 849 678 852 679 850 679 712 679 712 679 714 679 852 679 851 680 853 680 715 680 715 680 713 680 851 680 853 681 852 681 714 681 714 681 715 681 853 681 719 682 718 682 716 682 718 683 720 683 716 683 721 684 719 684 716 684 720 685 722 685 716 685 723 686 721 686 716 686 722 687 724 687 716 687 725 688 723 688 716 688 724 689 726 689 716 689 727 690 725 690 716 690 726 691 728 691 716 691 729 692 727 692 716 692 728 693 730 693 716 693 731 694 729 694 716 694 730 695 732 695 716 695 733 696 731 696 716 696 732 697 734 697 716 697 735 698 733 698 716 698 734 699 736 699 716 699 737 700 735 700 716 700 736 701 738 701 716 701 739 702 737 702 716 702 738 703 740 703 716 703 741 704 739 704 716 704 740 705 742 705 716 705 743 706 741 706 716 706 742 707 744 707 716 707 745 708 743 708 716 708 744 709 746 709 716 709 747 710 745 710 716 710 746 711 748 711 716 711 749 712 747 712 716 712 748 713 750 713 716 713 751 714 749 714 716 714 750 715 751 715 716 715 752 716 753 716 717 716 754 717 752 717 717 717 753 718 755 718 717 718 756 719 754 719 717 719 755 720 757 720 717 720 758 721 756 721 717 721 757 722 759 722 717 722 760 723 758 723 717 723 759 724 761 724 717 724 762 725 760 725 717 725 761 726 763 726 717 726 764 727 762 727 717 727 763 728 765 728 717 728 766 729 764 729 717 729 765 730 767 730 717 730 768 731 766 731 717 731 767 732 769 732 717 732 770 733 768 733 717 733 769 734 771 734 717 734 772 735 770 735 717 735 771 736 773 736 717 736 774 737 772 737 717 737 773 738 775 738 717 738 776 739 774 739 717 739 775 740 777 740 717 740 778 741 776 741 717 741 777 742 779 742 717 742 780 743 778 743 717 743 779 744 781 744 717 744 782 745 780 745 717 745 781 746 783 746 717 746 784 747 782 747 717 747 783 748 785 748 717 748 785 749 784 749 717 749 852 750 818 750 816 750 816 750 850 750 852 750 850 751 816 751 814 751 814 751 848 751 850 751 848 752 814 752 812 752 812 752 846 752 848 752 846 753 812 753 810 753 810 753 844 753 846 753 844 754 810 754 808 754 808 754 842 754 844 754 842 755 808 755 806 755 806 755 840 755 842 755 833 756 831 756 797 756 797 756 799 756 833 756 831 757 829 757 795 757 795 757 797 757 831 757 829 758 827 758 793 758 793 758 795 758 829 758 827 759 825 759 791 759 791 759 793 759 827 759 825 760 823 760 789 760 789 760 791 760 825 760 823 761 821 761 787 761 787 761 789 761 823 761 786 762 787 762 821 762 821 762 820 762 786 762 788 763 786 763 820 763 820 763 822 763 788 763 790 764 788 764 822 764 822 764 824 764 790 764 792 765 790 765 824 765 824 765 826 765 792 765 794 766 792 766 826 766 826 766 828 766 794 766 796 767 794 767 828 767 828 767 830 767 796 767 798 768 796 768 830 768 830 768 832 768 798 768 799 769 801 769 835 769 835 769 833 769 799 769 800 770 798 770 832 770 832 770 834 770 800 770 801 771 803 771 837 771 837 771 835 771 801 771 802 772 800 772 834 772 834 772 836 772 802 772 803 773 805 773 839 773 839 773 837 773 803 773 804 774 802 774 836 774 836 774 838 774 804 774 805 775 807 775 841 775 841 775 839 775 805 775 806 776 804 776 838 776 838 776 840 776 806 776 807 777 809 777 843 777 843 777 841 777 807 777 809 778 811 778 845 778 845 778 843 778 809 778 811 779 813 779 847 779 847 779 845 779 811 779 813 780 815 780 849 780 849 780 847 780 813 780 815 781 817 781 851 781 851 781 849 781 815 781 817 782 819 782 853 782 853 782 851 782 817 782 819 783 818 783 852 783 852 783 853 783 819 783 718 784 719 784 753 784 753 784 752 784 718 784 720 785 718 785 752 785 752 785 754 785 720 785 722 786 720 786 754 786 754 786 756 786 722 786 724 787 722 787 756 787 756 787 758 787 724 787 726 788 724 788 758 788 758 788 760 788 726 788 728 789 726 789 760 789 760 789 762 789 728 789 730 790 728 790 762 790 762 790 764 790 730 790 731 791 733 791 767 791 767 791 765 791 731 791 732 792 730 792 764 792 764 792 766 792 732 792 733 793 735 793 769 793 769 793 767 793 733 793 734 794 732 794 766 794 766 794 768 794 734 794 735 795 737 795 771 795 771 795 769 795 735 795 736 796 734 796 768 796 768 796 770 796 736 796 737 797 739 797 773 797 773 797 771 797 737 797 738 798 736 798 770 798 770 798 772 798 738 798 739 799 741 799 775 799 775 799 773 799 739 799 741 800 743 800 777 800 777 800 775 800 741 800 743 801 745 801 779 801 779 801 777 801 743 801 745 802 747 802 781 802 781 802 779 802 745 802 747 803 749 803 783 803 783 803 781 803 747 803 749 804 751 804 785 804 785 804 783 804 749 804 751 805 750 805 784 805 784 805 785 805 751 805 784 806 750 806 748 806 748 806 782 806 784 806 782 807 748 807 746 807 746 807 780 807 782 807 780 808 746 808 744 808 744 808 778 808 780 808 778 809 744 809 742 809 742 809 776 809 778 809 776 810 742 810 740 810 740 810 774 810 776 810 774 811 740 811 738 811 738 811 772 811 774 811 765 812 763 812 729 812 729 812 731 812 765 812 763 813 761 813 727 813 727 813 729 813 763 813 761 814 759 814 725 814 725 814 727 814 761 814 759 815 757 815 723 815 723 815 725 815 759 815 757 816 755 816 721 816 721 816 723 816 757 816 755 817 753 817 719 817 719 817 721 817 755 817 8 818 19 818 20 818 20 818 9 818 8 818 8 819 12 819 23 819 23 819 19 819 8 819 6 820 9 820 20 820 20 820 18 820 6 820 0 821 26 821 27 821 27 821 1 821 0 821 0 822 2 822 4 822 24 823 28 823 26 823 0 824 4 824 24 824 24 824 26 824 0 824 4 825 10 825 21 825 21 825 24 825 4 825 10 826 13 826 17 826 17 826 21 826 10 826 25 827 27 827 29 827 1 828 5 828 3 828 1 829 27 829 25 829 25 829 5 829 1 829 5 830 25 830 22 830 22 830 11 830 5 830 11 831 22 831 23 831 23 831 12 831 11 831 6 832 18 832 15 832 15 832 7 832 6 832 7 833 15 833 16 833 16 833 14 833 7 833 13 834 14 834 16 834 16 834 17 834 13 834 2 835 0 835 1 835 1 835 3 835 2 835 6 836 7 836 14 836 14 836 9 836 6 836 9 837 14 837 12 837 12 837 8 837 9 837 14 838 13 838 10 838 10 838 11 838 14 838 16 839 20 839 19 839 19 839 23 839 16 839 24 840 21 840 22 840 22 840 25 840 24 840 29 841 27 841 26 841 26 841 28 841 29 841 10 842 4 842 5 842 5 842 11 842 10 842 21 843 17 843 16 843 16 843 22 843 21 843 15 844 18 844 20 844 20 844 16 844 15 844 875 845 874 845 877 845 877 846 874 846 876 846 859 847 858 847 867 847 867 848 858 848 866 848 857 849 856 849 855 849 856 850 854 850 855 850 862 851 864 851 870 851 870 852 864 852 872 852 870 853 872 853 876 853 864 854 862 854 856 854 873 855 877 855 872 855 872 856 877 856 876 856 874 857 868 857 876 857 876 858 868 858 870 858 868 859 866 859 860 859 860 860 866 860 858 860 860 861 854 861 862 861 862 862 854 862 856 862 857 863 865 863 856 863 856 864 865 864 864 864 865 865 863 865 873 865 873 866 863 866 871 866 873 867 871 867 877 867 868 868 874 868 866 868 858 869 854 869 860 869 865 870 857 870 863 870 869 871 875 871 871 871 871 872 875 872 877 872 875 873 867 873 874 873 874 874 867 874 866 874 859 875 855 875 858 875 855 876 854 876 858 876 855 877 861 877 857 877 857 878 861 878 863 878 875 879 869 879 867 879 855 880 859 880 861 880 861 881 859 881 869 881 869 882 859 882 867 882 878 883 879 883 880 883 880 884 879 884 881 884 890 885 891 885 882 885 882 886 891 886 883 886 900 887 901 887 898 887 898 888 901 888 899 888 895 889 897 889 887 889 887 890 897 890 889 890 887 891 889 891 881 891 897 892 895 892 901 892 888 893 880 893 889 893 889 894 880 894 881 894 879 895 885 895 881 895 881 896 885 896 887 896 885 897 883 897 893 897 893 898 883 898 891 898 893 899 899 899 895 899 895 900 899 900 901 900 900 901 896 901 901 901 901 902 896 902 897 902 888 903 886 903 880 903 885 904 879 904 883 904 893 905 891 905 899 905 896 906 900 906 894 906 884 907 878 907 886 907 886 908 878 908 880 908 878 909 882 909 879 909 879 910 882 910 883 910 890 911 898 911 891 911 891 912 898 912 899 912 898 913 892 913 900 913 900 914 892 914 894 914 878 915 884 915 882 915 898 916 890 916 892 916 892 917 890 917 884 917 884 918 890 918 882 918 902 919 903 919 904 919 904 920 903 920 905 920 914 921 915 921 906 921 906 922 915 922 907 922 924 923 925 923 922 923 922 924 925 924 923 924 919 925 921 925 911 925 911 926 921 926 913 926 911 927 913 927 905 927 921 928 919 928 925 928 912 929 904 929 913 929 913 930 904 930 905 930 903 931 909 931 905 931 905 932 909 932 911 932 909 933 907 933 917 933 917 934 907 934 915 934 917 935 923 935 919 935 919 936 923 936 925 936 924 937 920 937 925 937 925 938 920 938 921 938 920 939 918 939 912 939 912 940 918 940 910 940 912 941 910 941 904 941 909 942 903 942 907 942 917 943 915 943 923 943 920 944 924 944 918 944 908 945 902 945 910 945 910 946 902 946 904 946 902 947 906 947 903 947 903 948 906 948 907 948 914 949 922 949 915 949 915 950 922 950 923 950 922 951 916 951 924 951 924 952 916 952 918 952 902 953 908 953 906 953 922 954 914 954 916 954 916 955 914 955 908 955 908 956 914 956 906 956 884 957 886 957 894 957 894 957 892 957 884 957 886 958 888 958 896 958 896 958 894 958 886 958 888 959 889 959 897 959 897 959 896 959 888 959 885 960 893 960 895 960 895 960 887 960 885 960 942 961 934 961 932 961 932 961 940 961 942 961 939 962 938 962 930 962 930 962 931 962 939 962 941 963 939 963 931 963 931 963 933 963 941 963 943 964 941 964 933 964 933 964 935 964 943 964 943 965 937 965 945 965 935 966 937 966 943 966 929 967 937 967 935 967 949 968 943 968 945 968 927 969 935 969 933 969 929 970 935 970 927 970 936 971 929 971 928 971 937 972 929 972 936 972 948 973 945 973 944 973 949 974 945 974 948 974 941 975 949 975 947 975 943 976 949 976 941 976 931 977 927 977 933 977 934 978 936 978 928 978 942 979 948 979 944 979 939 980 941 980 947 980 926 981 931 981 930 981 927 982 931 982 926 982 932 983 928 983 926 983 934 984 928 984 932 984 934 985 944 985 936 985 942 986 944 986 934 986 946 987 942 987 940 987 948 988 942 988 946 988 938 989 947 989 946 989 939 990 947 990 938 990 930 991 932 991 926 991 940 992 938 992 946 992 940 993 930 993 938 993 932 994 930 994 940 994 929 995 926 995 928 995 927 996 926 996 929 996 945 997 936 997 944 997 937 998 936 998 945 998 947 999 948 999 946 999 949 1000 948 1000 947 1000 909 1001 917 1001 919 1001 919 1001 911 1001 909 1001 908 1002 910 1002 918 1002 918 1002 916 1002 908 1002 912 1003 913 1003 921 1003 921 1003 920 1003 912 1003 861 1004 869 1004 871 1004 871 1004 863 1004 861 1004 854 1005 862 1005 870 1005 870 1005 868 1005 854 1005 864 1006 865 1006 873 1006 873 1006 872 1006 864 1006 963 1007 962 1007 954 1007 954 1007 955 1007 963 1007 973 1008 965 1008 957 1008 957 1008 959 1008 973 1008 966 1009 958 1009 956 1009 956 1009 964 1009 966 1009 958 1010 968 1010 960 1010 966 1011 968 1011 958 1011 972 1012 968 1012 966 1012 952 1013 958 1013 960 1013 970 1014 966 1014 964 1014 972 1015 966 1015 970 1015 972 1016 973 1016 969 1016 968 1017 972 1017 969 1017 953 1018 960 1018 961 1018 952 1019 960 1019 953 1019 956 1020 952 1020 950 1020 958 1021 952 1021 956 1021 962 1022 970 1022 964 1022 969 1023 973 1023 967 1023 959 1024 953 1024 961 1024 954 1025 956 1025 950 1025 954 1026 964 1026 956 1026 962 1027 964 1027 954 1027 971 1028 962 1028 963 1028 970 1029 962 1029 971 1029 965 1030 973 1030 971 1030 967 1031 973 1031 965 1031 967 1032 961 1032 969 1032 959 1033 961 1033 967 1033 951 1034 959 1034 957 1034 953 1035 959 1035 951 1035 955 1036 950 1036 951 1036 954 1037 950 1037 955 1037 963 1038 965 1038 971 1038 957 1039 955 1039 951 1039 957 1040 963 1040 955 1040 965 1041 963 1041 957 1041 971 1042 973 1042 972 1042 970 1043 971 1043 972 1043 960 1044 969 1044 961 1044 968 1045 969 1045 960 1045 950 1046 953 1046 951 1046 952 1047 953 1047 950 1047 1091 1048 1090 1048 1072 1048 1072 1049 1090 1049 986 1049 1072 1050 986 1050 987 1050 1015 1051 1008 1051 1105 1051 1509 1052 1507 1052 1635 1052 1635 1053 1507 1053 1505 1053 1505 1054 1504 1054 1635 1054 1635 1055 1504 1055 1502 1055 1635 1056 1502 1056 1501 1056 1501 1057 1500 1057 1635 1057 1635 1058 1500 1058 1498 1058 1635 1059 1498 1059 1497 1059 1497 1060 1496 1060 1635 1060 1635 1061 1496 1061 1494 1061 1635 1062 1494 1062 1599 1062 1599 1063 1494 1063 1493 1063 1599 1064 1493 1064 1573 1064 1573 1065 1493 1065 1523 1065 1493 1066 1491 1066 1523 1066 1523 1067 1491 1067 1490 1067 1523 1068 1490 1068 1479 1068 1425 1069 1423 1069 1363 1069 1412 1070 1410 1070 1369 1070 1369 1071 1410 1071 1409 1071 1369 1072 1409 1072 1407 1072 1400 1073 1378 1073 1399 1073 1399 1074 1378 1074 1377 1074 1399 1075 1377 1075 1397 1075 1397 1076 1377 1076 1375 1076 1397 1077 1375 1077 1401 1077 1401 1078 1375 1078 1370 1078 1401 1079 1370 1079 1403 1079 1403 1080 1370 1080 1369 1080 1403 1081 1369 1081 1406 1081 1406 1082 1369 1082 1407 1082 1422 1083 1420 1083 1366 1083 1420 1084 1417 1084 1366 1084 1366 1085 1417 1085 1416 1085 1366 1086 1416 1086 1369 1086 1369 1087 1416 1087 1413 1087 1369 1088 1413 1088 1412 1088 1422 1089 1366 1089 1423 1089 1423 1090 1366 1090 1364 1090 1423 1091 1364 1091 1363 1091 1360 1092 1430 1092 1426 1092 1425 1093 1363 1093 1426 1093 1426 1094 1363 1094 1361 1094 1426 1095 1361 1095 1360 1095 1479 1096 1467 1096 1523 1096 1523 1097 1467 1097 1465 1097 1523 1098 1465 1098 1463 1098 1463 1099 1465 1099 1452 1099 1463 1100 1452 1100 1460 1100 1460 1101 1452 1101 1451 1101 1460 1102 1451 1102 1444 1102 1444 1103 1451 1103 1431 1103 1444 1104 1431 1104 1430 1104 1360 1105 1357 1105 1430 1105 1430 1106 1357 1106 1354 1106 1430 1107 1354 1107 1444 1107 1444 1108 1354 1108 1353 1108 1353 1109 1351 1109 1444 1109 1444 1110 1351 1110 1350 1110 1444 1111 1350 1111 1391 1111 1391 1112 1350 1112 1348 1112 1348 1113 1347 1113 1391 1113 1391 1114 1347 1114 1346 1114 1391 1115 1346 1115 1336 1115 1346 1116 1342 1116 1336 1116 1336 1117 1342 1117 1329 1117 1336 1118 1329 1118 1323 1118 1323 1119 1329 1119 1328 1119 1323 1120 1328 1120 1310 1120 1310 1121 1328 1121 1245 1121 1245 1122 1328 1122 1307 1122 1245 1123 1307 1123 1244 1123 1244 1124 1307 1124 1303 1124 1244 1125 1303 1125 1283 1125 1283 1126 1281 1126 1244 1126 1244 1127 1281 1127 1280 1127 1244 1128 1280 1128 1195 1128 1274 1129 1131 1129 1276 1129 1276 1130 1131 1130 1195 1130 1276 1131 1195 1131 1278 1131 1278 1132 1195 1132 1280 1132 1274 1133 1273 1133 1131 1133 1131 1134 1273 1134 1272 1134 1131 1135 1272 1135 1270 1135 1270 1136 1269 1136 1131 1136 1131 1137 1269 1137 1268 1137 1131 1138 1268 1138 1266 1138 1266 1139 1265 1139 1131 1139 1131 1140 1265 1140 1264 1140 1131 1141 1264 1141 1262 1141 1262 1142 1251 1142 1131 1142 1131 1143 1251 1143 1252 1143 1131 1144 1252 1144 1111 1144 1210 1145 1207 1145 1038 1145 1223 1146 1222 1146 1252 1146 1252 1147 1222 1147 1219 1147 1252 1148 1219 1148 1217 1148 1217 1149 1216 1149 1252 1149 1252 1150 1216 1150 1214 1150 1252 1151 1214 1151 1213 1151 1207 1152 1206 1152 1038 1152 1038 1153 1206 1153 1204 1153 1038 1154 1204 1154 1203 1154 1203 1155 1201 1155 1038 1155 1038 1156 1201 1156 1199 1156 1038 1157 1199 1157 1016 1157 1016 1158 1199 1158 1198 1158 1016 1159 1198 1159 992 1159 992 1160 1198 1160 1176 1160 992 1161 1176 1161 1167 1161 1213 1162 1210 1162 1252 1162 1252 1163 1210 1163 1038 1163 1252 1164 1038 1164 1111 1164 1111 1165 1038 1165 1037 1165 1111 1166 1037 1166 1036 1166 1167 1167 1082 1167 992 1167 992 1168 1082 1168 1077 1168 992 1169 1077 1169 1075 1169 1075 1170 1071 1170 992 1170 992 1171 1071 1171 1068 1171 992 1172 1068 1172 989 1172 989 1173 1068 1173 1066 1173 989 1174 1066 1174 995 1174 1066 1175 1065 1175 995 1175 995 1176 1065 1176 1064 1176 1064 1177 1061 1177 995 1177 995 1178 1061 1178 1060 1178 995 1179 1060 1179 1059 1179 1059 1180 1057 1180 995 1180 995 1181 1057 1181 1056 1181 995 1182 1056 1182 1054 1182 1054 1183 1049 1183 995 1183 995 1184 1049 1184 1047 1184 995 1185 1047 1185 1046 1185 1105 1186 1008 1186 1095 1186 1095 1187 1008 1187 1085 1187 1046 1188 1051 1188 995 1188 995 1189 1051 1189 1053 1189 995 1190 1053 1190 1001 1190 1001 1191 1053 1191 1078 1191 1001 1192 1078 1192 1002 1192 1002 1193 1078 1193 1085 1193 1002 1194 1085 1194 1005 1194 1005 1195 1085 1195 1008 1195 1119 1196 1093 1196 1021 1196 1105 1197 1106 1197 1015 1197 1015 1198 1106 1198 1120 1198 1015 1199 1120 1199 1119 1199 1015 1200 1119 1200 1021 1200 1043 1201 1041 1201 1069 1201 1069 1202 1041 1202 1040 1202 1069 1203 1040 1203 1093 1203 1093 1204 1040 1204 1030 1204 1093 1205 1030 1205 1021 1205 1069 1206 1052 1206 1043 1206 1043 1207 1052 1207 1044 1207 1259 1208 1261 1208 1236 1208 1236 1209 1234 1209 1259 1209 1259 1210 1234 1210 1229 1210 1259 1211 1229 1211 1254 1211 1254 1212 1229 1212 1228 1212 1254 1213 1228 1213 1252 1213 1252 1214 1228 1214 1226 1214 1252 1215 1226 1215 1223 1215 1635 1216 1719 1216 1720 1216 1509 1217 1635 1217 1510 1217 1510 1218 1635 1218 1720 1218 1510 1219 1720 1219 1721 1219 1571 1220 1721 1220 1576 1220 1576 1221 1721 1221 1760 1221 1571 1222 1568 1222 1721 1222 1721 1223 1568 1223 1566 1223 1721 1224 1566 1224 1565 1224 1565 1225 1564 1225 1721 1225 1721 1226 1564 1226 1562 1226 1721 1227 1562 1227 1510 1227 1510 1228 1562 1228 1559 1228 1510 1229 1559 1229 1558 1229 1558 1230 1556 1230 1510 1230 1510 1231 1556 1231 1554 1231 1510 1232 1554 1232 1553 1232 1553 1233 1552 1233 1510 1233 1510 1234 1552 1234 1548 1234 1510 1235 1548 1235 1547 1235 1547 1236 1545 1236 1510 1236 1510 1237 1545 1237 1534 1237 1510 1238 1534 1238 1512 1238 1512 1239 1534 1239 1536 1239 1512 1240 1536 1240 1517 1240 1517 1241 1536 1241 1537 1241 1517 1242 1537 1242 1519 1242 1519 1243 1537 1243 1543 1243 1519 1244 1543 1244 1544 1244 1702 1245 1706 1245 1756 1245 1756 1246 1706 1246 1709 1246 1709 1247 1707 1247 1756 1247 1756 1248 1707 1248 1704 1248 1756 1249 1704 1249 1700 1249 1700 1250 1699 1250 1756 1250 1756 1251 1699 1251 1698 1251 1756 1252 1698 1252 1696 1252 1696 1253 1694 1253 1756 1253 1756 1254 1694 1254 1691 1254 1756 1255 1691 1255 1757 1255 1691 1256 1690 1256 1757 1256 1757 1257 1690 1257 1688 1257 1757 1258 1688 1258 1764 1258 1764 1259 1688 1259 1686 1259 1764 1260 1686 1260 1763 1260 1763 1261 1686 1261 1760 1261 1760 1262 1686 1262 1684 1262 1760 1263 1684 1263 1682 1263 1682 1264 1681 1264 1760 1264 1760 1265 1681 1265 1679 1265 1760 1266 1679 1266 1676 1266 1676 1267 1645 1267 1760 1267 1760 1268 1645 1268 1602 1268 1760 1269 1602 1269 1576 1269 1702 1270 1756 1270 1695 1270 1695 1271 1756 1271 1751 1271 1695 1272 1751 1272 1672 1272 1712 1273 1711 1273 1703 1273 1712 1274 1703 1274 1687 1274 1664 1275 1713 1275 1687 1275 1687 1276 1713 1276 1712 1276 1751 1277 1750 1277 1672 1277 1672 1278 1750 1278 1747 1278 1672 1279 1747 1279 1671 1279 1671 1280 1747 1280 1744 1280 1671 1281 1744 1281 1655 1281 1655 1282 1744 1282 1654 1282 1654 1283 1744 1283 1736 1283 1654 1284 1736 1284 1643 1284 1643 1285 1736 1285 1644 1285 1644 1286 1736 1286 1731 1286 1644 1287 1731 1287 1664 1287 1664 1288 1731 1288 1713 1288 1711 1289 1712 1289 1663 1289 1711 1290 1663 1290 1710 1290 1713 1291 1666 1291 1663 1291 1713 1292 1663 1292 1712 1292 1713 1293 1731 1293 1666 1293 1666 1294 1731 1294 1736 1294 1666 1295 1736 1295 1744 1295 1765 1296 1767 1296 1764 1296 1764 1297 1767 1297 1677 1297 1764 1298 1677 1298 1757 1298 1757 1299 1677 1299 1756 1299 1744 1300 1747 1300 1666 1300 1666 1301 1747 1301 1750 1301 1666 1302 1750 1302 1677 1302 1677 1303 1750 1303 1751 1303 1677 1304 1751 1304 1756 1304 1635 1305 1599 1305 1573 1305 1743 1306 1739 1306 1573 1306 1573 1307 1739 1307 1734 1307 1573 1308 1734 1308 1729 1308 1719 1309 1635 1309 1718 1309 1718 1310 1635 1310 1573 1310 1718 1311 1573 1311 1725 1311 1725 1312 1573 1312 1729 1312 1044 1313 1045 1313 1076 1313 987 1314 988 1314 1072 1314 1072 1315 988 1315 989 1315 995 1316 1042 1316 989 1316 1040 1317 1041 1317 1042 1317 1005 1318 1042 1318 1002 1318 1002 1319 1042 1319 1001 1319 1001 1320 1042 1320 995 1320 1008 1321 1042 1321 1005 1321 989 1322 1042 1322 1072 1322 1042 1323 1073 1323 1072 1323 1043 1324 1044 1324 1076 1324 1043 1325 1076 1325 1041 1325 1041 1326 1076 1326 1042 1326 1042 1327 1021 1327 1030 1327 1042 1328 1030 1328 1040 1328 1008 1329 1015 1329 1042 1329 1042 1330 1015 1330 1021 1330 1024 1331 1019 1331 1195 1331 1195 1332 1019 1332 1013 1332 1195 1333 1013 1333 1010 1333 1111 1334 1036 1334 1131 1334 1131 1335 1036 1335 1035 1335 1131 1336 1035 1336 1195 1336 1195 1337 1035 1337 1028 1337 1195 1338 1028 1338 1024 1338 1132 1339 1125 1339 1139 1339 1150 1340 1139 1340 1161 1340 1138 1341 1132 1341 1150 1341 1150 1342 1132 1342 1139 1342 1243 1343 1193 1343 1191 1343 1191 1344 1193 1344 1161 1344 1161 1345 1193 1345 1169 1345 1161 1346 1169 1346 1150 1346 1288 1347 1247 1347 1243 1347 1243 1348 1247 1348 1193 1348 1313 1349 1306 1349 1289 1349 1313 1350 1289 1350 1288 1350 1288 1351 1289 1351 1247 1351 1334 1352 1306 1352 1313 1352 1387 1353 1335 1353 1334 1353 1334 1354 1335 1354 1306 1354 1446 1355 1386 1355 1387 1355 1387 1356 1386 1356 1335 1356 1472 1357 1457 1357 1458 1357 1458 1358 1457 1358 1446 1358 1446 1359 1457 1359 1445 1359 1446 1360 1445 1360 1386 1360 1524 1361 1521 1361 1470 1361 1524 1362 1470 1362 1472 1362 1472 1363 1470 1363 1457 1363 1521 1364 1524 1364 1578 1364 1608 1365 1575 1365 1578 1365 1578 1366 1575 1366 1521 1366 1620 1367 1600 1367 1631 1367 1631 1368 1600 1368 1608 1368 1608 1369 1600 1369 1575 1369 1115 1370 1123 1370 1118 1370 1115 1371 1118 1371 1091 1371 1091 1372 1118 1372 1110 1372 1220 1373 1221 1373 1238 1373 1220 1374 1238 1374 1237 1374 1237 1375 1238 1375 1240 1375 1237 1376 1240 1376 1239 1376 1239 1377 1240 1377 1242 1377 1239 1378 1242 1378 1241 1378 1242 1379 1526 1379 1241 1379 1241 1380 1526 1380 1525 1380 1525 1381 1526 1381 1528 1381 1525 1382 1528 1382 1527 1382 1527 1383 1528 1383 1530 1383 1527 1384 1530 1384 1529 1384 1529 1385 1530 1385 1532 1385 1529 1386 1532 1386 1531 1386 1531 1387 1532 1387 1550 1387 1531 1388 1550 1388 1549 1388 1767 1389 1766 1389 1677 1389 1677 1390 1766 1390 1667 1390 1677 1391 1667 1391 1668 1391 1110 1392 1118 1392 1151 1392 1619 1393 1646 1393 1651 1393 1292 1394 1314 1394 1315 1394 1385 1395 1359 1395 1317 1395 1299 1396 1298 1396 1304 1396 1561 1397 1589 1397 1590 1397 1590 1398 1589 1398 1618 1398 1618 1399 1589 1399 1596 1399 1618 1400 1596 1400 1657 1400 1657 1401 1596 1401 1628 1401 1657 1402 1628 1402 1685 1402 1685 1403 1628 1403 1650 1403 1685 1404 1650 1404 1710 1404 1649 1405 1703 1405 1662 1405 1662 1406 1703 1406 1711 1406 1662 1407 1711 1407 1650 1407 1650 1408 1711 1408 1710 1408 1670 1409 1643 1409 1595 1409 1595 1410 1643 1410 1644 1410 1595 1411 1644 1411 1627 1411 1627 1412 1644 1412 1664 1412 1627 1413 1664 1413 1649 1413 1649 1414 1664 1414 1687 1414 1649 1415 1687 1415 1703 1415 1448 1416 1462 1416 1469 1416 1469 1417 1462 1417 1489 1417 1590 1418 1577 1418 1561 1418 1561 1419 1577 1419 1522 1419 1561 1420 1522 1420 1488 1420 1488 1421 1522 1421 1489 1421 1488 1422 1489 1422 1476 1422 1476 1423 1489 1423 1462 1423 1185 1424 1186 1424 1172 1424 1070 1425 1113 1425 1143 1425 1469 1426 1454 1426 1448 1426 1448 1427 1454 1427 1440 1427 1448 1428 1440 1428 1437 1428 1437 1429 1440 1429 1438 1429 1437 1430 1438 1430 1388 1430 1388 1431 1438 1431 1340 1431 1388 1432 1340 1432 1333 1432 1333 1433 1340 1433 1326 1433 1333 1434 1326 1434 1320 1434 1320 1435 1326 1435 1321 1435 1320 1436 1321 1436 1312 1436 1312 1437 1321 1437 1301 1437 1312 1438 1301 1438 1300 1438 1300 1439 1301 1439 1291 1439 1300 1440 1291 1440 1287 1440 1287 1441 1291 1441 1248 1441 1287 1442 1248 1442 1209 1442 1209 1443 1248 1443 1192 1443 1209 1444 1192 1444 1187 1444 1187 1445 1192 1445 1188 1445 1187 1446 1188 1446 1173 1446 1173 1447 1188 1447 1152 1447 1173 1448 1152 1448 1143 1448 1143 1449 1152 1449 1103 1449 1143 1450 1103 1450 1070 1450 1172 1451 1142 1451 1119 1451 1070 1452 1045 1452 1113 1452 1113 1453 1045 1453 1044 1453 1113 1454 1044 1454 1098 1454 1098 1455 1044 1455 1052 1455 1098 1456 1052 1456 1112 1456 1112 1457 1052 1457 1069 1457 1112 1458 1069 1458 1142 1458 1142 1459 1069 1459 1093 1459 1142 1460 1093 1460 1119 1460 1235 1461 1236 1461 1186 1461 1260 1462 1285 1462 1261 1462 1299 1463 1285 1463 1298 1463 1286 1464 1285 1464 1299 1464 1261 1465 1285 1465 1286 1465 1261 1466 1286 1466 1236 1466 1236 1467 1286 1467 1208 1467 1236 1468 1208 1468 1186 1468 1322 1469 1309 1469 1330 1469 1304 1470 1298 1470 1311 1470 1311 1471 1298 1471 1297 1471 1311 1472 1297 1472 1319 1472 1319 1473 1297 1473 1318 1473 1319 1474 1318 1474 1322 1474 1322 1475 1318 1475 1309 1475 1330 1476 1309 1476 1332 1476 1332 1477 1309 1477 1359 1477 1359 1478 1309 1478 1317 1478 1484 1479 1450 1479 1483 1479 1483 1480 1450 1480 1447 1480 1471 1481 1484 1481 1485 1481 1450 1482 1471 1482 1456 1482 1484 1483 1471 1483 1450 1483 1486 1484 1471 1484 1485 1484 1456 1485 1471 1485 1461 1485 1461 1486 1471 1486 1466 1486 1466 1487 1471 1487 1486 1487 1466 1488 1474 1488 1475 1488 1474 1489 1487 1489 1475 1489 1486 1490 1474 1490 1466 1490 1474 1491 1518 1491 1519 1491 1487 1492 1474 1492 1560 1492 1560 1493 1474 1493 1544 1493 1560 1494 1544 1494 1588 1494 1588 1495 1544 1495 1587 1495 1544 1496 1474 1496 1519 1496 1582 1497 1680 1497 1583 1497 1583 1498 1680 1498 1678 1498 1583 1499 1678 1499 1584 1499 1584 1500 1678 1500 1674 1500 1584 1501 1674 1501 1585 1501 1585 1502 1674 1502 1673 1502 1585 1503 1673 1503 1586 1503 1586 1504 1673 1504 1670 1504 1586 1505 1670 1505 1587 1505 1587 1506 1670 1506 1595 1506 1587 1507 1595 1507 1588 1507 1701 1508 1708 1508 1705 1508 1581 1509 1705 1509 1582 1509 1582 1510 1705 1510 1693 1510 1582 1511 1693 1511 1680 1511 1692 1512 1697 1512 1689 1512 1689 1513 1697 1513 1701 1513 1689 1514 1701 1514 1683 1514 1683 1515 1701 1515 1705 1515 1683 1516 1705 1516 1675 1516 1675 1517 1705 1517 1581 1517 1563 1518 1567 1518 1570 1518 1555 1519 1557 1519 1563 1519 1551 1520 1555 1520 1546 1520 1546 1521 1555 1521 1563 1521 1546 1522 1563 1522 1533 1522 1533 1523 1563 1523 1570 1523 1533 1524 1570 1524 1535 1524 1544 1525 1542 1525 1587 1525 1587 1526 1542 1526 1541 1526 1587 1527 1541 1527 1586 1527 1586 1528 1541 1528 1540 1528 1586 1529 1540 1529 1585 1529 1585 1530 1540 1530 1539 1530 1585 1531 1539 1531 1584 1531 1584 1532 1539 1532 1538 1532 1584 1533 1538 1533 1583 1533 1583 1534 1538 1534 1535 1534 1583 1535 1535 1535 1582 1535 1582 1536 1535 1536 1570 1536 1582 1537 1570 1537 1581 1537 1481 1538 1513 1538 1482 1538 1482 1539 1513 1539 1514 1539 1482 1540 1514 1540 1483 1540 1483 1541 1514 1541 1515 1541 1483 1542 1515 1542 1484 1542 1484 1543 1515 1543 1516 1543 1484 1544 1516 1544 1485 1544 1485 1545 1516 1545 1518 1545 1485 1546 1518 1546 1486 1546 1486 1547 1518 1547 1474 1547 1503 1548 1506 1548 1508 1548 1495 1549 1499 1549 1492 1549 1492 1550 1499 1550 1503 1550 1492 1551 1503 1551 1480 1551 1480 1552 1503 1552 1508 1552 1480 1553 1508 1553 1481 1553 1481 1554 1508 1554 1511 1554 1481 1555 1511 1555 1513 1555 1429 1556 1432 1556 1433 1556 1433 1557 1432 1557 1478 1557 1424 1558 1398 1558 1396 1558 1424 1559 1396 1559 1421 1559 1421 1560 1396 1560 1402 1560 1421 1561 1402 1561 1415 1561 1415 1562 1402 1562 1408 1562 1415 1563 1408 1563 1411 1563 1424 1564 1429 1564 1398 1564 1398 1565 1429 1565 1433 1565 1398 1566 1433 1566 1400 1566 1400 1567 1433 1567 1434 1567 1400 1568 1434 1568 1378 1568 1378 1569 1434 1569 1316 1569 1378 1570 1316 1570 1376 1570 1376 1571 1316 1571 1315 1571 1315 1572 1314 1572 1376 1572 1376 1573 1314 1573 1345 1573 1376 1574 1345 1574 1374 1574 1374 1575 1345 1575 1349 1575 1374 1576 1349 1576 1371 1576 1371 1577 1349 1577 1352 1577 1371 1578 1352 1578 1365 1578 1365 1579 1352 1579 1358 1579 1365 1580 1358 1580 1362 1580 1294 1581 1255 1581 1253 1581 1294 1582 1277 1582 1255 1582 1277 1583 1256 1583 1255 1583 1256 1584 1277 1584 1257 1584 1257 1585 1277 1585 1258 1585 1297 1586 1258 1586 1277 1586 1297 1587 1277 1587 1296 1587 1285 1588 1297 1588 1298 1588 1258 1589 1285 1589 1260 1589 1297 1590 1285 1590 1258 1590 1186 1591 1185 1591 1235 1591 1235 1592 1185 1592 1184 1592 1235 1593 1184 1593 1233 1593 1233 1594 1184 1594 1183 1594 1233 1595 1183 1595 1232 1595 1232 1596 1183 1596 1182 1596 1232 1597 1182 1597 1231 1597 1231 1598 1182 1598 1181 1598 1231 1599 1181 1599 1230 1599 1230 1600 1181 1600 1180 1600 1230 1601 1180 1601 1227 1601 1180 1602 1179 1602 1227 1602 1227 1603 1179 1603 1197 1603 1227 1604 1197 1604 1225 1604 1225 1605 1197 1605 1202 1605 1225 1606 1202 1606 1224 1606 1224 1607 1202 1607 1205 1607 1224 1608 1205 1608 1218 1608 1218 1609 1205 1609 1211 1609 1218 1610 1211 1610 1215 1610 1067 1611 1074 1611 1081 1611 1048 1612 1055 1612 1058 1612 1062 1613 1050 1613 1081 1613 1081 1614 1050 1614 1048 1614 1081 1615 1048 1615 1067 1615 1067 1616 1048 1616 1058 1616 1067 1617 1058 1617 1063 1617 1119 1618 1120 1618 1172 1618 1172 1619 1120 1619 1087 1619 1172 1620 1087 1620 1185 1620 1185 1621 1087 1621 1084 1621 1185 1622 1084 1622 1184 1622 1184 1623 1084 1623 1083 1623 1184 1624 1083 1624 1183 1624 1183 1625 1083 1625 1080 1625 1183 1626 1080 1626 1182 1626 1182 1627 1080 1627 1079 1627 1182 1628 1079 1628 1181 1628 1181 1629 1079 1629 1062 1629 1181 1630 1062 1630 1180 1630 1180 1631 1062 1631 1081 1631 1180 1632 1081 1632 1179 1632 1297 1633 1309 1633 1318 1633 1296 1634 1309 1634 1297 1634 1317 1635 1309 1635 1295 1635 1295 1636 1309 1636 1296 1636 1296 1637 1277 1637 1295 1637 1294 1638 1305 1638 1316 1638 1292 1639 1315 1639 1293 1639 1293 1640 1315 1640 1305 1640 1271 1641 1275 1641 1267 1641 1267 1642 1275 1642 1279 1642 1267 1643 1279 1643 1263 1643 1263 1644 1279 1644 1282 1644 1263 1645 1282 1645 1250 1645 1250 1646 1282 1646 1292 1646 1250 1647 1292 1647 1253 1647 1253 1648 1292 1648 1293 1648 1253 1649 1293 1649 1294 1649 1294 1650 1293 1650 1305 1650 1316 1651 1305 1651 1315 1651 1447 1652 1436 1652 1435 1652 1435 1653 1436 1653 1414 1653 1435 1654 1414 1654 1434 1654 1434 1655 1414 1655 1385 1655 1434 1656 1385 1656 1316 1656 1316 1657 1385 1657 1317 1657 1316 1658 1317 1658 1294 1658 1294 1659 1317 1659 1295 1659 1294 1660 1295 1660 1277 1660 1447 1661 1435 1661 1483 1661 1483 1662 1435 1662 1434 1662 1483 1663 1434 1663 1482 1663 1482 1664 1434 1664 1433 1664 1482 1665 1433 1665 1481 1665 1481 1666 1433 1666 1478 1666 1481 1667 1478 1667 1480 1667 1685 1668 1710 1668 1663 1668 1070 1669 1103 1669 1121 1669 1076 1670 1045 1670 1089 1670 1089 1671 1045 1671 1070 1671 1089 1672 1070 1672 1092 1672 1092 1673 1070 1673 1121 1673 1192 1674 1194 1674 1188 1674 1188 1675 1194 1675 1168 1675 1188 1676 1168 1676 1152 1676 1152 1677 1168 1677 1162 1677 1152 1678 1162 1678 1103 1678 1103 1679 1162 1679 1129 1679 1103 1680 1129 1680 1121 1680 1302 1681 1284 1681 1248 1681 1248 1682 1284 1682 1249 1682 1248 1683 1249 1683 1192 1683 1192 1684 1249 1684 1200 1684 1192 1685 1200 1685 1194 1685 1326 1686 1327 1686 1321 1686 1321 1687 1327 1687 1308 1687 1321 1688 1308 1688 1301 1688 1301 1689 1308 1689 1302 1689 1301 1690 1302 1690 1291 1690 1291 1691 1302 1691 1248 1691 1454 1692 1449 1692 1440 1692 1440 1693 1449 1693 1439 1693 1440 1694 1439 1694 1438 1694 1438 1695 1439 1695 1389 1695 1438 1696 1389 1696 1340 1696 1340 1697 1389 1697 1341 1697 1340 1698 1341 1698 1326 1698 1326 1699 1341 1699 1331 1699 1326 1700 1331 1700 1327 1700 1469 1701 1464 1701 1454 1701 1454 1702 1464 1702 1453 1702 1454 1703 1453 1703 1449 1703 1618 1704 1601 1704 1590 1704 1590 1705 1601 1705 1574 1705 1590 1706 1574 1706 1577 1706 1577 1707 1574 1707 1569 1707 1577 1708 1569 1708 1522 1708 1522 1709 1569 1709 1520 1709 1522 1710 1520 1710 1489 1710 1489 1711 1520 1711 1477 1711 1489 1712 1477 1712 1469 1712 1469 1713 1477 1713 1468 1713 1469 1714 1468 1714 1464 1714 1657 1715 1636 1715 1618 1715 1618 1716 1636 1716 1607 1716 1618 1717 1607 1717 1601 1717 1663 1718 1669 1718 1685 1718 1685 1719 1669 1719 1665 1719 1685 1720 1665 1720 1657 1720 1657 1721 1665 1721 1642 1721 1657 1722 1642 1722 1636 1722 1663 1723 1639 1723 1631 1723 1139 1724 1125 1724 1089 1724 1089 1725 1125 1725 1097 1725 1089 1726 1097 1726 1076 1726 1089 1727 1092 1727 1139 1727 1139 1728 1092 1728 1121 1728 1139 1729 1121 1729 1161 1729 1121 1730 1129 1730 1161 1730 1161 1731 1129 1731 1162 1731 1161 1732 1162 1732 1191 1732 1162 1733 1168 1733 1191 1733 1191 1734 1168 1734 1194 1734 1191 1735 1194 1735 1243 1735 1194 1736 1200 1736 1243 1736 1243 1737 1200 1737 1249 1737 1243 1738 1249 1738 1288 1738 1249 1739 1284 1739 1288 1739 1288 1740 1284 1740 1302 1740 1288 1741 1302 1741 1313 1741 1302 1742 1308 1742 1313 1742 1313 1743 1308 1743 1327 1743 1313 1744 1327 1744 1334 1744 1327 1745 1331 1745 1334 1745 1334 1746 1331 1746 1341 1746 1334 1747 1341 1747 1387 1747 1341 1748 1389 1748 1387 1748 1387 1749 1389 1749 1439 1749 1387 1750 1439 1750 1446 1750 1439 1751 1449 1751 1446 1751 1446 1752 1449 1752 1453 1752 1446 1753 1453 1753 1458 1753 1453 1754 1464 1754 1458 1754 1458 1755 1464 1755 1468 1755 1458 1756 1468 1756 1472 1756 1468 1757 1477 1757 1472 1757 1472 1758 1477 1758 1520 1758 1472 1759 1520 1759 1524 1759 1520 1760 1569 1760 1524 1760 1524 1761 1569 1761 1574 1761 1524 1762 1574 1762 1578 1762 1574 1763 1601 1763 1578 1763 1578 1764 1601 1764 1607 1764 1578 1765 1607 1765 1608 1765 1607 1766 1636 1766 1608 1766 1608 1767 1636 1767 1642 1767 1608 1768 1642 1768 1631 1768 1669 1769 1663 1769 1631 1769 1669 1770 1631 1770 1665 1770 1665 1771 1631 1771 1642 1771 1651 1772 1668 1772 1661 1772 1100 1773 1091 1773 1110 1773 1240 1774 1151 1774 1134 1774 1240 1775 1124 1775 1151 1775 1151 1776 1124 1776 1110 1776 1619 1777 1611 1777 1550 1777 1619 1778 1550 1778 1634 1778 1634 1779 1550 1779 1532 1779 1634 1780 1532 1780 1530 1780 1166 1781 1124 1781 1221 1781 1221 1782 1124 1782 1238 1782 1238 1783 1124 1783 1240 1783 1530 1784 1528 1784 1634 1784 1634 1785 1528 1785 1526 1785 1634 1786 1526 1786 1134 1786 1134 1787 1526 1787 1242 1787 1134 1788 1242 1788 1240 1788 1651 1789 1611 1789 1619 1789 1110 1790 1124 1790 1100 1790 1100 1791 1124 1791 1102 1791 1102 1792 1124 1792 1108 1792 1108 1793 1124 1793 1117 1793 1117 1794 1124 1794 1128 1794 1128 1795 1124 1795 1136 1795 1136 1796 1124 1796 1147 1796 1147 1797 1124 1797 1156 1797 1156 1798 1124 1798 1160 1798 1160 1799 1124 1799 1166 1799 1550 1800 1611 1800 1604 1800 1604 1801 1611 1801 1610 1801 1610 1802 1611 1802 1615 1802 1615 1803 1611 1803 1624 1803 1624 1804 1611 1804 1633 1804 1633 1805 1611 1805 1638 1805 1638 1806 1611 1806 1648 1806 1648 1807 1611 1807 1653 1807 1653 1808 1611 1808 1659 1808 1659 1809 1611 1809 1661 1809 1661 1810 1611 1810 1651 1810 1343 1811 1337 1811 1189 1811 1343 1812 1355 1812 1372 1812 1343 1813 1372 1813 1367 1813 1367 1814 1372 1814 1379 1814 1367 1815 1379 1815 1382 1815 1382 1816 1379 1816 1381 1816 1382 1817 1381 1817 1404 1817 1404 1818 1381 1818 1392 1818 1404 1819 1392 1819 1427 1819 1427 1820 1392 1820 1394 1820 1427 1821 1394 1821 1442 1821 1442 1822 1394 1822 1418 1822 1442 1823 1418 1823 1579 1823 1603 1824 1604 1824 1610 1824 1603 1825 1610 1825 1609 1825 1609 1826 1610 1826 1615 1826 1609 1827 1615 1827 1614 1827 1614 1828 1615 1828 1624 1828 1614 1829 1624 1829 1623 1829 1623 1830 1624 1830 1633 1830 1623 1831 1633 1831 1632 1831 1632 1832 1633 1832 1638 1832 1632 1833 1638 1833 1637 1833 1637 1834 1638 1834 1648 1834 1637 1835 1648 1835 1647 1835 1647 1836 1648 1836 1653 1836 1647 1837 1653 1837 1652 1837 1652 1838 1653 1838 1659 1838 1652 1839 1659 1839 1658 1839 1658 1840 1659 1840 1661 1840 1658 1841 1661 1841 1660 1841 1667 1842 1660 1842 1668 1842 1668 1843 1660 1843 1661 1843 1765 1844 1762 1844 1767 1844 1767 1845 1762 1845 1761 1845 1767 1846 1761 1846 1766 1846 1737 1847 1733 1847 1732 1847 1732 1848 1733 1848 1728 1848 1732 1849 1728 1849 1727 1849 1727 1850 1728 1850 1724 1850 1727 1851 1724 1851 1723 1851 1723 1852 1724 1852 1717 1852 1723 1853 1717 1853 1715 1853 1739 1854 1743 1854 1746 1854 1745 1855 1742 1855 1737 1855 1737 1856 1742 1856 1738 1856 1737 1857 1738 1857 1733 1857 1746 1858 1740 1858 1739 1858 1739 1859 1740 1859 1735 1859 1739 1860 1735 1860 1734 1860 1734 1861 1735 1861 1730 1861 1734 1862 1730 1862 1729 1862 1729 1863 1730 1863 1726 1863 1729 1864 1726 1864 1725 1864 1725 1865 1726 1865 1722 1865 1725 1866 1722 1866 1718 1866 1761 1867 1762 1867 1759 1867 1761 1868 1759 1868 1758 1868 1758 1869 1759 1869 1755 1869 1758 1870 1755 1870 1754 1870 1754 1871 1755 1871 1753 1871 1754 1872 1753 1872 1752 1872 1752 1873 1753 1873 1749 1873 1752 1874 1749 1874 1748 1874 1748 1875 1749 1875 1746 1875 1748 1876 1746 1876 1745 1876 1745 1877 1746 1877 1743 1877 1745 1878 1743 1878 1742 1878 1742 1879 1743 1879 1572 1879 1572 1880 1743 1880 1573 1880 1444 1881 1455 1881 1460 1881 1460 1882 1455 1882 1459 1882 1460 1883 1459 1883 1463 1883 1463 1884 1459 1884 1473 1884 1463 1885 1473 1885 1523 1885 1523 1886 1473 1886 1572 1886 1523 1887 1572 1887 1573 1887 1195 1888 1196 1888 1212 1888 1195 1889 1212 1889 1244 1889 1244 1890 1212 1890 1246 1890 1244 1891 1246 1891 1245 1891 1245 1892 1246 1892 1290 1892 1245 1893 1290 1893 1310 1893 1310 1894 1290 1894 1324 1894 1310 1895 1324 1895 1323 1895 1323 1896 1324 1896 1325 1896 1323 1897 1325 1897 1336 1897 1336 1898 1325 1898 1339 1898 1336 1899 1339 1899 1391 1899 1391 1900 1339 1900 1390 1900 1391 1901 1390 1901 1444 1901 1444 1902 1390 1902 1441 1902 1444 1903 1441 1903 1455 1903 1196 1904 1195 1904 1009 1904 1009 1905 1195 1905 1010 1905 1009 1906 1010 1906 1007 1906 1012 1907 1009 1907 1006 1907 1007 1908 1010 1908 1014 1908 1006 1909 1011 1909 1012 1909 1012 1910 1011 1910 1017 1910 1012 1911 1017 1911 1018 1911 1018 1912 1017 1912 1022 1912 1018 1913 1022 1913 1023 1913 1023 1914 1022 1914 1026 1914 1023 1915 1026 1915 1027 1915 1027 1916 1026 1916 1032 1916 1027 1917 1032 1917 1034 1917 1010 1918 1013 1918 1014 1918 1014 1919 1013 1919 1019 1919 1014 1920 1019 1920 1020 1920 1020 1921 1019 1921 1024 1921 1020 1922 1024 1922 1025 1922 1025 1923 1024 1923 1028 1923 1025 1924 1028 1924 1029 1924 1029 1925 1028 1925 1035 1925 1029 1926 1035 1926 1039 1926 1009 1927 1007 1927 1006 1927 1006 1928 1007 1928 1004 1928 1006 1929 1004 1929 1003 1929 1003 1930 1004 1930 1000 1930 1003 1931 1000 1931 999 1931 999 1932 1000 1932 998 1932 999 1933 998 1933 997 1933 997 1934 998 1934 994 1934 997 1935 994 1935 993 1935 993 1936 994 1936 991 1936 993 1937 991 1937 990 1937 986 1938 990 1938 987 1938 987 1939 990 1939 991 1939 987 1940 991 1940 988 1940 1099 1941 1090 1941 1100 1941 1100 1942 1090 1942 1091 1942 1099 1943 1100 1943 1102 1943 1099 1944 1102 1944 1101 1944 1101 1945 1102 1945 1108 1945 1101 1946 1108 1946 1107 1946 1107 1947 1108 1947 1117 1947 1107 1948 1117 1948 1116 1948 1116 1949 1117 1949 1128 1949 1116 1950 1128 1950 1127 1950 1127 1951 1128 1951 1136 1951 1127 1952 1136 1952 1135 1952 1135 1953 1136 1953 1147 1953 1135 1954 1147 1954 1146 1954 1146 1955 1147 1955 1156 1955 1146 1956 1156 1956 1155 1956 1155 1957 1156 1957 1160 1957 1155 1958 1160 1958 1159 1958 1159 1959 1160 1959 1166 1959 1159 1960 1166 1960 1165 1960 1356 1961 1355 1961 1220 1961 1220 1962 1355 1962 1165 1962 1220 1963 1165 1963 1221 1963 1221 1964 1165 1964 1166 1964 1550 1965 1604 1965 1549 1965 1549 1966 1604 1966 1603 1966 1549 1967 1603 1967 1419 1967 1419 1968 1603 1968 1418 1968 1338 1969 1337 1969 1343 1969 1338 1970 1343 1970 1344 1970 1344 1971 1343 1971 1367 1971 1344 1972 1367 1972 1368 1972 1368 1973 1367 1973 1382 1973 1368 1974 1382 1974 1384 1974 1384 1975 1382 1975 1404 1975 1384 1976 1404 1976 1405 1976 1405 1977 1404 1977 1427 1977 1405 1978 1427 1978 1428 1978 1428 1979 1427 1979 1442 1979 1428 1980 1442 1980 1443 1980 1338 1981 1190 1981 1337 1981 1337 1982 1190 1982 1189 1982 1141 1983 1140 1983 1144 1983 1141 1984 1144 1984 1145 1984 1145 1985 1144 1985 1148 1985 1145 1986 1148 1986 1149 1986 1149 1987 1148 1987 1153 1987 1149 1988 1153 1988 1154 1988 1154 1989 1153 1989 1157 1989 1154 1990 1157 1990 1158 1990 1158 1991 1157 1991 1163 1991 1158 1992 1163 1992 1164 1992 1164 1993 1163 1993 1170 1993 1164 1994 1170 1994 1171 1994 1171 1995 1170 1995 1174 1995 1171 1996 1174 1996 1175 1996 1175 1997 1174 1997 1177 1997 1175 1998 1177 1998 1178 1998 1178 1999 1177 1999 1189 1999 1178 2000 1189 2000 1190 2000 1141 2001 1033 2001 1140 2001 1140 2002 1033 2002 1031 2002 1033 2003 1034 2003 1031 2003 1031 2004 1034 2004 1032 2004 1717 2005 1716 2005 1715 2005 1715 2006 1716 2006 1714 2006 1716 2007 1630 2007 1714 2007 1714 2008 1630 2008 1629 2008 1580 2009 1579 2009 1591 2009 1580 2010 1591 2010 1592 2010 1592 2011 1591 2011 1593 2011 1592 2012 1593 2012 1594 2012 1594 2013 1593 2013 1597 2013 1594 2014 1597 2014 1598 2014 1598 2015 1597 2015 1605 2015 1598 2016 1605 2016 1606 2016 1606 2017 1605 2017 1612 2017 1606 2018 1612 2018 1613 2018 1613 2019 1612 2019 1616 2019 1613 2020 1616 2020 1617 2020 1617 2021 1616 2021 1621 2021 1617 2022 1621 2022 1622 2022 1622 2023 1621 2023 1625 2023 1622 2024 1625 2024 1626 2024 1626 2025 1625 2025 1629 2025 1626 2026 1629 2026 1630 2026 1580 2027 1443 2027 1579 2027 1579 2028 1443 2028 1442 2028 1034 2029 1033 2029 1141 2029 1622 2030 1626 2030 1630 2030 1717 2031 1724 2031 1572 2031 1572 2032 1724 2032 1728 2032 1728 2033 1733 2033 1572 2033 1572 2034 1733 2034 1738 2034 1572 2035 1738 2035 1742 2035 1018 2036 1196 2036 1012 2036 1012 2037 1196 2037 1009 2037 1018 2038 1023 2038 1196 2038 1196 2039 1023 2039 1027 2039 1196 2040 1027 2040 1034 2040 1212 2041 1164 2041 1171 2041 1034 2042 1141 2042 1196 2042 1196 2043 1141 2043 1145 2043 1196 2044 1145 2044 1212 2044 1158 2045 1164 2045 1154 2045 1154 2046 1164 2046 1212 2046 1154 2047 1212 2047 1149 2047 1149 2048 1212 2048 1145 2048 1473 2049 1630 2049 1572 2049 1572 2050 1630 2050 1716 2050 1572 2051 1716 2051 1717 2051 1344 2052 1324 2052 1338 2052 1338 2053 1324 2053 1290 2053 1338 2054 1290 2054 1190 2054 1190 2055 1290 2055 1246 2055 1190 2056 1246 2056 1178 2056 1178 2057 1246 2057 1212 2057 1178 2058 1212 2058 1175 2058 1175 2059 1212 2059 1171 2059 1592 2060 1630 2060 1580 2060 1580 2061 1630 2061 1473 2061 1580 2062 1473 2062 1443 2062 1443 2063 1473 2063 1459 2063 1443 2064 1459 2064 1428 2064 1428 2065 1459 2065 1455 2065 1428 2066 1455 2066 1405 2066 1405 2067 1455 2067 1441 2067 1405 2068 1441 2068 1384 2068 1384 2069 1441 2069 1390 2069 1384 2070 1390 2070 1368 2070 1368 2071 1390 2071 1339 2071 1368 2072 1339 2072 1344 2072 1344 2073 1339 2073 1325 2073 1344 2074 1325 2074 1324 2074 1617 2075 1622 2075 1613 2075 1613 2076 1622 2076 1630 2076 1613 2077 1630 2077 1606 2077 1606 2078 1630 2078 1592 2078 1606 2079 1592 2079 1598 2079 1598 2080 1592 2080 1594 2080 1419 2081 1418 2081 1394 2081 1419 2082 1394 2082 1395 2082 1395 2083 1394 2083 1392 2083 1395 2084 1392 2084 1393 2084 1393 2085 1392 2085 1381 2085 1393 2086 1381 2086 1383 2086 1383 2087 1381 2087 1379 2087 1383 2088 1379 2088 1380 2088 1380 2089 1379 2089 1372 2089 1380 2090 1372 2090 1373 2090 1373 2091 1372 2091 1355 2091 1373 2092 1355 2092 1356 2092 1356 2093 1220 2093 1237 2093 1239 2094 1241 2094 1419 2094 1383 2095 1380 2095 1393 2095 1393 2096 1380 2096 1373 2096 1393 2097 1373 2097 1395 2097 1395 2098 1373 2098 1356 2098 1395 2099 1356 2099 1419 2099 1419 2100 1356 2100 1237 2100 1419 2101 1237 2101 1239 2101 1549 2102 1419 2102 1531 2102 1531 2103 1419 2103 1529 2103 1241 2104 1525 2104 1419 2104 1419 2105 1525 2105 1527 2105 1419 2106 1527 2106 1529 2106 1656 2107 1677 2107 1668 2107 1677 2108 1656 2108 1666 2108 1666 2109 1656 2109 1663 2109 1663 2110 1656 2110 1639 2110 1091 2111 1072 2111 1088 2111 1115 2112 1091 2112 1088 2112 1094 2113 1096 2113 1088 2113 1094 2114 1088 2114 1086 2114 1138 2115 1137 2115 1132 2115 1132 2116 1137 2116 1133 2116 1132 2117 1133 2117 1130 2117 1122 2118 1109 2118 1126 2118 1126 2119 1109 2119 1132 2119 1126 2120 1132 2120 1130 2120 1088 2121 1096 2121 1109 2121 1088 2122 1109 2122 1115 2122 1115 2123 1109 2123 1122 2123 1115 2124 1122 2124 1123 2124 1125 2125 1132 2125 1114 2125 1114 2126 1132 2126 1109 2126 1114 2127 1109 2127 1104 2127 1104 2128 1109 2128 1096 2128 1536 2129 1534 2129 1533 2129 1539 2130 1537 2130 1538 2130 1538 2131 1537 2131 1536 2131 1538 2132 1536 2132 1535 2132 1535 2133 1536 2133 1533 2133 1539 2134 1540 2134 1537 2134 1537 2135 1540 2135 1541 2135 1537 2136 1541 2136 1543 2136 1543 2137 1541 2137 1542 2137 1543 2138 1542 2138 1544 2138 1558 2139 1557 2139 1555 2139 1570 2140 1567 2140 1571 2140 1571 2141 1567 2141 1568 2141 1568 2142 1567 2142 1566 2142 1566 2143 1567 2143 1563 2143 1566 2144 1563 2144 1565 2144 1558 2145 1559 2145 1557 2145 1557 2146 1559 2146 1562 2146 1557 2147 1562 2147 1563 2147 1563 2148 1562 2148 1564 2148 1563 2149 1564 2149 1565 2149 1552 2150 1553 2150 1551 2150 1551 2151 1553 2151 1554 2151 1551 2152 1554 2152 1555 2152 1555 2153 1554 2153 1556 2153 1555 2154 1556 2154 1558 2154 1546 2155 1533 2155 1534 2155 1534 2156 1545 2156 1546 2156 1546 2157 1545 2157 1547 2157 1546 2158 1547 2158 1551 2158 1551 2159 1547 2159 1548 2159 1551 2160 1548 2160 1552 2160 1581 2161 1570 2161 1571 2161 1571 2162 1576 2162 1581 2162 1581 2163 1576 2163 1602 2163 1581 2164 1602 2164 1675 2164 1675 2165 1602 2165 1645 2165 1675 2166 1645 2166 1676 2166 1706 2167 1705 2167 1709 2167 1709 2168 1705 2168 1708 2168 1709 2169 1708 2169 1707 2169 1707 2170 1708 2170 1704 2170 1704 2171 1708 2171 1701 2171 1704 2172 1701 2172 1700 2172 1700 2173 1701 2173 1699 2173 1699 2174 1701 2174 1697 2174 1699 2175 1697 2175 1698 2175 1692 2176 1694 2176 1697 2176 1697 2177 1694 2177 1696 2177 1697 2178 1696 2178 1698 2178 1686 2179 1688 2179 1689 2179 1689 2180 1688 2180 1690 2180 1689 2181 1690 2181 1692 2181 1692 2182 1690 2182 1691 2182 1692 2183 1691 2183 1694 2183 1675 2184 1676 2184 1683 2184 1683 2185 1676 2185 1679 2185 1679 2186 1681 2186 1683 2186 1683 2187 1681 2187 1682 2187 1683 2188 1682 2188 1689 2188 1689 2189 1682 2189 1684 2189 1689 2190 1684 2190 1686 2190 1680 2191 1695 2191 1678 2191 1678 2192 1695 2192 1672 2192 1678 2193 1672 2193 1674 2193 1674 2194 1672 2194 1671 2194 1674 2195 1671 2195 1673 2195 1673 2196 1671 2196 1655 2196 1673 2197 1655 2197 1670 2197 1670 2198 1655 2198 1654 2198 1670 2199 1654 2199 1643 2199 1680 2200 1693 2200 1695 2200 1695 2201 1693 2201 1705 2201 1695 2202 1705 2202 1702 2202 1702 2203 1705 2203 1706 2203 1260 2204 1261 2204 1259 2204 1251 2205 1250 2205 1252 2205 1252 2206 1250 2206 1253 2206 1252 2207 1253 2207 1254 2207 1254 2208 1253 2208 1255 2208 1255 2209 1256 2209 1254 2209 1254 2210 1256 2210 1257 2210 1254 2211 1257 2211 1259 2211 1259 2212 1257 2212 1258 2212 1259 2213 1258 2213 1260 2213 1283 2214 1282 2214 1281 2214 1281 2215 1282 2215 1279 2215 1275 2216 1278 2216 1279 2216 1279 2217 1278 2217 1280 2217 1279 2218 1280 2218 1281 2218 1273 2219 1274 2219 1275 2219 1275 2220 1274 2220 1276 2220 1275 2221 1276 2221 1278 2221 1273 2222 1275 2222 1272 2222 1272 2223 1275 2223 1271 2223 1272 2224 1271 2224 1270 2224 1270 2225 1271 2225 1267 2225 1270 2226 1267 2226 1269 2226 1264 2227 1265 2227 1263 2227 1263 2228 1265 2228 1266 2228 1263 2229 1266 2229 1267 2229 1267 2230 1266 2230 1268 2230 1267 2231 1268 2231 1269 2231 1264 2232 1263 2232 1262 2232 1262 2233 1263 2233 1250 2233 1262 2234 1250 2234 1251 2234 1346 2235 1345 2235 1342 2235 1342 2236 1345 2236 1314 2236 1283 2237 1303 2237 1282 2237 1282 2238 1303 2238 1292 2238 1303 2239 1307 2239 1292 2239 1292 2240 1307 2240 1328 2240 1292 2241 1328 2241 1314 2241 1314 2242 1328 2242 1329 2242 1314 2243 1329 2243 1342 2243 1374 2244 1371 2244 1375 2244 1375 2245 1371 2245 1370 2245 1370 2246 1371 2246 1369 2246 1369 2247 1371 2247 1365 2247 1369 2248 1365 2248 1366 2248 1362 2249 1363 2249 1365 2249 1365 2250 1363 2250 1364 2250 1365 2251 1364 2251 1366 2251 1358 2252 1360 2252 1362 2252 1362 2253 1360 2253 1361 2253 1362 2254 1361 2254 1363 2254 1351 2255 1353 2255 1352 2255 1352 2256 1353 2256 1354 2256 1352 2257 1354 2257 1358 2257 1358 2258 1354 2258 1357 2258 1358 2259 1357 2259 1360 2259 1351 2260 1352 2260 1350 2260 1350 2261 1352 2261 1349 2261 1350 2262 1349 2262 1348 2262 1348 2263 1349 2263 1347 2263 1347 2264 1349 2264 1345 2264 1347 2265 1345 2265 1346 2265 1374 2266 1375 2266 1376 2266 1376 2267 1375 2267 1377 2267 1376 2268 1377 2268 1378 2268 1397 2269 1396 2269 1399 2269 1399 2270 1396 2270 1398 2270 1399 2271 1398 2271 1400 2271 1430 2272 1429 2272 1426 2272 1426 2273 1429 2273 1424 2273 1426 2274 1424 2274 1425 2274 1425 2275 1424 2275 1423 2275 1423 2276 1424 2276 1421 2276 1423 2277 1421 2277 1422 2277 1422 2278 1421 2278 1420 2278 1420 2279 1421 2279 1415 2279 1420 2280 1415 2280 1417 2280 1411 2281 1413 2281 1415 2281 1415 2282 1413 2282 1416 2282 1415 2283 1416 2283 1417 2283 1408 2284 1410 2284 1411 2284 1411 2285 1410 2285 1412 2285 1411 2286 1412 2286 1413 2286 1403 2287 1406 2287 1402 2287 1402 2288 1406 2288 1407 2288 1402 2289 1407 2289 1408 2289 1408 2290 1407 2290 1409 2290 1408 2291 1409 2291 1410 2291 1403 2292 1402 2292 1401 2292 1401 2293 1402 2293 1396 2293 1401 2294 1396 2294 1397 2294 1467 2295 1479 2295 1478 2295 1430 2296 1431 2296 1429 2296 1429 2297 1431 2297 1432 2297 1431 2298 1451 2298 1432 2298 1432 2299 1451 2299 1452 2299 1432 2300 1452 2300 1478 2300 1478 2301 1452 2301 1465 2301 1478 2302 1465 2302 1467 2302 1509 2303 1508 2303 1507 2303 1507 2304 1508 2304 1506 2304 1503 2305 1504 2305 1506 2305 1506 2306 1504 2306 1505 2306 1506 2307 1505 2307 1507 2307 1498 2308 1500 2308 1499 2308 1499 2309 1500 2309 1501 2309 1499 2310 1501 2310 1503 2310 1503 2311 1501 2311 1502 2311 1503 2312 1502 2312 1504 2312 1498 2313 1499 2313 1497 2313 1497 2314 1499 2314 1495 2314 1497 2315 1495 2315 1496 2315 1492 2316 1493 2316 1495 2316 1495 2317 1493 2317 1494 2317 1495 2318 1494 2318 1496 2318 1478 2319 1479 2319 1480 2319 1480 2320 1479 2320 1490 2320 1480 2321 1490 2321 1492 2321 1492 2322 1490 2322 1491 2322 1492 2323 1491 2323 1493 2323 1513 2324 1511 2324 1512 2324 1512 2325 1511 2325 1510 2325 1510 2326 1511 2326 1508 2326 1510 2327 1508 2327 1509 2327 1517 2328 1519 2328 1518 2328 1518 2329 1516 2329 1517 2329 1517 2330 1516 2330 1515 2330 1517 2331 1515 2331 1512 2331 1512 2332 1515 2332 1514 2332 1512 2333 1514 2333 1513 2333 1087 2334 1120 2334 1106 2334 1051 2335 1050 2335 1053 2335 1053 2336 1050 2336 1062 2336 1053 2337 1062 2337 1078 2337 1106 2338 1105 2338 1087 2338 1087 2339 1105 2339 1095 2339 1087 2340 1095 2340 1084 2340 1084 2341 1095 2341 1085 2341 1062 2342 1079 2342 1078 2342 1078 2343 1079 2343 1080 2343 1078 2344 1080 2344 1085 2344 1085 2345 1080 2345 1083 2345 1085 2346 1083 2346 1084 2346 1082 2347 1081 2347 1077 2347 1077 2348 1081 2348 1074 2348 1067 2349 1071 2349 1074 2349 1074 2350 1071 2350 1075 2350 1074 2351 1075 2351 1077 2351 1064 2352 1065 2352 1063 2352 1063 2353 1065 2353 1066 2353 1063 2354 1066 2354 1067 2354 1067 2355 1066 2355 1068 2355 1067 2356 1068 2356 1071 2356 1064 2357 1063 2357 1061 2357 1061 2358 1063 2358 1058 2358 1061 2359 1058 2359 1060 2359 1055 2360 1057 2360 1058 2360 1058 2361 1057 2361 1059 2361 1058 2362 1059 2362 1060 2362 1048 2363 1054 2363 1055 2363 1055 2364 1054 2364 1056 2364 1055 2365 1056 2365 1057 2365 1050 2366 1051 2366 1048 2366 1048 2367 1051 2367 1046 2367 1046 2368 1047 2368 1048 2368 1048 2369 1047 2369 1049 2369 1048 2370 1049 2370 1054 2370 1198 2371 1197 2371 1176 2371 1176 2372 1197 2372 1179 2372 1176 2373 1179 2373 1167 2373 1167 2374 1179 2374 1081 2374 1167 2375 1081 2375 1082 2375 1225 2376 1224 2376 1226 2376 1226 2377 1224 2377 1223 2377 1223 2378 1224 2378 1222 2378 1222 2379 1224 2379 1218 2379 1222 2380 1218 2380 1219 2380 1215 2381 1216 2381 1218 2381 1218 2382 1216 2382 1217 2382 1218 2383 1217 2383 1219 2383 1211 2384 1213 2384 1215 2384 1215 2385 1213 2385 1214 2385 1215 2386 1214 2386 1216 2386 1204 2387 1206 2387 1205 2387 1205 2388 1206 2388 1207 2388 1205 2389 1207 2389 1211 2389 1211 2390 1207 2390 1210 2390 1211 2391 1210 2391 1213 2391 1204 2392 1205 2392 1203 2392 1203 2393 1205 2393 1202 2393 1203 2394 1202 2394 1201 2394 1201 2395 1202 2395 1199 2395 1199 2396 1202 2396 1197 2396 1199 2397 1197 2397 1198 2397 1234 2398 1236 2398 1235 2398 1235 2399 1233 2399 1234 2399 1234 2400 1233 2400 1232 2400 1234 2401 1232 2401 1229 2401 1225 2402 1226 2402 1227 2402 1227 2403 1226 2403 1228 2403 1227 2404 1228 2404 1230 2404 1230 2405 1228 2405 1229 2405 1230 2406 1229 2406 1231 2406 1231 2407 1229 2407 1232 2407 1038 2408 1039 2408 1037 2408 1037 2409 1039 2409 1035 2409 1037 2410 1035 2410 1036 2410 1039 2411 1038 2411 996 2411 1039 2412 996 2412 1029 2412 1029 2413 996 2413 1025 2413 1025 2414 996 2414 1020 2414 1020 2415 996 2415 1014 2415 1014 2416 996 2416 1007 2416 1007 2417 996 2417 1004 2417 1004 2418 996 2418 1000 2418 1000 2419 996 2419 998 2419 998 2420 996 2420 994 2420 994 2421 996 2421 991 2421 991 2422 996 2422 988 2422 988 2423 996 2423 989 2423 996 2424 992 2424 989 2424 992 2425 996 2425 1016 2425 1016 2426 996 2426 1038 2426 1719 2427 1718 2427 1720 2427 1720 2428 1718 2428 1722 2428 1720 2429 1722 2429 1721 2429 1760 2430 1741 2430 1763 2430 1763 2431 1741 2431 1764 2431 1764 2432 1741 2432 1765 2432 1765 2433 1741 2433 1762 2433 1762 2434 1741 2434 1759 2434 1759 2435 1741 2435 1755 2435 1755 2436 1741 2436 1753 2436 1753 2437 1741 2437 1749 2437 1749 2438 1741 2438 1746 2438 1746 2439 1741 2439 1740 2439 1740 2440 1741 2440 1735 2440 1735 2441 1741 2441 1730 2441 1730 2442 1741 2442 1726 2442 1726 2443 1741 2443 1722 2443 1722 2444 1741 2444 1721 2444 1721 2445 1741 2445 1760 2445 980 2446 984 2446 982 2446 977 2447 974 2447 979 2447 981 2448 983 2448 985 2448 978 2449 976 2449 975 2449 976 2450 981 2450 980 2450 980 2450 979 2450 976 2450 982 2451 983 2451 978 2451 978 2451 977 2451 982 2451 980 2452 981 2452 985 2452 985 2452 984 2452 980 2452 985 2453 983 2453 982 2453 982 2453 984 2453 985 2453 974 2454 975 2454 976 2454 976 2454 979 2454 974 2454 981 2455 976 2455 978 2455 978 2455 983 2455 981 2455 980 2456 982 2456 977 2456 977 2456 979 2456 980 2456 975 2457 974 2457 977 2457 977 2457 978 2457 975 2457 1118 2458 1123 2458 1640 2458 1640 2458 1646 2458 1118 2458 1768 2459 1640 2459 1123 2459 1122 2460 1768 2460 1123 2460 1768 2461 1641 2461 1640 2461 1769 2462 1641 2462 1122 2462 1138 2463 1769 2463 1122 2463 1138 2464 1150 2464 1769 2464 1150 2465 1169 2465 1769 2465 1169 2466 1193 2466 1769 2466 1193 2467 1247 2467 1769 2467 1247 2468 1289 2468 1769 2468 1289 2469 1306 2469 1769 2469 1306 2470 1335 2470 1769 2470 1335 2471 1386 2471 1769 2471 1386 2472 1445 2472 1769 2472 1445 2473 1457 2473 1769 2473 1457 2474 1470 2474 1769 2474 1470 2475 1521 2475 1769 2475 1521 2476 1575 2476 1769 2476 1575 2477 1600 2477 1769 2477 1600 2478 1620 2478 1769 2478 1072 2479 1086 2479 1125 2479 1125 2479 1076 2479 1072 2479 1086 2480 1091 2480 1125 2480 1091 2481 1122 2481 1123 2481 1091 2482 1122 2482 1125 2482 1122 2483 1125 2483 1138 2483 1646 2484 1640 2484 1641 2484 1631 2485 1639 2485 1620 2485 1668 2486 1651 2486 1646 2486 1668 2487 1646 2487 1641 2487 1639 2488 1656 2488 1641 2488 1656 2489 1668 2489 1641 2489 1620 2490 1770 2490 1769 2490 1770 2491 1641 2491 1769 2491 1641 2492 1770 2492 1639 2492 1770 2493 1620 2493 1639 2493 1550 2494 1646 2494 1619 2494 1532 2495 1646 2495 1550 2495 1530 2496 1646 2496 1532 2496 1528 2497 1646 2497 1530 2497 1526 2498 1646 2498 1528 2498 1118 2499 1221 2499 1151 2499 1118 2500 1238 2500 1221 2500 1118 2501 1240 2501 1238 2501 1118 2502 1242 2502 1240 2502 1242 2503 1118 2503 1646 2503 1646 2503 1526 2503 1242 2503 1784 2504 1783 2504 1786 2504 1786 2505 1783 2505 1785 2505 1786 2506 1785 2506 1788 2506 1788 2507 1785 2507 1787 2507 1788 2508 1787 2508 1793 2508 1793 2509 1787 2509 1792 2509 1802 2510 1803 2510 1799 2510 1799 2511 1803 2511 1800 2511 1807 2512 1806 2512 1809 2512 1809 2513 1806 2513 1808 2513 1809 2514 1808 2514 1814 2514 1814 2515 1808 2515 1813 2515 1814 2516 1813 2516 1816 2516 1816 2517 1813 2517 1815 2517 1820 2518 1818 2518 1824 2518 1824 2519 1818 2519 1821 2519 1824 2520 1821 2520 1828 2520 1828 2521 1821 2521 1826 2521 1828 2522 1826 2522 1827 2522 1827 2523 1826 2523 1825 2523 1827 2524 1825 2524 1822 2524 1823 2525 1822 2525 1819 2525 1819 2526 1822 2526 1817 2526 1822 2527 1823 2527 1827 2527 1789 2528 1790 2528 1794 2528 1801 2529 1811 2529 1812 2529 1802 2530 1804 2530 1805 2530 1805 2530 1803 2530 1802 2530 1810 2531 1811 2531 1801 2531 1790 2532 1791 2532 1794 2532 1801 2533 1794 2533 1791 2533 1791 2533 1810 2533 1801 2533 1771 2534 1773 2534 1777 2534 1777 2534 1775 2534 1771 2534 1771 2535 1772 2535 1774 2535 1774 2535 1773 2535 1771 2535 1772 2536 1776 2536 1778 2536 1778 2536 1774 2536 1772 2536 1780 2537 1783 2537 1784 2537 1784 2537 1782 2537 1780 2537 1781 2538 1779 2538 1775 2538 1775 2538 1777 2538 1781 2538 1778 2539 1776 2539 1780 2539 1780 2539 1782 2539 1778 2539 1792 2540 1795 2540 1796 2540 1796 2540 1793 2540 1792 2540 1795 2541 1797 2541 1798 2541 1798 2541 1796 2541 1795 2541 1798 2542 1797 2542 1799 2542 1799 2542 1800 2542 1798 2542 1804 2543 1806 2543 1807 2543 1807 2543 1805 2543 1804 2543 1815 2544 1818 2544 1820 2544 1820 2544 1816 2544 1815 2544 1810 2545 1812 2545 1811 2545 1812 2546 1810 2546 1819 2546 1819 2546 1817 2546 1812 2546 1789 2547 1791 2547 1790 2547 1779 2548 1781 2548 1791 2548 1791 2548 1789 2548 1779 2548 1776 2549 1821 2549 1818 2549 1818 2549 1780 2549 1776 2549 1772 2550 1826 2550 1821 2550 1821 2550 1776 2550 1772 2550 1771 2551 1825 2551 1826 2551 1826 2551 1772 2551 1771 2551 1771 2552 1775 2552 1822 2552 1822 2552 1825 2552 1771 2552 1775 2553 1779 2553 1817 2553 1817 2553 1822 2553 1775 2553 1829 2554 1780 2554 1818 2554 1815 2555 1829 2555 1818 2555 1829 2556 1783 2556 1780 2556 1783 2557 1829 2557 1785 2557 1785 2558 1829 2558 1787 2558 1787 2559 1829 2559 1792 2559 1792 2560 1829 2560 1795 2560 1795 2561 1829 2561 1797 2561 1797 2562 1829 2562 1799 2562 1799 2563 1829 2563 1802 2563 1802 2564 1829 2564 1804 2564 1804 2565 1829 2565 1806 2565 1806 2566 1829 2566 1808 2566 1808 2567 1829 2567 1813 2567 1813 2568 1829 2568 1815 2568 1779 2569 1789 2569 1812 2569 1812 2569 1817 2569 1779 2569 1801 2570 1812 2570 1789 2570 1789 2570 1794 2570 1801 2570 1778 2571 1782 2571 1820 2571 1820 2571 1824 2571 1778 2571 1774 2572 1778 2572 1824 2572 1824 2572 1828 2572 1774 2572 1773 2573 1774 2573 1828 2573 1828 2573 1827 2573 1773 2573 1773 2574 1827 2574 1823 2574 1823 2574 1777 2574 1773 2574 1777 2575 1823 2575 1819 2575 1819 2575 1781 2575 1777 2575 1781 2576 1819 2576 1810 2576 1810 2576 1791 2576 1781 2576 1830 2577 1820 2577 1782 2577 1784 2578 1830 2578 1782 2578 1830 2579 1816 2579 1820 2579 1814 2580 1816 2580 1830 2580 1809 2581 1814 2581 1830 2581 1807 2582 1809 2582 1830 2582 1805 2583 1807 2583 1830 2583 1803 2584 1805 2584 1830 2584 1800 2585 1803 2585 1830 2585 1798 2586 1800 2586 1830 2586 1796 2587 1798 2587 1830 2587 1793 2588 1796 2588 1830 2588 1788 2589 1793 2589 1830 2589 1786 2590 1788 2590 1830 2590 1784 2591 1786 2591 1830 2591 1833 2592 1837 2593 1838 2594 1838 2595 1834 2596 1833 2597 1831 2598 1835 2599 1837 2600 1837 2601 1833 2602 1831 2603 1831 2604 1832 2605 1836 2606 1836 2607 1835 2608 1831 2609 1832 2610 1834 2611 1838 2612 1838 2613 1836 2614 1832 2615 1831 2616 1833 2617 1834 2618 1834 2619 1832 2620 1831 2621 1835 2622 1836 2623 1838 2624 1838 2625 1837 2626 1835 2627 1841 2628 1845 2629 1846 2630 1846 2631 1842 2632 1841 2633 1839 2634 1843 2635 1845 2636 1845 2637 1841 2638 1839 2639 1840 2640 1842 2641 1846 2642 1846 2643 1844 2644 1840 2645 1839 2646 1840 2647 1844 2648 1844 2649 1843 2650 1839 2651 1843 2652 1844 2653 1846 2654 1846 2655 1845 2656 1843 2657 1847 2658 1851 2659 1852 2660 1852 2661 1848 2662 1847 2663 1849 2664 1853 2665 1854 2666 1854 2667 1850 2668 1849 2669 1851 2670 1853 2671 1854 2672 1854 2673 1852 2674 1851 2675 1847 2676 1849 2677 1850 2678 1850 2679 1848 2680 1847 2681 1848 2682 1852 2683 1854 2684 1854 2685 1850 2686 1848 2687 1847 2688 1851 2689 1853 2690 1853 2691 1849 2692 1847 2693 1856 2694 1860 2695 1862 2696 1862 2697 1858 2698 1856 2699 1855 2700 1859 2701 1861 2702 1861 2703 1857 2704 1855 2705 1857 2706 1861 2707 1862 2708 1862 2709 1858 2710 1857 2711 1855 2712 1859 2713 1860 2714 1860 2715 1856 2716 1855 2717 1859 2718 1861 2719 1862 2720 1862 2721 1860 2722 1859 2723 1855 2724 1857 2725 1858 2726 1858 2727 1856 2728 1855 2729 1839 2730 1841 2731 1842 2732 1842 2733 1840 2734 1839 2735 1971 2736 1969 2736 1973 2736 1973 2737 1969 2737 1967 2737 1972 2738 1966 2738 1968 2738 1972 2739 1968 2739 1970 2739 1954 2740 1956 2740 1952 2740 1952 2741 1956 2741 1958 2741 1955 2742 1953 2742 1957 2742 1974 2743 1962 2743 1964 2743 1952 2744 1945 2744 1950 2744 1950 2745 1945 2745 1948 2745 1882 2746 1880 2746 1884 2746 1884 2747 1880 2747 1878 2747 1885 2748 1881 2748 1883 2748 1931 2749 1905 2749 1933 2749 1890 2750 1916 2750 1889 2750 1892 2751 1865 2751 1864 2751 1944 2752 1976 2752 1975 2752 1955 2753 1924 2753 1953 2753 1923 2754 1954 2754 1952 2754 1918 2755 1946 2755 1947 2755 2021 2756 2015 2756 2017 2756 2017 2757 2015 2757 2011 2757 2017 2758 2011 2758 2013 2758 2013 2759 2011 2759 2007 2759 2013 2760 2007 2760 2009 2760 2009 2761 2007 2761 2003 2761 2009 2762 2003 2762 2005 2762 2005 2763 2003 2763 1999 2763 2005 2764 1999 2764 2001 2764 2001 2765 1999 2765 1995 2765 2001 2766 1995 2766 1997 2766 1997 2767 1995 2767 1991 2767 1997 2768 1991 2768 1993 2768 1993 2769 1991 2769 1987 2769 1993 2770 1987 2770 1989 2770 1989 2771 1987 2771 1983 2771 1989 2772 1983 2772 1985 2772 1985 2773 1983 2773 1979 2773 1985 2774 1979 2774 1981 2774 1981 2775 1979 2775 1977 2775 1981 2776 1977 2776 1978 2776 1978 2777 1977 2777 1980 2777 1978 2778 1980 2778 1982 2778 1982 2779 1980 2779 1984 2779 1982 2780 1984 2780 1986 2780 1986 2781 1984 2781 1988 2781 1986 2782 1988 2782 1990 2782 1990 2783 1988 2783 1992 2783 1990 2784 1992 2784 1994 2784 1994 2785 1992 2785 1996 2785 1994 2786 1996 2786 1998 2786 1998 2787 1996 2787 2000 2787 1998 2788 2000 2788 2002 2788 2002 2789 2000 2789 2004 2789 2002 2790 2004 2790 2006 2790 2006 2791 2004 2791 2008 2791 2006 2792 2008 2792 2010 2792 2010 2793 2008 2793 2012 2793 2010 2794 2012 2794 2014 2794 2014 2795 2012 2795 2016 2795 2014 2796 2016 2796 2018 2796 2018 2797 2016 2797 2020 2797 2018 2798 2020 2798 2022 2798 2022 2799 2020 2799 2024 2799 2022 2800 2024 2800 2026 2800 2026 2801 2024 2801 2028 2801 2026 2802 2028 2802 2030 2802 2030 2803 2028 2803 2032 2803 2030 2804 2032 2804 2034 2804 2034 2805 2032 2805 2036 2805 2034 2806 2036 2806 2038 2806 2038 2807 2036 2807 2040 2807 2038 2808 2040 2808 2042 2808 2042 2809 2040 2809 2044 2809 2042 2810 2044 2810 2046 2810 2046 2811 2044 2811 2048 2811 2046 2812 2048 2812 2050 2812 2050 2813 2048 2813 2052 2813 2050 2814 2052 2814 2054 2814 2054 2815 2052 2815 2055 2815 2054 2816 2055 2816 2056 2816 2056 2817 2055 2817 2051 2817 2056 2818 2051 2818 2053 2818 2053 2819 2051 2819 2047 2819 2053 2820 2047 2820 2049 2820 2049 2821 2047 2821 2043 2821 2049 2822 2043 2822 2045 2822 2045 2823 2043 2823 2039 2823 2045 2824 2039 2824 2041 2824 2041 2825 2039 2825 2035 2825 2041 2826 2035 2826 2037 2826 2037 2827 2035 2827 2031 2827 2037 2828 2031 2828 2033 2828 2033 2829 2031 2829 2027 2829 2033 2830 2027 2830 2029 2830 2029 2831 2027 2831 2023 2831 2029 2832 2023 2832 2025 2832 2025 2833 2023 2833 2019 2833 2025 2834 2019 2834 2021 2834 2021 2835 2019 2835 2015 2835 1977 2836 1979 2836 2057 2836 1980 2837 1977 2837 2057 2837 1979 2838 1983 2838 2057 2838 1984 2839 1980 2839 2057 2839 1983 2840 1987 2840 2057 2840 1988 2841 1984 2841 2057 2841 1987 2842 1991 2842 2057 2842 1992 2843 1988 2843 2057 2843 1991 2844 1995 2844 2057 2844 1996 2845 1992 2845 2057 2845 1995 2846 1999 2846 2057 2846 2000 2847 1996 2847 2057 2847 1999 2848 2003 2848 2057 2848 2004 2849 2000 2849 2057 2849 2003 2850 2007 2850 2057 2850 2008 2851 2004 2851 2057 2851 2007 2852 2011 2852 2057 2852 2012 2853 2008 2853 2057 2853 2011 2854 2015 2854 2057 2854 2016 2855 2012 2855 2057 2855 2015 2856 2019 2856 2057 2856 2020 2857 2016 2857 2057 2857 2019 2858 2023 2858 2057 2858 2024 2859 2020 2859 2057 2859 2023 2860 2027 2860 2057 2860 2028 2861 2024 2861 2057 2861 2027 2862 2031 2862 2057 2862 2032 2863 2028 2863 2057 2863 2031 2864 2035 2864 2057 2864 2036 2865 2032 2865 2057 2865 2035 2866 2039 2866 2057 2866 2040 2867 2036 2867 2057 2867 2039 2868 2043 2868 2057 2868 2044 2869 2040 2869 2057 2869 2043 2870 2047 2870 2057 2870 2048 2871 2044 2871 2057 2871 2047 2872 2051 2872 2057 2872 2052 2873 2048 2873 2057 2873 2051 2874 2055 2874 2057 2874 2055 2875 2052 2875 2057 2875 1981 2876 1978 2876 2058 2876 1978 2877 1982 2877 2058 2877 1985 2878 1981 2878 2058 2878 1982 2879 1986 2879 2058 2879 1989 2880 1985 2880 2058 2880 1986 2881 1990 2881 2058 2881 1993 2882 1989 2882 2058 2882 1990 2883 1994 2883 2058 2883 1997 2884 1993 2884 2058 2884 1994 2885 1998 2885 2058 2885 2001 2886 1997 2886 2058 2886 1998 2887 2002 2887 2058 2887 2005 2888 2001 2888 2058 2888 2002 2889 2006 2889 2058 2889 2009 2890 2005 2890 2058 2890 2006 2891 2010 2891 2058 2891 2013 2892 2009 2892 2058 2892 2010 2893 2014 2893 2058 2893 2017 2894 2013 2894 2058 2894 2014 2895 2018 2895 2058 2895 2021 2896 2017 2896 2058 2896 2018 2897 2022 2897 2058 2897 2025 2898 2021 2898 2058 2898 2022 2899 2026 2899 2058 2899 2029 2900 2025 2900 2058 2900 2026 2901 2030 2901 2058 2901 2033 2902 2029 2902 2058 2902 2030 2903 2034 2903 2058 2903 2037 2904 2033 2904 2058 2904 2034 2905 2038 2905 2058 2905 2041 2906 2037 2906 2058 2906 2038 2907 2042 2907 2058 2907 2045 2908 2041 2908 2058 2908 2042 2909 2046 2909 2058 2909 2049 2910 2045 2910 2058 2910 2046 2911 2050 2911 2058 2911 2053 2912 2049 2912 2058 2912 2050 2913 2054 2913 2058 2913 2056 2914 2053 2914 2058 2914 2054 2915 2056 2915 2058 2915 2063 2916 2061 2916 2059 2916 2061 2917 2064 2917 2059 2917 2067 2918 2063 2918 2059 2918 2064 2919 2068 2919 2059 2919 2071 2920 2067 2920 2059 2920 2068 2921 2072 2921 2059 2921 2075 2922 2071 2922 2059 2922 2072 2923 2076 2923 2059 2923 2079 2924 2075 2924 2059 2924 2076 2925 2080 2925 2059 2925 2083 2926 2079 2926 2059 2926 2080 2927 2084 2927 2059 2927 2087 2928 2083 2928 2059 2928 2084 2929 2088 2929 2059 2929 2091 2930 2087 2930 2059 2930 2088 2931 2092 2931 2059 2931 2095 2932 2091 2932 2059 2932 2092 2933 2096 2933 2059 2933 2099 2934 2095 2934 2059 2934 2096 2935 2100 2935 2059 2935 2103 2936 2099 2936 2059 2936 2100 2937 2104 2937 2059 2937 2107 2938 2103 2938 2059 2938 2104 2939 2108 2939 2059 2939 2111 2940 2107 2940 2059 2940 2108 2941 2112 2941 2059 2941 2115 2942 2111 2942 2059 2942 2112 2943 2116 2943 2059 2943 2119 2944 2115 2944 2059 2944 2116 2945 2120 2945 2059 2945 2123 2946 2119 2946 2059 2946 2120 2947 2124 2947 2059 2947 2127 2948 2123 2948 2059 2948 2124 2949 2128 2949 2059 2949 2131 2950 2127 2950 2059 2950 2128 2951 2132 2951 2059 2951 2135 2952 2131 2952 2059 2952 2132 2953 2136 2953 2059 2953 2139 2954 2135 2954 2059 2954 2136 2955 2139 2955 2059 2955 2062 2956 2065 2956 2060 2956 2066 2957 2062 2957 2060 2957 2065 2958 2069 2958 2060 2958 2070 2959 2066 2959 2060 2959 2069 2960 2073 2960 2060 2960 2074 2961 2070 2961 2060 2961 2073 2962 2077 2962 2060 2962 2078 2963 2074 2963 2060 2963 2077 2964 2081 2964 2060 2964 2082 2965 2078 2965 2060 2965 2081 2966 2085 2966 2060 2966 2086 2967 2082 2967 2060 2967 2085 2968 2089 2968 2060 2968 2090 2969 2086 2969 2060 2969 2089 2970 2093 2970 2060 2970 2094 2971 2090 2971 2060 2971 2093 2972 2097 2972 2060 2972 2098 2973 2094 2973 2060 2973 2097 2974 2101 2974 2060 2974 2102 2975 2098 2975 2060 2975 2101 2976 2105 2976 2060 2976 2106 2977 2102 2977 2060 2977 2105 2978 2109 2978 2060 2978 2110 2979 2106 2979 2060 2979 2109 2980 2113 2980 2060 2980 2114 2981 2110 2981 2060 2981 2113 2982 2117 2982 2060 2982 2118 2983 2114 2983 2060 2983 2117 2984 2121 2984 2060 2984 2122 2985 2118 2985 2060 2985 2121 2986 2125 2986 2060 2986 2126 2987 2122 2987 2060 2987 2125 2988 2129 2988 2060 2988 2130 2989 2126 2989 2060 2989 2129 2990 2133 2990 2060 2990 2134 2991 2130 2991 2060 2991 2133 2992 2137 2992 2060 2992 2138 2993 2134 2993 2060 2993 2137 2994 2140 2994 2060 2994 2140 2995 2138 2995 2060 2995 2096 2996 2098 2996 2102 2996 2092 2997 2098 2997 2096 2997 2092 2998 2094 2998 2098 2998 2088 2999 2094 2999 2092 2999 2088 3000 2090 3000 2094 3000 2084 3001 2090 3001 2088 3001 2084 3002 2086 3002 2090 3002 2080 3003 2086 3003 2084 3003 2080 3004 2082 3004 2086 3004 2076 3005 2082 3005 2080 3005 2076 3006 2078 3006 2082 3006 2072 3007 2078 3007 2076 3007 2072 3008 2074 3008 2078 3008 2068 3009 2074 3009 2072 3009 2068 3010 2070 3010 2074 3010 2064 3011 2070 3011 2068 3011 2064 3012 2066 3012 2070 3012 2061 3013 2066 3013 2064 3013 2061 3014 2062 3014 2066 3014 2063 3015 2062 3015 2061 3015 2063 3016 2065 3016 2062 3016 2067 3017 2065 3017 2063 3017 2067 3018 2069 3018 2065 3018 2071 3019 2069 3019 2067 3019 2071 3020 2073 3020 2069 3020 2075 3021 2073 3021 2071 3021 2075 3022 2077 3022 2073 3022 2079 3023 2077 3023 2075 3023 2079 3024 2081 3024 2077 3024 2083 3025 2081 3025 2079 3025 2083 3026 2085 3026 2081 3026 2087 3027 2085 3027 2083 3027 2087 3028 2089 3028 2085 3028 2091 3029 2089 3029 2087 3029 2091 3030 2093 3030 2089 3030 2095 3031 2093 3031 2091 3031 2095 3032 2097 3032 2093 3032 2099 3033 2097 3033 2095 3033 2099 3034 2101 3034 2097 3034 2103 3035 2101 3035 2099 3035 2103 3036 2105 3036 2101 3036 2107 3037 2105 3037 2103 3037 2107 3038 2109 3038 2105 3038 2111 3039 2109 3039 2107 3039 2111 3040 2113 3040 2109 3040 2115 3041 2113 3041 2111 3041 2115 3042 2117 3042 2113 3042 2119 3043 2117 3043 2115 3043 2119 3044 2121 3044 2117 3044 2123 3045 2121 3045 2119 3045 2123 3046 2125 3046 2121 3046 2127 3047 2125 3047 2123 3047 2127 3048 2129 3048 2125 3048 2131 3049 2129 3049 2127 3049 2131 3050 2133 3050 2129 3050 2135 3051 2133 3051 2131 3051 2135 3052 2137 3052 2133 3052 2139 3053 2137 3053 2135 3053 2139 3054 2140 3054 2137 3054 2136 3055 2140 3055 2139 3055 2136 3056 2138 3056 2140 3056 2132 3057 2138 3057 2136 3057 2132 3058 2134 3058 2138 3058 2128 3059 2134 3059 2132 3059 2128 3060 2130 3060 2134 3060 2124 3061 2130 3061 2128 3061 2124 3062 2126 3062 2130 3062 2120 3063 2126 3063 2124 3063 2120 3064 2122 3064 2126 3064 2116 3065 2122 3065 2120 3065 2116 3066 2118 3066 2122 3066 2112 3067 2118 3067 2116 3067 2112 3068 2114 3068 2118 3068 2108 3069 2114 3069 2112 3069 2108 3070 2110 3070 2114 3070 2104 3071 2110 3071 2108 3071 2104 3072 2106 3072 2110 3072 2100 3073 2106 3073 2104 3073 2100 3074 2102 3074 2106 3074 2096 3075 2102 3075 2100 3075 2185 3076 2179 3076 2181 3076 2181 3077 2179 3077 2175 3077 2181 3078 2175 3078 2177 3078 2177 3079 2175 3079 2171 3079 2177 3080 2171 3080 2173 3080 2173 3081 2171 3081 2167 3081 2173 3082 2167 3082 2169 3082 2169 3083 2167 3083 2163 3083 2169 3084 2163 3084 2165 3084 2165 3085 2163 3085 2159 3085 2165 3086 2159 3086 2161 3086 2161 3087 2159 3087 2155 3087 2161 3088 2155 3088 2157 3088 2157 3089 2155 3089 2151 3089 2157 3090 2151 3090 2153 3090 2153 3091 2151 3091 2147 3091 2153 3092 2147 3092 2149 3092 2149 3093 2147 3093 2143 3093 2149 3094 2143 3094 2145 3094 2145 3095 2143 3095 2141 3095 2145 3096 2141 3096 2142 3096 2142 3097 2141 3097 2144 3097 2142 3098 2144 3098 2146 3098 2146 3099 2144 3099 2148 3099 2146 3100 2148 3100 2150 3100 2150 3101 2148 3101 2152 3101 2150 3102 2152 3102 2154 3102 2154 3103 2152 3103 2156 3103 2154 3104 2156 3104 2158 3104 2158 3105 2156 3105 2160 3105 2158 3106 2160 3106 2162 3106 2162 3107 2160 3107 2164 3107 2162 3108 2164 3108 2166 3108 2166 3109 2164 3109 2168 3109 2166 3110 2168 3110 2170 3110 2170 3111 2168 3111 2172 3111 2170 3112 2172 3112 2174 3112 2174 3113 2172 3113 2176 3113 2174 3114 2176 3114 2178 3114 2178 3115 2176 3115 2180 3115 2178 3116 2180 3116 2182 3116 2182 3117 2180 3117 2184 3117 2182 3118 2184 3118 2186 3118 2186 3119 2184 3119 2188 3119 2186 3120 2188 3120 2190 3120 2190 3121 2188 3121 2192 3121 2190 3122 2192 3122 2194 3122 2194 3123 2192 3123 2196 3123 2194 3124 2196 3124 2198 3124 2198 3125 2196 3125 2200 3125 2198 3126 2200 3126 2202 3126 2202 3127 2200 3127 2204 3127 2202 3128 2204 3128 2206 3128 2206 3129 2204 3129 2208 3129 2206 3130 2208 3130 2210 3130 2210 3131 2208 3131 2212 3131 2210 3132 2212 3132 2214 3132 2214 3133 2212 3133 2216 3133 2214 3134 2216 3134 2218 3134 2218 3135 2216 3135 2219 3135 2218 3136 2219 3136 2220 3136 2220 3137 2219 3137 2215 3137 2220 3138 2215 3138 2217 3138 2217 3139 2215 3139 2211 3139 2217 3140 2211 3140 2213 3140 2213 3141 2211 3141 2207 3141 2213 3142 2207 3142 2209 3142 2209 3143 2207 3143 2203 3143 2209 3144 2203 3144 2205 3144 2205 3145 2203 3145 2199 3145 2205 3146 2199 3146 2201 3146 2201 3147 2199 3147 2195 3147 2201 3148 2195 3148 2197 3148 2197 3149 2195 3149 2191 3149 2197 3150 2191 3150 2193 3150 2193 3151 2191 3151 2187 3151 2193 3152 2187 3152 2189 3152 2189 3153 2187 3153 2183 3153 2189 3154 2183 3154 2185 3154 2185 3155 2183 3155 2179 3155 2141 3156 2143 3156 2221 3156 2144 3157 2141 3157 2221 3157 2143 3158 2147 3158 2221 3158 2148 3159 2144 3159 2221 3159 2147 3160 2151 3160 2221 3160 2152 3161 2148 3161 2221 3161 2151 3162 2155 3162 2221 3162 2156 3163 2152 3163 2221 3163 2155 3164 2159 3164 2221 3164 2160 3165 2156 3165 2221 3165 2159 3166 2163 3166 2221 3166 2164 3167 2160 3167 2221 3167 2163 3168 2167 3168 2221 3168 2168 3169 2164 3169 2221 3169 2167 3170 2171 3170 2221 3170 2172 3171 2168 3171 2221 3171 2171 3172 2175 3172 2221 3172 2176 3173 2172 3173 2221 3173 2175 3174 2179 3174 2221 3174 2180 3175 2176 3175 2221 3175 2179 3176 2183 3176 2221 3176 2184 3177 2180 3177 2221 3177 2183 3178 2187 3178 2221 3178 2188 3179 2184 3179 2221 3179 2187 3180 2191 3180 2221 3180 2192 3181 2188 3181 2221 3181 2191 3182 2195 3182 2221 3182 2196 3183 2192 3183 2221 3183 2195 3184 2199 3184 2221 3184 2200 3185 2196 3185 2221 3185 2199 3186 2203 3186 2221 3186 2204 3187 2200 3187 2221 3187 2203 3188 2207 3188 2221 3188 2208 3189 2204 3189 2221 3189 2207 3190 2211 3190 2221 3190 2212 3191 2208 3191 2221 3191 2211 3192 2215 3192 2221 3192 2216 3193 2212 3193 2221 3193 2215 3194 2219 3194 2221 3194 2219 3195 2216 3195 2221 3195 2145 3196 2142 3196 2222 3196 2142 3197 2146 3197 2222 3197 2149 3198 2145 3198 2222 3198 2146 3199 2150 3199 2222 3199 2153 3200 2149 3200 2222 3200 2150 3201 2154 3201 2222 3201 2157 3202 2153 3202 2222 3202 2154 3203 2158 3203 2222 3203 2161 3204 2157 3204 2222 3204 2158 3205 2162 3205 2222 3205 2165 3206 2161 3206 2222 3206 2162 3207 2166 3207 2222 3207 2169 3208 2165 3208 2222 3208 2166 3209 2170 3209 2222 3209 2173 3210 2169 3210 2222 3210 2170 3211 2174 3211 2222 3211 2177 3212 2173 3212 2222 3212 2174 3213 2178 3213 2222 3213 2181 3214 2177 3214 2222 3214 2178 3215 2182 3215 2222 3215 2185 3216 2181 3216 2222 3216 2182 3217 2186 3217 2222 3217 2189 3218 2185 3218 2222 3218 2186 3219 2190 3219 2222 3219 2193 3220 2189 3220 2222 3220 2190 3221 2194 3221 2222 3221 2197 3222 2193 3222 2222 3222 2194 3223 2198 3223 2222 3223 2201 3224 2197 3224 2222 3224 2198 3225 2202 3225 2222 3225 2205 3226 2201 3226 2222 3226 2202 3227 2206 3227 2222 3227 2209 3228 2205 3228 2222 3228 2206 3229 2210 3229 2222 3229 2213 3230 2209 3230 2222 3230 2210 3231 2214 3231 2222 3231 2217 3232 2213 3232 2222 3232 2214 3233 2218 3233 2222 3233 2220 3234 2217 3234 2222 3234 2218 3235 2220 3235 2222 3235 2227 3236 2225 3236 2223 3236 2225 3237 2228 3237 2223 3237 2231 3238 2227 3238 2223 3238 2228 3239 2232 3239 2223 3239 2235 3240 2231 3240 2223 3240 2232 3241 2236 3241 2223 3241 2239 3242 2235 3242 2223 3242 2236 3243 2240 3243 2223 3243 2243 3244 2239 3244 2223 3244 2240 3245 2244 3245 2223 3245 2247 3246 2243 3246 2223 3246 2244 3247 2248 3247 2223 3247 2251 3248 2247 3248 2223 3248 2248 3249 2252 3249 2223 3249 2255 3250 2251 3250 2223 3250 2252 3251 2256 3251 2223 3251 2259 3252 2255 3252 2223 3252 2256 3253 2260 3253 2223 3253 2263 3254 2259 3254 2223 3254 2260 3255 2264 3255 2223 3255 2267 3256 2263 3256 2223 3256 2264 3257 2268 3257 2223 3257 2271 3258 2267 3258 2223 3258 2268 3259 2272 3259 2223 3259 2275 3260 2271 3260 2223 3260 2272 3261 2276 3261 2223 3261 2279 3262 2275 3262 2223 3262 2276 3263 2280 3263 2223 3263 2283 3264 2279 3264 2223 3264 2280 3265 2284 3265 2223 3265 2287 3266 2283 3266 2223 3266 2284 3267 2288 3267 2223 3267 2291 3268 2287 3268 2223 3268 2288 3269 2292 3269 2223 3269 2295 3270 2291 3270 2223 3270 2292 3271 2296 3271 2223 3271 2299 3272 2295 3272 2223 3272 2296 3273 2300 3273 2223 3273 2303 3274 2299 3274 2223 3274 2300 3275 2303 3275 2223 3275 2226 3276 2229 3276 2224 3276 2230 3277 2226 3277 2224 3277 2229 3278 2233 3278 2224 3278 2234 3279 2230 3279 2224 3279 2233 3280 2237 3280 2224 3280 2238 3281 2234 3281 2224 3281 2237 3282 2241 3282 2224 3282 2242 3283 2238 3283 2224 3283 2241 3284 2245 3284 2224 3284 2246 3285 2242 3285 2224 3285 2245 3286 2249 3286 2224 3286 2250 3287 2246 3287 2224 3287 2249 3288 2253 3288 2224 3288 2254 3289 2250 3289 2224 3289 2253 3290 2257 3290 2224 3290 2258 3291 2254 3291 2224 3291 2257 3292 2261 3292 2224 3292 2262 3293 2258 3293 2224 3293 2261 3294 2265 3294 2224 3294 2266 3295 2262 3295 2224 3295 2265 3296 2269 3296 2224 3296 2270 3297 2266 3297 2224 3297 2269 3298 2273 3298 2224 3298 2274 3299 2270 3299 2224 3299 2273 3300 2277 3300 2224 3300 2278 3301 2274 3301 2224 3301 2277 3302 2281 3302 2224 3302 2282 3303 2278 3303 2224 3303 2281 3304 2285 3304 2224 3304 2286 3305 2282 3305 2224 3305 2285 3306 2289 3306 2224 3306 2290 3307 2286 3307 2224 3307 2289 3308 2293 3308 2224 3308 2294 3309 2290 3309 2224 3309 2293 3310 2297 3310 2224 3310 2298 3311 2294 3311 2224 3311 2297 3312 2301 3312 2224 3312 2302 3313 2298 3313 2224 3313 2301 3314 2304 3314 2224 3314 2304 3315 2302 3315 2224 3315 2260 3316 2262 3316 2266 3316 2256 3317 2262 3317 2260 3317 2256 3318 2258 3318 2262 3318 2252 3319 2258 3319 2256 3319 2252 3320 2254 3320 2258 3320 2248 3321 2254 3321 2252 3321 2248 3322 2250 3322 2254 3322 2244 3323 2250 3323 2248 3323 2244 3324 2246 3324 2250 3324 2240 3325 2246 3325 2244 3325 2240 3326 2242 3326 2246 3326 2236 3327 2242 3327 2240 3327 2236 3328 2238 3328 2242 3328 2232 3329 2238 3329 2236 3329 2232 3330 2234 3330 2238 3330 2228 3331 2234 3331 2232 3331 2228 3332 2230 3332 2234 3332 2225 3333 2230 3333 2228 3333 2225 3334 2226 3334 2230 3334 2227 3335 2226 3335 2225 3335 2227 3336 2229 3336 2226 3336 2231 3337 2229 3337 2227 3337 2231 3338 2233 3338 2229 3338 2235 3339 2233 3339 2231 3339 2235 3340 2237 3340 2233 3340 2239 3341 2237 3341 2235 3341 2239 3342 2241 3342 2237 3342 2243 3343 2241 3343 2239 3343 2243 3344 2245 3344 2241 3344 2247 3345 2245 3345 2243 3345 2247 3346 2249 3346 2245 3346 2251 3347 2249 3347 2247 3347 2251 3348 2253 3348 2249 3348 2255 3349 2253 3349 2251 3349 2255 3350 2257 3350 2253 3350 2259 3351 2257 3351 2255 3351 2259 3352 2261 3352 2257 3352 2263 3353 2261 3353 2259 3353 2263 3354 2265 3354 2261 3354 2267 3355 2265 3355 2263 3355 2267 3356 2269 3356 2265 3356 2271 3357 2269 3357 2267 3357 2271 3358 2273 3358 2269 3358 2275 3359 2273 3359 2271 3359 2275 3360 2277 3360 2273 3360 2279 3361 2277 3361 2275 3361 2279 3362 2281 3362 2277 3362 2283 3363 2281 3363 2279 3363 2283 3364 2285 3364 2281 3364 2287 3365 2285 3365 2283 3365 2287 3366 2289 3366 2285 3366 2291 3367 2289 3367 2287 3367 2291 3368 2293 3368 2289 3368 2295 3369 2293 3369 2291 3369 2295 3370 2297 3370 2293 3370 2299 3371 2297 3371 2295 3371 2299 3372 2301 3372 2297 3372 2303 3373 2301 3373 2299 3373 2303 3374 2304 3374 2301 3374 2300 3375 2304 3375 2303 3375 2300 3376 2302 3376 2304 3376 2296 3377 2302 3377 2300 3377 2296 3378 2298 3378 2302 3378 2292 3379 2298 3379 2296 3379 2292 3380 2294 3380 2298 3380 2288 3381 2294 3381 2292 3381 2288 3382 2290 3382 2294 3382 2284 3383 2290 3383 2288 3383 2284 3384 2286 3384 2290 3384 2280 3385 2286 3385 2284 3385 2280 3386 2282 3386 2286 3386 2276 3387 2282 3387 2280 3387 2276 3388 2278 3388 2282 3388 2272 3389 2278 3389 2276 3389 2272 3390 2274 3390 2278 3390 2268 3391 2274 3391 2272 3391 2268 3392 2270 3392 2274 3392 2264 3393 2270 3393 2268 3393 2264 3394 2266 3394 2270 3394 2260 3395 2266 3395 2264 3395 2349 3396 2343 3396 2345 3396 2345 3397 2343 3397 2339 3397 2345 3398 2339 3398 2341 3398 2341 3399 2339 3399 2335 3399 2341 3400 2335 3400 2337 3400 2337 3401 2335 3401 2331 3401 2337 3402 2331 3402 2333 3402 2333 3403 2331 3403 2327 3403 2333 3404 2327 3404 2329 3404 2329 3405 2327 3405 2323 3405 2329 3406 2323 3406 2325 3406 2325 3407 2323 3407 2319 3407 2325 3408 2319 3408 2321 3408 2321 3409 2319 3409 2315 3409 2321 3410 2315 3410 2317 3410 2317 3411 2315 3411 2311 3411 2317 3412 2311 3412 2313 3412 2313 3413 2311 3413 2307 3413 2313 3414 2307 3414 2309 3414 2309 3415 2307 3415 2305 3415 2309 3416 2305 3416 2306 3416 2306 3417 2305 3417 2308 3417 2306 3418 2308 3418 2310 3418 2310 3419 2308 3419 2312 3419 2310 3420 2312 3420 2314 3420 2314 3421 2312 3421 2316 3421 2314 3422 2316 3422 2318 3422 2318 3423 2316 3423 2320 3423 2318 3424 2320 3424 2322 3424 2322 3425 2320 3425 2324 3425 2322 3426 2324 3426 2326 3426 2326 3427 2324 3427 2328 3427 2326 3428 2328 3428 2330 3428 2330 3429 2328 3429 2332 3429 2330 3430 2332 3430 2334 3430 2334 3431 2332 3431 2336 3431 2334 3432 2336 3432 2338 3432 2338 3433 2336 3433 2340 3433 2338 3434 2340 3434 2342 3434 2342 3435 2340 3435 2344 3435 2342 3436 2344 3436 2346 3436 2346 3437 2344 3437 2348 3437 2346 3438 2348 3438 2350 3438 2350 3439 2348 3439 2352 3439 2350 3440 2352 3440 2354 3440 2354 3441 2352 3441 2356 3441 2354 3442 2356 3442 2358 3442 2358 3443 2356 3443 2360 3443 2358 3444 2360 3444 2362 3444 2362 3445 2360 3445 2364 3445 2362 3446 2364 3446 2366 3446 2366 3447 2364 3447 2368 3447 2366 3448 2368 3448 2370 3448 2370 3449 2368 3449 2372 3449 2370 3450 2372 3450 2374 3450 2374 3451 2372 3451 2376 3451 2374 3452 2376 3452 2378 3452 2378 3453 2376 3453 2380 3453 2378 3454 2380 3454 2382 3454 2382 3455 2380 3455 2383 3455 2382 3456 2383 3456 2384 3456 2384 3457 2383 3457 2379 3457 2384 3458 2379 3458 2381 3458 2381 3459 2379 3459 2375 3459 2381 3460 2375 3460 2377 3460 2377 3461 2375 3461 2371 3461 2377 3462 2371 3462 2373 3462 2373 3463 2371 3463 2367 3463 2373 3464 2367 3464 2369 3464 2369 3465 2367 3465 2363 3465 2369 3466 2363 3466 2365 3466 2365 3467 2363 3467 2359 3467 2365 3468 2359 3468 2361 3468 2361 3469 2359 3469 2355 3469 2361 3470 2355 3470 2357 3470 2357 3471 2355 3471 2351 3471 2357 3472 2351 3472 2353 3472 2353 3473 2351 3473 2347 3473 2353 3474 2347 3474 2349 3474 2349 3475 2347 3475 2343 3475 2305 3476 2307 3476 2385 3476 2308 3477 2305 3477 2385 3477 2307 3478 2311 3478 2385 3478 2312 3479 2308 3479 2385 3479 2311 3480 2315 3480 2385 3480 2316 3481 2312 3481 2385 3481 2315 3482 2319 3482 2385 3482 2320 3483 2316 3483 2385 3483 2319 3484 2323 3484 2385 3484 2324 3485 2320 3485 2385 3485 2323 3486 2327 3486 2385 3486 2328 3487 2324 3487 2385 3487 2327 3488 2331 3488 2385 3488 2332 3489 2328 3489 2385 3489 2331 3490 2335 3490 2385 3490 2336 3491 2332 3491 2385 3491 2335 3492 2339 3492 2385 3492 2340 3493 2336 3493 2385 3493 2339 3494 2343 3494 2385 3494 2344 3495 2340 3495 2385 3495 2343 3496 2347 3496 2385 3496 2348 3497 2344 3497 2385 3497 2347 3498 2351 3498 2385 3498 2352 3499 2348 3499 2385 3499 2351 3500 2355 3500 2385 3500 2356 3501 2352 3501 2385 3501 2355 3502 2359 3502 2385 3502 2360 3503 2356 3503 2385 3503 2359 3504 2363 3504 2385 3504 2364 3505 2360 3505 2385 3505 2363 3506 2367 3506 2385 3506 2368 3507 2364 3507 2385 3507 2367 3508 2371 3508 2385 3508 2372 3509 2368 3509 2385 3509 2371 3510 2375 3510 2385 3510 2376 3511 2372 3511 2385 3511 2375 3512 2379 3512 2385 3512 2380 3513 2376 3513 2385 3513 2379 3514 2383 3514 2385 3514 2383 3515 2380 3515 2385 3515 2309 3516 2306 3516 2386 3516 2306 3517 2310 3517 2386 3517 2313 3518 2309 3518 2386 3518 2310 3519 2314 3519 2386 3519 2317 3520 2313 3520 2386 3520 2314 3521 2318 3521 2386 3521 2321 3522 2317 3522 2386 3522 2318 3523 2322 3523 2386 3523 2325 3524 2321 3524 2386 3524 2322 3525 2326 3525 2386 3525 2329 3526 2325 3526 2386 3526 2326 3527 2330 3527 2386 3527 2333 3528 2329 3528 2386 3528 2330 3529 2334 3529 2386 3529 2337 3530 2333 3530 2386 3530 2334 3531 2338 3531 2386 3531 2341 3532 2337 3532 2386 3532 2338 3533 2342 3533 2386 3533 2345 3534 2341 3534 2386 3534 2342 3535 2346 3535 2386 3535 2349 3536 2345 3536 2386 3536 2346 3537 2350 3537 2386 3537 2353 3538 2349 3538 2386 3538 2350 3539 2354 3539 2386 3539 2357 3540 2353 3540 2386 3540 2354 3541 2358 3541 2386 3541 2361 3542 2357 3542 2386 3542 2358 3543 2362 3543 2386 3543 2365 3544 2361 3544 2386 3544 2362 3545 2366 3545 2386 3545 2369 3546 2365 3546 2386 3546 2366 3547 2370 3547 2386 3547 2373 3548 2369 3548 2386 3548 2370 3549 2374 3549 2386 3549 2377 3550 2373 3550 2386 3550 2374 3551 2378 3551 2386 3551 2381 3552 2377 3552 2386 3552 2378 3553 2382 3553 2386 3553 2384 3554 2381 3554 2386 3554 2382 3555 2384 3555 2386 3555 2391 3556 2389 3556 2387 3556 2389 3557 2392 3557 2387 3557 2395 3558 2391 3558 2387 3558 2392 3559 2396 3559 2387 3559 2399 3560 2395 3560 2387 3560 2396 3561 2400 3561 2387 3561 2403 3562 2399 3562 2387 3562 2400 3563 2404 3563 2387 3563 2407 3564 2403 3564 2387 3564 2404 3565 2408 3565 2387 3565 2411 3566 2407 3566 2387 3566 2408 3567 2412 3567 2387 3567 2415 3568 2411 3568 2387 3568 2412 3569 2416 3569 2387 3569 2419 3570 2415 3570 2387 3570 2416 3571 2420 3571 2387 3571 2423 3572 2419 3572 2387 3572 2420 3573 2424 3573 2387 3573 2427 3574 2423 3574 2387 3574 2424 3575 2428 3575 2387 3575 2431 3576 2427 3576 2387 3576 2428 3577 2432 3577 2387 3577 2435 3578 2431 3578 2387 3578 2432 3579 2436 3579 2387 3579 2439 3580 2435 3580 2387 3580 2436 3581 2440 3581 2387 3581 2443 3582 2439 3582 2387 3582 2440 3583 2444 3583 2387 3583 2447 3584 2443 3584 2387 3584 2444 3585 2448 3585 2387 3585 2451 3586 2447 3586 2387 3586 2448 3587 2452 3587 2387 3587 2455 3588 2451 3588 2387 3588 2452 3589 2456 3589 2387 3589 2459 3590 2455 3590 2387 3590 2456 3591 2460 3591 2387 3591 2463 3592 2459 3592 2387 3592 2460 3593 2464 3593 2387 3593 2467 3594 2463 3594 2387 3594 2464 3595 2467 3595 2387 3595 2390 3596 2393 3596 2388 3596 2394 3597 2390 3597 2388 3597 2393 3598 2397 3598 2388 3598 2398 3599 2394 3599 2388 3599 2397 3600 2401 3600 2388 3600 2402 3601 2398 3601 2388 3601 2401 3602 2405 3602 2388 3602 2406 3603 2402 3603 2388 3603 2405 3604 2409 3604 2388 3604 2410 3605 2406 3605 2388 3605 2409 3606 2413 3606 2388 3606 2414 3607 2410 3607 2388 3607 2413 3608 2417 3608 2388 3608 2418 3609 2414 3609 2388 3609 2417 3610 2421 3610 2388 3610 2422 3611 2418 3611 2388 3611 2421 3612 2425 3612 2388 3612 2426 3613 2422 3613 2388 3613 2425 3614 2429 3614 2388 3614 2430 3615 2426 3615 2388 3615 2429 3616 2433 3616 2388 3616 2434 3617 2430 3617 2388 3617 2433 3618 2437 3618 2388 3618 2438 3619 2434 3619 2388 3619 2437 3620 2441 3620 2388 3620 2442 3621 2438 3621 2388 3621 2441 3622 2445 3622 2388 3622 2446 3623 2442 3623 2388 3623 2445 3624 2449 3624 2388 3624 2450 3625 2446 3625 2388 3625 2449 3626 2453 3626 2388 3626 2454 3627 2450 3627 2388 3627 2453 3628 2457 3628 2388 3628 2458 3629 2454 3629 2388 3629 2457 3630 2461 3630 2388 3630 2462 3631 2458 3631 2388 3631 2461 3632 2465 3632 2388 3632 2466 3633 2462 3633 2388 3633 2465 3634 2468 3634 2388 3634 2468 3635 2466 3635 2388 3635 2424 3636 2426 3636 2430 3636 2420 3637 2426 3637 2424 3637 2420 3638 2422 3638 2426 3638 2416 3639 2422 3639 2420 3639 2416 3640 2418 3640 2422 3640 2412 3641 2418 3641 2416 3641 2412 3642 2414 3642 2418 3642 2408 3643 2414 3643 2412 3643 2408 3644 2410 3644 2414 3644 2404 3645 2410 3645 2408 3645 2404 3646 2406 3646 2410 3646 2400 3647 2406 3647 2404 3647 2400 3648 2402 3648 2406 3648 2396 3649 2402 3649 2400 3649 2396 3650 2398 3650 2402 3650 2392 3651 2398 3651 2396 3651 2392 3652 2394 3652 2398 3652 2389 3653 2394 3653 2392 3653 2389 3654 2390 3654 2394 3654 2391 3655 2390 3655 2389 3655 2391 3656 2393 3656 2390 3656 2395 3657 2393 3657 2391 3657 2395 3658 2397 3658 2393 3658 2399 3659 2397 3659 2395 3659 2399 3660 2401 3660 2397 3660 2403 3661 2401 3661 2399 3661 2403 3662 2405 3662 2401 3662 2407 3663 2405 3663 2403 3663 2407 3664 2409 3664 2405 3664 2411 3665 2409 3665 2407 3665 2411 3666 2413 3666 2409 3666 2415 3667 2413 3667 2411 3667 2415 3668 2417 3668 2413 3668 2419 3669 2417 3669 2415 3669 2419 3670 2421 3670 2417 3670 2423 3671 2421 3671 2419 3671 2423 3672 2425 3672 2421 3672 2427 3673 2425 3673 2423 3673 2427 3674 2429 3674 2425 3674 2431 3675 2429 3675 2427 3675 2431 3676 2433 3676 2429 3676 2435 3677 2433 3677 2431 3677 2435 3678 2437 3678 2433 3678 2439 3679 2437 3679 2435 3679 2439 3680 2441 3680 2437 3680 2443 3681 2441 3681 2439 3681 2443 3682 2445 3682 2441 3682 2447 3683 2445 3683 2443 3683 2447 3684 2449 3684 2445 3684 2451 3685 2449 3685 2447 3685 2451 3686 2453 3686 2449 3686 2455 3687 2453 3687 2451 3687 2455 3688 2457 3688 2453 3688 2459 3689 2457 3689 2455 3689 2459 3690 2461 3690 2457 3690 2463 3691 2461 3691 2459 3691 2463 3692 2465 3692 2461 3692 2467 3693 2465 3693 2463 3693 2467 3694 2468 3694 2465 3694 2464 3695 2468 3695 2467 3695 2464 3696 2466 3696 2468 3696 2460 3697 2466 3697 2464 3697 2460 3698 2462 3698 2466 3698 2456 3699 2462 3699 2460 3699 2456 3700 2458 3700 2462 3700 2452 3701 2458 3701 2456 3701 2452 3702 2454 3702 2458 3702 2448 3703 2454 3703 2452 3703 2448 3704 2450 3704 2454 3704 2444 3705 2450 3705 2448 3705 2444 3706 2446 3706 2450 3706 2440 3707 2446 3707 2444 3707 2440 3708 2442 3708 2446 3708 2436 3709 2442 3709 2440 3709 2436 3710 2438 3710 2442 3710 2432 3711 2438 3711 2436 3711 2432 3712 2434 3712 2438 3712 2428 3713 2434 3713 2432 3713 2428 3714 2430 3714 2434 3714 2424 3715 2430 3715 2428 3715 2513 3716 2507 3716 2509 3716 2509 3717 2507 3717 2503 3717 2509 3718 2503 3718 2505 3718 2505 3719 2503 3719 2499 3719 2505 3720 2499 3720 2501 3720 2501 3721 2499 3721 2495 3721 2501 3722 2495 3722 2497 3722 2497 3723 2495 3723 2491 3723 2497 3724 2491 3724 2493 3724 2493 3725 2491 3725 2487 3725 2493 3726 2487 3726 2489 3726 2489 3727 2487 3727 2483 3727 2489 3728 2483 3728 2485 3728 2485 3729 2483 3729 2479 3729 2485 3730 2479 3730 2481 3730 2481 3731 2479 3731 2475 3731 2481 3732 2475 3732 2477 3732 2477 3733 2475 3733 2471 3733 2477 3734 2471 3734 2473 3734 2473 3735 2471 3735 2469 3735 2473 3736 2469 3736 2470 3736 2470 3737 2469 3737 2472 3737 2470 3738 2472 3738 2474 3738 2474 3739 2472 3739 2476 3739 2474 3740 2476 3740 2478 3740 2478 3741 2476 3741 2480 3741 2478 3742 2480 3742 2482 3742 2482 3743 2480 3743 2484 3743 2482 3744 2484 3744 2486 3744 2486 3745 2484 3745 2488 3745 2486 3746 2488 3746 2490 3746 2490 3747 2488 3747 2492 3747 2490 3748 2492 3748 2494 3748 2494 3749 2492 3749 2496 3749 2494 3750 2496 3750 2498 3750 2498 3751 2496 3751 2500 3751 2498 3752 2500 3752 2502 3752 2502 3753 2500 3753 2504 3753 2502 3754 2504 3754 2506 3754 2506 3755 2504 3755 2508 3755 2506 3756 2508 3756 2510 3756 2510 3757 2508 3757 2512 3757 2510 3758 2512 3758 2514 3758 2514 3759 2512 3759 2516 3759 2514 3760 2516 3760 2518 3760 2518 3761 2516 3761 2520 3761 2518 3762 2520 3762 2522 3762 2522 3763 2520 3763 2524 3763 2522 3764 2524 3764 2526 3764 2526 3765 2524 3765 2528 3765 2526 3766 2528 3766 2530 3766 2530 3767 2528 3767 2532 3767 2530 3768 2532 3768 2534 3768 2534 3769 2532 3769 2536 3769 2534 3770 2536 3770 2538 3770 2538 3771 2536 3771 2540 3771 2538 3772 2540 3772 2542 3772 2542 3773 2540 3773 2544 3773 2542 3774 2544 3774 2546 3774 2546 3775 2544 3775 2547 3775 2546 3776 2547 3776 2548 3776 2548 3777 2547 3777 2543 3777 2548 3778 2543 3778 2545 3778 2545 3779 2543 3779 2539 3779 2545 3780 2539 3780 2541 3780 2541 3781 2539 3781 2535 3781 2541 3782 2535 3782 2537 3782 2537 3783 2535 3783 2531 3783 2537 3784 2531 3784 2533 3784 2533 3785 2531 3785 2527 3785 2533 3786 2527 3786 2529 3786 2529 3787 2527 3787 2523 3787 2529 3788 2523 3788 2525 3788 2525 3789 2523 3789 2519 3789 2525 3790 2519 3790 2521 3790 2521 3791 2519 3791 2515 3791 2521 3792 2515 3792 2517 3792 2517 3793 2515 3793 2511 3793 2517 3794 2511 3794 2513 3794 2513 3795 2511 3795 2507 3795 2469 3796 2471 3796 2549 3796 2472 3797 2469 3797 2549 3797 2471 3798 2475 3798 2549 3798 2476 3799 2472 3799 2549 3799 2475 3800 2479 3800 2549 3800 2480 3801 2476 3801 2549 3801 2479 3802 2483 3802 2549 3802 2484 3803 2480 3803 2549 3803 2483 3804 2487 3804 2549 3804 2488 3805 2484 3805 2549 3805 2487 3806 2491 3806 2549 3806 2492 3807 2488 3807 2549 3807 2491 3808 2495 3808 2549 3808 2496 3809 2492 3809 2549 3809 2495 3810 2499 3810 2549 3810 2500 3811 2496 3811 2549 3811 2499 3812 2503 3812 2549 3812 2504 3813 2500 3813 2549 3813 2503 3814 2507 3814 2549 3814 2508 3815 2504 3815 2549 3815 2507 3816 2511 3816 2549 3816 2512 3817 2508 3817 2549 3817 2511 3818 2515 3818 2549 3818 2516 3819 2512 3819 2549 3819 2515 3820 2519 3820 2549 3820 2520 3821 2516 3821 2549 3821 2519 3822 2523 3822 2549 3822 2524 3823 2520 3823 2549 3823 2523 3824 2527 3824 2549 3824 2528 3825 2524 3825 2549 3825 2527 3826 2531 3826 2549 3826 2532 3827 2528 3827 2549 3827 2531 3828 2535 3828 2549 3828 2536 3829 2532 3829 2549 3829 2535 3830 2539 3830 2549 3830 2540 3831 2536 3831 2549 3831 2539 3832 2543 3832 2549 3832 2544 3833 2540 3833 2549 3833 2543 3834 2547 3834 2549 3834 2547 3835 2544 3835 2549 3835 2473 3836 2470 3836 2550 3836 2470 3837 2474 3837 2550 3837 2477 3838 2473 3838 2550 3838 2474 3839 2478 3839 2550 3839 2481 3840 2477 3840 2550 3840 2478 3841 2482 3841 2550 3841 2485 3842 2481 3842 2550 3842 2482 3843 2486 3843 2550 3843 2489 3844 2485 3844 2550 3844 2486 3845 2490 3845 2550 3845 2493 3846 2489 3846 2550 3846 2490 3847 2494 3847 2550 3847 2497 3848 2493 3848 2550 3848 2494 3849 2498 3849 2550 3849 2501 3850 2497 3850 2550 3850 2498 3851 2502 3851 2550 3851 2505 3852 2501 3852 2550 3852 2502 3853 2506 3853 2550 3853 2509 3854 2505 3854 2550 3854 2506 3855 2510 3855 2550 3855 2513 3856 2509 3856 2550 3856 2510 3857 2514 3857 2550 3857 2517 3858 2513 3858 2550 3858 2514 3859 2518 3859 2550 3859 2521 3860 2517 3860 2550 3860 2518 3861 2522 3861 2550 3861 2525 3862 2521 3862 2550 3862 2522 3863 2526 3863 2550 3863 2529 3864 2525 3864 2550 3864 2526 3865 2530 3865 2550 3865 2533 3866 2529 3866 2550 3866 2530 3867 2534 3867 2550 3867 2537 3868 2533 3868 2550 3868 2534 3869 2538 3869 2550 3869 2541 3870 2537 3870 2550 3870 2538 3871 2542 3871 2550 3871 2545 3872 2541 3872 2550 3872 2542 3873 2546 3873 2550 3873 2548 3874 2545 3874 2550 3874 2546 3875 2548 3875 2550 3875 2555 3876 2553 3876 2551 3876 2553 3877 2556 3877 2551 3877 2559 3878 2555 3878 2551 3878 2556 3879 2560 3879 2551 3879 2563 3880 2559 3880 2551 3880 2560 3881 2564 3881 2551 3881 2567 3882 2563 3882 2551 3882 2564 3883 2568 3883 2551 3883 2571 3884 2567 3884 2551 3884 2568 3885 2572 3885 2551 3885 2575 3886 2571 3886 2551 3886 2572 3887 2576 3887 2551 3887 2579 3888 2575 3888 2551 3888 2576 3889 2580 3889 2551 3889 2583 3890 2579 3890 2551 3890 2580 3891 2584 3891 2551 3891 2587 3892 2583 3892 2551 3892 2584 3893 2588 3893 2551 3893 2591 3894 2587 3894 2551 3894 2588 3895 2592 3895 2551 3895 2595 3896 2591 3896 2551 3896 2592 3897 2596 3897 2551 3897 2599 3898 2595 3898 2551 3898 2596 3899 2600 3899 2551 3899 2603 3900 2599 3900 2551 3900 2600 3901 2604 3901 2551 3901 2607 3902 2603 3902 2551 3902 2604 3903 2608 3903 2551 3903 2611 3904 2607 3904 2551 3904 2608 3905 2612 3905 2551 3905 2615 3906 2611 3906 2551 3906 2612 3907 2616 3907 2551 3907 2619 3908 2615 3908 2551 3908 2616 3909 2620 3909 2551 3909 2623 3910 2619 3910 2551 3910 2620 3911 2624 3911 2551 3911 2627 3912 2623 3912 2551 3912 2624 3913 2628 3913 2551 3913 2631 3914 2627 3914 2551 3914 2628 3915 2631 3915 2551 3915 2554 3916 2557 3916 2552 3916 2558 3917 2554 3917 2552 3917 2557 3918 2561 3918 2552 3918 2562 3919 2558 3919 2552 3919 2561 3920 2565 3920 2552 3920 2566 3921 2562 3921 2552 3921 2565 3922 2569 3922 2552 3922 2570 3923 2566 3923 2552 3923 2569 3924 2573 3924 2552 3924 2574 3925 2570 3925 2552 3925 2573 3926 2577 3926 2552 3926 2578 3927 2574 3927 2552 3927 2577 3928 2581 3928 2552 3928 2582 3929 2578 3929 2552 3929 2581 3930 2585 3930 2552 3930 2586 3931 2582 3931 2552 3931 2585 3932 2589 3932 2552 3932 2590 3933 2586 3933 2552 3933 2589 3934 2593 3934 2552 3934 2594 3935 2590 3935 2552 3935 2593 3936 2597 3936 2552 3936 2598 3937 2594 3937 2552 3937 2597 3938 2601 3938 2552 3938 2602 3939 2598 3939 2552 3939 2601 3940 2605 3940 2552 3940 2606 3941 2602 3941 2552 3941 2605 3942 2609 3942 2552 3942 2610 3943 2606 3943 2552 3943 2609 3944 2613 3944 2552 3944 2614 3945 2610 3945 2552 3945 2613 3946 2617 3946 2552 3946 2618 3947 2614 3947 2552 3947 2617 3948 2621 3948 2552 3948 2622 3949 2618 3949 2552 3949 2621 3950 2625 3950 2552 3950 2626 3951 2622 3951 2552 3951 2625 3952 2629 3952 2552 3952 2630 3953 2626 3953 2552 3953 2629 3954 2632 3954 2552 3954 2632 3955 2630 3955 2552 3955 2588 3956 2590 3956 2594 3956 2584 3957 2590 3957 2588 3957 2584 3958 2586 3958 2590 3958 2580 3959 2586 3959 2584 3959 2580 3960 2582 3960 2586 3960 2576 3961 2582 3961 2580 3961 2576 3962 2578 3962 2582 3962 2572 3963 2578 3963 2576 3963 2572 3964 2574 3964 2578 3964 2568 3965 2574 3965 2572 3965 2568 3966 2570 3966 2574 3966 2564 3967 2570 3967 2568 3967 2564 3968 2566 3968 2570 3968 2560 3969 2566 3969 2564 3969 2560 3970 2562 3970 2566 3970 2556 3971 2562 3971 2560 3971 2556 3972 2558 3972 2562 3972 2553 3973 2558 3973 2556 3973 2553 3974 2554 3974 2558 3974 2555 3975 2554 3975 2553 3975 2555 3976 2557 3976 2554 3976 2559 3977 2557 3977 2555 3977 2559 3978 2561 3978 2557 3978 2563 3979 2561 3979 2559 3979 2563 3980 2565 3980 2561 3980 2567 3981 2565 3981 2563 3981 2567 3982 2569 3982 2565 3982 2571 3983 2569 3983 2567 3983 2571 3984 2573 3984 2569 3984 2575 3985 2573 3985 2571 3985 2575 3986 2577 3986 2573 3986 2579 3987 2577 3987 2575 3987 2579 3988 2581 3988 2577 3988 2583 3989 2581 3989 2579 3989 2583 3990 2585 3990 2581 3990 2587 3991 2585 3991 2583 3991 2587 3992 2589 3992 2585 3992 2591 3993 2589 3993 2587 3993 2591 3994 2593 3994 2589 3994 2595 3995 2593 3995 2591 3995 2595 3996 2597 3996 2593 3996 2599 3997 2597 3997 2595 3997 2599 3998 2601 3998 2597 3998 2603 3999 2601 3999 2599 3999 2603 4000 2605 4000 2601 4000 2607 4001 2605 4001 2603 4001 2607 4002 2609 4002 2605 4002 2611 4003 2609 4003 2607 4003 2611 4004 2613 4004 2609 4004 2615 4005 2613 4005 2611 4005 2615 4006 2617 4006 2613 4006 2619 4007 2617 4007 2615 4007 2619 4008 2621 4008 2617 4008 2623 4009 2621 4009 2619 4009 2623 4010 2625 4010 2621 4010 2627 4011 2625 4011 2623 4011 2627 4012 2629 4012 2625 4012 2631 4013 2629 4013 2627 4013 2631 4014 2632 4014 2629 4014 2628 4015 2632 4015 2631 4015 2628 4016 2630 4016 2632 4016 2624 4017 2630 4017 2628 4017 2624 4018 2626 4018 2630 4018 2620 4019 2626 4019 2624 4019 2620 4020 2622 4020 2626 4020 2616 4021 2622 4021 2620 4021 2616 4022 2618 4022 2622 4022 2612 4023 2618 4023 2616 4023 2612 4024 2614 4024 2618 4024 2608 4025 2614 4025 2612 4025 2608 4026 2610 4026 2614 4026 2604 4027 2610 4027 2608 4027 2604 4028 2606 4028 2610 4028 2600 4029 2606 4029 2604 4029 2600 4030 2602 4030 2606 4030 2596 4031 2602 4031 2600 4031 2596 4032 2598 4032 2602 4032 2592 4033 2598 4033 2596 4033 2592 4034 2594 4034 2598 4034 2588 4035 2594 4035 2592 4035 1929 4036 1931 4036 1962 4036 1962 4036 1960 4036 1929 4036 1917 4037 1945 4037 1946 4037 1946 4037 1918 4037 1917 4037 1930 4038 1961 4038 1963 4038 1963 4038 1932 4038 1930 4038 1943 4039 1944 4039 1975 4039 1975 4039 1974 4039 1943 4039 1874 4040 1878 4040 1905 4040 1905 4040 1901 4040 1874 4040 1901 4041 1929 4041 1927 4041 1905 4042 1931 4042 1929 4042 1929 4042 1901 4042 1905 4042 1863 4043 1891 4043 1892 4043 1892 4043 1864 4043 1863 4043 1876 4044 1903 4044 1904 4044 1904 4044 1877 4044 1876 4044 1888 4045 1889 4045 1916 4045 1916 4045 1915 4045 1888 4045 1877 4046 1890 4046 1889 4046 1944 4047 1975 4047 1963 4047 1949 4048 1957 4048 1951 4048 1951 4049 1957 4049 1953 4049 1867 4050 1869 4050 1873 4050 1869 4051 1871 4051 1873 4051 1866 4052 1872 4052 1868 4052 1868 4053 1872 4053 1870 4053 1864 4054 1876 4054 1877 4054 1877 4054 1889 4054 1864 4054 1946 4055 1975 4055 1963 4055 1963 4055 1961 4055 1946 4055 1945 4056 1960 4056 1962 4056 1962 4056 1974 4056 1945 4056 1863 4057 1888 4057 1905 4057 1905 4057 1874 4057 1863 4057 1863 4058 1864 4058 1889 4058 1889 4058 1888 4058 1863 4058 1945 4059 1974 4059 1975 4059 1975 4059 1946 4059 1945 4059 1891 4060 1863 4060 1866 4060 1866 4060 1893 4060 1891 4060 1893 4061 1866 4061 1868 4061 1868 4061 1895 4061 1893 4061 1865 4062 1892 4062 1894 4062 1894 4062 1867 4062 1865 4062 1895 4063 1868 4063 1870 4063 1870 4063 1897 4063 1895 4063 1867 4064 1894 4064 1896 4064 1896 4064 1869 4064 1867 4064 1869 4065 1896 4065 1898 4065 1898 4065 1871 4065 1869 4065 1899 4066 1897 4066 1870 4066 1870 4066 1872 4066 1899 4066 1871 4067 1898 4067 1900 4067 1900 4067 1873 4067 1871 4067 1902 4068 1875 4068 1873 4068 1873 4068 1900 4068 1902 4068 1903 4069 1876 4069 1875 4069 1875 4069 1902 4069 1903 4069 1890 4070 1877 4070 1879 4070 1879 4070 1887 4070 1890 4070 1884 4071 1878 4071 1888 4071 1888 4071 1886 4071 1884 4071 1905 4072 1878 4072 1880 4072 1880 4072 1907 4072 1905 4072 1887 4073 1879 4073 1881 4073 1881 4073 1885 4073 1887 4073 1906 4074 1879 4074 1877 4074 1877 4074 1904 4074 1906 4074 1907 4075 1880 4075 1882 4075 1882 4075 1909 4075 1907 4075 1908 4076 1881 4076 1879 4076 1879 4076 1906 4076 1908 4076 1909 4077 1882 4077 1884 4077 1884 4077 1911 4077 1909 4077 1910 4078 1883 4078 1881 4078 1881 4078 1908 4078 1910 4078 1911 4079 1884 4079 1886 4079 1886 4079 1913 4079 1911 4079 1912 4080 1885 4080 1883 4080 1883 4080 1910 4080 1912 4080 1913 4081 1886 4081 1888 4081 1888 4081 1915 4081 1913 4081 1914 4082 1887 4082 1885 4082 1885 4082 1912 4082 1914 4082 1916 4083 1890 4083 1887 4083 1887 4083 1914 4083 1916 4083 1891 4084 1917 4084 1918 4084 1918 4084 1892 4084 1891 4084 1894 4085 1892 4085 1918 4085 1918 4085 1920 4085 1894 4085 1891 4086 1893 4086 1919 4086 1919 4086 1917 4086 1891 4086 1896 4087 1894 4087 1920 4087 1920 4087 1922 4087 1896 4087 1893 4088 1895 4088 1921 4088 1921 4088 1919 4088 1893 4088 1898 4089 1896 4089 1922 4089 1922 4089 1924 4089 1898 4089 1895 4090 1897 4090 1923 4090 1923 4090 1921 4090 1895 4090 1900 4091 1898 4091 1924 4091 1924 4091 1926 4091 1900 4091 1897 4092 1899 4092 1925 4092 1925 4092 1923 4092 1897 4092 1902 4093 1900 4093 1926 4093 1926 4093 1928 4093 1902 4093 1899 4094 1901 4094 1927 4094 1927 4094 1925 4094 1899 4094 1903 4095 1902 4095 1928 4095 1928 4095 1930 4095 1903 4095 1903 4096 1930 4096 1932 4096 1932 4096 1904 4096 1903 4096 1906 4097 1904 4097 1932 4097 1932 4097 1934 4097 1906 4097 1908 4098 1906 4098 1934 4098 1934 4098 1936 4098 1908 4098 1905 4099 1907 4099 1935 4099 1935 4099 1933 4099 1905 4099 1910 4100 1908 4100 1936 4100 1936 4100 1938 4100 1910 4100 1907 4101 1909 4101 1937 4101 1937 4101 1935 4101 1907 4101 1912 4102 1910 4102 1938 4102 1938 4102 1940 4102 1912 4102 1909 4103 1911 4103 1939 4103 1939 4103 1937 4103 1909 4103 1914 4104 1912 4104 1940 4104 1940 4104 1942 4104 1914 4104 1911 4105 1913 4105 1941 4105 1941 4105 1939 4105 1911 4105 1916 4106 1914 4106 1942 4106 1942 4106 1944 4106 1916 4106 1913 4107 1915 4107 1943 4107 1943 4107 1941 4107 1913 4107 1916 4108 1944 4108 1943 4108 1943 4108 1915 4108 1916 4108 1945 4109 1917 4109 1919 4109 1919 4109 1948 4109 1945 4109 1948 4110 1919 4110 1921 4110 1921 4110 1950 4110 1948 4110 1918 4111 1947 4111 1949 4111 1949 4111 1920 4111 1918 4111 1950 4112 1921 4112 1923 4112 1923 4112 1952 4112 1950 4112 1920 4113 1949 4113 1951 4113 1951 4113 1922 4113 1920 4113 1924 4114 1922 4114 1951 4114 1951 4114 1953 4114 1924 4114 1925 4115 1956 4115 1954 4115 1954 4115 1923 4115 1925 4115 1927 4116 1958 4116 1956 4116 1956 4116 1925 4116 1927 4116 1957 4117 1926 4117 1924 4117 1924 4117 1955 4117 1957 4117 1929 4118 1960 4118 1958 4118 1958 4118 1927 4118 1929 4118 1959 4119 1928 4119 1926 4119 1926 4119 1957 4119 1959 4119 1961 4120 1930 4120 1928 4120 1928 4120 1959 4120 1961 4120 1933 4121 1964 4121 1962 4121 1962 4121 1931 4121 1933 4121 1935 4122 1966 4122 1964 4122 1964 4122 1933 4122 1935 4122 1932 4123 1963 4123 1965 4123 1965 4123 1934 4123 1932 4123 1937 4124 1968 4124 1966 4124 1966 4124 1935 4124 1937 4124 1934 4125 1965 4125 1967 4125 1967 4125 1936 4125 1934 4125 1939 4126 1970 4126 1968 4126 1968 4126 1937 4126 1939 4126 1936 4127 1967 4127 1969 4127 1969 4127 1938 4127 1936 4127 1941 4128 1972 4128 1970 4128 1970 4128 1939 4128 1941 4128 1938 4129 1969 4129 1971 4129 1971 4129 1940 4129 1938 4129 1943 4130 1974 4130 1972 4130 1972 4130 1941 4130 1943 4130 1940 4131 1971 4131 1973 4131 1973 4131 1942 4131 1940 4131 1942 4132 1973 4132 1976 4132 1976 4132 1944 4132 1942 4132 1976 4133 1965 4133 1963 4133 1963 4133 1975 4133 1976 4133 1964 4134 1966 4134 1972 4134 1972 4134 1974 4134 1964 4134 1973 4135 1967 4135 1965 4135 1965 4135 1976 4135 1973 4135 1946 4136 1961 4136 1959 4136 1959 4136 1947 4136 1946 4136 1947 4137 1959 4137 1957 4137 1957 4137 1949 4137 1947 4137 1876 4138 1864 4138 1865 4138 1865 4138 1875 4138 1876 4138 1865 4139 1867 4139 1873 4139 1873 4139 1875 4139 1865 4139 1863 4140 1874 4140 1872 4140 1872 4140 1866 4140 1863 4140 1874 4141 1901 4141 1899 4141 1899 4141 1872 4141 1874 4141 1952 4142 1958 4142 1960 4142 1960 4142 1945 4142 1952 4142 2638 4143 2636 4143 2640 4143 2636 4144 2633 4144 2640 4144 2640 4145 2633 4145 2642 4145 2642 4146 2633 4146 2644 4146 2654 4147 2652 4147 2650 4147 2633 4148 2646 4148 2644 4148 2654 4149 2660 4149 2656 4149 2656 4150 2660 4150 2658 4150 2742 4151 2744 4151 2740 4151 2740 4152 2744 4152 2746 4152 2726 4153 2728 4153 2724 4153 2724 4154 2728 4154 2730 4154 2724 4155 2730 4155 2722 4155 2722 4156 2730 4156 2732 4156 2722 4157 2732 4157 2719 4157 2729 4158 2727 4158 2731 4158 2703 4159 2675 4159 2705 4159 2705 4160 2675 4160 2677 4160 2678 4161 2706 4161 2708 4161 2678 4162 2708 4162 2680 4162 2680 4163 2708 4163 2710 4163 2680 4164 2710 4164 2682 4164 2682 4165 2710 4165 2712 4165 2682 4166 2712 4166 2684 4166 2684 4167 2712 4167 2714 4167 2684 4168 2714 4168 2686 4168 2686 4169 2714 4169 2716 4169 2686 4170 2716 4170 2688 4170 2688 4171 2716 4171 2718 4171 2688 4172 2718 4172 2690 4172 2689 4173 2715 4173 2687 4173 2687 4174 2715 4174 2713 4174 2687 4175 2713 4175 2685 4175 2685 4176 2713 4176 2711 4176 2685 4177 2711 4177 2683 4177 2683 4178 2711 4178 2709 4178 2683 4179 2709 4179 2681 4179 2681 4180 2709 4180 2707 4180 2681 4181 2707 4181 2679 4181 2679 4182 2707 4182 2705 4182 2679 4183 2705 4183 2677 4183 2675 4184 2703 4184 2701 4184 2675 4185 2701 4185 2673 4185 2673 4186 2701 4186 2699 4186 2673 4187 2699 4187 2671 4187 2671 4188 2699 4188 2697 4188 2671 4189 2697 4189 2669 4189 2669 4190 2697 4190 2695 4190 2669 4191 2695 4191 2667 4191 2667 4192 2695 4192 2693 4192 2667 4193 2693 4193 2665 4193 2665 4194 2693 4194 2691 4194 2664 4195 2694 4195 2666 4195 2666 4196 2694 4196 2696 4196 2666 4197 2696 4197 2668 4197 2668 4198 2696 4198 2698 4198 2668 4199 2698 4199 2670 4199 2670 4200 2698 4200 2700 4200 2670 4201 2700 4201 2672 4201 2672 4202 2700 4202 2702 4202 2672 4203 2702 4203 2674 4203 2674 4204 2702 4204 2704 4204 2674 4205 2704 4205 2676 4205 2703 4206 2732 4206 2701 4206 2701 4207 2732 4207 2730 4207 2701 4208 2730 4208 2699 4208 2699 4209 2730 4209 2728 4209 2699 4210 2728 4210 2697 4210 2697 4211 2728 4211 2726 4211 2697 4212 2726 4212 2695 4212 2695 4213 2726 4213 2724 4213 2695 4214 2724 4214 2693 4214 2693 4215 2724 4215 2722 4215 2693 4216 2722 4216 2691 4216 2691 4217 2722 4217 2719 4217 2734 4218 2705 4218 2736 4218 2736 4219 2705 4219 2707 4219 2736 4220 2707 4220 2738 4220 2738 4221 2707 4221 2709 4221 2738 4222 2709 4222 2740 4222 2740 4223 2709 4223 2711 4223 2717 4224 2746 4224 2715 4224 2715 4225 2746 4225 2744 4225 2715 4226 2744 4226 2713 4226 2713 4227 2744 4227 2742 4227 2713 4228 2742 4228 2711 4228 2711 4229 2742 4229 2740 4229 2692 4230 2720 4230 2721 4230 2748 4231 2747 4231 2718 4231 2692 4232 2721 4232 2694 4232 2694 4233 2721 4233 2723 4233 2694 4234 2723 4234 2696 4234 2696 4235 2723 4235 2725 4235 2696 4236 2725 4236 2698 4236 2698 4237 2725 4237 2727 4237 2698 4238 2727 4238 2700 4238 2700 4239 2727 4239 2729 4239 2700 4240 2729 4240 2702 4240 2702 4241 2729 4241 2731 4241 2702 4242 2731 4242 2704 4242 2704 4243 2731 4243 2733 4243 2748 4244 2718 4244 2745 4244 2745 4245 2718 4245 2716 4245 2745 4246 2716 4246 2743 4246 2743 4247 2716 4247 2714 4247 2743 4248 2714 4248 2741 4248 2741 4249 2714 4249 2712 4249 2741 4250 2712 4250 2739 4250 2739 4251 2712 4251 2710 4251 2706 4252 2735 4252 2708 4252 2708 4253 2735 4253 2737 4253 2708 4254 2737 4254 2710 4254 2710 4255 2737 4255 2739 4255 2664 4256 2635 4256 2634 4256 2674 4257 2647 4257 2645 4257 2674 4258 2645 4258 2672 4258 2672 4259 2645 4259 2643 4259 2672 4260 2643 4260 2670 4260 2670 4261 2643 4261 2641 4261 2670 4262 2641 4262 2668 4262 2668 4263 2641 4263 2639 4263 2668 4264 2639 4264 2666 4264 2666 4265 2639 4265 2637 4265 2666 4266 2637 4266 2664 4266 2664 4267 2637 4267 2635 4267 2663 4268 2633 4268 2665 4268 2665 4269 2633 4269 2636 4269 2665 4270 2636 4270 2667 4270 2667 4271 2636 4271 2638 4271 2667 4272 2638 4272 2669 4272 2669 4273 2638 4273 2640 4273 2669 4274 2640 4274 2671 4274 2671 4275 2640 4275 2642 4275 2671 4276 2642 4276 2673 4276 2673 4277 2642 4277 2644 4277 2673 4278 2644 4278 2675 4278 2675 4279 2644 4279 2646 4279 2649 4280 2678 4280 2651 4280 2651 4281 2678 4281 2680 4281 2651 4282 2680 4282 2653 4282 2653 4283 2680 4283 2682 4283 2653 4284 2682 4284 2655 4284 2655 4285 2682 4285 2684 4285 2655 4286 2684 4286 2686 4286 2690 4287 2662 4287 2688 4287 2688 4288 2662 4288 2659 4288 2688 4289 2659 4289 2686 4289 2686 4290 2659 4290 2657 4290 2686 4291 2657 4291 2655 4291 2660 4292 2689 4292 2658 4292 2658 4293 2689 4293 2687 4293 2658 4294 2687 4294 2656 4294 2656 4295 2687 4295 2685 4295 2656 4296 2685 4296 2654 4296 2654 4297 2685 4297 2683 4297 2677 4298 2648 4298 2679 4298 2679 4299 2648 4299 2650 4299 2679 4300 2650 4300 2681 4300 2681 4301 2650 4301 2652 4301 2681 4302 2652 4302 2683 4302 2683 4303 2652 4303 2654 4303 2844 4304 2915 4304 2924 4304 2844 4305 2924 4305 2933 4305 2844 4306 2933 4306 2943 4306 2844 4307 2865 4307 2875 4307 2875 4308 2885 4308 2844 4308 2844 4309 2885 4309 2895 4309 2844 4310 2895 4310 2905 4310 2844 4311 2905 4311 2915 4311 2844 4312 2850 4312 2838 4312 2844 4313 2838 4313 2828 4313 2844 4314 2878 4314 2868 4314 2844 4315 2868 4315 2858 4315 2844 4316 2858 4316 2850 4316 2844 4317 2847 4317 2855 4317 2844 4318 2855 4318 2865 4318 2844 4319 2825 4319 2835 4319 2844 4320 2835 4320 2847 4320 2844 4321 2795 4321 2806 4321 2844 4322 2806 4322 2815 4322 2844 4323 2815 4323 2825 4323 2844 4324 2926 4324 2916 4324 2943 4325 2948 4325 2844 4325 2844 4326 2948 4326 2944 4326 2844 4327 2944 4327 2935 4327 2844 4328 2935 4328 2926 4328 2916 4329 2906 4329 2844 4329 2844 4330 2906 4330 2898 4330 2844 4331 2898 4331 2888 4331 2844 4332 2888 4332 2878 4332 2844 4333 2775 4333 2785 4333 2844 4334 2785 4334 2795 4334 2844 4335 2762 4335 2760 4335 2844 4336 2760 4336 2767 4336 2844 4337 2767 4337 2775 4337 2844 4338 2777 4338 2768 4338 2844 4339 2768 4339 2762 4339 2828 4340 2818 4340 2844 4340 2844 4341 2818 4341 2808 4341 2808 4342 2802 4342 2844 4342 2844 4343 2802 4343 2796 4343 2844 4344 2796 4344 2786 4344 2844 4345 2786 4345 2777 4345 2843 4346 2861 4346 2852 4346 2843 4347 2881 4347 2871 4347 2843 4348 2871 4348 2861 4348 2843 4349 2812 4349 2822 4349 2843 4350 2779 4350 2770 4350 2843 4351 2770 4351 2763 4351 2843 4352 2810 4352 2800 4352 2843 4353 2800 4353 2789 4353 2843 4354 2789 4354 2779 4354 2843 4355 2929 4355 2921 4355 2843 4356 2932 4356 2939 4356 2843 4357 2883 4357 2893 4357 2843 4358 2863 4358 2873 4358 2843 4359 2873 4359 2883 4359 2822 4360 2832 4360 2843 4360 2843 4361 2832 4361 2842 4361 2843 4362 2842 4362 2854 4362 2843 4363 2854 4363 2863 4363 2763 4364 2758 4364 2843 4364 2843 4365 2758 4365 2764 4365 2843 4366 2764 4366 2773 4366 2852 4367 2840 4367 2843 4367 2843 4368 2840 4368 2830 4368 2843 4369 2830 4369 2820 4369 2843 4370 2820 4370 2810 4370 2893 4371 2902 4371 2843 4371 2843 4372 2902 4372 2912 4372 2843 4373 2912 4373 2922 4373 2843 4374 2922 4374 2932 4374 2921 4375 2911 4375 2843 4375 2843 4376 2911 4376 2901 4376 2843 4377 2901 4377 2891 4377 2843 4378 2891 4378 2881 4378 2939 4379 2946 4379 2843 4379 2843 4380 2946 4380 2945 4380 2843 4381 2945 4381 2937 4381 2843 4382 2937 4382 2929 4382 2773 4383 2781 4383 2843 4383 2843 4384 2781 4384 2790 4384 2843 4385 2790 4385 2801 4385 2843 4386 2801 4386 2812 4386 2918 4387 2908 4387 2913 4387 2913 4388 2917 4388 2918 4388 2918 4389 2917 4389 2923 4389 2918 4390 2923 4390 2928 4390 2923 4391 2927 4391 2928 4391 2928 4392 2927 4392 2934 4392 2928 4393 2934 4393 2940 4393 2934 4394 2938 4394 2940 4394 2940 4395 2938 4395 2947 4395 2940 4396 2947 4396 2951 4396 2947 4397 2950 4397 2951 4397 2951 4398 2950 4398 2954 4398 2951 4399 2954 4399 2957 4399 2954 4400 2955 4400 2957 4400 2957 4401 2955 4401 2956 4401 2957 4402 2956 4402 2953 4402 2956 4403 2952 4403 2953 4403 2953 4404 2952 4404 2949 4404 2953 4405 2949 4405 2942 4405 2949 4406 2941 4406 2942 4406 2942 4407 2941 4407 2936 4407 2942 4408 2936 4408 2931 4408 2936 4409 2930 4409 2931 4409 2931 4410 2930 4410 2925 4410 2931 4411 2925 4411 2920 4411 2925 4412 2919 4412 2920 4412 2920 4413 2919 4413 2914 4413 2920 4414 2914 4414 2910 4414 2914 4415 2909 4415 2910 4415 2910 4416 2909 4416 2904 4416 2910 4417 2904 4417 2900 4417 2904 4418 2899 4418 2900 4418 2900 4419 2899 4419 2894 4419 2900 4420 2894 4420 2890 4420 2894 4421 2889 4421 2890 4421 2890 4422 2889 4422 2884 4422 2890 4423 2884 4423 2880 4423 2884 4424 2879 4424 2880 4424 2880 4425 2879 4425 2874 4425 2880 4426 2874 4426 2870 4426 2874 4427 2869 4427 2870 4427 2870 4428 2869 4428 2864 4428 2870 4429 2864 4429 2860 4429 2864 4430 2859 4430 2860 4430 2860 4431 2859 4431 2853 4431 2860 4432 2853 4432 2848 4432 2853 4433 2849 4433 2848 4433 2848 4434 2849 4434 2841 4434 2848 4435 2841 4435 2836 4435 2841 4436 2837 4436 2836 4436 2836 4437 2837 4437 2831 4437 2836 4438 2831 4438 2826 4438 2831 4439 2827 4439 2826 4439 2826 4440 2827 4440 2821 4440 2826 4441 2821 4441 2816 4441 2821 4442 2817 4442 2816 4442 2816 4443 2817 4443 2811 4443 2816 4444 2811 4444 2805 4444 2805 4445 2811 4445 2807 4445 2805 4446 2807 4446 2799 4446 2799 4447 2807 4447 2798 4447 2799 4448 2798 4448 2793 4448 2798 4449 2794 4449 2793 4449 2793 4450 2794 4450 2788 4450 2793 4451 2788 4451 2783 4451 2788 4452 2784 4452 2783 4452 2783 4453 2784 4453 2778 4453 2783 4454 2778 4454 2772 4454 2778 4455 2774 4455 2772 4455 2772 4456 2774 4456 2766 4456 2772 4457 2766 4457 2759 4457 2766 4458 2761 4458 2759 4458 2759 4459 2761 4459 2755 4459 2759 4460 2755 4460 2751 4460 2755 4461 2753 4461 2751 4461 2751 4462 2753 4462 2749 4462 2751 4463 2749 4463 2750 4463 2749 4464 2752 4464 2750 4464 2750 4465 2752 4465 2754 4465 2750 4466 2754 4466 2756 4466 2754 4467 2757 4467 2756 4467 2756 4468 2757 4468 2765 4468 2756 4469 2765 4469 2769 4469 2765 4470 2771 4470 2769 4470 2769 4471 2771 4471 2776 4471 2769 4472 2776 4472 2780 4472 2776 4473 2782 4473 2780 4473 2780 4474 2782 4474 2787 4474 2780 4475 2787 4475 2791 4475 2787 4476 2792 4476 2791 4476 2791 4477 2792 4477 2797 4477 2791 4478 2797 4478 2803 4478 2797 4479 2804 4479 2803 4479 2803 4480 2804 4480 2809 4480 2803 4481 2809 4481 2813 4481 2809 4482 2814 4482 2813 4482 2813 4483 2814 4483 2819 4483 2813 4484 2819 4484 2823 4484 2819 4485 2824 4485 2823 4485 2823 4486 2824 4486 2829 4486 2823 4487 2829 4487 2833 4487 2829 4488 2834 4488 2833 4488 2833 4489 2834 4489 2839 4489 2833 4490 2839 4490 2845 4490 2839 4491 2846 4491 2845 4491 2845 4492 2846 4492 2851 4492 2845 4493 2851 4493 2857 4493 2851 4494 2856 4494 2857 4494 2857 4495 2856 4495 2862 4495 2857 4496 2862 4496 2867 4496 2862 4497 2866 4497 2867 4497 2867 4498 2866 4498 2872 4498 2867 4499 2872 4499 2877 4499 2872 4500 2876 4500 2877 4500 2877 4501 2876 4501 2882 4501 2877 4502 2882 4502 2887 4502 2882 4503 2886 4503 2887 4503 2887 4504 2886 4504 2892 4504 2887 4505 2892 4505 2897 4505 2892 4506 2896 4506 2897 4506 2897 4507 2896 4507 2903 4507 2897 4508 2903 4508 2908 4508 2908 4509 2903 4509 2907 4509 2908 4510 2907 4510 2913 4510 2812 4511 2801 4511 2807 4511 2807 4512 2811 4512 2812 4512 2812 4513 2811 4513 2817 4513 2812 4514 2817 4514 2822 4514 2817 4515 2821 4515 2822 4515 2822 4516 2821 4516 2827 4516 2822 4517 2827 4517 2832 4517 2827 4518 2831 4518 2832 4518 2832 4519 2831 4519 2837 4519 2832 4520 2837 4520 2842 4520 2837 4521 2841 4521 2842 4521 2842 4522 2841 4522 2849 4522 2842 4523 2849 4523 2854 4523 2849 4524 2853 4524 2854 4524 2854 4525 2853 4525 2859 4525 2854 4526 2859 4526 2863 4526 2859 4527 2864 4527 2863 4527 2863 4528 2864 4528 2869 4528 2863 4529 2869 4529 2873 4529 2869 4530 2874 4530 2873 4530 2873 4531 2874 4531 2879 4531 2873 4532 2879 4532 2883 4532 2879 4533 2884 4533 2883 4533 2883 4534 2884 4534 2889 4534 2883 4535 2889 4535 2893 4535 2889 4536 2894 4536 2893 4536 2893 4537 2894 4537 2899 4537 2893 4538 2899 4538 2902 4538 2899 4539 2904 4539 2902 4539 2902 4540 2904 4540 2909 4540 2902 4541 2909 4541 2912 4541 2909 4542 2914 4542 2912 4542 2912 4543 2914 4543 2919 4543 2912 4544 2919 4544 2922 4544 2919 4545 2925 4545 2922 4545 2922 4546 2925 4546 2930 4546 2922 4547 2930 4547 2932 4547 2930 4548 2936 4548 2932 4548 2932 4549 2936 4549 2941 4549 2932 4550 2941 4550 2939 4550 2941 4551 2949 4551 2939 4551 2939 4552 2949 4552 2952 4552 2939 4553 2952 4553 2946 4553 2952 4554 2956 4554 2946 4554 2946 4555 2956 4555 2955 4555 2946 4556 2955 4556 2945 4556 2955 4557 2954 4557 2945 4557 2945 4558 2954 4558 2950 4558 2945 4559 2950 4559 2937 4559 2950 4560 2947 4560 2937 4560 2937 4561 2947 4561 2938 4561 2937 4562 2938 4562 2929 4562 2938 4563 2934 4563 2929 4563 2929 4564 2934 4564 2927 4564 2929 4565 2927 4565 2921 4565 2927 4566 2923 4566 2921 4566 2921 4567 2923 4567 2917 4567 2921 4568 2917 4568 2911 4568 2917 4569 2913 4569 2911 4569 2911 4570 2913 4570 2907 4570 2911 4571 2907 4571 2901 4571 2907 4572 2903 4572 2901 4572 2901 4573 2903 4573 2896 4573 2901 4574 2896 4574 2891 4574 2896 4575 2892 4575 2891 4575 2891 4576 2892 4576 2886 4576 2891 4577 2886 4577 2881 4577 2886 4578 2882 4578 2881 4578 2881 4579 2882 4579 2876 4579 2881 4580 2876 4580 2871 4580 2876 4581 2872 4581 2871 4581 2871 4582 2872 4582 2866 4582 2871 4583 2866 4583 2861 4583 2866 4584 2862 4584 2861 4584 2861 4585 2862 4585 2856 4585 2861 4586 2856 4586 2852 4586 2856 4587 2851 4587 2852 4587 2852 4588 2851 4588 2846 4588 2852 4589 2846 4589 2840 4589 2846 4590 2839 4590 2840 4590 2840 4591 2839 4591 2834 4591 2840 4592 2834 4592 2830 4592 2834 4593 2829 4593 2830 4593 2830 4594 2829 4594 2824 4594 2830 4595 2824 4595 2820 4595 2824 4596 2819 4596 2820 4596 2820 4597 2819 4597 2814 4597 2820 4598 2814 4598 2810 4598 2814 4599 2809 4599 2810 4599 2810 4600 2809 4600 2804 4600 2810 4601 2804 4601 2800 4601 2804 4602 2797 4602 2800 4602 2800 4603 2797 4603 2792 4603 2800 4604 2792 4604 2789 4604 2792 4605 2787 4605 2789 4605 2789 4606 2787 4606 2782 4606 2789 4607 2782 4607 2779 4607 2782 4608 2776 4608 2779 4608 2779 4609 2776 4609 2771 4609 2779 4610 2771 4610 2770 4610 2771 4611 2765 4611 2770 4611 2770 4612 2765 4612 2757 4612 2770 4613 2757 4613 2763 4613 2757 4614 2754 4614 2763 4614 2763 4615 2754 4615 2752 4615 2763 4616 2752 4616 2758 4616 2752 4617 2749 4617 2758 4617 2758 4618 2749 4618 2753 4618 2758 4619 2753 4619 2764 4619 2753 4620 2755 4620 2764 4620 2764 4621 2755 4621 2761 4621 2764 4622 2761 4622 2773 4622 2761 4623 2766 4623 2773 4623 2773 4624 2766 4624 2774 4624 2773 4625 2774 4625 2781 4625 2774 4626 2778 4626 2781 4626 2781 4627 2778 4627 2784 4627 2781 4628 2784 4628 2790 4628 2784 4629 2788 4629 2790 4629 2790 4630 2788 4630 2794 4630 2790 4631 2794 4631 2801 4631 2801 4632 2794 4632 2798 4632 2801 4633 2798 4633 2807 4633 2897 4634 2895 4634 2887 4634 2887 4635 2895 4635 2885 4635 2887 4636 2885 4636 2877 4636 2877 4637 2885 4637 2875 4637 2877 4638 2875 4638 2867 4638 2867 4639 2875 4639 2865 4639 2867 4640 2865 4640 2857 4640 2857 4641 2865 4641 2855 4641 2857 4642 2855 4642 2845 4642 2845 4643 2855 4643 2847 4643 2845 4644 2847 4644 2833 4644 2833 4645 2847 4645 2835 4645 2833 4646 2835 4646 2823 4646 2823 4647 2835 4647 2825 4647 2823 4648 2825 4648 2813 4648 2813 4649 2825 4649 2815 4649 2813 4650 2815 4650 2803 4650 2803 4651 2815 4651 2806 4651 2803 4652 2806 4652 2791 4652 2791 4653 2806 4653 2795 4653 2791 4654 2795 4654 2780 4654 2780 4655 2795 4655 2785 4655 2780 4656 2785 4656 2769 4656 2769 4657 2785 4657 2775 4657 2769 4658 2775 4658 2756 4658 2756 4659 2775 4659 2767 4659 2756 4660 2767 4660 2750 4660 2750 4661 2767 4661 2760 4661 2750 4662 2760 4662 2751 4662 2751 4663 2760 4663 2762 4663 2751 4664 2762 4664 2759 4664 2759 4665 2762 4665 2768 4665 2759 4666 2768 4666 2772 4666 2772 4667 2768 4667 2777 4667 2772 4668 2777 4668 2783 4668 2783 4669 2777 4669 2786 4669 2783 4670 2786 4670 2793 4670 2793 4671 2786 4671 2796 4671 2793 4672 2796 4672 2799 4672 2799 4673 2796 4673 2802 4673 2799 4674 2802 4674 2805 4674 2805 4675 2802 4675 2808 4675 2805 4676 2808 4676 2816 4676 2816 4677 2808 4677 2818 4677 2816 4678 2818 4678 2826 4678 2826 4679 2818 4679 2828 4679 2826 4680 2828 4680 2836 4680 2836 4681 2828 4681 2838 4681 2836 4682 2838 4682 2848 4682 2848 4683 2838 4683 2850 4683 2848 4684 2850 4684 2860 4684 2860 4685 2850 4685 2858 4685 2860 4686 2858 4686 2870 4686 2870 4687 2858 4687 2868 4687 2870 4688 2868 4688 2880 4688 2880 4689 2868 4689 2878 4689 2880 4690 2878 4690 2890 4690 2890 4691 2878 4691 2888 4691 2890 4692 2888 4692 2900 4692 2900 4693 2888 4693 2898 4693 2900 4694 2898 4694 2910 4694 2910 4695 2898 4695 2906 4695 2910 4696 2906 4696 2920 4696 2920 4697 2906 4697 2916 4697 2920 4698 2916 4698 2931 4698 2931 4699 2916 4699 2926 4699 2931 4700 2926 4700 2942 4700 2942 4701 2926 4701 2935 4701 2942 4702 2935 4702 2953 4702 2953 4703 2935 4703 2944 4703 2953 4704 2944 4704 2957 4704 2957 4705 2944 4705 2948 4705 2957 4706 2948 4706 2951 4706 2951 4707 2948 4707 2943 4707 2951 4708 2943 4708 2940 4708 2940 4709 2943 4709 2933 4709 2940 4710 2933 4710 2928 4710 2928 4711 2933 4711 2924 4711 2928 4712 2924 4712 2918 4712 2918 4713 2924 4713 2915 4713 2918 4714 2915 4714 2908 4714 2908 4715 2915 4715 2905 4715 2908 4716 2905 4716 2897 4716 2897 4717 2905 4717 2895 4717 3053 4718 3111 4718 3121 4718 3053 4719 3089 4719 3101 4719 3053 4720 3101 4720 3111 4720 3053 4721 3047 4721 3037 4721 3053 4722 3155 4722 3154 4722 3053 4723 2997 4723 2987 4723 3053 4724 3065 4724 3058 4724 3053 4725 3058 4725 3047 4725 3053 4726 3085 4726 3075 4726 3053 4727 3075 4727 3065 4727 3053 4728 3097 4728 3091 4728 3053 4729 3091 4729 3085 4729 3121 4730 3131 4730 3053 4730 3053 4731 3131 4731 3141 4731 3053 4732 3141 4732 3148 4732 3053 4733 3148 4733 3155 4733 3053 4734 3069 4734 3079 4734 3053 4735 3079 4735 3089 4735 3053 4736 3041 4736 3051 4736 3053 4737 3051 4737 3061 4737 3053 4738 3061 4738 3069 4738 3053 4739 2991 4739 3001 4739 3037 4740 3027 4740 3053 4740 3053 4741 3027 4741 3017 4741 3053 4742 3017 4742 3007 4742 3053 4743 3007 4743 2997 4743 3053 4744 3117 4744 3107 4744 3053 4745 3107 4745 3097 4745 3001 4746 3011 4746 3053 4746 3053 4747 3011 4747 3021 4747 3053 4748 3021 4748 3031 4748 3053 4749 3031 4749 3041 4749 3154 4750 3144 4750 3053 4750 3053 4751 3144 4751 3137 4751 3053 4752 3137 4752 3127 4752 3053 4753 3127 4753 3117 4753 3053 4754 2974 4754 2981 4754 3053 4755 2981 4755 2991 4755 2987 4756 2980 4756 3053 4756 3053 4757 2980 4757 2970 4757 3053 4758 2970 4758 2967 4758 3053 4759 2967 4759 2974 4759 3038 4760 3028 4760 3033 4760 3033 4761 3039 4761 3038 4761 3038 4762 3039 4762 3043 4762 3038 4763 3043 4763 3048 4763 3043 4764 3049 4764 3048 4764 3048 4765 3049 4765 3054 4765 3048 4766 3054 4766 3059 4766 3054 4767 3060 4767 3059 4767 3059 4768 3060 4768 3066 4768 3059 4769 3066 4769 3072 4769 3066 4770 3071 4770 3072 4770 3072 4771 3071 4771 3076 4771 3072 4772 3076 4772 3082 4772 3076 4773 3081 4773 3082 4773 3082 4774 3081 4774 3086 4774 3082 4775 3086 4775 3093 4775 3086 4776 3092 4776 3093 4776 3093 4777 3092 4777 3098 4777 3093 4778 3098 4778 3104 4778 3098 4779 3103 4779 3104 4779 3104 4780 3103 4780 3109 4780 3104 4781 3109 4781 3114 4781 3109 4782 3113 4782 3114 4782 3114 4783 3113 4783 3119 4783 3114 4784 3119 4784 3124 4784 3119 4785 3123 4785 3124 4785 3124 4786 3123 4786 3129 4786 3124 4787 3129 4787 3134 4787 3129 4788 3133 4788 3134 4788 3134 4789 3133 4789 3139 4789 3134 4790 3139 4790 3146 4790 3139 4791 3145 4791 3146 4791 3146 4792 3145 4792 3151 4792 3146 4793 3151 4793 3158 4793 3151 4794 3157 4794 3158 4794 3158 4795 3157 4795 3161 4795 3158 4796 3161 4796 3164 4796 3161 4797 3163 4797 3164 4797 3164 4798 3163 4798 3165 4798 3164 4799 3165 4799 3162 4799 3165 4800 3160 4800 3162 4800 3162 4801 3160 4801 3159 4801 3162 4802 3159 4802 3152 4802 3159 4803 3150 4803 3152 4803 3152 4804 3150 4804 3147 4804 3152 4805 3147 4805 3140 4805 3147 4806 3138 4806 3140 4806 3140 4807 3138 4807 3135 4807 3140 4808 3135 4808 3130 4808 3135 4809 3128 4809 3130 4809 3130 4810 3128 4810 3125 4810 3130 4811 3125 4811 3120 4811 3125 4812 3118 4812 3120 4812 3120 4813 3118 4813 3115 4813 3120 4814 3115 4814 3110 4814 3115 4815 3108 4815 3110 4815 3110 4816 3108 4816 3105 4816 3110 4817 3105 4817 3100 4817 3100 4818 3105 4818 3099 4818 3100 4819 3099 4819 3095 4819 3095 4820 3099 4820 3094 4820 3095 4821 3094 4821 3088 4821 3094 4822 3087 4822 3088 4822 3088 4823 3087 4823 3083 4823 3088 4824 3083 4824 3078 4824 3083 4825 3077 4825 3078 4825 3078 4826 3077 4826 3073 4826 3078 4827 3073 4827 3068 4827 3073 4828 3067 4828 3068 4828 3068 4829 3067 4829 3063 4829 3068 4830 3063 4830 3055 4830 3063 4831 3057 4831 3055 4831 3055 4832 3057 4832 3050 4832 3055 4833 3050 4833 3044 4833 3050 4834 3045 4834 3044 4834 3044 4835 3045 4835 3040 4835 3044 4836 3040 4836 3034 4836 3040 4837 3035 4837 3034 4837 3034 4838 3035 4838 3030 4838 3034 4839 3030 4839 3024 4839 3030 4840 3025 4840 3024 4840 3024 4841 3025 4841 3020 4841 3024 4842 3020 4842 3014 4842 3020 4843 3015 4843 3014 4843 3014 4844 3015 4844 3009 4844 3014 4845 3009 4845 3004 4845 3009 4846 3005 4846 3004 4846 3004 4847 3005 4847 2999 4847 3004 4848 2999 4848 2994 4848 2999 4849 2995 4849 2994 4849 2994 4850 2995 4850 2989 4850 2994 4851 2989 4851 2984 4851 2989 4852 2985 4852 2984 4852 2984 4853 2985 4853 2977 4853 2984 4854 2977 4854 2972 4854 2977 4855 2973 4855 2972 4855 2972 4856 2973 4856 2965 4856 2972 4857 2965 4857 2962 4857 2965 4858 2963 4858 2962 4858 2962 4859 2963 4859 2959 4859 2962 4860 2959 4860 2958 4860 2959 4861 2960 4861 2958 4861 2958 4862 2960 4862 2961 4862 2958 4863 2961 4863 2964 4863 2961 4864 2966 4864 2964 4864 2964 4865 2966 4865 2971 4865 2964 4866 2971 4866 2976 4866 2971 4867 2978 4867 2976 4867 2976 4868 2978 4868 2983 4868 2976 4869 2983 4869 2988 4869 2983 4870 2990 4870 2988 4870 2988 4871 2990 4871 2993 4871 2988 4872 2993 4872 2998 4872 2993 4873 3000 4873 2998 4873 2998 4874 3000 4874 3003 4874 2998 4875 3003 4875 3008 4875 3003 4876 3010 4876 3008 4876 3008 4877 3010 4877 3013 4877 3008 4878 3013 4878 3018 4878 3013 4879 3019 4879 3018 4879 3018 4880 3019 4880 3023 4880 3018 4881 3023 4881 3028 4881 3028 4882 3023 4882 3029 4882 3028 4883 3029 4883 3033 4883 3102 4884 3090 4884 3099 4884 3099 4885 3105 4885 3102 4885 3102 4886 3105 4886 3108 4886 3102 4887 3108 4887 3112 4887 3108 4888 3115 4888 3112 4888 3112 4889 3115 4889 3118 4889 3112 4890 3118 4890 3122 4890 3118 4891 3125 4891 3122 4891 3122 4892 3125 4892 3128 4892 3122 4893 3128 4893 3132 4893 3128 4894 3135 4894 3132 4894 3132 4895 3135 4895 3138 4895 3132 4896 3138 4896 3142 4896 3138 4897 3147 4897 3142 4897 3142 4898 3147 4898 3150 4898 3142 4899 3150 4899 3149 4899 3150 4900 3159 4900 3149 4900 3149 4901 3159 4901 3160 4901 3149 4902 3160 4902 3156 4902 3160 4903 3165 4903 3156 4903 3156 4904 3165 4904 3163 4904 3156 4905 3163 4905 3153 4905 3163 4906 3161 4906 3153 4906 3153 4907 3161 4907 3157 4907 3153 4908 3157 4908 3143 4908 3157 4909 3151 4909 3143 4909 3143 4910 3151 4910 3145 4910 3143 4911 3145 4911 3136 4911 3145 4912 3139 4912 3136 4912 3136 4913 3139 4913 3133 4913 3136 4914 3133 4914 3126 4914 3133 4915 3129 4915 3126 4915 3126 4916 3129 4916 3123 4916 3126 4917 3123 4917 3116 4917 3123 4918 3119 4918 3116 4918 3116 4919 3119 4919 3113 4919 3116 4920 3113 4920 3106 4920 3113 4921 3109 4921 3106 4921 3106 4922 3109 4922 3103 4922 3106 4923 3103 4923 3096 4923 3103 4924 3098 4924 3096 4924 3096 4925 3098 4925 3092 4925 3096 4926 3092 4926 3084 4926 3092 4927 3086 4927 3084 4927 3084 4928 3086 4928 3081 4928 3084 4929 3081 4929 3074 4929 3081 4930 3076 4930 3074 4930 3074 4931 3076 4931 3071 4931 3074 4932 3071 4932 3064 4932 3071 4933 3066 4933 3064 4933 3064 4934 3066 4934 3060 4934 3064 4935 3060 4935 3056 4935 3060 4936 3054 4936 3056 4936 3056 4937 3054 4937 3049 4937 3056 4938 3049 4938 3046 4938 3049 4939 3043 4939 3046 4939 3046 4940 3043 4940 3039 4940 3046 4941 3039 4941 3036 4941 3039 4942 3033 4942 3036 4942 3036 4943 3033 4943 3029 4943 3036 4944 3029 4944 3026 4944 3029 4945 3023 4945 3026 4945 3026 4946 3023 4946 3019 4946 3026 4947 3019 4947 3016 4947 3019 4948 3013 4948 3016 4948 3016 4949 3013 4949 3010 4949 3016 4950 3010 4950 3006 4950 3010 4951 3003 4951 3006 4951 3006 4952 3003 4952 3000 4952 3006 4953 3000 4953 2996 4953 3000 4954 2993 4954 2996 4954 2996 4955 2993 4955 2990 4955 2996 4956 2990 4956 2986 4956 2990 4957 2983 4957 2986 4957 2986 4958 2983 4958 2978 4958 2986 4959 2978 4959 2979 4959 2978 4960 2971 4960 2979 4960 2979 4961 2971 4961 2966 4961 2979 4962 2966 4962 2969 4962 2966 4963 2961 4963 2969 4963 2969 4964 2961 4964 2960 4964 2969 4965 2960 4965 2968 4965 2960 4966 2959 4966 2968 4966 2968 4967 2959 4967 2963 4967 2968 4968 2963 4968 2975 4968 2963 4969 2965 4969 2975 4969 2975 4970 2965 4970 2973 4970 2975 4971 2973 4971 2982 4971 2973 4972 2977 4972 2982 4972 2982 4973 2977 4973 2985 4973 2982 4974 2985 4974 2992 4974 2985 4975 2989 4975 2992 4975 2992 4976 2989 4976 2995 4976 2992 4977 2995 4977 3002 4977 2995 4978 2999 4978 3002 4978 3002 4979 2999 4979 3005 4979 3002 4980 3005 4980 3012 4980 3005 4981 3009 4981 3012 4981 3012 4982 3009 4982 3015 4982 3012 4983 3015 4983 3022 4983 3015 4984 3020 4984 3022 4984 3022 4985 3020 4985 3025 4985 3022 4986 3025 4986 3032 4986 3025 4987 3030 4987 3032 4987 3032 4988 3030 4988 3035 4988 3032 4989 3035 4989 3042 4989 3035 4990 3040 4990 3042 4990 3042 4991 3040 4991 3045 4991 3042 4992 3045 4992 3052 4992 3045 4993 3050 4993 3052 4993 3052 4994 3050 4994 3057 4994 3052 4995 3057 4995 3062 4995 3057 4996 3063 4996 3062 4996 3062 4997 3063 4997 3067 4997 3062 4998 3067 4998 3070 4998 3067 4999 3073 4999 3070 4999 3070 5000 3073 5000 3077 5000 3070 5001 3077 5001 3080 5001 3077 5002 3083 5002 3080 5002 3080 5003 3083 5003 3087 5003 3080 5004 3087 5004 3090 5004 3090 5005 3087 5005 3094 5005 3090 5006 3094 5006 3099 5006 3018 5007 3021 5007 3008 5007 3008 5008 3021 5008 3011 5008 3008 5009 3011 5009 2998 5009 2998 5010 3011 5010 3001 5010 2998 5011 3001 5011 2988 5011 2988 5012 3001 5012 2991 5012 2988 5013 2991 5013 2976 5013 2976 5014 2991 5014 2981 5014 2976 5015 2981 5015 2964 5015 2964 5016 2981 5016 2974 5016 2964 5017 2974 5017 2958 5017 2958 5018 2974 5018 2967 5018 2958 5019 2967 5019 2962 5019 2962 5020 2967 5020 2970 5020 2962 5021 2970 5021 2972 5021 2972 5022 2970 5022 2980 5022 2972 5023 2980 5023 2984 5023 2984 5024 2980 5024 2987 5024 2984 5025 2987 5025 2994 5025 2994 5026 2987 5026 2997 5026 2994 5027 2997 5027 3004 5027 3004 5028 2997 5028 3007 5028 3004 5029 3007 5029 3014 5029 3014 5030 3007 5030 3017 5030 3014 5031 3017 5031 3024 5031 3024 5032 3017 5032 3027 5032 3024 5033 3027 5033 3034 5033 3034 5034 3027 5034 3037 5034 3034 5035 3037 5035 3044 5035 3044 5036 3037 5036 3047 5036 3044 5037 3047 5037 3055 5037 3055 5038 3047 5038 3058 5038 3055 5039 3058 5039 3068 5039 3068 5040 3058 5040 3065 5040 3068 5041 3065 5041 3078 5041 3078 5042 3065 5042 3075 5042 3078 5043 3075 5043 3088 5043 3088 5044 3075 5044 3085 5044 3088 5045 3085 5045 3095 5045 3095 5046 3085 5046 3091 5046 3095 5047 3091 5047 3100 5047 3100 5048 3091 5048 3097 5048 3100 5049 3097 5049 3110 5049 3110 5050 3097 5050 3107 5050 3110 5051 3107 5051 3120 5051 3120 5052 3107 5052 3117 5052 3120 5053 3117 5053 3130 5053 3130 5054 3117 5054 3127 5054 3130 5055 3127 5055 3140 5055 3140 5056 3127 5056 3137 5056 3140 5057 3137 5057 3152 5057 3152 5058 3137 5058 3144 5058 3152 5059 3144 5059 3162 5059 3162 5060 3144 5060 3154 5060 3162 5061 3154 5061 3164 5061 3164 5062 3154 5062 3155 5062 3164 5063 3155 5063 3158 5063 3158 5064 3155 5064 3148 5064 3158 5065 3148 5065 3146 5065 3146 5066 3148 5066 3141 5066 3146 5067 3141 5067 3134 5067 3134 5068 3141 5068 3131 5068 3134 5069 3131 5069 3124 5069 3124 5070 3131 5070 3121 5070 3124 5071 3121 5071 3114 5071 3114 5072 3121 5072 3111 5072 3114 5073 3111 5073 3104 5073 3104 5074 3111 5074 3101 5074 3104 5075 3101 5075 3093 5075 3093 5076 3101 5076 3089 5076 3093 5077 3089 5077 3082 5077 3082 5078 3089 5078 3079 5078 3082 5079 3079 5079 3072 5079 3072 5080 3079 5080 3069 5080 3072 5081 3069 5081 3059 5081 3059 5082 3069 5082 3061 5082 3059 5083 3061 5083 3048 5083 3048 5084 3061 5084 3051 5084 3048 5085 3051 5085 3038 5085 3038 5086 3051 5086 3041 5086 3038 5087 3041 5087 3028 5087 3028 5088 3041 5088 3031 5088 3028 5089 3031 5089 3018 5089 3018 5090 3031 5090 3021 5090 2738 5091 2740 5091 2746 5091 2736 5092 2738 5092 2746 5092 2734 5093 2736 5093 2746 5093 2719 5094 2732 5094 2734 5094 2734 5094 2746 5094 2719 5094 2703 5095 2705 5095 2734 5095 2734 5095 2732 5095 2703 5095 2720 5096 2733 5096 2721 5096 2721 5097 2733 5097 2723 5097 2723 5098 2733 5098 2731 5098 2723 5099 2731 5099 2725 5099 2725 5100 2731 5100 2727 5100 2720 5101 2747 5101 2735 5101 2735 5101 2733 5101 2720 5101 2735 5102 2747 5102 2737 5102 2737 5103 2747 5103 2748 5103 2737 5104 2748 5104 2739 5104 2739 5105 2748 5105 2745 5105 2739 5106 2745 5106 2741 5106 2741 5107 2745 5107 2743 5107 2704 5108 2733 5108 2735 5108 2735 5108 2706 5108 2704 5108 2663 5109 2691 5109 2692 5109 2692 5109 2664 5109 2663 5109 2664 5110 2692 5110 2694 5110 2663 5111 2665 5111 2691 5111 2691 5112 2719 5112 2720 5112 2720 5112 2692 5112 2691 5112 2633 5113 2663 5113 2664 5113 2664 5113 2634 5113 2633 5113 2647 5114 2674 5114 2676 5114 2647 5115 2676 5115 2678 5115 2678 5115 2649 5115 2647 5115 2676 5116 2704 5116 2706 5116 2706 5116 2678 5116 2676 5116 2717 5117 2718 5117 2747 5117 2747 5117 2746 5117 2717 5117 2689 5118 2717 5118 2715 5118 2689 5119 2690 5119 2718 5119 2718 5119 2717 5119 2689 5119 2661 5120 2662 5120 2690 5120 2660 5121 2661 5121 2690 5121 2690 5121 2689 5121 2660 5121 2646 5122 2648 5122 2677 5122 2677 5122 2675 5122 2646 5122 2633 5123 2634 5123 2661 5123 2661 5123 2660 5123 2633 5123 2634 5124 2635 5124 2647 5124 2635 5125 2645 5125 2647 5125 2635 5126 2637 5126 2645 5126 2637 5127 2643 5127 2645 5127 2637 5128 2639 5128 2643 5128 2639 5129 2641 5129 2643 5129 2634 5130 2647 5130 2649 5130 2649 5130 2661 5130 2634 5130 2649 5131 2662 5131 2661 5131 2649 5132 2651 5132 2662 5132 2651 5133 2659 5133 2662 5133 2651 5134 2653 5134 2659 5134 2653 5135 2657 5135 2659 5135 2653 5136 2655 5136 2657 5136 2633 5137 2660 5137 2648 5137 2648 5137 2646 5137 2633 5137 2648 5138 2660 5138 2650 5138 2650 5139 2660 5139 2654 5139 2719 5140 2746 5140 2747 5140 2747 5140 2720 5140 2719 5140

1031 1090 1667 1714 2677 2734

0.13057 -0.65381 -0.25425 0.13057 -0.65381 -0.23425 0.13057 -0.61381 -0.25425 0.13057 -0.61381 -0.23425 0.19257 -0.65381 -0.25425 0.19257 -0.65381 -0.23425 0.19257 -0.61381 -0.25425 0.19257 -0.61381 -0.23425 0.57254 -0.61381 -0.23425 0.57254 -0.61381 -0.25425 0.57254 -0.65381 -0.23425 0.57254 -0.65381 -0.25425 0.51054 -0.61381 -0.23425 0.51054 -0.61381 -0.25425 0.51054 -0.65381 -0.23425 0.51054 -0.65381 -0.25425 0.17261 -0.39876 -0.23425 0.17261 -0.39876 -0.25425 0.17261 -0.43876 -0.23425 0.17261 -0.43876 -0.25425 0.11061 -0.39876 -0.23425 0.11061 -0.39876 -0.25425 0.11061 -0.43876 -0.23425 0.11061 -0.43876 -0.25425 0.53057 -0.43881 -0.25425 0.53057 -0.43881 -0.23425 0.53057 -0.39881 -0.25425 0.53057 -0.39881 -0.23425 0.59257 -0.43881 -0.25425 0.59257 -0.43881 -0.23425 0.59257 -0.39881 -0.25425 0.59257 -0.39881 -0.23425 0.61757 -0.37581 -0.23925 0.61757 -0.39581 -0.23925 0.61757 -0.37581 -0.19925 0.61757 -0.39581 -0.19925 0.55557 -0.37581 -0.23925 0.55557 -0.39581 -0.23925 0.55557 -0.37581 -0.19925 0.55557 -0.39581 -0.19925 0.08548 -0.39581 -0.19925 0.08548 -0.37581 -0.19925 0.08548 -0.39581 -0.23925 0.08548 -0.37581 -0.23925 0.14748 -0.39581 -0.19925 0.14748 -0.37581 -0.19925 0.14748 -0.39581 -0.23925 0.14748 -0.37581 -0.23925 0.02657 -0.64381 1.63375 0.02657 -0.64381 1.80875 0.02657 -0.20381 1.63375 0.02657 -0.20381 1.80875 0.03157 -0.64881 1.63375 0.03157 -0.64881 1.80875 0.03157 -0.64381 1.62875 0.03157 -0.64381 1.81375 0.03157 -0.20381 1.62875 0.03157 -0.20381 1.81375 0.03157 -0.19881 1.63375 0.03157 -0.19881 1.80875 0.67157 -0.64881 1.63375 0.67157 -0.64881 1.80875 0.67157 -0.64381 1.62875 0.67157 -0.64381 1.81375 0.67157 -0.20381 1.62875 0.67157 -0.20381 1.81375 0.67157 -0.19881 1.63375 0.67157 -0.19881 1.80875 0.67657 -0.64381 1.63375 0.67657 -0.64381 1.80875 0.67657 -0.20381 1.63375 0.67657 -0.20381 1.80875 0.02657 -0.64381 1.48375 0.02657 -0.64381 1.62375 0.02657 -0.40381 1.48375 0.02657 -0.40381 1.62375 0.03157 -0.64881 1.48375 0.03157 -0.64881 1.62375 0.03157 -0.64381 1.47875 0.03157 -0.64381 1.62875 0.03157 -0.40381 1.47875 0.03157 -0.40381 1.62875 0.03157 -0.39881 1.48375 0.03157 -0.39881 1.62375 0.67157 -0.64881 1.48375 0.67157 -0.64881 1.62375 0.67157 -0.64381 1.47875 0.67157 -0.64381 1.62875 0.67157 -0.40381 1.47875 0.67157 -0.40381 1.62875 0.67157 -0.39881 1.48375 0.67157 -0.39881 1.62375 0.67657 -0.64381 1.48375 0.67657 -0.64381 1.62375 0.67657 -0.40381 1.48375 0.67657 -0.40381 1.62375 0.06271 -0.12665 -0.24975 0.06312 -0.15095 -0.24975 0.07191 -0.26337 -0.24975 0.07350 -0.28381 -0.24975 0.08582 0.40279 -0.24975 0.07455 -0.28381 -0.25425 0.08600 -0.44381 -0.24975 0.08705 -0.44381 -0.25425 0.12782 -0.36709 -0.25425 0.55467 -0.36166 -0.25425 0.09366 0.45629 -0.24975 0.09392 -0.08881 -0.37693 0.09394 0.40244 -0.28475 0.09866 -0.12820 -0.40475 0.09866 -0.14817 -0.40475 0.09890 -0.60881 -0.24975 0.09900 -0.08881 -0.38157 0.09994 -0.60881 -0.25425 0.10040 -0.08881 -0.40475 0.10192 0.45424 -0.28475 0.10248 0.45793 -0.28475 0.10347 -0.65580 -0.25425 0.10487 0.40196 -0.29475 0.34752 0.21173 -0.24975 0.11215 0.50710 -0.24975 0.11579 0.40148 -0.30475 0.12013 0.50330 -0.28475 0.12167 0.40123 -0.40275 0.12283 0.51026 -0.28475 0.12361 0.45227 -0.30475 0.12929 0.45075 -0.40275 0.13817 -0.65584 -0.40476 0.14054 0.55312 -0.24975 0.14223 0.50016 -0.30475 0.14745 0.49745 -0.40275 0.14780 0.54763 -0.28475 0.15403 0.55694 -0.28475 0.16157 -0.63381 -0.25425 0.15664 0.57019 -0.24975 0.16657 -0.44381 -0.25425 0.16657 -0.44381 -0.24975 0.16657 -0.28381 -0.25425 0.16657 -0.28381 -0.24975 0.17072 0.53227 -0.40275 0.17078 0.54289 -0.30475 0.17102 -0.44331 -0.25425 0.17102 -0.44331 -0.24975 0.17174 -0.28449 -0.25425 0.17174 -0.28449 -0.24975 0.17266 0.53518 -0.40275 0.17525 -0.44183 -0.25425 0.17525 -0.44183 -0.24975 0.17529 0.53911 -0.40275 0.17657 -0.28649 -0.25425 0.17657 -0.28649 -0.24975 0.17764 0.59245 -0.24975 0.17904 -0.43945 -0.25425 0.17904 -0.43945 -0.24975 0.17952 0.54316 -0.40275 0.18071 -0.28967 -0.25425 0.18071 -0.28967 -0.24975 0.18221 -0.43628 -0.25425 0.18221 -0.43628 -0.24975 0.18379 0.58543 -0.28475 0.18389 -0.29381 -0.25425 0.18389 -0.29381 -0.24975 0.18459 -0.43249 -0.25425 0.18459 -0.43249 -0.24975 0.18589 -0.29864 -0.25425 0.18589 -0.29864 -0.24975 0.18607 -0.42826 -0.25425 0.18607 -0.42826 -0.24975 0.18657 -0.42381 -0.25425 0.18657 -0.42381 -0.24975 0.18657 -0.30381 -0.25425 0.18657 -0.30381 -0.24975 0.19157 -0.60881 -0.25425 0.19157 -0.60881 -0.24975 0.19459 0.59577 -0.28475 0.19567 0.55862 -0.40275 0.19674 -0.60949 -0.25425 0.19674 -0.60949 -0.24975 0.20157 -0.61149 -0.25425 0.20157 -0.61149 -0.24975 0.20571 -0.61467 -0.25425 0.20571 -0.61467 -0.24975 0.20790 0.57842 -0.30475 0.20889 -0.61881 -0.25425 0.20889 -0.61881 -0.24975 0.21089 -0.62364 -0.25425 0.21089 -0.62364 -0.24975 0.21148 0.57375 -0.40275 0.21157 -0.65581 -0.25425 0.21157 -0.65581 -0.24975 0.21157 -0.62881 -0.25425 0.21157 -0.62881 -0.24975 0.22193 0.62346 -0.24975 0.22660 0.61520 -0.28475 0.22957 0.58473 -0.40275 0.23778 0.63030 -0.24975 0.24259 0.62490 -0.28475 0.25061 0.59750 -0.40275 0.25183 0.60508 -0.30475 0.25432 0.59975 -0.40275 0.26355 0.60288 -0.40275 0.26443 0.64179 -0.24975 0.27158 0.64488 -0.24975 0.27450 0.63573 -0.28475 0.28509 0.61019 -0.40275 0.29576 0.64295 -0.28475 0.30049 0.62159 -0.30475 0.30176 0.61585 -0.40275 0.32453 0.65581 -0.24975 0.32553 0.64621 -0.28475 0.32870 0.61880 -0.40275 0.35157 0.62131 -0.40275 0.35157 0.62719 -0.30475 0.35157 0.64906 -0.28475 0.37290 0.65581 -0.24975 0.37444 0.61880 -0.40275 0.37761 0.64621 -0.28475 0.37860 0.65581 -0.24975 0.40138 0.61585 -0.40275 0.40265 0.62159 -0.30475 0.40738 0.64295 -0.28475 0.42864 0.63573 -0.28475 0.43156 0.64488 -0.24975 0.43959 0.60288 -0.40275 0.44882 0.59975 -0.40275 0.45131 0.60508 -0.30475 0.46055 0.62490 -0.28475 0.47654 0.61520 -0.28475 0.48120 0.62346 -0.24975 0.49157 -0.65581 -0.25425 0.49157 -0.65581 -0.24975 0.49157 -0.62881 -0.25425 0.49157 -0.62881 -0.24975 0.49166 0.57375 -0.40275 0.49225 -0.62364 -0.25425 0.49231 -0.62349 -0.24975 0.49237 0.61564 -0.24975 0.49425 -0.61881 -0.25425 0.49425 -0.61881 -0.24975 0.49524 0.57842 -0.30475 0.49743 -0.61467 -0.25425 0.49743 -0.61467 -0.24975 0.50157 -0.61149 -0.25425 0.50157 -0.61149 -0.24975 0.50639 -0.60949 -0.25425 0.50639 -0.60949 -0.24975 0.50855 0.59577 -0.28475 0.51157 -0.60881 -0.25425 0.51157 -0.60881 -0.24975 0.51657 -0.42381 -0.25425 0.51657 -0.42381 -0.24975 0.51657 -0.30381 -0.25425 0.51657 -0.30381 -0.24975 0.51707 -0.29936 -0.25425 0.51707 -0.29936 -0.24975 0.51725 -0.42899 -0.25425 0.51725 -0.42899 -0.24975 0.51855 -0.29513 -0.25425 0.51855 -0.29513 -0.24975 0.51925 -0.43381 -0.25425 0.51925 -0.43381 -0.24975 0.51935 0.58543 -0.28475 0.52093 -0.29134 -0.25425 0.52093 -0.29134 -0.24975 0.52243 -0.43795 -0.25425 0.52243 -0.43795 -0.24975 0.52410 -0.28817 -0.25425 0.52410 -0.28817 -0.24975 0.52785 0.53911 -0.40275 0.52550 0.59245 -0.24975 0.52657 -0.44113 -0.25425 0.52657 -0.44113 -0.24975 0.52789 -0.28579 -0.25425 0.52789 -0.28579 -0.24975 0.53139 -0.44313 -0.25425 0.53139 -0.44313 -0.24975 0.53212 -0.28431 -0.25425 0.53212 -0.28431 -0.24975 0.53235 0.54289 -0.30475 0.54157 -0.63381 -0.25425 0.53657 -0.44381 -0.25425 0.53657 -0.44381 -0.24975 0.53657 -0.28381 -0.25425 0.53657 -0.28381 -0.24975 0.54668 -0.28381 -0.24975 0.54668 0.57000 -0.24975 0.54911 0.55694 -0.28475 0.55534 0.54763 -0.28475 0.55587 0.49698 -0.40275 0.56090 0.50016 -0.30475 0.56260 0.55312 -0.24975 0.56496 -0.65584 -0.40476 0.57385 0.45075 -0.40275 0.57953 0.45227 -0.30475 0.58030 0.51026 -0.28475 0.58147 0.40123 -0.40275 0.58301 0.50330 -0.28475 0.58734 0.40148 -0.30475 0.59099 0.50710 -0.24975 0.59966 -0.65582 -0.25425 0.60065 0.45793 -0.28475 0.60276 -0.08881 -0.40475 0.60122 0.45424 -0.28475 0.60251 -0.11994 -0.40475 0.60448 -0.14817 -0.40475 0.60319 -0.60881 -0.25425 0.60413 -0.08881 -0.38157 0.60424 -0.60881 -0.24975 0.60919 0.40244 -0.28475 0.60921 -0.08881 -0.37693 0.60948 0.45629 -0.24975 0.61608 -0.44381 -0.25425 0.61713 -0.44381 -0.24975 0.61732 0.40279 -0.24975 0.62858 -0.28381 -0.25425 0.62963 -0.28381 -0.24975 0.63123 -0.26337 -0.24975 0.64001 -0.15095 -0.24975 0.64043 -0.12665 -0.24975 0.35157 0.40123 -0.40275 -0.13073 -0.65281 0.66263 -0.13073 -0.65281 0.71487 -0.13073 -0.39881 0.66263 -0.13073 -0.39881 0.71486 -0.12509 -0.65281 0.61070 -0.12509 -0.65281 0.76683 -0.12507 -0.39881 0.61070 -0.12508 -0.39881 0.76685 -0.11386 -0.65247 0.55968 -0.11387 -0.65247 0.81783 -0.11386 -0.39881 0.55967 -0.11382 -0.39881 0.81781 0.05154 -0.65381 1.41452 0.05154 -0.39581 1.41451 0.09784 -0.39881 -0.18125 0.09784 -0.39581 -0.18125 0.10534 -0.39881 -0.23126 0.10534 -0.65381 -0.23126 0.12823 -0.65381 1.44128 0.12822 -0.39881 1.44131 0.20151 -0.65381 1.45926 0.20152 -0.39881 1.45928 0.27619 -0.65381 1.47012 0.27619 -0.39881 1.47014 0.35157 -0.65381 1.47374 0.35157 -0.39881 1.47374 0.42693 -0.65381 1.47008 0.42694 -0.39881 1.47013 0.50164 -0.65381 1.45932 0.50165 -0.39881 1.45927 0.57490 -0.65381 1.44137 0.57489 -0.39881 1.44134 0.59927 -0.65380 -0.23126 0.59917 -0.39881 -0.23125 0.60530 -0.39881 -0.18125 0.60530 -0.39581 -0.18125 0.65141 -0.65381 1.41451 0.65133 -0.39881 1.41442 0.81700 -0.39581 0.55968 0.81699 -0.39881 0.81784 0.81700 -0.65281 0.55968 0.81701 -0.65281 0.81783 0.82821 -0.39881 0.61070 0.82821 -0.39881 0.76681 0.82822 -0.65281 0.61069 0.82821 -0.65281 0.76681 0.83386 -0.39881 0.66263 0.83384 -0.39881 0.71486 0.83386 -0.65281 0.66263 0.83386 -0.65281 0.71486 0.35148 -0.65381 1.41452 0.35143 -0.39731 1.41446 0.08557 -0.39081 -0.25425 0.08557 -0.39081 -0.23925 0.08557 -0.37581 -0.23925 0.08557 -0.37581 -0.20425 0.08557 -0.36881 -0.20425 0.08557 -0.29081 -0.25425 0.08557 -0.29081 -0.23425 0.14757 -0.39081 -0.25425 0.14757 -0.39081 -0.23925 0.14757 -0.37581 -0.23925 0.14757 -0.37581 -0.20425 0.14757 -0.36881 -0.20425 0.14757 -0.29081 -0.25425 0.14757 -0.29081 -0.23425 0.55557 -0.39081 -0.25425 0.55557 -0.39081 -0.23925 0.55557 -0.37581 -0.23925 0.55557 -0.37581 -0.20425 0.55557 -0.36881 -0.20425 0.55557 -0.29081 -0.25425 0.55557 -0.29081 -0.23425 0.61757 -0.39081 -0.25425 0.61757 -0.39081 -0.23925 0.61757 -0.37581 -0.23925 0.61757 -0.37581 -0.20425 0.61757 -0.36881 -0.20425 0.61757 -0.29081 -0.25425 0.61757 -0.29081 -0.23425 0.70708 0.00000 0.70708 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.70708 0.00000 -0.70708 0.70708 0.00000 0.70708 0.70708 0.00000 0.70708 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.70708 0.00000 -0.70708 0.70708 0.00000 0.70708 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.70708 0.00000 -0.70708 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.70708 0.00000 -0.70708 0.70708 0.00000 -0.70708 0.70708 0.00000 0.70708 0.70708 0.00000 0.70708 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.70708 0.00000 0.70708 0.70708 0.00000 0.70708 0.70708 0.00000 0.70708 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.70708 0.00000 0.70708 0.70708 0.00000 -0.70708 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.70708 0.00000 -0.70708 0.70708 0.00000 -0.70708 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.70708 0.00000 0.70708 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.70708 0.00000 -0.70708 0.70708 0.00000 0.70708 0.70708 0.00000 0.70708 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.70708 0.00000 -0.70708 0.70708 0.00000 0.70708 0.70708 0.00000 0.70708 0.70708 0.00000 0.70708 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.70708 0.00000 0.70708 0.70708 0.00000 -0.70708 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.70708 0.00000 -0.70708 0.70708 0.00000 -0.70708 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.70708 0.00000 0.70708 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.70708 0.00000 -0.70708 0.70708 0.00000 0.70708 0.70708 0.00000 0.70708 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.70708 0.00000 -0.70708 0.70708 0.00000 0.70708 0.70708 0.00000 0.70708 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.70708 0.00000 -0.70708 0.70708 0.00000 0.70708 0.70708 0.00000 0.70708 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.70708 0.00000 -0.70708 0.70708 0.00000 0.70708 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.70708 0.00000 -0.70708 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.70708 0.00000 -0.70708 0.70708 0.00000 -0.70708 0.70708 0.00000 0.70708 0.70708 0.00000 0.70708 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.70708 0.00000 0.70708 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57734 0.57736 0.57735 -0.57735 0.57736 -0.57735 -0.57735 -0.57735 -0.57735 0.57734 0.57736 -0.57735 -0.57735 0.57736 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -1.00000 0.00000 -0.00000 -0.70711 0.00000 -0.70711 -0.70711 -0.70711 0.00000 -0.70711 0.70710 0.00000 -0.70710 0.00000 0.70712 0.00000 -1.00000 0.00000 0.00000 -0.70710 0.70712 0.00000 -0.70711 -0.70711 0.00000 0.70709 0.70712 0.00000 0.70710 -0.70711 0.70711 -0.70711 0.00000 0.70711 0.00000 -0.70711 0.70710 0.00000 0.70712 0.70711 0.70710 0.00000 1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -0.70711 0.00000 -0.70711 -0.70711 -0.70711 0.00000 -0.70711 0.70711 0.00000 -0.70711 0.00000 0.70711 0.00000 -1.00000 0.00000 0.00000 -0.70711 0.70711 0.00000 -0.70711 -0.70711 0.00000 0.70711 0.70711 0.00000 0.70711 -0.70711 0.70711 -0.70711 0.00000 0.70711 0.00000 -0.70711 0.70711 0.00000 0.70711 0.70711 0.70711 0.00000 1.00000 0.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 0.00000 -1.00000 0.00000 1.00000 -0.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 -0.69035 0.72102 -0.05954 -0.32088 0.94525 -0.05954 -0.00008 -1.00000 0.00021 0.00000 0.00000 1.00000 -0.66825 0.69804 -0.25725 -0.96060 0.14794 -0.23530 -0.90379 0.35152 -0.24412 0.50069 0.82515 -0.26160 0.96060 0.14795 -0.23530 0.90379 0.35152 -0.24412 -0.63099 0.24542 -0.73595 -0.56294 0.37610 -0.73597 -0.46818 0.48905 -0.73596 -0.35121 0.57882 -0.73595 -0.21761 0.64111 -0.73595 0.35121 0.57882 -0.73595 0.46818 0.48905 -0.73596 0.56294 0.37610 -0.73597 0.63099 0.24542 -0.73595 0.97184 -0.07294 -0.22406 0.97108 -0.07587 -0.22637 -0.97184 -0.07296 -0.22405 -0.97108 -0.07587 -0.22637 0.00000 -0.00000 -1.00000 -0.99146 -0.13044 -0.00000 -0.99146 -0.13044 0.00000 -0.92389 -0.38266 -0.00000 -0.92389 -0.38266 0.00000 -0.79328 -0.60885 -0.00000 -0.79328 -0.60885 0.00000 -0.60885 -0.79328 -0.00000 -0.60885 -0.79328 0.00000 -0.38266 -0.92389 -0.00000 -0.38266 -0.92389 0.00000 -0.13044 -0.99146 -0.00000 -0.13044 -0.99146 0.00000 -0.11187 0.99372 0.00000 -0.11187 0.99372 0.00000 -0.33039 0.94385 0.00000 -0.53193 0.84679 0.00000 -0.70711 0.70711 0.00000 -0.84679 0.53193 0.00000 -0.94384 0.33039 0.00000 -0.99372 0.11188 0.00000 -0.99146 -0.13045 -0.00000 -0.99146 -0.13045 0.00000 -0.92389 -0.38265 -0.00000 -0.92389 -0.38265 0.00000 -0.79329 -0.60885 0.00000 -0.60884 -0.79329 0.00000 -0.38249 -0.92396 0.00000 -0.13063 -0.99143 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 0.00000 -1.00000 -0.00000 0.99146 0.13044 -0.00000 0.92389 0.38266 -0.00000 0.79328 0.60885 -0.00000 0.60885 0.79328 -0.00000 0.38266 0.92389 -0.00000 0.13044 0.99146 0.00000 0.13044 0.99146 -0.00000 0.11187 -0.99372 0.00000 0.11187 -0.99372 0.00000 0.33039 -0.94385 0.00000 0.33039 -0.94385 0.00000 0.53193 -0.84679 0.00000 0.53193 -0.84679 0.00000 0.70710 -0.70711 0.00000 0.70710 -0.70711 0.00000 0.84679 -0.53192 0.00000 0.84679 -0.53192 0.00000 0.94384 -0.33039 0.00000 0.94384 -0.33039 0.00000 0.99372 -0.11187 0.00000 0.99372 -0.11187 0.00000 0.00000 0.00001 1.00000 0.99146 -0.13044 0.00000 0.13063 -0.99143 0.00000 0.13063 -0.99143 0.00000 0.38249 -0.92396 0.00000 0.60885 -0.79329 0.00000 0.79329 -0.60885 0.00000 0.92389 -0.38265 -0.00004 0.99042 -0.13782 -0.00864 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -0.00007 -1.00000 0.00013 0.00000 -1.00000 0.00016 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.38249 -0.92396 0.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -1.00000 0.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.97162 -0.07591 -0.22403 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00001 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -1.00000 -0.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -1.00000 0.00000 0.60885 -0.79329 0.00000 0.79329 -0.60885 0.00000 0.92391 -0.38262 0.00000 0.38266 0.92389 0.00000 0.60885 0.79328 0.00000 0.79328 0.60885 0.00000 0.92389 0.38266 0.00000 0.99146 0.13044 0.00000 0.00000 0.00000 1.00000 -0.94384 0.33039 0.00000 -0.84679 0.53193 0.00000 -0.70711 0.70711 0.00000 -0.53193 0.84679 0.00000 -0.33039 0.94385 0.00000 -0.79329 -0.60885 -0.00000 -0.99372 0.11188 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.97162 -0.07591 -0.22402 0.32079 0.94528 -0.05954 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 -1.00000 0.30996 0.91322 -0.26448 0.21761 0.64111 -0.73595 -0.93036 0.36179 -0.05954 -0.93036 0.36179 -0.05954 -0.10867 0.99229 -0.05954 -0.10867 0.99229 -0.05954 0.00000 -0.00000 1.00000 0.00000 0.99636 -0.08525 0.10867 0.99229 -0.05954 0.10867 0.99229 -0.05954 0.51787 0.85339 -0.05954 0.51786 0.85339 -0.05954 -0.97452 -0.01676 -0.22369 -0.97414 0.00009 -0.22595 -0.97160 -0.07599 -0.22409 -0.97108 -0.07587 -0.22639 -0.96404 0.14122 -0.22512 -0.96061 0.14786 -0.23530 -0.97113 -0.07587 -0.22617 -0.97108 -0.07587 -0.22637 -0.97183 -0.07593 -0.22312 -0.97176 -0.07564 -0.22350 -0.90381 0.35147 -0.24412 -0.91756 0.33397 -0.21574 -0.97315 0.04280 -0.22615 -0.97310 0.04296 -0.22636 -0.66912 0.10299 -0.73599 -0.66895 0.10303 -0.73613 -0.66916 0.10299 -0.73595 -0.66915 0.10298 -0.73596 -0.80475 0.53773 -0.25145 -0.83255 0.51352 -0.20774 -0.63100 0.24538 -0.73595 -0.63100 0.24538 -0.73595 -0.71249 0.67222 -0.20117 -0.80478 0.53767 -0.25145 -0.56293 0.37615 -0.73595 -0.56292 0.37615 -0.73596 -0.82998 0.55460 -0.05954 -0.82999 0.55460 -0.05954 -0.70307 0.66329 -0.25640 -0.67512 0.70524 -0.21646 0.00000 -0.00000 1.00000 -0.82999 0.55458 -0.05954 -0.46817 0.48906 -0.73596 -0.46817 0.48906 -0.73596 -0.56245 0.80326 -0.19604 -0.50070 0.82514 -0.26160 -0.69029 0.72108 -0.05954 -0.69026 0.72111 -0.05953 0.00000 -0.00000 1.00000 -0.60810 0.78945 -0.08361 -0.35122 0.57879 -0.73596 -0.35123 0.57880 -0.73596 -0.38242 0.88656 -0.26032 -0.50837 0.83782 -0.19905 -0.51785 0.85340 -0.05954 -0.51786 0.85339 -0.05954 -0.31138 0.91724 -0.24840 -0.38866 0.90107 -0.19238 -0.38319 0.92127 -0.06646 0.00000 0.00000 1.00000 -0.21764 0.64110 -0.73595 -0.21762 0.64110 -0.73596 -0.32087 0.94525 -0.05955 -0.32086 0.94525 -0.05954 -0.38217 0.88578 -0.26333 -0.30996 0.91322 -0.26448 -0.10497 0.95826 -0.26592 -0.19853 0.96147 -0.19017 -0.07372 0.67301 -0.73595 -0.07370 0.67300 -0.73596 0.00000 0.98190 -0.18942 -0.10494 0.95827 -0.26592 -0.07370 0.67300 -0.73596 0.07370 0.67300 -0.73596 0.00000 0.96435 -0.26462 0.10540 0.96251 -0.24991 0.07370 0.67300 -0.73596 0.07372 0.67301 -0.73595 0.19853 0.96147 -0.19017 0.10497 0.95826 -0.26592 0.32087 0.94525 -0.05954 0.32087 0.94525 -0.05954 0.21762 0.64110 -0.73596 0.21764 0.64110 -0.73595 0.38868 0.90106 -0.19238 0.31001 0.91321 -0.26448 0.50380 0.83025 -0.23847 0.55379 0.79083 -0.26058 0.35123 0.57880 -0.73596 0.35122 0.57879 -0.73597 0.69028 0.72108 -0.05954 0.69029 0.72108 -0.05954 0.66825 0.69804 -0.25725 0.56244 0.80326 -0.19604 0.46817 0.48906 -0.73596 0.46817 0.48906 -0.73596 0.67517 0.70530 -0.21610 0.70306 0.66330 -0.25640 0.82998 0.55460 -0.05954 0.83111 0.55279 -0.06064 0.71250 0.67222 -0.20117 0.80478 0.53768 -0.25145 0.56292 0.37615 -0.73596 0.56293 0.37615 -0.73595 0.93035 0.36180 -0.05954 0.93036 0.36179 -0.05955 0.83255 0.51352 -0.20774 0.80475 0.53773 -0.25145 0.63100 0.24538 -0.73595 0.63100 0.24538 -0.73595 0.91756 0.33397 -0.21574 0.90381 0.35147 -0.24412 0.96404 0.14122 -0.22512 0.96061 0.14786 -0.23530 0.97138 0.00321 -0.23749 0.97408 -0.00756 -0.22609 0.97451 -0.01676 -0.22370 0.96981 0.06758 -0.23432 0.97315 0.04249 -0.22623 0.97314 0.04249 -0.22624 0.99726 0.04354 -0.05989 0.99729 0.04356 -0.05936 0.98661 0.15184 -0.05954 0.98661 0.15185 -0.05953 -0.99726 0.04354 -0.05989 -0.99725 0.04353 -0.05998 -0.98661 0.15184 -0.05954 -0.98661 0.15185 -0.05953 0.66547 0.13768 -0.73362 0.66879 0.13739 -0.73065 0.66916 0.10300 -0.73595 0.66913 0.10298 -0.73597 -0.66547 0.13768 -0.73362 -0.66878 0.13739 -0.73065 -0.97314 0.04249 -0.22624 -0.97315 0.04249 -0.22623 0.97160 -0.07599 -0.22409 0.97108 -0.07587 -0.22639 0.97183 -0.07593 -0.22312 0.97176 -0.07564 -0.22350 0.97108 -0.07587 -0.22637 0.97113 -0.07587 -0.22617 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00408 -0.99999 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00002 -1.00000 -0.00000 0.00007 -1.00000 0.00000 -0.00009 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00409 -0.99999 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.02480 0.99969 0.00304 0.00001 1.00000 0.00000 -0.96152 0.00000 -0.27473 0.96152 0.00000 -0.27473 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00001 0.00002 -1.00000 0.00000 1.00000 0.00000 0.14318 0.00000 0.98970 -0.04785 -0.00002 0.99885 -0.14392 -0.00005 0.98959 -0.23816 -0.00009 0.97123 0.04819 -0.00008 0.99884 0.23790 0.00014 0.97129 0.33172 0.00029 0.94338 -0.32973 -0.00003 0.94408 -1.00000 0.00002 0.00001 -0.97655 0.00011 0.21528 -0.97667 0.00003 -0.21474 0.97671 0.00001 0.21458 0.97670 0.00003 -0.21461 1.00000 0.00003 0.00016 -0.96367 0.00012 0.26710 -0.99416 0.00001 0.10795 -0.99413 0.00004 -0.10821 -0.96368 0.00000 -0.26707 0.96356 0.00022 0.26749 0.99416 0.00002 0.10795 0.99414 0.00002 -0.10808 0.96412 0.00018 -0.26547 -0.00023 -1.00000 0.00147 -0.00018 -0.99999 -0.00334 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00018 -0.99999 0.00334 -0.00037 -1.00000 -0.00196 -0.00000 -1.00000 -0.00168 -0.00000 -1.00000 -0.00225 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00209 1.00000 0.00202 -0.00159 0.99957 0.02939 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00251 0.00500 0.99997 -0.00641 0.00500 0.99999 0.00139 0.00500 0.99989 0.01420 0.00450 0.99982 0.01838 0.00327 0.99974 0.02251 0.00121 0.99968 0.02529 -0.00121 0.99968 0.02530 -0.00327 0.99974 0.02251 -0.00451 0.99982 0.01839 0.00499 0.99526 0.09709 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 0.00000 1.00000 0.00000 -1.00000 -0.00000 0.00000 0.00000 1.00000 0.00000 0.35898 0.93335 0.00000 1.00000 0.00000 -0.00000 0.00000 -1.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 0.00000 -1.00000 0.00000 0.35898 0.93335 0.00000 0.00000 1.00000 0.00000 -1.00000 -0.00000 0.00000 0.00000 1.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 1.00000 0.00000

4 0 6 1 7 2 7 3 5 4 4 5 0 6 2 7 3 8 3 9 1 10 0 11 2 12 6 13 7 14 7 15 3 16 2 17 1 18 3 19 7 20 7 21 5 22 1 23 0 24 4 25 6 26 6 27 2 28 0 29 15 30 11 31 9 32 9 33 13 34 15 35 14 36 12 37 8 38 8 39 10 40 14 41 13 42 9 43 8 44 8 45 12 46 13 47 15 48 13 49 12 50 12 51 14 52 15 53 11 54 9 55 8 56 8 57 10 58 11 59 23 60 19 61 17 62 17 63 21 64 23 65 22 66 20 67 16 68 16 69 18 70 22 71 21 72 17 73 16 74 16 75 20 76 21 77 23 78 21 79 20 80 20 81 22 82 23 83 19 84 17 85 16 86 16 87 18 88 19 89 28 90 30 91 31 92 31 93 29 94 28 95 24 96 26 97 27 98 27 99 25 100 24 101 26 102 30 103 31 104 31 105 27 106 26 107 25 108 27 109 31 110 31 111 29 112 25 113 24 114 28 115 30 116 30 117 26 118 24 119 39 120 35 121 33 122 33 123 37 124 39 125 38 126 36 127 32 128 32 129 34 130 38 131 37 132 33 133 32 134 32 135 36 136 37 137 39 138 37 139 36 140 36 141 38 142 39 143 35 144 33 145 32 146 32 147 34 148 35 149 44 150 46 151 47 152 47 153 45 154 44 155 40 156 42 157 43 158 43 159 41 160 40 161 42 162 46 163 47 164 47 165 43 166 42 167 41 168 43 169 47 170 47 171 45 172 41 173 40 174 44 175 46 176 46 177 42 178 40 179 41 180 45 181 44 182 44 183 40 184 41 185 35 186 39 187 38 188 38 189 34 190 35 191 70 192 64 192 66 192 62 193 68 193 60 193 56 194 50 194 58 194 71 195 67 195 65 195 69 196 63 196 61 196 52 197 48 197 54 197 59 198 51 198 57 198 53 199 55 199 49 199 87 200 85 200 93 200 77 201 79 201 73 201 84 202 86 202 92 202 89 203 95 203 91 203 81 204 83 204 75 204 76 205 72 205 78 205 94 206 88 206 90 206 74 207 82 207 80 207 50 208 48 208 49 208 49 208 51 208 50 208 54 209 48 209 50 209 50 209 56 209 54 209 48 210 52 210 53 210 53 210 49 210 48 210 51 211 59 211 58 211 58 211 50 211 51 211 49 212 55 212 57 212 57 212 51 212 49 212 61 213 53 213 52 213 52 213 60 213 61 213 55 214 53 214 61 214 61 214 63 214 55 214 52 215 54 215 62 215 62 215 60 215 52 215 59 216 57 216 65 216 65 216 67 216 59 216 56 217 58 217 66 217 66 217 64 217 56 217 69 218 61 218 60 218 60 218 68 218 69 218 68 219 62 219 64 219 64 219 70 219 68 219 71 220 65 220 63 220 63 220 69 220 71 220 67 221 71 221 70 221 70 221 66 221 67 221 71 222 69 222 68 222 68 222 70 222 71 222 74 223 72 223 73 223 73 223 75 223 74 223 74 224 80 224 78 224 78 224 72 224 74 224 72 225 76 225 77 225 77 225 73 225 72 225 82 226 74 226 75 226 75 226 83 226 82 226 81 227 75 227 73 227 73 227 79 227 81 227 84 228 85 228 77 228 77 228 76 228 84 228 79 229 77 229 85 229 85 229 87 229 79 229 76 230 78 230 86 230 86 230 84 230 76 230 89 231 91 231 83 231 83 231 81 231 89 231 80 232 82 232 90 232 90 232 88 232 80 232 84 233 92 233 93 233 93 233 85 233 84 233 88 234 94 234 92 234 92 234 86 234 88 234 95 235 89 235 87 235 87 235 93 235 95 235 94 236 90 236 91 236 91 236 95 236 94 236 93 237 92 237 94 237 94 237 95 237 93 237 59 238 67 238 66 238 66 238 58 238 59 238 80 239 88 239 86 239 86 239 78 239 80 239 83 240 91 240 90 240 90 240 82 240 83 240 64 241 89 241 81 241 81 241 56 241 64 241 63 242 65 242 57 242 57 242 55 242 63 242 148 243 140 243 154 243 206 244 207 244 204 244 127 245 188 245 117 245 119 246 310 246 298 246 174 247 159 247 151 247 115 248 106 248 116 248 120 249 124 249 122 249 228 250 227 250 226 250 310 251 302 251 300 251 298 252 296 252 294 252 122 253 124 253 129 253 131 254 132 254 140 254 159 255 174 255 182 255 193 256 196 256 198 256 203 257 205 257 206 257 225 258 226 258 227 258 239 259 246 259 261 259 278 260 286 260 287 260 289 261 294 261 296 261 305 262 299 262 291 262 314 263 316 263 315 263 127 264 117 264 113 264 99 265 98 265 101 265 154 266 145 266 148 266 170 267 171 267 165 267 170 268 165 268 164 268 164 269 165 269 161 269 164 270 161 270 160 270 160 271 161 271 156 271 160 272 156 272 155 272 155 273 156 273 150 273 155 274 150 274 149 274 149 275 150 275 144 275 149 276 144 276 143 276 143 277 144 277 138 277 143 278 138 278 137 278 135 279 136 279 142 279 135 280 142 280 141 280 141 281 147 281 146 281 146 282 153 282 152 282 152 283 158 283 157 283 157 284 163 284 162 284 162 285 167 285 166 285 166 286 169 286 168 286 190 287 191 287 186 287 190 288 186 288 185 288 185 289 186 289 184 289 185 290 184 290 183 290 183 291 181 291 180 291 180 292 179 292 178 292 178 293 177 293 176 293 176 294 173 294 172 294 190 295 188 295 191 295 191 296 188 296 189 296 282 297 284 297 283 297 249 298 256 298 255 298 255 299 260 299 259 299 259 300 265 300 264 300 264 301 271 301 270 301 270 302 275 302 274 302 274 303 275 303 281 303 274 304 281 304 280 304 282 305 283 305 277 305 282 306 277 306 276 306 276 307 277 307 273 307 276 308 273 308 272 308 272 309 273 309 267 309 272 310 267 310 266 310 266 311 267 311 263 311 266 312 263 312 262 312 262 313 263 313 258 313 262 314 258 314 257 314 257 315 258 315 254 315 257 316 254 316 253 316 253 317 254 317 252 317 253 318 252 318 251 318 279 319 229 319 299 319 232 320 231 320 234 320 247 321 248 321 245 321 247 322 245 322 244 322 244 323 243 323 242 323 242 324 241 324 240 324 240 325 238 325 237 325 237 326 235 326 234 326 234 327 235 327 232 327 229 328 231 328 230 328 230 329 231 329 232 329 291 330 299 330 229 330 127 331 291 331 229 331 229 331 188 331 127 331 229 332 230 332 189 332 189 332 188 332 229 332 247 333 305 333 307 333 307 333 248 333 247 333 280 334 281 334 312 334 312 334 311 334 280 334 243 335 244 335 245 335 105 336 251 336 249 336 105 337 311 337 314 337 99 338 101 338 137 338 137 338 138 338 99 338 272 339 282 339 276 339 257 340 253 340 251 340 255 341 259 341 264 341 262 342 257 342 272 342 262 343 272 343 266 343 280 344 264 344 270 344 280 345 270 345 274 345 257 346 251 346 282 346 282 346 272 346 257 346 255 347 264 347 280 347 280 347 249 347 255 347 311 348 105 348 249 348 249 348 280 348 311 348 314 349 282 349 251 349 251 349 105 349 314 349 304 350 314 350 311 350 240 351 244 351 242 351 234 352 231 352 240 352 234 353 240 353 237 353 299 354 305 354 247 354 247 354 279 354 299 354 229 355 279 355 247 355 247 355 231 355 229 355 240 356 231 356 247 356 247 356 244 356 240 356 133 357 117 357 188 357 185 358 183 358 180 358 185 359 180 359 190 359 180 360 178 360 176 360 188 361 190 361 172 361 172 361 133 361 188 361 172 362 113 362 117 362 117 362 133 362 172 362 172 363 190 363 180 363 180 363 176 363 172 363 168 364 169 364 171 364 171 364 170 364 168 364 102 365 136 365 135 365 135 365 103 365 102 365 104 366 168 366 170 366 164 367 160 367 155 367 155 368 149 368 143 368 103 369 104 369 101 369 170 370 164 370 155 370 152 371 157 371 162 371 152 372 162 372 146 372 168 373 162 373 166 373 146 374 135 374 141 374 101 375 104 375 170 375 170 375 137 375 101 375 143 376 137 376 170 376 170 376 155 376 143 376 103 377 135 377 168 377 168 377 104 377 103 377 168 378 135 378 146 378 146 378 162 378 168 378 111 379 113 379 172 379 172 379 173 379 111 379 241 380 242 380 243 380 238 381 240 381 241 381 235 382 237 382 238 382 270 383 271 383 275 383 264 384 265 384 271 384 259 385 260 385 265 385 255 386 256 386 260 386 249 387 250 387 256 387 136 388 173 388 142 388 162 389 163 389 167 389 157 390 158 390 163 390 152 391 153 391 158 391 146 392 147 392 153 392 141 393 142 393 147 393 181 394 183 394 184 394 166 395 167 395 169 395 241 396 265 396 260 396 158 397 181 397 163 397 156 398 119 398 150 398 316 399 284 399 315 399 151 400 195 400 192 400 298 401 290 401 285 401 285 402 269 402 236 402 236 403 228 403 222 403 222 404 217 404 214 404 208 405 202 405 201 405 134 406 195 406 151 406 273 407 277 407 318 407 267 408 273 408 318 408 156 409 263 409 267 409 150 410 96 410 144 410 107 411 112 411 114 411 301 412 306 412 309 412 101 413 110 413 103 413 224 414 223 414 225 414 100 415 96 415 150 415 150 415 119 415 100 415 96 416 97 416 138 416 138 416 144 416 96 416 167 417 163 417 260 417 260 417 256 417 167 417 189 418 230 418 232 418 232 418 191 418 189 418 241 419 243 419 271 419 271 419 265 419 241 419 243 420 245 420 275 420 275 420 271 420 243 420 245 421 248 421 281 421 281 421 275 421 245 421 248 422 307 422 312 422 312 422 281 422 248 422 102 423 111 423 173 423 173 423 136 423 102 423 142 424 173 424 177 424 177 424 147 424 142 424 147 425 177 425 179 425 179 425 153 425 147 425 153 426 179 426 181 426 181 426 158 426 153 426 191 427 232 427 235 427 235 427 186 427 191 427 169 428 167 428 256 428 256 428 250 428 169 428 99 429 138 429 97 429 97 429 98 429 99 429 156 430 161 430 258 430 258 430 263 430 156 430 254 431 258 431 161 431 161 431 165 431 254 431 283 432 317 432 318 432 318 432 277 432 283 432 119 433 134 433 128 433 128 433 120 433 119 433 252 434 254 434 165 434 165 434 171 434 252 434 310 435 119 435 318 435 318 435 313 435 310 435 186 436 235 436 238 436 238 436 184 436 186 436 181 437 241 437 260 437 260 437 163 437 181 437 283 438 284 438 316 438 316 438 317 438 283 438 236 439 119 439 298 439 298 439 285 439 236 439 134 440 119 440 201 440 201 440 195 440 134 440 201 441 119 441 214 441 214 441 208 441 201 441 214 442 119 442 236 442 236 442 222 442 214 442 156 443 267 443 318 443 318 443 119 443 156 443 100 444 119 444 120 444 120 444 106 444 100 444 241 445 181 445 184 445 184 445 238 445 241 445 252 446 171 446 169 446 169 446 250 446 252 446 200 447 204 447 319 447 222 448 221 448 220 448 221 449 219 449 220 449 125 450 129 450 130 450 125 451 130 451 126 451 207 452 206 452 210 452 206 453 212 453 210 453 211 454 210 454 215 454 210 455 212 455 215 455 212 456 219 456 215 456 219 457 218 457 215 457 224 458 225 458 233 458 225 459 239 459 233 459 97 460 96 460 110 460 96 461 109 461 110 461 110 462 101 462 97 462 101 463 98 463 97 463 100 464 106 464 108 464 106 465 115 465 108 465 113 466 111 466 103 466 111 467 102 467 103 467 113 468 103 468 127 468 103 469 110 469 127 469 122 470 116 470 120 470 116 471 106 471 120 471 96 472 107 472 109 472 107 473 114 473 109 473 108 474 115 474 118 474 115 475 116 475 118 475 116 476 125 476 118 476 125 477 121 477 118 477 131 478 124 478 128 478 124 479 120 479 128 479 116 480 122 480 125 480 122 481 129 481 125 481 134 482 132 482 128 482 132 483 131 483 128 483 124 484 131 484 129 484 131 485 140 485 129 485 140 486 139 486 129 486 139 487 130 487 129 487 151 488 159 488 134 488 159 489 132 489 134 489 145 490 139 490 148 490 139 491 140 491 148 491 132 492 159 492 140 492 159 493 182 493 140 493 151 494 192 494 174 494 192 495 193 495 174 495 182 496 175 496 140 496 175 497 154 497 140 497 187 498 175 498 194 498 175 499 182 499 194 499 174 500 193 500 182 500 193 501 198 501 182 501 192 502 195 502 193 502 195 503 196 503 193 503 197 504 194 504 198 504 194 505 182 505 198 505 203 506 196 506 201 506 196 507 195 507 201 507 198 508 200 508 197 508 200 509 199 509 197 509 196 510 203 510 198 510 203 511 206 511 198 511 206 512 204 512 198 512 204 513 200 513 198 513 201 514 202 514 203 514 202 515 205 515 203 515 209 516 205 516 208 516 205 517 202 517 208 517 205 518 209 518 206 518 209 519 212 519 206 519 214 520 213 520 208 520 213 521 209 521 208 521 209 522 213 522 212 522 213 523 216 523 212 523 217 524 216 524 214 524 216 525 213 525 214 525 212 526 216 526 219 526 216 527 220 527 219 527 222 528 220 528 217 528 220 529 216 529 217 529 225 530 223 530 219 530 223 531 218 531 219 531 219 532 221 532 225 532 221 533 226 533 225 533 228 534 226 534 222 534 226 535 221 535 222 535 246 536 227 536 236 536 227 537 228 537 236 537 225 538 227 538 239 538 227 539 246 539 239 539 268 540 233 540 239 540 268 541 239 541 278 541 261 542 246 542 269 542 246 543 236 543 269 543 239 544 261 544 278 544 261 545 286 545 278 545 286 546 261 546 285 546 261 547 269 547 285 547 278 548 289 548 268 548 289 549 288 549 268 549 285 550 290 550 286 550 290 551 287 551 286 551 278 552 287 552 289 552 287 553 294 553 289 553 292 554 288 554 293 554 288 555 289 555 293 555 298 556 294 556 290 556 294 557 287 557 290 557 289 558 296 558 293 558 296 559 300 559 293 559 310 560 300 560 298 560 300 561 296 561 298 561 313 562 308 562 310 562 308 563 302 563 310 563 318 564 303 564 309 564 303 565 301 565 309 565 317 566 304 566 318 566 304 567 303 567 318 567 308 568 313 568 309 568 313 569 318 569 309 569 297 570 306 570 295 570 306 571 301 571 295 571 292 572 293 572 297 572 292 573 297 573 295 573 121 574 123 574 112 574 123 575 114 575 112 575 121 576 125 576 126 576 121 577 126 577 123 577 308 578 309 578 297 578 309 579 306 579 297 579 300 580 308 580 293 580 308 581 297 581 293 581 108 582 121 582 107 582 121 583 112 583 107 583 96 584 100 584 107 584 100 585 108 585 107 585 304 586 317 586 314 586 317 587 316 587 314 587 305 588 291 588 311 588 291 589 304 589 311 589 312 590 307 590 311 590 307 591 305 591 311 591 154 592 145 592 148 592 194 593 175 593 187 593 200 594 197 594 199 594 215 595 319 595 210 595 215 596 210 596 211 596 301 597 319 597 295 597 139 598 145 598 154 598 126 599 319 599 123 599 194 600 319 600 175 600 304 601 291 601 127 601 127 601 110 601 304 601 109 602 303 602 304 602 304 602 110 602 109 602 109 603 114 603 301 603 301 603 303 603 109 603 319 604 204 604 207 604 207 604 210 604 319 604 123 605 319 605 301 605 301 605 114 605 123 605 194 606 197 606 200 606 200 606 319 606 194 606 126 607 130 607 139 607 139 607 319 607 126 607 288 608 292 608 295 608 295 608 319 608 288 608 233 609 268 609 288 609 288 609 319 609 233 609 223 610 224 610 233 610 233 610 319 610 223 610 215 611 218 611 223 611 223 611 319 611 215 611 175 612 319 612 139 612 139 612 154 612 175 612 358 613 353 613 354 613 330 614 334 614 336 614 334 615 330 615 335 615 355 616 358 616 354 616 354 617 334 617 355 617 355 618 334 618 335 618 352 619 337 619 336 619 336 619 353 619 352 619 336 620 334 620 354 620 354 620 353 620 336 620 346 621 348 621 349 621 349 621 347 621 346 621 342 622 344 622 345 622 345 622 343 622 342 622 340 623 342 623 343 623 343 623 341 623 340 623 338 624 340 624 341 624 341 624 339 624 338 624 345 625 344 625 346 625 346 625 347 625 345 625 350 626 351 626 349 626 349 626 348 626 350 626 351 627 350 627 356 627 356 627 357 627 351 627 338 628 339 628 333 628 333 628 332 628 338 628 322 629 320 629 321 629 321 629 323 629 322 629 329 630 331 630 327 630 327 630 325 630 329 630 324 631 326 631 330 631 330 631 328 631 324 631 365 632 363 632 359 632 359 632 361 632 365 632 360 633 358 633 362 633 362 633 364 633 360 633 368 634 366 634 367 634 367 634 369 634 368 634 329 635 332 635 333 635 333 635 331 635 329 635 321 636 325 636 327 636 327 636 323 636 321 636 320 637 322 637 326 637 326 637 324 637 320 637 328 638 330 638 336 638 336 638 337 638 328 638 356 639 361 639 359 639 359 639 357 639 356 639 363 640 365 640 369 640 369 640 367 640 363 640 364 641 362 641 366 641 366 641 368 641 364 641 352 642 353 642 358 642 358 642 360 642 352 642 328 643 337 643 352 643 352 643 360 643 328 643 324 644 328 644 360 644 360 644 364 644 324 644 320 645 324 645 364 645 364 645 368 645 320 645 320 646 368 646 369 646 369 646 321 646 320 646 321 647 369 647 365 647 365 647 325 647 321 647 325 648 365 648 361 648 361 648 329 648 325 648 370 649 329 649 361 649 356 650 370 650 361 650 370 651 332 651 329 651 350 652 370 652 356 652 348 653 370 653 350 653 346 654 370 654 348 654 344 655 370 655 346 655 342 656 370 656 344 656 340 657 370 657 342 657 338 658 370 658 340 658 332 659 370 659 338 659 330 660 358 660 355 660 355 660 335 660 330 660 326 661 362 661 358 661 358 661 330 661 326 661 322 662 366 662 362 662 362 662 326 662 322 662 322 663 323 663 367 663 367 663 366 663 322 663 323 664 327 664 363 664 363 664 367 664 323 664 327 665 331 665 359 665 359 665 363 665 327 665 371 666 359 666 331 666 333 667 371 667 331 667 371 668 357 668 359 668 351 669 357 669 371 669 349 670 351 670 371 670 347 671 349 671 371 671 345 672 347 672 371 672 343 673 345 673 371 673 341 674 343 674 371 674 339 675 341 675 371 675 333 676 339 676 371 676 383 677 382 677 381 677 375 678 376 678 374 678 397 679 396 679 395 679 389 680 390 680 388 680 386 681 393 681 394 681 394 681 387 681 386 681 387 682 394 682 395 682 395 682 388 682 387 682 388 683 395 683 396 683 396 683 389 683 388 683 389 684 396 684 397 684 397 684 390 684 389 684 390 685 397 685 399 685 399 685 392 685 390 685 391 686 392 686 399 686 399 686 398 686 391 686 386 687 391 687 398 687 398 687 393 687 386 687 388 688 391 688 386 688 386 688 387 688 388 688 392 689 391 689 388 689 388 689 390 689 392 689 394 690 393 690 398 690 398 690 395 690 394 690 395 691 398 691 399 691 399 691 397 691 395 691 372 692 379 692 380 692 380 692 373 692 372 692 372 693 377 693 384 693 384 693 379 693 372 693 376 694 383 694 385 694 385 694 378 694 376 694 375 695 382 695 383 695 383 695 376 695 375 695 374 696 381 696 382 696 382 696 375 696 374 696 373 697 380 697 381 697 381 697 374 697 373 697 372 698 373 698 374 698 374 698 377 698 372 698 378 699 377 699 374 699 374 699 376 699 378 699 380 700 379 700 384 700 384 700 381 700 380 700 381 701 384 701 385 701 385 701 383 701 381 701 377 702 378 702 385 702 385 702 384 702 377 702

-0.64043 0.29019 0.37675 -0.64043 0.29019 0.40475 -0.64043 0.29851 0.37675 -0.64043 0.30169 0.38225 -0.64043 0.30169 0.38725 -0.64043 0.45819 0.37710 -0.64043 0.46169 0.38316 -0.64043 0.46169 0.38775 -0.64043 0.46398 0.37375 -0.64043 0.47919 0.37375 -0.64043 0.47919 0.40475 -0.48043 0.29019 0.37675 -0.48043 0.29019 0.40475 -0.48043 0.29851 0.37675 -0.48043 0.30169 0.38225 -0.48043 0.30169 0.38725 -0.48043 0.45819 0.37710 -0.48043 0.46169 0.38316 -0.48043 0.46169 0.38775 -0.48043 0.46398 0.37375 -0.48043 0.47919 0.37375 -0.48043 0.47919 0.40475 0.05787 0.37719 -0.45725 0.05787 0.37719 -0.41725 0.07787 0.37719 -0.45725 0.07787 0.37719 -0.41725 0.05787 0.31519 -0.45725 0.05787 0.31519 -0.41725 0.07787 0.31519 -0.45725 0.07787 0.31519 -0.41725 0.05787 0.46719 -0.45725 0.05787 0.46719 -0.41725 0.07787 0.46719 -0.45725 0.07787 0.46719 -0.41725 0.05787 0.40519 -0.45725 0.05787 0.40519 -0.41725 0.07787 0.40519 -0.45725 0.07787 0.40519 -0.41725 -0.01043 0.19422 -0.21317 -0.01043 0.19422 -0.21133 -0.01043 0.19450 -0.21498 -0.01043 0.19450 -0.20951 -0.01043 0.19506 -0.21673 -0.01043 0.19506 -0.20776 -0.01043 0.19587 -0.21838 -0.01043 0.19587 -0.20612 -0.01043 0.19693 -0.21988 -0.01043 0.19693 -0.20461 -0.01043 0.19820 -0.22121 -0.01043 0.19820 -0.20329 -0.01043 0.19967 -0.22232 -0.01043 0.19967 -0.20218 -0.01043 0.20128 -0.22320 -0.01043 0.20128 -0.20130 -0.01043 0.20301 -0.22382 -0.01043 0.20301 -0.20068 -0.01043 0.20481 -0.22417 -0.01043 0.20481 -0.20033 -0.01043 0.20665 -0.22424 -0.01043 0.20665 -0.20026 -0.01043 0.20847 -0.22403 -0.01043 0.20847 -0.20047 -0.01043 0.21024 -0.22354 -0.01043 0.21024 -0.20095 -0.01043 0.21192 -0.22279 -0.01043 0.21192 -0.20171 -0.01043 0.21346 -0.22179 -0.01043 0.21346 -0.20270 -0.01043 0.21483 -0.22057 -0.01043 0.21483 -0.20393 -0.01043 0.21600 -0.21915 -0.01043 0.21600 -0.20534 -0.01043 0.21694 -0.21757 -0.01043 0.21694 -0.20692 -0.01043 0.21763 -0.21587 -0.01043 0.21763 -0.20863 -0.01043 0.21805 -0.21408 -0.01043 0.21805 -0.21042 -0.01043 0.21819 -0.21225 -0.01043 0.56422 -0.21317 -0.01043 0.56422 -0.21133 -0.01043 0.56450 -0.21498 -0.01043 0.56450 -0.20951 -0.01043 0.56506 -0.21673 -0.01043 0.56506 -0.20776 -0.01043 0.56587 -0.21838 -0.01043 0.56587 -0.20612 -0.01043 0.56693 -0.21988 -0.01043 0.56693 -0.20461 -0.01043 0.56820 -0.22121 -0.01043 0.56820 -0.20329 -0.01043 0.56967 -0.22232 -0.01043 0.56967 -0.20218 -0.01043 0.57128 -0.22320 -0.01043 0.57128 -0.20130 -0.01043 0.57301 -0.22382 -0.01043 0.57301 -0.20068 -0.01043 0.57481 -0.22417 -0.01043 0.57481 -0.20033 -0.01043 0.57665 -0.22424 -0.01043 0.57665 -0.20026 -0.01043 0.57847 -0.22403 -0.01043 0.57847 -0.20047 -0.01043 0.58024 -0.22354 -0.01043 0.58024 -0.20095 -0.01043 0.58192 -0.22279 -0.01043 0.58192 -0.20171 -0.01043 0.58346 -0.22179 -0.01043 0.58346 -0.20270 -0.01043 0.58483 -0.22057 -0.01043 0.58483 -0.20393 -0.01043 0.58600 -0.21915 -0.01043 0.58600 -0.20534 -0.01043 0.58694 -0.21757 -0.01043 0.58694 -0.20692 -0.01043 0.58763 -0.21587 -0.01043 0.58763 -0.20863 -0.01043 0.58805 -0.21408 -0.01043 0.58805 -0.21042 -0.01043 0.58819 -0.21225 0.07787 0.32119 -0.46225 0.07787 0.32119 -0.41225 0.07787 0.46119 -0.46225 0.07787 0.46119 -0.41225 0.13192 0.30069 -0.46225 0.13192 0.30069 -0.41225 0.13192 0.48169 -0.46225 0.13192 0.48169 -0.41225 0.22794 0.26428 -0.46225 0.22794 0.51810 -0.46225 0.22894 0.26390 -0.41225 0.22894 0.51848 -0.41225 0.26107 0.25172 -0.46225 0.26107 0.25172 -0.41225 0.26107 0.53066 -0.46225 0.26107 0.53066 -0.41225 0.29395 0.23925 -0.46225 0.29395 0.23925 -0.41225 0.29395 0.54313 -0.46225 0.29395 0.54313 -0.41225 0.31844 0.23297 -0.46225 0.31844 0.23297 -0.41225 0.31844 0.54940 -0.46225 0.31844 0.54940 -0.41225 0.32907 0.23025 -0.46225 0.32907 0.23025 -0.41225 0.32907 0.55212 -0.46225 0.32907 0.55212 -0.41225 0.36532 0.22927 -0.46225 0.36532 0.22927 -0.41225 0.36532 0.55311 -0.46225 0.36532 0.55311 -0.41225 0.40088 0.23635 -0.41225 0.40088 0.54603 -0.41225 0.40088 0.23635 -0.46225 0.40088 0.54603 -0.46225 0.44207 0.24947 -0.46225 0.44207 0.24947 -0.41225 0.44207 0.53291 -0.46225 0.44207 0.53291 -0.41225 0.47519 0.26002 -0.46225 0.47519 0.52236 -0.46225 0.47638 0.26040 -0.41225 0.47638 0.52198 -0.41225 0.60290 0.30069 -0.46225 0.60290 0.30069 -0.41225 0.60290 0.48169 -0.46225 0.60290 0.48169 -0.41225 0.63676 0.31147 -0.46225 0.63676 0.31147 -0.41225 0.63676 0.47090 -0.46225 0.63676 0.47090 -0.41225 0.65175 0.31500 -0.46225 0.65175 0.31500 -0.41225 0.65175 0.46737 -0.46225 0.65175 0.46737 -0.41225 0.66711 0.31619 -0.46225 0.66711 0.31619 -0.41225 0.66711 0.46619 -0.46225 0.66711 0.46619 -0.41225 1.03157 0.31619 -0.46225 1.03157 0.31619 -0.41225 1.03157 0.46619 -0.46225 1.03157 0.46619 -0.41225 -0.01043 0.18119 -0.24225 -0.01043 0.18119 -0.18225 -0.01043 0.60119 -0.24225 -0.01043 0.60119 -0.18225 0.02931 0.18119 -0.24225 0.02931 0.18119 -0.18225 0.02931 0.60119 -0.24225 0.02931 0.60119 -0.18225 0.34941 0.38903 -0.18225 0.23373 0.20276 -0.24225 0.23373 0.57961 -0.24225 0.23261 0.20264 -0.18225 0.23398 0.57959 -0.18225 0.26448 0.20601 -0.24225 0.26448 0.20601 -0.18225 0.26448 0.57636 -0.24225 0.26448 0.57636 -0.18225 0.31969 0.21185 -0.24225 0.31969 0.21185 -0.18225 0.31969 0.57053 -0.24225 0.31969 0.57053 -0.18225 0.36996 0.21716 -0.24225 0.36996 0.21716 -0.18225 0.36996 0.56522 -0.24225 0.36996 0.56522 -0.18225 0.38344 0.21977 -0.24225 0.38344 0.21977 -0.18225 0.39954 0.22289 -0.24225 0.39954 0.22289 -0.18225 0.39954 0.55948 -0.24225 0.39954 0.55948 -0.18225 0.42770 0.23362 -0.24225 0.42770 0.23362 -0.18225 0.42770 0.54876 -0.24225 0.42770 0.54876 -0.18225 0.43865 0.24013 -0.24225 0.43865 0.24013 -0.18225 0.45361 0.24902 -0.24225 0.45361 0.24902 -0.18225 0.45361 0.53336 -0.24225 0.45361 0.53336 -0.18225 0.46778 0.26116 -0.18225 0.47649 0.51375 -0.18225 0.46940 0.26256 -0.24225 0.47649 0.51375 -0.24225 0.47684 0.26906 -0.24225 0.48172 0.27498 -0.18225 0.48038 0.27335 -0.24225 0.49566 0.29188 -0.24225 0.49566 0.29188 -0.18225 0.49566 0.49050 -0.24225 0.49566 0.49050 -0.18225 0.51056 0.31807 -0.24225 0.51056 0.31807 -0.18225 0.51056 0.46431 -0.24225 0.51056 0.46431 -0.18225 0.52075 0.34643 -0.24225 0.52075 0.34643 -0.18225 0.52075 0.43594 -0.24225 0.52075 0.43594 -0.18225 0.52592 0.37612 -0.24225 0.52592 0.37612 -0.18225 0.52592 0.40626 -0.24225 0.52592 0.40626 -0.18225 -0.69843 0.32119 0.36775 -0.69843 0.32119 0.38775 -0.69843 0.46119 0.36775 -0.69843 0.46119 0.38775 -0.14843 0.32119 0.36775 -0.14843 0.32119 0.38775 -0.14843 0.46119 0.36775 -0.14843 0.46119 0.38775 0.34483 0.38853 -0.24225 -0.01843 0.56422 -0.21317 -0.01843 0.56422 -0.21133 -0.01843 0.56450 -0.21498 -0.01843 0.56450 -0.20951 -0.01843 0.56506 -0.21673 -0.01843 0.56506 -0.20776 -0.01843 0.56587 -0.21838 -0.01843 0.56587 -0.20612 -0.01843 0.56693 -0.21988 -0.01843 0.56693 -0.20461 -0.01843 0.56820 -0.22121 -0.01843 0.56820 -0.20329 -0.01843 0.56967 -0.22232 -0.01843 0.56967 -0.20218 -0.01843 0.57128 -0.22320 -0.01843 0.57128 -0.20130 -0.01843 0.57301 -0.22382 -0.01843 0.57301 -0.20068 -0.01843 0.57481 -0.22417 -0.01843 0.57481 -0.20033 -0.01843 0.57665 -0.22424 -0.01843 0.57665 -0.20026 -0.01843 0.57847 -0.22403 -0.01843 0.57847 -0.20047 -0.01843 0.58024 -0.22354 -0.01843 0.58024 -0.20095 -0.01843 0.58192 -0.22279 -0.01843 0.58192 -0.20171 -0.01843 0.58346 -0.22179 -0.01843 0.58346 -0.20270 -0.01843 0.58483 -0.22057 -0.01843 0.58483 -0.20393 -0.01843 0.58600 -0.21915 -0.01843 0.58600 -0.20534 -0.01843 0.58694 -0.21757 -0.01843 0.58694 -0.20692 -0.01843 0.58763 -0.21587 -0.01843 0.58763 -0.20863 -0.01843 0.58805 -0.21408 -0.01843 0.58805 -0.21042 -0.01843 0.58819 -0.21225 -0.01043 0.20128 -0.20130 -0.01043 0.19422 -0.21317 -0.01043 0.19422 -0.21133 -0.01043 0.19450 -0.21498 -0.01043 0.19450 -0.20951 -0.01043 0.19506 -0.21673 -0.01043 0.19506 -0.20776 -0.01043 0.19587 -0.21838 -0.01043 0.19587 -0.20612 -0.01043 0.19693 -0.21988 -0.01043 0.19693 -0.20461 -0.01043 0.19820 -0.22121 -0.01043 0.19820 -0.20329 -0.01043 0.19967 -0.22232 -0.01043 0.19967 -0.20218 -0.01043 0.20128 -0.22320 -0.01043 0.20128 -0.20130 -0.01043 0.20301 -0.22382 -0.01043 0.20301 -0.20068 -0.01043 0.20481 -0.22417 -0.01043 0.20481 -0.20033 -0.01043 0.20665 -0.22424 -0.01043 0.20665 -0.20026 -0.01043 0.20847 -0.22403 -0.01043 0.20847 -0.20047 -0.01043 0.21024 -0.22354 -0.01043 0.21024 -0.20095 -0.01043 0.21192 -0.22279 -0.01043 0.21192 -0.20171 -0.01043 0.21346 -0.22179 -0.01043 0.21346 -0.20270 -0.01043 0.21483 -0.22057 -0.01043 0.21483 -0.20393 -0.01043 0.21600 -0.21915 -0.01043 0.21600 -0.20534 -0.01043 0.21694 -0.21757 -0.01043 0.21694 -0.20692 -0.01043 0.21763 -0.21587 -0.01043 0.21763 -0.20863 -0.01043 0.21805 -0.21408 -0.01043 0.21805 -0.21042 -0.01043 0.21819 -0.21225 -0.01043 0.20128 -0.20130 -0.01843 0.19422 -0.21317 -0.01843 0.19422 -0.21133 -0.01843 0.19450 -0.21498 -0.01843 0.19450 -0.20951 -0.01843 0.19506 -0.21673 -0.01843 0.19506 -0.20776 -0.01843 0.19587 -0.21838 -0.01843 0.19587 -0.20612 -0.01843 0.19693 -0.21988 -0.01843 0.19693 -0.20461 -0.01843 0.19820 -0.22121 -0.01843 0.19820 -0.20329 -0.01843 0.19967 -0.22232 -0.01843 0.19967 -0.20218 -0.01843 0.20128 -0.22320 -0.01843 0.20128 -0.20130 -0.01843 0.20301 -0.22382 -0.01843 0.20301 -0.20068 -0.01843 0.20481 -0.22417 -0.01843 0.20481 -0.20033 -0.01843 0.20665 -0.22424 -0.01843 0.20665 -0.20026 -0.01843 0.20847 -0.22403 -0.01843 0.20847 -0.20047 -0.01843 0.21024 -0.22354 -0.01843 0.21024 -0.20095 -0.01843 0.21192 -0.22279 -0.01843 0.21192 -0.20171 -0.01843 0.21346 -0.22179 -0.01843 0.21346 -0.20270 -0.01843 0.21483 -0.22057 -0.01843 0.21483 -0.20393 -0.01843 0.21600 -0.21915 -0.01843 0.21600 -0.20534 -0.01843 0.21694 -0.21757 -0.01843 0.21694 -0.20692 -0.01843 0.21763 -0.21587 -0.01843 0.21763 -0.20863 -0.01843 0.21805 -0.21408 -0.01843 0.21805 -0.21042 -0.01843 0.21819 -0.21225 -0.01843 0.20128 -0.20130 -0.01843 0.58819 -0.21225 -0.01843 0.58805 -0.21042 -0.01843 0.58805 -0.21408 -0.01843 0.58763 -0.20863 -0.01843 0.58763 -0.21587 -0.01843 0.58694 -0.20692 -0.01843 0.58694 -0.21757 -0.01843 0.58600 -0.20534 -0.01843 0.58600 -0.21915 -0.01843 0.58483 -0.20393 -0.01843 0.58483 -0.22057 -0.01843 0.58346 -0.20270 -0.01843 0.58346 -0.22179 -0.01843 0.58192 -0.20171 -0.01843 0.58192 -0.22279 -0.01843 0.58024 -0.20095 -0.01843 0.58024 -0.22354 -0.01843 0.57847 -0.20047 -0.01843 0.57847 -0.22403 -0.01843 0.57665 -0.20026 -0.01843 0.57665 -0.22424 -0.01843 0.57481 -0.20033 -0.01843 0.57481 -0.22417 -0.01843 0.57301 -0.20068 -0.01843 0.57301 -0.22382 -0.01843 0.57128 -0.20130 -0.01843 0.57128 -0.22320 -0.01843 0.56967 -0.20218 -0.01843 0.56967 -0.22232 -0.01843 0.56820 -0.20329 -0.01843 0.56820 -0.22121 -0.01843 0.56693 -0.20461 -0.01843 0.56693 -0.21988 -0.01843 0.56587 -0.20612 -0.01843 0.56587 -0.21838 -0.01843 0.56506 -0.20776 -0.01843 0.56506 -0.21673 -0.01843 0.56450 -0.20951 -0.01843 0.56450 -0.21498 -0.01843 0.56422 -0.21133 -0.01843 0.56422 -0.21317 -0.01043 0.58819 -0.21225 -0.01043 0.58805 -0.21042 -0.01043 0.58805 -0.21408 -0.01043 0.58763 -0.20863 -0.01043 0.58763 -0.21587 -0.01043 0.58694 -0.20692 -0.01043 0.58694 -0.21757 -0.01043 0.58600 -0.20534 -0.01043 0.58600 -0.21915 -0.01043 0.58483 -0.20393 -0.01043 0.58483 -0.22057 -0.01043 0.58346 -0.20270 -0.01043 0.58346 -0.22179 -0.01043 0.58192 -0.20171 -0.01043 0.58192 -0.22279 -0.01043 0.58024 -0.20095 -0.01043 0.58024 -0.22354 -0.01043 0.57847 -0.20047 -0.01043 0.57847 -0.22403 -0.01043 0.57665 -0.20026 -0.01043 0.57665 -0.22424 -0.01043 0.57481 -0.20033 -0.01043 0.57481 -0.22417 -0.01043 0.57301 -0.20068 -0.01043 0.57301 -0.22382 -0.01043 0.57128 -0.20130 -0.01043 0.57128 -0.22320 -0.01043 0.56967 -0.20218 -0.01043 0.56967 -0.22232 -0.01043 0.56820 -0.20329 -0.01043 0.56820 -0.22121 -0.01043 0.56693 -0.20461 -0.01043 0.56693 -0.21988 -0.01043 0.56587 -0.20612 -0.01043 0.56587 -0.21838 -0.01043 0.56506 -0.20776 -0.01043 0.56506 -0.21673 -0.01043 0.56450 -0.20951 -0.01043 0.56450 -0.21498 -0.01043 0.56422 -0.21133 -0.01043 0.56422 -0.21317 -0.01043 0.58600 -0.20534 -0.01843 0.56422 -0.21317 -0.01843 0.56422 -0.21133 -0.01843 0.56450 -0.21498 -0.01843 0.56450 -0.20951 -0.01843 0.56506 -0.21673 -0.01843 0.56506 -0.20776 -0.01843 0.56587 -0.21838 -0.01843 0.56587 -0.20612 -0.01843 0.56693 -0.21988 -0.01843 0.56693 -0.20461 -0.01843 0.56820 -0.22121 -0.01843 0.56820 -0.20329 -0.01843 0.56967 -0.22232 -0.01843 0.56967 -0.20218 -0.01843 0.57128 -0.22320 -0.01843 0.57128 -0.20130 -0.01843 0.57301 -0.22382 -0.01843 0.57301 -0.20068 -0.01843 0.57481 -0.22417 -0.01843 0.57481 -0.20033 -0.01843 0.57665 -0.22424 -0.01843 0.57665 -0.20026 -0.01843 0.57847 -0.22403 -0.01843 0.57847 -0.20047 -0.01843 0.58024 -0.22354 -0.01843 0.58024 -0.20095 -0.01843 0.58192 -0.22279 -0.01843 0.58192 -0.20171 -0.01843 0.58346 -0.22179 -0.01843 0.58346 -0.20270 -0.01843 0.58483 -0.22057 -0.01843 0.58483 -0.20393 -0.01843 0.58600 -0.21915 -0.01843 0.58600 -0.20534 -0.01843 0.58694 -0.21757 -0.01843 0.58694 -0.20692 -0.01843 0.58763 -0.21587 -0.01843 0.58763 -0.20863 -0.01843 0.58805 -0.21408 -0.01843 0.58805 -0.21042 -0.01843 0.58819 -0.21225 -0.01843 0.58819 -0.21225 -0.01843 0.58805 -0.21042 -0.01843 0.58805 -0.21408 -0.01843 0.58763 -0.20863 -0.01843 0.58763 -0.21587 -0.01843 0.58694 -0.20692 -0.01843 0.58694 -0.21757 -0.01843 0.58600 -0.20534 -0.01843 0.58600 -0.21915 -0.01843 0.58483 -0.20393 -0.01843 0.58483 -0.22057 -0.01843 0.58346 -0.20270 -0.01843 0.58346 -0.22179 -0.01843 0.58192 -0.20171 -0.01843 0.58192 -0.22279 -0.01843 0.58024 -0.20095 -0.01843 0.58024 -0.22354 -0.01843 0.57847 -0.20047 -0.01843 0.57847 -0.22403 -0.01843 0.57665 -0.20026 -0.01843 0.57665 -0.22424 -0.01843 0.57481 -0.20033 -0.01843 0.57481 -0.22417 -0.01843 0.57301 -0.20068 -0.01843 0.57301 -0.22382 -0.01843 0.57128 -0.20130 -0.01843 0.57128 -0.22320 -0.01843 0.56967 -0.20218 -0.01843 0.56967 -0.22232 -0.01843 0.56820 -0.20329 -0.01843 0.56820 -0.22121 -0.01843 0.56693 -0.20461 -0.01843 0.56693 -0.21988 -0.01843 0.56587 -0.20612 -0.01843 0.56587 -0.21838 -0.01843 0.56506 -0.20776 -0.01843 0.56506 -0.21673 -0.01843 0.56450 -0.20951 -0.01843 0.56450 -0.21498 -0.01843 0.56422 -0.21133 -0.01843 0.56422 -0.21317 -0.01043 0.58600 -0.20534 -0.01843 0.56422 -0.21317 -0.01843 0.56422 -0.21133 -0.01843 0.56450 -0.21498 -0.01843 0.56450 -0.20951 -0.01843 0.56506 -0.21673 -0.01843 0.56506 -0.20776 -0.01843 0.56587 -0.21838 -0.01843 0.56587 -0.20612 -0.01843 0.56693 -0.21988 -0.01843 0.56693 -0.20461 -0.01843 0.56820 -0.22121 -0.01843 0.56820 -0.20329 -0.01843 0.56967 -0.22232 -0.01843 0.56967 -0.20218 -0.01843 0.57128 -0.22320 -0.01843 0.57128 -0.20130 -0.01843 0.57301 -0.22382 -0.01843 0.57301 -0.20068 -0.01843 0.57481 -0.22417 -0.01843 0.57481 -0.20033 -0.01843 0.57665 -0.22424 -0.01843 0.57665 -0.20026 -0.01843 0.57847 -0.22403 -0.01843 0.57847 -0.20047 -0.01843 0.58024 -0.22354 -0.01843 0.58024 -0.20095 -0.01843 0.58192 -0.22279 -0.01843 0.58192 -0.20171 -0.01843 0.58346 -0.22179 -0.01843 0.58346 -0.20270 -0.01843 0.58483 -0.22057 -0.01843 0.58483 -0.20393 -0.01843 0.58600 -0.21915 -0.01843 0.58600 -0.20534 -0.01843 0.58694 -0.21757 -0.01843 0.58694 -0.20692 -0.01843 0.58763 -0.21587 -0.01843 0.58763 -0.20863 -0.01843 0.58805 -0.21408 -0.01843 0.58805 -0.21042 -0.01843 0.58819 -0.21225 -0.01843 0.58819 -0.21225 -0.01843 0.58805 -0.21042 -0.01843 0.58805 -0.21408 -0.01843 0.58763 -0.20863 -0.01843 0.58763 -0.21587 -0.01843 0.58694 -0.20692 -0.01843 0.58694 -0.21757 -0.01843 0.58600 -0.20534 -0.01843 0.58600 -0.21915 -0.01843 0.58483 -0.20393 -0.01843 0.58483 -0.22057 -0.01843 0.58346 -0.20270 -0.01843 0.58346 -0.22179 -0.01843 0.58192 -0.20171 -0.01843 0.58192 -0.22279 -0.01843 0.58024 -0.20095 -0.01843 0.58024 -0.22354 -0.01843 0.57847 -0.20047 -0.01843 0.57847 -0.22403 -0.01843 0.57665 -0.20026 -0.01843 0.57665 -0.22424 -0.01843 0.57481 -0.20033 -0.01843 0.57481 -0.22417 -0.01843 0.57301 -0.20068 -0.01843 0.57301 -0.22382 -0.01843 0.57128 -0.20130 -0.01843 0.57128 -0.22320 -0.01843 0.56967 -0.20218 -0.01843 0.56967 -0.22232 -0.01843 0.56820 -0.20329 -0.01843 0.56820 -0.22121 -0.01843 0.56693 -0.20461 -0.01843 0.56693 -0.21988 -0.01843 0.56587 -0.20612 -0.01843 0.56587 -0.21838 -0.01843 0.56506 -0.20776 -0.01843 0.56506 -0.21673 -0.01843 0.56450 -0.20951 -0.01843 0.56450 -0.21498 -0.01843 0.56422 -0.21133 -0.01843 0.56422 -0.21317 -0.01843 0.56422 -0.21317 -0.01843 0.56422 -0.21133 -0.01843 0.56450 -0.21498 -0.01843 0.56450 -0.20951 -0.01843 0.56506 -0.21673 -0.01843 0.56506 -0.20776 -0.01843 0.56587 -0.21838 -0.01843 0.56587 -0.20612 -0.01843 0.56693 -0.21988 -0.01843 0.56693 -0.20461 -0.01843 0.56820 -0.22121 -0.01843 0.56820 -0.20329 -0.01843 0.56967 -0.22232 -0.01843 0.56967 -0.20218 -0.01843 0.57128 -0.22320 -0.01843 0.57128 -0.20130 -0.01843 0.57301 -0.22382 -0.01843 0.57301 -0.20068 -0.01843 0.57481 -0.22417 -0.01843 0.57481 -0.20033 -0.01843 0.57665 -0.22424 -0.01843 0.57665 -0.20026 -0.01843 0.57847 -0.22403 -0.01843 0.57847 -0.20047 -0.01843 0.58024 -0.22354 -0.01843 0.58024 -0.20095 -0.01843 0.58192 -0.22279 -0.01843 0.58192 -0.20171 -0.01843 0.58346 -0.22179 -0.01843 0.58346 -0.20270 -0.01843 0.58483 -0.22057 -0.01843 0.58483 -0.20393 -0.01843 0.58600 -0.21915 -0.01843 0.58600 -0.20534 -0.01843 0.58694 -0.21757 -0.01843 0.58694 -0.20692 -0.01843 0.58763 -0.21587 -0.01843 0.58763 -0.20863 -0.01843 0.58805 -0.21408 -0.01843 0.58805 -0.21042 -0.01843 0.58819 -0.21225 -0.01843 0.58819 -0.21225 -0.01843 0.58805 -0.21042 -0.01843 0.58805 -0.21408 -0.01843 0.58763 -0.20863 -0.01843 0.58763 -0.21587 -0.01843 0.58694 -0.20692 -0.01843 0.58694 -0.21757 -0.01843 0.58600 -0.20534 -0.01843 0.58600 -0.21915 -0.01843 0.58483 -0.20393 -0.01843 0.58483 -0.22057 -0.01843 0.58346 -0.20270 -0.01843 0.58346 -0.22179 -0.01843 0.58192 -0.20171 -0.01843 0.58192 -0.22279 -0.01843 0.58024 -0.20095 -0.01843 0.58024 -0.22354 -0.01843 0.57847 -0.20047 -0.01843 0.57847 -0.22403 -0.01843 0.57665 -0.20026 -0.01843 0.57665 -0.22424 -0.01843 0.57481 -0.20033 -0.01843 0.57481 -0.22417 -0.01843 0.57301 -0.20068 -0.01843 0.57301 -0.22382 -0.01843 0.57128 -0.20130 -0.01843 0.57128 -0.22320 -0.01843 0.56967 -0.20218 -0.01843 0.56967 -0.22232 -0.01843 0.56820 -0.20329 -0.01843 0.56820 -0.22121 -0.01843 0.56693 -0.20461 -0.01843 0.56693 -0.21988 -0.01843 0.56587 -0.20612 -0.01843 0.56587 -0.21838 -0.01843 0.56506 -0.20776 -0.01843 0.56506 -0.21673 -0.01843 0.56450 -0.20951 -0.01843 0.56450 -0.21498 -0.01843 0.56422 -0.21133 -0.01843 0.56422 -0.21317 -0.01843 0.56422 -0.21317 -0.01843 0.56422 -0.21133 -0.01843 0.56450 -0.21498 -0.01843 0.56450 -0.20951 -0.01843 0.56506 -0.21673 -0.01843 0.56506 -0.20776 -0.01843 0.56587 -0.21838 -0.01843 0.56587 -0.20612 -0.01843 0.56693 -0.21988 -0.01843 0.56693 -0.20461 -0.01843 0.56820 -0.22121 -0.01843 0.56820 -0.20329 -0.01843 0.56967 -0.22232 -0.01843 0.56967 -0.20218 -0.01843 0.57128 -0.22320 -0.01843 0.57128 -0.20130 -0.01843 0.57301 -0.22382 -0.01843 0.57301 -0.20068 -0.01843 0.57481 -0.22417 -0.01843 0.57481 -0.20033 -0.01843 0.57665 -0.22424 -0.01843 0.57665 -0.20026 -0.01843 0.57847 -0.22403 -0.01843 0.57847 -0.20047 -0.01843 0.58024 -0.22354 -0.01843 0.58024 -0.20095 -0.01843 0.58192 -0.22279 -0.01843 0.58192 -0.20171 -0.01843 0.58346 -0.22179 -0.01843 0.58346 -0.20270 -0.01843 0.58483 -0.22057 -0.01843 0.58483 -0.20393 -0.01843 0.58600 -0.21915 -0.01843 0.58600 -0.20534 -0.01843 0.58694 -0.21757 -0.01843 0.58694 -0.20692 -0.01843 0.58763 -0.21587 -0.01843 0.58763 -0.20863 -0.01843 0.58805 -0.21408 -0.01843 0.58805 -0.21042 -0.01843 0.58819 -0.21225 -0.01843 0.58819 -0.21225 -0.01843 0.58805 -0.21042 -0.01843 0.58805 -0.21408 -0.01843 0.58763 -0.20863 -0.01843 0.58763 -0.21587 -0.01843 0.58694 -0.20692 -0.01843 0.58694 -0.21757 -0.01843 0.58600 -0.20534 -0.01843 0.58600 -0.21915 -0.01843 0.58483 -0.20393 -0.01843 0.58483 -0.22057 -0.01843 0.58346 -0.20270 -0.01843 0.58346 -0.22179 -0.01843 0.58192 -0.20171 -0.01843 0.58192 -0.22279 -0.01843 0.58024 -0.20095 -0.01843 0.58024 -0.22354 -0.01843 0.57847 -0.20047 -0.01843 0.57847 -0.22403 -0.01843 0.57665 -0.20026 -0.01843 0.57665 -0.22424 -0.01843 0.57481 -0.20033 -0.01843 0.57481 -0.22417 -0.01843 0.57301 -0.20068 -0.01843 0.57301 -0.22382 -0.01843 0.57128 -0.20130 -0.01843 0.57128 -0.22320 -0.01843 0.56967 -0.20218 -0.01843 0.56967 -0.22232 -0.01843 0.56820 -0.20329 -0.01843 0.56820 -0.22121 -0.01843 0.56693 -0.20461 -0.01843 0.56693 -0.21988 -0.01843 0.56587 -0.20612 -0.01843 0.56587 -0.21838 -0.01843 0.56506 -0.20776 -0.01843 0.56506 -0.21673 -0.01843 0.56450 -0.20951 -0.01843 0.56450 -0.21498 -0.01843 0.56422 -0.21133 -0.01843 0.56422 -0.21317 -0.01843 0.56422 -0.21317 -0.01843 0.56422 -0.21133 -0.01843 0.56450 -0.21498 -0.01843 0.56450 -0.20951 -0.01843 0.56506 -0.21673 -0.01843 0.56506 -0.20776 -0.01843 0.56587 -0.21838 -0.01843 0.56587 -0.20612 -0.01843 0.56693 -0.21988 -0.01843 0.56693 -0.20461 -0.01843 0.56820 -0.22121 -0.01843 0.56820 -0.20329 -0.01843 0.56967 -0.22232 -0.01843 0.56967 -0.20218 -0.01843 0.57128 -0.22320 -0.01843 0.57128 -0.20130 -0.01843 0.57301 -0.22382 -0.01843 0.57301 -0.20068 -0.01843 0.57481 -0.22417 -0.01843 0.57481 -0.20033 -0.01843 0.57665 -0.22424 -0.01843 0.57665 -0.20026 -0.01843 0.57847 -0.22403 -0.01843 0.57847 -0.20047 -0.01843 0.58024 -0.22354 -0.01843 0.58024 -0.20095 -0.01843 0.58192 -0.22279 -0.01843 0.58192 -0.20171 -0.01843 0.58346 -0.22179 -0.01843 0.58346 -0.20270 -0.01843 0.58483 -0.22057 -0.01843 0.58483 -0.20393 -0.01843 0.58600 -0.21915 -0.01843 0.58600 -0.20534 -0.01843 0.58694 -0.21757 -0.01843 0.58694 -0.20692 -0.01843 0.58763 -0.21587 -0.01843 0.58763 -0.20863 -0.01843 0.58805 -0.21408 -0.01843 0.58805 -0.21042 -0.01843 0.58819 -0.21225 -0.01843 0.58819 -0.21225 -0.01843 0.58805 -0.21042 -0.01843 0.58805 -0.21408 -0.01843 0.58763 -0.20863 -0.01843 0.58763 -0.21587 -0.01843 0.58694 -0.20692 -0.01843 0.58694 -0.21757 -0.01843 0.58600 -0.20534 -0.01843 0.58600 -0.21915 -0.01843 0.58483 -0.20393 -0.01843 0.58483 -0.22057 -0.01843 0.58346 -0.20270 -0.01843 0.58346 -0.22179 -0.01843 0.58192 -0.20171 -0.01843 0.58192 -0.22279 -0.01843 0.58024 -0.20095 -0.01843 0.58024 -0.22354 -0.01843 0.57847 -0.20047 -0.01843 0.57847 -0.22403 -0.01843 0.57665 -0.20026 -0.01843 0.57665 -0.22424 -0.01843 0.57481 -0.20033 -0.01843 0.57481 -0.22417 -0.01843 0.57301 -0.20068 -0.01843 0.57301 -0.22382 -0.01843 0.57128 -0.20130 -0.01843 0.57128 -0.22320 -0.01843 0.56967 -0.20218 -0.01843 0.56967 -0.22232 -0.01843 0.56820 -0.20329 -0.01843 0.56820 -0.22121 -0.01843 0.56693 -0.20461 -0.01843 0.56693 -0.21988 -0.01843 0.56587 -0.20612 -0.01843 0.56587 -0.21838 -0.01843 0.56506 -0.20776 -0.01843 0.56506 -0.21673 -0.01843 0.56450 -0.20951 -0.01843 0.56450 -0.21498 -0.01843 0.56422 -0.21133 -0.01843 0.56422 -0.21317 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.57619 -0.21225 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 -0.01843 0.20607 -0.21199 0.78157 0.07119 -0.55984 0.78157 0.07119 -0.41725 0.78157 0.07402 -0.56388 0.78157 0.29163 -0.60225 0.78157 0.31569 -0.46225 0.78157 0.31569 -0.41725 0.78157 0.46669 -0.46225 0.78157 0.46669 -0.41725 0.78157 0.49075 -0.60225 0.78157 0.70770 -0.56400 0.78157 0.71119 -0.56050 0.78157 0.71119 -0.41725 0.78657 0.06619 -0.56141 0.78657 0.06619 -0.41725 0.78657 0.07111 -0.56844 0.78657 0.07326 -0.41225 0.78657 0.29119 -0.60725 0.78657 0.31569 -0.41225 0.78657 0.46669 -0.41225 0.78657 0.49119 -0.60725 0.78657 0.70912 -0.41225 0.78657 0.71012 -0.56865 0.78657 0.71619 -0.56257 0.78657 0.71619 -0.41725 0.78864 0.07119 -0.41225 0.78864 0.71119 -0.41225 0.85950 0.07119 -0.41225 0.85950 0.71119 -0.41225 0.86157 0.06619 -0.56141 0.86157 0.06619 -0.41725 0.86157 0.07111 -0.56844 0.86157 0.07326 -0.41225 0.86157 0.29119 -0.60725 0.86157 0.31569 -0.41225 0.86157 0.46669 -0.41225 0.86157 0.49119 -0.60725 0.86157 0.70912 -0.41225 0.86157 0.71012 -0.56865 0.86157 0.71619 -0.56257 0.86157 0.71619 -0.41725 0.86657 0.07119 -0.55984 0.86657 0.07119 -0.41725 0.86657 0.07402 -0.56388 0.86657 0.29163 -0.60225 0.86657 0.31569 -0.46225 0.86657 0.31569 -0.41725 0.86657 0.46669 -0.46225 0.86657 0.46669 -0.41725 0.86657 0.49075 -0.60225 0.86657 0.70770 -0.56400 0.86657 0.71119 -0.56050 0.86657 0.71119 -0.41725 0.86657 0.12119 -0.53659 0.86657 0.12119 -0.41725 0.86657 0.12389 -0.54017 0.86657 0.31654 -0.56725 0.86657 0.46584 -0.56725 0.86657 0.65802 -0.54024 0.86657 0.66119 -0.53707 0.86657 0.66119 -0.41725 0.87157 0.11619 -0.53827 0.87157 0.11619 -0.41725 0.87157 0.12114 -0.54484 0.87157 0.12326 -0.41225 0.87157 0.31569 -0.41225 0.87157 0.31619 -0.57225 0.87157 0.46619 -0.57225 0.87157 0.46669 -0.41225 0.87157 0.65912 -0.41225 0.87157 0.66037 -0.54496 0.87157 0.66619 -0.53914 0.87157 0.66619 -0.41725 0.87364 0.12119 -0.41225 0.87364 0.66119 -0.41225 0.94450 0.12119 -0.41225 0.94450 0.66119 -0.41225 0.94657 0.11619 -0.53827 0.94657 0.11619 -0.41725 0.94657 0.12114 -0.54484 0.94657 0.12326 -0.41225 0.94657 0.31569 -0.41225 0.94657 0.31619 -0.57225 0.94657 0.46619 -0.57225 0.94657 0.46669 -0.41225 0.94657 0.65912 -0.41225 0.94657 0.66037 -0.54496 0.94657 0.66619 -0.53914 0.94657 0.66619 -0.41725 0.95157 0.12119 -0.53659 0.95157 0.12119 -0.41725 0.95157 0.12389 -0.54017 0.95157 0.31569 -0.46225 0.95157 0.31569 -0.41725 0.95157 0.31654 -0.56725 0.95157 0.46584 -0.56725 0.95157 0.46669 -0.46225 0.95157 0.46669 -0.41725 0.95157 0.65802 -0.54024 0.95157 0.66119 -0.53707 0.95157 0.66119 -0.41725 0.68157 0.07119 -0.59424 0.68157 0.07119 -0.41725 0.68157 0.07402 -0.59829 0.68157 0.51575 -0.63225 0.68157 0.26663 -0.63225 0.68157 0.31569 -0.46225 0.68157 0.31569 -0.41725 0.68157 0.46669 -0.46225 0.68157 0.46669 -0.41725 0.68157 0.70770 -0.59840 0.68157 0.71119 -0.59491 0.68157 0.71119 -0.41725 0.68657 0.06619 -0.59582 0.68657 0.06619 -0.41725 0.68657 0.07111 -0.60285 0.68657 0.07326 -0.41225 0.68657 0.26619 -0.63725 0.68657 0.51619 -0.63725 0.68657 0.46669 -0.41225 0.68657 0.70912 -0.41225 0.68657 0.71012 -0.60305 0.68657 0.71619 -0.59698 0.68657 0.71619 -0.41725 0.68864 0.07119 -0.41225 0.68864 0.71119 -0.41225 0.77450 0.07119 -0.41225 0.77450 0.71119 -0.41225 0.77657 0.06619 -0.59582 0.77657 0.06619 -0.41725 0.77657 0.07111 -0.60285 0.77657 0.07326 -0.41225 0.77657 0.26619 -0.63725 0.77657 0.31569 -0.41225 0.77657 0.46669 -0.41225 0.77657 0.51619 -0.63725 0.77657 0.70912 -0.41225 0.77657 0.71012 -0.60305 0.77657 0.71619 -0.59698 0.77657 0.71619 -0.41725 0.78157 0.07119 -0.59424 0.78157 0.07402 -0.59829 0.78157 0.26663 -0.63225 0.78157 0.51575 -0.63225 0.78157 0.70770 -0.59840 0.78157 0.71119 -0.59491 0.95157 0.17119 -0.50935 0.95157 0.17119 -0.41225 0.95157 0.24119 -0.47325 0.95157 0.31569 -0.41225 0.95157 0.34145 -0.52725 0.95157 0.44093 -0.52725 0.95157 0.46669 -0.41225 0.95157 0.54119 -0.47325 0.95157 0.61119 -0.50935 0.95157 0.61119 -0.41225 0.95657 0.16619 -0.50886 0.95657 0.16619 -0.41225 0.95657 0.17178 -0.51444 0.95657 0.34119 -0.53225 0.95657 0.44119 -0.53225 0.95657 0.61122 -0.51438 0.95657 0.61619 -0.50824 0.95657 0.61619 -0.41225 1.02657 0.34119 -0.53225 1.02657 0.44119 -0.53225 1.02657 0.16619 -0.50886 1.02657 0.16619 -0.41225 1.02657 0.17178 -0.51444 1.02657 0.61122 -0.51438 1.02657 0.61619 -0.50824 1.02657 0.61619 -0.41225 1.03157 0.17119 -0.50935 1.03157 0.17119 -0.41225 1.03157 0.31569 -0.46225 1.03157 0.31569 -0.41225 1.03157 0.34145 -0.52725 1.03157 0.44093 -0.52725 1.03157 0.46669 -0.46225 1.03157 0.46669 -0.41225 1.03157 0.61119 -0.41225 1.03157 0.61119 -0.50935 -0.69843 0.32119 0.35975 -0.69843 0.32119 0.36775 -0.69843 0.46119 0.35975 -0.69843 0.46119 0.36775 -0.69656 0.33119 0.15175 -0.69656 0.33119 0.35975 -0.69656 0.45119 0.15175 -0.69656 0.45119 0.35975 -0.69615 0.33119 0.14865 -0.69615 0.45119 0.14865 -0.69495 0.33119 0.14575 -0.69495 0.45119 0.14575 -0.69305 0.33119 0.14327 -0.69305 0.45119 0.14327 -0.69056 0.33119 0.14136 -0.69056 0.45119 0.14136 -0.68856 0.33119 0.15175 -0.68856 0.33119 0.35975 -0.68856 0.45119 0.15175 -0.68843 0.33119 0.15072 -0.68843 0.45119 0.15072 -0.68767 0.33119 0.14016 -0.68767 0.45119 0.14016 -0.68739 0.33119 0.14892 -0.68739 0.45119 0.14892 -0.68560 0.33119 0.14789 -0.68560 0.45119 0.14789 -0.68456 0.33119 0.13975 -0.68456 0.33119 0.14775 -0.68456 0.45119 0.13975 -0.68456 0.45119 0.14775 -0.59643 0.45919 0.34849 -0.59643 0.32319 0.34847 -0.59642 0.32319 0.35176 -0.59642 0.45919 0.35177 -0.59601 0.32319 0.34695 -0.59601 0.45919 0.34695 -0.59593 0.32319 0.35350 -0.59593 0.45919 0.35351 -0.59526 0.32319 0.35463 -0.59526 0.45919 0.35463 -0.59441 0.32319 0.35545 -0.59440 0.45919 0.35545 -0.59408 0.45919 0.33992 -0.59405 0.32319 0.33986 -0.59326 0.32319 0.35608 -0.59325 0.45919 0.35608 -0.59150 0.32319 0.35649 -0.59149 0.45919 0.35650 -0.59013 0.32319 0.33228 -0.59013 0.45919 0.33228 -0.58822 0.32319 0.35638 -0.58820 0.45919 0.35638 -0.58671 0.45919 0.35590 -0.58671 0.32319 0.35590 -0.58480 0.45919 0.32195 -0.58474 0.32319 0.32186 -0.57975 0.32319 0.35369 -0.57969 0.45919 0.35367 -0.57867 0.32319 0.31295 -0.57866 0.45919 0.31294 -0.57228 0.45919 0.34945 -0.57227 0.32319 0.34945 -0.56925 0.45919 0.29911 -0.56917 0.32319 0.29901 -0.56224 0.33119 0.14775 -0.56224 0.44244 0.14775 -0.56216 0.32319 0.34371 -0.56208 0.45919 0.34365 -0.56173 0.32319 0.28964 -0.56173 0.45919 0.28964 -0.55747 0.33119 0.13975 -0.55747 0.44244 0.13975 -0.55341 0.45919 0.33723 -0.55340 0.32319 0.33723 -0.54856 0.45919 0.27306 -0.54847 0.32319 0.27294 -0.54047 0.32319 0.26394 -0.54047 0.45919 0.26394 -0.53995 0.32319 0.32728 -0.53985 0.45919 0.32720 -0.53623 0.32319 0.25917 -0.53623 0.32319 0.32408 -0.53078 0.45919 0.31940 -0.53078 0.32319 0.31939 -0.52424 0.45919 0.24567 -0.52414 0.32319 0.24556 -0.51634 0.32319 0.23760 -0.51634 0.45919 0.23760 -0.51473 0.32319 0.30559 -0.51462 0.45919 0.30549 -0.51390 0.32319 0.23512 -0.51390 0.45919 0.23512 -0.50594 0.45919 0.29715 -0.50594 0.32319 0.29714 -0.49805 0.45919 0.21895 -0.49794 0.32319 0.21884 -0.49096 0.45919 0.21241 -0.49096 0.32319 0.21241 -0.48832 0.32319 0.28021 -0.48821 0.45919 0.28010 -0.48057 0.32319 0.27199 -0.48057 0.45919 0.27199 -0.47189 0.45919 0.19482 -0.47178 0.32319 0.19473 -0.46606 0.45919 0.19007 -0.46606 0.32319 0.19007 -0.46265 0.32319 0.25299 -0.46254 0.45919 0.25287 -0.45639 0.32319 0.24565 -0.45639 0.45919 0.24565 -0.44843 0.32319 0.17570 -0.44843 0.32319 0.23630 -0.44843 0.45919 0.17569 -0.44843 0.45919 0.23630 -0.44743 0.45919 0.23512 -0.44742 0.32319 0.23512 -0.44334 0.45919 0.17212 -0.44333 0.32319 0.17211 -0.43957 0.32319 0.22590 -0.43948 0.45919 0.22579 -0.43505 0.32319 0.21989 -0.43504 0.45919 0.21989 -0.42709 0.45919 0.16105 -0.42701 0.32319 0.16101 -0.42434 0.45919 0.15977 -0.42433 0.32319 0.15976 -0.42343 0.32319 0.20445 -0.42076 0.32319 0.20090 -0.42069 0.45919 0.20080 -0.41843 0.45919 0.15700 -0.41800 0.32319 0.19648 -0.41799 0.45919 0.19648 -0.41170 0.45919 0.15385 -0.41165 0.32319 0.15384 -0.41009 0.45919 0.15358 -0.41009 0.32319 0.15357 -0.40813 0.45919 0.15324 -0.40758 0.32319 0.17981 -0.40754 0.45919 0.17973 -0.40670 0.45919 0.15299 -0.40668 0.32319 0.15299 -0.40640 0.32319 0.17701 -0.40640 0.45919 0.17700 -0.40437 0.45919 0.15322 -0.40435 0.32319 0.15322 -0.40297 0.45919 0.15376 -0.40296 0.32319 0.15376 -0.40199 0.32319 0.15447 -0.40199 0.45919 0.15447 -0.40124 0.45919 0.15542 -0.40124 0.32319 0.15542 -0.40099 0.32319 0.16415 -0.40098 0.45919 0.16410 -0.40078 0.32319 0.16253 -0.40077 0.45919 0.16253 -0.40065 0.45919 0.15679 -0.40065 0.32319 0.15680 -0.40032 0.45919 0.15910 -0.40032 0.32319 0.15912 -0.35848 0.45919 -0.18235 -0.35841 0.32319 -0.18320 -0.35819 0.32319 -0.17701 -0.35803 0.45919 -0.17675 -0.35802 0.32319 -0.18487 -0.35801 0.45919 -0.18487 -0.35794 0.45919 -0.17561 -0.35769 0.45919 -0.18661 -0.35748 0.32319 -0.18718 -0.35624 0.45919 -0.18960 -0.35512 0.32319 -0.16711 -0.35509 0.32319 -0.19093 -0.35485 0.45919 -0.16702 -0.35427 0.45919 -0.19187 -0.35387 0.32319 -0.19220 -0.35373 0.45919 -0.16392 -0.35159 0.45919 -0.19366 -0.35104 0.32319 -0.19392 -0.34994 0.32319 -0.19424 -0.34994 0.32319 -0.15846 -0.34933 0.45919 -0.19442 -0.34877 0.45919 -0.15658 -0.34873 0.32319 -0.15654 -0.34771 0.45919 -0.19497 -0.34687 0.32319 -0.19512 -0.34391 0.32319 -0.14883 -0.34183 0.45919 -0.14631 -0.34152 0.45919 -0.19533 -0.34135 0.32319 -0.21225 -0.34134 0.45919 -0.21277 -0.34125 0.32319 -0.19519 -0.34123 0.32319 -0.21067 -0.34118 0.32319 -0.14606 -0.34111 0.45919 -0.21003 -0.34098 0.32319 -0.21501 -0.34046 0.45919 -0.21632 -0.34043 0.32319 -0.21632 -0.34038 0.32319 -0.20777 -0.34011 0.32319 -0.19521 -0.34003 0.45919 -0.20705 -0.33929 0.45919 -0.21873 -0.33920 0.32319 -0.21871 -0.33916 0.32319 -0.20579 -0.33915 0.45919 -0.20580 -0.33828 0.32319 -0.20436 -0.33750 0.45919 -0.20346 -0.33675 0.32319 -0.22184 -0.33586 0.45919 -0.22268 -0.33357 0.32319 -0.19996 -0.33307 0.45919 -0.19979 -0.33294 0.32319 -0.22467 -0.33291 0.45919 -0.22465 -0.33179 0.45919 -0.19873 -0.33138 0.45919 -0.19320 -0.33127 0.32319 -0.13601 -0.33126 0.32319 -0.19294 -0.33120 0.45919 -0.13612 -0.33002 0.32319 -0.22685 -0.32808 0.32319 -0.19212 -0.32791 0.45919 -0.22799 -0.32758 0.32319 -0.13226 -0.32496 0.45919 -0.13015 -0.32352 0.32319 -0.19464 -0.32313 0.45919 -0.19480 -0.32309 0.45919 -0.22962 -0.32300 0.32319 -0.22962 -0.32239 0.32319 -0.19404 -0.32054 0.45919 -0.12738 -0.32049 0.32319 -0.12750 -0.32030 0.32319 -0.18787 -0.32025 0.45919 -0.18784 -0.31807 0.45919 -0.19250 -0.31379 0.32319 -0.23326 -0.31212 0.45919 -0.18376 -0.31104 0.32319 -0.23370 -0.31095 0.45919 -0.23374 -0.31074 0.45919 -0.19101 -0.31061 0.32319 -0.19104 -0.30942 0.32319 -0.18193 -0.30917 0.45919 -0.12025 -0.30916 0.32319 -0.11990 -0.30911 0.45919 -0.18131 -0.30887 0.45919 -0.23444 -0.30623 0.45919 -0.11841 -0.30143 0.32319 -0.18871 -0.29836 0.45919 -0.11577 -0.29833 0.32319 -0.11575 -0.29828 0.32319 -0.17231 -0.29817 0.45919 -0.17239 -0.29667 0.45919 -0.18816 -0.29659 0.32319 -0.18843 -0.29642 0.32319 -0.23603 -0.29639 0.45919 -0.23589 -0.29409 0.45919 -0.16907 -0.29360 0.32319 -0.11397 -0.29348 0.45919 -0.23623 -0.29348 0.45919 -0.18798 -0.29348 0.45919 -0.16832 -0.29348 0.45919 -0.11414 -0.29208 0.45919 -0.11367 -0.29174 0.32319 -0.16666 -0.29085 0.32319 -0.23692 -0.28869 0.45919 -0.16245 -0.28857 0.32319 -0.16252 -0.28840 0.32319 -0.11347 -0.28839 0.45919 -0.11345 -0.28521 0.45919 -0.23719 -0.28507 0.32319 -0.11314 -0.28421 0.45919 -0.11320 -0.28122 0.45919 -0.23696 -0.28119 0.32319 -0.23675 -0.28111 0.45919 -0.18775 -0.28108 0.32319 -0.18754 -0.28041 0.32319 -0.15186 -0.28018 0.45919 -0.11404 -0.28014 0.32319 -0.11398 -0.28005 0.45919 -0.15189 -0.27843 0.32319 0.14031 -0.27843 0.45919 0.14031 -0.27829 0.32319 -0.14911 -0.27709 0.32319 -0.18731 -0.27675 0.32319 -0.11553 -0.27637 0.45919 -0.11578 -0.27493 0.32319 -0.14153 -0.27491 0.45919 -0.14150 -0.27440 0.32319 -0.11750 -0.27440 0.45919 -0.11750 -0.27286 0.32319 -0.11963 -0.27268 0.45919 -0.13695 -0.27265 0.45919 -0.12003 -0.27224 0.32319 -0.13547 -0.27169 0.45919 -0.13182 -0.27168 0.32319 -0.13182 -0.27149 0.32319 -0.12359 -0.27144 0.45919 -0.18758 -0.27143 0.45919 -0.12355 -0.27106 0.45919 -0.12854 -0.27103 0.32319 -0.12768 -0.26630 0.32319 -0.23648 -0.26591 0.32319 -0.18861 -0.26588 0.45919 -0.18847 -0.26571 0.45919 -0.23607 -0.26098 0.32319 -0.23540 -0.26098 0.32319 -0.18918 -0.26098 0.45919 -0.18925 -0.26087 0.45919 -0.23579 -0.25343 0.32319 -0.19006 -0.25169 0.45919 -0.23346 -0.25156 0.32319 -0.23348 -0.25135 0.32319 -0.19076 -0.25126 0.45919 -0.19080 -0.24851 0.45919 -0.19124 -0.24423 0.32319 -0.23199 -0.23991 0.45919 -0.23046 -0.23930 0.45919 -0.19488 -0.23921 0.32319 -0.19487 -0.23917 0.32319 -0.22970 -0.23877 0.45919 -0.22986 -0.23843 0.32119 -0.43225 -0.23843 0.32119 -0.41225 -0.23843 0.46119 -0.43225 -0.23843 0.46119 -0.41225 -0.23830 0.53001 -0.05167 -0.23830 0.25531 -0.05105 -0.23807 0.52581 -0.05078 -0.23806 0.25123 -0.05191 -0.23806 0.53114 -0.05191 -0.23803 0.25655 -0.05078 -0.23791 0.24979 -0.05221 -0.23781 0.52448 -0.05049 -0.23775 0.25788 -0.05049 -0.23774 0.53261 -0.05222 -0.23735 0.25971 -0.05009 -0.23701 0.53594 -0.05291 -0.23665 0.52102 -0.04973 -0.23601 0.24418 -0.05337 -0.23586 0.26257 -0.04946 -0.23584 0.51983 -0.04946 -0.23584 0.53818 -0.05337 -0.23536 0.26352 -0.04925 -0.23523 0.24272 -0.05367 -0.23509 0.51871 -0.04921 -0.23507 0.53966 -0.05367 -0.23438 0.32319 -0.19651 -0.23421 0.51739 -0.04891 -0.23321 0.54321 -0.05439 -0.23228 0.45919 -0.19765 -0.23222 0.26691 -0.04847 -0.23208 0.32319 -0.41225 -0.23208 0.45919 -0.41225 -0.23153 0.23722 -0.05477 -0.23147 0.54510 -0.05476 -0.23144 0.26739 -0.04835 -0.23142 0.51499 -0.04835 -0.23093 0.32319 -0.39238 -0.23093 0.45919 -0.39238 -0.23087 0.32319 -0.38730 -0.23087 0.45919 -0.38730 -0.23083 0.32319 -0.38373 -0.23083 0.45919 -0.38373 -0.23056 0.23577 -0.05506 -0.23050 0.32319 -0.22576 -0.23036 0.32319 -0.40922 -0.23036 0.45919 -0.40922 -0.23032 0.51409 -0.04814 -0.23021 0.54646 -0.05502 -0.23019 0.26817 -0.04816 -0.23007 0.32319 -0.39573 -0.23007 0.45919 -0.39573 -0.22957 0.32319 -0.37925 -0.22957 0.32319 -0.22499 -0.22957 0.32319 -0.19973 -0.22952 0.32319 -0.39786 -0.22952 0.45919 -0.39786 -0.22936 0.45919 -0.19983 -0.22916 0.32319 -0.37780 -0.22916 0.45919 -0.37780 -0.22908 0.45919 -0.22473 -0.22798 0.32319 -0.05252 -0.22798 0.45919 -0.05252 -0.22795 0.27562 -0.05252 -0.22784 0.27420 -0.05135 -0.22779 0.50363 -0.05552 -0.22769 0.50707 -0.05252 -0.22765 0.50841 -0.05135 -0.22752 0.26984 -0.04775 -0.22752 0.51254 -0.04775 -0.22728 0.28066 -0.05782 -0.22726 0.50176 -0.05781 -0.22712 0.32319 -0.04605 -0.22712 0.45919 -0.05899 -0.22712 0.45919 -0.04605 -0.22712 0.28175 -0.05899 -0.22710 0.45919 -0.40185 -0.22701 0.27086 -0.04608 -0.22700 0.32319 -0.37011 -0.22700 0.45919 -0.37011 -0.22700 0.51153 -0.04609 -0.22699 0.50082 -0.05895 -0.22695 0.32319 -0.40201 -0.22695 0.32319 -0.22283 -0.22695 0.32319 -0.20148 -0.22695 0.32319 -0.05940 -0.22653 0.49923 -0.06090 -0.22585 0.50932 -0.04244 -0.22577 0.27314 -0.04226 -0.22565 0.32319 -0.36781 -0.22565 0.45919 -0.36781 -0.22559 0.55149 -0.05601 -0.22555 0.45919 -0.20266 -0.22521 0.52150 0.00597 -0.22520 0.26126 0.00584 -0.22520 0.26018 0.00609 -0.22519 0.25878 0.00642 -0.22516 0.52401 0.00646 -0.22515 0.28486 -0.06396 -0.22514 0.49754 -0.06396 -0.22510 0.52007 0.00529 -0.22510 0.26231 0.00529 -0.22506 0.23096 -0.05598 -0.22502 0.51907 0.00482 -0.22497 0.26369 0.00457 -0.22489 0.25585 0.00634 -0.22488 0.52653 0.00632 -0.22486 0.32319 -0.40411 -0.22486 0.45919 -0.40411 -0.22479 0.32319 -0.22104 -0.22463 0.32319 -0.06502 -0.22463 0.32319 -0.04002 -0.22463 0.45919 -0.06502 -0.22463 0.45919 -0.04002 -0.22461 0.49702 -0.06501 -0.22456 0.28527 -0.06498 -0.22453 0.50837 -0.04007 -0.22453 0.27400 -0.04007 -0.22446 0.51642 0.00256 -0.22444 0.26594 0.00252 -0.22443 0.25340 0.00566 -0.22442 0.52898 0.00562 -0.22424 0.25240 0.00538 -0.22407 0.53064 0.00508 -0.22402 0.45919 -0.22013 -0.22379 0.51480 0.00026 -0.22378 0.26757 0.00025 -0.22372 0.55269 -0.05623 -0.22361 0.22969 -0.05623 -0.22356 0.28595 -0.06670 -0.22356 0.50768 -0.03833 -0.22346 0.27474 -0.03819 -0.22327 0.51356 -0.00150 -0.22315 0.32319 -0.21870 -0.22314 0.45919 -0.21870 -0.22310 0.24865 0.00315 -0.22308 0.53373 0.00307 -0.22300 0.32319 -0.20578 -0.22297 0.26932 -0.00246 -0.22275 0.49618 -0.06781 -0.22269 0.24727 0.00233 -0.22261 0.45919 -0.20642 -0.22230 0.53614 0.00150 -0.22227 0.32319 -0.21745 -0.22215 0.24610 0.00111 -0.22211 0.27014 -0.00509 -0.22210 0.51225 -0.00513 -0.22192 0.45919 -0.21673 -0.22192 0.32319 -0.40581 -0.22192 0.45919 -0.40581 -0.22186 0.32319 -0.21632 -0.22148 0.32319 -0.20893 -0.22142 0.49614 -0.06930 -0.22132 0.45919 -0.20948 -0.22119 0.32319 -0.21447 -0.22111 0.22750 -0.05665 -0.22107 0.45919 -0.21383 -0.22104 0.51108 -0.00837 -0.22101 0.32319 -0.21225 -0.22099 0.27121 -0.00851 -0.22095 0.45919 -0.21225 -0.22084 0.50708 -0.03503 -0.22072 0.27530 -0.03491 -0.22065 0.32319 -0.07019 -0.22065 0.32319 -0.03484 -0.22065 0.45919 -0.07019 -0.22065 0.45919 -0.03484 -0.22062 0.28620 -0.07016 -0.22048 0.49612 -0.07036 -0.22033 0.51029 -0.01057 -0.22027 0.50713 -0.03453 -0.21991 0.24126 -0.00394 -0.21985 0.54109 -0.00413 -0.21974 0.32319 -0.35770 -0.21974 0.45919 -0.35770 -0.21957 0.27256 -0.01283 -0.21890 0.28591 -0.07179 -0.21868 0.23872 -0.00675 -0.21859 0.27275 -0.01563 -0.21859 0.54364 -0.00702 -0.21848 0.50984 -0.01590 -0.21784 0.54514 -0.00873 -0.21776 0.49686 -0.07267 -0.21765 0.50736 -0.03227 -0.21763 0.32319 -0.40701 -0.21763 0.45919 -0.40701 -0.21758 0.32319 -0.35403 -0.21758 0.45919 -0.35403 -0.21751 0.27499 -0.03217 -0.21748 0.22542 -0.05702 -0.21740 0.32319 -0.07269 -0.21740 0.32319 -0.03234 -0.21740 0.32319 -0.03113 -0.21740 0.45919 -0.21632 -0.21740 0.45919 -0.07269 -0.21740 0.45919 -0.03234 -0.21740 0.45919 -0.03113 -0.21732 0.55680 -0.05699 -0.21702 0.27306 -0.02013 -0.21694 0.50947 -0.02031 -0.21669 0.32319 -0.35250 -0.21669 0.45919 -0.35250 -0.21644 0.49757 -0.07349 -0.21582 0.32319 -0.03113 -0.21582 0.45919 -0.03113 -0.21572 0.22442 -0.05720 -0.21564 0.55788 -0.05718 -0.21561 0.54807 -0.01426 -0.21555 0.23432 -0.01442 -0.21548 0.32319 -0.07417 -0.21548 0.45919 -0.07417 -0.21546 0.28434 -0.07414 -0.21544 0.49811 -0.07410 -0.21542 0.50806 -0.03095 -0.21542 0.27431 -0.03095 -0.21494 0.32319 -0.40699 -0.21494 0.45919 -0.40699 -0.21426 0.49874 -0.07483 -0.21405 0.27363 -0.02861 -0.21404 0.50876 -0.02864 -0.21389 0.23198 -0.01849 -0.21388 0.55034 -0.01854 -0.21385 0.45919 0.23355 -0.21384 0.22335 -0.05739 -0.21384 0.55903 -0.05739 -0.21384 0.32319 0.23248 -0.21380 0.45919 0.23512 -0.21377 0.50858 -0.02997 -0.21377 0.32319 0.23512 -0.21371 0.55843 -0.05924 -0.21370 0.22397 -0.05922 -0.21364 0.32319 0.22862 -0.21361 0.45919 0.22866 -0.21360 0.27372 -0.02989 -0.21350 0.55750 -0.06209 -0.21348 0.22493 -0.06206 -0.21319 0.32319 0.25482 -0.21318 0.45919 0.25481 -0.21308 0.55569 -0.06747 -0.21299 0.22702 -0.06825 -0.21292 0.32319 0.26442 -0.21284 0.45919 0.26551 -0.21271 0.32319 -0.34850 -0.21271 0.45919 -0.34850 -0.21262 0.22810 -0.06995 -0.21259 0.55423 -0.06990 -0.21235 0.45919 0.20368 -0.21232 0.32319 0.20396 -0.21226 0.32319 0.20274 -0.21197 0.32319 -0.40697 -0.21197 0.45919 -0.40697 -0.21166 0.55146 -0.07454 -0.21163 0.23096 -0.07447 -0.21158 0.22873 -0.02416 -0.21140 0.55070 -0.07580 -0.21118 0.23225 -0.07653 -0.21115 0.45919 0.28078 -0.21115 0.32319 0.28079 -0.21106 0.54983 -0.07668 -0.21062 0.22787 -0.02665 -0.21055 0.28069 -0.07623 -0.21054 0.50169 -0.07624 -0.21029 0.55505 -0.02743 -0.20969 0.54636 -0.08015 -0.20968 0.23603 -0.08010 -0.20957 0.32319 0.29541 -0.20945 0.32319 -0.07666 -0.20945 0.32319 -0.02837 -0.20945 0.45919 -0.07666 -0.20945 0.45919 -0.02837 -0.20944 0.50256 -0.07665 -0.20944 0.50649 -0.02840 -0.20943 0.27586 -0.02841 -0.20942 0.45919 0.29641 -0.20940 0.27958 -0.07649 -0.20917 0.45919 0.18328 -0.20915 0.32319 0.18336 -0.20897 0.23782 -0.08180 -0.20893 0.54447 -0.08176 -0.20869 0.55641 -0.03156 -0.20865 0.22613 -0.03172 -0.20848 0.45919 0.17887 -0.20831 0.32319 0.17815 -0.20800 0.27636 -0.02809 -0.20800 0.50602 -0.02810 -0.20764 0.45919 0.30507 -0.20763 0.32319 0.30505 -0.20728 0.24174 -0.08392 -0.20694 0.53982 -0.08444 -0.20679 0.32319 -0.40554 -0.20679 0.45919 -0.40554 -0.20670 0.24308 -0.08465 -0.20637 0.53859 -0.08475 -0.20525 0.27557 -0.07741 -0.20496 0.55960 -0.04124 -0.20494 0.22284 -0.04130 -0.20485 0.50517 -0.02759 -0.20468 0.27723 -0.02757 -0.20467 0.45919 0.16760 -0.20467 0.32319 0.16764 -0.20457 0.53464 -0.08565 -0.20457 0.24774 -0.08567 -0.20446 0.32319 -0.34019 -0.20446 0.45919 -0.34019 -0.20416 0.27414 -0.07731 -0.20413 0.32319 0.32238 -0.20413 0.50832 -0.07727 -0.20392 0.45919 0.32319 -0.20363 0.32319 -0.40466 -0.20363 0.45919 -0.40466 -0.20359 0.24978 -0.08557 -0.20359 0.53260 -0.08557 -0.20300 0.27261 -0.07721 -0.20298 0.27731 -0.02760 -0.20298 0.50507 -0.02760 -0.20298 0.22109 -0.04637 -0.20298 0.32319 -0.07752 -0.20298 0.32319 -0.02752 -0.20298 0.45919 -0.07752 -0.20298 0.45919 -0.02752 -0.20298 0.56128 -0.04637 -0.20296 0.50960 -0.07740 -0.20284 0.45919 0.32624 -0.20283 0.32319 0.32616 -0.20263 0.45919 0.16156 -0.20259 0.53050 -0.08548 -0.20241 0.32319 0.16113 -0.20236 0.25232 -0.08539 -0.20230 0.32319 -0.33802 -0.20230 0.45919 -0.33802 -0.20208 0.51057 -0.07750 -0.20174 0.25356 -0.08492 -0.20174 0.52882 -0.08490 -0.20150 0.27737 -0.02761 -0.20150 0.50500 -0.02761 -0.20077 0.25547 -0.08419 -0.20070 0.56077 -0.04564 -0.20067 0.22141 -0.04558 -0.20047 0.52632 -0.08403 -0.20025 0.25648 -0.08380 -0.19906 0.45919 0.15621 -0.19900 0.25882 -0.08202 -0.19899 0.52355 -0.08204 -0.19892 0.32319 0.15606 -0.19835 0.52235 -0.08119 -0.19813 0.26043 -0.08080 -0.19803 0.32319 -0.40136 -0.19803 0.45919 -0.40136 -0.19768 0.26561 -0.07672 -0.19767 0.51667 -0.07681 -0.19714 0.32319 0.34266 -0.19701 0.45919 0.34284 -0.19674 0.50560 -0.02831 -0.19670 0.45919 0.15417 -0.19660 0.32319 0.15410 -0.19657 0.27673 -0.02835 -0.19651 0.51827 -0.07663 -0.19651 0.26321 -0.07722 -0.19650 0.32319 -0.07666 -0.19650 0.32319 -0.02837 -0.19650 0.45919 -0.07666 -0.19650 0.45919 -0.02837 -0.19644 0.22273 -0.04432 -0.19640 0.55980 -0.04426 -0.19622 0.26370 -0.07659 -0.19572 0.32319 -0.33414 -0.19572 0.45919 -0.33414 -0.19513 0.50625 -0.02888 -0.19513 0.27613 -0.02888 -0.19488 0.45919 0.15329 -0.19479 0.32319 0.15326 -0.19426 0.55885 -0.04369 -0.19421 0.22346 -0.04365 -0.19354 0.22367 -0.04345 -0.19325 0.32319 0.15299 -0.19325 0.45919 0.15299 -0.19242 0.50733 -0.02985 -0.19224 0.27495 -0.02994 -0.19198 0.51720 -0.07497 -0.19169 0.45919 0.15312 -0.19160 0.32319 0.15314 -0.19151 0.32319 0.35199 -0.19145 0.32319 -0.39748 -0.19145 0.45919 -0.39748 -0.19138 0.45919 0.35215 -0.19111 0.26541 -0.07452 -0.19095 0.51699 -0.07433 -0.19055 0.50867 -0.03099 -0.19055 0.27371 -0.03099 -0.19053 0.45919 0.35294 -0.19053 0.32319 0.35292 -0.19051 0.26551 -0.07411 -0.19048 0.32319 -0.07417 -0.19048 0.32319 -0.03086 -0.19048 0.45919 -0.07417 -0.19048 0.45919 -0.03086 -0.19036 0.22567 -0.04276 -0.19029 0.55680 -0.04270 -0.19012 0.32319 -0.33084 -0.19012 0.45919 -0.33084 -0.18980 0.45919 0.15378 -0.18971 0.32319 -0.39573 -0.18971 0.45919 -0.39573 -0.18970 0.32319 0.15383 -0.18930 0.27279 -0.03176 -0.18929 0.50958 -0.03175 -0.18840 0.55543 -0.04233 -0.18836 0.22694 -0.04231 -0.18836 0.32319 0.35498 -0.18828 0.45919 0.35504 -0.18771 0.51072 -0.03272 -0.18759 0.51631 -0.07222 -0.18751 0.22748 -0.04213 -0.18750 0.27147 -0.03288 -0.18731 0.45919 0.15551 -0.18716 0.32319 0.15564 -0.18696 0.32319 -0.32996 -0.18696 0.45919 -0.32996 -0.18687 0.26613 -0.07164 -0.18633 0.45919 0.15668 -0.18633 0.32319 0.15666 -0.18620 0.32319 0.35613 -0.18613 0.45919 0.35616 -0.18574 0.51631 -0.07045 -0.18573 0.26608 -0.07046 -0.18548 0.26885 -0.03501 -0.18547 0.51352 -0.03501 -0.18530 0.32319 -0.07019 -0.18530 0.32319 -0.03484 -0.18530 0.45919 -0.07019 -0.18530 0.45919 -0.03484 -0.18513 0.22995 -0.04185 -0.18505 0.55248 -0.04181 -0.18446 0.26755 -0.03607 -0.18445 0.32319 0.35653 -0.18445 0.51481 -0.03606 -0.18440 0.45919 0.35653 -0.18396 0.51630 -0.06874 -0.18353 0.55073 -0.04167 -0.18350 0.23165 -0.04166 -0.18337 0.26598 -0.06803 -0.18336 0.45919 0.16023 -0.18310 0.32319 0.16064 -0.18284 0.32319 0.35646 -0.18279 0.23238 -0.04158 -0.18279 0.51690 -0.03777 -0.18278 0.45919 0.35645 -0.18259 0.26514 -0.03804 -0.18178 0.32319 -0.32852 -0.18178 0.45919 -0.32852 -0.18168 0.26536 -0.06537 -0.18165 0.51699 -0.06539 -0.18163 0.51991 -0.04017 -0.18159 0.26250 -0.04015 -0.18132 0.32319 -0.06502 -0.18132 0.32319 -0.04002 -0.18132 0.45919 -0.06502 -0.18132 0.45919 -0.04002 -0.18114 0.32319 0.35592 -0.18110 0.23528 -0.04168 -0.18108 0.45919 0.35589 -0.18104 0.32319 -0.38700 -0.18104 0.45919 -0.38700 -0.18103 0.51717 -0.06449 -0.18099 0.52157 -0.04149 -0.18096 0.26083 -0.04147 -0.18057 0.26495 -0.06361 -0.18050 0.54641 -0.04163 -0.17999 0.54509 -0.04176 -0.17995 0.32319 0.16768 -0.17995 0.45919 0.16771 -0.17994 0.23728 -0.04174 -0.17956 0.23794 -0.04177 -0.17912 0.32319 0.35460 -0.17906 0.26330 -0.05942 -0.17904 0.45919 0.35454 -0.17897 0.51901 -0.05945 -0.17883 0.32319 -0.05899 -0.17883 0.32319 -0.04605 -0.17883 0.45919 -0.05899 -0.17883 0.45919 -0.04605 -0.17881 0.32319 -0.32850 -0.17881 0.45919 -0.32850 -0.17879 0.52667 -0.04653 -0.17877 0.25572 -0.04653 -0.17864 0.26284 -0.05825 -0.17857 0.24131 -0.04224 -0.17853 0.25378 -0.04539 -0.17840 0.52856 -0.04535 -0.17826 0.54063 -0.04224 -0.17811 0.25999 -0.05299 -0.17804 0.53891 -0.04259 -0.17798 0.25935 -0.05182 -0.17798 0.52227 -0.05307 -0.17798 0.32319 -0.05252 -0.17798 0.45919 -0.05252 -0.17793 0.24347 -0.04255 -0.17780 0.53260 -0.04410 -0.17769 0.24762 -0.04351 -0.17761 0.24964 -0.04399 -0.17760 0.45919 0.35290 -0.17760 0.32319 0.35290 -0.17752 0.53475 -0.04345 -0.17706 0.32319 -0.38300 -0.17706 0.45919 -0.38300 -0.17630 0.32319 0.35143 -0.17618 0.45919 0.35127 -0.17612 0.32319 -0.32849 -0.17612 0.45919 -0.32849 -0.17588 0.45919 0.17661 -0.17564 0.32319 0.17732 -0.17409 0.45919 0.18349 -0.17408 0.32319 0.18343 -0.17401 0.32319 -0.37779 -0.17401 0.45919 -0.37779 -0.17204 0.32319 -0.32957 -0.17204 0.45919 -0.32957 -0.17204 0.45919 0.34266 -0.17166 0.32319 0.34201 -0.17146 0.45919 0.34145 -0.17049 0.45919 -0.37177 -0.17049 0.45919 -0.33046 -0.17049 0.45919 0.19741 -0.17049 0.45919 0.33743 -0.16963 0.45919 0.20073 -0.16945 0.32319 0.20165 -0.16913 0.45919 0.20410 -0.16910 0.32319 0.20404 -0.16889 0.32319 -0.33139 -0.16889 0.45919 -0.33139 -0.16810 0.32319 -0.36769 -0.16810 0.45919 -0.36769 -0.16773 0.45919 0.32602 -0.16771 0.32319 0.32608 -0.16675 0.32319 -0.36538 -0.16675 0.45919 -0.36538 -0.16655 0.32319 0.32142 -0.16642 0.45919 0.32059 -0.16632 0.32319 -0.33397 -0.16632 0.45919 -0.33397 -0.16552 0.32319 0.22857 -0.16549 0.45919 0.22852 -0.16524 0.45919 0.23018 -0.16513 0.32319 0.23124 -0.16492 0.45919 0.23512 -0.16489 0.32319 0.23512 -0.16479 0.45919 0.30502 -0.16478 0.32319 0.30503 -0.16459 0.32319 -0.35769 -0.16459 0.45919 -0.35769 -0.16423 0.32319 -0.33764 -0.16423 0.45919 -0.33764 -0.16364 0.32319 0.25482 -0.16363 0.32319 -0.34000 -0.16363 0.45919 -0.34000 -0.16362 0.45919 0.25482 -0.16361 0.32319 0.29424 -0.16356 0.32319 -0.35403 -0.16356 0.45919 -0.35403 -0.16355 0.45919 0.29323 -0.16340 0.32319 0.28081 -0.16339 0.45919 0.28083 -0.16315 0.45919 0.26207 -0.16312 0.32319 0.26315 -0.16292 0.32319 -0.35177 -0.16292 0.45919 -0.35177 -0.16288 0.32319 -0.34820 -0.16288 0.45919 -0.34820 -0.16282 0.32319 -0.34311 -0.16282 0.45919 -0.34311 -0.15843 0.32319 0.35975 -0.14843 0.32119 0.35975 -0.14843 0.32119 0.36775 -0.14843 0.46119 0.36775 -0.12843 0.19119 -0.21225 -0.12843 0.19170 -0.21613 -0.12843 0.19170 -0.20837 -0.12843 0.19320 -0.21975 -0.12843 0.19320 -0.20475 -0.12843 0.19558 -0.22286 -0.12843 0.19558 -0.20164 -0.12823 0.20661 -0.21267 -0.12843 0.19869 -0.22524 -0.12843 0.19869 -0.19926 -0.12843 0.20231 -0.22674 -0.12843 0.20231 -0.19776 -0.12843 0.20619 -0.22725 -0.12843 0.20619 -0.19725 -0.12843 0.21007 -0.22674 -0.12843 0.21007 -0.19776 -0.12843 0.21369 -0.22524 -0.12843 0.21369 -0.19926 -0.12843 0.21680 -0.22286 -0.12843 0.21680 -0.20164 -0.12843 0.21918 -0.21975 -0.12843 0.21918 -0.20475 -0.12843 0.22068 -0.21613 -0.12843 0.22068 -0.20837 -0.12843 0.22119 -0.21225 -0.12843 0.56119 -0.21225 -0.12843 0.56170 -0.21613 -0.12843 0.56170 -0.20837 -0.12843 0.56320 -0.21975 -0.12843 0.56320 -0.20475 -0.12843 0.56558 -0.22286 -0.12843 0.56558 -0.20164 -0.12843 0.57619 -0.21225 -0.12843 0.56869 -0.22524 -0.12843 0.56869 -0.19926 -0.12843 0.57231 -0.22674 -0.12843 0.57231 -0.19776 -0.12843 0.57619 -0.22725 -0.12843 0.57619 -0.19725 -0.12843 0.58007 -0.22674 -0.12843 0.58007 -0.19776 -0.12843 0.58369 -0.22524 -0.12843 0.58369 -0.19926 -0.12843 0.58680 -0.22286 -0.12843 0.58680 -0.20164 -0.12843 0.58918 -0.21975 -0.12843 0.58918 -0.20475 -0.12843 0.59068 -0.21613 -0.12843 0.59068 -0.20837 -0.12843 0.59119 -0.21225 -0.12323 0.18119 -0.23103 -0.12323 0.18119 -0.19347 -0.12343 0.19119 -0.21225 -0.12343 0.19170 -0.21613 -0.12343 0.19170 -0.20837 -0.12343 0.19320 -0.21975 -0.12343 0.19320 -0.20475 -0.12343 0.19558 -0.22286 -0.12343 0.19558 -0.20164 -0.12343 0.19869 -0.22524 -0.12343 0.19869 -0.19926 -0.12343 0.20231 -0.22674 -0.12343 0.20231 -0.19776 -0.12343 0.20619 -0.22725 -0.12343 0.20619 -0.19725 -0.12343 0.21007 -0.22674 -0.12343 0.21007 -0.19776 -0.12343 0.21369 -0.22524 -0.12343 0.21369 -0.19926 -0.12343 0.21680 -0.20164 -0.12343 0.21918 -0.21975 -0.12343 0.21918 -0.20475 -0.12343 0.22068 -0.21613 -0.12343 0.22068 -0.20837 -0.12343 0.22119 -0.21225 -0.12343 0.22373 -0.21225 -0.12343 0.22455 -0.20611 -0.12343 0.22473 -0.21869 -0.12343 0.22674 -0.22367 -0.12343 0.22698 -0.20042 -0.12343 0.22747 -0.19980 -0.12343 0.22750 -0.22468 -0.12343 0.23068 -0.22889 -0.12343 0.23104 -0.19525 -0.12343 0.27134 -0.22925 -0.12343 0.27169 -0.19560 -0.12343 0.27487 -0.19982 -0.12343 0.27491 -0.22470 -0.12343 0.27540 -0.22408 -0.12343 0.27563 -0.20083 -0.12343 0.27769 -0.21870 -0.12343 0.27795 -0.20654 -0.12343 0.27867 -0.21247 -0.12343 0.50371 -0.21247 -0.12343 0.50443 -0.20654 -0.12343 0.50468 -0.21870 -0.12343 0.50473 -0.20581 -0.12343 0.50674 -0.20083 -0.12343 0.50747 -0.22470 -0.12343 0.50750 -0.19982 -0.12343 0.51068 -0.19560 -0.12343 0.51104 -0.22925 -0.12343 0.55134 -0.22925 -0.12343 0.55134 -0.19525 -0.12343 0.55487 -0.22468 -0.12343 0.55540 -0.20042 -0.12343 0.55563 -0.22367 -0.12343 0.55765 -0.21869 -0.12343 0.55783 -0.20611 -0.12343 0.55795 -0.21795 -0.12343 0.55864 -0.21225 -0.12343 0.56119 -0.21225 -0.12343 0.56170 -0.21613 -0.12343 0.56170 -0.20837 -0.12343 0.56320 -0.21975 -0.12343 0.56320 -0.20475 -0.12343 0.56558 -0.22286 -0.12343 0.56558 -0.20164 -0.12343 0.56869 -0.22524 -0.12343 0.56869 -0.19926 -0.12343 0.57231 -0.22674 -0.12343 0.57231 -0.19776 -0.12343 0.57619 -0.22725 -0.12343 0.57619 -0.19725 -0.12343 0.58007 -0.22674 -0.12343 0.58007 -0.19776 -0.12343 0.58369 -0.22524 -0.12343 0.58369 -0.19926 -0.12343 0.58680 -0.22286 -0.12343 0.58680 -0.20164 -0.12343 0.58918 -0.21975 -0.12343 0.58918 -0.20475 -0.12343 0.59068 -0.21613 -0.12343 0.59068 -0.20837 -0.12343 0.59119 -0.21225 -0.12343 0.60119 -0.22925 -0.12343 0.60119 -0.19525 -0.12339 0.23174 -0.19458 -0.12338 0.27037 -0.23013 -0.12336 0.55021 -0.19417 -0.12333 0.27054 -0.19461 -0.12333 0.51184 -0.19461 -0.12332 0.23175 -0.22988 -0.12332 0.55063 -0.22988 -0.12317 0.56201 -0.23126 -0.12316 0.22746 -0.23131 -0.12316 0.60119 -0.23132 -0.12316 0.60119 -0.19318 -0.12316 0.55487 -0.23132 -0.12315 0.23299 -0.19349 -0.12314 0.21973 -0.23137 -0.12312 0.23301 -0.23101 -0.12311 0.51360 -0.19319 -0.12308 0.26873 -0.23130 -0.12308 0.51365 -0.23130 -0.12308 0.21826 -0.23160 -0.12308 0.56412 -0.23160 -0.12307 0.54904 -0.23130 -0.12306 0.26835 -0.19284 -0.12306 0.22976 -0.23166 -0.12306 0.55262 -0.23166 -0.12306 0.54904 -0.19321 -0.12295 0.54829 -0.23197 -0.12281 0.26726 -0.23234 -0.12281 0.51512 -0.23234 -0.12281 0.51512 -0.19216 -0.12264 0.54477 -0.23417 -0.12264 0.18119 -0.23272 -0.12264 0.18119 -0.19178 -0.12263 0.23506 -0.23272 -0.12261 0.23405 -0.23271 -0.12261 0.23507 -0.19179 -0.12260 0.23890 -0.23478 -0.12259 0.54576 -0.23366 -0.12258 0.21468 -0.23269 -0.12257 0.26651 -0.19182 -0.12255 0.54709 -0.19160 -0.12253 0.23707 -0.23385 -0.12248 0.54669 -0.23316 -0.12246 0.23996 -0.23524 -0.12236 0.60119 -0.23325 -0.12236 0.60119 -0.19125 -0.12236 0.51677 -0.23325 -0.12235 0.26559 -0.23326 -0.12233 0.56948 -0.23323 -0.12233 0.21289 -0.23324 -0.12222 0.51695 -0.19134 -0.12220 0.21200 -0.23351 -0.12216 0.54120 -0.23573 -0.12194 0.23677 -0.19060 -0.12194 0.54561 -0.19060 -0.12186 0.26416 -0.23380 -0.12186 0.51822 -0.23380 -0.12183 0.24210 -0.23607 -0.12180 0.51829 -0.19075 -0.12169 0.18119 -0.23424 -0.12169 0.18119 -0.19026 -0.12165 0.23733 -0.19030 -0.12163 0.20999 -0.23431 -0.12163 0.57239 -0.23431 -0.12153 0.26325 -0.19037 -0.12129 0.53922 -0.23641 -0.12129 0.24310 -0.23639 -0.12109 0.60119 -0.23491 -0.12109 0.60119 -0.18959 -0.12101 0.52075 -0.18965 -0.12101 0.57370 -0.23481 -0.12099 0.54383 -0.18969 -0.12096 0.26156 -0.23479 -0.12096 0.52082 -0.23479 -0.12072 0.26073 -0.18925 -0.12072 0.52165 -0.18925 -0.12060 0.53821 -0.23670 -0.12042 0.18119 -0.23550 -0.12042 0.18119 -0.18899 -0.12034 0.24446 -0.23678 -0.12034 0.23977 -0.18908 -0.12007 0.25897 -0.23577 -0.12007 0.25897 -0.18873 -0.12007 0.52341 -0.23577 -0.12007 0.52341 -0.18873 -0.12000 0.20654 -0.23564 -0.12000 0.57584 -0.23564 -0.11967 0.24100 -0.18847 -0.11951 0.24529 -0.23697 -0.11943 0.60119 -0.23618 -0.11943 0.60119 -0.18832 -0.11942 0.25731 -0.23617 -0.11942 0.52506 -0.23617 -0.11942 0.54097 -0.18833 -0.11940 0.57711 -0.23613 -0.11937 0.52514 -0.18846 -0.11915 0.53678 -0.23703 -0.11914 0.20474 -0.23634 -0.11902 0.24207 -0.18812 -0.11901 0.25628 -0.23636 -0.11901 0.52610 -0.23636 -0.11896 0.52617 -0.18830 -0.11890 0.18119 -0.23646 -0.11890 0.18119 -0.18804 -0.11882 0.25587 -0.18824 -0.11868 0.24261 -0.18794 -0.11868 0.53977 -0.18794 -0.11826 0.20342 -0.23673 -0.11826 0.57896 -0.23673 -0.11760 0.24661 -0.23719 -0.11750 0.60119 -0.23698 -0.11750 0.60119 -0.18752 -0.11748 0.57992 -0.23687 -0.11747 0.53793 -0.18768 -0.11744 0.25245 -0.23675 -0.11744 0.52993 -0.23675 -0.11744 0.52994 -0.18771 -0.11721 0.18119 -0.23705 -0.11721 0.18119 -0.18745 -0.11719 0.20209 -0.23693 -0.11718 0.24489 -0.18762 -0.11716 0.25175 -0.18760 -0.11640 0.24986 -0.18731 -0.11640 0.53251 -0.18731 -0.11630 0.53517 -0.23724 -0.11573 0.24740 -0.23724 -0.11551 0.58236 -0.23723 -0.11545 0.24751 -0.18725 -0.11544 0.53481 -0.18725 -0.11543 0.18119 -0.23725 -0.11543 0.18119 -0.18725 -0.11543 0.19992 -0.23725 -0.11543 0.60119 -0.23725 -0.11543 0.60119 -0.18725 -0.11304 0.19742 -0.23725 -0.11304 0.58496 -0.23725 -0.10978 0.24849 -0.23725 -0.10978 0.53388 -0.23725 -0.10859 0.24838 -0.23725 -0.10859 0.53400 -0.23725 -0.10818 0.19374 -0.23725 -0.10818 0.58864 -0.23725 -0.10811 0.21550 -0.18725 -0.10810 0.56680 -0.18725 -0.10752 0.22017 -0.18725 -0.10752 0.56220 -0.18725 -0.10739 0.21034 -0.18725 -0.10739 0.57203 -0.18725 -0.10679 0.22196 -0.18725 -0.10679 0.56042 -0.18725 -0.10677 0.20887 -0.18725 -0.10677 0.57351 -0.18725 -0.10573 0.22453 -0.18725 -0.10573 0.55785 -0.18725 -0.10493 0.20453 -0.18725 -0.10493 0.57784 -0.18725 -0.10335 0.22764 -0.18725 -0.10335 0.55474 -0.18725 -0.10323 0.20236 -0.18725 -0.10323 0.58001 -0.18725 -0.10257 0.22866 -0.18725 -0.10257 0.55371 -0.18725 -0.10220 0.24779 -0.23725 -0.10220 0.53459 -0.23725 -0.10197 0.18903 -0.23725 -0.10197 0.59334 -0.23725 -0.10068 0.24722 -0.23725 -0.10068 0.53516 -0.23725 -0.10041 0.18839 -0.23725 -0.10041 0.59399 -0.23725 -0.09990 0.19811 -0.18725 -0.09990 0.58426 -0.18725 -0.09791 0.23223 -0.18725 -0.09791 0.55015 -0.18725 -0.09773 0.19648 -0.18725 -0.09773 0.58589 -0.18725 -0.09245 0.24417 -0.23725 -0.09245 0.53820 -0.23725 -0.09218 0.18501 -0.23725 -0.09218 0.59737 -0.23725 -0.09144 0.19175 -0.18725 -0.09144 0.59063 -0.18725 -0.09072 0.59092 -0.18725 -0.09071 0.23532 -0.18725 -0.09071 0.54706 -0.18725 -0.08463 0.23870 -0.23725 -0.08463 0.54368 -0.23725 -0.08424 0.18389 -0.23725 -0.08424 0.59848 -0.23725 -0.08230 0.23662 -0.18725 -0.08230 0.54576 -0.18725 -0.08228 0.18802 -0.18725 -0.08228 0.59436 -0.18725 -0.08127 0.23633 -0.23725 -0.08127 0.54605 -0.23725 -0.07980 0.18701 -0.18725 -0.07980 0.59536 -0.18725 -0.07952 0.23698 -0.18725 -0.07952 0.54540 -0.18725 -0.07811 0.18466 -0.23725 -0.07811 0.59772 -0.23725 -0.07769 0.23208 -0.23725 -0.07769 0.55029 -0.23725 -0.07718 0.18505 -0.23725 -0.07365 0.18653 -0.23725 -0.07365 0.59584 -0.23725 -0.07343 0.23619 -0.18725 -0.07343 0.54619 -0.18725 -0.07343 0.18619 -0.18725 -0.07343 0.59619 -0.18725 -0.07190 0.55717 -0.23725 -0.07150 0.22455 -0.23725 -0.07150 0.55783 -0.23725 -0.07141 0.18829 -0.23725 -0.07141 0.59409 -0.23725 -0.07076 0.21983 -0.24170 -0.07075 0.21874 -0.24247 -0.07075 0.56155 -0.24075 -0.07072 0.56443 -0.24290 -0.07072 0.22141 -0.24006 -0.07064 0.56012 -0.23873 -0.07060 0.21581 -0.24367 -0.07053 0.22294 -0.23725 -0.07050 0.56784 -0.24392 -0.07047 0.55925 -0.23725 -0.07040 0.56898 -0.24404 -0.07038 0.21333 -0.24395 -0.07029 0.21219 -0.24408 -0.07019 0.18924 -0.23725 -0.07019 0.59314 -0.23725 -0.07016 0.21099 -0.24404 -0.06991 0.57356 -0.24378 -0.06983 0.22449 -0.23725 -0.06983 0.55789 -0.23725 -0.06932 0.57797 -0.24253 -0.06929 0.20405 -0.24257 -0.06906 0.20250 -0.24203 -0.06900 0.58029 -0.24187 -0.06767 0.58861 -0.23773 -0.06751 0.19281 -0.23725 -0.06751 0.58957 -0.23725 -0.06734 0.18540 -0.18725 -0.06734 0.59698 -0.18725 -0.06706 0.23536 -0.18725 -0.06706 0.54701 -0.18725 -0.06619 0.23230 -0.23725 -0.06619 0.55007 -0.23725 -0.06569 0.23337 -0.23725 -0.06569 0.54901 -0.23725 -0.06458 0.23436 -0.18725 -0.06458 0.54802 -0.18725 -0.06457 0.18576 -0.18725 -0.06457 0.59662 -0.18725 -0.06368 0.18850 -0.23725 -0.06368 0.59388 -0.23725 -0.06110 0.23886 -0.23725 -0.06110 0.54352 -0.23725 -0.05940 0.18569 -0.23725 -0.05940 0.59669 -0.23725 -0.05925 0.24107 -0.23725 -0.05925 0.54131 -0.23725 -0.05750 0.18507 -0.23725 -0.05750 0.59731 -0.23725 -0.05685 0.18677 -0.18725 -0.05685 0.59561 -0.18725 -0.05614 0.23092 -0.18725 -0.05614 0.55146 -0.18725 -0.05542 0.55175 -0.18725 -0.05514 0.24397 -0.23725 -0.05514 0.53840 -0.23725 -0.05471 0.18415 -0.23725 -0.05471 0.59822 -0.23725 -0.05257 0.24578 -0.23725 -0.05257 0.53660 -0.23725 -0.05105 0.18396 -0.23725 -0.05105 0.59842 -0.23725 -0.04951 0.18388 -0.23725 -0.04951 0.59850 -0.23725 -0.04931 0.18988 -0.18725 -0.04931 0.59250 -0.18725 -0.04913 0.22589 -0.18725 -0.04913 0.55648 -0.18725 -0.04856 0.24725 -0.23725 -0.04856 0.53512 -0.23725 -0.04697 0.22426 -0.18725 -0.04697 0.55811 -0.18725 -0.04639 0.24805 -0.23725 -0.04639 0.53433 -0.23725 -0.04430 0.19371 -0.18725 -0.04430 0.58866 -0.18725 -0.04429 0.18500 -0.23725 -0.04429 0.59738 -0.23725 -0.04364 0.22001 -0.18725 -0.04364 0.56236 -0.18725 -0.04351 0.19474 -0.18725 -0.04351 0.58764 -0.18725 -0.04194 0.21784 -0.18725 -0.04194 0.56453 -0.18725 -0.04179 0.24846 -0.23725 -0.04179 0.53392 -0.23725 -0.04113 0.19785 -0.18725 -0.04113 0.58453 -0.18725 -0.04087 0.24854 -0.23725 -0.04009 0.21351 -0.18725 -0.04009 0.56887 -0.18725 -0.04007 0.20042 -0.18725 -0.04007 0.58196 -0.18725 -0.03947 0.21203 -0.18725 -0.03947 0.57034 -0.18725 -0.03934 0.20220 -0.18725 -0.03934 0.58017 -0.18725 -0.03876 0.20680 -0.18725 -0.03875 0.57550 -0.18725 -0.03765 0.18822 -0.23725 -0.03765 0.59416 -0.23725 -0.03593 0.24766 -0.23725 -0.03593 0.53472 -0.23725 -0.03488 0.32319 -0.35842 -0.03488 0.45919 -0.35842 -0.03476 0.32319 -0.35724 -0.03476 0.45919 -0.35724 -0.03444 0.32319 -0.35403 -0.03444 0.45919 -0.35403 -0.03381 0.32319 -0.34778 -0.03381 0.45919 -0.34778 -0.03364 0.32319 -0.34608 -0.03364 0.45919 -0.34608 -0.03347 0.32319 -0.36737 -0.03347 0.45919 -0.36737 -0.03236 0.32319 -0.37437 -0.03236 0.45919 -0.37437 -0.03161 0.19332 -0.23725 -0.03161 0.58905 -0.23725 -0.03143 0.18119 -0.23725 -0.03143 0.18119 -0.18725 -0.03143 0.18619 -0.22925 -0.03143 0.18619 -0.19525 -0.03143 0.24555 -0.23725 -0.03143 0.53682 -0.23725 -0.01897 0.57612 -0.21136 -0.02965 0.60119 -0.23705 -0.03143 0.60119 -0.18725 -0.03121 0.32319 -0.33966 -0.03121 0.45919 -0.33966 -0.03105 0.32319 -0.37735 -0.03105 0.45919 -0.37735 -0.03063 0.32319 -0.33813 -0.03063 0.45919 -0.33813 -0.02968 0.58690 -0.23693 -0.02967 0.53836 -0.23702 -0.02938 0.19582 -0.23687 -0.02936 0.18119 -0.23698 -0.02936 0.18119 -0.18752 -0.02936 0.60119 -0.18752 -0.02855 0.19677 -0.23671 -0.02855 0.58561 -0.23671 -0.02847 0.24262 -0.23668 -0.02847 0.53976 -0.23668 -0.02796 0.60119 -0.23646 -0.02776 0.19778 -0.23635 -0.02776 0.58460 -0.23635 -0.02747 0.24082 -0.23611 -0.02747 0.54155 -0.23611 -0.02743 0.18119 -0.23618 -0.02743 0.18119 -0.18832 -0.02743 0.60119 -0.18832 -0.02713 0.32319 -0.33327 -0.02713 0.45919 -0.33327 -0.02705 0.19887 -0.23580 -0.02705 0.58351 -0.23580 -0.02690 0.32319 -0.38686 -0.02690 0.45919 -0.38686 -0.02651 0.23909 -0.23555 -0.02651 0.54328 -0.23555 -0.02644 0.60119 -0.23550 -0.02589 0.32319 -0.38917 -0.02589 0.45919 -0.38917 -0.02582 0.20074 -0.23485 -0.02578 0.54513 -0.23490 -0.02577 0.18119 -0.23491 -0.02577 0.18119 -0.18959 -0.02577 0.60119 -0.18959 -0.02571 0.23706 -0.23484 -0.02543 0.20135 -0.23454 -0.02543 0.58103 -0.23454 -0.02518 0.60119 -0.23424 -0.02486 0.20247 -0.23382 -0.02486 0.57990 -0.23382 -0.02466 0.23254 -0.23315 -0.02466 0.54983 -0.23315 -0.02458 0.20328 -0.23321 -0.02450 0.18119 -0.23325 -0.02450 0.18119 -0.19125 -0.02450 0.60119 -0.19125 -0.02433 0.57838 -0.23267 -0.02431 0.20405 -0.23263 -0.02422 0.60119 -0.23272 -0.02389 0.22922 -0.23192 -0.02389 0.55315 -0.23192 -0.02378 0.55467 -0.23130 -0.02376 0.22732 -0.23115 -0.02371 0.57661 -0.23134 -0.02370 0.18119 -0.23132 -0.02370 0.18119 -0.19318 -0.02370 0.60119 -0.19318 -0.02363 0.60119 -0.23103 -0.02354 0.20664 -0.23056 -0.02347 0.32319 -0.33030 -0.02347 0.45919 -0.33030 -0.02344 0.20752 -0.22966 -0.02344 0.57486 -0.22966 -0.02343 0.18119 -0.22925 -0.02343 0.18119 -0.19525 -0.02343 0.18619 -0.21225 -0.02343 0.18687 -0.21742 -0.02343 0.18687 -0.20707 -0.02343 0.18887 -0.22225 -0.02343 0.18887 -0.20225 -0.02343 0.19205 -0.22639 -0.02343 0.19205 -0.19811 -0.02343 0.19565 -0.22925 -0.02343 0.19565 -0.19525 -0.02343 0.20101 -0.23157 -0.02343 0.20101 -0.19293 -0.02343 0.20619 -0.23225 -0.02343 0.20619 -0.19225 -0.02343 0.21136 -0.19293 -0.02343 0.21619 -0.19493 -0.02343 0.21878 -0.22779 -0.02343 0.22033 -0.22639 -0.02343 0.22033 -0.19811 -0.02343 0.22260 -0.22925 -0.02343 0.22351 -0.22225 -0.02343 0.22351 -0.20225 -0.02343 0.22551 -0.21742 -0.02343 0.22551 -0.20707 -0.02343 0.22619 -0.21225 -0.02343 0.55619 -0.21225 -0.02343 0.55687 -0.21742 -0.02343 0.55687 -0.20707 -0.02343 0.55887 -0.22225 -0.02343 0.55887 -0.20225 -0.02343 0.55978 -0.22925 -0.02343 0.56205 -0.22639 -0.02343 0.56205 -0.19811 -0.02343 0.56360 -0.22779 -0.02343 0.56565 -0.19525 -0.02343 0.57101 -0.19293 -0.02343 0.57538 -0.23081 -0.02343 0.57619 -0.19225 -0.02343 0.58136 -0.23157 -0.02343 0.58136 -0.19293 -0.02343 0.58619 -0.22957 -0.02343 0.58619 -0.19493 -0.02343 0.59033 -0.22639 -0.02343 0.59033 -0.19811 -0.02343 0.59351 -0.22225 -0.02343 0.59351 -0.20225 -0.02343 0.59551 -0.21742 -0.02343 0.59551 -0.20707 -0.02343 0.59619 -0.21225 -0.02343 0.60119 -0.22925 -0.02343 0.60119 -0.19525 -0.02336 0.57555 -0.23224 -0.02300 0.21752 -0.22869 -0.02300 0.56486 -0.22869 -0.02266 0.21618 -0.22955 -0.02266 0.56620 -0.22955 -0.02258 0.21060 -0.23176 -0.02258 0.57177 -0.23176 -0.02250 0.21136 -0.23155 -0.02248 0.21513 -0.23014 -0.02248 0.56725 -0.23014 -0.02243 0.57037 -0.23138 -0.02159 0.32319 -0.32946 -0.02159 0.45919 -0.32946 -0.02069 0.32319 -0.39573 -0.02069 0.45919 -0.39573 -0.01969 0.32319 -0.32862 -0.01969 0.45919 -0.32862 -0.01843 0.18619 -0.21225 -0.01843 0.18687 -0.21742 -0.01843 0.18687 -0.20707 -0.01843 0.18887 -0.22225 -0.01843 0.18887 -0.20225 -0.01843 0.19205 -0.22639 -0.01843 0.19205 -0.19811 -0.01843 0.19619 -0.22957 -0.01843 0.19619 -0.19493 -0.01843 0.20619 -0.21225 -0.01843 0.20101 -0.23157 -0.01843 0.20101 -0.19293 -0.01843 0.20619 -0.23225 -0.01843 0.20619 -0.19225 -0.01843 0.21136 -0.23157 -0.01843 0.21136 -0.19293 -0.01843 0.21619 -0.22957 -0.01843 0.21619 -0.19493 -0.01843 0.22033 -0.22639 -0.01843 0.22033 -0.19811 -0.01843 0.22351 -0.22225 -0.01843 0.22351 -0.20225 -0.01843 0.22551 -0.21742 -0.01843 0.22551 -0.20707 -0.01843 0.22619 -0.21225 -0.01843 0.55619 -0.21225 -0.01843 0.55687 -0.21742 -0.01843 0.55687 -0.20707 -0.01843 0.55887 -0.22225 -0.01843 0.55887 -0.20225 -0.01843 0.56205 -0.22639 -0.01843 0.56205 -0.19811 -0.01843 0.56619 -0.22957 -0.01843 0.56619 -0.19493 -0.01843 0.57101 -0.23157 -0.01843 0.57101 -0.19293 -0.01843 0.57619 -0.23225 -0.01843 0.57619 -0.19225 -0.01843 0.58136 -0.23157 -0.01843 0.58136 -0.19293 -0.01843 0.58619 -0.22957 -0.01843 0.58619 -0.19493 -0.01843 0.59033 -0.22639 -0.01843 0.59033 -0.19811 -0.01843 0.59351 -0.22225 -0.01843 0.59351 -0.20225 -0.01843 0.59551 -0.21742 -0.01843 0.59551 -0.20707 -0.01843 0.59619 -0.21225 -0.01819 0.32319 -0.39889 -0.01819 0.45919 -0.39889 -0.01561 0.32319 -0.32800 -0.01561 0.45919 -0.32800 -0.01517 0.32319 -0.40113 -0.01517 0.45919 -0.40113 -0.01137 0.32319 -0.40397 -0.01137 0.45919 -0.40397 -0.01095 0.32319 -0.32852 -0.01095 0.45919 -0.32852 -0.00837 0.32319 -0.32954 -0.00837 0.45919 -0.32954 -0.00836 0.32319 -0.40516 -0.00836 0.45919 -0.40516 -0.00577 0.32319 -0.40618 -0.00577 0.45919 -0.40618 -0.00536 0.32319 -0.33073 -0.00536 0.45919 -0.33073 -0.00155 0.32319 -0.33356 -0.00155 0.45919 -0.33356 -0.00150 0.32319 -0.40666 -0.00150 0.45919 -0.40666 0.00147 0.32319 -0.33581 0.00147 0.45919 -0.33581 0.00297 0.32319 -0.40607 0.00297 0.45919 -0.40607 0.00471 0.32319 -0.33991 0.00471 0.45919 -0.33991 0.00486 0.32319 -0.40524 0.00486 0.45919 -0.40524 0.00675 0.32319 -0.40440 0.00675 0.45919 -0.40440 0.00916 0.32319 -0.34553 0.00916 0.45919 -0.34553 0.01017 0.32319 -0.34784 0.01017 0.45919 -0.34784 0.01039 0.32319 -0.40145 0.01039 0.45919 -0.40145 0.01288 0.32319 -0.35403 0.01288 0.45919 -0.35403 0.01391 0.32319 -0.39657 0.01391 0.45919 -0.39657 0.01423 0.32319 -0.39573 0.01423 0.45919 -0.39573 0.01433 0.32319 -0.35735 0.01433 0.45919 -0.35735 0.01563 0.32319 -0.36033 0.01563 0.45919 -0.36033 0.01674 0.32319 -0.36733 0.01674 0.45919 -0.36733 0.01692 0.32319 -0.38861 0.01692 0.45919 -0.38861 0.01709 0.32319 -0.38692 0.01709 0.45919 -0.38692 0.01804 0.32319 -0.37746 0.01804 0.45919 -0.37746 0.01816 0.32319 -0.37628 0.01816 0.45919 -0.37628 0.04157 0.32119 -0.45225 0.04157 0.46119 -0.45225 0.05657 0.32119 -0.45225 0.05657 0.32119 -0.41225 0.05657 0.46119 -0.45225 0.05657 0.46119 -0.41225 0.68658 0.31569 -0.41223 -0.68857 0.32319 0.35975 -0.68858 0.45919 0.35975 -0.27842 0.32319 0.35975 -0.27842 0.45919 0.35975 -0.15843 0.32319 -0.06002 -0.15837 0.32319 -0.06071 -0.15818 0.32319 -0.06137 -0.15788 0.32319 -0.06202 -0.15788 0.45919 -0.06202 -0.15818 0.45919 -0.06137 -0.15837 0.45919 -0.06071 -0.15843 0.45919 -0.06002 -0.14843 0.46119 0.35975 -0.68856 0.33119 0.35975 -0.68856 0.45119 0.35975 -0.15844 0.45919 0.35975 0.05081 0.45919 -0.41225 0.05081 0.32319 -0.41225 -0.40907 0.45919 0.35975 -0.40919 0.32319 0.35975 -0.33979 0.32119 0.35975 -0.34052 0.46119 0.35975 -0.75656 0.26819 0.28925 -0.75656 0.26819 0.32025 -0.75656 0.51419 0.28925 -0.75656 0.51419 0.32025 -0.75456 0.26619 0.28925 -0.75456 0.26619 0.32025 -0.75456 0.26819 0.28725 -0.75456 0.26819 0.32225 -0.75456 0.51419 0.28725 -0.75456 0.51419 0.32225 -0.75456 0.51619 0.28925 -0.75456 0.51619 0.32025 -0.69856 0.32669 0.28725 -0.69856 0.32669 0.32225 -0.69856 0.45569 0.28725 -0.69856 0.45569 0.32225 -0.69656 0.32869 0.28925 -0.69656 0.32869 0.32025 -0.69656 0.45369 0.28925 -0.69656 0.45369 0.32025 -0.63856 0.26619 0.28925 -0.63856 0.26619 0.32025 -0.63856 0.26819 0.28725 -0.63856 0.26819 0.32225 -0.63856 0.32669 0.28725 -0.63856 0.32669 0.32225 -0.63856 0.45569 0.28725 -0.63856 0.45569 0.32225 -0.63856 0.51419 0.28725 -0.63856 0.51419 0.32225 -0.63856 0.51619 0.28925 -0.63856 0.51619 0.32025 -0.63656 0.26819 0.28925 -0.63656 0.26819 0.32025 -0.63656 0.32869 0.28925 -0.63656 0.32869 0.32025 -0.63656 0.45369 0.28925 -0.63656 0.45369 0.32025 -0.63656 0.51419 0.28925 -0.63656 0.51419 0.32025 -0.75656 0.26819 0.32425 -0.75656 0.26819 0.35525 -0.75656 0.51419 0.32425 -0.75656 0.51419 0.35525 -0.75456 0.26619 0.32425 -0.75456 0.26619 0.35525 -0.75456 0.26819 0.32225 -0.75456 0.26819 0.35725 -0.75456 0.51419 0.32225 -0.75456 0.51419 0.35725 -0.75456 0.51619 0.32425 -0.75456 0.51619 0.35525 -0.69856 0.32669 0.32225 -0.69856 0.32669 0.35725 -0.69856 0.45569 0.32225 -0.69856 0.45569 0.35725 -0.69656 0.32869 0.32425 -0.69656 0.32869 0.35525 -0.69656 0.45369 0.32425 -0.69656 0.45369 0.35525 -0.63856 0.26619 0.32425 -0.63856 0.26619 0.35525 -0.63856 0.26819 0.32225 -0.63856 0.26819 0.35725 -0.63856 0.32669 0.32225 -0.63856 0.32669 0.35725 -0.63856 0.45569 0.32225 -0.63856 0.45569 0.35725 -0.63856 0.51419 0.32225 -0.63856 0.51419 0.35725 -0.63856 0.51619 0.32425 -0.63856 0.51619 0.35525 -0.63656 0.26819 0.32425 -0.63656 0.26819 0.35525 -0.63656 0.32869 0.32425 -0.63656 0.32869 0.35525 -0.63656 0.45369 0.32425 -0.63656 0.45369 0.35525 -0.63656 0.51419 0.32425 -0.63656 0.51419 0.35525 -0.42856 0.26819 -0.29149 -0.42856 0.51419 -0.29149 -0.42787 0.26819 -0.28875 -0.42787 0.51419 -0.28875 -0.42684 0.26619 -0.29047 -0.42684 0.51619 -0.29047 -0.39990 0.26819 -0.33960 -0.39990 0.51419 -0.33960 -0.39818 0.26619 -0.33858 -0.39818 0.51619 -0.33858 -0.39716 0.26819 -0.34029 -0.39716 0.51419 -0.34029 -0.35055 0.36269 -0.24268 -0.35055 0.41969 -0.24268 -0.34438 0.26619 -0.24133 -0.34438 0.51619 -0.24133 -0.34368 0.26819 -0.23859 -0.34368 0.36269 -0.23859 -0.34368 0.41969 -0.23859 -0.34368 0.51419 -0.23859 -0.31984 0.36269 -0.29423 -0.31984 0.41969 -0.29423 -0.31571 0.26619 -0.28944 -0.31571 0.51619 -0.28944 -0.31297 0.26819 -0.29013 -0.31297 0.36269 -0.29013 -0.31297 0.41969 -0.29013 -0.31297 0.51419 -0.29013 -0.45928 0.26819 -0.23995 -0.45928 0.51419 -0.23995 -0.45858 0.26819 -0.23721 -0.45858 0.51419 -0.23721 -0.45756 0.26619 -0.23892 -0.45756 0.51619 -0.23892 -0.43061 0.26819 -0.28806 -0.43061 0.51419 -0.28806 -0.42889 0.26619 -0.28703 -0.42889 0.51619 -0.28703 -0.42787 0.26819 -0.28875 -0.42787 0.51419 -0.28875 -0.38127 0.36269 -0.19114 -0.38127 0.41969 -0.19114 -0.37509 0.26619 -0.18978 -0.37509 0.51619 -0.18978 -0.37439 0.26819 -0.18704 -0.37439 0.36269 -0.18704 -0.37439 0.41969 -0.18704 -0.37439 0.51419 -0.18704 -0.35055 0.36269 -0.24268 -0.35055 0.41969 -0.24268 -0.34642 0.26619 -0.23789 -0.34642 0.51619 -0.23789 -0.34368 0.26819 -0.23859 -0.34368 0.36269 -0.23859 -0.34368 0.41969 -0.23859 -0.34368 0.51419 -0.23859 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.50000 -0.86603 -0.00000 -0.50000 -0.86603 0.00000 0.00312 -1.00000 0.00000 0.00000 1.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -0.86602 0.50001 0.00000 0.86606 -0.49995 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 0.94113 0.33805 0.00000 1.00000 -0.00000 0.00000 0.94113 -0.33805 0.00000 0.35593 -0.93451 0.00000 0.19030 -0.98173 0.00000 0.19030 -0.98173 0.00000 0.19032 -0.98172 0.00000 0.19032 -0.98172 0.00000 0.35593 -0.93451 0.00000 0.51098 -0.85959 0.00000 0.51098 -0.85959 0.00000 0.51096 -0.85961 0.00000 0.51096 -0.85961 0.00000 0.65089 -0.75917 0.00000 0.65088 -0.75918 0.00000 0.70379 -0.71041 0.00257 0.65808 -0.75266 0.02070 0.77147 -0.63627 0.00000 0.77146 -0.63628 0.00000 0.77146 -0.63628 0.00000 0.86919 -0.49448 0.00000 0.86919 -0.49448 0.00000 0.94113 -0.33805 0.00000 0.98517 -0.17156 0.00000 0.98517 -0.17156 0.00000 1.00000 0.00000 -0.00000 0.98517 0.17156 -0.00000 0.98517 0.17156 0.00000 0.94113 0.33805 -0.00000 0.86919 0.49448 -0.00000 0.86919 0.49448 0.00000 0.77147 0.63627 -0.00000 0.77147 0.63627 0.00000 0.65087 0.75919 -0.00000 0.65087 0.75919 0.00000 0.51097 0.85960 -0.00000 0.51097 0.85960 0.00000 0.35593 0.93451 -0.00000 0.19031 0.98172 0.00000 0.19031 0.98172 0.00000 0.35593 0.93451 0.00000 0.10510 0.99446 -0.00000 0.10510 0.99446 0.00000 0.10507 0.99447 -0.00000 0.10507 0.99447 0.00000 0.10510 0.99446 -0.00000 0.10511 0.99446 0.00000 0.10495 0.99448 0.00000 0.10495 0.99448 0.00000 0.10495 -0.99448 0.00000 0.10495 -0.99448 -0.00000 0.10511 -0.99446 -0.00000 0.10509 -0.99446 0.00000 0.10509 -0.99446 0.00000 0.10507 -0.99446 0.00000 0.10507 -0.99446 0.00000 0.10511 -0.99446 0.00000 0.70708 -0.70708 0.00000 0.70708 0.70708 0.00000 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.70708 -0.70708 0.00000 0.70708 -0.70708 0.00000 0.70708 0.70708 0.00000 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.70708 -0.70708 0.00000 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.70708 -0.70708 0.00000 0.70708 -0.70708 0.00000 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.70708 -0.70708 0.00000 0.70708 0.70708 0.00000 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.70708 0.70708 0.00000 0.70708 0.70708 0.00000 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.00000 1.00000 0.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 -0.35458 0.93503 0.00000 -0.35458 0.93503 -0.00001 -0.35458 0.93503 -0.00001 -0.35459 0.93502 0.00000 -0.24806 0.96874 0.00000 -0.24804 0.96875 0.00000 -0.02706 0.99963 0.00000 0.19527 0.98075 0.00000 0.30345 0.95285 0.00000 0.30345 0.95285 0.00000 0.30346 0.95285 0.00000 0.30346 0.95284 0.00000 0.22916 0.97339 0.00000 0.07701 0.99703 0.00000 0.07701 -0.99703 0.00000 0.30346 -0.95284 0.00000 0.30346 -0.95285 0.00000 0.30345 -0.95285 0.00000 0.19527 -0.98075 0.00000 -0.24804 -0.96875 0.00000 -0.24806 -0.96874 0.00000 -0.35458 -0.93503 -0.00001 -0.35458 -0.93503 -0.00001 0.22916 -0.97339 0.00000 0.30345 -0.95285 0.00000 -0.02706 -0.99963 0.00000 -0.35459 -0.93502 0.00000 -0.35458 -0.93503 0.00000 0.00000 -1.00000 0.00000 -0.00001 0.00001 1.00000 -0.00001 0.00000 1.00000 0.00000 1.00000 0.00000 -1.00000 -0.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 0.00001 1.00000 0.00001 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00001 0.00001 1.00000 -0.00001 -0.00001 1.00000 -0.00000 0.00001 1.00000 -0.00000 0.00001 1.00000 -0.00001 0.00000 1.00000 -0.00000 -0.00001 1.00000 -0.00001 -0.00000 1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 1.00000 0.00000 0.00000 -0.98822 -0.15302 0.00000 0.98822 -0.15302 0.00000 -0.95347 -0.30149 0.00000 0.95347 -0.30148 0.00000 -0.89616 -0.44373 0.00000 0.89615 -0.44374 0.00000 -0.81798 -0.57524 0.00000 0.81798 -0.57524 0.00000 -0.72058 -0.69337 0.00000 0.72058 -0.69337 0.00000 -0.60599 -0.79548 0.00000 0.60601 -0.79546 0.00000 -0.47786 -0.87844 0.00000 0.47786 -0.87844 0.00000 -0.33803 -0.94113 0.00000 0.33803 -0.94113 0.00000 -0.19046 -0.98169 0.00000 0.19046 -0.98169 0.00000 -0.03809 -0.99927 0.00000 0.03809 -0.99927 0.00000 0.11431 -0.99345 0.00000 -0.11485 -0.99338 0.00000 0.26515 -0.96421 0.00000 -0.26464 -0.96435 0.00000 0.40916 -0.91246 0.00000 -0.40916 -0.91246 0.00000 0.54334 -0.83951 0.00000 -0.54334 -0.83951 0.00000 0.66568 -0.74624 0.00000 -0.66568 -0.74624 0.00000 0.77137 -0.63639 0.00000 -0.77138 -0.63637 0.00000 0.85951 -0.51112 0.00000 -0.85950 -0.51114 0.00000 0.92747 -0.37390 0.00000 -0.92747 -0.37390 0.00000 0.97377 -0.22755 0.00000 -0.97377 -0.22755 0.00000 0.99705 -0.07672 0.00000 -0.99705 -0.07672 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 -0.98823 -0.15299 0.00000 0.98823 -0.15300 0.00000 -0.95346 -0.30151 0.00000 0.95347 -0.30150 0.00000 -0.89617 -0.44371 0.00000 0.89616 -0.44372 0.00000 -0.81798 -0.57525 0.00000 0.81798 -0.57525 0.00000 -0.72058 -0.69337 0.00000 0.72058 -0.69337 0.00000 -0.60599 -0.79547 0.00000 0.60601 -0.79545 0.00000 -0.47785 -0.87844 0.00000 0.47785 -0.87844 0.00000 -0.33804 -0.94113 0.00000 0.33804 -0.94113 0.00000 -0.19046 -0.98169 0.00000 0.19046 -0.98169 0.00000 -0.03809 -0.99927 0.00000 0.03809 -0.99927 0.00000 0.11431 -0.99345 0.00000 -0.11485 -0.99338 0.00000 0.26516 -0.96420 0.00000 -0.26465 -0.96435 0.00000 0.40915 -0.91247 0.00000 -0.40915 -0.91247 0.00000 0.54335 -0.83951 0.00000 -0.54335 -0.83951 0.00000 0.66567 -0.74624 0.00000 -0.66567 -0.74624 0.00000 0.77137 -0.63638 0.00000 -0.77139 -0.63637 0.00000 0.85951 -0.51112 0.00000 -0.85950 -0.51113 0.00000 0.92746 -0.37393 0.00000 -0.92746 -0.37393 0.00000 0.97377 -0.22751 0.00000 -0.97377 -0.22751 0.00000 0.99705 -0.07675 0.00000 -0.99705 -0.07674 0.00000 0.00000 0.00000 0.00000 -0.99705 -0.07672 0.00000 0.99705 -0.07672 0.00000 -0.97377 -0.22755 0.00000 0.97377 -0.22755 0.00000 -0.92747 -0.37390 0.00000 0.92747 -0.37390 0.00000 -0.85950 -0.51114 0.00000 0.85951 -0.51112 0.00000 -0.77138 -0.63637 0.00000 0.77137 -0.63639 0.00000 -0.66568 -0.74624 0.00000 0.66568 -0.74624 0.00000 -0.54334 -0.83951 0.00000 0.54334 -0.83951 0.00000 -0.40916 -0.91246 0.00000 0.40916 -0.91246 0.00000 -0.26464 -0.96435 0.00000 0.26515 -0.96421 0.00000 -0.11485 -0.99338 0.00000 0.11431 -0.99345 0.00000 0.03809 -0.99927 0.00000 -0.03809 -0.99927 0.00000 0.19046 -0.98169 0.00000 -0.19046 -0.98169 0.00000 0.33803 -0.94113 0.00000 -0.33803 -0.94113 0.00000 0.47786 -0.87844 0.00000 -0.47786 -0.87844 0.00000 0.60601 -0.79546 0.00000 -0.60599 -0.79548 0.00000 0.72058 -0.69337 0.00000 -0.72058 -0.69337 0.00000 0.81798 -0.57524 0.00000 -0.81798 -0.57524 0.00000 0.89615 -0.44374 0.00000 -0.89616 -0.44373 0.00000 0.95347 -0.30148 0.00000 -0.95347 -0.30149 0.00000 0.98822 -0.15302 0.00000 -0.98822 -0.15302 -0.00000 1.00000 0.00000 -1.00000 -0.00002 0.00000 1.00000 0.00002 0.00000 -1.00000 -0.00002 0.00000 1.00000 0.00002 0.00000 -1.00000 -0.00002 0.00000 1.00000 0.00001 0.00001 -1.00000 -0.00001 0.00001 1.00000 0.00001 0.00001 -1.00000 -0.00001 0.00001 1.00000 0.00001 0.00001 -1.00000 -0.00001 0.00001 1.00000 0.00001 0.00001 -1.00000 -0.00001 0.00001 1.00000 0.00001 0.00001 -1.00000 -0.00001 0.00001 1.00000 0.00001 0.00002 -1.00000 -0.00001 0.00002 1.00000 0.00000 0.00002 -1.00000 -0.00000 0.00002 1.00000 0.00000 0.00002 -1.00000 -0.00000 0.00002 1.00000 -0.00000 0.00002 -1.00000 0.00000 0.00002 1.00000 -0.00000 0.00002 -1.00000 0.00000 0.00002 1.00000 -0.00001 0.00001 -1.00000 0.00001 0.00001 1.00000 -0.00001 0.00001 -1.00000 0.00001 0.00001 1.00000 -0.00001 0.00001 -1.00000 0.00001 0.00001 1.00000 -0.00001 0.00001 -1.00000 0.00001 0.00001 1.00000 -0.00001 0.00001 -1.00000 0.00001 0.00001 1.00000 -0.00002 0.00001 -1.00000 0.00002 0.00001 1.00000 -0.00002 0.00000 -1.00000 0.00002 0.00000 1.00000 -0.00002 0.00000 -1.00000 0.00002 0.00000 1.00000 -0.00002 -0.00000 -1.00000 0.00002 -0.00000 1.00000 -0.00002 -0.00000 -1.00000 0.00002 -0.00000 1.00000 -0.00002 -0.00001 -1.00000 0.00002 -0.00001 1.00000 -0.00001 -0.00001 -1.00000 0.00001 -0.00001 1.00000 -0.00001 -0.00001 -1.00000 0.00001 -0.00001 1.00000 -0.00001 -0.00001 -1.00000 0.00001 -0.00001 1.00000 -0.00001 -0.00001 -1.00000 0.00001 -0.00001 1.00000 -0.00001 -0.00001 -1.00000 0.00001 -0.00001 1.00000 -0.00000 -0.00002 -1.00000 0.00000 -0.00002 1.00000 -0.00000 -0.00002 -1.00000 0.00000 -0.00002 1.00000 0.00000 -0.00002 -1.00000 -0.00000 -0.00002 1.00000 0.00000 -0.00002 -1.00000 -0.00000 -0.00002 1.00000 0.00001 -0.00002 -1.00000 -0.00001 -0.00002 1.00000 0.00001 -0.00001 -1.00000 -0.00001 -0.00001 1.00000 0.00001 -0.00001 -1.00000 -0.00001 -0.00001 1.00000 0.00001 -0.00001 -1.00000 -0.00001 -0.00001 1.00000 0.00001 -0.00001 -1.00000 -0.00001 -0.00001 1.00000 0.00001 -0.00001 -1.00000 -0.00001 -0.00001 1.00000 0.00002 -0.00000 -1.00000 -0.00002 -0.00000 1.00000 0.00002 -0.00000 -1.00000 -0.00002 -0.00000 1.00000 0.00002 0.00000 -1.00000 -0.00002 0.00000 1.00000 0.00002 0.00000 -1.00000 -0.00002 0.00000 1.00000 0.00002 0.00000 -1.00000 -0.00002 0.00000 1.00000 0.00001 0.00001 -1.00000 -0.00001 0.00001 1.00000 0.00001 0.00001 -1.00000 -0.00001 0.00001 1.00000 0.00001 0.00001 -1.00000 -0.00001 0.00001 1.00000 0.00001 0.00001 -1.00000 -0.00001 0.00001 1.00000 0.00001 0.00001 -1.00000 -0.00001 0.00001 1.00000 0.00001 0.00002 -1.00000 -0.00001 0.00002 1.00000 0.00000 0.00002 -1.00000 -0.00000 0.00002 1.00000 0.00000 0.00002 -1.00000 -0.00000 0.00002 1.00000 -0.00000 0.00002 -1.00000 0.00000 0.00002 1.00000 -0.00000 0.00002 -1.00000 0.00000 0.00002 1.00000 -0.00001 0.00001 -1.00000 0.00001 0.00001 1.00000 -0.00001 0.00001 -1.00000 0.00001 0.00001 1.00000 -0.00001 0.00001 -1.00000 0.00001 0.00001 1.00000 -0.00001 0.00001 -1.00000 0.00001 0.00001 1.00000 -0.00001 0.00001 -1.00000 0.00001 0.00001 1.00000 -0.00002 0.00001 -1.00000 0.00002 0.00001 1.00000 -0.00002 0.00000 -1.00000 0.00002 0.00000 1.00000 -0.00002 0.00000 -1.00000 0.00002 0.00000 1.00000 -0.00002 -0.00000 -1.00000 0.00002 -0.00000 1.00000 -0.00002 -0.00000 -1.00000 0.00002 -0.00000 1.00000 -0.00002 -0.00001 -1.00000 0.00002 -0.00001 1.00000 -0.00001 -0.00001 -1.00000 0.00001 -0.00001 1.00000 -0.00001 -0.00001 -1.00000 0.00001 -0.00001 1.00000 -0.00001 -0.00001 -1.00000 0.00001 -0.00001 1.00000 -0.00001 -0.00001 -1.00000 0.00001 -0.00001 1.00000 -0.00001 -0.00001 -1.00000 0.00001 -0.00001 1.00000 -0.00000 -0.00002 -1.00000 0.00000 -0.00002 1.00000 -0.00000 -0.00002 -1.00000 0.00000 -0.00002 1.00000 0.00000 -0.00002 -1.00000 -0.00000 -0.00002 1.00000 0.00000 -0.00002 -1.00000 -0.00000 -0.00002 1.00000 0.00001 -0.00002 -1.00000 -0.00001 -0.00002 1.00000 0.00001 -0.00001 -1.00000 -0.00001 -0.00001 1.00000 0.00001 -0.00001 -1.00000 -0.00001 -0.00001 1.00000 0.00001 -0.00001 -1.00000 -0.00001 -0.00001 1.00000 0.00001 -0.00001 -1.00000 -0.00001 -0.00001 1.00000 0.00001 -0.00001 -1.00000 -0.00001 -0.00001 1.00000 0.00002 -0.00000 -1.00000 -0.00002 -0.00000 1.00000 0.00002 -0.00000 -1.00000 -0.00002 -0.00000 -1.00000 -0.00002 0.00000 1.00000 -0.00001 0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00001 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00001 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -0.53702 0.65553 -0.53094 0.53702 0.65553 -0.53094 -0.53706 -0.59648 -0.59647 0.53706 -0.59648 -0.59647 -0.00000 1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 -0.96307 0.03483 -0.26698 -0.98392 0.01646 -0.17783 -0.98282 -0.00335 0.18453 -0.69563 0.19671 0.69095 -0.69586 0.19513 0.69116 -0.83576 -0.49641 0.23470 -0.83767 -0.49006 0.24114 -0.85659 -0.25546 0.44832 -0.85661 -0.25566 0.44817 -0.84668 -0.19344 0.49570 -0.85763 -0.38184 0.34449 -0.83587 -0.49630 0.23451 -0.83770 -0.48995 0.24125 -0.80352 -0.57837 0.14087 -0.73301 -0.68016 0.00882 -0.83593 -0.49611 0.23471 -0.59372 -0.78350 -0.18335 -0.72187 -0.69185 -0.01598 -0.61330 -0.77383 -0.15828 -0.73514 -0.67786 0.00868 -0.77023 -0.63370 0.07196 -0.77033 -0.63355 0.07215 -0.59377 -0.78348 -0.18330 -0.34340 -0.83524 -0.42948 -0.61244 -0.77461 -0.15779 -0.48488 -0.82160 -0.29978 -0.34466 -0.83877 -0.42152 -0.38764 -0.83744 -0.38525 -0.27398 -0.83639 -0.47476 -0.15464 -0.81909 -0.55243 0.00421 -0.77403 -0.63314 -0.11367 -0.80916 -0.57649 0.00409 -0.77148 -0.63624 0.19586 -0.68061 -0.70598 0.09145 -0.73339 -0.67363 0.26682 -0.63395 -0.72589 0.19652 -0.67823 -0.70808 0.26732 -0.63435 -0.72536 0.44058 -0.49688 -0.74766 0.40940 -0.52417 -0.74675 0.00000 0.00000 -1.00000 0.69719 -0.18548 -0.69248 0.44091 -0.49609 -0.74799 0.69472 -0.20182 -0.69039 0.50448 -0.43428 -0.74626 0.66015 -0.24456 -0.71020 0.72526 -0.13483 -0.67514 0.85588 0.30666 -0.41645 0.85163 0.23501 -0.46851 0.83346 0.13269 -0.53642 0.84638 0.19426 -0.49589 0.83411 0.13219 -0.53552 0.69580 -0.19558 -0.69109 0.81232 0.06416 -0.57967 0.77630 -0.03481 -0.62940 0.83275 0.50276 -0.23186 0.84806 0.43881 -0.29705 0.84667 0.19272 -0.49599 0.84673 0.19309 -0.49574 0.83622 0.49557 -0.23483 0.85576 0.36175 -0.36987 0.61710 0.77060 0.15927 0.83334 0.50084 -0.23390 0.83337 0.50074 -0.23400 0.73839 0.67431 -0.00868 0.77041 0.63355 -0.07129 0.73575 0.67720 -0.00883 0.76316 0.64343 -0.05994 0.56148 0.79726 0.22163 0.61711 0.77059 0.15926 0.50371 0.81497 0.28653 0.55934 0.79792 0.22465 0.38876 0.83641 0.38637 0.31001 0.83704 0.45084 0.27449 0.83577 0.47555 0.30996 0.83767 0.44970 0.07447 0.79920 0.59643 0.14792 0.81567 0.55929 -0.00423 0.77176 0.63590 0.07462 0.79860 0.59722 -0.13064 0.71647 0.68528 -0.32577 0.59504 0.73471 -0.19687 0.67661 0.70954 -0.43957 0.50043 0.74589 -0.00412 0.76791 0.64055 -0.19599 0.68008 0.70645 -0.25162 0.64562 0.72102 -0.49775 0.44540 0.74422 -0.58412 0.34909 0.73276 -0.42895 0.51076 0.74507 -0.38147 0.55187 0.74156 -0.54551 0.39477 0.73931 -0.50861 0.43548 0.74275 -0.69792 0.17917 0.69340 -0.43942 0.50120 0.74546 -0.45655 0.48561 0.74549 -0.47531 -0.60549 -0.63832 0.86151 -0.48570 -0.14798 0.86112 -0.48622 -0.14851 0.97267 -0.20148 0.11545 0.59780 0.52734 0.60378 0.59829 0.52695 0.60363 0.76345 0.37340 0.52698 0.47422 0.60775 0.63699 0.25971 0.70789 0.65684 -0.51529 0.73115 0.44710 -0.57300 0.70762 0.41346 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.41945 0.89045 0.17652 0.45589 0.86278 0.21857 -0.23255 0.86656 -0.44158 -0.67493 -0.52868 -0.51475 -0.65838 0.27043 -0.70243 -0.69141 0.16099 -0.70429 -0.70611 0.08921 -0.70246 -0.65844 0.27025 -0.70244 -0.63425 0.33931 -0.69469 -0.62873 0.35316 -0.69281 -0.54119 0.52521 -0.65671 -0.58501 0.44815 -0.67596 -0.54288 0.52553 -0.65506 -0.58572 0.44889 -0.67485 -0.54337 0.52574 -0.65449 -0.47768 0.62364 -0.61878 -0.43355 0.68213 -0.58884 -0.43347 0.68223 -0.58879 -0.33617 0.78270 -0.52381 -0.30163 0.81404 -0.49634 -0.30150 0.81415 -0.49625 -0.15250 0.91257 -0.37943 -0.14115 0.91794 -0.37075 0.00263 0.96949 -0.24512 0.00249 0.96946 -0.24524 -0.12171 0.92976 -0.34746 0.15155 0.98264 -0.10705 0.12743 0.98340 -0.12917 0.12746 0.98340 -0.12915 0.15010 0.98297 -0.10603 0.37391 0.91847 0.12888 0.29322 0.95526 0.03873 0.37393 0.91893 0.12551 0.29682 0.95425 0.03610 0.43120 0.88174 0.19131 0.54932 0.76584 0.33426 0.43801 0.87910 0.18797 0.56183 0.74990 0.34928 0.56294 0.74839 0.35073 0.67359 0.52766 0.51755 0.56785 0.74669 0.34642 0.66039 0.56923 0.48976 0.70486 0.42270 0.56965 0.67451 0.52835 0.51564 0.71569 0.36157 0.59754 0.72402 0.30750 0.61744 0.72400 0.30773 0.61736 0.73118 0.13106 0.66948 0.72916 0.09877 0.67718 0.73031 0.11360 0.67360 0.70646 -0.08933 0.70209 0.70258 -0.10721 0.70348 0.65716 -0.26993 0.70376 0.70359 -0.10782 0.70238 0.63193 -0.34387 0.69456 0.65893 -0.27045 0.70191 0.63083 -0.34461 0.69520 0.58429 -0.44761 0.67694 0.63227 -0.34498 0.69370 0.51708 -0.56722 0.64100 0.58488 -0.44823 0.67602 0.51607 -0.56773 0.64137 0.47787 -0.62391 0.61837 0.51720 -0.56844 0.63982 0.36144 -0.75942 0.54097 0.36063 -0.76021 0.54039 0.32655 -0.79247 0.51512 0.36153 -0.76083 0.53892 0.17313 -0.90178 0.39599 0.17287 -0.90193 0.39578 0.12119 -0.92816 0.35190 -0.00000 -1.00000 0.00000 -0.10609 -0.98349 0.14661 -0.04782 -0.97826 0.20179 0.14345 -0.91754 0.37087 0.00886 -0.96751 0.25269 0.16762 -0.90587 0.38898 0.12156 -0.92865 0.35046 0.03590 -0.95997 0.27780 -0.12747 -0.98374 0.12653 -0.11430 -0.98372 0.13864 -0.12751 -0.98381 0.12594 -0.37410 -0.91894 -0.12493 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.37380 -0.91851 -0.12885 -0.53131 -0.78886 -0.30887 -0.53100 -0.78923 -0.30848 -0.56318 -0.74821 -0.35072 -0.52851 -0.79069 -0.30900 -0.56244 -0.74774 -0.35290 -0.66461 -0.55746 -0.49753 -0.67553 -0.52917 -0.51346 -0.66454 -0.55763 -0.49743 -0.71966 -0.30485 -0.62382 -0.72741 -0.05592 -0.68393 -0.72736 -0.05535 -0.68402 -0.66422 -0.55764 -0.49783 -0.72381 -0.30765 -0.61761 -0.72487 -0.29966 -0.62030 -0.72400 -0.30749 -0.61748 -0.73163 -0.10182 -0.67406 -0.04961 0.95565 -0.29028 0.02282 0.97373 -0.22655 0.07083 0.98045 -0.18359 -0.08777 0.94329 -0.32017 0.04539 0.97784 -0.20436 -0.04963 0.95565 -0.29029 -0.08539 0.94302 -0.32160 -0.19135 0.89173 -0.41012 -0.19145 0.89168 -0.41019 -0.24219 0.85906 -0.45096 -0.37972 0.74201 -0.55247 -0.37957 0.74216 -0.55237 -0.37238 0.74934 -0.54757 -0.37989 0.74166 -0.55284 -0.49391 0.60289 -0.62656 -0.40111 0.71698 -0.57013 -0.58334 0.45454 -0.67313 -0.52675 0.55241 -0.64605 -0.52691 0.55215 -0.64614 -0.58187 0.45390 -0.67484 -0.64290 0.31630 -0.69759 -0.65153 0.29216 -0.70010 -0.65161 0.29194 -0.70012 -0.64306 0.31541 -0.69785 -0.65172 0.29138 -0.70026 -0.70320 0.10799 -0.70274 -0.71297 0.05292 -0.69920 -0.71302 0.05262 -0.69917 -0.73066 -0.10850 -0.67406 -0.73002 -0.21509 -0.64870 -0.71015 0.07166 -0.70039 -0.71292 0.05576 -0.69902 -0.73001 -0.21521 -0.64866 -0.72830 -0.25972 -0.63414 -0.73099 -0.20934 -0.64949 -0.71580 -0.36156 -0.59742 -0.69587 -0.45860 -0.55268 -0.71638 -0.36200 -0.59646 -0.69643 -0.45717 -0.55316 -0.60796 -0.67738 -0.41418 -0.63086 -0.63496 -0.44592 -0.63083 -0.63501 -0.44588 -0.60961 -0.67521 -0.41529 -0.63087 -0.63526 -0.44548 -0.47997 -0.84139 -0.24839 -0.15883 -0.98275 0.09478 -0.25149 -0.96785 0.00304 -0.34492 -0.93377 -0.09543 -0.34449 -0.93397 -0.09498 -0.49832 -0.82392 -0.26987 -0.48061 -0.84091 -0.24877 -0.49844 -0.82372 -0.27026 -0.49825 -0.82391 -0.27004 0.10786 -0.93432 0.33972 0.14560 -0.91691 0.37160 0.10748 -0.93467 0.33887 0.14614 -0.91682 0.37160 0.26638 -0.84179 0.46950 0.26645 -0.84174 0.46955 0.14092 -0.91825 0.37009 0.43687 -0.67851 0.59057 0.41165 -0.70761 0.57432 0.41128 -0.70801 0.57407 0.57684 -0.46412 0.67220 0.57871 -0.46053 0.67306 0.41151 -0.70776 0.57423 0.43833 -0.67588 0.59250 0.57893 -0.46009 0.67317 0.59144 -0.43511 0.67888 0.59123 -0.43553 0.67879 0.57830 -0.46182 0.67252 0.67627 -0.21412 0.70485 0.67754 -0.20966 0.70497 0.67618 -0.21436 0.70486 0.67751 -0.20965 0.70500 0.71187 -0.06079 0.69968 0.72651 0.05139 0.68523 0.71144 -0.06074 0.70012 0.72638 0.05542 0.68506 0.72662 0.29795 0.61908 0.72515 0.05317 0.68653 0.73098 0.16115 0.66309 0.73099 0.16159 0.66298 0.72772 0.26179 0.63395 0.72250 0.31490 0.61549 0.72251 0.31485 0.61551 0.72247 0.31516 0.61539 0.67417 0.53683 0.50725 0.72591 0.26269 0.63564 0.71375 0.37166 0.59367 0.68028 0.50658 0.52971 0.57293 0.73725 0.35807 0.69019 0.47873 0.54264 0.66666 0.55129 0.50164 0.66657 0.55155 0.50148 0.60771 0.67900 0.41187 0.60758 0.67924 0.41168 0.56351 0.74733 0.35207 0.42863 0.88530 0.18034 0.60338 0.68298 0.41167 0.45557 0.86305 0.21818 0.22793 0.96275 0.14548 0.22813 0.96272 0.14536 0.29956 0.95325 0.03974 0.40831 0.89793 0.16433 0.29247 0.95549 0.03882 0.10724 0.98345 -0.14604 0.16839 0.98186 -0.08711 0.14234 0.98332 -0.11324 0.28914 0.95655 0.03743 0.18028 0.98056 -0.07741 0.22528 0.97379 -0.03125 -0.80684 -0.56231 0.18117 -0.23497 -0.93978 0.24820 -0.19996 -0.94780 0.24838 -0.13253 -0.95952 0.24853 -0.05603 -0.96742 0.24691 -0.63401 -0.74184 0.21842 -0.56248 -0.79507 0.22687 -0.56219 -0.79527 0.22691 -0.40071 -0.88373 0.24176 -0.55813 -0.79724 0.22998 -0.23506 -0.93968 0.24851 -0.19936 -0.94788 0.24857 -0.19910 -0.94793 0.24857 -0.84267 -0.51094 0.16986 -0.80797 -0.56107 0.17994 -0.63093 -0.74473 0.21749 -0.78733 -0.58762 0.18659 -0.99672 0.07556 0.02895 -0.99891 0.00454 0.04638 -0.96663 -0.23395 0.10439 -0.99203 -0.10153 0.07460 -0.97178 -0.21319 0.10098 -0.96806 -0.22788 0.10452 -0.97197 -0.21231 0.10097 -0.83804 -0.51877 0.16899 -0.92327 -0.35926 0.13604 -0.92329 -0.35921 0.13603 -0.99401 0.10707 0.02185 -0.99402 0.10700 0.02187 -0.93403 0.35371 -0.04983 -0.99880 0.00500 0.04870 -0.99666 0.07647 0.02870 -0.99671 0.07578 0.02889 -0.93215 0.35918 -0.04564 -0.94208 0.33324 -0.03800 -0.92752 0.37049 -0.04946 -0.97571 0.21888 -0.00877 -0.52957 0.82812 -0.18379 -0.61877 0.76818 -0.16439 -0.53358 0.82522 -0.18522 -0.62278 0.76459 -0.16598 -0.76748 0.62915 -0.12305 -0.62052 0.76666 -0.16488 -0.76474 0.63257 -0.12261 -0.82994 0.54868 -0.10070 -0.93208 0.35883 -0.04976 -0.82998 0.54869 -0.10037 -0.82974 0.54903 -0.10047 -0.43030 0.89828 -0.08904 -0.41866 0.88462 -0.20535 -0.27730 0.93453 -0.22305 -0.31865 0.92228 -0.21879 -0.21118 0.94974 -0.23108 -0.04681 0.96936 -0.24115 -0.04579 0.96940 -0.24118 -0.19781 0.95174 -0.23464 -0.11119 0.96435 -0.24015 -0.04264 0.96888 -0.24384 0.02125 0.96885 -0.24675 0.08870 0.96435 -0.24931 0.09213 0.96362 -0.25090 0.28989 0.92522 -0.24481 0.17848 0.95156 -0.25036 0.30464 0.91970 -0.24768 0.28787 0.92494 -0.24822 0.30425 0.91990 -0.24743 0.47589 0.84692 -0.23719 0.68163 0.70094 -0.20990 0.68188 0.70071 -0.20986 0.47623 0.84674 -0.23716 0.51930 0.82244 -0.23218 0.47642 0.84686 -0.23634 0.51833 0.82317 -0.23181 0.76409 0.61510 -0.19449 0.87522 0.45706 -0.15839 0.87515 0.45718 -0.15841 0.68208 0.70053 -0.20982 0.75710 0.62423 -0.19270 0.92791 0.34747 -0.13505 0.99841 -0.04656 -0.03172 0.93070 0.33958 -0.13594 0.99609 0.06229 -0.06266 0.97799 0.18642 -0.09368 0.92368 0.35868 -0.13475 0.99428 0.08709 -0.06184 0.83077 0.52858 -0.17441 0.97085 -0.23921 0.01534 0.99739 -0.06504 -0.03136 0.99606 0.06261 -0.06275 0.99604 0.06295 -0.06284 0.84858 -0.52102 0.09191 0.95989 -0.27923 0.02528 0.97059 -0.24026 0.01532 0.95992 -0.27911 0.02567 0.64137 -0.75056 0.15906 0.86242 -0.49879 0.08620 0.84890 -0.52049 0.09199 0.86229 -0.49907 0.08593 0.86267 -0.49844 0.08576 0.70527 -0.69418 0.14387 0.64277 -0.74928 0.15944 0.70543 -0.69430 0.14254 0.70595 -0.69380 0.14240 0.25410 -0.94042 0.22591 0.49295 -0.84854 0.19232 0.41552 -0.88632 0.20443 0.49309 -0.84872 0.19113 0.49410 -0.84818 0.19095 -0.19753 -0.94806 0.24932 0.04901 -0.96873 0.24322 0.00000 -1.00000 0.00000 0.04491 -0.96888 0.24342 0.15296 -0.95968 0.23584 0.22841 -0.94639 0.22839 0.25371 -0.94055 0.22582 0.23666 -0.94455 0.22764 0.23687 -0.94450 0.22762 0.99806 0.01707 0.05995 0.99445 -0.00271 -0.10514 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.66761 0.24296 0.70375 -0.71319 -0.05463 -0.69884 -0.41063 -0.83154 -0.37407 -0.19638 -0.88619 -0.41965 -0.37320 -0.74848 -0.54818 -0.44968 -0.66186 -0.59978 -0.54889 -0.51827 -0.65583 -0.52738 -0.55135 -0.64644 -0.54919 -0.51777 -0.65598 -0.40096 -0.71603 -0.57143 -0.65736 -0.27988 -0.69967 -0.62527 -0.36181 -0.69147 -0.54760 -0.51770 -0.65736 -0.53285 -0.53795 -0.65320 -0.64348 -0.31445 -0.69789 -0.68397 -0.18815 -0.70483 -0.64491 -0.30778 -0.69954 -0.71306 -0.05541 -0.69891 -0.73102 0.20989 -0.64928 -0.72232 0.01339 -0.69143 -0.71314 -0.05315 -0.69900 -0.72256 0.01348 -0.69117 -0.72257 0.01356 -0.69116 -0.67708 0.52153 -0.51919 -0.67714 0.52136 -0.51929 -0.69583 0.45904 -0.55236 -0.72856 0.25161 -0.63710 -0.73073 0.21172 -0.64901 -0.72869 0.25171 -0.63691 -0.72873 0.25112 -0.63710 -0.37500 0.92019 -0.11240 -0.51148 0.80557 -0.29907 -0.37391 0.91886 -0.12603 -0.52106 0.79996 -0.29758 -0.52956 0.79018 -0.30853 -0.56260 0.74744 -0.35330 -0.56240 0.74771 -0.35304 -0.65542 0.58291 -0.48026 -0.65547 0.58278 -0.48034 -0.67471 0.52853 -0.51520 -0.67471 0.52851 -0.51521 -0.72192 0.32610 -0.61032 -0.72192 0.32608 -0.61033 -0.65278 0.58508 -0.48120 -0.72382 0.30766 -0.61761 -0.72385 0.30741 -0.61770 -0.73133 0.09907 -0.67479 -0.72902 0.08034 -0.67976 -0.72565 0.25222 -0.64017 -0.69537 -0.13922 -0.70503 -0.70654 -0.08934 -0.70201 -0.69270 -0.15627 -0.70409 -0.65845 -0.27046 -0.70235 -0.63566 -0.33325 -0.69633 -0.65920 -0.27057 -0.70160 -0.63635 -0.33398 -0.69535 -0.55165 -0.50802 -0.66151 -0.58506 -0.44820 -0.67589 -0.55305 -0.50810 -0.66028 -0.58578 -0.44891 -0.67479 -0.47772 -0.62371 -0.61868 -0.44603 -0.66672 -0.59711 -0.44621 -0.66649 -0.59723 -0.33623 -0.78283 -0.52357 -0.02189 -0.96110 -0.27532 -0.35610 -0.76322 -0.53916 -0.09844 -0.93609 -0.33770 0.12695 -0.98263 -0.13537 -0.14121 -0.91830 -0.36985 -0.02537 -0.96262 -0.26967 -0.12193 -0.93144 -0.34286 0.12744 -0.98342 -0.12905 0.12746 -0.98342 -0.12903 0.12439 -0.98340 -0.13214 0.37383 -0.91823 0.13081 0.37394 -0.91897 0.12517 0.26755 -0.96347 0.01164 0.40666 -0.89899 0.16261 0.27272 -0.96206 0.00873 0.37368 -0.91695 0.13987 0.53611 -0.78253 0.31660 0.65216 -0.58931 0.47687 0.67387 -0.52787 0.51696 0.56314 -0.74863 0.34989 0.56332 -0.74840 0.35011 0.72565 -0.04920 0.68631 0.69077 -0.47857 0.54205 0.67481 -0.52861 0.51497 0.72434 -0.30085 0.62034 0.72350 -0.30752 0.61805 0.72599 -0.28360 0.62651 0.72335 -0.30721 0.61838 0.73010 -0.10161 0.67575 0.65743 0.27004 0.70347 0.72786 -0.04885 0.68398 0.70609 0.08920 0.70249 0.58451 0.44776 0.67665 0.68377 0.19066 0.70435 0.65876 0.27038 0.70208 0.68310 0.19012 0.70515 0.47807 0.62417 0.61794 0.54284 0.52458 0.65585 0.58481 0.44820 0.67610 0.59659 0.42413 0.68132 0.32669 0.79283 0.51448 0.40394 0.71501 0.57060 0.46695 0.63871 0.61156 0.12124 0.92855 0.35086 0.25509 0.84957 0.46170 0.29886 0.81589 0.49498 -0.12401 0.98384 0.12917 -0.08885 0.98260 0.16310 0.10855 0.93397 0.34047 0.12285 0.92765 0.35266 0.00927 0.96715 0.25403 -0.04775 0.97825 0.20186 0.43845 0.67598 0.59230 0.37381 0.74850 0.54773 0.26586 0.84295 0.46772 0.37147 0.74982 0.54752 0.26769 0.84058 0.47092 0.10821 0.93422 0.33989 0.12293 0.92763 0.35269 0.12265 0.92776 0.35246 0.67769 0.20934 0.70492 0.66768 0.24319 0.70361 0.57936 0.45925 0.67337 0.56980 0.47782 0.66859 0.57906 0.46016 0.67302 0.56994 0.47770 0.66855 0.43856 0.67587 0.59234 0.56718 0.47986 0.66935 0.37257 0.74928 0.54752 0.73055 -0.14530 0.66722 0.72509 -0.04096 0.68743 0.72645 -0.05597 0.68494 0.67678 0.21548 0.70394 0.71028 0.06326 0.70107 0.70703 0.08203 0.70241 0.68940 -0.48147 0.54122 0.72660 -0.05323 0.68499 0.72906 -0.24606 0.63869 0.72235 -0.31615 0.61502 0.72237 -0.31601 0.61508 0.71594 -0.35778 0.59951 0.67174 -0.54189 0.50509 0.72798 -0.24676 0.63965 0.72238 -0.31591 0.61512 0.72220 -0.31746 0.61453 0.62421 -0.64836 0.43588 0.62394 -0.64889 0.43548 0.68672 -0.48375 0.54258 0.57221 -0.73827 0.35711 0.66628 -0.55229 0.50104 0.56233 -0.74873 0.35097 0.62073 -0.65190 0.43558 0.42297 -0.88859 0.17748 0.47161 -0.84954 0.23636 0.47129 -0.84982 0.23598 0.41976 -0.89038 0.17617 0.29978 -0.95320 0.03931 0.30478 -0.93423 0.18529 0.21162 -0.96457 0.15752 0.41979 -0.89014 0.17730 0.29187 -0.95569 0.03820 0.14193 -0.98341 -0.11299 0.16359 -0.98222 -0.09206 0.22482 -0.97388 -0.03171 0.18002 -0.98059 -0.07766 0.28423 -0.95822 0.03211 0.02247 -0.97367 -0.22686 0.07057 -0.98042 -0.18382 -0.09334 -0.94118 -0.32476 0.04034 -0.97709 -0.20897 0.10714 -0.98345 -0.14614 0.16368 -0.98223 -0.09178 -0.05032 -0.95543 -0.29089 -0.05033 -0.95543 -0.29090 -0.05018 -0.95548 -0.29077 -0.09059 -0.94098 -0.32610 -0.23905 -0.86224 -0.44654 -0.44053 -0.67678 -0.58983 -0.31122 -0.80611 -0.50331 -0.19217 -0.89123 -0.41082 -0.19231 -0.89115 -0.41093 -0.37401 0.91878 -0.12635 -0.67716 0.52131 -0.51932 -0.69376 0.46408 -0.55075 -0.61052 0.67420 -0.41559 -0.53825 0.77965 -0.32004 -0.60935 0.67580 -0.41471 -0.53814 0.77928 -0.32114 -0.47892 0.84225 -0.24749 -0.53838 0.77951 -0.32016 -0.47945 0.84189 -0.24769 -0.53855 0.77968 -0.31947 -0.34395 0.93423 -0.09440 -0.34490 0.93378 -0.09541 -0.34406 0.93418 -0.09450 -0.25320 0.96741 0.00109 -0.19972 0.97827 0.05572 -0.15931 0.98261 0.09538 -0.12751 0.98381 0.12594 -0.11429 0.98372 0.13865 -0.12748 0.98374 0.12652 0.10314 0.93602 0.33648 0.12150 0.92817 0.35176 0.10311 0.93616 0.33611 -0.77631 -0.61862 -0.12103 0.34881 0.91229 0.21460 0.25774 0.93958 0.22529 0.40858 0.88924 0.20568 0.42330 0.88283 0.20356 0.42348 0.88275 0.20353 0.64987 0.74363 0.15708 0.55203 0.81410 0.18028 0.65112 0.74246 0.15745 0.63794 0.75307 0.16096 0.85543 0.51011 0.08956 0.81477 0.57008 0.10558 0.65010 0.74342 0.15716 0.74186 0.65747 0.13182 0.97352 0.22823 0.01271 0.93297 0.35704 0.04576 0.85413 0.51230 0.08945 0.93293 0.35692 0.04750 0.99535 -0.07076 -0.06537 0.99531 -0.07125 -0.06549 0.98923 -0.12421 -0.07742 0.99167 -0.10609 -0.07308 0.99503 -0.07511 -0.06539 0.99162 0.12835 -0.01491 0.97310 0.23004 0.01261 0.99166 0.12821 -0.01334 0.91923 -0.36916 -0.13686 0.91914 -0.36937 -0.13691 0.98532 -0.15148 -0.07877 0.67627 -0.70700 -0.20690 0.92924 -0.34250 -0.13862 0.87202 -0.46271 -0.15966 0.87183 -0.46304 -0.15974 0.82902 -0.53115 -0.17497 0.75723 -0.62300 -0.19616 0.46899 -0.85108 -0.23602 0.75229 -0.62934 -0.19493 0.75229 -0.62934 -0.19492 0.67356 -0.70831 -0.21122 0.67332 -0.70852 -0.21126 0.50995 -0.82803 -0.23308 0.50990 -0.82805 -0.23308 0.46818 -0.85102 -0.23783 0.46781 -0.85122 -0.23786 0.28097 -0.92707 -0.24817 0.29663 -0.92225 -0.24794 0.29686 -0.92217 -0.24793 0.17348 -0.95246 -0.25043 0.08839 -0.96396 -0.25092 0.28176 -0.92763 -0.24518 -0.11519 -0.96379 -0.24051 -0.21836 -0.94859 -0.22912 -0.04449 -0.96879 -0.24385 -0.05293 -0.96852 -0.24324 -0.05340 -0.96850 -0.24321 0.01943 -0.96891 -0.24664 0.08671 -0.96456 -0.24919 -0.20097 -0.95171 -0.23209 -0.26021 -0.93875 -0.22593 -0.32615 -0.91998 -0.21741 -0.54591 -0.81728 -0.18452 -0.63963 -0.75196 -0.15944 -0.63967 -0.75194 -0.15943 -0.53869 -0.82259 -0.18210 -0.83364 -0.54461 -0.09196 -0.36058 -0.90804 -0.21320 -0.85271 -0.51441 -0.09091 -0.77343 -0.62231 -0.12057 -0.84990 -0.51955 -0.08801 -0.64250 -0.74928 -0.16051 -0.94160 -0.33441 -0.03945 -0.93075 -0.36265 -0.04681 -0.94135 -0.33520 -0.03871 -0.85282 -0.51424 -0.09087 -0.93801 -0.34337 -0.04718 -0.99730 -0.06621 0.03167 -0.99553 -0.09067 0.02653 -0.99553 -0.09060 0.02655 -0.97878 -0.20483 -0.00487 -0.99728 -0.06662 0.03156 -0.99727 -0.06681 0.03151 -0.99869 0.01049 0.05013 -0.96396 0.24367 0.10683 -0.99040 0.11436 0.07762 -0.96674 0.23291 0.10569 -0.97147 0.21448 0.10124 -0.96296 0.24764 0.10669 -0.91113 0.38654 0.14290 -0.91109 0.38663 0.14292 -0.83744 0.51877 0.17196 -0.83748 0.51871 0.17194 -0.77844 0.59897 0.18777 -0.62179 0.75210 0.21846 -0.77755 0.59984 0.18873 -0.77766 0.59970 0.18870 -0.62628 0.74793 0.21996 -0.51003 0.82809 0.23267 -0.15874 0.95441 0.25278 -0.51027 0.82795 0.23264 -0.51007 0.82807 0.23266 -0.00000 1.00000 -0.00000 0.19941 0.95211 0.23176 0.07900 0.96749 0.24024 0.14083 0.96135 0.23659 0.01258 0.96960 0.24439 0.14080 0.96123 0.23708 -0.16702 0.95389 0.24941 -0.05375 0.96752 0.24700 -0.12985 0.95985 0.24866 -0.16829 0.95383 0.24876 -0.23112 0.94059 0.24875 -0.37947 0.89256 0.24361 -0.00000 1.00000 0.00000 0.14395 -0.85569 0.49707 -0.54080 0.78760 -0.29534 -0.54057 0.78786 -0.29505 -0.54071 0.78775 -0.29511 -0.42909 0.88111 -0.19881 -0.50762 0.85632 -0.09512 -0.54324 0.83851 -0.04234 -0.50617 0.85722 -0.09464 -0.54313 0.83863 -0.04137 -0.60050 0.79815 0.04855 -0.69632 0.67257 0.25058 -0.69102 0.68256 0.23792 -0.59399 0.80304 0.04795 -0.69149 0.68249 0.23676 -0.75473 0.41278 0.50990 -0.74893 0.48338 0.45327 -0.69117 0.67857 0.24865 -0.75072 0.48378 0.44987 -0.69126 0.68250 0.23741 -0.71053 0.10996 0.69502 -0.74596 0.28820 0.60040 -0.74589 0.28759 0.60078 -0.75354 0.41592 0.50911 -0.75005 0.28801 0.59538 -0.75025 0.48375 0.45068 -0.50161 -0.32797 0.80051 -0.57432 -0.20910 0.79148 -0.69091 0.04870 0.72130 -0.65386 -0.05456 0.75465 -0.69120 0.04244 0.72142 -0.68517 0.02316 0.72801 -0.46574 -0.38052 0.79893 -0.47673 -0.36575 0.79935 -0.50017 -0.33468 0.79863 -0.57607 -0.21031 0.78988 -0.57609 -0.21028 0.78988 -0.22911 -0.63567 0.73718 -0.38068 -0.49242 0.78269 -0.25131 -0.61215 0.74974 -0.50105 -0.33083 0.79969 -0.03102 -0.77730 0.62836 -0.25012 -0.61712 0.74606 -0.25030 -0.61696 0.74613 -0.22767 -0.63574 0.73756 -0.22745 -0.63592 0.73747 -0.03775 -0.77320 0.63304 -0.03784 -0.77314 0.63310 -0.03072 -0.77701 0.62874 -0.03043 -0.77716 0.62856 0.11643 -0.84644 0.51960 0.10978 -0.84371 0.52545 0.51158 -0.85480 0.08714 0.42225 -0.88138 0.21182 0.37868 -0.88761 0.26220 0.33123 -0.88861 0.31726 0.30349 -0.88746 0.34686 0.33027 -0.88921 0.31659 0.20304 -0.87196 0.44549 0.23101 -0.87925 0.41659 0.46280 -0.87188 0.16013 0.51271 -0.85369 0.09137 0.54580 -0.83692 0.04070 0.51161 -0.85467 0.08832 0.60711 -0.79246 -0.05848 0.63970 -0.75861 -0.12369 0.60622 -0.79298 -0.06058 0.63863 -0.75955 -0.12344 0.69838 -0.67061 -0.25008 0.72897 -0.58473 -0.35593 0.69837 -0.66718 -0.25914 0.72919 -0.58108 -0.36143 0.69573 -0.66585 -0.26944 0.74843 -0.31464 -0.58383 0.74302 -0.28145 -0.60722 0.74869 -0.49019 -0.44628 0.74871 -0.49003 -0.44643 0.74602 -0.26833 -0.60947 0.70866 -0.11877 -0.69548 0.70870 -0.11890 -0.69542 0.62887 0.09722 -0.77141 0.74579 -0.26682 -0.61041 0.62876 0.10000 -0.77114 0.64578 0.06188 -0.76101 0.64579 0.06186 -0.76100 0.29931 0.57007 -0.76513 0.44033 0.40275 -0.80243 0.38079 0.47998 -0.79033 0.45353 0.38999 -0.80138 0.39695 0.46395 -0.79195 0.62818 0.10675 -0.77071 0.55843 0.23493 -0.79559 0.55853 0.23477 -0.79557 0.14623 0.70150 -0.69751 0.17413 0.67901 -0.71318 0.11448 0.72469 -0.67950 0.11471 0.72453 -0.67963 -0.10760 0.84374 -0.52585 -0.10769 0.84378 -0.52577 -0.16072 0.86301 -0.47894 -0.03407 0.81108 -0.58394 -0.32084 0.88936 -0.32574 -0.34479 0.88950 -0.29986 -0.42423 0.88201 -0.20516 -0.26057 0.88340 -0.38951 -0.16160 0.86149 -0.48137 -0.10778 0.84381 -0.52570 -0.51397 -0.72925 0.45170 -0.92036 0.11964 -0.37233 -0.85746 0.24414 -0.45294 -0.74650 0.38851 -0.54018 -0.47531 0.60549 -0.63832 0.86121 0.48610 -0.14838 0.97108 0.21439 0.10503 0.95943 -0.00957 0.28179 0.86160 -0.23968 0.44743 0.76345 -0.37340 0.52698 0.59828 -0.52697 0.60363 0.59780 -0.52734 0.60378 0.25971 -0.70789 0.65684 0.07294 -0.75848 0.64760 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.98715 -0.01275 -0.15928 -0.92638 0.00429 -0.37657 -0.13056 0.00000 -0.99144 -0.13056 -0.00000 -0.99144 -0.38277 0.00000 -0.92385 -0.38277 -0.00000 -0.92385 -0.60879 0.00000 -0.79333 -0.60879 -0.00000 -0.79333 -0.79333 0.00000 -0.60879 -0.79333 -0.00000 -0.60879 -0.92385 0.00000 -0.38276 -0.92385 -0.00000 -0.38276 0.86607 -0.00000 0.49992 0.86607 0.00000 0.49992 0.50008 -0.00000 0.86598 0.50008 0.00000 0.86598 0.13030 -0.00000 0.99147 0.13030 0.00000 0.99147 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.99966 0.00341 0.02593 0.99966 -0.01002 0.02420 0.99965 -0.01602 0.02088 0.99965 -0.02103 0.01614 0.99964 -0.02472 0.01024 0.99963 -0.02682 0.00353 0.99963 -0.02713 -0.00357 0.99962 -0.02558 -0.01059 0.99961 -0.02220 -0.01704 0.99960 -0.01719 -0.02241 0.99960 -0.01088 -0.02628 0.99959 -0.00373 -0.02831 0.99959 0.00373 -0.02834 0.99959 0.01091 -0.02635 0.99960 0.01727 -0.02251 0.99960 0.02233 -0.01714 0.99961 0.02575 -0.01067 0.99962 0.02733 -0.00359 0.99963 0.02701 0.00355 0.99964 0.02488 0.01031 0.99964 0.02114 0.01623 0.99965 0.01609 0.02096 0.99966 0.01005 0.02426 -0.00593 -0.49071 -0.87130 0.01413 -0.12403 -0.99218 0.02102 -0.13040 -0.99124 -0.00331 -0.25675 -0.96647 0.02974 -0.38248 -0.92348 0.01680 -0.37054 -0.92866 0.02490 -0.60867 -0.79304 -0.00591 -0.53642 -0.84393 0.01449 -0.60865 0.79331 -0.01809 -0.38261 0.92373 0.00000 -0.39694 0.91785 0.00000 -0.13063 0.99143 0.00000 -0.13063 0.99143 0.00000 0.13063 0.99143 -0.00000 0.13063 0.99143 0.00000 0.38266 0.92389 -0.00000 0.38266 0.92389 0.00000 0.60872 0.79338 -0.00000 0.60872 0.79338 0.00000 0.79328 0.60885 -0.00000 0.79328 0.60885 0.00000 0.92390 0.38264 -0.00000 0.92390 0.38264 0.00000 0.99145 0.13045 -0.00000 0.99145 0.13045 0.00000 0.99145 -0.13045 0.00000 0.99145 -0.13045 0.00000 0.92389 -0.38265 0.00000 0.92389 -0.38265 0.00000 0.79328 -0.60885 0.00000 0.79328 -0.60885 0.00000 0.60887 -0.79327 0.00000 0.60887 -0.79327 0.00000 0.38264 -0.92390 0.00000 0.38264 -0.92390 0.00000 0.13043 -0.99146 -0.01690 0.11435 -0.99330 0.00000 -0.62113 0.78371 0.00000 -0.79329 0.60884 0.00000 -0.79329 0.60884 0.00000 -0.92389 0.38266 0.00000 -0.92389 0.38266 0.00000 -0.99146 0.13043 0.00000 -0.99146 0.13043 0.00000 -0.99146 -0.13043 -0.00000 -0.99146 -0.13043 0.00000 -0.92388 -0.38267 -0.00000 -0.92388 -0.38267 0.00000 -0.79329 -0.60884 -0.00000 -0.79329 -0.60884 0.00000 -0.66931 -0.74298 0.04152 -0.59157 -0.80519 0.00000 -0.99145 -0.13049 0.00000 -0.99145 0.13049 0.00000 -0.99145 0.13049 0.00000 -0.92384 0.38278 0.00000 -0.92384 0.38278 0.00000 -0.79349 0.60858 0.00000 -0.79349 0.60858 0.00000 -0.60859 0.79348 0.00000 -0.60859 0.79348 0.00000 -0.38275 0.92385 0.00000 -0.38275 0.92385 0.00000 -0.13052 0.99145 0.00000 -0.13052 0.99145 0.00000 0.13052 0.99145 -0.00000 0.13052 0.99145 0.00000 0.38275 0.92385 -0.00000 0.38275 0.92385 0.00000 0.60858 0.79349 -0.00000 0.60858 0.79349 0.00000 0.79349 0.60858 -0.00000 0.79349 0.60858 0.00000 0.92385 0.38275 -0.00000 0.92385 0.38275 0.00000 0.99145 0.13052 -0.00000 0.99145 0.13052 0.00000 0.99145 -0.13052 0.00000 0.99145 -0.13052 0.00000 0.92385 -0.38275 0.00000 0.92385 -0.38275 0.00000 0.79348 -0.60859 0.00000 0.79348 -0.60859 0.00000 0.60858 -0.79349 0.00000 0.60858 -0.79349 0.00000 0.38278 -0.92384 0.00000 0.38278 -0.92384 0.00000 0.13052 -0.99145 0.00000 0.13052 -0.99145 -0.00000 -0.13052 -0.99145 0.00000 -0.13052 -0.99145 -0.00000 -0.38278 -0.92384 0.00000 -0.38278 -0.92384 -0.00000 -0.60859 -0.79348 0.00000 -0.60859 -0.79348 -0.00000 -0.79348 -0.60859 0.00000 -0.79348 -0.60859 -0.00000 -0.92384 -0.38278 0.00000 -0.92384 -0.38278 -0.00000 -0.99145 -0.13049 -1.00000 -0.00000 0.00001 -1.00000 -0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 0.00000 0.00001 -1.00000 0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 0.00001 0.00000 -1.00000 0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 0.00001 -0.00000 -1.00000 0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 -0.00000 -0.00001 -1.00000 -0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 -0.00001 -0.00000 -1.00000 -0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 -0.00001 0.00000 -1.00000 -0.00000 0.00001 0.15413 0.00057 -0.98805 0.34464 0.00056 -0.93874 0.52857 -0.01643 -0.84873 0.38265 0.00062 -0.92389 -0.13056 0.00024 -0.99144 -0.35493 0.00025 -0.93489 -0.11776 0.00218 -0.99304 -0.11322 0.00229 -0.99357 0.13054 0.00223 -0.99144 -0.08336 -0.02525 -0.99620 0.15338 0.00055 -0.98817 -0.52418 0.00194 -0.85160 -0.52377 0.00196 -0.85186 -0.38260 0.00193 -0.92391 -0.51421 -0.02270 -0.85737 -0.35517 0.00024 -0.93480 -0.64615 -0.00898 -0.76316 -0.60906 -0.00086 -0.79312 -0.60867 -0.00081 -0.79342 -0.74723 0.00041 -0.66457 -0.79337 -0.00189 -0.60874 -0.74765 -0.01226 -0.66398 -0.91136 -0.00610 -0.41156 -0.89636 -0.01098 -0.44319 -0.92386 0.00047 -0.38273 -0.83344 0.00048 -0.55261 -0.97268 0.00341 -0.23211 -0.97267 0.00341 -0.23218 -0.99144 0.00054 -0.13056 -0.97528 -0.01094 -0.22070 -0.95401 0.00256 0.29977 -0.99908 -0.00602 0.04247 -0.99143 0.00355 0.13055 -0.99956 0.00602 0.02887 -0.99957 0.00602 0.02881 -0.77215 -0.00514 0.63541 -0.79337 -0.00068 0.60874 -0.87284 0.00219 0.48800 -0.92386 0.00218 0.38273 -0.87532 -0.01261 0.48338 -0.95389 0.00256 0.30014 -0.65429 0.00045 0.75624 -0.60867 -0.00016 0.79342 -0.65268 -0.00443 0.75762 -0.60882 -0.00425 0.79330 -0.34029 0.00065 0.94032 -0.50741 -0.01654 0.86154 -0.39776 -0.00017 0.91749 -0.51172 0.00098 0.85915 -0.13054 0.00175 0.99144 0.00441 -0.01742 0.99984 -0.16091 -0.00069 0.98697 -0.20266 0.00065 0.97925 0.14551 -0.00058 0.98936 0.13052 -0.00225 0.99144 0.00617 0.00176 0.99998 0.33701 0.00046 0.94150 0.38265 -0.00107 0.92389 0.33911 -0.00608 0.94073 0.51820 0.00296 0.85525 0.51783 0.00296 0.85548 0.60874 -0.00027 0.79337 0.52511 -0.01042 0.85097 0.89800 0.00563 0.43997 0.72153 -0.00865 0.69233 0.79337 0.00132 0.60874 0.71379 0.00455 0.70035 0.71348 0.00455 0.70067 0.89769 0.00563 0.44060 0.92385 0.00413 0.38272 0.91539 0.00239 0.40255 0.99146 0.00038 0.13040 0.98822 -0.00124 -0.15303 0.99256 0.00116 0.12179 0.99146 0.00144 -0.13040 0.79336 0.00340 -0.60874 0.69162 -0.01524 -0.72210 0.82355 0.00095 -0.56724 0.92386 0.00270 -0.38273 0.82600 -0.02207 -0.56323 0.92602 -0.00065 -0.37748 0.53069 0.00206 -0.84757 0.60874 -0.00373 -0.79336 0.69155 0.00212 -0.72232 -0.00423 -0.77176 0.63590 0.14792 -0.81567 0.55929 0.07447 -0.79920 0.59643 0.30998 -0.83767 0.44969 0.27448 -0.83577 0.47556 0.31013 -0.83736 0.45016 -0.19602 -0.67997 0.70656 0.07460 -0.79859 0.59723 -0.13904 -0.71216 0.68811 -0.00413 -0.76713 0.64147 -0.29505 -0.61648 0.73000 -0.19671 -0.67724 0.70897 -0.37855 -0.55201 0.74295 -0.43926 -0.50148 0.74537 -0.43936 -0.50139 0.74537 -0.43014 -0.51017 0.74479 -0.69858 -0.17401 0.69405 -0.47818 -0.46733 0.74361 -0.54369 -0.39658 0.73968 -0.58864 -0.34372 0.73169 -0.60438 -0.32406 0.72781 -0.66429 -0.24251 0.70704 -0.69565 -0.19653 0.69097 -0.84785 0.18530 0.49680 -0.84789 0.18550 0.49667 -0.73101 -0.13497 0.66888 -0.69586 -0.19516 0.69115 -0.78911 -0.00656 0.61422 -0.83501 0.12532 0.53577 -0.84809 0.18419 0.49682 -0.86122 0.34478 0.37340 -0.83347 0.50055 0.23405 -0.84750 0.18853 0.49619 -0.85660 0.25553 0.44827 -0.83769 0.48999 0.24121 -0.83766 0.49010 0.24110 -0.83585 0.49627 0.23465 -0.83783 0.48972 0.24128 -0.73227 0.68096 0.00881 -0.81533 0.55367 0.16935 -0.77015 0.63380 0.07182 -0.77038 0.63348 0.07225 -0.73511 0.67790 0.00868 -0.61319 0.77392 -0.15825 -0.72387 0.68981 -0.01288 -0.48916 0.82061 -0.29551 -0.61244 0.77461 -0.15779 -0.34340 0.83524 -0.42948 -0.59377 0.78348 -0.18330 -0.59372 0.78350 -0.18336 -0.34479 0.83912 -0.42071 -0.38853 0.83665 -0.38609 -0.15464 0.81909 -0.55243 -0.27398 0.83639 -0.47476 0.00421 0.77403 -0.63314 -0.11368 0.80916 -0.57648 0.00409 0.77148 -0.63624 0.19586 0.68061 -0.70598 0.51951 0.41915 -0.74460 0.14163 0.18132 -0.97317 0.45113 0.33829 -0.82586 0.09146 0.73338 -0.67364 0.19660 0.67791 -0.70837 0.26726 0.63439 -0.72534 0.44058 0.49688 -0.74766 0.40940 0.52417 -0.74675 0.44091 0.49609 -0.74799 0.69472 0.20182 -0.69039 0.69706 0.18646 -0.69235 0.75053 0.08460 -0.65540 0.65707 0.24903 -0.71150 0.75398 0.08333 -0.65158 0.80933 -0.05398 -0.58487 0.69537 0.19861 -0.69067 0.84632 -0.19460 -0.49585 0.83188 -0.12687 -0.54026 0.84715 -0.20110 -0.49182 0.84627 -0.19532 -0.49566 0.84622 -0.19500 -0.49587 0.85855 -0.31152 -0.40724 0.84715 -0.19062 -0.49598 0.83507 -0.49766 -0.23450 0.85281 -0.40456 -0.33023 0.83931 -0.47972 -0.25580 0.74420 -0.53627 -0.39822 0.27533 -0.83466 0.47701 0.38876 -0.83641 0.38637 0.55934 -0.79792 0.22465 0.50371 -0.81497 0.28653 0.61711 -0.77059 0.15926 0.56118 -0.79685 0.22385 0.61573 -0.77176 0.15892 0.76316 -0.64342 -0.05994 0.73575 -0.67720 -0.00883 0.76327 -0.64350 -0.05764 0.73764 -0.67514 -0.00867 0.83247 -0.50378 -0.23066 0.83337 -0.50074 -0.23400 0.83334 -0.50084 -0.23390 0.26273 -0.57784 0.77271 0.08367 -0.18598 0.97898 0.08404 -0.18678 0.97880 -0.16082 0.35052 0.92264 -0.36840 0.81615 0.44517 -0.28163 0.61491 -0.73660 -0.07348 0.15263 -0.98555 -0.03408 0.07033 -0.99694 0.18052 -0.40230 -0.89753 0.18132 -0.40405 -0.89659 0.23152 -0.51708 -0.82403 0.26266 -0.59004 -0.76345 0.32704 -0.71534 -0.61752 0.40217 -0.88142 -0.24773 0.37798 -0.82693 -0.41631 0.41420 -0.90199 -0.12192 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -0.00328 0.25661 -0.96651 0.08001 0.55023 -0.83117 -0.00586 0.60885 -0.79327 -0.00324 0.38265 -0.92389 0.03957 0.35133 -0.93542 -0.00593 0.49071 -0.87130 0.02563 0.10601 -0.99403 0.00000 0.13043 -0.99146 -0.00000 -0.13043 -0.99146 0.00000 -0.13043 -0.99146 -0.00000 -0.38265 -0.92389 -0.01638 -0.39704 -0.91766 0.01432 -0.60880 -0.79320 0.00000 -0.62113 -0.78371 -0.00000 -0.79329 -0.60885 0.00000 -0.79329 -0.60885 -0.00000 -0.92389 -0.38266 0.00000 -0.92389 -0.38266 -0.00000 -0.99146 -0.13044 0.00000 -0.99146 -0.13044 0.00000 -0.99146 0.13044 0.00000 -0.99146 0.13044 0.00000 -0.92389 0.38265 0.00000 -0.92389 0.38265 0.00000 -0.79329 0.60885 0.00000 -0.79329 0.60885 0.00000 -0.62113 0.78371 0.01449 -0.60865 0.79330 -0.01809 -0.38261 0.92373 0.00000 -0.39694 0.91785 0.00000 -0.13063 0.99143 0.00000 -0.13063 0.99143 0.00000 0.13063 0.99143 -0.00000 0.13063 0.99143 0.00000 0.38267 0.92389 -0.00000 0.38267 0.92389 0.00000 0.60871 0.79339 -0.00000 0.60871 0.79339 0.00000 0.79329 0.60884 -0.00000 0.79329 0.60884 0.00000 0.92389 0.38265 -0.00000 0.92389 0.38265 0.00000 0.99146 0.13044 -0.00000 0.99146 0.13044 0.00000 0.99146 -0.13044 0.00000 0.99146 -0.13044 0.00000 0.92389 -0.38266 0.00000 0.92389 -0.38266 0.00000 0.79329 -0.60884 0.00000 0.79329 -0.60884 0.00000 0.63342 -0.77381 0.37250 0.62113 -0.68952 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -0.00000 0.99145 0.13051 0.00000 0.99145 -0.13050 0.00000 0.99145 -0.13050 0.00000 0.92385 -0.38276 0.00000 0.92385 -0.38276 -0.00000 -0.49066 -0.87135 0.99990 0.01112 -0.00853 0.61379 0.56424 0.55218 0.00000 0.60858 -0.79349 0.00000 0.38278 -0.92384 0.00000 0.38278 -0.92384 0.00000 0.13052 -0.99145 0.00000 0.13052 -0.99145 -0.00000 -0.13052 -0.99145 0.00000 -0.13052 -0.99145 -0.00000 -0.38278 -0.92384 0.00000 -0.38278 -0.92384 -0.00000 -0.60858 -0.79349 0.00000 -0.60858 -0.79349 -0.00000 -0.79348 -0.60859 0.00000 -0.79348 -0.60859 -0.00000 -0.92385 -0.38276 0.00000 -0.92385 -0.38276 -0.00000 -0.99145 -0.13050 0.00000 -0.99145 -0.13050 0.00000 -0.99145 0.13051 0.00000 -0.99145 0.13051 0.00000 -0.92385 0.38276 0.00000 -0.92385 0.38276 0.00000 -0.79349 0.60858 0.00000 -0.79349 0.60858 0.00000 -0.60858 0.79349 0.00000 -0.60858 0.79349 0.00000 -0.38275 0.92385 0.00000 -0.38275 0.92385 0.00000 -0.13052 0.99145 0.00000 -0.13052 0.99145 0.00000 0.13052 0.99145 -0.00000 0.13052 0.99145 0.00000 0.38275 0.92385 -0.00000 0.38275 0.92385 0.00000 0.60858 0.79349 -0.00000 0.60858 0.79349 0.00000 0.79349 0.60858 -0.00000 0.79349 0.60858 0.00000 0.92385 0.38276 -0.00000 0.92385 0.38276 0.00000 0.99145 0.13051 -0.99991 -0.00171 -0.01302 -0.99991 -0.00507 -0.01224 -0.99991 -0.00815 -0.01062 -0.99991 -0.01073 -0.00823 -0.99991 -0.01263 -0.00523 -0.99990 -0.01368 -0.00180 -0.99990 -0.01378 0.00181 -0.99990 -0.01291 0.00535 -0.99990 -0.00853 0.01112 -0.99990 -0.00535 0.01291 -0.99990 -0.00181 0.01378 -0.99990 0.00180 0.01368 -0.99991 0.00523 0.01263 -0.99991 0.00823 0.01073 -0.99991 0.01062 0.00815 -0.99991 0.01224 0.00507 -0.99991 0.01302 0.00171 -0.99992 0.01293 -0.00170 -0.99992 0.01198 -0.00497 -0.99992 0.01027 -0.00787 -0.99992 0.00787 -0.01027 -0.99992 0.00497 -0.01198 -0.99992 0.00170 -0.01293 -0.49522 -0.81039 -0.31310 -0.49473 -0.81076 -0.31291 -0.49506 -0.81040 -0.31332 -0.08415 -0.83408 -0.54518 -0.14307 -0.85556 -0.49754 -0.27631 -0.88533 -0.37396 0.00000 -1.00000 0.00000 -0.32036 -0.88939 -0.32613 -0.38904 -0.88698 -0.24882 -0.40254 -0.88549 -0.23210 -0.49430 -0.86159 -0.11546 0.18425 -0.67103 -0.71818 -0.00831 -0.80351 -0.59523 0.13524 -0.70932 -0.69179 0.13528 -0.70929 -0.69181 -0.00805 -0.79796 -0.60266 -0.14190 -0.85724 -0.49498 -0.08371 -0.83390 -0.54553 -0.08364 -0.83387 -0.54559 0.56287 -0.23048 -0.79376 0.43651 -0.41309 -0.79926 0.45637 -0.38596 -0.80172 0.43701 -0.41116 -0.79998 0.18251 -0.67836 -0.71171 0.31529 -0.55267 -0.77146 0.31515 -0.55281 -0.77141 0.71479 0.13712 -0.68576 0.71477 0.13702 -0.68581 0.75306 0.31599 -0.57711 0.65334 -0.04280 -0.75585 0.65318 -0.04315 -0.75597 0.65312 -0.04331 -0.75602 0.65320 -0.04313 -0.75596 0.65328 -0.04291 -0.75590 0.57022 -0.21772 -0.79211 0.74842 0.33324 -0.57343 0.74739 0.31610 -0.58437 0.74690 0.31802 -0.58396 0.74087 0.53559 -0.40528 0.74996 0.32753 -0.57471 0.74264 0.53735 -0.39967 0.71935 0.61692 -0.31930 0.74023 0.53527 -0.40687 0.71804 0.61878 -0.31863 0.62614 0.77365 -0.09705 0.66411 0.72699 -0.17447 0.62749 0.77251 -0.09740 0.66497 0.72704 -0.17094 0.73791 0.53253 -0.41461 0.58925 0.80754 -0.02569 0.53264 0.84423 0.05969 0.48469 0.86493 0.13027 0.18951 0.86931 0.45649 0.18957 0.86932 0.45644 0.29716 0.88722 0.35290 0.31771 0.88786 0.33281 0.37357 0.88768 0.26921 0.46432 0.87093 0.16088 0.38371 0.88894 0.25009 0.20281 0.87212 0.44528 0.09197 0.83666 0.53994 0.07937 0.83087 0.55077 -0.06337 0.75527 0.65234 -0.11092 0.72710 0.67751 -0.06293 0.75841 0.64873 -0.10341 0.73345 0.67183 -0.40792 0.46217 0.78740 -0.27042 0.60037 0.75262 -0.28536 0.58623 0.75822 -0.26956 0.60051 0.75281 -0.53441 0.28241 0.79665 -0.52147 0.30066 0.79855 -0.29252 0.57575 0.76351 -0.40428 0.45463 0.79364 -0.40412 0.45482 0.79362 -0.70842 -0.10320 0.69820 -0.60895 0.14409 0.78001 -0.53492 0.27967 0.79728 -0.61172 0.14678 0.77733 -0.70875 -0.09820 0.69860 -0.67956 -0.01273 0.73351 -0.67958 -0.01278 0.73349 -0.75020 -0.46591 0.46917 -0.73490 -0.21455 0.64334 -0.70844 -0.10139 0.69846 -0.72925 -0.18209 0.65957 -0.68250 -0.01153 0.73080 -0.75282 -0.45996 0.47086 -0.75001 -0.49007 0.44421 -0.75483 -0.36790 0.54303 -0.73382 -0.56806 0.37257 -0.75050 -0.48446 0.44950 -0.64106 -0.75665 0.12855 -0.68182 -0.70023 0.21166 -0.73385 -0.56796 0.37268 -0.50125 -0.85882 -0.10571 -0.64235 -0.75679 0.12110 -0.49090 -0.86362 -0.11480 -0.64180 -0.75676 0.12411 -0.58210 -0.81285 0.02086 0.56227 -0.00112 -0.82695 0.72174 -0.00457 0.69215 0.91675 -0.00215 0.39945 0.90371 0.00041 0.42815 0.92385 -0.00493 0.38272 0.90115 -0.00494 0.43349 0.79336 -0.00454 0.60874 0.72874 0.00740 0.68476 0.72889 0.00738 0.68460 0.60874 -0.00288 0.79336 0.53211 0.00940 0.84663 0.53262 0.00934 0.84631 0.34430 -0.00014 0.93886 0.38265 0.00115 0.92389 0.34619 0.00536 0.93815 0.52591 -0.00289 0.85053 0.13052 0.00207 0.99144 0.14759 0.00017 0.98905 -0.21991 -0.00100 0.97552 -0.15415 0.00110 0.98805 -0.13054 0.00360 0.99144 0.01293 -0.00174 0.99991 0.01239 -0.00174 0.99992 -0.60867 -0.00027 0.79342 -0.60882 -0.00025 0.79331 -0.64750 0.00617 0.76204 -0.50518 -0.00098 0.86301 -0.39776 0.00010 0.91749 -0.39009 -0.00101 0.92078 -0.43102 0.24114 0.86952 -0.86918 -0.00222 0.49450 -0.79336 0.00392 0.60874 -0.76751 0.00019 0.64104 -0.95124 -0.00232 0.30845 -0.86909 -0.00222 0.49466 -0.92385 0.00404 0.38272 -0.99144 -0.00061 0.13055 -0.98976 -0.00229 0.14270 -0.96759 0.11393 0.22535 -0.40142 0.56466 0.72113 -0.99088 0.00258 -0.13475 -0.98915 0.00212 -0.14691 -0.99209 -0.00060 -0.12549 -0.86417 -0.00193 -0.50320 -0.86390 -0.00193 -0.50366 -0.92384 0.00223 -0.38277 -0.93024 0.00004 -0.36695 -0.79337 -0.00137 -0.60874 -0.76147 0.00756 -0.64815 -0.56492 -0.00074 -0.82515 -0.68890 -0.00139 -0.72485 -0.60866 0.00533 -0.79341 -0.60906 0.00535 -0.79311 -0.39222 -0.00075 -0.91987 -0.38260 0.00057 -0.92391 0.08241 -0.00614 -0.99658 0.08352 -0.00617 -0.99649 -0.13055 0.00408 -0.99143 -0.22130 -0.00417 -0.97520 -0.22084 -0.00417 -0.97530 0.38265 -0.00110 -0.92389 0.55960 0.02150 -0.82848 0.08313 -0.00614 -0.99652 0.13054 -0.00171 -0.99144 0.08991 -0.00088 -0.99595 0.37444 0.00057 -0.92725 0.71816 0.01452 -0.69573 0.60874 -0.00091 -0.79337 0.71761 -0.00218 -0.69644 0.79336 0.00369 -0.60874 0.84447 -0.00199 -0.53560 0.92386 0.00270 -0.38273 0.84471 -0.00199 -0.53522 0.99478 -0.00127 -0.10203 0.99146 0.00146 -0.13040 0.94072 -0.00125 -0.33918 0.94067 -0.00125 -0.33931 0.98909 -0.00027 0.14732 0.99146 0.00129 0.13040 0.99470 -0.00127 -0.10277 -0.39988 -0.88287 0.24624 -0.41163 -0.90326 0.12115 -0.26478 -0.57145 0.77675 -0.16986 -0.36605 0.91496 -0.11802 -0.24267 0.96290 0.08284 0.18626 0.97900 0.11180 0.24995 0.96178 0.20615 0.45211 0.86781 0.23525 0.51909 0.82171 0.26151 0.57946 0.77190 0.39842 0.87327 -0.28046 0.37110 0.81316 -0.44839 0.18113 0.40281 -0.89718 0.12664 0.27786 -0.95224 0.09966 0.21762 -0.97093 -0.01867 -0.00731 -0.99980 -0.17329 -0.37571 -0.91039 -0.34295 -0.75143 -0.56369 -0.41455 -0.90834 -0.05533 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 -1.00000 0.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 0.00000 0.00000 -1.00000 1.00000 -0.00000 0.00000 0.00000 -0.10453 -0.99452 0.00000 0.10453 -0.99452 0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 -0.70710 -0.07391 -0.70324 -1.00000 -0.00000 -0.00000 -0.70711 -0.70711 0.00000 0.00000 -0.00000 1.00000 -0.70710 0.00000 -0.70712 -0.70708 0.07392 -0.70326 -1.00000 0.00000 -0.00000 -0.70711 0.70711 0.00000 0.00000 -0.70711 -0.70710 0.00000 0.77709 -0.62940 0.70711 -0.70711 0.00000 0.70710 -0.07391 -0.70324 0.70708 0.07392 -0.70326 0.70710 0.00000 -0.70712 -1.00000 0.00000 0.00000 0.70711 0.70711 0.00000 0.00000 0.00000 1.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -0.70709 0.12279 -0.69638 -0.70710 0.00000 -0.70712 0.00000 0.17365 -0.98481 0.00000 0.00000 -1.00000 0.70711 0.70711 0.00000 0.70710 0.50000 -0.50000 0.70710 0.00000 0.70712 0.70709 0.12279 -0.69638 0.70710 0.00000 0.70712 0.70710 0.00000 -0.70712 0.70712 -0.12279 -0.69635 0.50000 -0.50000 0.70711 0.70714 -0.57919 -0.40558 0.70711 -0.70711 0.00000 0.50000 0.50000 0.70711 0.00000 0.70710 0.70712 -0.00000 0.00000 1.00000 0.00000 0.70710 -0.70711 -0.50000 0.50000 0.70711 0.00000 -0.17365 -0.98481 0.00000 -0.70710 0.70712 0.00000 -0.81914 -0.57359 -0.70711 0.70711 0.00000 -0.70710 0.00000 0.70712 -0.70710 0.50000 -0.50000 -0.70712 -0.12279 -0.69635 -0.50000 -0.50000 0.70711 -0.70714 -0.57919 -0.40558 -0.70711 -0.70711 0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 0.00000 1.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 1.00000 0.00009 -0.00003 1.00000 -0.70710 -0.00000 0.70711 -0.70711 -0.70711 0.00000 -0.70712 -0.56474 -0.42551 -0.50000 -0.50000 0.70711 -0.70711 -0.09841 -0.70022 -0.70710 0.00000 0.70712 -0.70712 0.00000 -0.70710 -0.70709 0.09841 -0.70024 -0.70708 0.49999 -0.50005 -0.70710 0.00000 0.70712 -0.70711 0.70711 0.00000 0.00000 -0.79866 -0.60178 0.00000 -0.70710 0.70712 0.00000 -0.13917 -0.99027 0.00000 0.13918 -0.99027 -0.50000 0.50000 0.70711 0.00000 0.70704 -0.70717 0.00000 0.00000 1.00000 0.00000 0.70710 0.70712 0.50000 0.50000 0.70711 0.70711 -0.70711 0.00000 0.70712 -0.56474 -0.42551 0.50000 -0.50000 0.70711 0.70711 -0.09841 -0.70022 0.70710 0.00000 0.70712 0.70712 0.00000 -0.70710 0.70709 0.09841 -0.70024 0.70710 0.00000 0.70712 0.70708 0.49999 -0.50005 0.70711 0.70711 0.00000 0.00000 0.00000 -1.00000 -0.70711 -0.70711 0.00000 -0.70711 -0.57922 -0.40558 -0.50000 -0.50000 0.70711 -0.70712 -0.12279 -0.69635 -0.70710 0.00000 -0.70712 -0.70710 0.00000 0.70712 -0.70713 0.12278 -0.69634 -0.70714 0.50001 -0.49995 -0.70710 0.00000 0.70712 -0.70711 0.70711 0.00000 0.00000 -0.81918 -0.57354 0.00000 -0.70710 0.70712 0.00000 -0.17365 -0.98481 0.00000 0.17365 -0.98481 -0.50000 0.49999 0.70711 0.00000 0.70717 -0.70704 0.00000 0.70710 0.70712 0.50000 0.49999 0.70711 0.70711 -0.70711 0.00000 0.70711 -0.57922 -0.40558 0.50000 -0.50000 0.70711 0.70712 -0.12279 -0.69635 0.70710 0.00000 -0.70712 0.70710 0.00000 0.70712 0.70713 0.12278 -0.69634 0.70710 0.00000 0.70712 0.70714 0.50001 -0.49995 0.70711 0.70711 0.00000 0.00000 0.00000 -1.00000 -1.00000 0.00000 -0.00001 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 -1.00000 -0.00000 -1.00000 -0.00000 0.00000 0.99147 0.00000 0.13030 -0.99144 0.00000 -0.13056 -0.40825 -0.81649 0.40825 0.40825 -0.81649 0.40825 0.40822 0.81646 0.40825 0.40822 0.81646 0.40825 -0.57732 0.57732 0.57735 -0.40825 -0.81649 0.40825 -1.00000 -0.00000 0.00000 -0.00000 0.00000 -1.00000 -1.00000 -0.00000 0.00000 -0.07125 0.00000 -0.99746 -0.00000 0.00000 -1.00000 -0.86949 0.00000 0.49395 0.00000 -1.00000 0.00000 0.06998 0.99733 0.02085 0.00000 0.00000 1.00000 0.00000 -0.00000 -1.00000 -0.85905 -0.00000 -0.51188 -1.00000 -0.00001 0.00005 0.40825 -0.40825 -0.81649 0.40825 0.40825 -0.81646 0.40822 0.81646 0.40825 0.40822 0.81646 0.40825 0.40825 -0.81649 0.40825 0.40825 -0.40825 -0.81649 0.00001 1.00000 0.00000 0.00000 0.00000 -1.00000 1.00000 0.00000 0.00000 1.00000 0.00002 0.00001 0.99573 0.00000 0.09231 0.96323 0.00000 0.26868 0.90320 0.00000 0.42922 0.00000 -1.00000 0.00000 1.00000 0.00000 -0.00000 0.00000 0.00000 1.00000 -0.00000 -1.00000 -0.00000 0.85906 -0.00000 0.51187 0.00000 0.00000 1.00000 0.00000 1.00000 0.00000 -0.00000 0.00000 1.00000 0.85916 -0.00036 0.51171 -0.00000 0.00000 -1.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.40825 0.40825 -0.81646 0.00000 0.44722 -0.89441 0.40822 0.81646 0.40825 -0.40825 0.40825 -0.81649 0.00000 0.44722 -0.89441 0.40825 0.40825 -0.81646 0.40825 0.40825 -0.81646 0.40825 0.40825 -0.81646 -0.40825 0.40825 -0.81649 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00001 1.00000 0.00000 0.00001 1.00000 0.00000 0.00000 1.00000 0.00000 0.00001 1.00000 -0.00000 0.00002 1.00000 0.00000 -0.02227 -0.99974 -0.00518 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.44722 -0.89441 -0.30149 0.30149 -0.90451 -0.57732 0.57732 0.57735 -0.57732 0.57732 0.57735 0.40822 0.81646 0.40825 0.00000 0.44722 -0.89441 -0.32665 -0.71607 0.61688 -0.11196 0.23976 -0.96435 0.35377 0.77148 0.52883 0.33154 0.75333 0.56796 -0.99120 -0.00102 -0.13239 -0.88301 -0.20050 -0.42438 -0.82874 -0.28829 -0.47966 0.25120 -0.78460 -0.56683 0.25120 0.78460 -0.56683 0.91446 -0.39319 0.09578 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.25478 -0.77781 0.57454 -0.28595 -0.77872 0.55842 -0.23431 0.71579 -0.65784 -0.23432 -0.71578 -0.65784 -0.98709 -0.01279 -0.15963 0.38514 -0.85572 0.34555 0.36253 -0.79489 0.48655 0.20748 -0.45213 0.86748 0.12691 -0.27796 -0.95217 0.08281 0.18619 0.97902 -0.16980 -0.36591 0.91503 -0.36878 0.47828 -0.79702 -0.26109 0.57279 0.77701 -0.29587 -0.64803 0.70180 -0.01818 0.03898 0.99907 -0.90275 -0.42051 0.09066 -0.90454 0.41660 0.09084 0.00000 0.00000 1.00000 0.73568 -0.61252 -0.28911 0.73417 0.61368 -0.29049 -0.28607 0.77906 0.55788 -0.90474 0.15752 -0.39577 0.26635 0.59013 -0.76211 0.20769 -0.45258 0.86720 0.20613 -0.45234 0.86770 0.09856 -0.21721 -0.97114 -0.20723 0.45373 -0.86671 -0.26593 0.57697 -0.77226 0.00439 0.01195 -0.99992 -0.02960 0.06063 0.99772 -0.05303 -0.11205 0.99229 0.12429 -0.27830 0.95242 0.05573 -0.12645 -0.99041 0.19932 0.44095 -0.87512 0.18611 -0.40855 0.89356 -0.95199 0.30492 -0.02725 -0.94632 -0.32304 -0.01138 0.74543 -0.60479 -0.28030 0.74539 0.60482 -0.28033 -0.09002 0.78138 0.61752 -0.97470 -0.14999 -0.16574 -0.97385 -0.10046 -0.20376 -0.12780 0.78404 0.60741 -0.94034 -0.34024 0.00142 -0.95215 0.30379 -0.03345 0.29398 0.64493 -0.70544 0.14841 -0.33324 0.93109 -0.06198 0.07654 -0.99514 -0.02747 -0.05793 0.99794 -0.03224 0.06219 0.99754 0.02332 0.05455 -0.99824 -0.24381 0.53119 -0.81141 -0.41261 -0.90520 0.10185 -0.41253 0.90459 -0.10737 -0.41001 -0.90053 -0.14467 -0.38978 0.85483 -0.34254 -0.39560 -0.86697 -0.30308 -0.38352 -0.84099 -0.38163 -0.37492 -0.82096 0.43065 -0.35078 -0.76801 -0.53583 -0.34492 0.75636 -0.55584 -0.34960 0.76483 -0.54112 -0.27171 0.59146 -0.75917 -0.28555 -0.62145 -0.72957 -0.19684 0.42734 0.88240 -0.18376 -0.40059 -0.89764 -0.18032 0.39013 0.90293 -0.22091 -0.47797 0.85014 -0.06666 -0.14209 0.98761 -0.00735 0.02155 -0.99974 0.12242 -0.26468 0.95654 0.12638 0.28397 0.95047 0.18158 0.40363 -0.89672 0.20558 -0.45259 -0.86770 0.22633 0.49363 0.83970 0.18161 0.40379 -0.89664 0.28379 -0.62846 0.72423 0.33489 -0.73807 -0.58574 0.35026 -0.76483 0.54070 0.28599 -0.63336 0.71907 0.34401 0.75054 -0.56422 0.36155 0.79593 -0.48557 0.39182 0.85562 -0.33821 0.41189 0.89893 -0.14923 0.41371 0.90335 -0.11313 0.41442 0.90539 0.09232 0.41329 -0.90278 -0.11909 -0.84379 -0.16361 0.51113 -0.91119 0.14271 -0.38648 -0.91165 -0.14117 -0.38596 -0.90123 0.42479 0.08562 -0.90019 0.42669 0.08714 -0.90123 -0.42479 0.08562 -0.90019 -0.42668 0.08714 -0.73911 0.60984 0.28605 -0.63356 -0.49623 -0.59360 -0.63356 0.49623 -0.59360 -0.73785 0.61063 0.28760 -0.73911 -0.60984 0.28604 -0.73785 -0.61063 0.28760 -0.46204 0.74555 0.48030 -0.54759 -0.71754 0.43045 -0.27429 0.77993 0.56256 -0.06405 -0.76171 -0.64474 -0.06404 0.76171 -0.64474 -0.35344 -0.77051 0.53047 0.02107 -0.76877 0.63918 0.10407 0.75287 0.64989 0.29873 -0.69223 0.65695 0.13069 0.00000 0.99142 0.38270 0.00000 0.92387 0.60862 0.00000 0.79346 0.87949 -0.46018 -0.12135 0.87949 0.46018 -0.12135 0.69843 -0.44095 0.56369 0.79346 0.00000 0.60862 0.81651 0.30391 0.49087 0.92388 0.00000 0.38269 0.89613 0.17779 0.40662 0.92385 0.11779 0.36418 0.88273 0.20553 0.42254 0.90779 -0.15536 0.38959 0.92678 0.10893 0.35945 0.92066 -0.12500 0.36981 0.97532 -0.12331 0.18314 0.95202 -0.30443 0.03117 0.97589 0.12539 0.17864 0.97590 -0.12678 0.17762 0.96337 0.25895 0.06981 0.97436 0.10636 0.19826 0.88795 -0.19467 0.41672 0.81269 -0.30913 0.49393 0.69781 0.44158 0.56397 0.75484 -0.59725 -0.27112 0.75484 0.59725 -0.27112 0.64942 -0.48216 0.58803 0.29872 0.69223 0.65695 0.12686 0.78408 -0.60756 0.12686 -0.78408 -0.60756 -0.44229 0.62473 -0.64350 -0.44229 -0.62473 -0.64350 -0.72669 0.41020 -0.55105 -0.88280 0.20124 -0.42447 -0.80352 -0.03045 0.59449 0.41455 -0.90526 0.09303 0.39720 0.86918 0.29456 0.38819 -0.84688 -0.36346 0.33864 0.73984 0.58135 0.30310 0.67070 -0.67697 0.26660 0.59273 0.76000 0.23961 -0.52654 -0.81568 0.05245 -0.11845 -0.99157 -0.01573 -0.03590 -0.99923 -0.08610 0.18752 0.97848 -0.23017 -0.50345 0.83280 -0.26701 -0.58382 -0.76672 -0.30510 0.66451 0.68216 -0.33906 -0.74448 -0.57515 -0.35218 0.77085 0.53081 -0.39158 -0.85747 0.33378 -0.40390 0.88466 -0.23289 -0.41296 0.90594 0.09345 -0.98674 -0.01697 -0.16142 -0.72994 -0.40688 -0.54921 0.94435 0.32889 0.00560 0.93533 -0.35336 -0.01737 0.90129 0.42427 -0.08756 0.90129 -0.42427 -0.08756 0.53784 0.72106 -0.43681 0.53784 -0.72106 -0.43681 0.34405 0.77202 -0.53443 0.34406 -0.77202 -0.53443 -0.12736 -0.78541 0.60574 -0.13002 0.74675 -0.65227 -0.13001 -0.74675 -0.65227 -0.24717 0.71159 -0.65769 -0.24717 -0.71159 -0.65769 -0.91272 -0.13771 -0.38467 -0.92904 -0.10095 -0.35593 -0.97459 0.11710 -0.19094 -0.97456 0.15575 -0.16114 0.39888 -0.87246 0.28233 0.38615 -0.84363 0.37306 0.36712 0.80272 0.46996 0.10580 0.23285 0.96674 -0.11809 0.25189 -0.96052 -0.13843 -0.29853 -0.94431 -0.08823 -0.20282 0.97523 -0.13756 0.29833 -0.94450 -0.14883 -0.31994 -0.93567 -0.29280 0.63942 0.71092 -0.33762 -0.73699 0.58554 -0.39689 0.87427 0.27950 -0.39730 0.86964 0.29306 0.47858 0.60503 0.63631 0.70894 0.42708 0.56125 0.47418 0.60777 0.63700 -0.85188 -0.21001 0.47979 -0.73095 0.13510 0.66893 -0.66749 0.24066 0.70465 -0.79258 -0.00912 0.60970 -0.45682 0.61799 -0.63985 0.47401 -0.60814 0.63678 0.47422 -0.60775 0.63699 0.99966 -0.00341 0.02591 0.99142 0.00000 0.13068 1.00000 0.00000 0.00000 0.99251 -0.00004 -0.12215 0.93354 -0.00004 -0.35846 0.81896 -0.00004 -0.57385 0.65551 -0.00003 -0.75519 0.45321 -0.00002 -0.89140 0.22384 -0.00001 -0.97462 0.00118 0.00024 -1.00000 -0.12216 0.00004 -0.99251 -0.35849 0.00004 -0.93354 -0.57384 0.00004 -0.81897 -0.75520 0.00003 -0.65549 -0.89140 0.00002 -0.45322 -0.97463 0.00001 -0.22382 -1.00000 -0.00048 0.00000 -0.99142 0.00008 0.13068 -0.97463 0.00001 0.22384 -0.89140 0.00002 0.45322 -0.75520 0.00003 0.65549 -0.57384 0.00004 0.81897 -0.35849 0.00004 0.93354 -0.12216 0.00004 0.99251 0.00000 0.00000 1.00000 1.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.70709 0.70713 0.00000 0.70709 0.70713 0.00000 0.57733 0.57737 0.57735 0.57733 0.57736 -0.57736 0.00000 0.70712 0.70710 0.00000 0.70712 0.70710 0.70710 0.00000 0.70712 0.70710 0.00000 0.70712 0.70709 0.00000 -0.70713 0.70709 0.00000 -0.70713 0.00000 0.70711 -0.70711 0.00000 0.70711 -0.70711 -0.70709 0.70713 0.00000 -0.70709 0.70713 0.00000 -0.57733 0.57737 0.57735 0.00000 -0.70712 0.70710 0.00000 -0.70712 0.70710 0.00000 -0.70711 -0.70711 -0.00000 -0.70711 -0.70711 -0.57733 0.57736 -0.57736 -0.70710 0.00000 0.70712 -0.70710 0.00000 0.70712 0.70712 0.00000 0.70710 0.70712 0.00000 0.70710 0.70711 0.00000 -0.70711 0.70711 0.00000 -0.70711 -0.70709 0.00000 -0.70713 -0.70709 -0.00000 -0.70713 -0.70709 -0.70712 0.00000 -0.70709 -0.70712 -0.00000 -0.57734 -0.57736 0.57735 0.00000 0.70711 0.70710 -0.00000 0.70711 0.70710 0.00000 0.70710 -0.70711 0.00000 0.70710 -0.70711 -0.57733 -0.57736 -0.57736 0.00000 -0.70711 0.70710 0.00000 -0.70711 0.70710 0.70710 0.00000 0.70712 0.70710 0.00000 0.70712 0.70709 0.00000 -0.70713 0.70709 0.00000 -0.70713 0.00000 -0.70710 -0.70711 0.00000 -0.70710 -0.70711 0.57734 -0.57736 0.57735 0.57733 -0.57736 -0.57736 0.70709 -0.70712 0.00000 0.70709 -0.70712 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.70709 0.70713 0.00000 0.70709 0.70713 0.00000 0.57733 0.57736 0.57736 0.57733 0.57736 -0.57736 0.00000 0.70711 0.70711 0.00000 0.70711 0.70711 0.70709 0.00000 0.70713 0.70709 0.00000 0.70713 0.70709 0.00000 -0.70713 0.70709 0.00000 -0.70713 0.00000 0.70711 -0.70711 0.00000 0.70711 -0.70711 -0.70709 0.70713 0.00000 -0.70709 0.70713 0.00000 -0.57733 0.57736 0.57736 0.00000 -0.70711 0.70711 0.00000 -0.70711 0.70711 0.00000 -0.70711 -0.70711 -0.00000 -0.70711 -0.70711 -0.57733 0.57736 -0.57736 -0.70709 0.00000 0.70713 -0.70709 0.00000 0.70713 0.70711 0.00000 0.70711 0.70711 0.00000 0.70711 0.70711 0.00000 -0.70711 0.70711 0.00000 -0.70711 -0.70709 0.00000 -0.70713 -0.70709 -0.00000 -0.70713 -0.70709 -0.70712 0.00000 -0.70709 -0.70712 -0.00000 -0.57733 -0.57736 0.57736 0.00000 0.70710 0.70711 -0.00000 0.70710 0.70711 0.00000 0.70710 -0.70711 0.00000 0.70710 -0.70711 -0.57733 -0.57736 -0.57736 0.00000 -0.70710 0.70711 0.00000 -0.70710 0.70711 0.70709 0.00000 0.70713 0.70709 0.00000 0.70713 0.70709 0.00000 -0.70713 0.70709 0.00000 -0.70713 0.00000 -0.70710 -0.70711 0.00000 -0.70710 -0.70711 0.57733 -0.57736 0.57736 0.57733 -0.57736 -0.57736 0.70709 -0.70712 0.00000 0.70709 -0.70712 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.85907 0.00000 0.51187 0.85907 0.00000 0.51187 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.85907 -0.00000 0.51187 0.85907 0.00000 0.51187 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.51190 0.00000 -0.85905 0.51187 -0.00000 -0.85906 0.51187 0.00000 -0.85906 0.51187 0.00000 -0.85906 0.51190 0.00003 -0.85905 0.51187 0.00000 -0.85906 -0.51184 0.00000 0.85908 -0.51188 0.00000 0.85906 -0.51188 0.00000 0.85906 -0.51188 0.00000 0.85906 -0.51184 -0.00004 0.85908 -0.51188 0.00000 0.85906 -0.36198 -0.70706 0.60749 -0.36195 -0.70710 0.60745 0.60748 -0.70707 0.36197 0.60737 -0.70720 0.36190 -0.79153 -0.57736 0.20035 -0.60745 -0.70710 -0.36196 -0.60744 -0.70712 -0.36195 0.36199 -0.70703 -0.60751 0.36189 -0.70721 -0.60736 -0.96943 0.00000 0.24538 -0.96943 0.00000 0.24538 -0.20041 -0.57739 -0.79149 -0.79152 0.57736 0.20035 -0.60745 0.70711 -0.36195 -0.60743 0.70712 -0.36194 -0.24546 0.00000 -0.96941 -0.24546 0.00000 -0.96941 -0.36197 0.70706 0.60748 -0.36195 0.70711 0.60745 -0.20041 0.57740 -0.79149 0.60748 0.70708 0.36196 0.60736 0.70721 0.36190 0.36190 0.70722 -0.60735 0.36198 0.70704 -0.60751 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.85906 -0.00000 0.51188 0.85906 0.00000 0.51188 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.85906 0.00000 0.51188 0.85906 0.00000 0.51188 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.51189 0.00000 0.85905 -0.51188 -0.00000 0.85906 -0.51187 0.00000 0.85906 -0.51187 0.00000 0.85906 -0.51189 0.00002 0.85905 -0.51188 0.00000 0.85906 0.51184 0.00000 -0.85908 0.51188 0.00000 -0.85906 0.51188 0.00000 -0.85906 0.51188 0.00000 -0.85906 0.51184 -0.00004 -0.85908 0.51188 0.00000 -0.85906 0.36196 0.70708 -0.60747 0.36194 0.70712 -0.60743 0.60749 0.70706 0.36197 0.60739 0.70717 0.36192 -0.20062 0.57724 -0.79154 -0.60746 0.70709 -0.36196 -0.60751 0.70704 -0.36198 -0.36194 0.70712 0.60743 -0.36193 0.70715 0.60741 -0.24569 0.00000 -0.96935 -0.24569 -0.00000 -0.96935 -0.79154 0.57736 0.20032 -0.20062 -0.57724 -0.79155 -0.60746 -0.70709 -0.36196 -0.60751 -0.70703 -0.36199 -0.96944 0.00000 0.24534 -0.96944 0.00000 0.24534 0.36197 -0.70707 -0.60748 0.36194 -0.70712 -0.60744 -0.79154 -0.57735 0.20032 0.60748 -0.70706 0.36197 0.60740 -0.70717 0.36192 -0.36193 -0.70715 0.60741 -0.36195 -0.70712 0.60744 0.85906 0.00000 0.51188 -0.85906 0.00000 -0.51188 -0.85906 0.00000 -0.51188 0.85907 0.00000 0.51187 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000

15 0 12 0 14 0 14 1 12 1 11 1 14 2 11 2 13 2 16 3 19 3 17 3 17 4 19 4 20 4 17 5 20 5 18 5 18 6 20 6 21 6 8 7 5 7 9 7 9 8 5 8 6 8 9 9 6 9 10 9 10 10 6 10 7 10 2 11 0 11 3 11 3 12 0 12 1 12 3 13 1 13 4 13 9 14 20 14 8 14 8 15 20 15 19 15 0 16 2 16 11 16 11 17 2 17 13 17 5 18 8 18 16 18 16 19 8 19 19 19 4 20 7 20 18 20 18 20 15 20 4 20 1 21 12 21 21 21 21 21 10 21 1 21 1 22 10 22 7 22 7 22 4 22 1 22 12 23 15 23 18 23 18 23 21 23 12 23 9 24 10 24 21 24 21 24 20 24 9 24 0 25 11 25 12 25 12 25 1 25 0 25 3 26 4 26 15 26 15 26 14 26 3 26 7 27 6 27 17 27 17 27 18 27 7 27 6 28 5 28 16 28 16 28 17 28 6 28 2 29 3 29 14 29 14 29 13 29 2 29 34 30 36 31 37 32 37 33 35 34 34 35 31 36 35 37 37 38 37 39 33 40 31 41 30 42 31 43 33 44 33 45 32 46 30 47 32 48 33 49 37 50 37 51 36 52 32 53 30 54 34 55 35 56 35 57 31 58 30 59 34 60 30 61 32 62 32 63 36 64 34 65 22 66 24 67 25 68 25 69 23 70 22 71 23 72 25 73 29 74 29 75 27 76 23 77 26 78 27 79 29 80 29 81 28 82 26 83 22 84 26 85 28 86 28 87 24 88 22 89 22 90 23 91 27 92 27 93 26 94 22 95 24 96 28 97 29 98 29 99 25 100 24 101 238 102 239 102 243 102 246 103 247 103 245 103 240 104 241 104 237 104 215 105 216 105 212 105 206 106 205 106 210 106 210 107 205 107 209 107 210 108 209 108 212 108 212 109 209 109 211 109 212 110 211 110 215 110 216 111 215 111 220 111 220 112 215 112 219 112 220 113 219 113 222 113 222 114 219 114 221 114 222 115 221 115 225 115 225 116 221 116 227 116 225 117 227 117 230 117 227 118 229 118 230 118 230 119 229 119 231 119 230 120 231 120 233 120 233 121 231 121 232 121 233 122 232 122 237 122 237 123 232 123 236 123 237 124 236 124 240 124 241 125 240 125 245 125 245 126 240 126 244 126 245 127 244 127 246 127 247 128 246 128 243 128 243 129 246 129 242 129 243 130 242 130 238 130 239 131 238 131 235 131 235 132 238 132 234 132 235 133 234 133 226 133 226 134 234 134 228 134 226 135 228 135 224 135 224 136 228 136 223 136 224 137 223 137 218 137 218 138 223 138 217 138 218 139 217 139 213 139 207 140 208 140 213 140 213 141 208 141 214 141 213 142 214 142 218 142 208 143 207 143 204 143 204 144 207 144 203 144 204 145 203 145 200 145 200 146 203 146 199 146 200 147 199 147 196 147 196 148 199 148 194 148 196 149 194 149 191 149 191 150 194 150 190 150 195 151 189 151 188 151 188 152 193 152 195 152 195 153 193 153 197 153 205 154 206 154 201 154 201 155 206 155 202 155 201 156 202 156 197 156 197 157 202 157 198 157 197 158 198 158 195 158 248 159 250 160 251 161 251 162 249 163 248 164 252 165 254 166 255 167 255 168 253 169 252 170 249 171 253 172 255 173 255 174 251 175 249 176 248 177 252 178 253 179 253 180 249 181 248 182 250 183 251 184 255 185 255 186 254 187 250 188 180 189 182 190 183 191 183 192 181 193 180 194 178 195 179 195 183 195 183 195 182 195 178 195 177 196 181 196 183 196 183 196 179 196 177 196 176 197 178 197 182 197 182 197 180 197 176 197 212 198 192 198 210 198 198 199 202 199 192 199 122 200 123 200 127 200 127 200 126 200 122 200 126 201 127 201 131 201 131 201 129 201 126 201 135 202 134 202 129 202 129 202 131 202 135 202 139 203 138 203 134 203 134 203 135 203 139 203 138 204 139 204 143 204 143 204 142 204 138 204 142 205 143 205 147 205 147 205 146 205 142 205 150 206 146 206 147 206 147 206 151 206 150 206 155 207 150 207 151 207 151 207 153 207 155 207 155 208 153 208 159 208 159 208 158 208 155 208 158 209 159 209 163 209 163 209 161 209 158 209 166 210 161 210 163 210 163 210 167 210 166 210 171 211 170 211 166 211 166 211 167 211 171 211 174 212 170 212 171 212 171 212 175 212 174 212 175 213 179 213 178 213 178 213 174 213 175 213 176 214 177 214 173 214 173 214 172 214 176 214 169 215 165 215 164 215 164 215 168 215 169 215 165 216 162 216 160 216 160 216 164 216 165 216 156 217 160 217 162 217 162 217 157 217 156 217 154 218 152 218 149 218 149 218 148 218 154 218 140 219 144 219 145 219 145 219 141 219 140 219 136 220 140 220 141 220 141 220 137 220 136 220 133 221 130 221 128 221 128 221 132 221 133 221 124 222 128 222 130 222 130 222 125 222 124 222 169 223 168 223 172 223 172 223 173 223 169 223 154 224 156 224 157 224 157 224 152 224 154 224 145 225 144 225 148 225 148 225 149 225 145 225 137 226 133 226 132 226 132 226 136 226 137 226 120 227 124 227 125 227 125 227 121 227 120 227 180 228 181 228 177 228 177 228 176 228 180 228 192 229 225 229 230 229 247 230 192 230 245 230 186 231 187 231 191 231 191 231 190 231 186 231 184 232 185 232 187 232 187 232 186 232 184 232 184 233 188 233 189 233 189 233 185 233 184 233 198 234 192 234 195 234 200 235 196 235 195 235 195 235 192 235 200 235 187 236 185 236 189 236 189 236 191 236 187 236 225 237 192 237 220 237 220 237 222 237 225 237 226 238 224 238 218 238 218 238 192 238 226 238 237 239 192 239 230 239 230 239 233 239 237 239 226 240 192 240 239 240 239 240 235 240 226 240 212 241 216 241 220 241 220 241 192 241 212 241 202 242 206 242 210 242 210 242 192 242 202 242 237 243 241 243 245 243 245 243 192 243 237 243 208 244 192 244 218 244 218 244 214 244 208 244 247 245 243 245 239 245 239 245 192 245 247 245 208 246 204 246 200 246 200 246 192 246 208 246 196 247 191 247 189 247 189 247 195 247 196 247 193 248 256 248 197 248 197 249 256 249 201 249 209 250 256 250 211 250 244 251 256 251 246 251 186 252 190 252 188 252 188 252 184 252 186 252 193 253 194 253 199 253 199 253 256 253 193 253 201 254 256 254 209 254 209 254 205 254 201 254 211 255 256 255 219 255 219 255 215 255 211 255 219 256 256 256 227 256 227 256 221 256 219 256 231 257 256 257 236 257 236 257 232 257 231 257 236 258 256 258 244 258 244 258 240 258 236 258 246 259 256 259 238 259 238 259 242 259 246 259 238 260 256 260 228 260 228 260 234 260 238 260 228 261 256 261 217 261 217 261 223 261 228 261 217 262 256 262 207 262 207 262 213 262 217 262 207 263 256 263 199 263 199 263 203 263 207 263 256 264 231 264 229 264 229 264 227 264 256 264 190 265 194 265 193 265 193 265 188 265 190 265 80 266 79 266 257 266 257 266 258 266 80 266 81 267 79 267 257 267 257 267 259 267 81 267 82 268 80 268 258 268 258 268 260 268 82 268 83 269 81 269 259 269 259 269 261 269 83 269 84 270 82 270 260 270 260 270 262 270 84 270 85 271 83 271 261 271 261 271 263 271 85 271 86 272 84 272 262 272 262 272 264 272 86 272 87 273 85 273 263 273 263 273 265 273 87 273 88 274 86 274 264 274 264 274 266 274 88 274 89 275 87 275 265 275 265 275 267 275 89 275 90 276 88 276 266 276 266 276 268 276 90 276 91 277 89 277 267 277 267 277 269 277 91 277 92 278 90 278 268 278 268 278 270 278 92 278 93 279 91 279 269 279 269 279 271 279 93 279 94 280 92 280 270 280 270 280 272 280 94 280 95 281 93 281 271 281 271 281 273 281 95 281 96 282 94 282 272 282 272 282 274 282 96 282 97 283 95 283 273 283 273 283 275 283 97 283 98 284 96 284 274 284 274 284 276 284 98 284 99 285 97 285 275 285 275 285 277 285 99 285 100 286 98 286 276 286 276 286 278 286 100 286 101 287 99 287 277 287 277 287 279 287 101 287 102 288 100 288 278 288 278 288 280 288 102 288 103 289 101 289 279 289 279 289 281 289 103 289 104 290 102 290 280 290 280 290 282 290 104 290 105 291 103 291 281 291 281 291 283 291 105 291 106 292 104 292 282 292 282 292 284 292 106 292 107 293 105 293 283 293 283 293 285 293 107 293 108 294 106 294 284 294 284 294 286 294 108 294 109 295 107 295 285 295 285 295 287 295 109 295 110 296 108 296 286 296 286 296 288 296 110 296 111 297 109 297 287 297 287 297 289 297 111 297 112 298 110 298 288 298 288 298 290 298 112 298 113 299 111 299 289 299 289 299 291 299 113 299 114 300 112 300 290 300 290 300 292 300 114 300 115 301 113 301 291 301 291 301 293 301 115 301 116 302 114 302 292 302 292 302 294 302 116 302 117 303 115 303 293 303 293 303 295 303 117 303 118 304 116 304 294 304 294 304 296 304 118 304 119 305 117 305 295 305 295 305 297 305 119 305 119 306 118 306 296 306 296 306 297 306 119 306 39 307 38 307 299 307 299 307 300 307 39 307 40 308 38 308 299 308 299 308 301 308 40 308 41 309 39 309 300 309 300 309 302 309 41 309 42 310 40 310 301 310 301 310 303 310 42 310 43 311 41 311 302 311 302 311 304 311 43 311 44 312 42 312 303 312 303 312 305 312 44 312 45 313 43 313 304 313 304 313 306 313 45 313 46 314 44 314 305 314 305 314 307 314 46 314 47 315 45 315 306 315 306 315 308 315 47 315 48 316 46 316 307 316 307 316 309 316 48 316 49 317 47 317 308 317 308 317 310 317 49 317 50 318 48 318 309 318 309 318 311 318 50 318 51 319 49 319 310 319 310 319 312 319 51 319 52 320 50 320 311 320 311 320 313 320 52 320 53 321 51 321 312 321 312 321 314 321 53 321 54 322 52 322 313 322 313 322 315 322 54 322 55 323 53 323 314 323 314 323 316 323 55 323 56 324 54 324 315 324 315 324 317 324 56 324 57 325 55 325 316 325 316 325 318 325 57 325 58 326 56 326 317 326 317 326 319 326 58 326 59 327 57 327 318 327 318 327 320 327 59 327 60 328 58 328 319 328 319 328 321 328 60 328 61 329 59 329 320 329 320 329 322 329 61 329 62 330 60 330 321 330 321 330 323 330 62 330 63 331 61 331 322 331 322 331 324 331 63 331 64 332 62 332 323 332 323 332 325 332 64 332 65 333 63 333 324 333 324 333 326 333 65 333 66 334 64 334 325 334 325 334 327 334 66 334 67 335 65 335 326 335 326 335 328 335 67 335 68 336 66 336 327 336 327 336 329 336 68 336 69 337 67 337 328 337 328 337 330 337 69 337 70 338 68 338 329 338 329 338 331 338 70 338 71 339 69 339 330 339 330 339 332 339 71 339 72 340 70 340 331 340 331 340 333 340 72 340 73 341 71 341 332 341 332 341 334 341 73 341 74 342 72 342 333 342 333 342 335 342 74 342 75 343 73 343 334 343 334 343 336 343 75 343 76 344 74 344 335 344 335 344 337 344 76 344 77 345 75 345 336 345 336 345 338 345 77 345 78 346 76 346 337 346 337 346 339 346 78 346 78 347 77 347 338 347 338 347 339 347 78 347 298 348 53 348 314 348 314 348 340 348 298 348 300 349 299 349 341 349 341 349 342 349 300 349 301 350 299 350 341 350 341 350 343 350 301 350 302 351 300 351 342 351 342 351 344 351 302 351 303 352 301 352 343 352 343 352 345 352 303 352 304 353 302 353 344 353 344 353 346 353 304 353 305 354 303 354 345 354 345 354 347 354 305 354 306 355 304 355 346 355 346 355 348 355 306 355 307 356 305 356 347 356 347 356 349 356 307 356 308 357 306 357 348 357 348 357 350 357 308 357 309 358 307 358 349 358 349 358 351 358 309 358 310 359 308 359 350 359 350 359 352 359 310 359 311 360 309 360 351 360 351 360 353 360 311 360 312 361 310 361 352 361 352 361 354 361 312 361 313 362 311 362 353 362 353 362 355 362 313 362 314 363 312 363 354 363 354 363 356 363 314 363 315 364 313 364 355 364 355 364 357 364 315 364 316 365 314 365 356 365 356 365 358 365 316 365 317 366 315 366 357 366 357 366 359 366 317 366 318 367 316 367 358 367 358 367 360 367 318 367 319 368 317 368 359 368 359 368 361 368 319 368 320 369 318 369 360 369 360 369 362 369 320 369 321 370 319 370 361 370 361 370 363 370 321 370 322 371 320 371 362 371 362 371 364 371 322 371 323 372 321 372 363 372 363 372 365 372 323 372 324 373 322 373 364 373 364 373 366 373 324 373 325 374 323 374 365 374 365 374 367 374 325 374 326 375 324 375 366 375 366 375 368 375 326 375 327 376 325 376 367 376 367 376 369 376 327 376 328 377 326 377 368 377 368 377 370 377 328 377 329 378 327 378 369 378 369 378 371 378 329 378 330 379 328 379 370 379 370 379 372 379 330 379 331 380 329 380 371 380 371 380 373 380 331 380 332 381 330 381 372 381 372 381 374 381 332 381 333 382 331 382 373 382 373 382 375 382 333 382 334 383 332 383 374 383 374 383 376 383 334 383 335 384 333 384 375 384 375 384 377 384 335 384 336 385 334 385 376 385 376 385 378 385 336 385 337 386 335 386 377 386 377 386 379 386 337 386 338 387 336 387 378 387 378 387 380 387 338 387 339 388 337 388 379 388 379 388 381 388 339 388 339 389 338 389 380 389 380 389 381 389 339 389 340 390 314 390 356 390 356 390 382 390 340 390 424 391 425 391 384 391 384 391 383 391 424 391 424 392 426 392 385 392 385 392 383 392 424 392 425 393 427 393 386 393 386 393 384 393 425 393 426 394 428 394 387 394 387 394 385 394 426 394 427 395 429 395 388 395 388 395 386 395 427 395 428 396 430 396 389 396 389 396 387 396 428 396 429 397 431 397 390 397 390 397 388 397 429 397 430 398 432 398 391 398 391 398 389 398 430 398 431 399 433 399 392 399 392 399 390 399 431 399 432 400 434 400 393 400 393 400 391 400 432 400 433 401 435 401 394 401 394 401 392 401 433 401 434 402 436 402 395 402 395 402 393 402 434 402 435 403 437 403 396 403 396 403 394 403 435 403 436 404 438 404 397 404 397 404 395 404 436 404 437 405 439 405 398 405 398 405 396 405 437 405 438 406 440 406 399 406 399 406 397 406 438 406 439 407 441 407 400 407 400 407 398 407 439 407 440 408 442 408 401 408 401 408 399 408 440 408 441 409 443 409 402 409 402 409 400 409 441 409 442 410 444 410 403 410 403 410 401 410 442 410 443 411 445 411 404 411 404 411 402 411 443 411 444 412 446 412 405 412 405 412 403 412 444 412 445 413 447 413 406 413 406 413 404 413 445 413 446 414 448 414 407 414 407 414 405 414 446 414 447 415 449 415 408 415 408 415 406 415 447 415 448 416 450 416 409 416 409 416 407 416 448 416 449 417 451 417 410 417 410 417 408 417 449 417 450 418 452 418 411 418 411 418 409 418 450 418 451 419 453 419 412 419 412 419 410 419 451 419 452 420 454 420 413 420 413 420 411 420 452 420 453 421 455 421 414 421 414 421 412 421 453 421 454 422 456 422 415 422 415 422 413 422 454 422 455 423 457 423 416 423 416 423 414 423 455 423 456 424 458 424 417 424 417 424 415 424 456 424 457 425 459 425 418 425 418 425 416 425 457 425 458 426 460 426 419 426 419 426 417 426 458 426 459 427 461 427 420 427 420 427 418 427 459 427 460 428 462 428 421 428 421 428 419 428 460 428 461 429 463 429 422 429 422 429 420 429 461 429 462 430 464 430 423 430 423 430 421 430 462 430 463 431 464 431 423 431 423 431 422 431 463 431 713 432 714 432 878 432 878 432 877 432 713 432 713 433 715 433 879 433 879 433 877 433 713 433 714 434 716 434 880 434 880 434 878 434 714 434 715 435 717 435 881 435 881 435 879 435 715 435 716 436 718 436 882 436 882 436 880 436 716 436 717 437 719 437 883 437 883 437 881 437 717 437 718 438 720 438 884 438 884 438 882 438 718 438 719 439 721 439 885 439 885 439 883 439 719 439 720 440 722 440 886 440 886 440 884 440 720 440 721 441 723 441 887 441 887 441 885 441 721 441 722 442 724 442 888 442 888 442 886 442 722 442 723 443 725 443 889 443 889 443 887 443 723 443 724 444 726 444 890 444 890 444 888 444 724 444 725 445 727 445 891 445 891 445 889 445 725 445 726 446 728 446 892 446 892 446 890 446 726 446 727 447 729 447 893 447 893 447 891 447 727 447 728 448 730 448 894 448 894 448 892 448 728 448 729 449 731 449 895 449 895 449 893 449 729 449 730 450 732 450 896 450 896 450 894 450 730 450 731 451 733 451 897 451 897 451 895 451 731 451 732 452 734 452 898 452 898 452 896 452 732 452 733 453 735 453 899 453 899 453 897 453 733 453 734 454 736 454 900 454 900 454 898 454 734 454 735 455 737 455 901 455 901 455 899 455 735 455 736 456 738 456 902 456 902 456 900 456 736 456 737 457 739 457 903 457 903 457 901 457 737 457 738 458 740 458 904 458 904 458 902 458 738 458 739 459 741 459 905 459 905 459 903 459 739 459 740 460 742 460 906 460 906 460 904 460 740 460 741 461 743 461 907 461 907 461 905 461 741 461 742 462 744 462 908 462 908 462 906 462 742 462 743 463 745 463 909 463 909 463 907 463 743 463 744 464 746 464 910 464 910 464 908 464 744 464 745 465 747 465 911 465 911 465 909 465 745 465 746 466 748 466 912 466 912 466 910 466 746 466 747 467 749 467 913 467 913 467 911 467 747 467 748 468 750 468 914 468 914 468 912 468 748 468 749 469 751 469 915 469 915 469 913 469 749 469 750 470 752 470 916 470 916 470 914 470 750 470 751 471 753 471 917 471 917 471 915 471 751 471 752 472 753 472 917 472 917 472 916 472 752 472 754 473 755 473 919 473 919 473 918 473 754 473 754 474 756 474 920 474 920 474 918 474 754 474 755 475 757 475 921 475 921 475 919 475 755 475 756 476 758 476 922 476 922 476 920 476 756 476 757 477 759 477 923 477 923 477 921 477 757 477 758 478 760 478 924 478 924 478 922 478 758 478 759 479 761 479 925 479 925 479 923 479 759 479 760 480 762 480 926 480 926 480 924 480 760 480 761 481 763 481 927 481 927 481 925 481 761 481 762 482 764 482 928 482 928 482 926 482 762 482 763 483 765 483 929 483 929 483 927 483 763 483 764 484 766 484 930 484 930 484 928 484 764 484 765 485 767 485 931 485 931 485 929 485 765 485 766 486 768 486 932 486 932 486 930 486 766 486 767 487 769 487 933 487 933 487 931 487 767 487 768 488 770 488 934 488 934 488 932 488 768 488 769 489 771 489 935 489 935 489 933 489 769 489 770 490 772 490 936 490 936 490 934 490 770 490 771 491 773 491 937 491 937 491 935 491 771 491 772 492 774 492 938 492 938 492 936 492 772 492 773 493 775 493 939 493 939 493 937 493 773 493 774 494 776 494 940 494 940 494 938 494 774 494 775 495 777 495 941 495 941 495 939 495 775 495 776 496 778 496 942 496 942 496 940 496 776 496 777 497 779 497 943 497 943 497 941 497 777 497 778 498 780 498 944 498 944 498 942 498 778 498 779 499 781 499 945 499 945 499 943 499 779 499 780 500 782 500 946 500 946 500 944 500 780 500 781 501 783 501 947 501 947 501 945 501 781 501 782 502 784 502 948 502 948 502 946 502 782 502 783 503 785 503 949 503 949 503 947 503 783 503 784 504 786 504 950 504 950 504 948 504 784 504 785 505 787 505 951 505 951 505 949 505 785 505 786 506 788 506 952 506 952 506 950 506 786 506 787 507 789 507 953 507 953 507 951 507 787 507 788 508 790 508 954 508 954 508 952 508 788 508 789 509 791 509 955 509 955 509 953 509 789 509 790 510 792 510 956 510 956 510 954 510 790 510 791 511 793 511 957 511 957 511 955 511 791 511 792 512 794 512 958 512 958 512 956 512 792 512 793 513 794 513 958 513 958 513 957 513 793 513 795 514 796 514 960 514 960 514 959 514 795 514 795 515 797 515 961 515 961 515 959 515 795 515 796 516 798 516 962 516 962 516 960 516 796 516 797 517 799 517 963 517 963 517 961 517 797 517 798 518 800 518 964 518 964 518 962 518 798 518 799 519 801 519 965 519 965 519 963 519 799 519 800 520 802 520 966 520 966 520 964 520 800 520 801 521 803 521 967 521 967 521 965 521 801 521 802 522 804 522 968 522 968 522 966 522 802 522 803 523 805 523 969 523 969 523 967 523 803 523 804 524 806 524 970 524 970 524 968 524 804 524 805 525 807 525 971 525 971 525 969 525 805 525 806 526 808 526 972 526 972 526 970 526 806 526 807 527 809 527 973 527 973 527 971 527 807 527 808 528 810 528 974 528 974 528 972 528 808 528 809 529 811 529 975 529 975 529 973 529 809 529 810 530 812 530 976 530 976 530 974 530 810 530 811 531 813 531 977 531 977 531 975 531 811 531 812 532 814 532 978 532 978 532 976 532 812 532 813 533 815 533 979 533 979 533 977 533 813 533 814 534 816 534 980 534 980 534 978 534 814 534 815 535 817 535 981 535 981 535 979 535 815 535 816 536 818 536 982 536 982 536 980 536 816 536 817 537 819 537 983 537 983 537 981 537 817 537 818 538 820 538 984 538 984 538 982 538 818 538 819 539 821 539 985 539 985 539 983 539 819 539 820 540 822 540 986 540 986 540 984 540 820 540 821 541 823 541 987 541 987 541 985 541 821 541 822 542 824 542 988 542 988 542 986 542 822 542 823 543 825 543 989 543 989 543 987 543 823 543 824 544 826 544 990 544 990 544 988 544 824 544 825 545 827 545 991 545 991 545 989 545 825 545 826 546 828 546 992 546 992 546 990 546 826 546 827 547 829 547 993 547 993 547 991 547 827 547 828 548 830 548 994 548 994 548 992 548 828 548 829 549 831 549 995 549 995 549 993 549 829 549 830 550 832 550 996 550 996 550 994 550 830 550 831 551 833 551 997 551 997 551 995 551 831 551 832 552 834 552 998 552 998 552 996 552 832 552 833 553 835 553 999 553 999 553 997 553 833 553 834 554 835 554 999 554 999 554 998 554 834 554 836 555 837 555 1001 555 1001 555 1000 555 836 555 836 556 838 556 1002 556 1002 556 1000 556 836 556 837 557 839 557 1003 557 1003 557 1001 557 837 557 838 558 840 558 1004 558 1004 558 1002 558 838 558 839 559 841 559 1005 559 1005 559 1003 559 839 559 840 560 842 560 1006 560 1006 560 1004 560 840 560 841 561 843 561 1007 561 1007 561 1005 561 841 561 842 562 844 562 1008 562 1008 562 1006 562 842 562 843 563 845 563 1009 563 1009 563 1007 563 843 563 844 564 846 564 1010 564 1010 564 1008 564 844 564 845 565 847 565 1011 565 1011 565 1009 565 845 565 846 566 848 566 1012 566 1012 566 1010 566 846 566 847 567 849 567 1013 567 1013 567 1011 567 847 567 848 568 850 568 1014 568 1014 568 1012 568 848 568 849 569 851 569 1015 569 1015 569 1013 569 849 569 850 570 852 570 1016 570 1016 570 1014 570 850 570 851 571 853 571 1017 571 1017 571 1015 571 851 571 852 572 854 572 1018 572 1018 572 1016 572 852 572 853 573 855 573 1019 573 1019 573 1017 573 853 573 854 574 856 574 1020 574 1020 574 1018 574 854 574 855 575 857 575 1021 575 1021 575 1019 575 855 575 856 576 858 576 1022 576 1022 576 1020 576 856 576 857 577 859 577 1023 577 1023 577 1021 577 857 577 858 578 860 578 1024 578 1024 578 1022 578 858 578 859 579 861 579 1025 579 1025 579 1023 579 859 579 860 580 862 580 1026 580 1026 580 1024 580 860 580 861 581 863 581 1027 581 1027 581 1025 581 861 581 862 582 864 582 1028 582 1028 582 1026 582 862 582 863 583 865 583 1029 583 1029 583 1027 583 863 583 864 584 866 584 1030 584 1030 584 1028 584 864 584 865 585 867 585 1031 585 1031 585 1029 585 865 585 866 586 868 586 1032 586 1032 586 1030 586 866 586 867 587 869 587 1033 587 1033 587 1031 587 867 587 868 588 870 588 1034 588 1034 588 1032 588 868 588 869 589 871 589 1035 589 1035 589 1033 589 869 589 870 590 872 590 1036 590 1036 590 1034 590 870 590 871 591 873 591 1037 591 1037 591 1035 591 871 591 872 592 874 592 1038 592 1038 592 1036 592 872 592 873 593 875 593 1039 593 1039 593 1037 593 873 593 874 594 876 594 1040 594 1040 594 1038 594 874 594 876 595 875 595 1039 595 1039 595 1040 595 876 595 342 596 341 596 1041 596 1041 596 1042 596 342 596 343 597 341 597 1041 597 1041 597 1043 597 343 597 344 598 342 598 1042 598 1042 598 1044 598 344 598 345 599 343 599 1043 599 1043 599 1045 599 345 599 346 600 344 600 1044 600 1044 600 1046 600 346 600 347 601 345 601 1045 601 1045 601 1047 601 347 601 348 602 346 602 1046 602 1046 602 1048 602 348 602 349 603 347 603 1047 603 1047 603 1049 603 349 603 350 604 348 604 1048 604 1048 604 1050 604 350 604 351 605 349 605 1049 605 1049 605 1051 605 351 605 352 606 350 606 1050 606 1050 606 1052 606 352 606 353 607 351 607 1051 607 1051 607 1053 607 353 607 354 608 352 608 1052 608 1052 608 1054 608 354 608 355 609 353 609 1053 609 1053 609 1055 609 355 609 356 610 354 610 1054 610 1054 610 1056 610 356 610 357 611 355 611 1055 611 1055 611 1057 611 357 611 358 612 356 612 1056 612 1056 612 1058 612 358 612 359 613 357 613 1057 613 1057 613 1059 613 359 613 360 614 358 614 1058 614 1058 614 1060 614 360 614 361 615 359 615 1059 615 1059 615 1061 615 361 615 362 616 360 616 1060 616 1060 616 1062 616 362 616 363 617 361 617 1061 617 1061 617 1063 617 363 617 364 618 362 618 1062 618 1062 618 1064 618 364 618 365 619 363 619 1063 619 1063 619 1065 619 365 619 366 620 364 620 1064 620 1064 620 1066 620 366 620 367 621 365 621 1065 621 1065 621 1067 621 367 621 368 622 366 622 1066 622 1066 622 1068 622 368 622 369 623 367 623 1067 623 1067 623 1069 623 369 623 370 624 368 624 1068 624 1068 624 1070 624 370 624 371 625 369 625 1069 625 1069 625 1071 625 371 625 372 626 370 626 1070 626 1070 626 1072 626 372 626 373 627 371 627 1071 627 1071 627 1073 627 373 627 374 628 372 628 1072 628 1072 628 1074 628 374 628 375 629 373 629 1073 629 1073 629 1075 629 375 629 376 630 374 630 1074 630 1074 630 1076 630 376 630 377 631 375 631 1075 631 1075 631 1077 631 377 631 378 632 376 632 1076 632 1076 632 1078 632 378 632 379 633 377 633 1077 633 1077 633 1079 633 379 633 380 634 378 634 1078 634 1078 634 1080 634 380 634 381 635 379 635 1079 635 1079 635 1081 635 381 635 381 636 380 636 1080 636 1080 636 1081 636 381 636 382 637 356 637 1056 637 1056 637 1082 637 382 637 120 638 121 638 123 638 123 638 122 638 120 638 121 639 125 639 127 639 127 639 123 639 121 639 125 640 130 640 131 640 131 640 127 640 125 640 130 641 133 641 135 641 135 641 131 641 130 641 133 642 137 642 139 642 139 642 135 642 133 642 137 643 141 643 143 643 143 643 139 643 137 643 141 644 145 644 147 644 147 644 143 644 141 644 145 645 149 645 151 645 151 645 147 645 145 645 149 646 152 646 153 646 153 646 151 646 149 646 152 647 157 647 159 647 159 647 153 647 152 647 157 648 162 648 163 648 163 648 159 648 157 648 162 649 165 649 167 649 167 649 163 649 162 649 165 650 169 650 171 650 171 650 167 650 165 650 169 651 173 651 175 651 175 651 171 651 169 651 173 652 177 652 179 652 179 652 175 652 173 652 120 653 122 653 126 653 126 653 124 653 120 653 124 654 126 654 129 654 129 654 128 654 124 654 128 655 129 655 134 655 134 655 132 655 128 655 132 656 134 656 138 656 138 656 136 656 132 656 136 657 138 657 142 657 142 657 140 657 136 657 140 658 142 658 146 658 146 658 144 658 140 658 144 659 146 659 150 659 150 659 148 659 144 659 148 660 150 660 155 660 155 660 154 660 148 660 154 661 155 661 158 661 158 661 156 661 154 661 156 662 158 662 161 662 161 662 160 662 156 662 160 663 161 663 166 663 166 663 164 663 160 663 164 664 166 664 170 664 170 664 168 664 164 664 168 665 170 665 174 665 174 665 172 665 168 665 176 666 172 666 174 666 174 666 178 666 176 666 1103 667 1101 667 1108 667 1110 668 1117 668 1119 668 1114 669 1116 669 1109 669 1107 670 1100 670 1098 670 1089 671 1090 671 1094 671 1084 672 1088 672 1087 672 1127 673 1128 673 1124 673 1130 674 1129 674 1134 674 1162 675 1163 675 1157 675 1155 676 1147 676 1146 676 1129 677 1130 677 1142 677 1136 678 1128 678 1127 678 1182 679 1179 679 1178 679 1191 680 1194 680 1190 680 1235 681 1236 681 1233 681 1236 682 1235 682 1237 682 1228 683 1230 683 1232 683 1229 684 1230 684 1228 684 1244 685 1243 685 1236 685 1252 686 1263 686 1251 686 1228 687 1240 687 1238 687 1254 688 1248 688 1250 688 2145 689 2138 689 2147 689 1773 690 1745 690 1772 690 1773 691 1772 691 1784 691 2138 692 2149 692 2147 692 2325 693 2314 693 2306 693 2306 694 2314 694 2300 694 2300 695 2305 695 2306 695 1883 696 1823 696 2324 696 1781 697 2300 697 1823 697 2353 698 1659 698 1639 698 2353 699 1639 699 2376 699 2342 700 2340 700 1670 700 1670 701 2340 701 2329 701 1659 702 2353 702 1670 702 1670 703 2353 703 2342 703 1633 704 2388 704 1639 704 1639 705 2388 705 2376 705 1620 706 2398 706 2388 706 1620 707 2388 707 1622 707 1622 708 2388 708 1633 708 2431 709 2425 709 1631 709 1631 710 2425 710 2422 710 1631 711 2422 711 1618 711 1618 712 2422 712 1620 712 1620 713 2422 713 2410 713 1620 714 2410 714 2398 714 2431 715 1631 715 2455 715 2455 716 1631 716 2459 716 2459 717 1631 717 1636 717 1636 718 1663 718 2459 718 2459 719 1663 719 2469 719 1663 720 1688 720 2469 720 2469 721 1688 721 1729 721 1729 722 1765 722 2469 722 2469 723 1765 723 1796 723 2469 724 1796 724 2478 724 2478 725 1796 725 1830 725 2478 726 1830 726 1870 726 2478 727 1870 727 2490 727 2490 728 1870 728 2494 728 2494 729 1870 729 1889 729 2494 730 1889 730 2495 730 2495 731 1889 731 1927 731 2495 732 1927 732 2504 732 2530 733 2519 733 2504 733 2526 734 1982 734 2042 734 1927 735 1963 735 2504 735 2504 736 1963 736 1982 736 2504 737 1982 737 2530 737 2530 738 1982 738 2527 738 2527 739 1982 739 2526 739 2506 740 2507 740 2094 740 2094 741 2507 741 2512 741 2512 742 2517 742 2094 742 2094 743 2517 743 2084 743 2084 744 2517 744 2518 744 2084 745 2518 745 2042 745 2042 746 2518 746 2521 746 2042 747 2521 747 2526 747 2502 748 2513 748 2129 748 2129 749 2513 749 2510 749 2094 750 2111 750 2506 750 2506 751 2111 751 2115 751 2506 752 2115 752 2129 752 2506 753 2129 753 2510 753 2149 754 2134 754 2476 754 2129 755 2138 755 2502 755 2502 756 2138 756 2145 756 2502 757 2145 757 2147 757 2502 758 2147 758 2492 758 2492 759 2147 759 2149 759 2492 760 2149 760 2484 760 2484 761 2149 761 2476 761 2134 762 2131 762 2476 762 2476 763 2131 763 2119 763 2476 764 2119 764 2467 764 2467 765 2119 765 2109 765 2467 766 2109 766 2457 766 2457 767 2109 767 2096 767 2457 768 2096 768 2453 768 2453 769 2096 769 2429 769 2096 770 2088 770 2429 770 2429 771 2088 771 2062 771 2429 772 2062 772 2427 772 2062 773 2416 773 2427 773 2400 774 1997 774 2379 774 2379 775 1997 775 1979 775 2379 776 1979 776 1946 776 2062 777 2029 777 2416 777 2416 778 2029 778 1997 778 2416 779 1997 779 2400 779 1883 780 2324 780 2332 780 1883 781 2332 781 2327 781 1946 782 2357 782 2370 782 1946 783 2370 783 2379 783 2327 784 2334 784 1883 784 1883 785 2334 785 2348 785 1883 786 2348 786 1909 786 1909 787 2348 787 1946 787 1946 788 2348 788 2357 788 2820 789 2824 789 2544 789 2674 790 2668 790 2872 790 2872 791 2668 791 2659 791 2874 792 2759 792 2715 792 2846 793 2647 793 2652 793 2846 794 2652 794 2663 794 2854 795 2679 795 2688 795 2628 796 2838 796 2836 796 2606 797 2830 797 2828 797 2563 798 2698 798 2559 798 2550 799 2657 799 2637 799 2503 800 2515 800 2501 800 2513 801 2502 801 2523 801 1416 802 1406 802 1779 802 1779 803 1406 803 1759 803 1669 804 1658 804 1398 804 2445 805 2449 805 1833 805 1882 806 2439 806 2435 806 1882 807 2435 807 1872 807 1872 808 2435 808 2433 808 2439 809 1882 809 2443 809 2443 810 1882 810 1891 810 1891 811 1908 811 2443 811 2443 812 1908 812 1912 812 2443 813 1912 813 2447 813 2447 814 1912 814 1916 814 2447 815 1916 815 2451 815 2451 816 1916 816 1920 816 2451 817 1920 817 2463 817 2463 818 1920 818 1922 818 2463 819 1922 819 1926 819 2463 820 1926 820 2474 820 2474 821 1926 821 1938 821 1938 822 1945 822 2474 822 2474 823 1945 823 1966 823 2474 824 1966 824 2480 824 1966 825 1972 825 2480 825 2480 826 1972 826 1999 826 2480 827 1999 827 2488 827 2488 828 1999 828 2005 828 2488 829 2005 829 2497 829 2497 830 2005 830 2534 830 2534 831 2005 831 2021 831 2534 832 2021 832 2540 832 2021 833 2031 833 2540 833 2540 834 2031 834 2556 834 2031 835 2047 835 2556 835 2556 836 2047 836 2055 836 2556 837 2055 837 2571 837 2055 838 2066 838 2571 838 2571 839 2066 839 2071 839 2571 840 2071 840 2575 840 2575 841 2071 841 2583 841 2583 842 2071 842 2073 842 2583 843 2073 843 2065 843 2583 844 2065 844 2068 844 2583 845 2068 845 2587 845 2587 846 2068 846 2080 846 2080 847 2598 847 2594 847 2080 848 2594 848 2587 848 2079 849 2602 849 2080 849 2080 850 2602 850 2598 850 2079 851 2077 851 2602 851 2602 852 2077 852 2600 852 2600 853 2077 853 2067 853 2600 854 2067 854 2596 854 2067 855 2053 855 2596 855 2596 856 2053 856 2052 856 2596 857 2052 857 2591 857 2591 858 2052 858 2040 858 2591 859 2040 859 2585 859 2040 860 2025 860 2585 860 2585 861 2025 861 2020 861 2585 862 2020 862 2579 862 2579 863 2020 863 2012 863 2579 864 2012 864 2569 864 2012 865 1993 865 2569 865 2569 866 1993 866 1988 866 2569 867 1988 867 1977 867 2569 868 1977 868 2554 868 1977 869 1954 869 2554 869 2554 870 1954 870 1953 870 2554 871 1953 871 1943 871 2554 872 1943 872 2542 872 1305 873 1303 873 1309 873 1309 874 1303 874 1896 874 1309 875 1896 875 1311 875 1311 876 1896 876 1876 876 1311 877 1876 877 1315 877 1943 878 1918 878 2542 878 2542 879 1918 879 2532 879 2532 880 1918 880 1896 880 2532 881 1896 881 2499 881 2499 882 1896 882 1303 882 2499 883 1303 883 2486 883 2486 884 1303 884 2482 884 1296 885 1299 885 1297 885 1297 886 1299 886 1301 886 2482 887 1804 887 2471 887 2471 888 1804 888 1811 888 2471 889 1811 889 1816 889 2471 890 1816 890 2465 890 2465 891 1816 891 1820 891 2465 892 1820 892 2461 892 1833 893 2449 893 1825 893 2461 894 1820 894 2449 894 2449 895 1820 895 1825 895 1845 896 1858 896 2433 896 2433 897 1858 897 1868 897 2433 898 1868 898 1872 898 1833 899 1836 899 2445 899 2445 900 1836 900 2441 900 2441 901 1836 901 1845 901 2441 902 1845 902 2437 902 2437 903 1845 903 2433 903 1698 904 1400 904 1405 904 1405 905 1409 905 1698 905 1698 906 1409 906 1411 906 1698 907 1411 907 1712 907 1712 908 1411 908 1743 908 1400 909 1698 909 1398 909 1398 910 1698 910 1669 910 1388 911 1390 911 1658 911 1658 912 1390 912 1398 912 1388 913 1658 913 1649 913 1649 914 1630 914 1388 914 1388 915 1630 915 1616 915 1388 916 1616 916 1382 916 1382 917 1616 917 1611 917 1611 918 1603 918 1382 918 1382 919 1603 919 1375 919 1375 920 1603 920 1600 920 1375 921 1600 921 1370 921 1370 922 1600 922 1368 922 1368 923 1600 923 1596 923 1368 924 1596 924 1362 924 1596 925 1594 925 1362 925 1362 926 1594 926 1591 926 1362 927 1591 927 1360 927 1360 928 1591 928 1587 928 1589 929 1351 929 1587 929 1587 930 1351 930 1355 930 1587 931 1355 931 1360 931 1599 932 1341 932 1592 932 1592 933 1341 933 1345 933 1589 934 1592 934 1351 934 1351 935 1592 935 1350 935 1350 936 1592 936 1345 936 1599 937 1604 937 1341 937 1341 938 1604 938 1340 938 1340 939 1604 939 1614 939 1340 940 1614 940 1333 940 1333 941 1614 941 1624 941 1333 942 1624 942 1328 942 1328 943 1624 943 1323 943 1624 944 1683 944 1323 944 1323 945 1683 945 1709 945 1323 946 1709 946 1320 946 1320 947 1709 947 1736 947 1320 948 1736 948 1313 948 1303 949 1301 949 2482 949 2482 950 1301 950 1299 950 2482 951 1299 951 1804 951 1804 952 1299 952 1308 952 1804 953 1308 953 1786 953 1786 954 1308 954 1313 954 1786 955 1313 955 1770 955 1770 956 1313 956 1736 956 1315 957 1876 957 1318 957 1318 958 1876 958 1861 958 1318 959 1861 959 1321 959 1321 960 1861 960 1840 960 1321 961 1840 961 1326 961 1326 962 1840 962 1331 962 1331 963 1840 963 1834 963 1331 964 1834 964 1338 964 1338 965 1834 965 1801 965 1338 966 1801 966 1789 966 1752 967 1348 967 1758 967 1758 968 1348 968 1346 968 1789 969 1758 969 1338 969 1338 970 1758 970 1343 970 1343 971 1758 971 1346 971 1752 972 1725 972 1348 972 1348 973 1725 973 1721 973 1348 974 1721 974 1353 974 1353 975 1721 975 1716 975 1353 976 1716 976 1358 976 1358 977 1716 977 1703 977 1358 978 1703 978 1363 978 1363 979 1703 979 1701 979 1363 980 1701 980 1365 980 1365 981 1701 981 1686 981 1365 982 1686 982 1371 982 1371 983 1686 983 1373 983 1373 984 1686 984 1677 984 1677 985 1676 985 1373 985 1373 986 1676 986 1675 986 1373 987 1675 987 1682 987 1383 988 1380 988 1682 988 1682 989 1380 989 1376 989 1682 990 1376 990 1373 990 1383 991 1682 991 1385 991 1385 992 1682 992 1685 992 1385 993 1685 993 1700 993 1719 994 1395 994 1707 994 1707 995 1395 995 1392 995 1385 996 1700 996 1707 996 1385 997 1707 997 1391 997 1391 998 1707 998 1392 998 1719 999 1726 999 1395 999 1395 1000 1726 1000 1740 1000 1395 1001 1740 1001 1402 1001 1402 1002 1740 1002 1406 1002 1406 1003 1740 1003 1756 1003 1406 1004 1756 1004 1759 1004 1799 1005 1814 1005 1795 1005 1799 1006 1795 1006 1779 1006 1416 1007 1779 1007 1418 1007 1418 1008 1779 1008 1795 1008 1418 1009 1795 1009 1423 1009 1743 1010 1411 1010 1412 1010 1743 1011 1412 1011 1769 1011 1769 1012 1412 1012 1415 1012 1769 1013 1415 1013 1795 1013 1795 1014 1415 1014 1421 1014 1795 1015 1421 1015 1423 1015 1721 1016 1725 1016 1867 1016 1971 1017 1861 1017 1989 1017 1989 1018 1861 1018 1876 1018 1989 1019 1876 1019 2002 1019 2002 1020 1876 1020 2015 1020 1904 1021 1758 1021 1931 1021 1931 1022 1758 1022 1789 1022 1931 1023 1789 1023 1801 1023 1931 1024 1801 1024 1962 1024 1962 1025 1801 1025 1834 1025 1962 1026 1834 1026 1971 1026 1971 1027 1834 1027 1840 1027 1971 1028 1840 1028 1861 1028 1867 1029 1725 1029 1886 1029 1886 1030 1725 1030 1752 1030 1886 1031 1752 1031 1904 1031 1904 1032 1752 1032 1758 1032 1817 1033 1676 1033 1821 1033 1821 1034 1676 1034 1677 1034 1821 1035 1677 1035 1838 1035 1838 1036 1677 1036 1686 1036 1838 1037 1686 1037 1701 1037 1838 1038 1701 1038 1846 1038 1846 1039 1701 1039 1703 1039 1846 1040 1703 1040 1867 1040 1867 1041 1703 1041 1716 1041 1867 1042 1716 1042 1721 1042 1685 1043 1682 1043 1812 1043 1812 1044 1682 1044 1675 1044 1812 1045 1675 1045 1806 1045 1806 1046 1675 1046 1676 1046 1806 1047 1676 1047 1809 1047 1809 1048 1676 1048 1817 1048 1719 1049 1707 1049 1828 1049 1828 1050 1707 1050 1700 1050 1828 1051 1700 1051 1812 1051 1812 1052 1700 1052 1685 1052 1907 1053 1799 1053 1880 1053 1880 1054 1799 1054 1779 1054 1880 1055 1779 1055 1863 1055 1863 1056 1779 1056 1759 1056 1863 1057 1759 1057 1857 1057 1857 1058 1759 1058 1756 1058 1857 1059 1756 1059 1829 1059 1829 1060 1756 1060 1740 1060 1829 1061 1740 1061 1828 1061 1828 1062 1740 1062 1726 1062 1828 1063 1726 1063 1719 1063 1853 1064 1814 1064 1799 1064 1853 1065 1799 1065 1907 1065 1853 1066 1907 1066 1864 1066 1864 1067 1907 1067 1924 1067 1864 1068 1924 1068 1878 1068 1878 1069 1924 1069 1894 1069 1894 1070 1924 1070 1914 1070 1914 1071 1924 1071 1935 1071 1914 1072 1935 1072 1951 1072 1951 1073 1955 1073 1914 1073 1914 1074 1955 1074 1961 1074 1914 1075 1961 1075 1936 1075 1984 1076 1949 1076 1961 1076 1961 1077 1949 1077 1936 1077 1984 1078 1996 1078 1949 1078 1949 1079 1996 1079 2001 1079 1949 1080 2001 1080 1958 1080 1958 1081 2001 1081 2023 1081 1958 1082 2023 1082 1969 1082 2014 1083 2006 1083 2093 1083 2093 1084 2006 1084 1994 1084 1969 1085 2023 1085 1985 1085 1985 1086 2023 1086 2050 1086 1985 1087 2050 1087 1994 1087 1994 1088 2050 1088 2091 1088 1994 1089 2091 1089 2093 1089 2046 1090 2034 1090 2108 1090 2108 1091 2034 1091 2028 1091 2014 1092 2093 1092 2028 1092 2028 1093 2093 1093 2106 1093 2028 1094 2106 1094 2108 1094 2080 1095 2121 1095 2079 1095 2079 1096 2121 1096 2124 1096 2079 1097 2124 1097 2126 1097 2121 1098 2080 1098 2068 1098 2121 1099 2068 1099 2108 1099 2108 1100 2068 1100 2065 1100 2108 1101 2065 1101 2046 1101 2141 1102 2077 1102 2144 1102 2144 1103 2077 1103 2079 1103 2144 1104 2079 1104 2133 1104 2133 1105 2079 1105 2126 1105 2128 1106 2053 1106 2137 1106 2137 1107 2053 1107 2067 1107 2137 1108 2067 1108 2141 1108 2141 1109 2067 1109 2077 1109 2114 1110 2025 1110 2117 1110 2117 1111 2025 1111 2040 1111 2117 1112 2040 1112 2128 1112 2128 1113 2040 1113 2052 1113 2128 1114 2052 1114 2053 1114 2099 1115 1993 1115 2012 1115 2099 1116 2012 1116 2114 1116 2114 1117 2012 1117 2020 1117 2114 1118 2020 1118 2025 1118 2082 1119 1954 1119 2086 1119 2086 1120 1954 1120 1977 1120 2086 1121 1977 1121 2099 1121 2099 1122 1977 1122 1988 1122 2099 1123 1988 1123 1993 1123 1876 1124 1896 1124 2015 1124 2015 1125 1896 1125 1918 1125 2024 1126 2015 1126 2039 1126 2039 1127 2015 1127 1918 1127 2039 1128 1918 1128 2054 1128 2054 1129 1918 1129 1943 1129 2054 1130 1943 1130 2082 1130 2082 1131 1943 1131 1953 1131 2082 1132 1953 1132 1954 1132 2711 1133 2715 1133 2697 1133 2711 1134 2697 1134 2700 1134 1583 1135 1612 1135 1585 1135 1612 1136 1613 1136 1585 1136 1774 1137 1737 1137 1741 1137 1715 1138 1728 1138 1774 1138 1774 1139 1728 1139 1737 1139 2139 1140 2146 1140 2148 1140 1777 1141 1785 1141 1776 1141 2148 1142 2150 1142 2139 1142 1704 1143 1717 1143 1357 1143 1356 1144 1352 1144 1586 1144 1650 1145 1661 1145 1628 1145 1389 1146 1387 1146 1617 1146 1617 1147 1387 1147 1381 1147 1617 1148 1381 1148 1608 1148 1608 1149 1381 1149 1605 1149 1377 1150 1369 1150 1601 1150 1605 1151 1381 1151 1601 1151 1601 1152 1381 1152 1377 1152 1588 1153 1593 1153 1369 1153 1369 1154 1593 1154 1598 1154 1369 1155 1598 1155 1601 1155 1369 1156 1367 1156 1588 1156 1588 1157 1367 1157 1361 1157 1588 1158 1361 1158 1586 1158 1586 1159 1361 1159 1359 1159 1586 1160 1359 1160 1356 1160 1342 1161 1597 1161 1349 1161 1349 1162 1597 1162 1595 1162 1349 1163 1595 1163 1352 1163 1352 1164 1595 1164 1590 1164 1352 1165 1590 1165 1586 1165 1629 1166 1615 1166 1334 1166 1334 1167 1615 1167 1609 1167 1334 1168 1609 1168 1339 1168 1339 1169 1609 1169 1606 1169 1339 1170 1606 1170 1342 1170 1342 1171 1606 1171 1602 1171 1342 1172 1602 1172 1597 1172 2472 1173 1819 1173 2473 1173 1805 1174 2483 1174 1810 1174 1810 1175 2483 1175 2473 1175 1810 1176 2473 1176 1815 1176 1815 1177 2473 1177 1819 1177 2472 1178 2466 1178 1819 1178 1819 1179 2466 1179 2462 1179 1819 1180 2462 1180 1826 1180 1826 1181 2462 1181 1832 1181 1832 1182 2462 1182 2450 1182 1832 1183 2450 1183 2446 1183 1844 1184 1839 1184 2446 1184 2446 1185 1839 1185 1835 1185 2446 1186 1835 1186 1832 1186 2446 1187 2442 1187 1844 1187 1844 1188 2442 1188 2438 1188 1844 1189 2438 1189 2434 1189 2434 1190 1869 1190 1859 1190 2434 1191 1859 1191 1844 1191 1869 1192 2434 1192 1873 1192 1873 1193 2434 1193 2436 1193 1873 1194 2436 1194 1881 1194 1881 1195 2436 1195 2440 1195 1881 1196 2440 1196 1892 1196 1892 1197 2440 1197 2444 1197 1892 1198 2444 1198 1906 1198 1906 1199 2444 1199 1913 1199 1913 1200 2444 1200 2448 1200 1913 1201 2448 1201 1919 1201 1919 1202 2448 1202 2452 1202 1919 1203 2452 1203 2464 1203 1919 1204 2464 1204 1923 1204 1923 1205 2464 1205 1925 1205 1925 1206 2464 1206 2475 1206 1967 1207 1959 1207 2475 1207 1925 1208 2475 1208 1937 1208 1937 1209 2475 1209 1959 1209 2004 1210 1992 1210 2481 1210 1967 1211 2475 1211 2481 1211 1967 1212 2481 1212 1992 1212 2481 1213 2489 1213 2004 1213 2004 1214 2489 1214 2498 1214 2004 1215 2498 1215 2535 1215 2004 1216 2535 1216 2018 1216 2018 1217 2535 1217 2541 1217 2557 1218 2032 1218 2541 1218 2541 1219 2032 1219 2018 1219 2557 1220 2057 1220 2044 1220 2557 1221 2044 1221 2032 1221 2558 1222 2074 1222 2557 1222 2557 1223 2074 1223 2057 1223 2584 1224 2064 1224 2074 1224 2584 1225 2074 1225 2576 1225 2576 1226 2074 1226 2572 1226 2572 1227 2074 1227 2558 1227 2603 1228 2072 1228 2083 1228 2064 1229 2584 1229 2069 1229 2069 1230 2584 1230 2588 1230 2069 1231 2588 1231 2078 1231 2078 1232 2588 1232 2595 1232 2078 1233 2595 1233 2083 1233 2083 1234 2595 1234 2599 1234 2083 1235 2599 1235 2603 1235 2597 1236 2070 1236 2601 1236 2601 1237 2070 1237 2072 1237 2601 1238 2072 1238 2603 1238 2586 1239 2048 1239 2592 1239 2592 1240 2048 1240 2049 1240 2592 1241 2049 1241 2597 1241 2597 1242 2049 1242 2070 1242 2570 1243 2013 1243 2580 1243 2580 1244 2013 1244 2019 1244 2580 1245 2019 1245 2586 1245 2586 1246 2019 1246 2048 1246 2555 1247 1978 1247 2570 1247 2570 1248 1978 1248 1987 1248 2570 1249 1987 1249 2013 1249 2543 1250 1944 1250 2555 1250 2555 1251 1944 1251 1952 1251 2555 1252 1952 1252 1978 1252 1304 1253 1306 1253 1901 1253 1901 1254 1306 1254 1310 1254 1317 1255 1875 1255 1316 1255 1316 1256 1875 1256 1901 1256 1316 1257 1901 1257 1312 1257 1312 1258 1901 1258 1310 1258 1337 1259 1788 1259 1332 1259 1332 1260 1788 1260 1802 1260 1332 1261 1802 1261 1325 1261 1325 1262 1802 1262 1843 1262 1325 1263 1843 1263 1322 1263 1322 1264 1843 1264 1317 1264 1317 1265 1843 1265 1860 1265 1317 1266 1860 1266 1875 1266 1357 1267 1717 1267 1354 1267 1354 1268 1717 1268 1723 1268 1354 1269 1723 1269 1347 1269 1347 1270 1723 1270 1753 1270 1347 1271 1753 1271 1344 1271 1344 1272 1753 1272 1760 1272 1344 1273 1760 1273 1337 1273 1337 1274 1760 1274 1762 1274 1337 1275 1762 1275 1788 1275 1674 1276 1678 1276 1366 1276 1366 1277 1678 1277 1687 1277 1366 1278 1687 1278 1364 1278 1364 1279 1687 1279 1357 1279 1357 1280 1687 1280 1702 1280 1357 1281 1702 1281 1704 1281 1386 1282 1706 1282 1699 1282 1674 1283 1366 1283 1372 1283 1674 1284 1372 1284 1681 1284 1681 1285 1372 1285 1374 1285 1681 1286 1374 1286 1378 1286 1386 1287 1699 1287 1684 1287 1386 1288 1684 1288 1384 1288 1384 1289 1684 1289 1681 1289 1384 1290 1681 1290 1379 1290 1379 1291 1681 1291 1378 1291 1738 1292 1727 1292 1396 1292 1396 1293 1727 1293 1713 1293 1396 1294 1713 1294 1706 1294 1396 1295 1706 1295 1393 1295 1393 1296 1706 1296 1386 1296 1396 1297 1403 1297 1738 1297 1738 1298 1403 1298 1750 1298 1750 1299 1403 1299 1407 1299 1750 1300 1407 1300 1761 1300 1761 1301 1407 1301 1780 1301 1780 1302 1407 1302 1417 1302 1780 1303 1417 1303 1419 1303 1808 1304 1800 1304 1780 1304 1808 1305 1780 1305 1794 1305 1794 1306 1780 1306 1419 1306 1794 1307 1419 1307 1422 1307 1413 1308 1751 1308 1414 1308 1414 1309 1751 1309 1764 1309 1422 1310 1420 1310 1794 1310 1794 1311 1420 1311 1414 1311 1794 1312 1414 1312 1764 1312 1408 1313 1404 1313 1697 1313 1408 1314 1697 1314 1410 1314 1697 1315 1711 1315 1410 1315 1410 1316 1711 1316 1742 1316 1410 1317 1742 1317 1413 1317 1413 1318 1742 1318 1751 1318 1404 1319 1401 1319 1697 1319 1697 1320 1401 1320 1399 1320 1697 1321 1399 1321 1397 1321 1697 1322 1397 1322 1668 1322 1668 1323 1397 1323 1661 1323 1617 1324 1628 1324 1389 1324 1389 1325 1628 1325 1661 1325 1389 1326 1661 1326 1394 1326 1394 1327 1661 1327 1397 1327 1298 1328 2487 1328 2483 1328 1629 1329 1334 1329 1672 1329 1672 1330 1334 1330 1327 1330 1672 1331 1327 1331 1324 1331 1672 1332 1324 1332 1708 1332 1708 1333 1324 1333 1319 1333 1708 1334 1319 1334 1778 1334 1778 1335 1319 1335 1314 1335 1778 1336 1314 1336 1787 1336 1787 1337 1314 1337 1307 1337 1787 1338 1307 1338 1805 1338 1805 1339 1307 1339 1300 1339 1805 1340 1300 1340 2483 1340 2483 1341 1300 1341 1295 1341 2483 1342 1295 1342 1298 1342 1298 1343 1302 1343 2487 1343 2487 1344 1302 1344 1304 1344 2487 1345 1304 1345 2500 1345 2500 1346 1304 1346 1901 1346 2500 1347 1901 1347 2533 1347 2533 1348 1901 1348 1917 1348 2533 1349 1917 1349 2543 1349 2543 1350 1917 1350 1944 1350 1862 1351 1856 1351 1761 1351 1944 1352 2081 1352 1952 1352 1952 1353 2081 1353 2087 1353 1952 1354 2087 1354 1978 1354 1978 1355 2087 1355 2098 1355 2098 1356 2100 1356 1978 1356 1978 1357 2100 1357 2104 1357 1978 1358 2104 1358 1987 1358 1987 1359 2104 1359 2113 1359 1987 1360 2113 1360 2013 1360 2127 1361 2048 1361 2118 1361 2118 1362 2048 1362 2019 1362 2118 1363 2019 1363 2113 1363 2113 1364 2019 1364 2013 1364 2142 1365 2070 1365 2140 1365 2140 1366 2070 1366 2049 1366 2140 1367 2049 1367 2127 1367 2127 1368 2049 1368 2048 1368 2136 1369 2125 1369 2069 1369 2069 1370 2125 1370 2123 1370 2069 1371 2078 1371 2136 1371 2136 1372 2078 1372 2083 1372 2136 1373 2083 1373 2143 1373 2143 1374 2083 1374 2072 1374 2143 1375 2072 1375 2142 1375 2142 1376 2072 1376 2070 1376 2123 1377 2122 1377 2069 1377 2069 1378 2122 1378 2107 1378 2069 1379 2107 1379 2064 1379 2026 1380 2107 1380 2016 1380 2016 1381 2107 1381 2105 1381 2026 1382 2033 1382 2107 1382 2107 1383 2033 1383 2045 1383 2107 1384 2045 1384 2064 1384 1991 1385 2092 1385 2090 1385 1991 1386 2090 1386 1986 1386 2105 1387 2103 1387 2016 1387 2016 1388 2103 1388 2092 1388 2016 1389 2092 1389 2007 1389 2007 1390 2092 1390 1991 1390 2090 1391 2051 1391 1986 1391 1986 1392 2051 1392 2022 1392 1986 1393 2022 1393 1968 1393 1968 1394 2022 1394 1957 1394 1957 1395 2022 1395 1948 1395 1948 1396 2022 1396 2000 1396 1948 1397 2000 1397 1995 1397 1995 1398 1981 1398 1948 1398 1948 1399 1981 1399 1960 1399 1948 1400 1960 1400 1933 1400 1934 1401 1865 1401 1950 1401 1950 1402 1865 1402 1877 1402 1950 1403 1877 1403 1956 1403 1956 1404 1877 1404 1895 1404 1956 1405 1895 1405 1915 1405 1956 1406 1915 1406 1960 1406 1960 1407 1915 1407 1933 1407 1934 1408 1921 1408 1865 1408 1865 1409 1921 1409 1852 1409 1852 1410 1921 1410 1905 1410 1862 1411 1761 1411 1879 1411 1761 1412 1780 1412 1879 1412 1879 1413 1780 1413 1800 1413 1879 1414 1800 1414 1905 1414 1905 1415 1800 1415 1808 1415 1905 1416 1808 1416 1852 1416 1827 1417 1727 1417 1738 1417 1827 1418 1738 1418 1856 1418 1856 1419 1738 1419 1750 1419 1856 1420 1750 1420 1761 1420 1813 1421 1699 1421 1706 1421 1813 1422 1706 1422 1827 1422 1827 1423 1706 1423 1713 1423 1827 1424 1713 1424 1727 1424 1674 1425 1813 1425 1803 1425 1674 1426 1803 1426 1807 1426 1674 1427 1681 1427 1813 1427 1813 1428 1681 1428 1684 1428 1813 1429 1684 1429 1699 1429 1807 1430 1818 1430 1674 1430 1674 1431 1818 1431 1822 1431 1674 1432 1822 1432 1678 1432 1678 1433 1822 1433 1837 1433 1678 1434 1837 1434 1687 1434 1704 1435 1702 1435 1837 1435 1837 1436 1702 1436 1687 1436 1854 1437 1723 1437 1837 1437 1837 1438 1723 1438 1717 1438 1837 1439 1717 1439 1704 1439 1854 1440 1866 1440 1723 1440 1723 1441 1866 1441 1888 1441 1723 1442 1888 1442 1753 1442 1753 1443 1888 1443 1903 1443 1753 1444 1903 1444 1760 1444 1760 1445 1903 1445 1762 1445 1762 1446 1903 1446 1932 1446 1762 1447 1932 1447 1788 1447 1843 1448 1932 1448 1860 1448 1932 1449 1843 1449 1802 1449 1932 1450 1802 1450 1788 1450 2056 1451 2081 1451 2041 1451 2041 1452 2081 1452 1944 1452 2041 1453 1944 1453 2027 1453 2027 1454 1944 1454 1917 1454 2027 1455 1917 1455 2017 1455 2017 1456 1917 1456 1901 1456 2017 1457 1901 1457 1875 1457 2003 1458 2017 1458 1875 1458 2003 1459 1875 1459 1990 1459 1990 1460 1875 1460 1860 1460 1990 1461 1860 1461 1970 1461 1970 1462 1860 1462 1932 1462 1970 1463 1932 1463 1965 1463 1695 1464 1680 1464 1538 1464 1805 1465 1810 1465 1787 1465 1787 1466 1810 1466 1815 1466 1787 1467 1815 1467 1778 1467 1815 1468 1431 1468 1778 1468 1778 1469 1431 1469 1429 1469 1778 1470 1429 1470 1708 1470 1708 1471 1429 1471 1424 1471 1708 1472 1424 1472 1672 1472 1672 1473 1424 1473 1427 1473 1436 1474 1615 1474 1430 1474 1430 1475 1615 1475 1629 1475 1430 1476 1629 1476 1427 1476 1427 1477 1629 1477 1672 1477 1445 1478 1602 1478 1439 1478 1439 1479 1602 1479 1606 1479 1439 1480 1606 1480 1436 1480 1436 1481 1606 1481 1609 1481 1436 1482 1609 1482 1615 1482 1588 1483 1586 1483 1450 1483 1450 1484 1586 1484 1590 1484 1450 1485 1590 1485 1595 1485 1450 1486 1595 1486 1445 1486 1445 1487 1595 1487 1597 1487 1445 1488 1597 1488 1602 1488 1491 1489 1601 1489 1485 1489 1485 1490 1601 1490 1598 1490 1485 1491 1598 1491 1480 1491 1480 1492 1598 1492 1593 1492 1480 1493 1593 1493 1450 1493 1450 1494 1593 1494 1588 1494 1503 1495 1628 1495 1617 1495 1503 1496 1617 1496 1608 1496 1503 1497 1608 1497 1491 1497 1491 1498 1608 1498 1605 1498 1491 1499 1605 1499 1601 1499 1648 1500 1650 1500 1509 1500 1509 1501 1650 1501 1628 1501 1509 1502 1628 1502 1507 1502 1507 1503 1628 1503 1503 1503 1652 1504 1646 1504 1523 1504 1509 1505 1522 1505 1648 1505 1648 1506 1522 1506 1523 1506 1648 1507 1523 1507 1647 1507 1647 1508 1523 1508 1646 1508 1523 1509 1529 1509 1652 1509 1652 1510 1529 1510 1532 1510 1652 1511 1532 1511 1662 1511 1662 1512 1532 1512 1667 1512 1667 1513 1532 1513 1680 1513 1680 1514 1532 1514 1538 1514 1783 1515 1763 1515 1553 1515 1553 1516 1763 1516 1749 1516 1553 1517 1749 1517 1550 1517 1550 1518 1749 1518 1733 1518 1550 1519 1733 1519 1546 1519 1546 1520 1733 1520 1720 1520 1546 1521 1720 1521 1538 1521 1538 1522 1720 1522 1695 1522 1553 1523 1559 1523 1783 1523 1783 1524 1559 1524 1793 1524 1793 1525 1559 1525 1560 1525 1793 1526 1560 1526 1798 1526 1798 1527 1560 1527 1842 1527 1842 1528 1560 1528 1555 1528 1842 1529 1555 1529 1851 1529 1851 1530 1555 1530 1552 1530 1851 1531 1552 1531 1887 1531 1887 1532 1552 1532 1548 1532 1887 1533 1548 1533 1902 1533 1902 1534 1548 1534 1540 1534 1902 1535 1540 1535 1911 1535 1937 1536 1540 1536 1925 1536 1925 1537 1540 1537 1526 1537 1911 1538 1540 1538 1930 1538 1930 1539 1540 1539 1937 1539 1521 1540 1919 1540 1526 1540 1526 1541 1919 1541 1923 1541 1526 1542 1923 1542 1925 1542 1512 1543 1505 1543 1906 1543 1521 1544 1517 1544 1919 1544 1919 1545 1517 1545 1512 1545 1919 1546 1512 1546 1913 1546 1913 1547 1512 1547 1906 1547 1859 1548 1869 1548 1477 1548 1477 1549 1869 1549 1873 1549 1477 1550 1873 1550 1494 1550 1494 1551 1873 1551 1881 1551 1494 1552 1881 1552 1497 1552 1497 1553 1881 1553 1505 1553 1505 1554 1881 1554 1892 1554 1505 1555 1892 1555 1906 1555 1859 1556 1477 1556 1451 1556 1859 1557 1451 1557 1844 1557 1451 1558 1835 1558 1839 1558 1451 1559 1839 1559 1844 1559 1826 1560 1832 1560 1444 1560 1444 1561 1832 1561 1835 1561 1444 1562 1835 1562 1447 1562 1447 1563 1835 1563 1451 1563 1819 1564 1437 1564 1815 1564 1815 1565 1437 1565 1433 1565 1815 1566 1433 1566 1431 1566 1440 1567 1437 1567 1819 1567 1440 1568 1819 1568 1444 1568 1444 1569 1819 1569 1826 1569 2658 1570 2564 1570 2560 1570 2662 1571 2516 1571 2522 1571 2522 1572 2525 1572 2662 1572 2529 1573 2531 1573 2768 1573 2545 1574 2825 1574 2821 1574 2873 1575 2660 1575 2675 1575 2754 1576 2760 1576 2875 1576 2763 1577 2758 1577 2869 1577 2855 1578 2690 1578 2689 1578 2689 1579 2680 1579 2855 1579 2664 1580 2653 1580 2847 1580 2847 1581 2653 1581 2648 1581 2831 1582 2607 1582 2829 1582 2829 1583 2607 1583 2823 1583 2393 1584 2408 1584 2420 1584 2421 1585 2409 1585 2206 1585 2206 1586 2409 1586 2394 1586 2671 1587 2655 1587 2683 1587 2683 1588 2655 1588 2643 1588 2683 1589 2643 1589 2694 1589 2694 1590 2643 1590 2625 1590 2694 1591 2625 1591 2703 1591 2703 1592 2625 1592 2421 1592 2703 1593 2421 1593 2702 1593 2702 1594 2421 1594 2420 1594 2702 1595 2420 1595 2624 1595 2323 1596 2206 1596 2394 1596 2323 1597 2394 1597 2351 1597 2351 1598 2394 1598 2369 1598 2421 1599 2206 1599 2420 1599 2420 1600 2206 1600 2205 1600 2420 1601 2205 1601 2393 1601 2682 1602 2693 1602 2670 1602 2670 1603 2693 1603 2702 1603 2670 1604 2702 1604 2654 1604 2654 1605 2702 1605 2624 1605 2654 1606 2624 1606 2642 1606 2350 1607 2368 1607 2322 1607 2322 1608 2368 1608 2393 1608 2322 1609 2393 1609 2205 1609 2684 1610 2695 1610 2753 1610 2676 1611 2665 1611 2687 1611 2687 1612 2665 1612 2649 1612 2687 1613 2649 1613 2696 1613 2696 1614 2649 1614 2631 1614 2696 1615 2631 1615 2752 1615 2752 1616 2631 1616 2753 1616 2359 1617 2381 1617 2336 1617 2336 1618 2381 1618 2402 1618 2336 1619 2402 1619 2302 1619 2302 1620 2402 1620 2424 1620 2302 1621 2424 1621 2291 1621 2291 1622 2424 1622 2632 1622 2291 1623 2632 1623 2290 1623 2672 1624 2684 1624 2656 1624 2656 1625 2684 1625 2632 1625 2656 1626 2632 1626 2644 1626 2401 1627 2380 1627 2423 1627 2423 1628 2380 1628 2358 1628 2684 1629 2753 1629 2632 1629 2632 1630 2753 1630 2631 1630 2632 1631 2631 1631 2290 1631 2290 1632 2631 1632 2423 1632 2290 1633 2423 1633 2301 1633 2301 1634 2423 1634 2358 1634 2301 1635 2358 1635 2335 1635 1291 1636 1292 1636 1285 1636 1285 1637 1292 1637 1289 1637 1285 1638 1289 1638 1278 1638 1278 1639 1289 1639 1287 1639 1278 1640 1287 1640 1276 1640 1276 1641 1287 1641 1274 1641 1274 1642 1287 1642 1272 1642 1272 1643 1287 1643 1283 1643 1272 1644 1283 1644 1268 1644 1268 1645 1283 1645 1280 1645 2312 1646 2315 1646 2317 1646 2317 1647 2315 1647 2333 1647 1293 1648 1291 1648 1285 1648 1293 1649 1285 1649 1286 1649 1286 1650 1285 1650 1278 1650 1286 1651 1278 1651 1279 1651 1279 1652 1278 1652 1276 1652 1279 1653 1276 1653 1277 1653 1277 1654 1276 1654 1274 1654 1277 1655 1274 1655 1275 1655 1275 1656 1274 1656 1272 1656 1275 1657 1272 1657 1273 1657 1284 1658 1283 1658 1287 1658 1284 1659 1287 1659 1288 1659 1288 1660 1287 1660 1289 1660 1288 1661 1289 1661 1290 1661 1290 1662 1289 1662 1292 1662 1290 1663 1292 1663 1294 1663 1294 1664 1293 1664 1290 1664 1290 1665 1293 1665 1286 1665 1290 1666 1286 1666 1288 1666 1288 1667 1286 1667 1279 1667 1288 1668 1279 1668 1277 1668 1288 1669 1277 1669 1275 1669 1288 1670 1275 1670 1284 1670 1284 1671 1275 1671 1273 1671 1284 1672 1273 1672 1282 1672 1282 1673 1273 1673 1270 1673 2630 1674 2805 1674 2807 1674 2630 1675 2809 1675 2811 1675 2630 1676 2811 1676 2813 1676 2630 1677 2813 1677 2815 1677 2630 1678 2815 1678 2817 1678 2630 1679 2817 1679 2819 1679 2630 1680 2819 1680 2818 1680 2630 1681 2818 1681 2816 1681 2630 1682 2816 1682 2814 1682 2630 1683 2814 1683 2812 1683 2630 1684 2812 1684 2810 1684 2630 1685 2810 1685 2808 1685 2630 1686 2808 1686 2806 1686 2630 1687 2806 1687 2804 1687 2630 1688 2804 1688 2802 1688 2630 1689 2802 1689 2800 1689 2630 1690 2800 1690 2798 1690 2630 1691 2798 1691 2796 1691 2630 1692 2796 1692 2797 1692 2630 1693 2797 1693 2799 1693 2630 1694 2799 1694 2801 1694 2630 1695 2801 1695 2803 1695 2630 1696 2803 1696 2805 1696 2803 1697 2758 1697 2763 1697 2754 1698 2807 1698 2760 1698 2760 1699 2807 1699 2805 1699 2760 1700 2805 1700 2764 1700 2803 1701 2763 1701 2805 1701 2805 1702 2763 1702 2764 1702 2801 1703 2756 1703 2803 1703 2803 1704 2756 1704 2758 1704 2802 1705 2804 1705 2737 1705 2737 1706 2804 1706 2806 1706 2737 1707 2806 1707 2738 1707 2738 1708 2806 1708 2808 1708 2738 1709 2808 1709 2740 1709 2740 1710 2808 1710 2810 1710 2740 1711 2810 1711 2742 1711 2742 1712 2810 1712 2812 1712 2742 1713 2812 1713 2744 1713 2744 1714 2812 1714 2814 1714 2744 1715 2814 1715 2746 1715 2746 1716 2814 1716 2816 1716 2746 1717 2816 1717 2748 1717 2748 1718 2816 1718 2818 1718 2748 1719 2818 1719 2750 1719 2750 1720 2818 1720 2819 1720 2750 1721 2819 1721 2751 1721 2751 1722 2819 1722 2817 1722 2751 1723 2817 1723 2749 1723 2749 1724 2817 1724 2815 1724 2749 1725 2815 1725 2747 1725 2747 1726 2815 1726 2813 1726 2747 1727 2813 1727 2745 1727 2745 1728 2813 1728 2743 1728 2743 1729 2813 1729 2811 1729 2743 1730 2811 1730 2809 1730 2743 1731 2809 1731 2741 1731 2741 1732 2809 1732 2807 1732 2741 1733 2807 1733 2754 1733 2737 1734 2735 1734 2802 1734 2802 1735 2735 1735 2732 1735 2802 1736 2732 1736 2800 1736 2800 1737 2732 1737 2730 1737 2800 1738 2730 1738 2798 1738 2798 1739 2730 1739 2728 1739 2798 1740 2728 1740 2796 1740 2796 1741 2728 1741 2729 1741 2796 1742 2729 1742 2797 1742 2797 1743 2729 1743 2731 1743 2797 1744 2731 1744 2799 1744 2799 1745 2731 1745 2734 1745 2799 1746 2734 1746 2801 1746 2801 1747 2734 1747 2736 1747 2801 1748 2736 1748 2756 1748 2181 1749 2266 1749 2180 1749 2180 1750 2266 1750 2268 1750 2180 1751 2268 1751 2182 1751 2182 1752 2268 1752 2270 1752 2182 1753 2270 1753 2184 1753 2184 1754 2270 1754 2272 1754 2184 1755 2272 1755 2186 1755 2186 1756 2272 1756 2274 1756 2186 1757 2274 1757 2189 1757 2189 1758 2274 1758 2276 1758 2189 1759 2276 1759 2191 1759 2191 1760 2276 1760 2278 1760 2191 1761 2278 1761 2193 1761 2193 1762 2278 1762 2280 1762 2193 1763 2280 1763 2195 1763 2195 1764 2280 1764 2282 1764 2195 1765 2282 1765 2197 1765 2197 1766 2282 1766 2284 1766 2197 1767 2284 1767 2199 1767 2199 1768 2284 1768 2286 1768 2199 1769 2286 1769 2201 1769 2201 1770 2286 1770 2288 1770 2201 1771 2288 1771 2203 1771 2203 1772 2288 1772 2289 1772 2203 1773 2289 1773 2204 1773 2204 1774 2289 1774 2287 1774 2204 1775 2287 1775 2202 1775 2202 1776 2287 1776 2285 1776 2202 1777 2285 1777 2200 1777 2200 1778 2285 1778 2283 1778 2200 1779 2283 1779 2198 1779 2198 1780 2283 1780 2281 1780 2198 1781 2281 1781 2196 1781 2196 1782 2281 1782 2279 1782 2196 1783 2279 1783 2194 1783 2194 1784 2279 1784 2277 1784 2194 1785 2277 1785 2192 1785 2192 1786 2277 1786 2275 1786 2192 1787 2275 1787 2190 1787 2190 1788 2275 1788 2273 1788 2190 1789 2273 1789 2188 1789 2188 1790 2273 1790 2271 1790 2188 1791 2271 1791 2185 1791 2185 1792 2271 1792 2269 1792 2185 1793 2269 1793 2183 1793 2183 1794 2269 1794 2267 1794 2183 1795 2267 1795 2181 1795 2181 1796 2267 1796 2266 1796 2187 1797 2196 1797 2194 1797 2187 1798 2194 1798 2192 1798 2187 1799 2192 1799 2190 1799 2187 1800 2190 1800 2188 1800 2187 1801 2188 1801 2185 1801 2187 1802 2185 1802 2183 1802 2187 1803 2183 1803 2181 1803 2187 1804 2181 1804 2180 1804 2187 1805 2180 1805 2182 1805 2187 1806 2182 1806 2184 1806 2187 1807 2184 1807 2186 1807 2187 1808 2186 1808 2189 1808 2187 1809 2189 1809 2191 1809 2187 1810 2191 1810 2193 1810 2187 1811 2193 1811 2195 1811 2187 1812 2195 1812 2197 1812 2187 1813 2197 1813 2199 1813 2187 1814 2199 1814 2201 1814 2187 1815 2201 1815 2203 1815 2187 1816 2203 1816 2204 1816 2187 1817 2204 1817 2202 1817 2187 1818 2202 1818 2200 1818 2187 1819 2200 1819 2198 1819 2187 1820 2198 1820 2196 1820 1930 1821 1937 1821 1941 1821 1937 1822 1959 1822 1941 1822 1941 1823 1959 1823 1967 1823 1941 1824 1967 1824 1975 1824 1851 1825 1899 1825 1849 1825 1851 1826 1849 1826 1842 1826 1851 1827 1887 1827 1899 1827 1899 1828 1887 1828 1902 1828 1899 1829 1902 1829 1941 1829 1941 1830 1902 1830 1911 1830 1941 1831 1911 1831 1930 1831 1763 1832 1783 1832 1791 1832 1791 1833 1783 1833 1793 1833 1791 1834 1793 1834 1849 1834 1849 1835 1793 1835 1798 1835 1849 1836 1798 1836 1842 1836 1763 1837 1791 1837 1749 1837 1749 1838 1791 1838 1775 1838 1749 1839 1775 1839 1746 1839 1749 1840 1746 1840 1733 1840 1733 1841 1746 1841 1693 1841 1733 1842 1693 1842 1720 1842 1667 1843 1680 1843 1654 1843 1654 1844 1680 1844 1695 1844 1654 1845 1695 1845 1693 1845 1693 1846 1695 1846 1720 1846 1667 1847 1654 1847 1662 1847 1662 1848 1654 1848 1652 1848 1652 1849 1654 1849 1643 1849 1652 1850 1643 1850 1646 1850 1661 1851 1650 1851 1655 1851 1655 1852 1650 1852 1648 1852 1655 1853 1648 1853 1643 1853 1643 1854 1648 1854 1647 1854 1643 1855 1647 1855 1646 1855 1711 1856 1694 1856 1742 1856 1742 1857 1694 1857 1747 1857 1711 1858 1697 1858 1694 1858 1694 1859 1697 1859 1655 1859 1655 1860 1697 1860 1668 1860 1655 1861 1668 1861 1661 1861 1742 1862 1747 1862 1751 1862 1751 1863 1747 1863 1776 1863 1751 1864 1776 1864 1764 1864 1764 1865 1776 1865 1785 1865 1850 1866 1852 1866 1808 1866 1850 1867 1808 1867 1794 1867 1850 1868 1794 1868 1785 1868 1785 1869 1794 1869 1764 1869 1900 1870 1895 1870 1850 1870 1850 1871 1895 1871 1877 1871 1877 1872 1865 1872 1850 1872 1850 1873 1865 1873 1852 1873 1942 1874 1933 1874 1915 1874 1942 1875 1915 1875 1900 1875 1900 1876 1915 1876 1895 1876 1933 1877 1942 1877 1948 1877 1948 1878 1942 1878 1976 1878 1948 1879 1976 1879 1957 1879 1957 1880 1976 1880 1968 1880 1968 1881 1976 1881 1986 1881 1986 1882 1976 1882 2011 1882 1986 1883 2011 1883 1991 1883 2033 1884 2026 1884 2038 1884 2038 1885 2026 1885 2016 1885 2038 1886 2016 1886 2011 1886 2011 1887 2016 1887 2007 1887 2011 1888 2007 1888 1991 1888 2033 1889 2038 1889 2045 1889 2045 1890 2038 1890 2061 1890 2045 1891 2061 1891 2064 1891 2076 1892 2064 1892 2061 1892 2057 1893 2074 1893 2076 1893 2076 1894 2074 1894 2064 1894 2076 1895 2060 1895 2057 1895 2010 1896 2004 1896 2037 1896 2037 1897 2004 1897 2018 1897 2018 1898 2032 1898 2037 1898 2037 1899 2032 1899 2060 1899 2060 1900 2032 1900 2044 1900 2060 1901 2044 1901 2057 1901 1975 1902 1967 1902 1992 1902 1975 1903 1992 1903 2010 1903 2010 1904 1992 1904 2004 1904 2063 1905 2089 1905 2430 1905 2430 1906 2089 1906 2097 1906 2430 1907 2097 1907 2454 1907 2454 1908 2097 1908 2458 1908 2458 1909 2097 1909 2102 1909 2458 1910 2102 1910 2468 1910 2415 1911 1998 1911 2030 1911 2430 1912 2428 1912 2063 1912 2063 1913 2428 1913 2415 1913 2063 1914 2415 1914 2030 1914 1998 1915 2415 1915 2387 1915 1998 1916 2387 1916 1980 1916 1980 1917 2387 1917 2367 1917 1980 1918 2367 1918 1947 1918 1947 1919 2367 1919 1910 1919 1910 1920 2367 1920 2356 1920 1910 1921 2356 1921 1884 1921 2356 1922 2343 1922 1884 1922 1884 1923 2343 1923 2321 1923 1884 1924 2321 1924 2328 1924 1884 1925 2328 1925 2333 1925 1884 1926 2333 1926 2315 1926 1884 1927 2315 1927 1824 1927 2299 1928 1755 1928 1768 1928 2299 1929 1768 1929 1782 1929 2315 1930 2303 1930 1824 1930 1824 1931 2303 1931 1782 1931 1782 1932 2303 1932 2299 1932 1755 1933 2299 1933 2311 1933 1755 1934 2311 1934 1671 1934 2354 1935 1640 1935 2339 1935 2339 1936 1640 1936 1660 1936 2339 1937 1660 1937 1671 1937 2339 1938 1671 1938 2311 1938 2354 1939 2361 1939 1640 1939 1640 1940 2361 1940 2377 1940 1640 1941 2377 1941 1623 1941 1623 1942 2377 1942 2385 1942 1623 1943 2385 1943 1621 1943 1621 1944 2385 1944 2399 1944 2399 1945 2403 1945 1621 1945 1621 1946 2403 1946 2417 1946 1621 1947 2417 1947 1619 1947 1619 1948 2417 1948 1632 1948 1632 1949 2417 1949 2426 1949 1657 1950 1637 1950 2460 1950 2460 1951 1637 1951 1632 1951 2460 1952 1632 1952 2456 1952 2456 1953 1632 1953 2432 1953 2432 1954 1632 1954 2426 1954 2470 1955 1689 1955 2460 1955 2460 1956 1689 1956 1657 1956 1766 1957 1730 1957 2470 1957 2470 1958 1730 1958 1689 1958 1766 1959 2470 1959 1797 1959 1797 1960 2470 1960 2479 1960 1797 1961 2479 1961 1831 1961 1831 1962 2479 1962 1871 1962 2529 1963 1983 1963 2505 1963 2529 1964 2505 1964 2520 1964 2529 1965 2520 1965 2531 1965 2479 1966 2491 1966 1871 1966 1871 1967 2491 1967 1890 1967 1890 1968 2491 1968 2496 1968 1890 1969 2496 1969 1928 1969 1928 1970 2496 1970 2505 1970 1928 1971 2505 1971 1964 1971 1964 1972 2505 1972 1983 1972 2525 1973 2043 1973 1983 1973 2525 1974 1983 1974 2528 1974 2528 1975 1983 1975 2529 1975 2525 1976 2522 1976 2043 1976 2043 1977 2522 1977 2516 1977 2043 1978 2516 1978 2085 1978 2085 1979 2516 1979 2095 1979 2516 1980 2514 1980 2095 1980 2095 1981 2514 1981 2509 1981 2095 1982 2509 1982 2101 1982 2101 1983 2509 1983 2112 1983 2112 1984 2509 1984 2508 1984 2112 1985 2508 1985 2116 1985 2116 1986 2508 1986 2130 1986 2130 1987 2508 1987 2511 1987 2130 1988 2511 1988 2503 1988 2503 1989 2511 1989 2515 1989 2102 1990 2110 1990 2468 1990 2468 1991 2110 1991 2120 1991 2468 1992 2120 1992 2477 1992 2120 1993 2132 1993 2477 1993 2477 1994 2132 1994 2135 1994 2477 1995 2135 1995 2485 1995 2485 1996 2135 1996 2150 1996 2485 1997 2150 1997 2493 1997 2493 1998 2150 1998 2148 1998 2493 1999 2148 1999 2501 1999 2501 2000 2148 2000 2146 2000 2501 2001 2146 2001 2503 2001 2503 2002 2146 2002 2139 2002 2503 2003 2139 2003 2130 2003 2307 2004 2320 2004 1575 2004 2386 2005 2392 2005 1564 2005 1564 2006 2392 2006 2407 2006 1513 2007 2384 2007 2362 2007 1476 2008 2258 2008 1473 2008 1483 2009 2257 2009 2298 2009 2367 2010 2387 2010 1533 2010 1533 2011 2387 2011 2415 2011 2347 2012 1571 2012 2364 2012 2347 2013 2337 2013 1571 2013 1571 2014 2337 2014 2319 2014 2319 2015 2309 2015 1571 2015 1581 2016 2253 2016 1641 2016 2250 2017 1728 2017 1715 2017 2253 2018 1705 2018 1641 2018 2250 2019 1737 2019 1728 2019 2780 2020 2775 2020 2773 2020 2780 2021 2773 2021 2771 2021 2780 2022 2771 2022 2772 2022 2780 2023 2772 2023 2774 2023 2780 2024 2774 2024 2776 2024 2780 2025 2776 2025 2778 2025 2780 2026 2778 2026 2781 2026 2780 2027 2781 2027 2783 2027 2780 2028 2783 2028 2785 2028 2780 2029 2785 2029 2787 2029 2780 2030 2787 2030 2789 2030 2780 2031 2789 2031 2791 2031 2780 2032 2791 2032 2793 2032 2780 2033 2793 2033 2795 2033 2780 2034 2795 2034 2794 2034 2780 2035 2794 2035 2792 2035 2780 2036 2792 2036 2790 2036 2780 2037 2790 2037 2788 2037 2780 2038 2788 2038 2786 2038 2780 2039 2786 2039 2784 2039 2780 2040 2784 2040 2782 2040 2780 2041 2782 2041 2779 2041 2780 2042 2779 2042 2777 2042 2780 2043 2777 2043 2775 2043 2711 2044 2715 2044 2713 2044 2759 2045 2761 2045 2785 2045 2755 2046 2789 2046 2757 2046 2757 2047 2789 2047 2787 2047 2785 2048 2761 2048 2787 2048 2787 2049 2761 2049 2762 2049 2787 2050 2762 2050 2757 2050 2759 2051 2785 2051 2715 2051 2715 2052 2785 2052 2783 2052 2715 2053 2783 2053 2781 2053 2715 2054 2781 2054 2713 2054 2713 2055 2781 2055 2778 2055 2713 2056 2778 2056 2711 2056 2711 2057 2778 2057 2776 2057 2711 2058 2776 2058 2709 2058 2709 2059 2776 2059 2774 2059 2709 2060 2774 2060 2707 2060 2707 2061 2774 2061 2772 2061 2707 2062 2772 2062 2705 2062 2705 2063 2772 2063 2771 2063 2705 2064 2771 2064 2704 2064 2704 2065 2771 2065 2773 2065 2704 2066 2773 2066 2706 2066 2706 2067 2773 2067 2775 2067 2706 2068 2775 2068 2708 2068 2708 2069 2775 2069 2777 2069 2708 2070 2777 2070 2710 2070 2710 2071 2777 2071 2712 2071 2712 2072 2777 2072 2779 2072 2712 2073 2779 2073 2782 2073 2712 2074 2782 2074 2714 2074 2714 2075 2782 2075 2784 2075 2714 2076 2784 2076 2716 2076 2716 2077 2784 2077 2786 2077 2716 2078 2786 2078 2717 2078 2717 2079 2786 2079 2788 2079 2717 2080 2788 2080 2718 2080 2718 2081 2788 2081 2790 2081 2718 2082 2790 2082 2721 2082 2721 2083 2790 2083 2792 2083 2721 2084 2792 2084 2724 2084 2724 2085 2792 2085 2794 2085 2724 2086 2794 2086 2726 2086 2726 2087 2794 2087 2795 2087 2726 2088 2795 2088 2727 2088 2727 2089 2795 2089 2793 2089 2727 2090 2793 2090 2725 2090 2725 2091 2793 2091 2791 2091 2725 2092 2791 2092 2723 2092 2723 2093 2791 2093 2789 2093 2723 2094 2789 2094 2720 2094 2720 2095 2789 2095 2755 2095 2720 2096 2755 2096 2719 2096 2716 2097 2717 2097 2714 2097 2714 2098 2717 2098 2718 2098 2714 2099 2718 2099 2712 2099 2178 2100 2229 2100 2179 2100 2179 2101 2229 2101 2227 2101 2179 2102 2227 2102 2177 2102 2177 2103 2227 2103 2225 2103 2177 2104 2225 2104 2175 2104 2175 2105 2225 2105 2162 2105 2175 2106 2162 2106 2173 2106 2173 2107 2162 2107 2222 2107 2173 2108 2222 2108 2171 2108 2171 2109 2222 2109 2220 2109 2171 2110 2220 2110 2169 2110 2169 2111 2220 2111 2218 2111 2169 2112 2218 2112 2167 2112 2167 2113 2218 2113 2216 2113 2167 2114 2216 2114 2165 2114 2165 2115 2216 2115 2214 2115 2165 2116 2214 2116 2163 2116 2163 2117 2214 2117 2212 2117 2163 2118 2212 2118 2160 2118 2160 2119 2212 2119 2210 2119 2160 2120 2210 2120 2158 2120 2158 2121 2210 2121 2208 2121 2158 2122 2208 2122 2156 2122 2156 2123 2208 2123 2207 2123 2156 2124 2207 2124 2155 2124 2155 2125 2207 2125 2209 2125 2155 2126 2209 2126 2157 2126 2157 2127 2209 2127 2211 2127 2157 2128 2211 2128 2159 2128 2159 2129 2211 2129 2213 2129 2159 2130 2213 2130 2161 2130 2161 2131 2213 2131 2215 2131 2161 2132 2215 2132 2164 2132 2164 2133 2215 2133 2217 2133 2164 2134 2217 2134 2166 2134 2166 2135 2217 2135 2219 2135 2166 2136 2219 2136 2168 2136 2168 2137 2219 2137 2221 2137 2168 2138 2221 2138 2170 2138 2170 2139 2221 2139 2223 2139 2170 2140 2223 2140 2172 2140 2172 2141 2223 2141 2224 2141 2172 2142 2224 2142 2174 2142 2174 2143 2224 2143 2226 2143 2174 2144 2226 2144 2176 2144 2176 2145 2226 2145 2228 2145 2176 2146 2228 2146 2178 2146 2178 2147 2228 2147 2229 2147 2162 2148 2168 2148 2170 2148 2162 2149 2170 2149 2172 2149 2162 2150 2172 2150 2174 2150 2162 2151 2174 2151 2176 2151 2162 2152 2176 2152 2178 2152 2162 2153 2178 2153 2179 2153 2162 2154 2179 2154 2177 2154 2162 2155 2177 2155 2175 2155 2162 2156 2173 2156 2171 2156 2162 2157 2171 2157 2169 2157 2162 2158 2169 2158 2167 2158 2162 2159 2167 2159 2165 2159 2162 2160 2165 2160 2163 2160 2162 2161 2163 2161 2160 2161 2162 2162 2160 2162 2158 2162 2162 2163 2158 2163 2156 2163 2162 2164 2156 2164 2155 2164 2162 2165 2155 2165 2157 2165 2162 2166 2157 2166 2159 2166 2162 2167 2159 2167 2161 2167 2162 2168 2161 2168 2164 2168 2162 2169 2164 2169 2166 2169 2162 2170 2166 2170 2168 2170 1770 2171 1816 2171 1786 2171 1786 2172 1816 2172 1811 2172 1786 2173 1811 2173 1804 2173 1442 2174 1825 2174 1820 2174 1442 2175 1820 2175 1441 2175 1441 2176 1820 2176 1435 2176 1441 2177 1435 2177 1438 2177 1435 2178 1820 2178 1816 2178 1435 2179 1816 2179 1432 2179 1432 2180 1816 2180 1770 2180 1432 2181 1770 2181 1428 2181 1479 2182 1858 2182 1462 2182 1462 2183 1858 2183 1454 2183 1858 2184 1845 2184 1454 2184 1454 2185 1845 2185 1836 2185 1454 2186 1836 2186 1448 2186 1448 2187 1836 2187 1442 2187 1442 2188 1836 2188 1833 2188 1442 2189 1833 2189 1825 2189 1502 2190 1891 2190 1882 2190 1502 2191 1882 2191 1493 2191 1493 2192 1882 2192 1872 2192 1493 2193 1872 2193 1482 2193 1482 2194 1872 2194 1479 2194 1479 2195 1872 2195 1868 2195 1479 2196 1868 2196 1858 2196 1926 2197 1922 2197 1527 2197 1527 2198 1922 2198 1920 2198 1527 2199 1920 2199 1524 2199 1524 2200 1920 2200 1916 2200 1524 2201 1916 2201 1511 2201 1511 2202 1916 2202 1912 2202 1511 2203 1912 2203 1502 2203 1502 2204 1912 2204 1908 2204 1502 2205 1908 2205 1891 2205 1537 2206 1938 2206 1527 2206 1527 2207 1938 2207 1926 2207 1945 2208 1938 2208 1537 2208 1945 2209 1537 2209 1929 2209 1929 2210 1537 2210 1543 2210 1929 2211 1543 2211 1893 2211 1893 2212 1543 2212 1547 2212 1893 2213 1547 2213 1885 2213 1885 2214 1547 2214 1554 2214 1561 2215 1841 2215 1556 2215 1556 2216 1841 2216 1855 2216 1556 2217 1855 2217 1554 2217 1554 2218 1855 2218 1874 2218 1554 2219 1874 2219 1885 2219 1561 2220 1792 2220 1841 2220 1561 2221 1557 2221 1792 2221 1792 2222 1557 2222 1757 2222 1679 2223 1696 2223 1545 2223 1545 2224 1696 2224 1710 2224 1545 2225 1710 2225 1549 2225 1549 2226 1710 2226 1748 2226 1549 2227 1748 2227 1551 2227 1551 2228 1748 2228 1557 2228 1557 2229 1748 2229 1757 2229 1545 2230 1539 2230 1679 2230 1679 2231 1539 2231 1531 2231 1679 2232 1531 2232 1656 2232 1518 2233 1644 2233 1528 2233 1528 2234 1644 2234 1651 2234 1528 2235 1651 2235 1531 2235 1531 2236 1651 2236 1656 2236 1630 2237 1649 2237 1510 2237 1510 2238 1649 2238 1645 2238 1510 2239 1645 2239 1518 2239 1518 2240 1645 2240 1644 2240 1492 2241 1603 2241 1504 2241 1504 2242 1603 2242 1611 2242 1510 2243 1504 2243 1630 2243 1630 2244 1504 2244 1616 2244 1616 2245 1504 2245 1611 2245 1478 2246 1596 2246 1484 2246 1484 2247 1596 2247 1600 2247 1484 2248 1600 2248 1492 2248 1492 2249 1600 2249 1603 2249 1456 2250 1591 2250 1478 2250 1478 2251 1591 2251 1594 2251 1478 2252 1594 2252 1596 2252 1446 2253 1592 2253 1449 2253 1449 2254 1592 2254 1589 2254 1449 2255 1589 2255 1456 2255 1456 2256 1589 2256 1587 2256 1456 2257 1587 2257 1591 2257 1443 2258 1604 2258 1446 2258 1446 2259 1604 2259 1599 2259 1446 2260 1599 2260 1592 2260 1614 2261 1604 2261 1434 2261 1434 2262 1604 2262 1443 2262 1426 2263 1683 2263 1624 2263 1426 2264 1624 2264 1434 2264 1434 2265 1624 2265 1614 2265 1770 2266 1736 2266 1428 2266 1428 2267 1736 2267 1709 2267 1428 2268 1709 2268 1425 2268 1425 2269 1709 2269 1683 2269 1425 2270 1683 2270 1426 2270 1999 2271 1972 2271 1973 2271 1994 2272 2006 2272 2009 2272 2046 2273 2065 2273 2059 2273 2046 2274 2059 2274 2034 2274 2034 2275 2059 2275 2036 2275 2034 2276 2036 2276 2028 2276 2009 2277 2006 2277 2036 2277 2036 2278 2006 2278 2014 2278 2036 2279 2014 2279 2028 2279 1974 2280 1969 2280 2009 2280 2009 2281 1969 2281 1985 2281 2009 2282 1985 2282 1994 2282 1940 2283 1936 2283 1949 2283 1940 2284 1949 2284 1974 2284 1974 2285 1949 2285 1958 2285 1974 2286 1958 2286 1969 2286 1898 2287 1914 2287 1940 2287 1940 2288 1914 2288 1936 2288 1853 2289 1864 2289 1848 2289 1848 2290 1864 2290 1878 2290 1848 2291 1878 2291 1898 2291 1898 2292 1878 2292 1894 2292 1898 2293 1894 2293 1914 2293 1745 2294 1743 2294 1772 2294 1772 2295 1743 2295 1784 2295 1784 2296 1743 2296 1769 2296 1784 2297 1769 2297 1795 2297 1784 2298 1795 2298 1848 2298 1848 2299 1795 2299 1853 2299 1853 2300 1795 2300 1814 2300 1692 2301 1698 2301 1712 2301 1692 2302 1712 2302 1745 2302 1745 2303 1712 2303 1743 2303 1658 2304 1669 2304 1653 2304 1698 2305 1692 2305 1669 2305 1669 2306 1692 2306 1653 2306 1653 2307 1642 2307 1644 2307 1658 2308 1653 2308 1644 2308 1658 2309 1644 2309 1649 2309 1649 2310 1644 2310 1645 2310 1666 2311 1656 2311 1651 2311 1666 2312 1651 2312 1642 2312 1642 2313 1651 2313 1644 2313 1710 2314 1696 2314 1691 2314 1691 2315 1696 2315 1679 2315 1691 2316 1679 2316 1666 2316 1666 2317 1679 2317 1656 2317 1744 2318 1748 2318 1691 2318 1691 2319 1748 2319 1710 2319 1790 2320 1792 2320 1757 2320 1748 2321 1744 2321 1757 2321 1757 2322 1744 2322 1771 2322 1757 2323 1771 2323 1790 2323 1792 2324 1790 2324 1841 2324 1841 2325 1790 2325 1847 2325 1893 2326 1885 2326 1897 2326 1897 2327 1885 2327 1874 2327 1897 2328 1874 2328 1847 2328 1847 2329 1874 2329 1855 2329 1847 2330 1855 2330 1841 2330 1973 2331 1972 2331 1939 2331 1939 2332 1972 2332 1966 2332 1893 2333 1897 2333 1929 2333 1929 2334 1897 2334 1939 2334 1929 2335 1939 2335 1945 2335 1945 2336 1939 2336 1966 2336 1999 2337 1973 2337 2005 2337 2005 2338 1973 2338 2008 2338 2005 2339 2008 2339 2021 2339 2021 2340 2008 2340 2035 2340 2021 2341 2035 2341 2031 2341 2058 2342 2047 2342 2035 2342 2035 2343 2047 2343 2031 2343 2071 2344 2066 2344 2075 2344 2075 2345 2066 2345 2058 2345 2058 2346 2066 2346 2055 2346 2058 2347 2055 2347 2047 2347 2059 2348 2065 2348 2073 2348 2059 2349 2073 2349 2075 2349 2075 2350 2073 2350 2071 2350 2234 2351 1468 2351 1466 2351 2231 2352 1461 2352 1455 2352 1501 2353 2304 2353 2326 2353 2378 2354 1514 2354 2371 2354 2396 2355 1536 2355 2389 2355 1563 2356 2395 2356 2373 2356 1567 2357 2365 2357 1570 2357 1573 2358 2355 2358 2330 2358 2330 2359 2313 2359 1573 2359 1579 2360 2295 2360 1607 2360 2245 2361 1714 2361 1724 2361 1634 2362 1664 2362 2242 2362 2338 2363 2346 2363 1572 2363 1562 2364 2372 2364 2382 2364 1562 2365 2382 2365 2390 2365 2324 2366 2325 2366 1489 2366 2327 2367 1498 2367 2334 2367 2325 2368 2306 2368 1489 2368 1452 2369 1458 2369 2230 2369 1584 2370 1585 2370 2879 2370 2879 2371 1585 2371 2883 2371 2879 2372 2883 2372 2882 2372 2880 2373 2881 2373 2878 2373 1194 2374 1193 2374 1192 2374 1122 2375 1121 2375 1105 2375 1105 2375 1106 2375 1122 2375 1170 2376 1169 2376 1153 2376 1153 2376 1154 2376 1170 2376 1096 2377 1095 2377 1111 2377 1111 2377 1112 2377 1096 2377 1144 2378 1143 2378 1159 2378 1159 2378 1160 2378 1144 2378 1116 2379 1100 2379 1107 2379 1107 2379 1109 2379 1116 2379 1101 2380 1117 2380 1110 2380 1110 2380 1108 2380 1101 2380 1163 2381 1147 2381 1155 2381 1155 2381 1157 2381 1163 2381 1150 2382 1166 2382 1167 2382 1167 2382 1151 2382 1150 2382 1087 2383 1088 2383 1100 2383 1127 2384 1128 2384 1147 2384 1163 2385 1175 2385 1174 2385 1116 2386 1128 2386 1127 2386 1087 2387 1100 2387 1116 2387 1116 2387 1127 2387 1087 2387 1147 2388 1163 2388 1174 2388 1174 2388 1127 2388 1147 2388 1089 2389 1101 2389 1090 2389 1117 2390 1129 2390 1130 2390 1178 2391 1179 2391 1166 2391 1150 2392 1130 2392 1129 2392 1089 2393 1090 2393 1216 2393 1201 2394 1191 2394 1190 2394 1089 2395 1129 2395 1117 2395 1117 2395 1101 2395 1089 2395 1166 2396 1150 2396 1129 2396 1129 2396 1178 2396 1166 2396 1254 2397 1258 2397 1256 2397 1263 2398 1260 2398 1259 2398 1247 2399 1246 2399 1241 2399 1241 2399 1242 2399 1247 2399 1259 2400 1260 2400 1256 2400 1256 2400 1258 2400 1259 2400 1250 2401 1240 2401 1241 2401 1241 2401 1246 2401 1250 2401 1251 2402 1247 2402 1242 2402 1242 2402 1243 2402 1251 2402 1252 2403 1244 2403 1245 2403 1245 2403 1253 2403 1252 2403 1249 2404 1239 2404 1238 2404 1238 2404 1248 2404 1249 2404 1257 2405 1231 2405 1229 2405 1229 2405 1255 2405 1257 2405 1234 2406 1261 2406 1262 2406 1262 2406 1237 2406 1234 2406 1257 2407 1256 2407 1174 2407 1174 2407 1231 2407 1257 2407 1260 2408 1261 2408 1234 2408 1234 2408 1178 2408 1260 2408 1228 2409 1232 2409 1241 2409 1241 2409 1240 2409 1228 2409 1174 2410 1230 2410 1229 2410 1229 2410 1231 2410 1174 2410 1228 2411 1238 2411 1239 2411 1239 2411 1229 2411 1228 2411 1255 2412 1229 2412 1239 2412 1239 2412 1249 2412 1255 2412 1233 2413 1242 2413 1241 2413 1241 2413 1232 2413 1233 2413 1242 2414 1233 2414 1236 2414 1236 2414 1243 2414 1242 2414 1237 2415 1235 2415 1178 2415 1178 2415 1234 2415 1237 2415 1236 2416 1237 2416 1245 2416 1245 2416 1244 2416 1236 2416 1238 2417 1240 2417 1250 2417 1250 2417 1248 2417 1238 2417 1243 2418 1244 2418 1252 2418 1252 2418 1251 2418 1243 2418 1254 2419 1255 2419 1249 2419 1249 2419 1248 2419 1254 2419 1254 2420 1250 2420 1246 2420 1246 2420 1258 2420 1254 2420 1247 2421 1251 2421 1263 2421 1263 2421 1259 2421 1247 2421 1247 2422 1259 2422 1258 2422 1258 2422 1246 2422 1247 2422 1233 2423 1232 2423 1230 2423 1230 2423 1235 2423 1233 2423 1263 2424 1252 2424 1253 2424 1253 2424 1262 2424 1263 2424 1237 2425 1262 2425 1253 2425 1253 2425 1245 2425 1237 2425 1257 2426 1255 2426 1254 2426 1254 2426 1256 2426 1257 2426 1261 2427 1260 2427 1263 2427 1263 2427 1262 2427 1261 2427 1183 2428 1187 2428 1185 2428 1189 2429 1188 2429 1184 2429 1088 2430 1084 2430 1222 2430 1222 2430 1087 2430 1088 2430 1090 2431 1089 2431 1227 2431 1227 2431 1094 2431 1090 2431 1187 2432 1183 2432 1184 2432 1184 2432 1188 2432 1187 2432 1186 2433 1192 2433 1203 2433 1203 2433 1200 2433 1186 2433 1187 2434 1186 2434 1200 2434 1200 2434 1199 2434 1187 2434 1200 2435 1203 2435 1219 2435 1219 2435 1217 2435 1200 2435 1200 2436 1217 2436 1214 2436 1214 2436 1199 2436 1200 2436 1094 2437 1227 2437 1220 2437 1220 2437 1221 2437 1094 2437 1226 2438 1219 2438 1220 2438 1220 2438 1227 2438 1226 2438 1094 2439 1218 2439 1216 2439 1216 2439 1090 2439 1094 2439 1225 2440 1217 2440 1219 2440 1219 2440 1226 2440 1225 2440 1215 2441 1213 2441 1084 2441 1084 2441 1088 2441 1215 2441 1214 2442 1217 2442 1225 2442 1225 2442 1224 2442 1214 2442 1212 2443 1214 2443 1224 2443 1224 2443 1223 2443 1212 2443 1213 2444 1208 2444 1211 2444 1211 2444 1084 2444 1213 2444 1222 2445 1210 2445 1212 2445 1212 2445 1223 2445 1222 2445 1210 2446 1222 2446 1084 2446 1084 2446 1211 2446 1210 2446 1209 2447 1218 2447 1094 2447 1094 2447 1221 2447 1209 2447 1207 2448 1209 2448 1221 2448 1221 2448 1205 2448 1207 2448 1218 2449 1209 2449 1207 2449 1207 2449 1202 2449 1218 2449 1203 2450 1204 2450 1220 2450 1220 2450 1219 2450 1203 2450 1202 2451 1207 2451 1205 2451 1205 2451 1194 2451 1202 2451 1197 2452 1199 2452 1214 2452 1214 2452 1212 2452 1197 2452 1208 2453 1206 2453 1196 2453 1196 2453 1211 2453 1208 2453 1195 2454 1197 2454 1212 2454 1212 2454 1210 2454 1195 2454 1204 2455 1193 2455 1194 2455 1194 2455 1205 2455 1204 2455 1194 2456 1191 2456 1201 2456 1201 2456 1202 2456 1194 2456 1192 2457 1193 2457 1204 2457 1204 2457 1203 2457 1192 2457 1197 2458 1185 2458 1187 2458 1187 2458 1199 2458 1197 2458 1206 2459 1198 2459 1184 2459 1184 2459 1196 2459 1206 2459 1183 2460 1185 2460 1197 2460 1197 2460 1195 2460 1183 2460 1184 2461 1183 2461 1195 2461 1195 2461 1196 2461 1184 2461 1216 2462 1201 2462 1190 2462 1190 2462 1089 2462 1216 2462 1189 2463 1088 2463 1087 2463 1087 2463 1188 2463 1189 2463 1216 2464 1218 2464 1202 2464 1202 2464 1201 2464 1216 2464 1195 2465 1210 2465 1211 2465 1211 2465 1196 2465 1195 2465 1220 2466 1204 2466 1205 2466 1205 2466 1221 2466 1220 2466 1188 2467 1190 2467 1186 2467 1186 2467 1187 2467 1188 2467 1186 2468 1190 2468 1194 2468 1194 2468 1192 2468 1186 2468 1189 2469 2884 2469 1215 2469 1215 2469 1088 2469 1189 2469 1206 2470 1208 2470 1213 2470 1213 2470 1198 2470 1206 2470 1198 2471 1213 2471 1215 2471 1215 2471 2884 2471 1198 2471 1184 2472 1198 2472 2884 2472 2884 2472 1189 2472 1184 2472 1136 2473 1135 2473 1143 2473 1143 2473 1144 2473 1136 2473 1143 2474 1135 2474 1137 2474 1137 2474 1145 2474 1143 2474 1144 2475 1155 2475 1146 2475 1146 2475 1136 2475 1144 2475 1145 2476 1137 2476 1138 2476 1138 2476 1148 2476 1145 2476 1136 2477 1146 2477 1147 2477 1147 2477 1128 2477 1136 2477 1148 2478 1138 2478 1139 2478 1139 2478 1149 2478 1148 2478 1149 2479 1139 2479 1140 2479 1140 2479 1152 2479 1149 2479 1152 2480 1140 2480 1141 2480 1141 2480 1153 2480 1152 2480 1151 2481 1142 2481 1130 2481 1130 2481 1150 2481 1151 2481 1154 2482 1153 2482 1141 2482 1141 2482 1142 2482 1154 2482 1145 2483 1161 2483 1159 2483 1159 2483 1143 2483 1145 2483 1160 2484 1157 2484 1155 2484 1155 2484 1144 2484 1160 2484 1148 2485 1164 2485 1161 2485 1161 2485 1145 2485 1148 2485 1152 2486 1168 2486 1165 2486 1165 2486 1149 2486 1152 2486 1156 2487 1154 2487 1142 2487 1142 2487 1151 2487 1156 2487 1153 2488 1169 2488 1168 2488 1168 2488 1152 2488 1153 2488 1151 2489 1167 2489 1158 2489 1158 2489 1156 2489 1151 2489 1158 2490 1170 2490 1154 2490 1154 2490 1156 2490 1158 2490 1167 2491 1182 2491 1170 2491 1170 2491 1158 2491 1167 2491 1160 2492 1159 2492 1171 2492 1171 2492 1172 2492 1160 2492 1161 2493 1173 2493 1171 2493 1171 2493 1159 2493 1161 2493 1172 2494 1162 2494 1157 2494 1157 2494 1160 2494 1172 2494 1164 2495 1176 2495 1173 2495 1173 2495 1161 2495 1164 2495 1175 2496 1163 2496 1162 2496 1162 2496 1172 2496 1175 2496 1165 2497 1177 2497 1176 2497 1176 2497 1164 2497 1165 2497 1168 2498 1180 2498 1177 2498 1177 2498 1165 2498 1168 2498 1182 2499 1167 2499 1166 2499 1166 2499 1179 2499 1182 2499 1169 2500 1181 2500 1180 2500 1180 2500 1168 2500 1169 2500 1182 2501 1181 2501 1169 2501 1169 2501 1170 2501 1182 2501 1165 2502 1164 2502 1148 2502 1148 2502 1149 2502 1165 2502 1084 2503 1083 2503 1095 2503 1095 2503 1096 2503 1084 2503 1095 2504 1083 2504 1085 2504 1085 2504 1097 2504 1095 2504 1096 2505 1107 2505 1098 2505 1098 2505 1084 2505 1096 2505 1086 2506 1099 2506 1097 2506 1097 2506 1085 2506 1086 2506 1091 2507 1102 2507 1099 2507 1099 2507 1086 2507 1091 2507 1084 2508 1098 2508 1100 2508 1100 2508 1088 2508 1084 2508 1092 2509 1104 2509 1102 2509 1102 2509 1091 2509 1092 2509 1093 2510 1105 2510 1104 2510 1104 2510 1092 2510 1093 2510 1103 2511 1094 2511 1090 2511 1090 2511 1101 2511 1103 2511 1106 2512 1105 2512 1093 2512 1093 2512 1094 2512 1106 2512 1097 2513 1113 2513 1111 2513 1111 2513 1095 2513 1097 2513 1112 2514 1109 2514 1107 2514 1107 2514 1096 2514 1112 2514 1099 2515 1115 2515 1113 2515 1113 2515 1097 2515 1099 2515 1104 2516 1120 2516 1118 2516 1118 2516 1102 2516 1104 2516 1108 2517 1106 2517 1094 2517 1094 2517 1103 2517 1108 2517 1105 2518 1121 2518 1120 2518 1120 2518 1104 2518 1105 2518 1110 2519 1122 2519 1106 2519 1106 2519 1108 2519 1110 2519 1119 2520 1134 2520 1122 2520 1122 2520 1110 2520 1119 2520 1112 2521 1111 2521 1123 2521 1123 2521 1124 2521 1112 2521 1113 2522 1125 2522 1123 2522 1123 2522 1111 2522 1113 2522 1124 2523 1114 2523 1109 2523 1109 2523 1112 2523 1124 2523 1115 2524 1126 2524 1125 2524 1125 2524 1113 2524 1115 2524 1118 2525 1131 2525 1126 2525 1126 2525 1115 2525 1118 2525 1128 2526 1116 2526 1114 2526 1114 2526 1124 2526 1128 2526 1120 2527 1132 2527 1131 2527 1131 2527 1118 2527 1120 2527 1134 2528 1119 2528 1117 2528 1117 2528 1130 2528 1134 2528 1121 2529 1133 2529 1132 2529 1132 2529 1120 2529 1121 2529 1134 2530 1133 2530 1121 2530 1121 2530 1122 2530 1134 2530 1118 2531 1115 2531 1099 2531 1099 2531 1102 2531 1118 2531 1230 2532 1174 2532 1178 2532 1178 2532 1235 2532 1230 2532 1171 2533 1174 2533 1175 2533 1175 2533 1172 2533 1171 2533 1171 2534 1173 2534 1176 2534 1176 2534 1174 2534 1171 2534 1177 2535 1180 2535 1181 2535 1181 2535 1178 2535 1177 2535 1174 2536 1176 2536 1177 2536 1177 2536 1178 2536 1174 2536 1174 2537 1232 2537 1233 2537 1233 2537 1178 2537 1174 2537 1127 2538 1138 2538 1137 2538 1137 2538 1135 2538 1127 2538 1127 2539 1129 2539 1139 2539 1139 2539 1138 2539 1127 2539 1129 2540 1141 2540 1140 2540 1140 2540 1139 2540 1129 2540 1129 2541 1142 2541 1141 2541 1123 2542 1125 2542 1126 2542 1126 2542 1127 2542 1123 2542 1123 2543 1127 2543 1124 2543 1126 2544 1131 2544 1129 2544 1129 2544 1127 2544 1126 2544 1129 2545 1131 2545 1132 2545 1132 2545 1133 2545 1129 2545 1129 2546 1133 2546 1134 2546 1083 2547 1087 2547 1086 2547 1086 2547 1085 2547 1083 2547 1083 2548 1084 2548 1087 2548 1086 2549 1087 2549 1089 2549 1089 2549 1091 2549 1086 2549 1089 2550 1093 2550 1092 2550 1092 2550 1091 2550 1089 2550 1089 2551 1094 2551 1093 2551 1089 2552 1225 2552 1226 2552 1226 2552 1227 2552 1089 2552 1087 2553 1224 2553 1225 2553 1225 2553 1089 2553 1087 2553 1222 2554 1223 2554 1224 2554 1224 2554 1087 2554 1222 2554 1268 2555 1280 2555 1281 2555 1281 2555 1269 2555 1268 2555 1268 2556 1269 2556 1271 2556 1271 2556 1270 2556 1268 2556 1280 2557 1283 2557 1284 2557 1284 2557 1282 2557 1280 2557 1268 2558 1270 2558 1273 2558 1273 2558 1272 2558 1268 2558 1265 2559 2153 2560 2154 2561 2154 2562 1267 2563 1265 2564 1264 2565 1265 2565 1267 2565 1267 2565 1266 2565 1264 2565 1264 2566 1266 2566 1271 2566 1271 2566 1269 2566 1264 2566 1582 2567 1583 2567 1585 2567 1585 2567 1584 2567 1582 2567 1582 2568 1584 2568 2879 2568 2879 2568 2878 2568 1582 2568 2878 2569 2879 2569 2882 2569 2882 2569 2880 2569 2878 2569 1612 2570 1626 2570 1627 2570 1627 2570 1613 2570 1612 2570 1335 2571 1329 2571 1292 2571 1292 2571 1291 2571 1335 2571 1293 2572 1294 2572 1330 2572 1330 2572 1336 2572 1293 2572 1294 2573 1292 2573 1329 2573 1329 2573 1330 2573 1294 2573 1335 2574 1291 2574 1293 2574 1293 2574 1336 2574 1335 2574 1626 2575 2885 2575 2886 2575 2886 2575 1627 2575 1626 2575 1541 2576 2887 2576 2888 2576 2888 2576 1542 2576 1541 2576 2152 2577 2897 2578 2154 2579 2154 2580 2153 2581 2152 2582 1270 2583 1271 2583 2899 2583 2899 2583 1282 2583 1270 2583 1266 2584 2886 2584 2899 2584 2899 2584 1271 2584 1266 2584 1280 2585 1282 2585 2899 2585 2899 2585 1281 2585 1280 2585 2151 2586 2889 2586 2896 2586 2896 2586 2900 2586 2151 2586 2889 2587 2890 2587 2895 2587 2895 2587 2896 2587 2889 2587 2890 2588 2891 2588 2894 2588 2894 2588 2895 2588 2890 2588 2891 2589 2892 2589 2893 2589 2893 2589 2894 2589 2891 2589 2881 2590 1583 2590 1582 2590 1582 2590 2878 2590 2881 2590 2883 2591 2881 2591 2880 2591 2880 2591 2882 2591 2883 2591 1583 2592 2881 2592 2902 2592 2902 2592 1612 2592 1583 2592 1612 2593 2902 2593 1626 2593 2892 2594 2902 2594 2901 2594 2901 2594 2893 2594 2892 2594 1585 2595 1613 2595 2901 2595 2901 2595 2883 2595 1585 2595 1613 2596 1627 2596 2901 2596 2881 2597 2883 2597 2901 2597 2901 2597 2902 2597 2881 2597 1541 2598 1542 2598 2903 2598 2903 2598 2904 2598 1541 2598 2151 2599 2900 2599 2897 2599 2897 2599 2152 2599 2151 2599 2905 2600 2153 2600 1265 2600 1264 2601 2905 2601 1265 2601 2905 2602 2152 2602 2153 2602 2151 2603 2152 2603 2905 2603 2905 2603 2887 2603 2151 2603 1264 2604 2885 2604 2904 2604 2904 2604 2905 2604 1264 2604 2897 2605 2906 2606 2154 2607 2888 2608 2906 2609 2897 2610 2897 2611 2900 2612 2888 2613 1266 2614 2906 2614 2903 2614 2903 2614 2886 2614 1266 2614 1281 2615 2904 2615 2885 2615 1627 2616 2893 2616 2901 2616 1626 2617 2902 2617 2892 2617 1626 2618 2892 2618 2891 2618 1626 2619 2891 2619 2890 2619 1627 2620 2894 2620 2893 2620 1627 2621 2895 2621 2894 2621 1627 2622 2886 2622 2903 2622 2903 2622 1542 2622 1627 2622 2888 2623 2900 2623 2896 2623 2896 2623 1542 2623 2888 2623 1627 2624 1542 2624 2896 2624 2896 2624 2895 2624 1627 2624 2904 2625 1281 2625 1626 2625 1626 2625 1541 2625 2904 2625 2889 2626 2151 2626 2887 2626 2887 2626 1541 2626 2889 2626 2889 2627 1541 2627 1626 2627 1626 2627 2890 2627 2889 2627 2887 2628 2905 2628 2906 2628 2906 2628 2888 2628 2887 2628 2903 2629 2906 2629 2905 2629 2905 2629 2904 2629 2903 2629 2906 2630 1266 2631 1267 2632 1267 2633 2154 2634 2906 2635 2235 2636 1486 2636 1472 2636 2343 2637 1519 2637 1516 2637 1665 2638 1635 2638 2240 2638 2244 2639 1718 2639 2241 2639 2299 2640 2303 2640 2257 2640 2666 2641 2526 2641 2521 2641 2527 2642 2526 2642 2666 2642 2848 2643 2850 2643 2604 2643 2605 2644 2851 2644 2849 2644 2715 2645 2686 2645 2681 2645 2851 2646 2861 2646 2857 2646 2850 2647 2856 2647 2860 2647 2766 2648 2770 2648 2590 2648 2699 2649 2578 2649 2574 2649 2827 2650 2549 2650 2553 2650 2826 2651 2552 2651 2548 2651 2298 2652 2315 2652 2312 2652 1734 2653 2249 2653 2251 2653 1638 2654 1673 2654 2254 2654 1575 2655 2320 2655 2341 2655 1569 2656 2383 2656 2374 2656 2412 2657 2395 2657 1563 2657 1514 2658 2352 2658 2371 2658 2317 2659 2333 2659 2328 2659 1495 2660 2331 2660 2316 2660 2238 2661 2292 2661 1490 2661 2397 2662 1520 2662 1535 2662 2508 2663 2609 2663 2611 2663 2608 2664 2506 2664 2610 2664 2444 2665 2440 2665 2436 2665 2641 2666 2622 2666 2860 2666 2639 2667 2861 2667 2623 2667 2765 2668 2573 2668 2577 2668 2514 2669 2636 2669 2621 2669 1580 2670 2293 2670 2308 2670 2349 2671 1575 2671 2341 2671 1574 2672 2360 2672 2366 2672 2391 2673 2383 2673 1569 2673 1506 2674 2328 2674 2321 2674 2312 2675 2317 2675 1499 2675 1499 2675 1488 2675 2312 2675 2370 2676 1534 2676 1562 2676 1562 2676 2379 2676 2370 2676 2397 2677 1535 2677 1558 2677 1558 2677 2404 2677 2397 2677 2396 2678 2411 2678 1544 2678 1544 2678 1536 2678 2396 2678 2386 2679 1564 2679 1568 2679 1568 2679 2375 2679 2386 2679 2406 2680 2391 2680 1569 2680 1569 2680 1565 2680 2406 2680 2338 2681 1572 2681 1576 2681 1576 2681 2318 2681 2338 2681 2360 2682 1574 2682 1575 2682 1575 2682 2349 2682 2360 2682 2506 2683 2510 2683 2612 2683 2612 2683 2610 2683 2506 2683 2508 2684 2611 2684 2613 2684 2613 2684 2511 2684 2508 2684 2645 2685 2641 2685 2860 2685 2860 2685 2862 2685 2645 2685 2646 2686 2863 2686 2861 2686 2861 2686 2639 2686 2646 2686 2593 2687 2822 2687 2769 2687 2769 2687 2589 2687 2593 2687 2609 2688 2508 2688 2509 2688 2509 2688 2619 2688 2609 2688 2619 2689 2509 2689 2514 2689 2514 2689 2621 2689 2619 2689 2589 2690 2769 2690 2765 2690 2765 2690 2577 2690 2589 2690 2524 2691 2515 2691 2511 2691 2511 2691 2613 2691 2524 2691 2523 2692 2612 2692 2510 2692 2510 2692 2513 2692 2523 2692 1580 2693 2308 2693 2318 2693 2318 2693 1576 2693 1580 2693 1574 2694 2366 2694 2375 2694 2375 2694 1568 2694 1574 2694 2405 2695 2416 2695 2400 2695 2400 2695 2390 2695 2405 2695 2418 2696 2413 2696 1544 2696 1544 2696 2411 2696 2418 2696 2419 2697 2404 2697 1558 2697 1558 2697 2414 2697 2419 2697 2390 2698 2400 2698 2379 2698 2379 2698 1562 2698 2390 2698 1506 2699 1499 2699 2317 2699 2317 2699 2328 2699 1506 2699 2230 2700 2231 2700 1455 2700 1455 2700 1452 2700 2230 2700 1453 2701 2265 2701 2264 2701 2264 2701 1459 2701 1453 2701 1458 2702 1460 2702 2232 2702 2232 2702 2230 2702 1458 2702 2261 2703 1471 2703 1464 2703 1464 2703 2262 2703 2261 2703 1460 2704 1465 2704 2233 2704 2233 2704 2232 2704 1460 2704 1465 2705 1470 2705 2236 2705 2236 2705 2233 2705 1465 2705 1468 2706 2234 2706 2235 2706 2235 2706 1472 2706 1468 2706 1470 2707 1474 2707 2237 2707 2237 2707 2236 2707 1470 2707 2257 2708 1483 2708 1475 2708 1475 2708 2259 2708 2257 2708 2259 2709 1475 2709 1471 2709 1471 2709 2261 2709 2259 2709 1483 2710 2298 2710 2312 2710 2312 2710 1488 2710 1483 2710 2306 2711 2297 2711 1481 2711 1481 2711 1489 2711 2306 2711 2345 2712 2331 2712 1495 2712 1495 2712 1500 2712 2345 2712 1496 2713 1498 2713 2327 2713 2327 2713 2332 2713 1496 2713 2362 2714 2345 2714 1500 2714 1500 2714 1513 2714 2362 2714 2344 2715 1508 2715 1501 2715 1501 2715 2326 2715 2344 2715 1514 2716 2378 2716 2389 2716 2389 2716 1536 2716 1514 2716 1530 2717 2356 2717 2367 2717 2367 2717 1533 2717 1530 2717 2407 2718 2414 2718 1558 2718 1558 2718 1564 2718 2407 2718 2365 2719 1567 2719 1563 2719 1563 2719 2373 2719 2365 2719 2363 2720 2372 2720 1562 2720 1562 2720 1566 2720 2363 2720 1569 2721 2374 2721 2364 2721 2364 2721 1571 2721 1569 2721 2355 2722 1573 2722 1570 2722 1570 2722 2365 2722 2355 2722 2346 2723 2363 2723 1566 2723 1566 2723 1572 2723 2346 2723 2296 2724 2307 2724 1575 2724 1575 2724 1578 2724 2296 2724 2256 2725 2253 2725 1581 2725 1581 2725 1577 2725 2256 2725 2254 2726 2255 2726 1610 2726 1610 2726 1638 2726 2254 2726 1578 2727 1610 2727 2255 2727 2255 2727 2296 2727 1578 2727 2239 2728 1625 2728 1634 2728 1634 2728 2242 2728 2239 2728 1664 2729 1690 2729 2243 2729 2243 2729 2242 2729 1664 2729 2245 2730 2243 2730 1690 2730 1690 2730 1714 2730 2245 2730 1731 2731 1735 2731 2245 2731 2245 2731 1724 2731 1731 2731 1739 2732 2247 2732 2245 2732 2245 2732 1735 2732 1739 2732 1732 2733 2246 2733 2247 2733 2247 2733 1739 2733 1732 2733 1741 2734 1737 2734 2250 2734 2250 2734 2248 2734 1741 2734 2305 2735 1767 2735 1754 2735 1754 2735 2310 2735 2305 2735 2514 2736 2516 2736 2662 2736 2662 2736 2636 2736 2514 2736 2517 2737 2635 2737 2661 2737 2661 2737 2518 2737 2517 2737 2614 2738 2612 2738 2523 2738 2523 2738 2536 2738 2614 2738 2538 2739 2616 2739 2614 2739 2614 2739 2536 2739 2538 2739 2524 2740 2613 2740 2615 2740 2615 2740 2537 2740 2524 2740 2539 2741 2537 2741 2615 2741 2615 2741 2617 2741 2539 2741 2633 2742 2616 2742 2538 2742 2538 2742 2546 2742 2633 2742 2820 2743 2544 2743 2530 2743 2530 2743 2767 2743 2820 2743 2531 2744 2545 2744 2821 2744 2821 2744 2768 2744 2531 2744 2637 2745 2633 2745 2546 2745 2546 2745 2550 2745 2637 2745 2634 2746 2547 2746 2539 2746 2539 2746 2617 2746 2634 2746 2638 2747 2551 2747 2547 2747 2547 2747 2634 2747 2638 2747 2698 2748 2657 2748 2550 2748 2550 2748 2559 2748 2698 2748 2560 2749 2551 2749 2638 2749 2638 2749 2658 2749 2560 2749 2765 2750 2698 2750 2563 2750 2563 2750 2573 2750 2765 2750 2840 2751 2567 2751 2565 2751 2565 2751 2834 2751 2840 2751 2566 2752 2568 2752 2841 2752 2841 2752 2835 2752 2566 2752 2699 2753 2574 2753 2564 2753 2564 2753 2658 2753 2699 2753 2823 2754 2607 2754 2590 2754 2590 2754 2770 2754 2823 2754 2593 2755 2606 2755 2828 2755 2828 2755 2822 2755 2593 2755 2837 2756 2629 2756 2607 2756 2607 2756 2831 2756 2837 2756 2644 2757 2632 2757 2625 2757 2625 2757 2643 2757 2644 2757 2656 2758 2644 2758 2643 2758 2643 2758 2655 2758 2656 2758 2672 2759 2656 2759 2655 2759 2655 2759 2671 2759 2672 2759 2659 2760 2650 2760 2870 2760 2870 2760 2872 2760 2659 2760 2660 2761 2873 2761 2871 2761 2871 2761 2651 2761 2660 2761 2853 2762 2669 2762 2664 2762 2664 2762 2847 2762 2853 2762 2684 2763 2672 2763 2671 2763 2671 2763 2683 2763 2684 2763 2852 2764 2673 2764 2679 2764 2679 2764 2854 2764 2852 2764 2695 2765 2684 2765 2683 2765 2683 2765 2694 2765 2695 2765 2688 2766 2691 2766 2858 2766 2858 2766 2854 2766 2688 2766 2719 2767 2755 2767 2864 2767 2864 2767 2722 2767 2719 2767 2722 2768 2864 2768 2858 2768 2858 2768 2691 2768 2722 2768 2736 2769 2733 2769 2859 2769 2859 2769 2865 2769 2736 2769 2755 2770 2757 2770 2866 2770 2866 2770 2864 2770 2755 2770 2867 2771 2756 2771 2736 2771 2736 2771 2865 2771 2867 2771 2757 2772 2762 2772 2868 2772 2868 2772 2866 2772 2757 2772 2761 2773 2759 2773 2874 2773 2874 2773 2876 2773 2761 2773 2877 2774 2764 2774 2763 2774 2763 2774 2869 2774 2877 2774 2762 2775 2761 2775 2876 2775 2876 2775 2868 2775 2762 2775 2764 2776 2877 2776 2875 2776 2875 2776 2760 2776 2764 2776 2756 2777 2867 2777 2869 2777 2869 2777 2758 2777 2756 2777 2690 2778 2855 2778 2859 2778 2859 2778 2733 2778 2690 2778 2680 2779 2669 2779 2853 2779 2853 2779 2855 2779 2680 2779 2663 2780 2673 2780 2852 2780 2852 2780 2846 2780 2663 2780 2650 2781 2645 2781 2862 2781 2862 2781 2870 2781 2650 2781 2651 2782 2871 2782 2863 2782 2863 2782 2646 2782 2651 2782 2640 2783 2843 2783 2847 2783 2847 2783 2648 2783 2640 2783 2836 2784 2830 2784 2606 2784 2606 2784 2628 2784 2836 2784 2568 2785 2582 2785 2845 2785 2845 2785 2841 2785 2568 2785 2567 2786 2840 2786 2844 2786 2844 2786 2581 2786 2567 2786 2827 2787 2825 2787 2545 2787 2545 2787 2549 2787 2827 2787 2826 2788 2548 2788 2544 2788 2544 2788 2824 2788 2826 2788 2667 2789 2528 2789 2529 2789 2529 2789 2768 2789 2667 2789 2525 2790 2528 2790 2667 2790 2667 2790 2662 2790 2525 2790 2305 2791 2300 2791 1781 2791 1781 2791 1767 2791 2305 2791 1741 2792 2248 2792 2249 2792 2249 2792 1734 2792 1741 2792 1718 2793 2244 2793 2246 2793 2246 2793 1732 2793 1718 2793 1715 2794 1705 2794 2253 2794 2253 2794 2250 2794 1715 2794 2240 2795 1635 2795 1607 2795 1607 2795 2295 2795 2240 2795 2239 2796 2293 2796 1580 2796 1580 2796 1625 2796 2239 2796 1573 2797 2313 2797 2295 2797 2295 2797 1579 2797 1573 2797 2256 2798 1577 2798 1571 2798 1571 2798 2309 2798 2256 2798 1533 2799 2415 2799 2406 2799 2406 2799 1565 2799 1533 2799 2370 2800 2357 2800 1525 2800 1525 2800 1534 2800 2370 2800 1513 2801 1520 2801 2397 2801 2397 2801 2384 2801 1513 2801 1490 2802 2292 2802 2304 2802 2304 2802 1501 2802 1490 2802 1489 2803 1496 2803 2332 2803 2332 2803 2324 2803 1489 2803 2294 2804 2258 2804 1476 2804 1476 2804 1487 2804 2294 2804 2297 2805 2237 2805 1474 2805 1474 2805 1481 2805 2297 2805 2258 2806 2260 2806 1469 2806 1469 2806 1473 2806 2258 2806 2234 2807 1466 2807 1461 2807 1461 2807 2231 2807 2234 2807 1459 2808 2264 2808 2262 2808 2262 2808 1464 2808 1459 2808 1457 2809 2263 2809 2265 2809 2265 2809 1453 2809 1457 2809 2303 2810 2315 2810 2298 2810 2298 2810 2257 2810 2303 2810 2530 2811 2527 2811 2666 2811 2666 2811 2767 2811 2530 2811 2875 2812 2678 2812 2685 2812 2685 2812 2754 2812 2875 2812 2681 2813 2677 2813 2874 2813 2874 2813 2715 2813 2681 2813 2678 2814 2875 2814 2873 2814 2873 2814 2675 2814 2678 2814 2872 2815 2874 2815 2677 2815 2677 2815 2674 2815 2872 2815 2623 2816 2861 2816 2851 2816 2851 2816 2605 2816 2623 2816 2622 2817 2604 2817 2850 2817 2850 2817 2860 2817 2622 2817 2582 2818 2605 2818 2849 2818 2849 2818 2845 2818 2582 2818 2848 2819 2604 2819 2581 2819 2581 2819 2844 2819 2848 2819 2578 2820 2699 2820 2766 2820 2766 2820 2590 2820 2578 2820 2835 2821 2833 2821 2562 2821 2562 2821 2566 2821 2835 2821 2561 2822 2832 2822 2834 2822 2834 2822 2565 2822 2561 2822 2833 2823 2827 2823 2553 2823 2553 2823 2562 2823 2833 2823 2552 2824 2826 2824 2832 2824 2832 2824 2561 2824 2552 2824 2518 2825 2661 2825 2666 2825 2666 2825 2521 2825 2518 2825 2512 2826 2620 2826 2635 2826 2635 2826 2517 2826 2512 2826 2507 2827 2618 2827 2620 2827 2620 2827 2512 2827 2507 2827 2618 2828 2507 2828 2506 2828 2506 2828 2608 2828 2618 2828 1734 2829 2251 2829 2252 2829 2252 2829 1722 2829 1734 2829 1673 2830 1722 2830 2252 2830 2252 2830 2254 2830 1673 2830 2241 2831 1718 2831 1665 2831 1665 2831 2240 2831 2241 2831 2412 2832 1563 2832 1544 2832 1544 2832 2413 2832 2412 2832 1519 2833 2343 2833 2356 2833 2356 2833 1530 2833 1519 2833 2357 2834 2348 2834 1515 2834 1515 2834 1525 2834 2357 2834 2352 2835 1514 2835 1508 2835 1508 2835 2344 2835 2352 2835 1506 2836 2321 2836 2343 2836 2343 2836 1516 2836 1506 2836 1498 2837 1515 2837 2348 2837 2348 2837 2334 2837 1498 2837 1487 2838 1495 2838 2316 2838 2316 2838 2294 2838 1487 2838 2235 2839 2238 2839 1490 2839 1490 2839 1486 2839 2235 2839 2260 2840 1463 2840 1467 2840 1467 2840 1469 2840 2260 2840 1457 2841 1463 2841 2260 2841 2260 2841 2263 2841 1457 2841 2628 2842 2647 2842 2842 2842 2647 2843 2846 2843 2842 2843 2628 2844 2842 2844 2838 2844 1670 2845 2329 2845 2310 2845 2310 2845 1754 2845 1670 2845 1823 2846 2300 2846 2314 2846 1823 2847 2314 2847 2325 2847 1823 2848 2325 2848 2324 2848 2629 2849 2640 2849 2839 2849 2640 2850 2839 2850 2843 2850 2629 2851 2837 2851 2839 2851 2630 2852 2807 2852 2809 2852 2694 2853 2703 2853 2753 2853 2753 2853 2695 2853 2694 2853 2702 2854 2752 2854 2753 2854 2753 2854 2703 2854 2702 2854 2693 2855 2696 2855 2752 2855 2752 2855 2702 2855 2693 2855 2682 2856 2687 2856 2696 2856 2696 2856 2693 2856 2682 2856 2670 2857 2676 2857 2687 2857 2687 2857 2682 2857 2670 2857 2654 2858 2665 2858 2676 2858 2676 2858 2670 2858 2654 2858 2642 2859 2649 2859 2665 2859 2665 2859 2654 2859 2642 2859 2624 2860 2631 2860 2649 2860 2649 2860 2642 2860 2624 2860 2420 2861 2423 2861 2631 2861 2631 2861 2624 2861 2420 2861 2401 2862 2423 2862 2420 2862 2420 2862 2408 2862 2401 2862 2380 2863 2401 2863 2408 2863 2408 2863 2393 2863 2380 2863 2358 2864 2380 2864 2393 2864 2393 2864 2368 2864 2358 2864 2335 2865 2358 2865 2368 2865 2368 2865 2350 2865 2335 2865 2301 2866 2335 2866 2350 2866 2350 2866 2322 2866 2301 2866 2290 2867 2301 2867 2322 2867 2322 2867 2205 2867 2290 2867 2205 2868 2206 2868 2291 2868 2291 2868 2290 2868 2205 2868 2206 2869 2302 2869 2291 2869 2206 2870 2323 2870 2302 2870 2302 2870 2291 2870 2206 2870 2302 2871 2323 2871 2351 2871 2351 2871 2336 2871 2302 2871 2336 2872 2351 2872 2369 2872 2369 2872 2359 2872 2336 2872 2359 2873 2369 2873 2394 2873 2394 2873 2381 2873 2359 2873 2381 2874 2394 2874 2409 2874 2409 2874 2402 2874 2381 2874 2402 2875 2409 2875 2421 2875 2421 2875 2424 2875 2402 2875 2421 2876 2625 2876 2632 2876 2632 2876 2424 2876 2421 2876 1178 2877 1181 2877 1182 2877 2923 2878 2924 2878 2941 2878 2941 2879 2924 2879 2942 2879 2943 2880 2944 2880 2925 2880 2925 2881 2944 2881 2926 2881 2945 2882 2946 2882 2943 2882 2943 2883 2946 2883 2944 2883 2937 2884 2917 2884 2938 2884 2938 2885 2917 2885 2918 2885 2928 2886 2912 2886 2927 2886 2927 2887 2912 2887 2911 2887 2941 2888 2942 2888 2939 2888 2939 2889 2942 2889 2940 2889 2934 2890 2936 2890 2922 2890 2922 2891 2936 2891 2916 2891 2922 2892 2916 2892 2920 2892 2920 2893 2916 2893 2914 2893 2920 2894 2914 2894 2932 2894 2932 2895 2914 2895 2930 2895 2931 2896 2929 2896 2919 2896 2919 2897 2929 2897 2913 2897 2919 2898 2913 2898 2921 2898 2921 2899 2913 2899 2915 2899 2921 2900 2915 2900 2933 2900 2933 2901 2915 2901 2935 2901 2945 2902 2937 2902 2946 2902 2946 2903 2937 2903 2938 2903 2946 2904 2938 2904 2936 2904 2937 2905 2945 2905 2935 2905 2918 2906 2916 2906 2938 2906 2938 2907 2916 2907 2936 2907 2934 2908 2944 2908 2936 2908 2936 2909 2944 2909 2946 2909 2943 2910 2933 2910 2945 2910 2945 2911 2933 2911 2935 2911 2915 2912 2917 2912 2935 2912 2935 2913 2917 2913 2937 2913 2917 2914 2909 2914 2918 2914 2918 2915 2909 2915 2910 2915 2918 2916 2910 2916 2916 2916 2922 2917 2926 2917 2934 2917 2934 2918 2926 2918 2944 2918 2925 2919 2921 2919 2943 2919 2943 2920 2921 2920 2933 2920 2917 2921 2915 2921 2909 2921 2908 2922 2914 2922 2910 2922 2910 2923 2914 2923 2916 2923 2920 2924 2924 2924 2922 2924 2922 2925 2924 2925 2926 2925 2923 2926 2919 2926 2925 2926 2925 2927 2919 2927 2921 2927 2913 2928 2907 2928 2915 2928 2915 2929 2907 2929 2909 2929 2907 2930 2911 2930 2908 2930 2908 2931 2911 2931 2912 2931 2908 2932 2912 2932 2914 2932 2932 2933 2942 2933 2920 2933 2920 2934 2942 2934 2924 2934 2941 2935 2931 2935 2923 2935 2923 2936 2931 2936 2919 2936 2907 2937 2913 2937 2911 2937 2928 2938 2930 2938 2912 2938 2912 2939 2930 2939 2914 2939 2930 2940 2940 2940 2932 2940 2932 2941 2940 2941 2942 2941 2939 2942 2929 2942 2941 2942 2941 2943 2929 2943 2931 2943 2929 2944 2927 2944 2913 2944 2913 2945 2927 2945 2911 2945 2930 2946 2928 2946 2940 2946 2929 2947 2939 2947 2927 2947 2927 2948 2939 2948 2928 2948 2928 2949 2939 2949 2940 2949 2963 2950 2964 2950 2981 2950 2981 2951 2964 2951 2982 2951 2983 2952 2984 2952 2965 2952 2965 2953 2984 2953 2966 2953 2985 2954 2986 2954 2983 2954 2983 2955 2986 2955 2984 2955 2977 2956 2957 2956 2978 2956 2978 2957 2957 2957 2958 2957 2968 2958 2952 2958 2967 2958 2967 2959 2952 2959 2951 2959 2981 2960 2982 2960 2979 2960 2979 2961 2982 2961 2980 2961 2974 2962 2976 2962 2962 2962 2962 2963 2976 2963 2956 2963 2962 2964 2956 2964 2960 2964 2960 2965 2956 2965 2954 2965 2960 2966 2954 2966 2972 2966 2972 2967 2954 2967 2970 2967 2971 2968 2969 2968 2959 2968 2959 2969 2969 2969 2953 2969 2959 2970 2953 2970 2961 2970 2961 2971 2953 2971 2955 2971 2961 2972 2955 2972 2973 2972 2973 2973 2955 2973 2975 2973 2985 2974 2977 2974 2986 2974 2986 2975 2977 2975 2978 2975 2986 2976 2978 2976 2976 2976 2977 2977 2985 2977 2975 2977 2958 2978 2956 2978 2978 2978 2978 2979 2956 2979 2976 2979 2974 2980 2984 2980 2976 2980 2976 2981 2984 2981 2986 2981 2983 2982 2973 2982 2985 2982 2985 2983 2973 2983 2975 2983 2955 2984 2957 2984 2975 2984 2975 2985 2957 2985 2977 2985 2957 2986 2949 2986 2958 2986 2958 2987 2949 2987 2950 2987 2958 2988 2950 2988 2956 2988 2962 2989 2966 2989 2974 2989 2974 2990 2966 2990 2984 2990 2965 2991 2961 2991 2983 2991 2983 2992 2961 2992 2973 2992 2957 2993 2955 2993 2949 2993 2948 2994 2954 2994 2950 2994 2950 2995 2954 2995 2956 2995 2960 2996 2964 2996 2962 2996 2962 2997 2964 2997 2966 2997 2963 2998 2959 2998 2965 2998 2965 2999 2959 2999 2961 2999 2953 3000 2947 3000 2955 3000 2955 3001 2947 3001 2949 3001 2947 3002 2951 3002 2948 3002 2948 3003 2951 3003 2952 3003 2948 3004 2952 3004 2954 3004 2972 3005 2982 3005 2960 3005 2960 3006 2982 3006 2964 3006 2981 3007 2971 3007 2963 3007 2963 3008 2971 3008 2959 3008 2947 3009 2953 3009 2951 3009 2968 3010 2970 3010 2952 3010 2952 3011 2970 3011 2954 3011 2970 3012 2980 3012 2972 3012 2972 3013 2980 3013 2982 3013 2979 3014 2969 3014 2981 3014 2981 3015 2969 3015 2971 3015 2969 3016 2967 3016 2953 3016 2953 3017 2967 3017 2951 3017 2970 3018 2968 3018 2980 3018 2969 3019 2979 3019 2967 3019 2967 3020 2979 3020 2968 3020 2968 3021 2979 3021 2980 3021 3012 3022 3007 3022 3004 3022 3004 3023 3007 3023 2999 3023 3011 3024 3012 3024 3003 3024 3003 3025 3012 3025 3004 3025 3001 3026 2991 3026 3009 3026 3009 3027 2991 3027 2995 3027 2996 3028 2992 3028 3010 3028 3010 3029 2992 3029 3002 3029 3006 3030 3005 3030 3014 3030 3014 3031 3005 3031 3013 3031 3008 3032 3013 3032 3000 3032 3000 3033 3013 3033 3005 3033 3012 3034 3011 3034 3007 3034 3007 3035 3011 3035 2997 3035 3007 3036 2997 3036 3008 3036 3008 3037 2997 3037 2998 3037 3008 3038 2998 3038 3013 3038 3013 3039 2998 3039 3014 3039 3005 3040 3006 3040 3000 3040 3000 3041 3006 3041 2990 3041 3000 3042 2990 3042 2999 3042 2999 3043 2990 3043 2989 3043 2999 3044 2989 3044 3004 3044 3004 3045 2989 3045 3003 3045 3001 3046 3003 3046 2991 3046 2991 3047 3003 3047 2989 3047 3009 3048 3011 3048 3001 3048 3001 3049 3011 3049 3003 3049 2987 3050 2991 3050 2989 3050 2993 3051 2995 3051 2987 3051 2987 3052 2995 3052 2991 3052 2995 3053 2997 3053 3009 3053 3009 3054 2997 3054 3011 3054 2990 3055 2988 3055 2989 3055 2989 3056 2988 3056 2987 3056 2995 3057 2993 3057 2997 3057 2992 3058 2988 3058 2990 3058 2996 3059 2994 3059 2992 3059 2992 3060 2994 3060 2988 3060 2994 3061 2998 3061 2993 3061 2993 3062 2998 3062 2997 3062 3006 3063 3002 3063 2990 3063 2990 3064 3002 3064 2992 3064 2994 3065 2996 3065 2998 3065 3014 3066 3010 3066 3006 3066 3006 3067 3010 3067 3002 3067 3010 3068 3014 3068 2996 3068 2996 3069 3014 3069 2998 3069 3033 3070 3028 3070 3041 3070 3041 3071 3028 3071 3036 3071 3034 3072 3033 3072 3042 3072 3042 3073 3033 3073 3041 3073 3038 3074 3024 3074 3030 3074 3030 3075 3024 3075 3020 3075 3019 3076 3023 3076 3029 3076 3029 3077 3023 3077 3037 3077 3039 3078 3040 3078 3031 3078 3031 3079 3040 3079 3032 3079 3027 3080 3032 3080 3035 3080 3035 3081 3032 3081 3040 3081 3033 3082 3034 3082 3028 3082 3028 3083 3034 3083 3018 3083 3028 3084 3018 3084 3027 3084 3027 3085 3018 3085 3017 3085 3027 3086 3017 3086 3032 3086 3032 3087 3017 3087 3031 3087 3040 3088 3039 3088 3035 3088 3035 3089 3039 3089 3025 3089 3035 3090 3025 3090 3036 3090 3036 3091 3025 3091 3026 3091 3036 3092 3026 3092 3041 3092 3041 3093 3026 3093 3042 3093 3038 3094 3042 3094 3024 3094 3024 3095 3042 3095 3026 3095 3030 3096 3034 3096 3038 3096 3038 3097 3034 3097 3042 3097 3022 3098 3024 3098 3026 3098 3016 3099 3020 3099 3022 3099 3022 3100 3020 3100 3024 3100 3020 3101 3018 3101 3030 3101 3030 3102 3018 3102 3034 3102 3025 3103 3021 3103 3026 3103 3026 3104 3021 3104 3022 3104 3020 3105 3016 3105 3018 3105 3023 3106 3021 3106 3025 3106 3019 3107 3015 3107 3023 3107 3023 3108 3015 3108 3021 3108 3015 3109 3017 3109 3016 3109 3016 3110 3017 3110 3018 3110 3039 3111 3037 3111 3025 3111 3025 3112 3037 3112 3023 3112 3015 3113 3019 3113 3017 3113 3031 3114 3029 3114 3039 3114 3039 3115 3029 3115 3037 3115 3029 3116 3031 3116 3019 3116 3019 3117 3031 3117 3017 3117 2999 3118 3007 3118 3008 3118 3008 3118 3000 3118 2999 3118 2987 3119 2988 3119 2994 3119 2994 3119 2993 3119 2987 3119 3015 3120 3016 3120 3022 3120 3022 3120 3021 3120 3015 3120 3027 3121 3035 3121 3036 3121 3036 3121 3028 3121 3027 3121 2907 3122 2908 3122 2910 3122 2910 3122 2909 3122 2907 3122 2923 3123 2925 3123 2926 3123 2926 3123 2924 3123 2923 3123 2947 3124 2948 3124 2950 3124 2950 3124 2949 3124 2947 3124 2963 3125 2965 3125 2966 3125 2966 3125 2964 3125 2963 3125

466 467 466 468 467 469 468 470 469 471 470 472 471 473 472 474 473 475 474 476 475 477 476 478 477 479 478 480 479 481 480 482 481 483 482 484 483 485 484 486 485 487 486 488 487 489 488 490 489 491 490 492 491 493 492 494 493 495 494 496 495 497 496 498 497 499 465 499 498 500 499 501 500 502 501 503 502 504 503 505 504 506 505 506 507 508 507 509 508 510 509 511 510 512 511 513 512 514 513 515 514 548 514 516 515 517 516 518 517 519 518 520 519 521 520 522 521 523 522 524 523 525 524 526 525 527 526 528 527 529 528 530 529 531 530 532 531 533 532 534 533 535 534 536 535 537 536 538 537 539 538 540 539 541 540 542 541 543 542 544 543 545 544 546 545 547 546 547 549 550 549 551 550 552 551 553 552 554 553 555 554 556 555 557 556 558 557 559 558 560 559 561 560 562 561 563 562 564 563 565 564 566 565 567 566 568 567 569 568 570 569 571 570 572 571 573 572 574 573 575 574 576 575 577 576 578 577 579 578 580 579 581 580 582 581 583 582 584 583 585 584 586 585 587 586 588 587 589 588 589 590 591 590 592 591 593 592 594 593 595 594 596 595 597 596 598 597 599 598 600 599 601 600 602 601 603 602 604 603 605 604 606 605 607 606 608 607 609 608 610 609 611 610 612 611 613 612 614 613 615 614 616 615 617 616 618 617 619 618 620 619 621 620 622 621 623 622 624 623 625 624 626 625 627 626 628 627 629 628 630 629 630 631 632 631 633 632 634 633 635 634 636 635 637 636 638 637 639 638 640 639 641 640 642 641 643 642 644 643 645 644 646 645 647 646 648 647 649 648 650 649 651 650 652 651 653 652 654 653 655 654 656 655 657 656 658 657 659 658 660 659 661 660 662 661 663 662 664 663 665 664 666 665 667 666 668 667 669 668 670 669 671 670 671 672 673 672 674 673 675 674 676 675 677 676 678 677 679 678 680 679 681 680 682 681 683 682 684 683 685 684 686 685 687 686 688 687 689 688 690 689 691 690 692 691 693 692 694 693 695 694 696 695 697 696 698 697 699 698 700 699 701 700 702 701 703 702 704 703 705 704 706 705 707 706 708 707 709 708 710 709 711 710 712 711 712 2229 2230 1542 2899

0.57000 -0.45940 0.86790 0.57000 -0.45940 0.77090 0.57000 -0.53540 0.86790 0.57000 -0.53540 0.77090 0.56700 -0.45640 0.86790 0.56700 -0.45640 0.77090 0.56700 -0.53840 0.86790 0.56700 -0.53840 0.77090 0.52200 -0.45640 0.86790 0.52200 -0.53840 0.86790 0.52110 -0.45640 0.77080 0.52110 -0.53840 0.77080 0.52100 -0.45640 0.76490 0.52100 -0.53840 0.76490 0.51750 -0.45640 0.76490 0.51750 -0.45640 0.73290 0.51750 -0.53840 0.76490 0.51750 -0.53840 0.73290 0.49106 -0.45640 0.95290 0.49106 -0.53840 0.95290 0.44600 -0.45640 0.95290 0.44600 -0.53840 0.95290 0.37250 -0.45640 0.76490 0.37250 -0.45640 0.73290 0.37250 -0.53840 0.76490 0.37250 -0.53840 0.73290 0.36890 -0.45640 0.77080 0.36900 -0.45640 0.76490 0.36890 -0.53840 0.77080 0.36900 -0.53840 0.76490 0.32000 -0.45640 0.82690 0.32000 -0.45640 0.77090 0.32000 -0.53840 0.82690 0.32000 -0.53840 0.77090 0.52200 -0.53840 0.86790 0.29500 -0.65740 0.70709 0.29500 -0.65740 0.73209 0.29500 -0.38740 0.70709 0.37300 -0.65740 0.70709 0.37300 -0.65740 0.73209 0.37300 -0.64240 0.70709 0.51700 -0.65740 0.70709 0.51700 -0.65740 0.73209 0.51700 -0.64240 0.73209 0.59500 -0.65740 0.70709 0.59500 -0.65740 0.73209 0.59500 -0.38740 0.73209 -0.62500 -0.65740 0.05709 -0.62500 -0.65740 0.13509 -0.62500 -0.65740 0.27909 -0.62500 -0.65740 0.35709 -0.62500 -0.64240 0.13509 -0.62500 -0.64240 0.27909 -0.62500 -0.38740 0.05709 -0.62500 -0.38740 0.35709 -0.60000 -0.65740 0.05709 -0.60000 -0.65740 0.13509 -0.60000 -0.65740 0.27909 -0.60000 -0.65740 0.35709 -0.60000 -0.64240 0.13509 -0.60000 -0.64240 0.27909 -0.60000 -0.38740 0.05709 -0.60000 -0.38740 0.35709 0.29500 -0.38740 0.73208 0.37300 -0.64240 0.73208 0.51700 -0.64240 0.70709 0.59500 -0.38740 0.70709 0.59500 -0.38740 -0.31791 0.51700 -0.64240 -0.31791 0.37300 -0.64240 -0.29292 0.29500 -0.38740 -0.29292 0.59500 -0.38740 -0.29291 0.59500 -0.65740 -0.29291 0.59500 -0.65740 -0.31791 0.51700 -0.64240 -0.29291 0.51700 -0.65740 -0.29291 0.51700 -0.65740 -0.31791 0.37300 -0.64240 -0.31791 0.37300 -0.65740 -0.29291 0.37300 -0.65740 -0.31791 0.29500 -0.38740 -0.31791 0.29500 -0.65740 -0.29291 0.29500 -0.65740 -0.31791 0.52130 -0.55120 -0.35731 0.52130 -0.55120 0.76689 0.52130 -0.55120 -0.32545 0.52130 -0.55120 0.73503 0.52364 -0.55120 -0.32311 0.52364 -0.55120 0.73269 0.53318 -0.55120 -0.32311 0.53318 -0.55120 0.73269 0.53394 -0.55120 -0.33679 0.53394 -0.55120 0.74637 0.53695 -0.55120 -0.34047 0.53695 -0.55120 0.75005 0.53740 -0.55120 -0.33261 0.53740 -0.55120 0.74219 0.53740 -0.55120 -0.32914 0.53740 -0.55120 0.73872 0.55260 -0.55120 -0.33261 0.55260 -0.55120 0.74219 0.55260 -0.55120 -0.32914 0.55260 -0.55120 0.73872 0.55305 -0.55120 -0.34047 0.55305 -0.55120 0.75005 0.55606 -0.55120 -0.33679 0.55606 -0.55120 0.74637 0.55682 -0.55120 -0.32311 0.55682 -0.55120 0.73269 0.56636 -0.55120 -0.32311 0.56636 -0.55120 0.73269 0.56870 -0.55120 -0.35731 0.56870 -0.55120 0.76689 0.56870 -0.55120 -0.32545 0.56870 -0.55120 0.73503 0.52101 -0.51940 -0.59944 0.52101 -0.51940 1.00902 0.52101 -0.45940 -0.59944 0.52101 -0.45940 1.00902 0.52808 -0.51940 -0.60651 0.52808 -0.51940 1.01610 0.52808 -0.45940 -0.60651 0.52808 -0.45940 1.01610 0.58041 -0.51940 -0.54005 0.58041 -0.51940 0.94963 0.58041 -0.45940 -0.54005 0.58041 -0.45940 0.94963 0.58748 -0.51940 -0.54712 0.58748 -0.51940 0.95670 0.58748 -0.45940 -0.54712 0.58748 -0.45940 0.95670 0.56870 -0.44320 -0.35731 0.56870 -0.44320 0.76689 0.56870 -0.44320 -0.32545 0.56870 -0.44320 0.73503 0.56636 -0.44320 -0.32311 0.56636 -0.44320 0.73269 0.55682 -0.44320 -0.32311 0.55682 -0.44320 0.73269 0.55606 -0.44320 -0.33679 0.55606 -0.44320 0.74637 0.55305 -0.44320 -0.34047 0.55305 -0.44320 0.75005 0.55260 -0.44320 -0.32914 0.55260 -0.44320 0.73872 0.55260 -0.44320 -0.33261 0.55260 -0.44320 0.74219 0.53740 -0.44320 -0.33261 0.53740 -0.44320 0.74219 0.53740 -0.44320 -0.32914 0.53740 -0.44320 0.73872 0.53695 -0.44320 -0.34047 0.53695 -0.44320 0.75005 0.53394 -0.44320 -0.33679 0.53394 -0.44320 0.74637 0.53318 -0.44320 -0.32311 0.53318 -0.44320 0.73269 0.52364 -0.44320 -0.32311 0.52364 -0.44320 0.73269 0.52130 -0.44320 -0.32545 0.52130 -0.44320 0.73503 0.52130 -0.44320 -0.35731 0.52130 -0.44320 0.76689 0.55305 -0.44320 -0.34047 0.55305 -0.44320 0.75005 0.56870 -0.44320 -0.35731 0.56870 -0.44320 0.76689 0.55260 -0.44320 -0.33261 0.55260 -0.44320 0.74219 0.55260 -0.44320 -0.32914 0.55260 -0.44320 0.73872 0.55260 -0.44320 -0.32914 0.55260 -0.44320 0.73872 0.56870 -0.44320 -0.32545 0.56870 -0.44320 0.73503 0.55260 -0.44320 -0.32914 0.55260 -0.44320 0.73872 0.56870 -0.44320 -0.32545 0.56870 -0.44320 0.73503 0.55682 -0.44320 -0.32311 0.55682 -0.44320 0.73269 0.55682 -0.44320 -0.32311 0.55682 -0.44320 0.73269 0.56870 -0.44320 -0.32545 0.56870 -0.44320 0.73503 0.56636 -0.44320 -0.32311 0.56636 -0.44320 0.73269 0.53318 -0.44320 -0.32311 0.53318 -0.44320 0.73269 0.52364 -0.44320 -0.32311 0.52364 -0.44320 0.73269 0.53740 -0.44320 -0.32914 0.53740 -0.44320 0.73872 0.53740 -0.44320 -0.32914 0.53740 -0.44320 0.73872 0.52364 -0.44320 -0.32311 0.52364 -0.44320 0.73269 0.53740 -0.44320 -0.32914 0.53740 -0.44320 0.73872 0.53740 -0.44320 -0.33261 0.53740 -0.44320 0.74219 0.33740 -0.44320 -0.33261 0.33740 -0.44320 0.74219 0.33740 -0.44320 -0.32914 0.33740 -0.44320 0.73872 0.32364 -0.44320 -0.32311 0.32364 -0.44320 0.73269 0.33740 -0.44320 -0.32914 0.33740 -0.44320 0.73872 0.33740 -0.44320 -0.32914 0.33740 -0.44320 0.73872 0.32364 -0.44320 -0.32311 0.32364 -0.44320 0.73269 0.33318 -0.44320 -0.32311 0.33318 -0.44320 0.73269 0.36636 -0.44320 -0.32311 0.36636 -0.44320 0.73269 0.36870 -0.44320 -0.32545 0.36870 -0.44320 0.73503 0.35682 -0.44320 -0.32311 0.35682 -0.44320 0.73269 0.35682 -0.44320 -0.32311 0.35682 -0.44320 0.73269 0.36870 -0.44320 -0.32545 0.36870 -0.44320 0.73503 0.35260 -0.44320 -0.32914 0.35260 -0.44320 0.73872 0.36870 -0.44320 -0.32545 0.36870 -0.44320 0.73503 0.35260 -0.44320 -0.32914 0.35260 -0.44320 0.73872 0.35260 -0.44320 -0.32914 0.35260 -0.44320 0.73872 0.35260 -0.44320 -0.33261 0.35260 -0.44320 0.74219 0.36870 -0.44320 -0.35731 0.36870 -0.44320 0.76689 0.35305 -0.44320 -0.34047 0.35305 -0.44320 0.75005 0.32130 -0.44320 -0.35731 0.32130 -0.44320 0.76689 0.32130 -0.44320 -0.32545 0.32130 -0.44320 0.73503 0.32364 -0.44320 -0.32311 0.32364 -0.44320 0.73269 0.33318 -0.44320 -0.32311 0.33318 -0.44320 0.73269 0.33394 -0.44320 -0.33679 0.33394 -0.44320 0.74637 0.33695 -0.44320 -0.34047 0.33695 -0.44320 0.75005 0.33740 -0.44320 -0.32914 0.33740 -0.44320 0.73872 0.33740 -0.44320 -0.33261 0.33740 -0.44320 0.74219 0.35260 -0.44320 -0.33261 0.35260 -0.44320 0.74219 0.35260 -0.44320 -0.32914 0.35260 -0.44320 0.73872 0.35305 -0.44320 -0.34047 0.35305 -0.44320 0.75005 0.35606 -0.44320 -0.33679 0.35606 -0.44320 0.74637 0.35682 -0.44320 -0.32311 0.35682 -0.44320 0.73269 0.36636 -0.44320 -0.32311 0.36636 -0.44320 0.73269 0.36870 -0.44320 -0.32545 0.36870 -0.44320 0.73503 0.36870 -0.44320 -0.35731 0.36870 -0.44320 0.76689 0.36870 -0.55120 -0.32545 0.36870 -0.55120 0.73503 0.36870 -0.55120 -0.35731 0.36870 -0.55120 0.76689 0.36636 -0.55120 -0.32311 0.36636 -0.55120 0.73269 0.35682 -0.55120 -0.32311 0.35682 -0.55120 0.73269 0.35606 -0.55120 -0.33679 0.35606 -0.55120 0.74637 0.35305 -0.55120 -0.34047 0.35305 -0.55120 0.75005 0.35260 -0.55120 -0.32914 0.35260 -0.55120 0.73872 0.35260 -0.55120 -0.33261 0.35260 -0.55120 0.74219 0.33740 -0.55120 -0.32914 0.33740 -0.55120 0.73872 0.33740 -0.55120 -0.33261 0.33740 -0.55120 0.74219 0.33695 -0.55120 -0.34047 0.33695 -0.55120 0.75005 0.33394 -0.55120 -0.33679 0.33394 -0.55120 0.74637 0.33318 -0.55120 -0.32311 0.33318 -0.55120 0.73269 0.32364 -0.55120 -0.32311 0.32364 -0.55120 0.73269 0.32130 -0.55120 -0.32545 0.32130 -0.55120 0.73503 0.32130 -0.55120 -0.35731 0.32130 -0.55120 0.76689 0.32000 -0.53540 -0.45491 0.32000 -0.53540 -0.35791 0.32000 -0.45940 -0.45491 0.32000 -0.45940 -0.35791 0.32300 -0.53840 -0.45491 0.32300 -0.53840 -0.35791 0.32300 -0.45640 -0.45491 0.32300 -0.45640 -0.35791 0.36800 -0.53840 -0.45491 0.36800 -0.45640 -0.45491 0.36890 -0.53840 -0.35781 0.36890 -0.45640 -0.35781 0.36900 -0.53840 -0.35191 0.36900 -0.45640 -0.35191 0.37250 -0.53840 -0.35191 0.37250 -0.53840 -0.31991 0.37250 -0.45640 -0.35191 0.37250 -0.45640 -0.31991 0.39894 -0.53840 -0.53991 0.39894 -0.45640 -0.53991 0.44400 -0.53840 -0.53991 0.44400 -0.45640 -0.53991 0.51750 -0.53840 -0.35191 0.51750 -0.53840 -0.31991 0.51750 -0.45640 -0.35191 0.51750 -0.45640 -0.31991 0.52110 -0.53840 -0.35781 0.52100 -0.53840 -0.35191 0.52110 -0.45640 -0.35781 0.52100 -0.45640 -0.35191 0.57000 -0.53840 -0.41391 0.57000 -0.53840 -0.35791 0.57000 -0.45640 -0.41391 0.57000 -0.45640 -0.35791 0.36800 -0.45640 -0.45491 -0.57000 -0.46240 -0.44291 -0.57000 -0.46240 -0.29291 -0.21000 -0.46240 -0.44291 -0.21000 -0.46240 -0.29291 -0.57000 -0.59040 -0.44291 -0.57000 -0.59040 -0.29291 -0.21000 -0.59040 -0.44291 -0.21000 -0.59040 -0.29291 -0.57000 -0.59040 -0.44291 -0.21000 -0.59040 -0.44291 -0.21000 -0.59040 -0.29291 -0.57000 -0.59040 -0.29291 -0.85250 -0.67940 0.46759 -0.85250 -0.65440 -0.09791 -0.85250 -0.65440 0.46759 -0.85250 -0.65440 0.51209 -0.85250 -0.63040 0.51209 -0.77250 -0.67940 0.46759 -0.77250 -0.65440 -0.09791 -0.77250 -0.65440 0.46759 -0.77250 -0.65440 0.51209 -0.77250 -0.62940 -0.09791 -0.77250 -0.62940 -0.09716 -0.77250 -0.62940 0.51209 0.19500 -0.65440 0.87959 0.19500 -0.65440 0.95459 0.19500 -0.63040 0.95459 0.19500 -0.62940 0.87959 0.19500 -0.62940 0.95359 0.23950 -0.67940 0.87959 0.23950 -0.65440 0.87959 0.65050 -0.67940 0.87959 0.65050 -0.65440 0.87959 0.69500 -0.65440 0.87959 0.69500 -0.65440 0.95459 0.69500 -0.63040 0.95459 0.69500 -0.62940 0.87959 0.69500 -0.62940 0.95359 0.19500 -0.65440 -0.54041 0.19500 -0.65440 -0.46541 0.19500 -0.63040 -0.54041 0.19500 -0.62940 -0.46541 0.23950 -0.67940 -0.54041 0.23950 -0.67940 -0.46541 0.23950 -0.65440 -0.54041 0.23950 -0.65440 -0.46541 0.65050 -0.67940 -0.54041 0.65050 -0.67940 -0.46541 0.65050 -0.65440 -0.54041 0.65050 -0.65440 -0.46541 0.69500 -0.65440 -0.54041 0.69500 -0.65440 -0.46541 0.69500 -0.63040 -0.54041 0.69500 -0.62940 -0.53941 0.69500 -0.62940 -0.46541 0.23950 -0.65440 0.95459 0.65050 -0.65440 0.95459 0.65050 -0.67940 0.95459 0.23950 -0.67940 0.95459 -0.77250 -0.62940 0.51209 -0.77250 -0.65440 0.51209 -0.85250 -0.63040 0.51209 -0.85250 -0.65440 0.51209 -0.85250 -0.65440 -0.09805 -0.85250 -0.63040 -0.09805 -0.77250 -0.65440 -0.09805 -0.77250 -0.62940 -0.09805 -0.77250 -0.65440 0.46759 -0.77250 -0.67940 0.46759 -0.85250 -0.65440 0.46759 -0.85250 -0.67940 0.46759 -0.85250 -0.67940 -0.05269 -0.85250 -0.65440 -0.05269 -0.77250 -0.67940 -0.05269 -0.77250 -0.65440 -0.05269 -0.85250 -0.67940 -0.05269 -0.85250 -0.65440 -0.05269 -0.77250 -0.65440 -0.05269 -0.77250 -0.67940 -0.05269 -0.26600 -0.46240 0.13582 -0.26600 -0.46240 0.27837 -0.19473 -0.46240 0.01237 -0.19473 -0.46240 0.40182 -0.19473 -0.38740 0.40182 -0.07127 -0.46240 -0.05891 -0.07127 -0.46240 0.47309 -0.07127 -0.38740 0.47309 0.07127 -0.46240 -0.05891 0.07127 -0.46240 0.47309 0.07127 -0.38740 0.47309 0.19473 -0.46240 0.01237 0.19473 -0.46240 0.40182 0.19473 -0.38740 0.01237 0.19473 -0.38740 0.40182 0.26600 -0.46240 0.13582 0.26600 -0.46240 0.27837 0.26600 -0.38740 0.13582 0.26600 -0.38740 0.27837 -0.60000 -0.64240 -0.29291 -0.60000 -0.64240 0.70709 -0.60000 -0.46240 -0.29291 -0.60000 -0.46240 0.70709 0.60000 -0.64240 -0.29291 0.60000 -0.64240 0.70709 0.60000 -0.46240 -0.29291 0.60000 -0.46240 0.70709 -0.26600 -0.46240 0.13582 -0.26600 -0.46240 0.27837 -0.19473 -0.46240 0.01237 -0.07127 -0.46240 -0.05891 0.07127 -0.46240 -0.05891 -0.26600 -0.46240 0.27837 -0.26600 -0.46240 0.13582 -0.19473 -0.46240 0.01237 -0.07127 -0.46240 -0.05891 0.07127 -0.46240 -0.05891 -0.26600 -0.46240 0.27837 -0.26600 -0.46240 0.13582 -0.19473 -0.46240 0.01237 -0.07127 -0.46240 -0.05891 0.07127 -0.46240 -0.05891 -0.26600 -0.38740 0.27837 0.07127 -0.38740 -0.05891 -0.07127 -0.38740 -0.05891 -0.19473 -0.38740 0.01237 -0.26600 -0.38740 0.13582 -0.26600 -0.38740 0.27837 0.07127 -0.38740 -0.05891 -0.07127 -0.38740 -0.05891 -0.19473 -0.38740 0.01237 -0.26600 -0.38740 0.13582 0.00000 -0.38740 0.20709 0.87947 -0.59090 0.27209 0.87947 -0.48090 0.27209 0.88525 -0.60090 0.26209 0.88525 -0.47090 0.26209 0.94875 -0.60090 0.15209 0.94875 -0.47090 0.15209 0.95453 -0.59090 0.14209 0.95453 -0.48090 0.14209 1.17821 -0.59090 0.78952 1.17821 -0.48090 0.78952 1.18687 -0.60090 0.78452 1.18687 -0.47090 0.78452 1.28213 -0.60090 0.72952 1.28213 -0.47090 0.72952 1.29079 -0.59090 0.72452 1.29079 -0.48090 0.72452 0.63000 -0.60090 0.15209 0.63000 -0.60090 0.26209 0.63000 -0.59090 0.14209 0.63000 -0.59090 0.27209 0.63000 -0.48090 0.14209 0.63000 -0.48090 0.27209 0.63000 -0.47090 0.15209 0.63000 -0.47090 0.26209 0.87947 -0.59090 0.27209 0.87947 -0.48090 0.27209 0.88525 -0.60090 0.26209 0.88525 -0.47090 0.26209 0.94875 -0.60090 0.15209 0.94875 -0.47090 0.15209 0.95453 -0.59090 0.14209 0.95453 -0.48090 0.14209 1.01757 0.23106 0.69139 1.01757 0.28910 0.69139 1.02681 0.29910 0.69522 1.06731 0.23106 0.57129 1.06731 0.28910 0.57129 1.10072 0.15710 0.72583 1.10072 0.17910 0.72583 1.10082 0.15503 0.72558 1.10113 0.15310 0.72484 1.10161 0.15144 0.72367 1.10225 0.15017 0.72214 1.10298 0.14937 0.72036 1.10378 0.14910 0.71844 1.14740 0.14910 0.61312 1.14820 0.14937 0.61121 1.14893 0.15017 0.60943 1.14957 0.15144 0.60789 1.15005 0.15310 0.60672 1.15036 0.15503 0.60598 1.15046 0.15710 0.60573 1.15046 0.17910 0.60573 1.23930 0.29910 0.78324 1.24854 0.15710 0.78706 1.24854 0.28910 0.78706 1.24864 0.15503 0.78681 1.24895 0.15310 0.78607 1.24943 0.15144 0.78490 1.25007 0.15017 0.78337 1.25081 0.14937 0.78159 1.25160 0.14910 0.77967 1.29522 0.14910 0.67435 1.29602 0.14937 0.67244 1.29675 0.15017 0.67065 1.29739 0.15144 0.66912 1.29788 0.15310 0.66795 1.29818 0.15503 0.66721 1.29829 0.15710 0.66696 1.29829 0.28910 0.66696 0.12427 -0.52140 0.94709 0.12427 -0.52140 0.95509 0.12427 -0.44140 0.94709 0.12427 -0.44140 0.95509 0.14427 -0.52140 0.94709 0.14427 -0.52140 0.95509 0.21414 -0.45734 0.94709 0.21414 -0.45734 0.95509 0.21715 -0.45520 0.94709 0.21715 -0.45520 0.95509 0.22060 -0.45386 0.94709 0.22060 -0.45386 0.95509 0.22427 -0.45340 0.94709 0.22427 -0.45340 0.95509 0.34427 -0.45340 0.94709 0.34427 -0.45340 0.95509 0.34427 -0.44140 0.94709 0.34427 -0.44140 0.95509 0.54727 -0.46140 0.94709 0.54727 -0.46140 0.95509 0.54727 -0.44140 0.94709 0.54727 -0.44140 0.95509 0.74727 -0.52140 0.94709 0.74727 -0.52140 0.95509 0.76727 -0.52140 0.94709 0.76727 -0.52140 0.95509 0.76727 -0.44140 0.94709 0.76727 -0.44140 0.95509 0.44177 -0.52140 1.16209 0.44177 -0.52140 1.19209 0.44177 -0.46140 1.01209 0.44177 -0.44640 1.19209 0.44177 -0.44140 1.01209 0.44177 -0.44140 1.18709 0.44977 -0.52140 1.16209 0.44977 -0.52140 1.19209 0.44977 -0.46140 1.01209 0.44977 -0.44640 1.19209 0.44977 -0.44140 1.01209 0.44977 -0.44140 1.18709 0.65727 -0.46140 0.82209 0.65727 -0.46140 0.83009 0.65727 -0.44140 0.82209 0.65727 -0.44140 0.83009 0.74727 -0.52140 0.82209 0.74727 -0.52140 0.83009 0.76727 -0.52140 0.82209 0.76727 -0.52140 0.83009 0.76727 -0.44140 0.82209 0.76727 -0.44140 0.83009 0.12427 -0.52140 0.82209 0.12427 -0.52140 0.83009 0.12427 -0.44140 0.82209 0.12427 -0.44140 0.83009 0.14427 -0.52140 0.82209 0.14427 -0.52140 0.83009 0.23427 -0.46140 0.82209 0.23427 -0.46140 0.83009 0.23427 -0.44140 0.82209 0.23427 -0.44140 0.83009 0.54600 -0.45340 -0.54091 0.54600 -0.45340 -0.53291 0.54600 -0.44140 -0.54091 0.54600 -0.44140 -0.53291 0.66600 -0.45340 -0.54091 0.66600 -0.45340 -0.53291 0.66967 -0.45386 -0.54091 0.66967 -0.45386 -0.53291 0.67312 -0.45520 -0.54091 0.67312 -0.45520 -0.53291 0.67614 -0.45734 -0.54091 0.67614 -0.45734 -0.53291 0.74600 -0.52140 -0.54091 0.74600 -0.52140 -0.53291 0.76600 -0.52140 -0.54091 0.76600 -0.52140 -0.53291 0.76600 -0.44140 -0.54091 0.76600 -0.44140 -0.53291 0.12300 -0.52140 -0.54091 0.12300 -0.52140 -0.53291 0.12300 -0.44140 -0.54091 0.12300 -0.44140 -0.53291 0.14300 -0.52140 -0.54091 0.14300 -0.52140 -0.53291 0.34300 -0.46140 -0.54091 0.34300 -0.46140 -0.53291 0.34300 -0.44140 -0.54091 0.34300 -0.44140 -0.53291 0.44050 -0.52140 -0.77791 0.44050 -0.52140 -0.74791 0.44050 -0.46140 -0.59791 0.44050 -0.44640 -0.77791 0.44050 -0.44140 -0.77291 0.44050 -0.44140 -0.59791 0.44850 -0.52140 -0.77791 0.44850 -0.52140 -0.74791 0.44850 -0.46140 -0.59791 0.44850 -0.44640 -0.77791 0.44850 -0.44140 -0.77291 0.44850 -0.44140 -0.59791 0.12300 -0.52140 -0.41591 0.12300 -0.52140 -0.40791 0.12300 -0.44140 -0.41591 0.12300 -0.44140 -0.40791 0.14300 -0.52140 -0.41591 0.14300 -0.52140 -0.40791 0.23300 -0.46140 -0.41591 0.23300 -0.46140 -0.40791 0.23300 -0.44140 -0.41591 0.23300 -0.44140 -0.40791 0.65600 -0.46140 -0.41591 0.65600 -0.46140 -0.40791 0.65600 -0.44140 -0.41591 0.65600 -0.44140 -0.40791 0.74600 -0.52140 -0.41591 0.74600 -0.52140 -0.40791 0.76600 -0.52140 -0.41591 0.76600 -0.52140 -0.40791 0.76600 -0.44140 -0.41591 0.76600 -0.44140 -0.40791 -0.81300 -0.52140 -0.15991 -0.81300 -0.52140 -0.13991 -0.81300 -0.45734 -0.07004 -0.81300 -0.45520 -0.06703 -0.81300 -0.45386 -0.06358 -0.81300 -0.45340 -0.05991 -0.81300 -0.45340 0.06009 -0.81300 -0.44140 -0.15991 -0.81300 -0.44140 0.06009 -0.80500 -0.52140 -0.15991 -0.80500 -0.52140 -0.13991 -0.80500 -0.45734 -0.07004 -0.80500 -0.45520 -0.06703 -0.80500 -0.45386 -0.06358 -0.80500 -0.45340 -0.05991 -0.80500 -0.45340 0.06009 -0.80500 -0.44140 -0.15991 -0.80500 -0.44140 0.06009 -0.81300 -0.52140 0.55309 -0.81300 -0.52140 0.57309 -0.81300 -0.46140 0.35309 -0.81300 -0.44140 0.35309 -0.81300 -0.44140 0.57309 -0.80500 -0.52140 0.55309 -0.80500 -0.52140 0.57309 -0.80500 -0.46140 0.35309 -0.80500 -0.44140 0.35309 -0.80500 -0.44140 0.57309 -1.05500 -0.52140 0.20259 -1.05500 -0.52140 0.21059 -1.05500 -0.44640 0.20259 -1.05500 -0.44640 0.21059 -1.05000 -0.44140 0.20259 -1.05000 -0.44140 0.21059 -1.02500 -0.52140 0.20259 -1.02500 -0.52140 0.21059 -0.87500 -0.46140 0.20259 -0.87500 -0.46140 0.21059 -0.87500 -0.44140 0.20259 -0.87500 -0.44140 0.21059 -0.70800 -0.52140 0.55309 -0.70800 -0.52140 0.57309 -0.70800 -0.46140 0.46309 -0.70800 -0.44140 0.46309 -0.70800 -0.44140 0.57309 -0.70000 -0.52140 0.55309 -0.70000 -0.52140 0.57309 -0.70000 -0.46140 0.46309 -0.70000 -0.44140 0.46309 -0.70000 -0.44140 0.57309 -0.70800 -0.52140 -0.15991 -0.70800 -0.52140 -0.13991 -0.70800 -0.46140 -0.04991 -0.70800 -0.44140 -0.15991 -0.70800 -0.44140 -0.04991 -0.70000 -0.52140 -0.15991 -0.70000 -0.52140 -0.13991 -0.70000 -0.46140 -0.04991 -0.70000 -0.44140 -0.15991 -0.70000 -0.44140 -0.04991 1.02681 0.29910 0.69522 1.02681 0.29910 0.69522 1.28905 0.29910 0.66313 1.07655 0.29910 0.57512 1.06731 0.28910 0.57129 1.29829 0.28910 0.66696 0.13400 -0.71440 -0.61791 0.13400 -0.71440 -0.39791 0.13400 -0.68440 -0.61791 0.13400 -0.68440 -0.39791 0.24500 -0.71440 -0.61791 0.24500 -0.71440 -0.39791 0.24500 -0.71390 -0.61791 0.24500 -0.71390 -0.50791 0.24500 -0.68490 -0.61791 0.24500 -0.68490 -0.50791 0.24500 -0.68440 -0.61791 0.24500 -0.68440 -0.61103 0.24500 -0.68440 -0.59833 0.24500 -0.68440 -0.56291 0.24500 -0.68440 -0.52248 0.24500 -0.68440 -0.39791 0.24534 -0.71390 -0.51050 0.24534 -0.68490 -0.51050 0.24634 -0.71390 -0.51291 0.24634 -0.68490 -0.51291 0.24793 -0.71390 -0.51498 0.24793 -0.68490 -0.51498 0.25000 -0.71390 -0.51657 0.25000 -0.68490 -0.51657 0.25241 -0.71390 -0.51757 0.25241 -0.68490 -0.51757 0.25500 -0.71390 -0.51791 0.25500 -0.68490 -0.51791 0.63500 -0.71390 -0.51791 0.63500 -0.68490 -0.51791 0.63759 -0.71390 -0.51757 0.63759 -0.68490 -0.51757 0.64000 -0.71390 -0.51657 0.64000 -0.68490 -0.51657 0.64207 -0.71390 -0.51498 0.64207 -0.68490 -0.51498 0.64366 -0.71390 -0.51291 0.64366 -0.68490 -0.51291 0.64466 -0.71390 -0.51050 0.64466 -0.68490 -0.51050 0.64500 -0.71440 -0.61791 0.64500 -0.71440 -0.39791 0.64500 -0.71390 -0.61791 0.64500 -0.71390 -0.50791 0.64500 -0.68490 -0.61791 0.64500 -0.68490 -0.50791 0.64500 -0.68440 -0.61791 0.64500 -0.68440 -0.60646 0.64500 -0.68440 -0.58536 0.64500 -0.68440 -0.55546 0.64500 -0.68440 -0.39791 0.75600 -0.71440 -0.61791 0.75600 -0.71440 -0.39791 0.75600 -0.68440 -0.61791 0.75600 -0.68440 -0.39791 0.13400 -0.71440 0.81209 0.13400 -0.71440 1.03209 0.13400 -0.68440 0.81209 0.13400 -0.68440 1.03209 0.24500 -0.71440 0.81209 0.24500 -0.71440 1.03209 0.24500 -0.71390 0.92209 0.24500 -0.71390 1.03209 0.24500 -0.68490 0.92209 0.24500 -0.68490 1.03209 0.24500 -0.68440 0.81209 0.24500 -0.68440 1.03209 0.24534 -0.71390 0.92468 0.24534 -0.68490 0.92468 0.24634 -0.71390 0.92709 0.24634 -0.68490 0.92709 0.24793 -0.71390 0.92916 0.24793 -0.68490 0.92916 0.25000 -0.71390 0.93075 0.25000 -0.68490 0.93075 0.25241 -0.71390 0.93175 0.25241 -0.68490 0.93175 0.25500 -0.71390 0.93209 0.25500 -0.68490 0.93209 0.63500 -0.71390 0.93209 0.63500 -0.68490 0.93209 0.63759 -0.71390 0.93175 0.63759 -0.68490 0.93175 0.64000 -0.71390 0.93075 0.64000 -0.68490 0.93075 0.64207 -0.71390 0.92916 0.64207 -0.68490 0.92916 0.64366 -0.71390 0.92709 0.64366 -0.68490 0.92709 0.64466 -0.71390 0.92468 0.64466 -0.68490 0.92468 0.64500 -0.71440 0.81209 0.64500 -0.71440 1.03209 0.64500 -0.71390 0.92209 0.64500 -0.71390 1.03209 0.64500 -0.68490 0.92209 0.64500 -0.68490 1.03209 0.64500 -0.68440 0.81209 0.64500 -0.68440 0.91709 0.64500 -0.68440 0.93667 0.64500 -0.68440 0.97709 0.64500 -0.68440 1.01252 0.64500 -0.68440 1.02522 0.64500 -0.68440 1.03209 0.75600 -0.71440 0.81209 0.75600 -0.71440 1.03209 0.75600 -0.68440 0.81209 0.75600 -0.68440 1.03209 -0.91000 -0.71440 -0.14891 -0.91000 -0.71440 -0.02291 -0.91000 -0.71440 0.43709 -0.91000 -0.71440 0.56309 -0.91000 -0.71390 -0.02291 -0.91000 -0.71390 0.43709 -0.91000 -0.68490 -0.02291 -0.91000 -0.68490 0.43709 -0.91000 -0.68440 -0.14891 -0.91000 -0.68440 -0.02291 -0.91000 -0.68440 0.43709 -0.91000 -0.68440 0.56309 -0.89245 -0.68440 -0.02291 -0.86255 -0.68440 -0.02291 -0.81000 -0.68440 -0.02291 -0.80500 -0.71390 -0.01291 -0.80500 -0.71390 0.42709 -0.80500 -0.68490 -0.01291 -0.80500 -0.68490 0.42709 -0.80466 -0.71390 -0.01550 -0.80466 -0.71390 0.42968 -0.80466 -0.68490 -0.01550 -0.80466 -0.68490 0.42968 -0.80366 -0.71390 -0.01791 -0.80366 -0.71390 0.43209 -0.80366 -0.68490 -0.01791 -0.80366 -0.68490 0.43209 -0.80207 -0.71390 -0.01998 -0.80207 -0.71390 0.43416 -0.80207 -0.68490 -0.01998 -0.80207 -0.68490 0.43416 -0.80000 -0.71390 -0.02157 -0.80000 -0.71390 0.43575 -0.80000 -0.68490 -0.02157 -0.80000 -0.68490 0.43575 -0.79759 -0.71390 -0.02257 -0.79759 -0.71390 0.43675 -0.79759 -0.68490 -0.02257 -0.79759 -0.68490 0.43675 -0.79500 -0.71390 -0.02291 -0.79500 -0.71390 0.43709 -0.79500 -0.68490 -0.02291 -0.79500 -0.68490 0.43709 -0.69000 -0.71440 -0.14891 -0.69000 -0.71440 -0.02291 -0.69000 -0.71440 0.43709 -0.69000 -0.71440 0.56309 -0.69000 -0.68440 -0.14891 -0.69000 -0.68440 -0.02291 -0.69000 -0.68440 0.43709 -0.69000 -0.68440 0.56309 0.12027 -0.71340 0.81209 0.12027 -0.71340 1.19209 0.12027 -0.44440 0.81209 0.12027 -0.44440 1.19209 0.12045 -0.44284 0.81209 0.12045 -0.44284 1.19209 0.12097 -0.44136 0.81209 0.12097 -0.44136 1.19209 0.12180 -0.44004 0.81209 0.12180 -0.44004 1.19209 0.12291 -0.43893 0.81209 0.12291 -0.43893 1.19209 0.12424 -0.43809 0.81209 0.12424 -0.43809 1.19209 0.12427 -0.71340 0.81209 0.12427 -0.71340 1.19209 0.12427 -0.44440 0.81209 0.12427 -0.44440 1.19209 0.12435 -0.44373 0.81209 0.12435 -0.44373 1.19209 0.12457 -0.44310 0.81209 0.12457 -0.44310 1.19209 0.12493 -0.44253 0.81209 0.12493 -0.44253 1.19209 0.12540 -0.44205 0.81209 0.12540 -0.44205 1.19209 0.12571 -0.43758 0.81209 0.12571 -0.43758 1.19209 0.12597 -0.44170 0.81209 0.12597 -0.44170 1.19209 0.12661 -0.44147 0.81209 0.12661 -0.44147 1.19209 0.12727 -0.69340 1.19209 0.12727 -0.69340 1.19609 0.12727 -0.44140 0.81209 0.12727 -0.44140 1.19209 0.12727 -0.43740 0.81209 0.12727 -0.43740 1.19209 0.12727 -0.43740 1.19609 0.24527 -0.44140 0.81209 0.24527 -0.44140 0.93209 0.24527 -0.43740 0.81209 0.24527 -0.43740 0.93209 0.24561 -0.44140 0.93468 0.24561 -0.43740 0.93468 0.24661 -0.44140 0.93709 0.24661 -0.43740 0.93709 0.24820 -0.44140 0.93916 0.24820 -0.43740 0.93916 0.25027 -0.44140 0.94075 0.25027 -0.43740 0.94075 0.25268 -0.44140 0.94175 0.25268 -0.43740 0.94175 0.25527 -0.44140 0.94209 0.25527 -0.43740 0.94209 0.63627 -0.44140 0.94209 0.63627 -0.43740 0.94209 0.63886 -0.44140 0.94175 0.63886 -0.43740 0.94175 0.64127 -0.44140 0.94075 0.64127 -0.43740 0.94075 0.64334 -0.44140 0.93916 0.64334 -0.43740 0.93916 0.64493 -0.44140 0.93709 0.64493 -0.43740 0.93709 0.64593 -0.44140 0.93468 0.64593 -0.43740 0.93468 0.64627 -0.44140 0.81209 0.64627 -0.44140 0.93209 0.64627 -0.43740 0.81209 0.64627 -0.43740 0.93209 0.76427 -0.69340 1.19209 0.76427 -0.69340 1.19609 0.76427 -0.44140 0.81209 0.76427 -0.44140 1.19209 0.76427 -0.43740 0.81209 0.76427 -0.43740 1.19209 0.76427 -0.43740 1.19609 0.76505 -0.44150 0.81209 0.76505 -0.44150 1.19209 0.76577 -0.44180 0.81209 0.76577 -0.44180 1.19209 0.76608 -0.43764 0.81209 0.76608 -0.43764 1.19209 0.76639 -0.44228 0.81209 0.76639 -0.44228 1.19209 0.76687 -0.44290 0.81209 0.76687 -0.44290 1.19209 0.76717 -0.44362 0.81209 0.76717 -0.44362 1.19209 0.76727 -0.71340 0.81209 0.76727 -0.71340 1.19209 0.76727 -0.44440 0.81209 0.76727 -0.44440 1.19209 0.76777 -0.43834 0.81209 0.76777 -0.43834 1.19209 0.76922 -0.43945 0.81209 0.76922 -0.43945 1.19209 0.77034 -0.44090 0.81209 0.77034 -0.44090 1.19209 0.77103 -0.44259 0.81209 0.77103 -0.44259 1.19209 0.77127 -0.71340 0.81209 0.77127 -0.71340 1.19209 0.77127 -0.44440 0.81209 0.77127 -0.44440 1.19209 0.11900 -0.71340 -0.77791 0.11900 -0.71340 -0.39791 0.11900 -0.44440 -0.77791 0.11900 -0.44440 -0.39791 0.11918 -0.44284 -0.77791 0.11918 -0.44284 -0.39791 0.11969 -0.44136 -0.77791 0.11969 -0.44136 -0.39791 0.12053 -0.44004 -0.77791 0.12053 -0.44004 -0.39791 0.12164 -0.43893 -0.77791 0.12164 -0.43893 -0.39791 0.12296 -0.43809 -0.77791 0.12296 -0.43809 -0.39791 0.12300 -0.71340 -0.77791 0.12300 -0.71340 -0.39791 0.12300 -0.44440 -0.77791 0.12300 -0.44440 -0.39791 0.12308 -0.44373 -0.77791 0.12308 -0.44373 -0.39791 0.12330 -0.44310 -0.77791 0.12330 -0.44310 -0.39791 0.12365 -0.44253 -0.77791 0.12365 -0.44253 -0.39791 0.12413 -0.44205 -0.77791 0.12413 -0.44205 -0.39791 0.12444 -0.43758 -0.77791 0.12444 -0.43758 -0.39791 0.12470 -0.44170 -0.77791 0.12470 -0.44170 -0.39791 0.12533 -0.44147 -0.77791 0.12533 -0.44147 -0.39791 0.12600 -0.69340 -0.78191 0.12600 -0.69340 -0.77791 0.12600 -0.44140 -0.77791 0.12600 -0.44140 -0.39791 0.12600 -0.43740 -0.78191 0.12600 -0.43740 -0.77791 0.12600 -0.43740 -0.39791 0.24400 -0.44140 -0.51791 0.24400 -0.44140 -0.39791 0.24400 -0.43740 -0.51791 0.24400 -0.43740 -0.39791 0.24434 -0.44140 -0.52050 0.24434 -0.43740 -0.52050 0.24534 -0.44140 -0.52291 0.24534 -0.43740 -0.52291 0.24693 -0.44140 -0.52498 0.24693 -0.43740 -0.52498 0.24900 -0.44140 -0.52657 0.24900 -0.43740 -0.52657 0.25141 -0.44140 -0.52757 0.25141 -0.43740 -0.52757 0.25400 -0.44140 -0.52791 0.25400 -0.43740 -0.52791 0.63500 -0.44140 -0.52791 0.63500 -0.43740 -0.52791 0.63723 -0.44140 -0.52766 0.63723 -0.43740 -0.52766 0.63934 -0.44140 -0.52692 0.63934 -0.43740 -0.52692 0.64123 -0.44140 -0.52573 0.64123 -0.43740 -0.52573 0.64282 -0.44140 -0.52414 0.64282 -0.43740 -0.52414 0.64401 -0.44140 -0.52225 0.64401 -0.43740 -0.52225 0.64475 -0.44140 -0.52013 0.64475 -0.43740 -0.52013 0.64500 -0.44140 -0.51791 0.64500 -0.44140 -0.39791 0.64500 -0.43740 -0.51791 0.64500 -0.43740 -0.39791 0.76300 -0.69340 -0.78191 0.76300 -0.69340 -0.77791 0.76300 -0.44140 -0.77791 0.76300 -0.44140 -0.39791 0.76300 -0.43740 -0.78191 0.76300 -0.43740 -0.77791 0.76300 -0.43740 -0.39791 0.76367 -0.44147 -0.77791 0.76367 -0.44147 -0.39791 0.76430 -0.44170 -0.77791 0.76430 -0.44170 -0.39791 0.76456 -0.43758 -0.77791 0.76456 -0.43758 -0.39791 0.76487 -0.44205 -0.77791 0.76487 -0.44205 -0.39791 0.76535 -0.44253 -0.77791 0.76535 -0.44253 -0.39791 0.76570 -0.44310 -0.77791 0.76570 -0.44310 -0.39791 0.76593 -0.44373 -0.77791 0.76593 -0.44373 -0.39791 0.76600 -0.71340 -0.77791 0.76600 -0.71340 -0.39791 0.76600 -0.44440 -0.77791 0.76600 -0.44440 -0.39791 0.76604 -0.43809 -0.77791 0.76604 -0.43809 -0.39791 0.76736 -0.43893 -0.77791 0.76736 -0.43893 -0.39791 0.76847 -0.44004 -0.77791 0.76847 -0.44004 -0.39791 0.76931 -0.44136 -0.77791 0.76931 -0.44136 -0.39791 0.76982 -0.44284 -0.77791 0.76982 -0.44284 -0.39791 0.77000 -0.71340 -0.77791 0.77000 -0.71340 -0.39791 0.77000 -0.44440 -0.77791 0.77000 -0.44440 -0.39791 -1.05900 -0.69340 -0.15691 -1.05900 -0.69340 0.57009 -1.05900 -0.43740 -0.15691 -1.05900 -0.43740 0.57009 -1.05500 -0.71340 -0.16391 -1.05500 -0.71340 -0.15991 -1.05500 -0.71340 0.57309 -1.05500 -0.71340 0.57709 -1.05500 -0.69340 -0.15691 -1.05500 -0.69340 0.57009 -1.05500 -0.44440 -0.16391 -1.05500 -0.44440 -0.15991 -1.05500 -0.44440 0.57309 -1.05500 -0.44440 0.57709 -1.05500 -0.44373 -0.15983 -1.05500 -0.44373 0.57302 -1.05500 -0.44310 -0.15961 -1.05500 -0.44310 0.57280 -1.05500 -0.44284 -0.16373 -1.05500 -0.44284 0.57692 -1.05500 -0.44253 -0.15925 -1.05500 -0.44253 0.57244 -1.05500 -0.44205 -0.15878 -1.05500 -0.44205 0.57196 -1.05500 -0.44170 -0.15821 -1.05500 -0.44170 0.57139 -1.05500 -0.44147 -0.15758 -1.05500 -0.44147 0.57076 -1.05500 -0.44140 -0.15691 -1.05500 -0.44140 0.57009 -1.05500 -0.44136 -0.16321 -1.05500 -0.44136 0.57640 -1.05500 -0.44004 -0.16238 -1.05500 -0.44004 0.57557 -1.05500 -0.43893 -0.16127 -1.05500 -0.43893 0.57446 -1.05500 -0.43809 -0.15994 -1.05500 -0.43809 0.57313 -1.05500 -0.43758 -0.15847 -1.05500 -0.43758 0.57165 -1.05500 -0.43740 -0.15691 -1.05500 -0.43740 0.57009 -0.80000 -0.44140 -0.03891 -0.80000 -0.44140 0.45209 -0.80000 -0.43740 -0.03891 -0.80000 -0.43740 0.45209 -0.79966 -0.44140 -0.04150 -0.79966 -0.44140 0.45468 -0.79966 -0.43740 -0.04150 -0.79966 -0.43740 0.45468 -0.79866 -0.44140 -0.04391 -0.79866 -0.44140 0.45709 -0.79866 -0.43740 -0.04391 -0.79866 -0.43740 0.45709 -0.79707 -0.44140 -0.04598 -0.79707 -0.44140 0.45916 -0.79707 -0.43740 -0.04598 -0.79707 -0.43740 0.45916 -0.79500 -0.44140 -0.04757 -0.79500 -0.44140 0.46075 -0.79500 -0.43740 -0.04757 -0.79500 -0.43740 0.46075 -0.79259 -0.44140 -0.04857 -0.79259 -0.44140 0.46175 -0.79259 -0.43740 -0.04857 -0.79259 -0.43740 0.46175 -0.79000 -0.44140 -0.04891 -0.79000 -0.44140 0.46209 -0.79000 -0.43740 -0.04891 -0.79000 -0.43740 0.46209 -0.69000 -0.71340 -0.16391 -0.69000 -0.71340 -0.15991 -0.69000 -0.71340 0.57309 -0.69000 -0.71340 0.57709 -0.69000 -0.44440 -0.16391 -0.69000 -0.44440 -0.15991 -0.69000 -0.44440 0.57309 -0.69000 -0.44440 0.57709 -0.69000 -0.44373 -0.15983 -0.69000 -0.44373 0.57302 -0.69000 -0.44310 -0.15961 -0.69000 -0.44310 0.57280 -0.69000 -0.44284 -0.16373 -0.69000 -0.44284 0.57692 -0.69000 -0.44253 -0.15925 -0.69000 -0.44253 0.57244 -0.69000 -0.44205 -0.15878 -0.69000 -0.44205 0.57196 -0.69000 -0.44170 -0.15821 -0.69000 -0.44170 0.57139 -0.69000 -0.44147 -0.15758 -0.69000 -0.44147 0.57076 -0.69000 -0.44140 -0.15691 -0.69000 -0.44140 -0.04891 -0.69000 -0.44140 0.46209 -0.69000 -0.44140 0.57009 -0.69000 -0.44136 -0.16321 -0.69000 -0.44136 0.57640 -0.69000 -0.44004 -0.16238 -0.69000 -0.44004 0.57557 -0.69000 -0.43893 -0.16127 -0.69000 -0.43893 0.57446 -0.69000 -0.43809 -0.15994 -0.69000 -0.43809 0.57313 -0.69000 -0.43758 -0.15847 -0.69000 -0.43758 0.57165 -0.69000 -0.43740 -0.15691 -0.69000 -0.43740 -0.04891 -0.69000 -0.43740 0.46209 -0.69000 -0.43740 0.57009 0.66250 -0.68440 -0.60291 0.66250 -0.68440 -0.40291 0.66423 -0.66640 -0.60291 0.66423 -0.66640 -0.40291 0.68077 -0.66640 -0.60291 0.68077 -0.66640 -0.40291 0.68250 -0.68440 -0.60291 0.68250 -0.68440 -0.40291 0.66250 -0.68440 0.81709 0.66250 -0.68440 1.01709 0.66423 -0.66640 0.81709 0.66423 -0.66640 1.01709 0.68077 -0.66640 0.81709 0.68077 -0.66640 1.01709 0.68250 -0.68440 0.81709 0.68250 -0.68440 1.01709 0.20750 -0.68440 -0.60291 0.20750 -0.68440 -0.40291 0.20923 -0.66640 -0.60291 0.20923 -0.66640 -0.40291 0.22577 -0.66640 -0.60291 0.22577 -0.66640 -0.40291 0.22750 -0.68440 -0.60291 0.22750 -0.68440 -0.40291 0.20750 -0.68440 0.81709 0.20750 -0.68440 1.01709 0.20923 -0.66640 0.81709 0.20923 -0.66640 1.01709 0.22577 -0.66640 0.81709 0.22577 -0.66640 1.01709 0.22750 -0.68440 0.81709 0.22750 -0.68440 1.01709 0.34500 -0.62940 -0.50541 0.34500 -0.62940 -0.48541 0.34500 -0.61140 -0.50368 0.34500 -0.61140 -0.48714 0.54500 -0.62940 -0.50541 0.54500 -0.62940 -0.48541 0.54500 -0.61140 -0.50368 0.54500 -0.61140 -0.48714 -0.19750 -0.62890 0.71709 -0.19750 -0.62890 0.73709 -0.19750 -0.46290 0.71709 -0.19750 -0.46290 0.73709 -0.07500 -0.60890 0.73709 -0.07500 -0.60890 1.83709 -0.07500 -0.57790 0.73709 -0.07500 -0.53490 0.73709 -0.07500 -0.48777 0.73709 -0.07500 -0.48290 0.73709 -0.07500 -0.48290 1.83709 -0.07470 -0.61157 0.73709 -0.07470 -0.61157 1.83709 -0.07470 -0.48023 0.73709 -0.07470 -0.48023 1.83709 -0.07381 -0.61411 0.73709 -0.07381 -0.61411 1.83709 -0.07381 -0.47769 0.73709 -0.07381 -0.47769 1.83709 -0.07355 -0.61452 0.73709 -0.07238 -0.61638 0.73709 -0.07238 -0.61638 1.83709 -0.07238 -0.47542 0.73709 -0.07238 -0.47542 1.83709 -0.07048 -0.61828 0.73709 -0.07048 -0.61828 1.83709 -0.07048 -0.47352 0.73709 -0.07048 -0.47352 1.83709 -0.06821 -0.61971 0.73709 -0.06821 -0.61971 1.83709 -0.06821 -0.47209 0.73709 -0.06821 -0.47209 1.83709 -0.06567 -0.62060 0.73709 -0.06567 -0.62060 1.83709 -0.06567 -0.47120 0.73709 -0.06567 -0.47120 1.83709 -0.06300 -0.62090 0.73709 -0.06300 -0.47090 0.73709 0.06300 -0.62090 0.73709 0.06300 -0.47090 0.73709 0.06567 -0.62060 0.73709 0.06567 -0.62060 1.83709 0.06567 -0.47120 0.73709 0.06567 -0.47120 1.83709 0.06821 -0.61971 0.73709 0.06821 -0.61971 1.83709 0.06821 -0.47209 0.73709 0.06821 -0.47209 1.83709 0.07048 -0.61828 0.73709 0.07048 -0.61828 1.83709 0.07048 -0.47352 0.73709 0.07048 -0.47352 1.83709 0.07238 -0.61638 0.73709 0.07238 -0.61638 1.83709 0.07238 -0.47542 0.73709 0.07238 -0.47542 1.83709 0.07355 -0.61452 0.73709 0.07381 -0.61411 0.73709 0.07381 -0.61411 1.83709 0.07381 -0.47769 0.73709 0.07381 -0.47769 1.83709 0.07470 -0.61157 0.73709 0.07470 -0.61157 1.83709 0.07470 -0.48023 0.73709 0.07470 -0.48023 1.83709 0.07500 -0.60890 0.73709 0.07500 -0.60890 1.83709 0.07500 -0.57790 0.73709 0.07500 -0.53490 0.73709 0.07500 -0.48777 0.73709 0.07500 -0.48290 0.73709 0.07500 -0.48290 1.83709 0.19750 -0.62890 0.71709 0.19750 -0.62890 0.73709 0.19750 -0.46290 0.71709 0.19750 -0.46290 0.73709 1.12775 0.24210 0.77816 1.12775 0.29910 0.77816 1.14076 0.29910 0.74675 1.14229 0.24210 0.74306 1.14229 0.29510 0.74306 1.07193 0.24210 0.57320 1.07193 0.29510 0.57320 1.07346 0.29910 0.56951 1.08648 0.24210 0.53809 1.08648 0.29910 0.53809 1.19204 0.24210 0.62295 1.19204 0.29510 0.62295 1.19357 0.29910 0.61926 1.20658 0.24210 0.58784 1.20658 0.29910 0.58784 0.33350 -0.65740 0.73289 0.33355 -0.65740 0.73724 0.33350 -0.38740 0.73289 0.33355 -0.38740 0.73720 0.33425 -0.65740 0.75096 0.33425 -0.38740 0.75096 0.33430 -0.65740 0.73209 0.33430 -0.38740 0.73209 0.33713 -0.65740 0.75439 0.33713 -0.38740 0.75439 0.33770 -0.65740 0.74323 0.33770 -0.65740 0.74692 0.33770 -0.38740 0.74323 0.33770 -0.38740 0.74692 0.35230 -0.65740 0.74323 0.35230 -0.65740 0.74692 0.35230 -0.38740 0.74323 0.35230 -0.38740 0.74692 0.35287 -0.65740 0.75439 0.35287 -0.38740 0.75439 0.35575 -0.65740 0.75100 0.35574 -0.38740 0.75094 0.35570 -0.65740 0.73209 0.35570 -0.38740 0.73209 0.35646 -0.65740 0.73722 0.35646 -0.38740 0.73722 0.35650 -0.65740 0.73289 0.35650 -0.38740 0.73289 0.53350 -0.65740 0.73289 0.53354 -0.65740 0.73720 0.53350 -0.38740 0.73289 0.53354 -0.38740 0.73720 0.53425 -0.65740 0.75096 0.53425 -0.38740 0.75100 0.53430 -0.65740 0.73209 0.53430 -0.38740 0.73209 0.53712 -0.65740 0.75439 0.53712 -0.38740 0.75439 0.53770 -0.65740 0.74323 0.53770 -0.65740 0.74692 0.53770 -0.38740 0.74323 0.53770 -0.38740 0.74692 0.55230 -0.65740 0.74323 0.55230 -0.65740 0.74692 0.55230 -0.38740 0.74323 0.55230 -0.38740 0.74692 0.55287 -0.65740 0.75439 0.55287 -0.38740 0.75439 0.55575 -0.65740 0.75100 0.55574 -0.38740 0.75096 0.55570 -0.65740 0.73209 0.55570 -0.38740 0.73209 0.55646 -0.65740 0.73722 0.55646 -0.38740 0.73720 0.55650 -0.65740 0.73289 0.55650 -0.38740 0.73289 -0.64730 -0.65740 0.09922 -0.64730 -0.65740 0.11497 -0.64730 -0.38740 0.09922 -0.64730 -0.38740 0.11497 -0.62580 -0.65740 0.09559 -0.62580 -0.65740 0.11859 -0.62580 -0.38740 0.09559 -0.62580 -0.38740 0.11859 -0.64730 -0.65740 0.29922 -0.64730 -0.65740 0.31497 -0.64730 -0.38740 0.29922 -0.64730 -0.38740 0.31497 -0.62580 -0.65740 0.29559 -0.62580 -0.65740 0.31859 -0.62580 -0.38740 0.29559 -0.62580 -0.38740 0.31859 0.53350 -0.65740 -0.31871 0.53350 -0.38740 -0.31871 0.53712 -0.65740 -0.34021 0.53712 -0.38740 -0.34021 0.55287 -0.65740 -0.34021 0.55287 -0.38740 -0.34021 0.55650 -0.65740 -0.31871 0.55650 -0.38740 -0.31871 0.33350 -0.65740 -0.31871 0.33430 -0.38740 -0.31791 0.33713 -0.65740 -0.34021 0.33713 -0.38740 -0.34021 0.35287 -0.65740 -0.34021 0.35287 -0.38740 -0.34021 0.35570 -0.65740 -0.31791 0.35570 -0.38740 -0.31791 -0.91000 -0.75640 -0.14891 -0.91000 -0.75640 -0.03791 -0.91000 -0.71440 -0.14891 -0.91000 -0.71440 -0.03791 -0.69000 -0.75640 -0.14891 -0.69000 -0.75640 -0.03791 -0.69000 -0.71440 -0.14891 -0.69000 -0.71440 -0.03791 -0.86600 -0.75540 0.57309 -0.86600 -0.73040 0.57309 -0.85431 -0.75540 0.57309 -0.85431 -0.73440 0.57309 -0.73151 -0.75540 0.57309 -0.73151 -0.73440 0.57309 -0.71981 -0.75540 0.57309 -0.71981 -0.73040 0.57309 0.12427 -0.75540 0.88031 0.12427 -0.75540 0.88457 0.12427 -0.75540 0.92927 0.12427 -0.75540 0.93352 0.12427 -0.73440 0.88457 0.12427 -0.73440 0.92927 0.12427 -0.73040 0.88031 0.12427 -0.73040 0.93352 -0.91000 -0.75540 0.56309 -0.91000 -0.75540 0.57309 -0.91000 -0.68440 0.56309 -0.91000 -0.68440 0.57309 -0.69000 -0.75540 0.56309 -0.69000 -0.75540 0.57309 -0.69000 -0.68440 0.56309 -0.69000 -0.68440 0.57309 0.12427 -0.75540 0.81202 0.12427 -0.75540 1.03202 0.12427 -0.68440 0.81202 0.12427 -0.68440 1.03202 0.13427 -0.75540 0.81202 0.13427 -0.75540 1.03202 0.13427 -0.68440 0.81202 0.13427 -0.68440 1.03202 -0.86600 -0.75540 -0.15891 -0.86600 -0.73040 -0.15891 -0.85431 -0.75540 -0.15891 -0.85431 -0.73440 -0.15891 -0.73151 -0.75540 -0.15891 -0.73151 -0.73440 -0.15891 -0.71981 -0.75540 -0.15891 -0.71981 -0.73040 -0.15891 0.12427 -0.75540 -0.51934 0.12427 -0.75540 -0.51508 0.12427 -0.75540 -0.47038 0.12427 -0.75540 -0.46613 0.12427 -0.73440 -0.51508 0.12427 -0.73440 -0.47038 0.12427 -0.73040 -0.51934 0.12427 -0.73040 -0.46613 -0.91000 -0.75540 -0.15891 -0.91000 -0.75540 -0.14891 -0.91000 -0.68440 -0.15891 -0.91000 -0.68440 -0.14891 -0.69000 -0.75540 -0.15891 -0.69000 -0.75540 -0.14891 -0.69000 -0.68440 -0.15891 -0.69000 -0.68440 -0.14891 0.12427 -0.75540 -0.61784 0.12427 -0.75540 -0.39784 0.12427 -0.68440 -0.61784 0.12427 -0.68440 -0.39784 0.13427 -0.75540 -0.61784 0.13427 -0.75540 -0.39784 0.13427 -0.68440 -0.61784 0.13427 -0.68440 -0.39784 0.75600 -0.75540 0.81209 0.75600 -0.75540 1.03209 0.75600 -0.68440 0.81209 0.75600 -0.68440 1.03209 0.76600 -0.75540 0.81209 0.76600 -0.75540 1.03209 0.76600 -0.68440 0.81209 0.76600 -0.68440 1.03209 0.75600 -0.75540 -0.61791 0.75600 -0.75540 -0.39791 0.75600 -0.68440 -0.61791 0.75600 -0.68440 -0.39791 0.76600 -0.75540 -0.61791 0.76600 -0.75540 -0.39791 0.76600 -0.68440 -0.61791 0.76600 -0.68440 -0.39791 0.76600 -0.75140 -0.61791 0.76600 -0.75140 1.03209 0.76600 -0.71940 -0.61791 0.76600 -0.71940 1.03209 0.76614 -0.75243 -0.61791 0.76614 -0.75243 1.03209 0.76614 -0.71836 -0.61791 0.76614 -0.71836 1.03209 0.76654 -0.75340 -0.61791 0.76654 -0.75340 1.03209 0.76654 -0.71740 -0.61791 0.76654 -0.71740 1.03209 0.76717 -0.75423 -0.61791 0.76717 -0.75423 1.03209 0.76717 -0.71657 -0.61791 0.76717 -0.71657 1.03209 0.76800 -0.75486 -0.61791 0.76800 -0.75486 1.03209 0.76800 -0.71594 -0.61791 0.76800 -0.71594 1.03209 0.76897 -0.75526 -0.61791 0.76897 -0.75526 1.03209 0.76897 -0.71554 -0.61791 0.76897 -0.71554 1.03209 0.76900 -0.75240 -0.61791 0.76900 -0.75240 1.03209 0.76900 -0.71840 -0.61791 0.76900 -0.71840 1.03209 0.77000 -0.75540 -0.61791 0.77000 -0.75540 1.03209 0.77000 -0.71540 -0.61791 0.77000 -0.71540 1.03209 0.81200 -0.75540 -0.61791 0.81200 -0.75540 1.03209 0.81200 -0.71540 -0.61791 0.81200 -0.71540 1.03209 0.81300 -0.75240 -0.61791 0.81300 -0.75240 1.03209 0.81300 -0.71840 -0.61791 0.81300 -0.71840 1.03209 0.81304 -0.75526 -0.61791 0.81304 -0.75526 1.03209 0.81304 -0.71554 -0.61791 0.81304 -0.71554 1.03209 0.81400 -0.75486 -0.61791 0.81400 -0.75486 1.03209 0.81400 -0.71594 -0.61791 0.81400 -0.71594 1.03209 0.81483 -0.75423 -0.61791 0.81483 -0.75423 1.03209 0.81483 -0.71657 -0.61791 0.81483 -0.71657 1.03209 0.81546 -0.75340 -0.61791 0.81546 -0.75340 1.03209 0.81546 -0.71740 -0.61791 0.81546 -0.71740 1.03209 0.81586 -0.75243 -0.61791 0.81586 -0.75243 1.03209 0.81586 -0.71836 -0.61791 0.81586 -0.71836 1.03209 0.81600 -0.75140 -0.61791 0.81600 -0.75140 1.03209 0.81600 -0.71940 -0.61791 0.81600 -0.71940 1.03209 0.65100 -0.77040 -0.60141 0.65100 -0.77040 -0.41541 0.65100 -0.75540 -0.60141 0.65100 -0.75540 -0.41541 0.66300 -0.77040 -0.61341 0.66300 -0.77040 -0.40341 0.66300 -0.75540 -0.61341 0.66300 -0.75540 -0.40341 0.73900 -0.77040 -0.61341 0.73900 -0.77040 -0.40341 0.73900 -0.75540 -0.61341 0.73900 -0.75540 -0.40341 0.75100 -0.77040 -0.60141 0.75100 -0.77040 -0.41541 0.75100 -0.75540 -0.60141 0.75100 -0.75540 -0.41541 0.14000 -0.77040 -0.60041 0.14000 -0.77040 -0.41441 0.14000 -0.75540 -0.60041 0.14000 -0.75540 -0.41441 0.15200 -0.77040 -0.61241 0.15200 -0.77040 -0.40241 0.15200 -0.75540 -0.61241 0.15200 -0.75540 -0.40241 0.22800 -0.77040 -0.61241 0.22800 -0.77040 -0.40241 0.22800 -0.75540 -0.61241 0.22800 -0.75540 -0.40241 0.24000 -0.77040 -0.60041 0.24000 -0.77040 -0.41441 0.24000 -0.75540 -0.60041 0.24000 -0.75540 -0.41441 0.65100 -0.77040 0.82959 0.65100 -0.77040 1.01559 0.65100 -0.75540 0.82959 0.65100 -0.75540 1.01559 0.66300 -0.77040 0.81759 0.66300 -0.77040 1.02759 0.66300 -0.75540 0.81759 0.66300 -0.75540 1.02759 0.73900 -0.77040 0.81759 0.73900 -0.77040 1.02759 0.73900 -0.75540 0.81759 0.73900 -0.75540 1.02759 0.75100 -0.77040 0.82959 0.75100 -0.77040 1.01559 0.75100 -0.75540 0.82959 0.75100 -0.75540 1.01559 0.14000 -0.77040 0.82959 0.14000 -0.77040 1.01559 0.14000 -0.75540 0.82959 0.14000 -0.75540 1.01559 0.15200 -0.77040 0.81759 0.15200 -0.77040 1.02759 0.15200 -0.75540 0.81759 0.15200 -0.75540 1.02759 0.22800 -0.77040 0.81759 0.22800 -0.77040 1.02759 0.22800 -0.75540 0.81759 0.22800 -0.75540 1.02759 0.24000 -0.77040 0.82959 0.24000 -0.77040 1.01559 0.24000 -0.75540 0.82959 0.24000 -0.75540 1.01559 -0.90500 -0.77040 -0.13141 -0.90500 -0.77040 -0.05541 -0.90500 -0.75540 -0.13141 -0.90500 -0.75540 -0.05541 -0.89300 -0.77040 -0.14341 -0.89300 -0.77040 -0.04341 -0.89300 -0.75540 -0.14341 -0.89300 -0.75540 -0.04341 -0.70700 -0.77040 -0.14341 -0.70700 -0.77040 -0.04341 -0.70700 -0.75540 -0.14341 -0.70700 -0.75540 -0.04341 -0.69500 -0.77040 -0.13141 -0.69500 -0.77040 -0.05541 -0.69500 -0.75540 -0.13141 -0.69500 -0.75540 -0.05541 -0.90500 -0.77040 0.46959 -0.90500 -0.77040 0.54559 -0.90500 -0.75540 0.46959 -0.90500 -0.75540 0.54559 -0.89300 -0.77040 0.45759 -0.89300 -0.77040 0.55759 -0.89300 -0.75540 0.45759 -0.89300 -0.75540 0.55759 -0.70700 -0.77040 0.45759 -0.70700 -0.77040 0.55759 -0.70700 -0.75540 0.45759 -0.70700 -0.75540 0.55759 -0.69500 -0.77040 0.46959 -0.69500 -0.77040 0.54559 -0.69500 -0.75540 0.46959 -0.69500 -0.75540 0.54559 0.04574 0.51890 2.01209 0.04574 0.51890 2.05709 0.05193 0.50800 2.01209 0.05193 0.50800 2.05709 0.05454 0.52650 2.01209 0.05454 0.52650 2.05709 0.05724 0.51450 2.01209 0.05724 0.51450 2.05709 0.08224 0.51450 2.01209 0.08224 0.51450 2.05709 0.08424 0.52700 2.01209 0.08424 0.52700 2.05709 0.09044 0.50850 2.01209 0.09044 0.50850 2.05709 0.09044 0.52700 2.01209 0.09044 0.52700 2.05709 0.04545 0.51852 1.89709 0.04545 0.51852 1.94209 0.04546 0.51896 1.89709 0.04546 0.51896 1.94209 0.04554 0.51809 1.89709 0.04554 0.51809 1.94209 0.04556 0.51938 1.89709 0.04556 0.51938 1.94209 0.04571 0.51770 1.89709 0.04571 0.51770 1.94209 0.04575 0.51977 1.89709 0.04575 0.51977 1.94209 0.04603 0.52011 1.89709 0.04603 0.52011 1.94209 0.05106 0.50850 1.89709 0.05106 0.50850 1.94209 0.05138 0.50808 1.89709 0.05138 0.50808 1.94209 0.05180 0.50777 1.89709 0.05180 0.50777 1.94209 0.05228 0.50757 1.89709 0.05228 0.50757 1.94209 0.05279 0.50750 1.89709 0.05279 0.50750 1.94209 0.05283 0.52691 1.89709 0.05283 0.52691 1.94209 0.05320 0.52721 1.89709 0.05320 0.52721 1.94209 0.05362 0.52740 1.89709 0.05362 0.52740 1.94209 0.05408 0.52749 1.89709 0.05408 0.52749 1.94209 0.05455 0.52748 1.89709 0.05455 0.52748 1.94209 0.05501 0.52735 1.89709 0.05501 0.52735 1.94209 0.05542 0.52712 1.89709 0.05542 0.52712 1.94209 0.05576 0.52680 1.89709 0.05576 0.52680 1.94209 0.05602 0.52641 1.89709 0.05602 0.52641 1.94209 0.05619 0.52597 1.89709 0.05619 0.52597 1.94209 0.05624 0.51550 1.89709 0.05624 0.51550 1.94209 0.05624 0.52550 1.89709 0.05624 0.52550 1.94209 0.05629 0.51506 1.89709 0.05629 0.51506 1.94209 0.05644 0.51463 1.89709 0.05644 0.51463 1.94209 0.05668 0.51425 1.89709 0.05668 0.51425 1.94209 0.05700 0.51394 1.89709 0.05700 0.51394 1.94209 0.05737 0.51370 1.89709 0.05737 0.51370 1.94209 0.05780 0.51355 1.89709 0.05780 0.51355 1.94209 0.05824 0.51350 1.89709 0.05824 0.51350 1.94209 0.08124 0.51350 1.89709 0.08124 0.51350 1.94209 0.08176 0.51357 1.89709 0.08176 0.51357 1.94209 0.08224 0.51377 1.89709 0.08224 0.51377 1.94209 0.08266 0.51409 1.89709 0.08266 0.51409 1.94209 0.08297 0.51450 1.89709 0.08297 0.51450 1.94209 0.08317 0.51498 1.89709 0.08317 0.51498 1.94209 0.08324 0.51550 1.89709 0.08324 0.51550 1.94209 0.08324 0.52600 1.89709 0.08324 0.52600 1.94209 0.08329 0.52645 1.89709 0.08329 0.52645 1.94209 0.08344 0.52687 1.89709 0.08344 0.52687 1.94209 0.08368 0.52725 1.89709 0.08368 0.52725 1.94209 0.08400 0.52756 1.89709 0.08400 0.52756 1.94209 0.08437 0.52780 1.89709 0.08437 0.52780 1.94209 0.08480 0.52795 1.89709 0.08480 0.52795 1.94209 0.08524 0.52800 1.89709 0.08524 0.52800 1.94209 0.08944 0.50750 1.89709 0.08944 0.50750 1.94209 0.08944 0.52800 1.89709 0.08944 0.52800 1.94209 0.08989 0.52795 1.89709 0.08989 0.52795 1.94209 0.08996 0.50757 1.89709 0.08996 0.50757 1.94209 0.09031 0.52780 1.89709 0.09031 0.52780 1.94209 0.09044 0.50777 1.89709 0.09044 0.50777 1.94209 0.09069 0.52756 1.89709 0.09069 0.52756 1.94209 0.09086 0.50809 1.89709 0.09086 0.50809 1.94209 0.09101 0.52725 1.89709 0.09101 0.52725 1.94209 0.09117 0.50850 1.89709 0.09117 0.50850 1.94209 0.09124 0.52687 1.89709 0.09124 0.52687 1.94209 0.09137 0.50898 1.89709 0.09137 0.50898 1.94209 0.09139 0.52645 1.89709 0.09139 0.52645 1.94209 0.09144 0.50950 1.89709 0.09144 0.50950 1.94209 0.09144 0.52600 1.89709 0.09144 0.52600 1.94209 0.04545 0.51852 1.78209 0.04545 0.51852 1.82709 0.04546 0.51896 1.78209 0.04546 0.51896 1.82709 0.04554 0.51809 1.78209 0.04554 0.51809 1.82709 0.04556 0.51938 1.78209 0.04556 0.51938 1.82709 0.04571 0.51770 1.78209 0.04571 0.51770 1.82709 0.04575 0.51977 1.78209 0.04575 0.51977 1.82709 0.04603 0.52011 1.78209 0.04603 0.52011 1.82709 0.05106 0.50850 1.78209 0.05106 0.50850 1.82709 0.05138 0.50808 1.78209 0.05138 0.50808 1.82709 0.05180 0.50777 1.78209 0.05180 0.50777 1.82709 0.05228 0.50757 1.78209 0.05228 0.50757 1.82709 0.05279 0.50750 1.78209 0.05279 0.50750 1.82709 0.05283 0.52691 1.78209 0.05283 0.52691 1.82709 0.05320 0.52721 1.78209 0.05320 0.52721 1.82709 0.05362 0.52740 1.78209 0.05362 0.52740 1.82709 0.05408 0.52749 1.78209 0.05408 0.52749 1.82709 0.05455 0.52748 1.78209 0.05455 0.52748 1.82709 0.05501 0.52735 1.78209 0.05501 0.52735 1.82709 0.05542 0.52712 1.78209 0.05542 0.52712 1.82709 0.05576 0.52680 1.78209 0.05576 0.52680 1.82709 0.05602 0.52641 1.78209 0.05602 0.52641 1.82709 0.05619 0.52597 1.78209 0.05619 0.52597 1.82709 0.05624 0.51550 1.78209 0.05624 0.51550 1.82709 0.05624 0.52550 1.78209 0.05624 0.52550 1.82709 0.05629 0.51506 1.78209 0.05629 0.51506 1.82709 0.05644 0.51463 1.78209 0.05644 0.51463 1.82709 0.05668 0.51425 1.78209 0.05668 0.51425 1.82709 0.05700 0.51394 1.78209 0.05700 0.51394 1.82709 0.05737 0.51370 1.78209 0.05737 0.51370 1.82709 0.05780 0.51355 1.78209 0.05780 0.51355 1.82709 0.05824 0.51350 1.78209 0.05824 0.51350 1.82709 0.08124 0.51350 1.78209 0.08124 0.51350 1.82709 0.08176 0.51357 1.78209 0.08176 0.51357 1.82709 0.08224 0.51377 1.78209 0.08224 0.51377 1.82709 0.08266 0.51409 1.78209 0.08266 0.51409 1.82709 0.08297 0.51450 1.78209 0.08297 0.51450 1.82709 0.08317 0.51498 1.78209 0.08317 0.51498 1.82709 0.08324 0.51550 1.78209 0.08324 0.51550 1.82709 0.08324 0.52600 1.78209 0.08324 0.52600 1.82709 0.08329 0.52645 1.78209 0.08329 0.52645 1.82709 0.08344 0.52687 1.78209 0.08344 0.52687 1.82709 0.08368 0.52725 1.78209 0.08368 0.52725 1.82709 0.08400 0.52756 1.78209 0.08400 0.52756 1.82709 0.08437 0.52780 1.78209 0.08437 0.52780 1.82709 0.08480 0.52795 1.78209 0.08480 0.52795 1.82709 0.08524 0.52800 1.78209 0.08524 0.52800 1.82709 0.08944 0.50750 1.78209 0.08944 0.50750 1.82709 0.08944 0.52800 1.78209 0.08944 0.52800 1.82709 0.08989 0.52795 1.78209 0.08989 0.52795 1.82709 0.08996 0.50757 1.78209 0.08996 0.50757 1.82709 0.09031 0.52780 1.78209 0.09031 0.52780 1.82709 0.09044 0.50777 1.78209 0.09044 0.50777 1.82709 0.09069 0.52756 1.78209 0.09069 0.52756 1.82709 0.09086 0.50809 1.78209 0.09086 0.50809 1.82709 0.09101 0.52725 1.78209 0.09101 0.52725 1.82709 0.09117 0.50850 1.78209 0.09117 0.50850 1.82709 0.09124 0.52687 1.78209 0.09124 0.52687 1.82709 0.09137 0.50898 1.78209 0.09137 0.50898 1.82709 0.09139 0.52645 1.78209 0.09139 0.52645 1.82709 0.09144 0.50950 1.78209 0.09144 0.50950 1.82709 0.09144 0.52600 1.78209 0.09144 0.52600 1.82709 0.04545 0.51852 1.66709 0.04545 0.51852 1.71209 0.04546 0.51896 1.66709 0.04546 0.51896 1.71209 0.04554 0.51809 1.66709 0.04554 0.51809 1.71209 0.04556 0.51938 1.66709 0.04556 0.51938 1.71209 0.04571 0.51770 1.66709 0.04571 0.51770 1.71209 0.04575 0.51977 1.66709 0.04575 0.51977 1.71209 0.04603 0.52011 1.66709 0.04603 0.52011 1.71209 0.05106 0.50850 1.66709 0.05106 0.50850 1.71209 0.05138 0.50808 1.66709 0.05138 0.50808 1.71209 0.05180 0.50777 1.66709 0.05180 0.50777 1.71209 0.05228 0.50757 1.66709 0.05228 0.50757 1.71209 0.05279 0.50750 1.66709 0.05279 0.50750 1.71209 0.05283 0.52691 1.66709 0.05283 0.52691 1.71209 0.05320 0.52721 1.66709 0.05320 0.52721 1.71209 0.05362 0.52740 1.66709 0.05362 0.52740 1.71209 0.05408 0.52749 1.66709 0.05408 0.52749 1.71209 0.05455 0.52748 1.66709 0.05455 0.52748 1.71209 0.05501 0.52735 1.66709 0.05501 0.52735 1.71209 0.05542 0.52712 1.66709 0.05542 0.52712 1.71209 0.05576 0.52680 1.66709 0.05576 0.52680 1.71209 0.05602 0.52641 1.66709 0.05602 0.52641 1.71209 0.05619 0.52597 1.66709 0.05619 0.52597 1.71209 0.05624 0.51550 1.66709 0.05624 0.51550 1.71209 0.05624 0.52550 1.66709 0.05624 0.52550 1.71209 0.05629 0.51506 1.66709 0.05629 0.51506 1.71209 0.05644 0.51463 1.66709 0.05644 0.51463 1.71209 0.05668 0.51425 1.66709 0.05668 0.51425 1.71209 0.05700 0.51394 1.66709 0.05700 0.51394 1.71209 0.05737 0.51370 1.66709 0.05737 0.51370 1.71209 0.05780 0.51355 1.66709 0.05780 0.51355 1.71209 0.05824 0.51350 1.66709 0.05824 0.51350 1.71209 0.08124 0.51350 1.66709 0.08124 0.51350 1.71209 0.08176 0.51357 1.66709 0.08176 0.51357 1.71209 0.08224 0.51377 1.66709 0.08224 0.51377 1.71209 0.08266 0.51409 1.66709 0.08266 0.51409 1.71209 0.08297 0.51450 1.66709 0.08297 0.51450 1.71209 0.08317 0.51498 1.66709 0.08317 0.51498 1.71209 0.08324 0.51550 1.66709 0.08324 0.51550 1.71209 0.08324 0.52600 1.66709 0.08324 0.52600 1.71209 0.08329 0.52645 1.66709 0.08329 0.52645 1.71209 0.08344 0.52687 1.66709 0.08344 0.52687 1.71209 0.08368 0.52725 1.66709 0.08368 0.52725 1.71209 0.08400 0.52756 1.66709 0.08400 0.52756 1.71209 0.08437 0.52780 1.66709 0.08437 0.52780 1.71209 0.08480 0.52795 1.66709 0.08480 0.52795 1.71209 0.08524 0.52800 1.66709 0.08524 0.52800 1.71209 0.08944 0.50750 1.66709 0.08944 0.50750 1.71209 0.08944 0.52800 1.66709 0.08944 0.52800 1.71209 0.08989 0.52795 1.66709 0.08989 0.52795 1.71209 0.08996 0.50757 1.66709 0.08996 0.50757 1.71209 0.09031 0.52780 1.66709 0.09031 0.52780 1.71209 0.09044 0.50777 1.66709 0.09044 0.50777 1.71209 0.09069 0.52756 1.66709 0.09069 0.52756 1.71209 0.09086 0.50809 1.66709 0.09086 0.50809 1.71209 0.09101 0.52725 1.66709 0.09101 0.52725 1.71209 0.09117 0.50850 1.66709 0.09117 0.50850 1.71209 0.09124 0.52687 1.66709 0.09124 0.52687 1.71209 0.09137 0.50898 1.66709 0.09137 0.50898 1.71209 0.09139 0.52645 1.66709 0.09139 0.52645 1.71209 0.09144 0.50950 1.66709 0.09144 0.50950 1.71209 0.09144 0.52600 1.66709 0.09144 0.52600 1.71209 -0.04750 0.52177 1.61209 -0.04750 0.52177 2.11209 -0.04750 0.52610 1.61209 -0.04750 0.52610 2.11209 -0.04550 0.52810 1.61209 -0.04550 0.52810 2.11209 -0.04029 0.51415 2.11209 -0.04017 0.51400 1.61209 -0.04000 0.50010 1.61209 -0.04000 0.50010 2.11209 -0.03900 0.52810 1.61209 -0.03900 0.52810 2.11209 -0.03500 0.52410 1.61209 -0.03500 0.52410 2.11209 -0.02500 0.52360 1.61209 -0.02500 0.52360 2.11209 -0.02500 0.52410 1.61209 -0.02500 0.52410 2.11209 -0.01300 0.50010 1.61209 -0.01300 0.50010 2.11209 -0.01300 0.50110 1.61209 -0.01300 0.50110 2.11209 0.01300 0.50010 1.61209 0.01300 0.50010 2.11209 0.01300 0.50110 1.61209 0.01300 0.50110 2.11209 0.02500 0.52360 1.61209 0.02500 0.52360 2.11209 0.02500 0.52410 1.61209 0.02500 0.52410 2.11209 0.03500 0.52410 1.61209 0.03500 0.52410 2.11209 0.03900 0.52810 1.61209 0.03900 0.52810 2.11209 0.04000 0.50010 1.61209 0.04000 0.50010 2.11209 0.04029 0.51415 1.61209 0.04029 0.51415 2.11209 0.04550 0.52810 1.61209 0.04550 0.52810 2.11209 0.04750 0.52177 1.61209 0.04750 0.52177 2.11209 0.04750 0.52610 1.61209 0.04750 0.52610 2.11209 0.61000 -0.62890 0.00959 0.61000 -0.62890 0.40459 0.61000 -0.46290 0.00959 0.61000 -0.46290 0.40459 0.84767 0.34297 0.55066 0.86374 0.34297 0.51186 0.86461 0.34322 0.50998 0.86559 0.34398 0.50830 0.86661 0.34518 0.50692 0.86759 0.34675 0.50596 0.86848 0.34857 0.50546 0.86921 0.35053 0.50547 0.87221 0.32669 0.61495 0.87883 0.38079 0.50945 0.93755 0.41178 0.53377 1.28190 0.17400 0.78465 1.31711 0.17400 0.69965 1.31798 0.17425 0.69777 1.31896 0.17501 0.69609 1.31998 0.17621 0.69472 1.32096 0.17778 0.69375 1.32185 0.17960 0.69325 1.32258 0.18156 0.69326 1.32977 0.26560 0.69624 1.34123 0.24018 0.70098 1.15950 -0.46090 0.69640 1.15950 0.13910 0.69640 1.16086 -0.46090 0.68604 1.16086 -0.46090 0.70675 1.16086 0.13910 0.68604 1.16086 0.13910 0.70675 1.19950 -0.46090 0.69580 1.19950 0.13910 0.69640 1.16486 -0.46090 0.67640 1.16486 -0.46090 0.71640 1.16486 0.13910 0.67640 1.16486 0.13910 0.71640 1.17122 -0.46090 0.66811 1.17122 -0.46090 0.72468 1.17122 0.13910 0.66811 1.17122 0.13910 0.72468 1.17950 -0.46090 0.66176 1.17950 -0.46090 0.73104 1.17950 0.13910 0.66176 1.17950 0.13910 0.73104 1.18915 -0.46090 0.65776 1.18915 -0.46090 0.73503 1.18915 0.13910 0.65776 1.18915 0.13910 0.73503 1.19950 -0.46090 0.65640 1.19950 -0.46090 0.73140 1.19950 -0.46090 0.73640 1.19950 0.13910 0.65640 1.19950 0.13910 0.73640 1.20985 -0.46090 0.65776 1.20985 -0.46090 0.73503 1.20985 0.13910 0.65776 1.20985 0.13910 0.73503 1.21950 -0.46090 0.66176 1.21950 -0.46090 0.73104 1.21950 0.13910 0.66176 1.21950 0.13910 0.73104 1.22778 -0.46090 0.66811 1.22778 -0.46090 0.72468 1.22778 0.13910 0.66811 1.22778 0.13910 0.72468 1.23414 -0.46090 0.67640 1.23414 -0.46090 0.71640 1.23414 0.13910 0.67640 1.23414 0.13910 0.71640 1.23814 -0.46090 0.68604 1.23814 -0.46090 0.70675 1.23814 0.13910 0.68604 1.23814 0.13910 0.70675 1.23950 -0.46090 0.69640 1.23950 0.13910 0.69640 1.13951 -0.47090 0.69563 1.13951 -0.46090 0.69563 1.14009 -0.47090 0.70480 1.14009 -0.46090 0.70480 1.14025 -0.47090 0.68730 1.14025 -0.46090 0.68730 1.14032 -0.47090 0.68648 1.14032 -0.46090 0.68648 1.14207 -0.47090 0.71377 1.14207 -0.46090 0.71377 1.14253 -0.47090 0.67756 1.14253 -0.46090 0.67756 1.14539 -0.47090 0.72233 1.14539 -0.46090 0.72233 1.14607 -0.47090 0.66909 1.14607 -0.46090 0.66909 1.14754 -0.47090 0.72640 1.14754 -0.46090 0.72640 1.14999 -0.47090 0.73029 1.14999 -0.46090 0.73029 1.15087 -0.47090 0.66125 1.15087 -0.46090 0.66125 1.15286 -0.47090 0.65891 1.15286 -0.46090 0.65891 1.15469 -0.47090 0.65674 1.15469 -0.46090 0.65674 1.15574 -0.47090 0.73745 1.15574 -0.46090 0.73745 1.15680 -0.47090 0.65424 1.15680 -0.46090 0.65424 1.16252 -0.47090 0.74365 1.16252 -0.46090 0.74365 1.16374 -0.47090 0.64822 1.16374 -0.46090 0.64822 1.17017 -0.47090 0.74874 1.17017 -0.46090 0.74874 1.17151 -0.47090 0.64332 1.17151 -0.46090 0.64332 1.17775 -0.47090 0.75225 1.17775 -0.46090 0.75225 1.17850 -0.47090 0.75260 1.17850 -0.46090 0.75260 1.17994 -0.47090 0.63967 1.17994 -0.46090 0.63967 1.18733 -0.47090 0.75515 1.18733 -0.46090 0.75515 1.18780 -0.47090 0.63762 1.18780 -0.46090 0.63762 1.18883 -0.47090 0.63735 1.18883 -0.46090 0.63735 1.19032 -0.47090 0.63720 1.19032 -0.46090 0.63720 1.19644 -0.47090 0.75632 1.19644 -0.46090 0.75632 1.19797 -0.47090 0.63642 1.19797 -0.46090 0.63642 1.20562 -0.47090 0.75608 1.20562 -0.46090 0.75608 1.20714 -0.47090 0.63689 1.20714 -0.46090 0.63689 1.20864 -0.47090 0.75554 1.20864 -0.46090 0.75554 1.21466 -0.47090 0.75445 1.21466 -0.46090 0.75445 1.21614 -0.47090 0.63875 1.21614 -0.46090 0.63875 1.22112 -0.47090 0.64061 1.22112 -0.46090 0.64061 1.22334 -0.47090 0.75146 1.22334 -0.46090 0.75146 1.22474 -0.47090 0.64196 1.22474 -0.46090 0.64196 1.23147 -0.47090 0.74717 1.23147 -0.46090 0.74717 1.23212 -0.47090 0.64610 1.23212 -0.46090 0.64610 1.23275 -0.47090 0.64646 1.23275 -0.46090 0.64646 1.23884 -0.47090 0.74170 1.23884 -0.46090 0.74170 1.23999 -0.47090 0.65212 1.23999 -0.46090 0.65212 1.24530 -0.47090 0.73516 1.24530 -0.46090 0.73516 1.24618 -0.47090 0.73394 1.24618 -0.46090 0.73394 1.24627 -0.47090 0.65882 1.24627 -0.46090 0.65882 1.25068 -0.47090 0.72771 1.25068 -0.46090 0.72771 1.25146 -0.47090 0.66640 1.25146 -0.46090 0.66640 1.25486 -0.47090 0.71953 1.25486 -0.46090 0.71953 1.25543 -0.47090 0.67468 1.25543 -0.46090 0.67468 1.25774 -0.47090 0.71081 1.25774 -0.46090 0.71081 1.25809 -0.47090 0.68347 1.25809 -0.46090 0.68347 1.25862 -0.47090 0.70556 1.25862 -0.46090 0.70556 1.25926 -0.47090 0.70175 1.25926 -0.46090 0.70175 1.25937 -0.47090 0.69329 1.25937 -0.46090 0.69329 1.25938 -0.47090 0.69257 1.25938 -0.46090 0.69257 0.89252 0.27504 0.48372 0.89255 0.27337 0.48364 0.89263 0.27670 0.48345 0.89273 0.27175 0.48321 0.89288 0.27825 0.48286 0.89304 0.27028 0.48246 0.89305 0.27450 0.48244 0.89312 0.27609 0.48227 0.89314 0.27293 0.48222 0.89325 0.27961 0.48196 0.89335 0.27757 0.48173 0.89338 0.27147 0.48164 0.89347 0.26902 0.48143 0.89371 0.27884 0.48085 0.89373 0.28073 0.48080 0.89376 0.27022 0.48072 0.89399 0.26805 0.48017 0.89419 0.27983 0.47970 0.89425 0.26927 0.47954 0.89429 0.28154 0.47944 0.89458 0.26740 0.47874 0.89475 0.28047 0.47835 0.89482 0.26868 0.47817 0.89491 0.28200 0.47794 0.89522 0.26711 0.47721 0.89523 0.27534 0.49024 0.89529 0.27254 0.49011 0.89535 0.28070 0.47689 0.89541 0.27809 0.48980 0.89542 0.26850 0.47671 0.89556 0.28209 0.47639 0.89558 0.26985 0.48940 0.89583 0.28068 0.48881 0.89586 0.26720 0.47566 0.89595 0.28052 0.47543 0.89603 0.26873 0.47526 0.89610 0.26740 0.48815 0.89619 0.28180 0.47486 0.89645 0.28296 0.48730 0.89648 0.26766 0.47417 0.89652 0.27993 0.47406 0.89658 0.26937 0.47391 0.89678 0.28115 0.47343 0.89681 0.26530 0.48643 0.89701 0.27898 0.47288 0.89704 0.26847 0.47281 0.89706 0.27036 0.47275 0.89725 0.28482 0.48537 0.89731 0.28018 0.47217 0.89739 0.27773 0.47197 0.89743 0.27163 0.47188 0.89752 0.26959 0.47165 0.89763 0.27627 0.47138 0.89765 0.27312 0.47134 0.89772 0.27470 0.47117 0.89773 0.27892 0.47114 0.89789 0.27095 0.47075 0.89804 0.27745 0.47039 0.89814 0.27250 0.47015 0.89819 0.28616 0.48310 0.89822 0.27584 0.46997 0.89825 0.27416 0.46988 0.89922 0.28693 0.48062 0.89972 0.26212 0.47940 0.90029 0.28708 0.47804 0.90079 0.26227 0.47681 0.90134 0.28660 0.47549 0.90182 0.26304 0.47433 0.90233 0.28552 0.47310 0.90276 0.26439 0.47206 0.90320 0.28390 0.47100 0.90356 0.26624 0.47013 0.90391 0.28181 0.46928 0.90419 0.26852 0.46862 0.90443 0.27935 0.46803 0.90460 0.27111 0.46763 0.90472 0.27666 0.46732 0.90478 0.27386 0.46719 0.91833 0.27534 0.49981 0.91838 0.27254 0.49967 0.91851 0.27809 0.49937 0.91868 0.26985 0.49896 0.91892 0.28068 0.49837 0.91909 0.27486 0.49798 0.91918 0.27234 0.49775 0.91919 0.26740 0.49772 0.91923 0.27736 0.49764 0.91950 0.26995 0.49698 0.91954 0.28296 0.49687 0.91959 0.27971 0.49676 0.91990 0.26530 0.49600 0.92003 0.26783 0.49570 0.92016 0.28175 0.49538 0.92034 0.28482 0.49494 0.92078 0.26368 0.49390 0.92090 0.28338 0.49360 0.92128 0.28616 0.49267 0.92159 0.26488 0.49194 0.92177 0.28451 0.49150 0.92232 0.28693 0.49018 0.92252 0.26421 0.48969 0.92272 0.28505 0.48922 0.92282 0.26212 0.48896 0.92338 0.28708 0.48760 0.92349 0.26415 0.48735 0.92368 0.28499 0.48688 0.92389 0.26227 0.48638 0.92444 0.26469 0.48506 0.92444 0.28660 0.48505 0.92462 0.28432 0.48462 0.92492 0.26304 0.48389 0.92530 0.26582 0.48297 0.92543 0.28552 0.48267 0.92546 0.28309 0.48258 0.92586 0.26439 0.48163 0.92604 0.26745 0.48118 0.92617 0.28137 0.48087 0.92630 0.28390 0.48056 0.92661 0.26950 0.47981 0.92666 0.26624 0.47969 0.92671 0.27925 0.47959 0.92698 0.27184 0.47892 0.92701 0.28181 0.47885 0.92703 0.27686 0.47881 0.92712 0.27434 0.47858 0.92728 0.26852 0.47819 0.92753 0.27935 0.47760 0.92769 0.27111 0.47719 0.92782 0.27666 0.47689 0.92788 0.27386 0.47675 0.94218 0.27486 0.50755 0.94228 0.27234 0.50732 0.94232 0.27736 0.50721 0.94260 0.26995 0.50655 0.94269 0.27971 0.50633 0.94313 0.26783 0.50527 0.94326 0.28175 0.50495 0.94384 0.26611 0.50355 0.94386 0.27450 0.50348 0.94393 0.27609 0.50332 0.94395 0.27293 0.50327 0.94400 0.28338 0.50316 0.94416 0.27757 0.50277 0.94420 0.27147 0.50268 0.94452 0.27884 0.50190 0.94457 0.27022 0.50177 0.94468 0.26488 0.50151 0.94487 0.28451 0.50107 0.94500 0.27983 0.50074 0.94507 0.26927 0.50059 0.94556 0.28047 0.49939 0.94562 0.26421 0.49925 0.94563 0.26868 0.49922 0.94581 0.28505 0.49878 0.94616 0.28070 0.49794 0.94624 0.26850 0.49776 0.94659 0.26415 0.49692 0.94677 0.28052 0.49648 0.94678 0.28499 0.49645 0.94684 0.26873 0.49630 0.94733 0.27993 0.49511 0.94740 0.26937 0.49495 0.94753 0.26469 0.49463 0.94772 0.28432 0.49419 0.94782 0.27898 0.49393 0.94788 0.27036 0.49380 0.94820 0.27773 0.49301 0.94824 0.27163 0.49292 0.94840 0.26582 0.49254 0.94844 0.27627 0.49243 0.94846 0.27312 0.49238 0.94853 0.27470 0.49221 0.94856 0.28309 0.49215 0.94914 0.26745 0.49075 0.94927 0.28137 0.49043 0.94971 0.26950 0.48937 0.94980 0.27925 0.48915 0.95008 0.27184 0.48849 0.95012 0.27686 0.48838 0.95022 0.27434 0.48815 0.91832 0.27423 0.49983 0.91845 0.27747 0.49952 0.91852 0.27101 0.49934 0.91889 0.28052 0.49845 0.91903 0.26803 0.49811 0.91909 0.27429 0.49798 0.91919 0.27701 0.49772 0.91925 0.27158 0.49757 0.91956 0.27958 0.49682 0.91962 0.28317 0.49669 0.91968 0.26908 0.49653 0.91982 0.26550 0.49620 0.92018 0.28180 0.49534 0.92035 0.26696 0.49493 0.92059 0.28523 0.49435 0.92084 0.26359 0.49375 0.92099 0.28353 0.49338 0.92120 0.26535 0.49288 0.92173 0.28657 0.49160 0.92195 0.28466 0.49107 0.92200 0.26244 0.49094 0.92218 0.26438 0.49051 0.92296 0.28709 0.48863 0.92298 0.28510 0.48857 0.92322 0.26411 0.48799 0.92325 0.26211 0.48794 0.92403 0.28482 0.48605 0.92420 0.28677 0.48563 0.92426 0.26454 0.48549 0.92448 0.26263 0.48496 0.92501 0.28385 0.48369 0.92522 0.26567 0.48318 0.92537 0.28561 0.48281 0.92562 0.26397 0.48221 0.92586 0.28224 0.48163 0.92603 0.26740 0.48122 0.92638 0.28370 0.48036 0.92652 0.28012 0.48003 0.92658 0.26603 0.47988 0.92664 0.26962 0.47974 0.92695 0.27762 0.47899 0.92701 0.27219 0.47884 0.92712 0.27491 0.47859 0.92717 0.28117 0.47846 0.92731 0.26868 0.47811 0.92768 0.27820 0.47722 0.92776 0.27173 0.47704 0.92788 0.27497 0.47674 1.52808 0.27423 0.75240 1.52821 0.27747 0.75209 1.52828 0.27101 0.75191 1.52865 0.28052 0.75102 1.52879 0.26803 0.75068 1.52885 0.27429 0.75055 1.52895 0.27701 0.75029 1.52901 0.27158 0.75014 1.52933 0.27958 0.74940 1.52938 0.28317 0.74926 1.52945 0.26908 0.74911 1.52958 0.26550 0.74877 1.52994 0.28180 0.74792 1.53011 0.26696 0.74750 1.53035 0.28523 0.74692 1.53060 0.26359 0.74633 1.53075 0.28353 0.74595 1.53096 0.26535 0.74545 1.53149 0.28657 0.74417 1.53171 0.28466 0.74364 1.53176 0.26244 0.74351 1.53194 0.26438 0.74308 1.53272 0.28709 0.74120 1.53274 0.28510 0.74114 1.53298 0.26411 0.74056 1.53301 0.26211 0.74051 1.53379 0.28482 0.73862 1.53396 0.28677 0.73820 1.53402 0.26454 0.73806 1.53424 0.26263 0.73753 1.53477 0.28385 0.73626 1.53498 0.26567 0.73575 1.53513 0.28561 0.73538 1.53538 0.26397 0.73478 1.53562 0.28224 0.73420 1.53579 0.26740 0.73379 1.53614 0.28370 0.73294 1.53628 0.28012 0.73260 1.53635 0.26603 0.73245 1.53640 0.26962 0.73231 1.53671 0.27762 0.73156 1.53677 0.27219 0.73141 1.53688 0.27491 0.73116 1.53693 0.28117 0.73103 1.53708 0.26868 0.73068 1.53744 0.27820 0.72979 1.53752 0.27173 0.72961 1.53764 0.27497 0.72931 0.77125 0.29821 0.44792 0.77137 0.29959 0.44982 0.77138 0.29733 0.44574 0.77171 0.30137 0.45132 0.77174 0.29700 0.44345 0.77227 0.30342 0.45231 0.77231 0.29725 0.44118 0.77299 0.30562 0.45273 0.77304 0.29806 0.43910 0.77384 0.30780 0.45255 0.77389 0.29937 0.43735 0.77475 0.30982 0.45178 0.77481 0.30110 0.43604 0.77566 0.31155 0.45048 0.77572 0.30312 0.43527 0.77652 0.31286 0.44873 0.77657 0.30531 0.43509 0.77725 0.31367 0.44665 0.77729 0.30750 0.43551 0.77782 0.31392 0.44438 0.77785 0.30956 0.43651 0.77818 0.31359 0.44208 0.77819 0.31133 0.43801 0.77830 0.31271 0.43991 0.78505 0.29310 0.45080 0.78517 0.29447 0.45270 0.78518 0.29221 0.44863 0.78551 0.29625 0.45420 0.78554 0.29188 0.44633 0.78607 0.29830 0.45520 0.78611 0.29213 0.44406 0.78679 0.30050 0.45562 0.78684 0.29294 0.44198 0.78701 0.29712 0.44858 0.78706 0.29773 0.44942 0.78707 0.29673 0.44761 0.78722 0.29852 0.45009 0.78723 0.29658 0.44659 0.78746 0.29944 0.45053 0.78748 0.29669 0.44558 0.78764 0.30268 0.45544 0.78769 0.29425 0.44023 0.78779 0.30041 0.45072 0.78781 0.29705 0.44466 0.78816 0.30138 0.45064 0.78819 0.29764 0.44388 0.78855 0.30471 0.45467 0.78857 0.30228 0.45030 0.78859 0.29840 0.44330 0.78861 0.29598 0.43893 0.78897 0.30305 0.44972 0.78900 0.29930 0.44296 0.78935 0.30363 0.44894 0.78938 0.30027 0.44288 0.78947 0.30643 0.45337 0.78952 0.29800 0.43816 0.78968 0.30399 0.44801 0.78970 0.30125 0.44307 0.78993 0.30410 0.44701 0.78994 0.30216 0.44351 0.79009 0.30396 0.44598 0.79010 0.30295 0.44417 0.79015 0.30356 0.44502 0.79032 0.30775 0.45161 0.79037 0.30019 0.43798 0.79105 0.30855 0.44953 0.79109 0.30238 0.43840 0.79162 0.30880 0.44727 0.79165 0.30444 0.43939 0.79198 0.30847 0.44497 0.79199 0.30621 0.44089 0.79211 0.30759 0.44279 0.84909 0.27410 0.46156 0.84914 0.27471 0.46240 0.84915 0.27371 0.46059 0.84930 0.27550 0.46307 0.84931 0.27356 0.45957 0.84954 0.27641 0.46351 0.84956 0.27367 0.45856 0.84987 0.27739 0.46370 0.84989 0.27403 0.45764 0.85024 0.27836 0.46362 0.85027 0.27461 0.45686 0.85065 0.27926 0.46328 0.85067 0.27538 0.45628 0.85105 0.28003 0.46270 0.85108 0.27628 0.45594 0.85143 0.28061 0.46192 0.85145 0.27725 0.45586 0.85176 0.28097 0.46099 0.85177 0.27823 0.45605 0.85201 0.28108 0.45999 0.85202 0.27914 0.45649 0.85217 0.28093 0.45897 0.85218 0.27993 0.45715 0.85223 0.28054 0.45800 0.85663 0.27347 0.46499 0.85667 0.27262 0.46437 0.85669 0.27443 0.46538 0.85680 0.27196 0.46357 0.85684 0.27546 0.46552 0.85701 0.27153 0.46264 0.85706 0.27647 0.46540 0.85728 0.27135 0.46165 0.85735 0.27740 0.46503 0.85761 0.27144 0.46066 0.85768 0.27819 0.46443 0.85796 0.27179 0.45975 0.85804 0.27878 0.46364 0.85831 0.27238 0.45896 0.85839 0.27913 0.46272 0.85865 0.27317 0.45836 0.85871 0.27922 0.46174 0.85893 0.27410 0.45799 0.85899 0.27904 0.46075 0.85916 0.27512 0.45787 0.85920 0.27861 0.45982 0.85930 0.27614 0.45801 0.85932 0.27795 0.45902 0.85936 0.27711 0.45840 0.86382 0.27481 0.46805 0.86386 0.27376 0.46798 0.86390 0.27583 0.46788 0.86399 0.27278 0.46765 0.86407 0.27678 0.46746 0.86422 0.27192 0.46710 0.86433 0.27757 0.46684 0.86452 0.27124 0.46637 0.86466 0.27816 0.46604 0.86488 0.27079 0.46550 0.86503 0.27851 0.46513 0.86527 0.27061 0.46455 0.86543 0.27860 0.46417 0.86567 0.27069 0.46359 0.86582 0.27841 0.46322 0.86605 0.27104 0.46268 0.86618 0.27796 0.46235 0.86638 0.27163 0.46189 0.86649 0.27728 0.46162 0.86664 0.27243 0.46126 0.86672 0.27642 0.46107 0.86681 0.27337 0.46085 0.86685 0.27544 0.46075 0.86688 0.27440 0.46067 0.94238 0.27511 0.50708 0.94246 0.27251 0.50688 0.94256 0.27768 0.50664 0.94279 0.27005 0.50608 0.94299 0.28004 0.50560 0.94336 0.26790 0.50471 0.94364 0.28202 0.50404 0.94412 0.26621 0.50287 0.94446 0.28351 0.50205 0.94467 0.27481 0.50154 0.94470 0.27376 0.50146 0.94474 0.27583 0.50137 0.94484 0.27278 0.50114 0.94491 0.27678 0.50095 0.94502 0.26509 0.50069 0.94506 0.27192 0.50059 0.94517 0.27757 0.50033 0.94537 0.27124 0.49986 0.94540 0.28438 0.49978 0.94550 0.27816 0.49953 0.94573 0.27079 0.49899 0.94588 0.27851 0.49862 0.94600 0.26461 0.49832 0.94612 0.27061 0.49804 0.94628 0.27860 0.49766 0.94639 0.28459 0.49738 0.94652 0.27069 0.49708 0.94667 0.27841 0.49671 0.94690 0.27104 0.49617 0.94700 0.26482 0.49592 0.94703 0.27796 0.49584 0.94722 0.27163 0.49537 0.94734 0.27728 0.49511 0.94738 0.28411 0.49500 0.94748 0.27243 0.49475 0.94756 0.27642 0.49456 0.94766 0.27337 0.49433 0.94770 0.27544 0.49424 0.94773 0.27440 0.49416 0.94794 0.26570 0.49365 0.94828 0.28299 0.49283 0.94876 0.26718 0.49166 0.94904 0.28130 0.49099 0.94941 0.26916 0.49010 0.94961 0.27915 0.48962 0.94984 0.27152 0.48906 0.94994 0.27669 0.48881 0.95002 0.27409 0.48862 1.51149 0.27511 0.74281 1.51157 0.27251 0.74262 1.51167 0.27768 0.74237 1.51190 0.27005 0.74181 1.51210 0.28004 0.74134 1.51247 0.26790 0.74044 1.51275 0.28202 0.73977 1.51323 0.26621 0.73861 1.51357 0.28351 0.73779 1.51378 0.27481 0.73727 1.51381 0.27376 0.73720 1.51385 0.27583 0.73710 1.51395 0.27278 0.73687 1.51402 0.27678 0.73668 1.51413 0.26509 0.73643 1.51417 0.27192 0.73633 1.51428 0.27757 0.73606 1.51448 0.27124 0.73559 1.51451 0.28438 0.73551 1.51461 0.27816 0.73526 1.51484 0.27079 0.73472 1.51499 0.27851 0.73435 1.51511 0.26461 0.73406 1.51523 0.27061 0.73377 1.51539 0.27860 0.73339 1.51550 0.28459 0.73311 1.51563 0.27069 0.73281 1.51578 0.27841 0.73244 1.51601 0.27104 0.73190 1.51611 0.26482 0.73165 1.51614 0.27796 0.73157 1.51634 0.27163 0.73111 1.51645 0.27728 0.73084 1.51649 0.28411 0.73074 1.51659 0.27243 0.73048 1.51667 0.27642 0.73029 1.51677 0.27337 0.73007 1.51681 0.27544 0.72997 1.51684 0.27440 0.72989 1.51705 0.26570 0.72938 1.51739 0.28299 0.72856 1.51787 0.26718 0.72739 1.51815 0.28130 0.72672 1.51852 0.26916 0.72583 1.51872 0.27915 0.72536 1.51895 0.27152 0.72479 1.51905 0.27669 0.72455 1.51913 0.27409 0.72436 1.71777 0.27481 0.82177 1.71780 0.27376 0.82169 1.71784 0.27583 0.82159 1.71794 0.27278 0.82137 1.71801 0.27678 0.82118 1.71816 0.27192 0.82082 1.71827 0.27757 0.82055 1.71847 0.27124 0.82009 1.71860 0.27816 0.81976 1.71883 0.27079 0.81922 1.71898 0.27851 0.81885 1.71922 0.27061 0.81827 1.71938 0.27860 0.81789 1.71962 0.27069 0.81731 1.71977 0.27841 0.81694 1.72000 0.27104 0.81640 1.72013 0.27796 0.81607 1.72032 0.27163 0.81560 1.72044 0.27728 0.81533 1.72058 0.27243 0.81498 1.72066 0.27642 0.81479 1.72076 0.27337 0.81456 1.72080 0.27544 0.81446 1.72083 0.27440 0.81439 0.82632 0.27521 0.64354 0.82634 0.27353 0.64349 0.82644 0.27686 0.64324 0.82650 0.27191 0.64310 0.82671 0.27839 0.64261 0.82680 0.27042 0.64238 0.82686 0.27532 0.64223 0.82687 0.27373 0.64221 0.82701 0.27687 0.64186 0.82704 0.27220 0.64181 0.82709 0.27974 0.64168 0.82722 0.26914 0.64138 0.82731 0.27826 0.64114 0.82735 0.27083 0.64106 0.82758 0.28083 0.64050 0.82773 0.26813 0.64014 0.82774 0.27940 0.64012 0.82778 0.26972 0.64001 0.82815 0.28160 0.63912 0.82826 0.28021 0.63885 0.82831 0.26894 0.63873 0.82832 0.26745 0.63872 0.82877 0.28202 0.63762 0.82885 0.28064 0.63743 0.82890 0.26854 0.63730 0.82895 0.26713 0.63720 0.82903 0.27562 0.65006 0.82907 0.27282 0.64998 0.82924 0.27837 0.64956 0.82934 0.27011 0.64933 0.82942 0.28208 0.63607 0.82946 0.28066 0.63596 0.82951 0.26856 0.63583 0.82959 0.26718 0.63565 0.82968 0.28092 0.64851 0.82983 0.26763 0.64813 0.83005 0.28175 0.63455 0.83005 0.28026 0.63454 0.83010 0.26899 0.63441 0.83021 0.26760 0.63415 0.83032 0.28317 0.64696 0.83052 0.26550 0.64646 0.83058 0.27948 0.63326 0.83062 0.26981 0.63315 0.83063 0.28107 0.63313 0.83078 0.26837 0.63277 0.83102 0.27837 0.63220 0.83105 0.27094 0.63212 0.83113 0.28498 0.64499 0.83115 0.28006 0.63189 0.83127 0.26946 0.63159 0.83133 0.27700 0.63145 0.83135 0.27233 0.63140 0.83138 0.26382 0.64439 0.83149 0.27547 0.63105 0.83150 0.27388 0.63104 0.83156 0.27878 0.63088 0.83166 0.27081 0.63066 0.83186 0.27729 0.63017 0.83192 0.27234 0.63003 0.83202 0.27567 0.62977 0.83204 0.27399 0.62973 0.83208 0.28627 0.64269 0.83236 0.26268 0.64203 0.83312 0.28697 0.64019 0.83341 0.26214 0.63949 0.83419 0.28706 0.63760 0.83448 0.26223 0.63690 0.83524 0.28652 0.63507 0.83552 0.26293 0.63440 0.83622 0.28538 0.63270 0.83647 0.26422 0.63211 0.83708 0.28371 0.63063 0.83729 0.26604 0.63013 0.83777 0.28157 0.62896 0.83793 0.26828 0.62858 0.83827 0.27909 0.62777 0.83836 0.27083 0.62753 0.83854 0.27638 0.62712 0.83857 0.27358 0.62704 0.85213 0.27562 0.65962 0.85216 0.27282 0.65954 0.85234 0.27837 0.65913 0.85243 0.27011 0.65889 0.85277 0.28092 0.65808 0.85288 0.27437 0.65781 0.85293 0.26763 0.65770 0.85298 0.27689 0.65758 0.85302 0.27186 0.65748 0.85330 0.27927 0.65680 0.85338 0.26952 0.65660 0.85341 0.28317 0.65653 0.85362 0.26550 0.65603 0.85383 0.28139 0.65551 0.85395 0.26747 0.65523 0.85423 0.28498 0.65455 0.85448 0.26382 0.65396 0.85454 0.28311 0.65380 0.85469 0.26583 0.65345 0.85518 0.28627 0.65226 0.85539 0.28433 0.65175 0.85546 0.26268 0.65159 0.85556 0.26470 0.65135 0.85622 0.28697 0.64976 0.85633 0.28499 0.64949 0.85650 0.26415 0.64907 0.85651 0.26214 0.64906 0.85729 0.28706 0.64717 0.85729 0.28505 0.64716 0.85747 0.26421 0.64673 0.85758 0.26223 0.64647 0.85824 0.28450 0.64487 0.85834 0.28652 0.64463 0.85840 0.26487 0.64448 0.85861 0.26293 0.64397 0.85911 0.28337 0.64278 0.85925 0.26609 0.64243 0.85932 0.28538 0.64227 0.85957 0.26422 0.64167 0.85985 0.28173 0.64100 0.85996 0.26781 0.64071 0.86018 0.28371 0.64020 0.86038 0.26604 0.63970 0.86041 0.27968 0.63962 0.86050 0.26993 0.63943 0.86078 0.27734 0.63875 0.86082 0.27231 0.63865 0.86087 0.28157 0.63853 0.86092 0.27483 0.63842 0.86102 0.26828 0.63815 0.86136 0.27909 0.63733 0.86146 0.27083 0.63710 0.86163 0.27638 0.63668 0.86167 0.27358 0.63660 0.87598 0.27437 0.66738 0.87607 0.27689 0.66715 0.87612 0.27186 0.66705 0.87640 0.27927 0.66637 0.87648 0.26952 0.66617 0.87693 0.28139 0.66508 0.87705 0.26747 0.66480 0.87764 0.28311 0.66337 0.87768 0.27532 0.66328 0.87769 0.27373 0.66326 0.87779 0.26583 0.66301 0.87783 0.27687 0.66291 0.87785 0.27220 0.66286 0.87813 0.27826 0.66219 0.87816 0.27083 0.66211 0.87849 0.28433 0.66132 0.87855 0.27940 0.66116 0.87860 0.26972 0.66106 0.87865 0.26470 0.66092 0.87908 0.28021 0.65990 0.87913 0.26894 0.65978 0.87942 0.28499 0.65906 0.87960 0.26415 0.65864 0.87966 0.28064 0.65848 0.87972 0.26854 0.65835 0.88027 0.28066 0.65701 0.88033 0.26856 0.65688 0.88039 0.28505 0.65672 0.88057 0.26421 0.65630 0.88086 0.28026 0.65559 0.88091 0.26899 0.65546 0.88134 0.28450 0.65444 0.88139 0.27948 0.65430 0.88144 0.26981 0.65420 0.88150 0.26487 0.65404 0.88183 0.27837 0.65325 0.88186 0.27094 0.65317 0.88214 0.27700 0.65250 0.88216 0.27233 0.65245 0.88221 0.28337 0.65235 0.88231 0.27547 0.65210 0.88231 0.27388 0.65208 0.88235 0.26609 0.65200 0.88294 0.28173 0.65056 0.88306 0.26781 0.65028 0.88351 0.27968 0.64919 0.88359 0.26993 0.64899 0.88388 0.27734 0.64831 0.88392 0.27231 0.64821 0.88401 0.27483 0.64798 0.85214 0.27591 0.65960 0.85217 0.27265 0.65952 0.85243 0.27908 0.65889 0.85253 0.26952 0.65866 0.85290 0.27570 0.65776 0.85293 0.27296 0.65770 0.85303 0.28195 0.65745 0.85315 0.27837 0.65717 0.85318 0.26674 0.65709 0.85323 0.27033 0.65698 0.85365 0.28077 0.65596 0.85378 0.26799 0.65565 0.85389 0.28432 0.65538 0.85409 0.26449 0.65490 0.85437 0.28276 0.65422 0.85454 0.26611 0.65382 0.85495 0.28602 0.65281 0.85518 0.26293 0.65225 0.85527 0.28419 0.65206 0.85546 0.26480 0.65159 0.85615 0.28695 0.64992 0.85627 0.28497 0.64963 0.85640 0.26217 0.64932 0.85648 0.26416 0.64913 0.85732 0.28504 0.64710 0.85740 0.28703 0.64690 0.85753 0.26423 0.64660 0.85764 0.26225 0.64631 0.85834 0.28440 0.64463 0.85853 0.26501 0.64417 0.85861 0.28627 0.64397 0.85884 0.26318 0.64342 0.85926 0.28309 0.64241 0.85943 0.26644 0.64201 0.85971 0.28471 0.64132 0.85991 0.26488 0.64085 0.86002 0.28121 0.64057 0.86015 0.26843 0.64027 0.86057 0.27887 0.63925 0.86062 0.28246 0.63914 0.86065 0.27084 0.63906 0.86077 0.26725 0.63877 0.86087 0.27624 0.63853 0.86089 0.27350 0.63847 0.86127 0.27968 0.63756 0.86136 0.27012 0.63733 0.86162 0.27655 0.63671 0.86165 0.27329 0.63663 1.46190 0.27591 0.91217 1.46193 0.27265 0.91209 1.46219 0.27908 0.91146 1.46229 0.26952 0.91124 1.46266 0.27570 0.91033 1.46269 0.27296 0.91027 1.46279 0.28195 0.91003 1.46291 0.27837 0.90974 1.46294 0.26674 0.90966 1.46299 0.27033 0.90955 1.46341 0.28077 0.90853 1.46353 0.26799 0.90823 1.46365 0.28432 0.90795 1.46385 0.26449 0.90747 1.46413 0.28276 0.90679 1.46430 0.26611 0.90639 1.46471 0.28602 0.90538 1.46494 0.26293 0.90483 1.46502 0.28419 0.90463 1.46522 0.26480 0.90416 1.46591 0.28695 0.90249 1.46603 0.28497 0.90220 1.46616 0.26217 0.90189 1.46624 0.26416 0.90170 1.46708 0.28504 0.89967 1.46716 0.28703 0.89947 1.46729 0.26423 0.89917 1.46741 0.26225 0.89888 1.46810 0.28440 0.89721 1.46829 0.26501 0.89674 1.46837 0.28627 0.89654 1.46860 0.26318 0.89599 1.46902 0.28309 0.89498 1.46919 0.26644 0.89458 1.46947 0.28471 0.89389 1.46967 0.26488 0.89342 1.46978 0.28121 0.89314 1.46991 0.26843 0.89284 1.47033 0.27887 0.89182 1.47038 0.28246 0.89171 1.47041 0.27084 0.89163 1.47053 0.26725 0.89134 1.47063 0.27624 0.89110 1.47065 0.27350 0.89104 1.47103 0.27968 0.89013 1.47112 0.27012 0.88990 1.47138 0.27655 0.88928 1.47142 0.27329 0.88920 0.71485 0.30130 0.58079 0.71493 0.30330 0.58203 0.71514 0.29961 0.57919 0.71538 0.30547 0.58280 0.71579 0.29835 0.57732 0.71617 0.30766 0.58307 0.71675 0.29759 0.57531 0.71725 0.30974 0.58280 0.71795 0.29740 0.57330 0.71854 0.31154 0.58203 0.71932 0.29778 0.57143 0.71995 0.31296 0.58080 0.72076 0.29872 0.56982 0.72139 0.31389 0.57919 0.72217 0.30013 0.56859 0.72275 0.31428 0.57732 0.72346 0.30194 0.56781 0.72396 0.31408 0.57531 0.72453 0.30401 0.56755 0.72492 0.31333 0.57330 0.72532 0.30621 0.56781 0.72557 0.31207 0.57143 0.72578 0.30838 0.56859 0.72586 0.31038 0.56982 0.72670 0.29612 0.58840 0.72678 0.29811 0.58963 0.72699 0.29443 0.58679 0.72723 0.30029 0.59040 0.72764 0.29316 0.58492 0.72802 0.30248 0.59067 0.72860 0.29241 0.58291 0.72910 0.30455 0.59041 0.72975 0.29864 0.58535 0.72979 0.29953 0.58590 0.72980 0.29222 0.58090 0.72988 0.29789 0.58463 0.72999 0.30049 0.58624 0.73017 0.29733 0.58380 0.73034 0.30147 0.58636 0.73038 0.30636 0.58963 0.73060 0.29699 0.58291 0.73082 0.30239 0.58624 0.73113 0.29691 0.58202 0.73117 0.29260 0.57903 0.73139 0.30319 0.58590 0.73174 0.29708 0.58119 0.73180 0.30778 0.58840 0.73202 0.30382 0.58535 0.73238 0.29749 0.58047 0.73261 0.29353 0.57742 0.73266 0.30424 0.58464 0.73301 0.29812 0.57992 0.73323 0.30871 0.58679 0.73327 0.30441 0.58380 0.73358 0.29892 0.57958 0.73380 0.30432 0.58291 0.73402 0.29495 0.57619 0.73406 0.29985 0.57946 0.73423 0.30399 0.58202 0.73441 0.30082 0.57958 0.73452 0.30343 0.58119 0.73460 0.30909 0.58492 0.73461 0.30179 0.57992 0.73465 0.30267 0.58047 0.73531 0.29676 0.57542 0.73581 0.30890 0.58291 0.73638 0.29883 0.57515 0.73677 0.30815 0.58090 0.73717 0.30103 0.57542 0.73741 0.30689 0.57903 0.73762 0.30320 0.57619 0.73771 0.30520 0.57743 0.78305 0.27533 0.61954 0.78308 0.27622 0.62009 0.78318 0.27458 0.61883 0.78328 0.27719 0.62044 0.78346 0.27402 0.61800 0.78364 0.27816 0.62055 0.78389 0.27369 0.61710 0.78411 0.27909 0.62044 0.78443 0.27360 0.61621 0.78469 0.27989 0.62009 0.78503 0.27377 0.61538 0.78531 0.28052 0.61954 0.78567 0.27419 0.61467 0.78595 0.28093 0.61883 0.78630 0.27482 0.61412 0.78656 0.28110 0.61800 0.78687 0.27562 0.61377 0.78710 0.28102 0.61711 0.78735 0.27654 0.61366 0.78752 0.28068 0.61621 0.78770 0.27752 0.61377 0.78781 0.28012 0.61538 0.78790 0.27848 0.61412 0.78794 0.27937 0.61467 0.79011 0.27402 0.62415 0.79018 0.27503 0.62441 0.79018 0.27310 0.62366 0.79037 0.27605 0.62444 0.79037 0.27233 0.62298 0.79068 0.27703 0.62422 0.79068 0.27176 0.62216 0.79108 0.27788 0.62378 0.79109 0.27143 0.62126 0.79155 0.27856 0.62314 0.79156 0.27137 0.62033 0.79205 0.27902 0.62235 0.79206 0.27157 0.61944 0.79255 0.27922 0.62146 0.79256 0.27203 0.61864 0.79302 0.27916 0.62053 0.79303 0.27271 0.61800 0.79343 0.27883 0.61962 0.79343 0.27356 0.61756 0.79374 0.27826 0.61880 0.79374 0.27454 0.61735 0.79393 0.27749 0.61813 0.79394 0.27556 0.61737 0.79400 0.27657 0.61764 0.79762 0.27430 0.62788 0.79764 0.27534 0.62782 0.79770 0.27328 0.62768 0.79777 0.27633 0.62752 0.79788 0.27234 0.62724 0.79799 0.27721 0.62700 0.79815 0.27157 0.62660 0.79828 0.27790 0.62628 0.79848 0.27100 0.62579 0.79864 0.27837 0.62542 0.79886 0.27067 0.62488 0.79903 0.27859 0.62447 0.79926 0.27061 0.62391 0.79943 0.27853 0.62351 0.79965 0.27083 0.62297 0.79981 0.27821 0.62259 0.80001 0.27130 0.62211 0.80014 0.27763 0.62178 0.80031 0.27199 0.62139 0.80041 0.27686 0.62114 0.80053 0.27287 0.62086 0.80059 0.27592 0.62071 0.80065 0.27386 0.62056 0.80067 0.27490 0.62051 0.87618 0.27384 0.66689 0.87623 0.27645 0.66676 0.87638 0.27129 0.66640 0.87655 0.27893 0.66601 0.87683 0.26896 0.66531 0.87709 0.28112 0.66469 0.87750 0.26702 0.66370 0.87784 0.28286 0.66289 0.87834 0.26559 0.66168 0.87847 0.27430 0.66137 0.87849 0.27534 0.66131 0.87855 0.27328 0.66117 0.87862 0.27633 0.66101 0.87873 0.28404 0.66074 0.87873 0.27234 0.66073 0.87883 0.27721 0.66048 0.87900 0.27157 0.66009 0.87913 0.27790 0.65976 0.87929 0.26477 0.65939 0.87933 0.27100 0.65928 0.87949 0.27837 0.65890 0.87971 0.28457 0.65838 0.87971 0.27067 0.65836 0.87988 0.27859 0.65796 0.88011 0.27061 0.65740 0.88028 0.27853 0.65700 0.88029 0.26463 0.65698 0.88050 0.27083 0.65646 0.88066 0.27821 0.65608 0.88070 0.28443 0.65597 0.88086 0.27130 0.65560 0.88099 0.27763 0.65527 0.88116 0.27199 0.65488 0.88126 0.27686 0.65463 0.88126 0.26516 0.65462 0.88138 0.27287 0.65435 0.88144 0.27592 0.65419 0.88150 0.27386 0.65405 0.88152 0.27490 0.65400 0.88165 0.28361 0.65368 0.88215 0.26634 0.65247 0.88249 0.28219 0.65166 0.88290 0.26808 0.65067 0.88315 0.28024 0.65005 0.88345 0.27027 0.64935 0.88361 0.27791 0.64896 0.88376 0.27275 0.64860 0.88381 0.27536 0.64847 1.44549 0.27129 0.90213 1.44566 0.27893 0.90174 1.44595 0.26896 0.90104 1.44620 0.28112 0.90042 1.44661 0.26702 0.89943 1.44695 0.28286 0.89862 1.44745 0.26559 0.89741 1.44760 0.27534 0.89705 1.44766 0.27328 0.89690 1.44773 0.27633 0.89674 1.44784 0.28404 0.89647 1.44784 0.27234 0.89647 1.44794 0.27721 0.89622 1.44811 0.27157 0.89582 1.44824 0.27790 0.89550 1.44840 0.26477 0.89512 1.44844 0.27100 0.89501 1.44860 0.27837 0.89464 1.44882 0.28457 0.89411 1.44882 0.27067 0.89410 1.44899 0.27859 0.89369 1.44922 0.27061 0.89313 1.44939 0.27853 0.89273 1.44939 0.26463 0.89272 1.44961 0.27083 0.89219 1.44977 0.27821 0.89181 1.44981 0.28443 0.89170 1.44997 0.27130 0.89133 1.45010 0.27763 0.89101 1.45027 0.27199 0.89061 1.45037 0.27686 0.89036 1.45037 0.26516 0.89035 1.45048 0.27287 0.89008 1.45055 0.27592 0.88993 1.45061 0.27386 0.88978 1.45063 0.27490 0.88973 1.45076 0.28361 0.88941 1.45126 0.26634 0.88820 1.45160 0.28219 0.88739 1.45201 0.26808 0.88641 1.45227 0.28024 0.88578 1.45255 0.27027 0.88509 1.45272 0.27791 0.88470 1.45287 0.27275 0.88433 1.45292 0.27536 0.88420 1.65157 0.27430 0.98159 1.65159 0.27534 0.98154 1.65165 0.27328 0.98140 1.65172 0.27633 0.98124 1.65183 0.27234 0.98096 1.65193 0.27721 0.98071 1.65210 0.27157 0.98032 1.65223 0.27790 0.97999 1.65243 0.27100 0.97951 1.65259 0.27837 0.97913 1.65281 0.27067 0.97859 1.65298 0.27859 0.97819 1.65321 0.27061 0.97763 1.65338 0.27853 0.97723 1.65360 0.27083 0.97669 1.65376 0.27821 0.97631 1.65396 0.27130 0.97582 1.65409 0.27763 0.97550 1.65426 0.27199 0.97511 1.65436 0.27686 0.97486 1.65447 0.27287 0.97458 1.65454 0.27592 0.97442 1.65460 0.27386 0.97428 1.65462 0.27490 0.97422 0.69500 -0.71740 0.79209 0.69500 -0.71740 0.81209 0.69500 -0.61240 0.79209 0.69500 -0.61240 0.81209 0.70512 -0.60240 0.79209 0.70500 -0.60240 0.81209 0.75500 -0.71740 0.79209 0.75500 -0.71740 0.81209 0.75831 -0.67990 0.79209 0.75869 -0.67990 0.81209 0.76500 -0.60240 0.79209 0.76500 -0.60240 0.81209 0.77500 -0.67740 0.79209 0.77500 -0.67740 0.81209 0.77500 -0.61240 0.79209 0.77500 -0.61240 0.81209 0.77500 -0.67740 0.81209 0.76500 -0.60240 0.81209 0.77500 -0.61240 0.81209 0.69500 -0.71740 0.81209 0.69500 -0.61240 0.81209 0.70500 -0.60240 0.81209 0.75500 -0.71740 0.81209 1.19944 -0.46090 0.69637 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.14607 -0.47090 0.66909 1.15286 -0.47090 0.65891 1.15087 -0.47090 0.66125 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25809 -0.47090 0.68347 1.25937 -0.47090 0.69329 1.25938 -0.47090 0.69257 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.18733 -0.47090 0.75515 1.17775 -0.47090 0.75225 1.17850 -0.47090 0.75260 1.18733 -0.47090 0.75515 1.17775 -0.47090 0.75225 1.17850 -0.47090 0.75260 1.25809 -0.47090 0.68347 1.25937 -0.47090 0.69329 1.25938 -0.47090 0.69257 1.14607 -0.47090 0.66909 1.15286 -0.47090 0.65891 1.15087 -0.47090 0.66125 1.25938 -0.47090 0.69257 1.25937 -0.47090 0.69329 1.25926 -0.47090 0.70175 1.25862 -0.47090 0.70556 1.25809 -0.47090 0.68347 1.25774 -0.47090 0.71081 1.25543 -0.47090 0.67468 1.25486 -0.47090 0.71953 1.25146 -0.47090 0.66640 1.25068 -0.47090 0.72771 1.24627 -0.47090 0.65882 1.24618 -0.47090 0.73394 1.24530 -0.47090 0.73516 1.23999 -0.47090 0.65212 1.23884 -0.47090 0.74170 1.23275 -0.47090 0.64646 1.23212 -0.47090 0.64610 1.23147 -0.47090 0.74717 1.22474 -0.47090 0.64196 1.22334 -0.47090 0.75146 1.22112 -0.47090 0.64061 1.21614 -0.47090 0.63875 1.21466 -0.47090 0.75445 1.20864 -0.47090 0.75554 1.20714 -0.47090 0.63689 1.20562 -0.47090 0.75608 1.19797 -0.47090 0.63642 1.19644 -0.47090 0.75632 1.19032 -0.47090 0.63720 1.18883 -0.47090 0.63735 1.18780 -0.47090 0.63762 1.18733 -0.47090 0.75515 1.17994 -0.47090 0.63967 1.17850 -0.47090 0.75260 1.17775 -0.47090 0.75225 1.17151 -0.47090 0.64332 1.17017 -0.47090 0.74874 1.16374 -0.47090 0.64822 1.16252 -0.47090 0.74365 1.15680 -0.47090 0.65424 1.15574 -0.47090 0.73745 1.15469 -0.47090 0.65674 1.15286 -0.47090 0.65891 1.15087 -0.47090 0.66125 1.14999 -0.47090 0.73029 1.14754 -0.47090 0.72640 1.14607 -0.47090 0.66909 1.14539 -0.47090 0.72233 1.14253 -0.47090 0.67756 1.14207 -0.47090 0.71377 1.14032 -0.47090 0.68648 1.14025 -0.47090 0.68730 1.14009 -0.47090 0.70480 1.13951 -0.47090 0.69563 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15286 -0.47090 0.65891 1.14607 -0.47090 0.66909 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25937 -0.47090 0.69329 1.25809 -0.47090 0.68347 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17775 -0.47090 0.75225 1.18733 -0.47090 0.75515 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17775 -0.47090 0.75225 1.18733 -0.47090 0.75515 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25937 -0.47090 0.69329 1.25809 -0.47090 0.68347 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15286 -0.47090 0.65891 1.14607 -0.47090 0.66909 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.13951 -0.47090 0.69563 1.14009 -0.47090 0.70480 1.14009 -0.47090 0.70480 1.13951 -0.47090 0.69563 1.13951 -0.47090 0.69563 1.14025 -0.47090 0.68730 1.14025 -0.47090 0.68730 1.13951 -0.47090 0.69563 1.14009 -0.47090 0.70480 1.14207 -0.47090 0.71377 1.14207 -0.47090 0.71377 1.14009 -0.47090 0.70480 1.14025 -0.47090 0.68730 1.14032 -0.47090 0.68648 1.14032 -0.47090 0.68648 1.14025 -0.47090 0.68730 1.14032 -0.47090 0.68648 1.14253 -0.47090 0.67756 1.14253 -0.47090 0.67756 1.14032 -0.47090 0.68648 1.14207 -0.47090 0.71377 1.14539 -0.47090 0.72233 1.14539 -0.47090 0.72233 1.14207 -0.47090 0.71377 1.14253 -0.47090 0.67756 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.14253 -0.47090 0.67756 1.14539 -0.47090 0.72233 1.14754 -0.47090 0.72640 1.14754 -0.47090 0.72640 1.14539 -0.47090 0.72233 1.14607 -0.47090 0.66909 1.15087 -0.47090 0.66125 1.15087 -0.47090 0.66125 1.14607 -0.47090 0.66909 1.15286 -0.47090 0.65891 1.14607 -0.47090 0.66909 1.14607 -0.47090 0.66909 1.15286 -0.47090 0.65891 1.14754 -0.47090 0.72640 1.14999 -0.47090 0.73029 1.14999 -0.47090 0.73029 1.14754 -0.47090 0.72640 1.14999 -0.47090 0.73029 1.15574 -0.47090 0.73745 1.15574 -0.47090 0.73745 1.14999 -0.47090 0.73029 1.15087 -0.47090 0.66125 1.15286 -0.47090 0.65891 1.15286 -0.47090 0.65891 1.15087 -0.47090 0.66125 1.15286 -0.47090 0.65891 1.15469 -0.47090 0.65674 1.15469 -0.47090 0.65674 1.15286 -0.47090 0.65891 1.15469 -0.47090 0.65674 1.15680 -0.47090 0.65424 1.15680 -0.47090 0.65424 1.15469 -0.47090 0.65674 1.15574 -0.47090 0.73745 1.16252 -0.47090 0.74365 1.16252 -0.47090 0.74365 1.15574 -0.47090 0.73745 1.15680 -0.47090 0.65424 1.16374 -0.47090 0.64822 1.16374 -0.47090 0.64822 1.15680 -0.47090 0.65424 1.16252 -0.47090 0.74365 1.17017 -0.47090 0.74874 1.17017 -0.47090 0.74874 1.16252 -0.47090 0.74365 1.16374 -0.47090 0.64822 1.17151 -0.47090 0.64332 1.17151 -0.47090 0.64332 1.16374 -0.47090 0.64822 1.17017 -0.47090 0.74874 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17017 -0.47090 0.74874 1.17151 -0.47090 0.64332 1.17994 -0.47090 0.63967 1.17994 -0.47090 0.63967 1.17151 -0.47090 0.64332 1.17850 -0.47090 0.75260 1.17775 -0.47090 0.75225 1.17775 -0.47090 0.75225 1.17850 -0.47090 0.75260 1.17775 -0.47090 0.75225 1.18733 -0.47090 0.75515 1.18733 -0.47090 0.75515 1.17775 -0.47090 0.75225 1.18733 -0.47090 0.75515 1.17850 -0.47090 0.75260 1.17850 -0.47090 0.75260 1.18733 -0.47090 0.75515 1.17994 -0.47090 0.63967 1.18780 -0.47090 0.63762 1.18780 -0.47090 0.63762 1.17994 -0.47090 0.63967 1.18733 -0.47090 0.75515 1.19644 -0.47090 0.75632 1.19644 -0.47090 0.75632 1.18733 -0.47090 0.75515 1.18780 -0.47090 0.63762 1.18883 -0.47090 0.63735 1.18883 -0.47090 0.63735 1.18780 -0.47090 0.63762 1.18883 -0.47090 0.63735 1.19032 -0.47090 0.63720 1.19032 -0.47090 0.63720 1.18883 -0.47090 0.63735 1.19032 -0.47090 0.63720 1.19797 -0.47090 0.63642 1.19797 -0.47090 0.63642 1.19032 -0.47090 0.63720 1.19644 -0.47090 0.75632 1.20562 -0.47090 0.75608 1.20562 -0.47090 0.75608 1.19644 -0.47090 0.75632 1.19797 -0.47090 0.63642 1.20714 -0.47090 0.63689 1.20714 -0.47090 0.63689 1.19797 -0.47090 0.63642 1.20562 -0.47090 0.75608 1.20864 -0.47090 0.75554 1.20864 -0.47090 0.75554 1.20562 -0.47090 0.75608 1.20714 -0.47090 0.63689 1.21614 -0.47090 0.63875 1.21614 -0.47090 0.63875 1.20714 -0.47090 0.63689 1.20864 -0.47090 0.75554 1.21466 -0.47090 0.75445 1.21466 -0.47090 0.75445 1.20864 -0.47090 0.75554 1.21466 -0.47090 0.75445 1.22334 -0.47090 0.75146 1.22334 -0.47090 0.75146 1.21466 -0.47090 0.75445 1.21614 -0.47090 0.63875 1.22112 -0.47090 0.64061 1.22112 -0.47090 0.64061 1.21614 -0.47090 0.63875 1.22112 -0.47090 0.64061 1.22474 -0.47090 0.64196 1.22474 -0.47090 0.64196 1.22112 -0.47090 0.64061 1.22334 -0.47090 0.75146 1.23147 -0.47090 0.74717 1.23147 -0.47090 0.74717 1.22334 -0.47090 0.75146 1.22474 -0.47090 0.64196 1.23212 -0.47090 0.64610 1.23212 -0.47090 0.64610 1.22474 -0.47090 0.64196 1.23147 -0.47090 0.74717 1.23884 -0.47090 0.74170 1.23884 -0.47090 0.74170 1.23147 -0.47090 0.74717 1.23212 -0.47090 0.64610 1.23275 -0.47090 0.64646 1.23275 -0.47090 0.64646 1.23212 -0.47090 0.64610 1.23275 -0.47090 0.64646 1.23999 -0.47090 0.65212 1.23999 -0.47090 0.65212 1.23275 -0.47090 0.64646 1.23884 -0.47090 0.74170 1.24530 -0.47090 0.73516 1.24530 -0.47090 0.73516 1.23884 -0.47090 0.74170 1.23999 -0.47090 0.65212 1.24627 -0.47090 0.65882 1.24627 -0.47090 0.65882 1.23999 -0.47090 0.65212 1.24530 -0.47090 0.73516 1.24618 -0.47090 0.73394 1.24618 -0.47090 0.73394 1.24530 -0.47090 0.73516 1.24618 -0.47090 0.73394 1.25068 -0.47090 0.72771 1.25068 -0.47090 0.72771 1.24618 -0.47090 0.73394 1.24627 -0.47090 0.65882 1.25146 -0.47090 0.66640 1.25146 -0.47090 0.66640 1.24627 -0.47090 0.65882 1.25068 -0.47090 0.72771 1.25486 -0.47090 0.71953 1.25486 -0.47090 0.71953 1.25068 -0.47090 0.72771 1.25146 -0.47090 0.66640 1.25543 -0.47090 0.67468 1.25543 -0.47090 0.67468 1.25146 -0.47090 0.66640 1.25486 -0.47090 0.71953 1.25774 -0.47090 0.71081 1.25774 -0.47090 0.71081 1.25486 -0.47090 0.71953 1.25543 -0.47090 0.67468 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25543 -0.47090 0.67468 1.25774 -0.47090 0.71081 1.25862 -0.47090 0.70556 1.25862 -0.47090 0.70556 1.25774 -0.47090 0.71081 1.25937 -0.47090 0.69329 1.25809 -0.47090 0.68347 1.25809 -0.47090 0.68347 1.25937 -0.47090 0.69329 1.25809 -0.47090 0.68347 1.25938 -0.47090 0.69257 1.25938 -0.47090 0.69257 1.25809 -0.47090 0.68347 1.25862 -0.47090 0.70556 1.25926 -0.47090 0.70175 1.25926 -0.47090 0.70175 1.25862 -0.47090 0.70556 1.25926 -0.47090 0.70175 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25926 -0.47090 0.70175 1.25938 -0.47090 0.69257 1.25937 -0.47090 0.69329 1.25937 -0.47090 0.69329 1.25938 -0.47090 0.69257 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.99986 0.00000 0.01695 0.99986 0.00000 0.01695 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.99986 0.00000 0.01694 -0.99986 0.00000 0.01694 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.40825 0.81649 0.40825 -0.57735 -0.57735 0.57735 -1.00000 0.00000 0.00000 0.70196 -0.41118 0.58150 0.33653 -0.81249 0.47594 0.47624 -0.81246 -0.33622 0.70196 -0.41118 0.58150 0.47624 -0.81246 -0.33622 0.48579 -0.20109 -0.85061 0.48448 0.20069 0.85144 0.70196 -0.41118 0.58150 0.48579 -0.20109 -0.85061 0.48579 -0.20109 -0.85061 0.62774 0.26017 -0.73363 0.48448 0.20069 0.85144 0.48448 0.20069 0.85144 0.62774 0.26017 -0.73363 0.33717 0.81259 -0.47539 0.33717 0.81259 -0.47539 0.33653 0.81249 0.47594 0.48448 0.20069 0.85144 0.33653 0.81249 0.47594 0.33717 0.81259 -0.47539 -0.31599 0.00067 -0.94873 -0.31599 0.00067 -0.94873 0.19868 0.84573 0.49519 0.33653 0.81249 0.47594 0.48579 -0.20109 -0.85061 0.47624 -0.81246 -0.33622 -0.57994 0.58061 -0.57140 0.62774 0.26017 -0.73363 -0.31599 0.00067 -0.94873 0.33717 0.81259 -0.47539 -0.31599 0.00067 -0.94873 0.62774 0.26017 -0.73363 0.48579 -0.20109 -0.85061 -0.31599 0.00067 -0.94873 0.48579 -0.20109 -0.85061 -0.57994 0.58061 -0.57140 0.19868 0.84573 0.49519 0.48958 0.52098 0.69918 0.48958 -0.52098 0.69918 0.48958 -0.52098 0.69918 0.66445 0.70708 0.24183 0.19868 0.84573 0.49519 0.48448 0.20069 0.85144 0.33653 0.81249 0.47594 0.19868 0.84573 0.49519 0.70196 -0.41118 0.58150 0.00000 -0.70708 0.70708 0.33653 -0.81249 0.47594 0.48448 0.20069 0.85144 0.19868 0.84573 0.49519 0.00000 -0.70708 0.70708 0.48448 0.20069 0.85144 0.00000 -0.70708 0.70708 0.70196 -0.41118 0.58150 0.48958 0.52098 0.69918 -0.20069 0.85144 0.48448 -0.20069 -0.85144 0.48448 -0.20069 -0.85144 0.48448 0.48958 -0.52098 0.69918 0.48958 0.52098 0.69918 -0.20069 0.85144 0.48448 -0.62694 0.73449 0.25968 -0.62694 -0.73449 0.25968 -0.62694 -0.73449 0.25968 -0.20069 -0.85144 0.48448 -0.20069 0.85144 0.48448 -0.62694 0.73449 0.25968 -0.57811 0.57695 -0.57695 -0.57811 -0.57695 -0.57695 -0.57811 -0.57695 -0.57695 -0.62694 -0.73449 0.25968 -0.62694 0.73449 0.25968 0.66869 0.66948 -0.32337 0.71233 0.00000 -0.70180 -0.57811 -0.57695 -0.57695 -0.57811 -0.57695 -0.57695 -0.57811 0.57695 -0.57695 0.66869 0.66948 -0.32337 1.00000 0.00000 -0.00000 0.71233 0.00000 -0.70180 -0.62694 -0.73449 0.25968 -0.57811 -0.57695 -0.57695 -0.20069 -0.85144 0.48448 -0.62694 -0.73449 0.25968 0.71233 0.00000 -0.70180 0.00000 -0.70708 0.70708 0.48958 -0.52098 0.69918 -0.20069 -0.85144 0.48448 0.00000 -0.70708 0.70708 -0.20069 -0.85144 0.48448 0.71233 0.00000 -0.70180 0.33653 -0.81249 0.47594 0.00000 -0.70708 0.70708 -0.57994 0.58061 -0.57140 -0.57994 0.58061 -0.57140 0.47624 -0.81246 -0.33622 0.33653 -0.81249 0.47594 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.19868 0.84573 0.49519 -0.20069 0.85144 0.48448 0.48958 0.52098 0.69918 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.19868 0.84573 0.49519 -0.31599 0.00067 -0.94873 0.66869 0.66948 -0.32337 -0.62694 0.73449 0.25968 0.66869 0.66948 -0.32337 -0.57811 0.57695 -0.57695 -0.20069 0.85144 0.48448 0.19868 0.84573 0.49519 0.66869 0.66948 -0.32337 -0.20069 0.85144 0.48448 0.66869 0.66948 -0.32337 -0.62694 0.73449 0.25968 -0.40825 -0.40825 -0.81649 0.57735 -0.57735 -0.57735 0.57750 -0.57698 0.57750 0.57750 -0.57698 0.57750 -0.40825 -0.40791 0.81664 -0.40825 -0.40825 -0.81649 -0.57732 -0.57735 -0.57732 0.40825 -0.40825 -0.81649 0.40825 -0.40825 0.81649 0.40825 -0.40825 0.81649 -0.57735 -0.57735 0.57735 -0.57732 -0.57735 -0.57732 -0.40825 -0.40825 -0.81649 0.30149 -0.30149 -0.90451 0.57735 -0.57735 -0.57735 -0.40825 -0.40825 -0.81649 -0.40825 0.40825 -0.81649 0.30149 -0.30149 -0.90451 -0.57735 -0.57735 0.57735 0.40825 -0.40825 0.81649 -0.30152 -0.30149 0.90451 -0.30152 -0.30149 0.90451 0.40825 -0.40825 0.81649 0.40822 0.40825 0.81649 0.81649 0.40825 0.40825 -0.81649 0.40825 0.40825 -0.81649 -0.40825 0.40825 -0.81649 -0.40825 0.40825 0.81649 -0.40825 0.40825 0.81649 0.40825 0.40825 0.81649 0.40825 0.40825 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.81649 0.40825 0.40825 0.81649 0.40825 0.40825 0.57735 0.57735 -0.57735 0.90451 0.30149 -0.30149 -0.90451 0.30149 -0.30149 -0.90451 0.30149 -0.30149 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.90451 0.30149 -0.30149 0.90451 0.30149 0.30149 -0.90451 0.30149 0.30149 -0.90451 0.30149 0.30149 -0.90451 0.30149 -0.30149 0.90451 0.30149 -0.30149 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.90451 0.30149 0.30149 -0.90451 0.30149 0.30149 0.90451 0.30149 0.30149 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.81649 0.40825 -0.40825 -0.81649 0.40825 -0.40825 -0.81649 0.40825 -0.40825 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.81649 0.40825 -0.40825 0.81649 -0.40825 -0.40825 -0.81649 -0.40825 -0.40825 -0.81649 -0.40825 -0.40825 -0.81649 0.40825 -0.40825 0.81649 0.40825 -0.40825 0.81649 -0.40825 0.40825 -0.81649 -0.40825 0.40825 -0.81649 -0.40825 -0.40825 -0.81649 -0.40825 -0.40825 0.81649 -0.40825 -0.40825 0.81649 -0.40825 0.40825 -0.81649 0.40825 0.40825 -0.57735 0.57735 -0.57735 -0.90451 0.30149 -0.30149 -0.81649 0.40825 0.40825 -0.90451 0.30149 -0.30149 -0.81649 -0.40825 0.40825 -0.57735 0.57735 0.57735 -0.81649 0.40825 -0.40825 -0.90451 0.30149 0.30149 -0.81649 0.40825 -0.40825 -0.81649 -0.40825 -0.40825 -0.90451 0.30149 0.30149 -0.90451 0.30149 -0.30149 -0.90451 0.30149 0.30149 -0.81649 -0.40825 -0.40825 -0.81649 -0.40825 -0.40825 -0.81649 -0.40825 0.40825 -0.90451 0.30149 -0.30149 0.57735 0.57735 0.57735 0.90451 0.30149 0.30149 0.81649 0.40825 -0.40825 0.81649 0.40825 0.40825 0.90451 0.30149 -0.30149 0.57735 0.57735 -0.57735 0.81649 0.40825 0.40825 0.81649 -0.40825 0.40825 0.90451 0.30149 -0.30149 0.90451 0.30149 -0.30149 0.81649 -0.40825 0.40825 0.81649 -0.40825 -0.40825 0.81649 -0.40825 -0.40825 0.90451 0.30149 0.30149 0.90451 0.30149 -0.30149 0.81649 0.40825 -0.40825 0.90451 0.30149 0.30149 0.81649 -0.40825 -0.40825 -0.40825 -0.40825 -0.81649 -0.40825 -0.40791 0.81664 -0.40819 0.40825 0.81649 -0.40819 0.40825 0.81649 -0.40825 0.40825 -0.81649 -0.40825 -0.40825 -0.81649 0.57735 -0.57735 -0.57735 0.30149 -0.30149 -0.90451 0.30155 -0.30122 0.90460 0.30155 -0.30122 0.90460 0.57750 -0.57698 0.57750 0.57735 -0.57735 -0.57735 -0.57732 -0.57735 -0.57732 -0.57735 -0.57735 0.57735 -0.30152 -0.30149 0.90451 -0.30152 -0.30149 0.90451 -0.30149 -0.30149 -0.90451 -0.57732 -0.57735 -0.57732 0.30149 -0.30149 -0.90451 -0.30149 -0.30149 -0.90451 -0.30152 -0.30149 0.90451 -0.30152 -0.30149 0.90451 0.30155 -0.30122 0.90460 0.30149 -0.30149 -0.90451 0.40825 -0.40825 -0.81649 0.40825 0.40825 -0.81649 0.40822 0.40825 0.81649 0.40822 0.40825 0.81649 0.40825 -0.40825 0.81649 0.40825 -0.40825 -0.81649 -0.57732 -0.57735 -0.57732 -0.30149 -0.30149 -0.90451 0.40825 -0.40825 -0.81649 -0.40825 0.40825 -0.81649 -0.40819 0.40825 0.81649 0.40822 0.40825 0.81649 0.40822 0.40825 0.81649 0.40825 0.40825 -0.81649 -0.40825 0.40825 -0.81649 -0.40825 -0.40791 0.81664 0.57750 -0.57698 0.57750 0.30155 -0.30122 0.90460 -0.40825 -0.40791 0.81664 0.30155 -0.30122 0.90460 -0.40819 0.40825 0.81649 -0.30152 -0.30149 0.90451 0.40822 0.40825 0.81649 -0.40819 0.40825 0.81649 -0.40819 0.40825 0.81649 0.30155 -0.30122 0.90460 -0.30152 -0.30149 0.90451 0.40825 -0.40825 -0.81649 -0.30149 -0.30149 -0.90451 0.40825 0.40825 -0.81649 -0.40825 0.40825 -0.81649 0.40825 0.40825 -0.81649 -0.30149 -0.30149 -0.90451 -0.30149 -0.30149 -0.90451 0.30149 -0.30149 -0.90451 -0.40825 0.40825 -0.81649 -0.40825 0.40825 -0.81649 0.40825 0.40825 -0.81649 -0.30149 -0.30149 -0.90451 -0.30149 -0.30149 -0.90451 0.30149 -0.30149 -0.90451 -0.40825 0.40825 -0.81649 0.40825 -0.40825 -0.81649 -0.30149 -0.30149 -0.90451 0.40825 0.40825 -0.81649 -0.30152 -0.30149 0.90451 0.40822 0.40825 0.81649 -0.40819 0.40825 0.81649 -0.40819 0.40825 0.81649 0.30155 -0.30122 0.90460 -0.30152 -0.30149 0.90451 -0.40825 -0.40791 0.81664 0.30155 -0.30122 0.90460 -0.40819 0.40825 0.81649 -0.40825 -0.40791 0.81664 0.57750 -0.57698 0.57750 0.30155 -0.30122 0.90460 -0.40825 0.40825 -0.81649 -0.40819 0.40825 0.81649 0.40822 0.40825 0.81649 0.40822 0.40825 0.81649 0.40825 0.40825 -0.81649 -0.40825 0.40825 -0.81649 -0.57735 -0.57735 -0.57735 -0.30149 -0.30149 -0.90451 0.40825 -0.40825 -0.81649 0.40825 -0.40825 -0.81649 0.40825 0.40825 -0.81649 0.40822 0.40825 0.81649 0.40822 0.40825 0.81649 0.40825 -0.40825 0.81649 0.40825 -0.40825 -0.81649 0.30149 -0.30149 -0.90451 -0.30149 -0.30149 -0.90451 -0.30152 -0.30149 0.90451 -0.30152 -0.30149 0.90451 0.30155 -0.30122 0.90460 0.30149 -0.30149 -0.90451 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.30152 -0.30149 0.90451 -0.30152 -0.30149 0.90451 -0.30149 -0.30149 -0.90451 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.30149 -0.30149 -0.90451 0.30155 -0.30122 0.90460 0.30155 -0.30122 0.90460 0.57750 -0.57698 0.57750 0.57735 -0.57735 -0.57735 -0.40825 -0.40825 -0.81649 -0.40825 -0.40791 0.81664 -0.40819 0.40825 0.81649 -0.40819 0.40825 0.81649 -0.40825 0.40825 -0.81649 -0.40825 -0.40825 -0.81649 -0.30152 -0.30149 0.90451 0.40825 -0.40825 0.81649 0.40822 0.40825 0.81649 -0.57735 -0.57735 0.57735 0.40825 -0.40825 0.81649 -0.30152 -0.30149 0.90451 -0.40825 -0.40825 -0.81649 -0.40825 0.40825 -0.81649 0.30149 -0.30149 -0.90451 -0.40825 -0.40825 -0.81649 0.30149 -0.30149 -0.90451 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.40825 -0.40825 -0.81649 0.40825 -0.40825 0.81649 0.40825 -0.40825 0.81649 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.40825 -0.40825 -0.81649 0.57735 -0.57735 -0.57735 0.57750 -0.57698 0.57750 0.57750 -0.57698 0.57750 -0.40825 -0.40791 0.81664 -0.40825 -0.40825 -0.81649 0.00000 -0.57735 0.81649 0.81649 -0.57735 0.00000 0.81649 0.57735 0.00000 0.81649 0.57735 0.00000 0.00000 0.57735 0.81649 0.00000 -0.57735 0.81649 0.81649 0.57735 0.00000 0.81649 -0.57735 0.00000 0.00000 -0.57735 -0.81649 0.00000 -0.57735 -0.81649 0.00000 0.57735 -0.81649 0.81649 0.57735 0.00000 -0.81649 0.57735 0.00000 0.00000 0.57735 0.81649 0.81649 0.57735 0.00000 0.81649 0.57735 0.00000 0.00000 0.57732 -0.81649 -0.81649 0.57735 0.00000 0.81649 0.57735 0.00000 0.00000 0.57735 -0.81649 -0.81649 0.57735 0.00000 -0.81649 0.57735 0.00000 0.00000 0.57735 0.81649 0.81649 0.57735 0.00000 -0.81649 -0.57735 0.00000 -0.81649 0.57735 0.00000 0.00000 0.57732 -0.81649 0.00000 0.57732 -0.81649 0.00000 -0.57732 -0.81649 -0.81649 -0.57735 0.00000 0.00000 0.57735 0.81649 -0.81649 0.57735 0.00000 -0.81649 -0.57735 0.00000 -0.81649 -0.57735 0.00000 0.00000 -0.57735 0.81649 0.00000 0.57735 0.81649 -0.81649 -0.57735 0.00000 0.00000 -0.57732 -0.81649 0.81649 -0.57735 0.00000 0.81649 -0.57735 0.00000 0.00000 -0.57735 0.81649 -0.81649 -0.57735 0.00000 0.81649 -0.57735 0.00000 0.00000 -0.57735 0.81649 -0.81649 -0.57735 0.00000 -0.81649 -0.57735 0.00000 0.00000 -0.57735 -0.81649 0.81649 -0.57735 0.00000 0.81649 -0.57735 0.00000 0.00000 -0.57732 -0.81649 0.00000 0.57732 -0.81649 0.00000 0.57732 -0.81649 0.81649 0.57735 0.00000 0.81649 -0.57735 0.00000 0.00000 0.57735 0.81649 0.00000 -0.57735 0.81649 0.81649 -0.57735 0.00000 0.81649 -0.57735 0.00000 0.81649 0.57735 0.00000 0.00000 0.57735 0.81649 0.00000 -0.57735 0.81649 0.00000 0.57735 0.81649 -0.81649 0.57735 0.00000 -0.81649 0.57735 0.00000 -0.81649 -0.57735 0.00000 0.00000 -0.57735 0.81649 -0.81649 0.57735 0.00000 0.00000 0.57735 -0.81649 0.00000 -0.57735 -0.81649 0.00000 -0.57735 -0.81649 -0.81649 -0.57735 0.00000 -0.81649 0.57735 0.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 1.00000 0.81919 0.00000 -0.57352 0.81919 0.00000 0.57352 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.81919 0.00000 -0.57352 -0.81919 0.00000 0.57352 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.70711 0.00000 0.70711 -0.70712 0.00000 -0.70710 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 0.70710 0.00000 0.70712 0.70711 0.00000 -0.70711 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 1.00000 0.77375 0.00000 0.63349 0.77375 0.00000 -0.63349 0.77036 0.00000 -0.63761 0.77036 0.00000 0.63761 -0.77036 0.00000 -0.63761 -0.77036 0.00000 0.63761 -0.77374 0.00000 0.63350 -0.77375 0.00000 -0.63349 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 0.00000 -0.00001 1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.77374 0.00000 0.63350 -0.77375 0.00000 -0.63349 -0.77036 0.00000 -0.63761 -0.77036 0.00000 0.63761 0.77036 0.00000 -0.63761 0.77036 0.00000 0.63761 0.77375 0.00000 0.63349 0.77375 0.00000 -0.63349 -0.00000 0.00000 -1.00000 0.00000 -0.00000 1.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 0.70710 0.00000 0.70712 0.70711 0.00000 -0.70711 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.70711 0.00000 0.70711 -0.70712 0.00000 -0.70710 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -0.00001 -1.00000 0.00000 -0.00001 -1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -0.81919 0.00000 -0.57352 -0.81919 0.00000 0.57352 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 0.81919 0.00000 -0.57352 0.81919 0.00000 0.57352 0.00000 -0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.99986 0.00000 0.01695 0.99986 -0.00000 0.01695 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.99986 0.00000 0.01694 -0.99986 0.00000 0.01694 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.40825 0.81649 0.40825 -0.57735 -0.57735 0.57735 -1.00000 -0.00000 0.00000 0.70196 -0.41118 0.58150 0.33653 -0.81249 0.47594 0.47624 -0.81246 -0.33622 0.70196 -0.41118 0.58150 0.47624 -0.81246 -0.33622 0.48579 -0.20109 -0.85061 0.48448 0.20069 0.85144 0.70196 -0.41118 0.58150 0.48579 -0.20109 -0.85061 0.48579 -0.20109 -0.85061 0.62774 0.26017 -0.73363 0.48448 0.20069 0.85144 0.48448 0.20069 0.85144 0.62774 0.26017 -0.73363 0.33717 0.81259 -0.47539 0.33717 0.81259 -0.47539 0.33653 0.81249 0.47594 0.48448 0.20069 0.85144 0.33653 0.81249 0.47594 0.33717 0.81259 -0.47539 -0.31599 0.00067 -0.94873 -0.31599 0.00067 -0.94873 0.19868 0.84573 0.49519 0.33653 0.81249 0.47594 0.48579 -0.20109 -0.85061 0.47624 -0.81246 -0.33622 -0.57994 0.58061 -0.57140 0.62774 0.26017 -0.73363 -0.31599 0.00067 -0.94873 0.33717 0.81259 -0.47539 -0.31599 0.00067 -0.94873 0.62774 0.26017 -0.73363 0.48579 -0.20109 -0.85061 -0.31599 0.00067 -0.94873 0.48579 -0.20109 -0.85061 -0.57994 0.58061 -0.57140 0.19868 0.84573 0.49519 0.48958 0.52098 0.69918 0.48958 -0.52098 0.69918 0.48958 -0.52098 0.69918 0.66445 0.70708 0.24183 0.19868 0.84573 0.49519 0.48448 0.20069 0.85144 0.33653 0.81249 0.47594 0.19868 0.84573 0.49519 0.70196 -0.41118 0.58150 0.00000 -0.70708 0.70708 0.33653 -0.81249 0.47594 0.48448 0.20069 0.85144 0.19868 0.84573 0.49519 0.00000 -0.70708 0.70708 0.48448 0.20069 0.85144 0.00000 -0.70708 0.70708 0.70196 -0.41118 0.58150 0.48958 0.52098 0.69918 -0.20069 0.85144 0.48448 -0.20069 -0.85144 0.48448 -0.20069 -0.85144 0.48448 0.48958 -0.52098 0.69918 0.48958 0.52098 0.69918 -0.20069 0.85144 0.48448 -0.62694 0.73449 0.25968 -0.62694 -0.73449 0.25968 -0.62694 -0.73449 0.25968 -0.20069 -0.85144 0.48448 -0.20069 0.85144 0.48448 -0.62694 0.73449 0.25968 -0.57811 0.57695 -0.57695 -0.57811 -0.57695 -0.57695 -0.57811 -0.57695 -0.57695 -0.62694 -0.73449 0.25968 -0.62694 0.73449 0.25968 0.66869 0.66948 -0.32337 0.71233 0.00000 -0.70180 -0.57811 -0.57695 -0.57695 -0.57811 -0.57695 -0.57695 -0.57811 0.57695 -0.57695 0.66869 0.66948 -0.32337 1.00000 0.00000 0.00000 0.71233 0.00000 -0.70180 -0.62694 -0.73449 0.25968 -0.57811 -0.57695 -0.57695 -0.20069 -0.85144 0.48448 -0.62694 -0.73449 0.25968 0.71233 0.00000 -0.70180 0.00000 -0.70708 0.70708 0.48958 -0.52098 0.69918 -0.20069 -0.85144 0.48448 0.00000 -0.70708 0.70708 -0.20069 -0.85144 0.48448 0.71233 0.00000 -0.70180 0.33653 -0.81249 0.47594 0.00000 -0.70708 0.70708 -0.57994 0.58061 -0.57140 -0.57994 0.58061 -0.57140 0.47624 -0.81246 -0.33622 0.33653 -0.81249 0.47594 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.19868 0.84573 0.49519 -0.20069 0.85144 0.48448 0.48958 0.52098 0.69918 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.19868 0.84573 0.49519 -0.31599 0.00067 -0.94873 0.66869 0.66948 -0.32337 -0.62694 0.73449 0.25968 0.66869 0.66948 -0.32337 -0.57811 0.57695 -0.57695 -0.20069 0.85144 0.48448 0.19868 0.84573 0.49519 0.66869 0.66948 -0.32337 -0.20069 0.85144 0.48448 0.66869 0.66948 -0.32337 -0.62694 0.73449 0.25968 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 1.00000 -0.00000 0.00000 0.00000 0.70235 0.71178 0.00000 0.70235 0.71178 0.57991 0.57985 -0.57219 0.57991 0.57985 -0.57219 -0.57991 0.57985 -0.57219 0.00000 0.70235 0.71178 0.70708 0.00000 -0.70708 0.57991 0.57985 -0.57219 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.70708 0.00000 0.70708 0.70708 0.00000 -0.70708 -0.70708 0.00000 -0.70708 -0.70708 0.00000 0.70708 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -0.57991 0.57985 -0.57219 -0.70708 0.00000 -0.70708 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.70708 0.00000 -0.70708 -0.57991 0.57985 -0.57219 0.57991 0.57985 -0.57219 0.57991 0.57985 -0.57219 0.70708 0.00000 -0.70708 -0.70708 0.00000 -0.70708 -0.70708 0.00000 0.70708 0.70708 0.00000 0.70708 0.00000 0.70235 0.71178 0.00000 0.70235 0.71178 0.00000 0.70235 0.71178 -0.70708 0.00000 0.70708 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.05055 -0.83099 -0.55399 -0.00098 -0.02040 0.99979 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -1.00000 -0.00000 0.00000 0.00000 1.00000 -0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 0.00000 1.00000 -0.00000 1.00000 0.00000 0.00000 0.00000 -0.99991 0.01333 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.71151 0.70266 0.00000 -0.71151 0.70266 0.00000 -0.70708 -0.70708 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.70266 0.71151 0.00000 0.70266 0.71151 0.00000 -0.71151 0.70266 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.70708 -0.70708 0.00000 0.70708 -0.70708 0.00000 0.70266 0.71151 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.70708 -0.70708 0.00000 -0.70708 -0.70708 0.00000 0.70708 -0.70708 0.00000 0.00000 0.00000 1.00000 0.70708 -0.70708 0.00000 -0.70708 -0.70708 0.00000 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.70708 -0.70708 0.00000 0.70266 0.71151 0.00000 0.70708 -0.70708 0.00000 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57250 0.57970 -0.57976 0.70266 0.71151 0.00000 -0.71151 0.70266 0.00000 0.70266 0.71151 0.00000 0.57250 0.57970 -0.57976 0.57250 0.57970 -0.57976 -0.58214 0.57491 -0.57494 -0.71151 0.70266 0.00000 -0.70708 -0.70708 0.00000 -0.71151 0.70266 0.00000 -0.58214 0.57491 -0.57494 -0.58214 0.57491 -0.57494 -0.57735 -0.57735 -0.57735 -0.70708 -0.70708 0.00000 0.57250 0.57970 -0.57976 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.58214 0.57491 -0.57494 0.57250 0.57970 -0.57976 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.70708 0.70708 0.00000 -0.70708 0.70708 0.00000 -0.70708 -0.70708 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.70708 0.70708 0.00000 0.70708 0.70708 0.00000 -0.70708 0.70708 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.70708 -0.70708 0.00000 0.70708 -0.70708 0.00000 0.70708 0.70708 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.70708 -0.70708 0.00000 -0.70708 -0.70708 0.00000 0.70708 -0.70708 0.00000 0.00000 0.00000 1.00000 0.70708 -0.70708 0.00000 -0.70708 -0.70708 0.00000 -0.70708 -0.70708 0.00000 -0.70708 -0.70708 0.00000 0.70708 -0.70708 0.00000 0.70708 -0.70708 0.00000 0.70708 0.70708 0.00000 0.70708 -0.70708 0.00000 0.70708 -0.70708 0.00000 0.70708 -0.70708 0.00000 0.70708 0.70708 0.00000 0.70708 0.70708 0.00000 -0.70708 0.70708 0.00000 0.70708 0.70708 0.00000 0.70708 0.70708 0.00000 0.70708 0.70708 0.00000 -0.70708 0.70708 0.00000 -0.70708 0.70708 0.00000 -0.70708 -0.70708 0.00000 -0.70708 0.70708 0.00000 -0.70708 0.70708 0.00000 -0.70708 0.70708 0.00000 -0.70708 -0.70708 0.00000 -0.70708 -0.70708 0.00000 -0.70708 -0.70708 0.00000 -0.70708 0.70708 0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.70708 -0.70708 0.00000 -0.70708 0.70708 0.00000 0.70708 0.70708 0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.70708 0.70708 0.00000 0.70708 0.70708 0.00000 0.70708 -0.70708 0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.70708 0.70708 0.00000 0.70708 -0.70708 0.00000 -0.70708 -0.70708 0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.70708 -0.70708 0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 1.00000 -1.00000 -0.00000 0.00000 -0.00000 0.00000 -1.00000 -0.86603 0.00000 0.49999 -1.00000 -0.00000 0.00000 0.86603 0.00000 0.49999 0.49999 0.00000 0.86603 0.00000 0.00000 1.00000 -0.49999 0.00000 0.86603 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -0.49999 0.00000 0.86603 0.00000 0.00000 1.00000 0.49999 0.00000 0.86603 0.86603 0.00000 0.49999 -1.00000 0.00000 0.00000 -0.86603 0.00000 0.49999 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.38268 0.00000 0.92388 -0.38268 0.00000 0.92388 -0.37940 -0.13068 0.91596 -0.37941 -0.13051 0.91598 -0.35358 -0.38250 0.85362 -0.35356 -0.38263 0.85357 -0.30356 -0.60889 0.73287 -0.30356 -0.60890 0.73286 -0.23290 -0.79348 0.56227 -0.23298 -0.79331 0.56247 -0.14646 -0.92387 0.35358 -0.14639 -0.92394 0.35343 -0.05001 -0.99142 0.12075 -0.05002 -0.99142 0.12077 0.05002 -0.99142 -0.12077 0.05001 -0.99142 -0.12075 0.14639 -0.92394 -0.35343 0.14640 -0.92393 -0.35344 0.23290 -0.79347 -0.56228 0.23298 -0.79331 -0.56247 0.30365 -0.60861 -0.73307 0.30355 -0.60892 -0.73285 0.35349 -0.38305 -0.85341 0.35359 -0.38246 -0.85364 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.57976 -0.81479 0.00000 0.57976 -0.81479 0.00000 0.36238 -0.93203 0.00000 0.36238 -0.93203 0.00000 0.12348 -0.99235 0.00000 0.12348 -0.99235 0.00000 0.67581 -0.73708 0.00000 0.67581 -0.73708 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.28735 -0.95783 0.00000 -0.28735 -0.95783 -0.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 0.00000 -0.92848 -0.37139 -0.00000 -0.92848 -0.37139 0.00000 0.70711 0.70711 0.00000 0.70711 0.70711 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.55470 -0.83205 0.00000 -0.55470 -0.83205 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.55470 -0.83205 0.00000 0.55470 -0.83205 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.57989 -0.81470 -0.00000 -0.57989 -0.81470 0.00000 -0.36238 -0.93203 -0.00000 -0.36238 -0.93203 0.00000 -0.12345 -0.99235 -0.00000 -0.12345 -0.99235 0.00000 -0.67581 -0.73708 0.00000 -0.67581 -0.73708 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.28735 -0.95783 0.00000 0.28735 -0.95783 0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 -0.92848 0.37139 0.00000 -0.92848 0.37139 0.00000 0.70711 -0.70711 0.00000 0.70711 -0.70711 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.55470 -0.83205 0.00000 0.55470 -0.83205 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.55470 -0.83205 0.00000 -0.55470 -0.83205 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -0.81470 0.57988 0.00000 -0.81470 0.57988 0.00000 -0.93203 0.36238 0.00000 -0.93203 0.36238 0.00000 -0.99235 0.12345 0.00000 -0.99235 0.12345 0.00000 -0.73708 0.67581 0.00000 -0.73708 0.67581 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 0.00000 -0.95783 -0.28735 0.00000 -0.95783 -0.28735 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.37139 -0.92848 0.00000 0.37139 -0.92848 0.00000 -0.70712 0.70710 0.00000 -0.70712 0.70710 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 0.00000 -0.83205 -0.55470 0.00000 -0.83205 -0.55470 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 0.00000 -0.83205 0.55470 0.00000 -0.83205 0.55470 -0.21885 0.96753 0.12635 0.14234 0.62694 0.76592 -0.08921 0.23255 0.96847 -0.08921 0.23255 0.96847 0.00000 0.96753 -0.25272 -0.21885 0.96753 0.12635 -0.59752 0.28581 0.74917 -0.80007 0.38267 0.46193 -0.80007 -0.38267 0.46193 -0.80007 -0.38267 0.46193 -0.59752 -0.28581 0.74917 -0.59752 0.28581 0.74917 0.00000 0.96753 -0.25272 0.18101 0.13675 0.97391 -0.05347 0.81252 0.58046 -0.05347 0.81252 0.58046 -0.16880 0.94125 0.29240 0.00000 0.96753 -0.25272 -0.63182 0.51588 0.57848 -0.46568 -0.33656 0.81845 -0.46568 0.33656 0.81845 -0.46568 0.33656 0.81845 -0.35002 0.28578 0.89206 -0.63182 0.51588 0.57848 -0.21885 0.96753 0.12635 0.00000 0.96753 -0.25272 0.73449 0.62694 -0.25968 0.73449 0.62694 -0.25968 0.89441 0.44719 0.00000 -0.21885 0.96753 0.12635 0.00000 0.96753 -0.25272 -0.16880 0.94125 0.29240 0.73449 0.62694 0.25968 0.73449 0.62694 0.25968 0.73449 0.62694 -0.25968 0.00000 0.96753 -0.25272 -0.63182 0.51588 0.57848 -0.35002 0.28578 0.89206 0.70708 0.00000 0.70708 0.70708 0.00000 0.70708 0.79409 0.56151 0.23258 -0.63182 0.51588 0.57848 -0.59752 0.28581 0.74917 -0.59752 -0.28581 0.74917 0.79409 0.56151 0.23258 0.79409 0.56151 0.23258 0.47594 0.33653 0.81249 -0.59752 0.28581 0.74917 0.70708 0.00000 0.70708 -0.35002 0.28578 0.89206 0.85415 -0.45436 0.25288 0.85415 -0.45436 0.25288 0.89441 0.44719 0.00000 0.70708 0.00000 0.70708 -0.86599 0.00000 -0.50002 -0.46568 0.33656 0.81845 0.14234 0.62694 0.76592 0.14234 0.62694 0.76592 -0.21885 0.96753 0.12635 -0.86599 0.00000 -0.50002 -0.08921 0.23255 0.96847 -0.61235 -0.70711 0.35353 -0.59752 -0.28581 0.74917 -0.59752 -0.28581 0.74917 -0.80007 -0.38267 0.46193 -0.08921 0.23255 0.96847 -0.59752 0.28581 0.74917 -0.16880 0.94125 0.29240 -0.05347 0.81252 0.58046 -0.05347 0.81252 0.58046 -0.80007 0.38267 0.46193 -0.59752 0.28581 0.74917 -0.46568 -0.33656 0.81845 -0.61235 -0.70711 0.35353 -0.61235 -0.70711 0.35353 -0.61235 -0.70711 0.35353 0.18101 0.13675 0.97391 -0.46568 -0.33656 0.81845 -0.63182 0.51588 0.57848 0.00000 0.96753 -0.25272 0.73449 0.62694 -0.25968 0.73449 0.62694 -0.25968 0.79409 0.56151 0.23258 -0.63182 0.51588 0.57848 0.73449 0.62694 0.25968 -0.16880 0.94125 0.29240 0.00000 0.70708 0.70708 0.00000 0.70708 0.70708 0.47594 0.33653 0.81249 0.73449 0.62694 0.25968 0.00000 0.96753 -0.25272 0.00000 0.70708 -0.70708 0.79409 0.56151 0.23258 0.79409 0.56151 0.23258 0.73449 0.62694 -0.25968 0.00000 0.96753 -0.25272 -0.86599 0.00000 -0.50002 0.70708 0.00000 0.70708 0.89441 0.44719 0.00000 0.89441 0.44719 0.00000 0.85415 -0.45436 0.25288 -0.86599 0.00000 -0.50002 0.73449 0.62694 0.25968 0.73449 0.62694 -0.25968 0.89441 0.44719 0.00000 0.89441 0.44719 0.00000 0.73449 0.62694 -0.25968 0.73449 0.62694 0.25968 0.47594 0.33653 0.81249 0.79409 0.56151 0.23258 0.73449 0.62694 -0.25968 0.73449 0.62694 -0.25968 0.73449 0.62694 0.25968 0.47594 0.33653 0.81249 0.73449 0.62694 -0.25968 0.89441 0.44719 0.00000 0.70708 0.00000 0.70708 0.70708 0.00000 0.70708 0.79409 0.56151 0.23258 0.73449 0.62694 -0.25968 0.18101 0.13675 0.97391 -0.05347 0.81252 0.58046 -0.08921 0.23255 0.96847 -0.08921 0.23255 0.96847 0.14234 0.62694 0.76592 0.18101 0.13675 0.97391 -0.46568 -0.33656 0.81845 0.18101 0.13675 0.97391 0.14234 0.62694 0.76592 0.14234 0.62694 0.76592 -0.46568 0.33656 0.81845 -0.46568 -0.33656 0.81845 0.37942 -0.13036 -0.91600 -0.65326 -0.70713 -0.27059 0.38268 0.00000 -0.92388 0.38268 0.00000 -0.92388 -0.92388 -0.00186 -0.38269 -0.92388 -0.00046 -0.38268 -0.92388 0.00030 -0.38269 -0.92388 -0.00015 -0.38268 -0.92388 0.00006 -0.38268 -0.92388 -0.00016 -0.38269 -0.92388 0.00032 -0.38268 -0.92388 0.00001 -0.38268 -0.92388 0.00031 -0.38269 -0.92388 -0.00023 -0.38269 -0.92388 0.00000 -0.38268 -0.92388 -0.00000 -0.38269 -0.92388 0.00000 -0.38269 0.38268 0.00001 -0.92388 0.38268 -0.00001 -0.92388 -0.65327 0.70712 -0.27060 -0.65327 0.70712 -0.27060 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.38269 0.00000 0.92388 -0.38268 0.00000 0.92388 -0.46194 -0.86602 -0.19134 -0.46194 -0.86602 -0.19134 -0.87484 -0.48036 -0.06217 -0.80187 0.08829 0.59090 -0.38267 0.00000 -0.92386 -0.87484 -0.48036 -0.06217 -0.38267 0.00000 -0.92386 -0.50154 -0.43300 -0.74892 0.38269 0.00000 -0.92388 0.38268 -0.00000 -0.92388 0.65328 0.70711 0.27059 0.65327 0.70712 0.27059 0.92388 0.00000 0.38268 0.92388 0.00000 0.38268 -0.38268 0.00001 0.92388 -0.38268 -0.00001 0.92388 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.13061 0.00000 0.99143 0.13061 -0.00000 0.99143 0.38269 0.00000 0.92388 0.38269 -0.00000 0.92388 0.60872 0.00000 0.79339 0.60872 -0.00000 0.79339 0.79338 0.00000 0.60872 0.79338 -0.00000 0.60872 0.92389 0.00000 0.38266 0.92389 -0.00000 0.38266 0.99143 0.00000 0.13063 0.99143 -0.00000 0.13063 -0.13061 0.00000 0.99143 -0.13061 0.00000 0.99143 -0.38269 0.00000 0.92388 -0.38269 0.00000 0.92388 -0.60871 0.00000 0.79339 -0.60871 0.00000 0.79339 -0.79337 0.00000 0.60874 -0.79337 0.00000 0.60874 -0.92389 0.00000 0.38265 -0.92389 0.00000 0.38265 -0.99143 0.00000 0.13061 -0.99143 0.00000 0.13061 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.13065 -0.00000 -0.99143 -0.13065 0.00000 -0.99143 -0.38265 -0.00000 -0.92389 -0.38265 0.00000 -0.92389 -0.60874 -0.00000 -0.79337 -0.60874 0.00000 -0.79337 -0.79335 -0.00000 -0.60876 -0.79335 0.00000 -0.60876 -0.92390 -0.00000 -0.38264 -0.92390 0.00000 -0.38264 -0.99143 -0.00000 -0.13061 -0.99143 0.00000 -0.13061 0.13065 0.00000 -0.99143 0.13065 0.00000 -0.99143 0.38265 0.00000 -0.92389 0.38265 0.00000 -0.92389 0.60874 0.00000 -0.79337 0.60874 0.00000 -0.79337 0.79336 0.00000 -0.60875 0.79336 0.00000 -0.60875 0.92389 0.00000 -0.38265 0.92389 0.00000 -0.38265 0.99143 0.00000 -0.13063 0.99143 0.00000 -0.13063 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 0.13063 0.00000 0.99143 0.13063 -0.00000 0.99143 0.38266 0.00000 0.92389 0.38266 -0.00000 0.92389 0.60872 0.00000 0.79338 0.60872 -0.00000 0.79338 0.79339 0.00000 0.60871 0.79339 -0.00000 0.60871 0.92388 0.00000 0.38269 0.92388 -0.00000 0.38269 0.99143 0.00000 0.13061 0.99143 -0.00000 0.13061 0.13063 0.00000 -0.99143 0.13063 0.00000 -0.99143 0.38265 0.00000 -0.92389 0.38265 0.00000 -0.92389 0.60872 0.00000 -0.79338 0.60872 0.00000 -0.79338 0.79339 0.00000 -0.60871 0.79339 0.00000 -0.60871 0.92388 0.00000 -0.38269 0.92388 0.00000 -0.38269 0.99143 0.00000 -0.13061 0.99143 0.00000 -0.13061 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 0.00000 1.00000 1.00000 0.00000 0.00000 -0.00000 0.00000 -1.00000 1.00000 0.00000 0.00000 -0.00225 1.00000 0.00114 -0.00225 -1.00000 0.00114 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 0.00000 -1.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 0.00114 -1.00000 0.00198 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 -1.00000 -0.00000 0.00000 -0.00000 0.00000 -1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 1.00000 0.00000 1.00000 0.00000 0.00000 0.00000 1.00000 1.00000 0.00000 0.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 1.00000 0.00000 0.00000 -0.00000 0.00000 -1.00000 -1.00000 -0.00000 0.00000 -0.00225 1.00000 0.00114 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 1.00000 0.00000 0.00000 -0.00225 -1.00000 -0.00114 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.99359 -0.11307 0.00000 0.99359 -0.11307 0.00000 0.94428 -0.32916 0.00000 0.94428 -0.32916 0.00000 0.84639 -0.53256 0.00000 0.84639 -0.53256 0.00000 0.70635 -0.70786 0.00000 0.70635 -0.70786 0.00000 0.53253 -0.84641 0.00000 0.53253 -0.84641 0.00000 0.33059 -0.94377 0.00000 0.33059 -0.94377 0.00000 0.11172 -0.99374 0.00000 0.11172 -0.99374 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.13021 -0.99149 0.00000 -0.13021 -0.99149 -0.00000 -0.38318 -0.92368 0.00000 -0.38318 -0.92368 -0.00000 -0.60858 -0.79349 0.00000 -0.60858 -0.79349 -0.00000 -0.79365 -0.60838 0.00000 -0.79365 -0.60838 -0.00000 -0.92380 -0.38288 0.00000 -0.92380 -0.38288 -0.00000 -0.99149 -0.13022 0.00000 -0.99149 -0.13022 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.99148 0.13026 -0.00000 0.99148 0.13026 0.00000 0.92393 0.38256 -0.00000 0.92393 0.38256 0.00000 0.79325 0.60889 -0.00000 0.79325 0.60889 0.00000 0.60856 0.79351 -0.00000 0.60856 0.79351 0.00000 0.38256 0.92393 -0.00000 0.38256 0.92393 0.00000 0.13077 0.99141 -0.00000 0.13077 0.99141 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.11229 0.99368 0.00000 -0.11229 0.99368 0.00000 -0.32979 0.94405 0.00000 -0.32979 0.94405 0.00000 -0.53211 0.84667 0.00000 -0.53211 0.84667 0.00000 -0.70743 0.70678 0.00000 -0.70743 0.70678 0.00000 -0.84667 0.53212 0.00000 -0.84667 0.53212 0.00000 -0.94379 0.33054 0.00000 -0.94379 0.33054 0.00000 -0.99368 0.11224 0.00000 -0.99368 0.11224 0.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.13063 0.00000 -0.99143 0.13063 0.00000 -0.99143 0.38267 0.00000 -0.92389 0.38267 0.00000 -0.92389 0.60872 0.00000 -0.79338 0.60872 0.00000 -0.79338 0.79337 0.00000 -0.60874 0.79337 0.00000 -0.60874 0.92390 0.00000 -0.38264 0.92390 0.00000 -0.38264 0.99143 0.00000 -0.13063 0.99143 0.00000 -0.13063 -0.99148 0.00000 -0.13025 -0.99148 -0.00000 -0.13025 -0.92388 0.00000 -0.38268 -0.92388 -0.00000 -0.38268 -0.79319 0.00000 -0.60898 -0.79319 -0.00000 -0.60898 -0.60875 0.00000 -0.79336 -0.60875 -0.00000 -0.79336 -0.38280 0.00000 -0.92383 -0.38280 -0.00000 -0.92383 -0.13058 0.00000 -0.99144 -0.13058 -0.00000 -0.99144 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.99376 -0.11154 -0.00000 -0.99376 -0.11154 0.00000 -0.94382 -0.33046 -0.00000 -0.94382 -0.33046 0.00000 -0.84705 -0.53151 -0.00000 -0.84705 -0.53151 0.00000 -0.70560 -0.70861 -0.00000 -0.70560 -0.70861 0.00000 -0.53317 -0.84601 -0.00000 -0.53317 -0.84601 0.00000 -0.33062 -0.94376 -0.00000 -0.33062 -0.94376 0.00000 -0.11154 -0.99376 -0.00000 -0.11154 -0.99376 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.11155 -0.99376 0.00000 0.11155 -0.99376 0.00000 0.33061 -0.94377 0.00000 0.33061 -0.94377 0.00000 0.53319 -0.84599 0.00000 0.53319 -0.84599 0.00000 0.70633 -0.70788 0.00000 0.70633 -0.70788 0.00000 0.84641 -0.53253 0.00000 0.84641 -0.53253 0.00000 0.94381 -0.33050 0.00000 0.94381 -0.33050 0.00000 0.99375 -0.11158 0.00000 0.99375 -0.11158 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.99368 0.11226 0.00000 -0.99368 0.11226 0.00000 -0.94399 0.32998 0.00000 -0.94399 0.32998 0.00000 -0.84668 0.53210 0.00000 -0.84668 0.53210 0.00000 -0.70711 0.70711 0.00000 -0.70711 0.70711 0.00000 -0.53212 0.84667 0.00000 -0.53212 0.84667 0.00000 -0.32998 0.94399 0.00000 -0.32998 0.94399 0.00000 -0.11222 0.99368 0.00000 -0.11222 0.99368 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.11222 0.99368 0.00000 0.11222 0.99368 -0.00000 0.33000 0.94398 0.00000 0.33000 0.94398 -0.00000 0.53210 0.84668 0.00000 0.53210 0.84668 -0.00000 0.70711 0.70711 0.00000 0.70711 0.70711 -0.00000 0.84668 0.53210 0.00000 0.84668 0.53210 -0.00000 0.94380 0.33052 0.00000 0.94380 0.33052 -0.00000 0.99375 0.11162 0.00000 0.99375 0.11162 -0.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.11212 0.00000 0.99369 -0.11212 0.00000 0.99369 -0.33002 0.00000 0.94397 -0.33002 0.00000 0.94397 -0.53222 0.00000 0.84661 -0.53222 0.00000 0.84661 -0.70713 0.00000 0.70708 -0.70713 0.00000 0.70708 -0.84656 0.00000 0.53229 -0.84656 0.00000 0.53229 -0.94399 0.00000 0.32998 -0.94399 0.00000 0.32998 -0.99370 0.00000 0.11207 -0.99370 0.00000 0.11207 0.99143 -0.00000 0.13064 0.99143 0.00000 0.13064 0.92389 -0.00000 0.38266 0.92389 0.00000 0.38266 0.79336 -0.00000 0.60875 0.79336 0.00000 0.60875 0.60875 -0.00000 0.79336 0.60875 0.00000 0.79336 0.38264 -0.00000 0.92390 0.38264 0.00000 0.92390 0.13070 -0.00000 0.99142 0.13070 0.00000 0.99142 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -0.11163 0.99375 0.00000 -0.11163 0.99375 0.00000 -0.33054 0.94379 0.00000 -0.33054 0.94379 0.00000 -0.53253 0.84641 0.00000 -0.53253 0.84641 0.00000 -0.70786 0.70635 0.00000 -0.70786 0.70635 0.00000 -0.84598 0.53321 0.00000 -0.84598 0.53321 0.00000 -0.94377 0.33059 0.00000 -0.94377 0.33059 0.00000 -0.99376 0.11155 0.00000 -0.99376 0.11155 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -0.99376 -0.11156 0.00000 -0.99376 -0.11156 -0.00000 -0.94378 -0.33056 0.00000 -0.94378 -0.33056 -0.00000 -0.84598 -0.53321 0.00000 -0.84598 -0.53321 -0.00000 -0.70861 -0.70560 0.00000 -0.70861 -0.70560 -0.00000 -0.53145 -0.84709 0.00000 -0.53145 -0.84709 -0.00000 -0.33054 -0.94379 0.00000 -0.33054 -0.94379 -0.00000 -0.11154 -0.99376 0.00000 -0.11154 -0.99376 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 0.11226 0.99368 -0.00000 0.11226 0.99368 0.00000 0.32995 0.94400 -0.00000 0.32995 0.94400 0.00000 0.53213 0.84666 -0.00000 0.53213 0.84666 0.00000 0.70711 0.70711 -0.00000 0.70711 0.70711 0.00000 0.84667 0.53212 -0.00000 0.84667 0.53212 0.00000 0.94399 0.32998 -0.00000 0.94399 0.32998 0.00000 0.99368 0.11223 -0.00000 0.99368 0.11223 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.99368 -0.11223 0.00000 0.99368 -0.11223 0.00000 0.94399 -0.32998 0.00000 0.94399 -0.32998 0.00000 0.84668 -0.53210 0.00000 0.84668 -0.53210 0.00000 0.70711 -0.70711 0.00000 0.70711 -0.70711 0.00000 0.53210 -0.84668 0.00000 0.53210 -0.84668 0.00000 0.32998 -0.94399 0.00000 0.32998 -0.94399 0.00000 0.11223 -0.99368 0.00000 0.11223 -0.99368 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 0.99143 -0.00000 0.13061 0.99143 0.00000 0.13061 0.92386 -0.00000 0.38273 0.92386 0.00000 0.38273 0.79341 -0.00000 0.60868 0.79341 0.00000 0.60868 0.60870 -0.00000 0.79340 0.60870 0.00000 0.79340 0.38269 -0.00000 0.92388 0.38269 0.00000 0.92388 0.13061 -0.00000 0.99143 0.13061 0.00000 0.99143 0.13063 0.00000 -0.99143 0.13063 0.00000 -0.99143 0.38268 0.00000 -0.92388 0.38268 0.00000 -0.92388 0.60870 0.00000 -0.79340 0.60870 0.00000 -0.79340 0.79341 0.00000 -0.60869 0.79341 0.00000 -0.60869 0.92386 0.00000 -0.38272 0.92386 0.00000 -0.38272 0.99143 0.00000 -0.13061 0.99143 0.00000 -0.13061 0.00000 0.00000 1.00000 0.00548 0.00743 -0.99996 -0.00000 0.00000 -1.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 0.99370 0.11203 -0.00000 0.99370 0.11203 0.00000 0.94397 0.33004 -0.00000 0.94397 0.33004 0.00000 0.84663 0.53217 -0.00000 0.84663 0.53217 0.00000 0.70710 0.70712 -0.00000 0.70710 0.70712 0.00000 0.53218 0.84663 -0.00000 0.53218 0.84663 0.00000 0.33005 0.94396 -0.00000 0.33005 0.94396 0.00000 0.11203 0.99371 -0.00000 -0.33005 0.94396 0.00000 -0.33005 0.94396 0.00000 -0.53218 0.84663 0.00000 -0.53218 0.84663 0.00000 -0.70710 0.70711 0.00000 -0.70710 0.70711 0.00000 -0.84663 0.53217 0.00000 -0.84663 0.53217 0.00000 -0.94397 0.33003 0.00000 -0.94397 0.33003 0.00000 -0.99370 0.11203 0.00000 -0.99370 0.11203 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -0.94397 -0.33003 0.00000 -0.99371 -0.11202 -0.00000 -0.99371 -0.11202 0.00000 -0.84637 -0.53260 -0.00000 -0.84663 -0.53217 0.00000 -0.94397 -0.33003 -0.00000 -0.84669 -0.53208 -0.00000 -0.70710 -0.70711 0.00000 -0.70710 -0.70711 -0.00000 -0.53218 -0.84663 0.00000 -0.53218 -0.84663 -0.00000 -0.33001 -0.94398 0.00000 -0.33001 -0.94398 -0.00000 -0.11202 -0.99371 0.00000 0.33001 -0.94398 0.00000 0.33001 -0.94398 0.00000 0.53218 -0.84663 0.00000 0.53218 -0.84663 0.00000 0.70710 -0.70712 0.00000 0.70710 -0.70712 0.00000 0.84669 -0.53208 0.00000 0.84663 -0.53217 -0.00000 0.84637 -0.53260 0.00000 0.94397 -0.33004 0.00000 0.94397 -0.33004 0.00000 0.99371 -0.11202 0.00000 0.99371 -0.11202 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 0.99995 0.00000 0.01037 0.99995 0.00000 0.01037 0.82266 0.00000 0.56853 0.82266 0.00000 0.56853 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 0.76394 -0.00012 -0.64529 0.75986 0.00000 -0.65009 -0.76131 0.00000 -0.64839 -0.76131 -0.00000 -0.64839 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -0.82235 0.00005 0.56898 -0.82334 0.00000 0.56754 -0.99993 0.00000 0.01180 -0.99994 -0.00002 0.01051 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.99995 -0.00001 0.01037 0.99996 0.00000 0.00946 0.82266 0.00000 0.56853 0.82315 0.00002 0.56783 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 0.76393 -0.00007 -0.64530 0.76153 0.00000 -0.64813 -0.76131 0.00000 -0.64839 -0.76394 0.00008 -0.64529 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -0.82315 0.00000 0.56783 -0.82315 0.00000 0.56783 -0.99996 0.00000 0.00945 -0.99996 0.00000 0.00945 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.59810 0.40825 0.68963 -0.91055 0.40825 0.06470 -0.91052 -0.40828 0.06470 -0.91052 -0.40828 0.06470 0.59810 -0.40828 0.68960 0.59810 0.40825 0.68963 0.75433 0.57735 -0.31245 -0.31245 0.57732 -0.75433 -0.91055 0.40825 0.06470 -0.91055 0.40825 0.06470 0.59810 0.40825 0.68963 0.75433 0.57735 -0.31245 0.97205 -0.20069 -0.12180 0.56850 -0.81249 -0.12879 -0.31089 -0.81252 -0.49306 -0.31089 -0.81252 -0.49306 -0.60118 -0.20069 -0.77346 0.97205 -0.20069 -0.12180 0.56850 -0.81249 -0.12879 0.59810 -0.40828 0.68960 -0.91052 -0.40828 0.06470 -0.91052 -0.40828 0.06470 -0.31089 -0.81252 -0.49306 0.56850 -0.81249 -0.12879 0.75433 0.57735 -0.31245 0.97205 -0.20069 -0.12180 -0.60118 -0.20069 -0.77346 -0.60118 -0.20069 -0.77346 -0.31245 0.57732 -0.75433 0.75433 0.57735 -0.31245 0.97205 -0.20069 -0.12180 0.75433 0.57735 -0.31245 0.59810 0.40825 0.68963 0.59810 -0.40828 0.68960 0.56850 -0.81249 -0.12879 0.97205 -0.20069 -0.12180 0.59810 -0.40828 0.68960 0.97205 -0.20069 -0.12180 0.59810 0.40825 0.68963 -0.60118 -0.20069 -0.77346 -0.91055 0.40825 0.06470 -0.31245 0.57732 -0.75433 -0.91052 -0.40828 0.06470 -0.91055 0.40825 0.06470 -0.60118 -0.20069 -0.77346 -0.91052 -0.40828 0.06470 -0.60118 -0.20069 -0.77346 -0.31089 -0.81252 -0.49306 0.92386 0.00003 0.38267 0.92386 0.00000 0.38267 0.92386 0.00000 0.38267 0.92386 0.00003 0.38267 0.92386 0.00000 0.38267 0.92386 0.00003 0.38267 0.92386 0.00003 0.38267 0.92386 0.00003 0.38267 0.92386 0.00009 0.38267 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.76678 0.00000 0.64191 0.76604 0.00008 0.64279 0.00000 0.00000 1.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.70711 -0.00000 -0.70711 -0.70711 0.00000 -0.70711 0.70711 0.00000 -0.70711 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 1.00000 0.00000 -0.76678 -0.00010 0.64191 -0.76274 0.00000 0.64670 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.76273 0.00000 0.64671 0.76700 0.00011 0.64164 -0.70711 -0.00000 -0.70711 -0.70711 0.00000 -0.70711 0.70711 0.00000 -0.70711 0.70711 0.00000 -0.70711 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.59395 0.53954 0.59670 0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 -0.59670 0.59395 0.53954 -0.59670 0.59395 0.53954 -0.59670 0.59395 0.53954 0.59670 -0.59395 0.53954 0.59670 -0.59395 0.53954 0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 0.59670 0.59395 0.53954 -0.59670 0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 0.59395 0.53954 -0.59670 0.59395 0.53954 0.59670 -0.59395 0.53954 0.59670 -0.59395 0.53954 0.59670 -0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 -0.59670 0.59395 0.53954 -0.59670 0.59395 0.53954 -0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 -0.59670 0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 0.59395 0.53954 -0.59670 -0.59395 0.53954 0.59670 -0.59395 0.53954 0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 -0.59395 0.53954 0.59670 -0.59395 0.53954 0.59670 -0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 -0.59670 0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 0.59395 0.53954 -0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 -0.59670 0.59395 0.53954 -0.59670 0.59395 0.53954 -0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 -0.59395 0.53954 0.59670 -0.59395 0.53954 0.59670 -0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 -0.59395 0.53954 0.59670 -0.59395 0.53954 0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 -0.59670 0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 0.59395 0.53954 -0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 -0.59670 0.59395 0.53954 -0.59670 0.59395 0.53954 -0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 -0.59395 0.53954 0.59670 -0.59395 0.53954 0.59670 -0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 0.59395 0.53954 0.59670 -0.59395 0.53954 0.59670 -0.59395 0.53954 0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 -0.59670 -0.59395 0.53954 0.59670 -0.55974 0.61336 -0.55718 -0.55974 0.61336 0.55718 0.55974 0.61336 0.55718 0.55974 0.61336 0.55718 0.55974 0.61336 -0.55718 -0.55974 0.61336 -0.55718 -0.55974 0.61336 -0.55718 -0.55974 0.61336 0.55718 0.55974 0.61336 0.55718 0.55974 0.61336 0.55718 0.55974 0.61336 -0.55718 -0.55974 0.61336 -0.55718 0.55974 0.61336 -0.55718 0.55974 0.61336 -0.55718 0.55974 0.61336 0.55718 0.55974 0.61336 0.55718 0.55974 0.61336 0.55718 0.55974 0.61336 -0.55718 -0.55974 0.61336 -0.55718 -0.55974 0.61336 -0.55718 0.55974 0.61336 -0.55718 0.55974 0.61336 -0.55718 0.55974 0.61336 -0.55718 -0.55974 0.61336 -0.55718 -0.55974 0.61336 -0.55718 -0.55974 0.61336 0.55718 -0.55974 0.61336 0.55718 -0.55974 0.61336 0.55718 -0.55974 0.61336 -0.55718 -0.55974 0.61336 -0.55718 -0.55974 0.61336 0.55718 0.55974 0.61336 0.55718 0.55974 0.61336 0.55718 0.55974 0.61336 0.55718 -0.55974 0.61336 0.55718 -0.55974 0.61336 0.55718 0.54015 0.54778 0.63884 -0.54015 0.54778 0.63884 -0.54015 -0.54778 0.63884 -0.54015 -0.54778 0.63884 0.54015 -0.54778 0.63884 0.54015 0.54778 0.63884 0.54015 0.54778 0.63884 -0.54015 0.54778 0.63884 -0.54015 -0.54778 0.63884 -0.54015 -0.54778 0.63884 0.54015 -0.54778 0.63884 0.54015 0.54778 0.63884 0.54015 -0.54778 0.63884 0.54015 -0.54778 0.63884 -0.54015 -0.54778 0.63884 -0.54015 -0.54778 0.63884 -0.54015 -0.54778 0.63884 0.54015 -0.54778 0.63884 -0.54015 0.54778 0.63884 -0.54015 0.54778 0.63884 -0.54015 -0.54778 0.63884 -0.54015 -0.54778 0.63884 -0.54015 -0.54778 0.63884 -0.54015 0.54778 0.63884 0.54015 0.54778 0.63884 -0.54015 0.54778 0.63884 -0.54015 0.54778 0.63884 -0.54015 0.54778 0.63884 0.54015 0.54778 0.63884 0.54015 0.54778 0.63884 0.54015 0.54778 0.63884 0.54015 0.54778 0.63884 0.54015 -0.54778 0.63884 0.54015 -0.54778 0.63884 0.54015 -0.54778 0.63884 0.54015 0.54778 0.63884 -0.60823 -0.60347 0.51558 0.59090 -0.60775 0.53047 0.59154 0.60662 0.53105 0.59154 0.60662 0.53105 -0.60814 0.60366 0.51549 -0.60823 -0.60347 0.51558 -0.60149 -0.60695 0.51939 0.59838 -0.60317 0.52736 0.59838 0.60317 0.52736 0.59838 0.60317 0.52736 -0.60073 0.60823 0.51875 -0.60149 -0.60695 0.51939 -0.60823 -0.60347 0.51558 -0.60149 -0.60695 0.51939 0.59838 -0.60317 0.52736 0.59838 -0.60317 0.52736 0.59090 -0.60775 0.53047 -0.60823 -0.60347 0.51558 0.59838 -0.60317 0.52736 0.59838 0.60317 0.52736 0.59154 0.60662 0.53105 0.59154 0.60662 0.53105 0.59090 -0.60775 0.53047 0.59838 -0.60317 0.52736 -0.60823 -0.60347 0.51558 -0.60814 0.60366 0.51549 -0.60073 0.60823 0.51875 -0.60073 0.60823 0.51875 -0.60149 -0.60695 0.51939 -0.60823 -0.60347 0.51558 -0.60814 0.60366 0.51549 0.59154 0.60662 0.53105 0.59838 0.60317 0.52736 0.59838 0.60317 0.52736 -0.60073 0.60823 0.51875 -0.60814 0.60366 0.51549 0.51045 -0.61226 -0.60375 0.51045 0.61226 -0.60375 0.51045 0.61226 0.60375 0.51045 0.61226 0.60375 0.51045 -0.61226 0.60375 0.51045 -0.61226 -0.60375 -0.63884 0.54778 -0.54015 -0.63884 0.54778 0.54015 0.51045 0.61226 0.60375 0.51045 0.61226 0.60375 0.51045 0.61226 -0.60375 -0.63884 0.54778 -0.54015 -0.63884 -0.54778 -0.54015 -0.63884 0.54778 -0.54015 0.51045 0.61226 -0.60375 0.51045 0.61226 -0.60375 0.51045 -0.61226 -0.60375 -0.63884 -0.54778 -0.54015 -0.63884 -0.54778 -0.54015 -0.63884 -0.54778 0.54015 -0.63884 0.54778 0.54015 -0.63884 0.54778 0.54015 -0.63884 0.54778 -0.54015 -0.63884 -0.54778 -0.54015 -0.63884 -0.54778 0.54015 0.51045 -0.61226 0.60375 0.51045 0.61226 0.60375 0.51045 0.61226 0.60375 -0.63884 0.54778 0.54015 -0.63884 -0.54778 0.54015 0.51045 -0.61226 -0.60375 0.51045 -0.61226 0.60375 -0.63884 -0.54778 0.54015 -0.63884 -0.54778 0.54015 -0.63884 -0.54778 -0.54015 0.51045 -0.61226 -0.60375 0.63884 0.54778 0.54015 -0.51045 0.61226 0.60375 -0.51045 -0.61226 0.60375 -0.51045 -0.61226 0.60375 0.63884 -0.54778 0.54015 0.63884 0.54778 0.54015 -0.51045 0.61226 0.60375 -0.51045 0.61226 -0.60375 -0.51045 -0.61226 -0.60375 -0.51045 -0.61226 -0.60375 -0.51045 -0.61226 0.60375 -0.51045 0.61226 0.60375 0.63884 0.54778 0.54015 0.63884 -0.54778 0.54015 0.63884 -0.54778 -0.54015 0.63884 -0.54778 -0.54015 0.63884 0.54778 -0.54015 0.63884 0.54778 0.54015 0.63884 -0.54778 0.54015 -0.51045 -0.61226 0.60375 -0.51045 -0.61226 -0.60375 -0.51045 -0.61226 -0.60375 0.63884 -0.54778 -0.54015 0.63884 -0.54778 0.54015 0.63884 0.54778 -0.54015 0.63884 -0.54778 -0.54015 -0.51045 -0.61226 -0.60375 -0.51045 -0.61226 -0.60375 -0.51045 0.61226 -0.60375 0.63884 0.54778 -0.54015 0.63884 0.54778 0.54015 0.63884 0.54778 -0.54015 -0.51045 0.61226 -0.60375 -0.51045 0.61226 -0.60375 -0.51045 0.61226 0.60375 0.63884 0.54778 0.54015 0.00000 1.00000 0.00027 0.00000 -1.00000 0.00027 0.00000 0.00000 1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.34202 0.00000 0.93969 -0.34202 0.00000 0.93969 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.34202 0.00000 -0.93969 0.34202 0.00000 -0.93969 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.34202 0.00000 0.93969 -0.34202 0.00000 0.93969 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.34202 0.00000 -0.93969 0.34202 0.00000 -0.93969 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 -0.34202 0.00000 -0.93969 -0.34202 0.00000 -0.93969 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.34202 0.00000 0.93969 0.34202 0.00000 0.93969 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.34202 0.00000 -0.93969 -0.34202 0.00000 -0.93969 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.34202 0.00000 0.93969 0.34202 0.00000 0.93969 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.99148 0.13024 -0.00000 0.99148 0.13024 0.00000 0.92378 0.38292 -0.00000 0.92378 0.38292 0.00000 0.79304 0.60917 -0.00000 0.79304 0.60917 0.00000 0.60916 0.79305 -0.00000 0.60916 0.79305 0.00000 0.38287 0.92380 -0.00000 0.38287 0.92380 0.00000 0.13029 0.99148 -0.00000 0.13029 0.99148 0.00000 0.13029 -0.99148 0.00000 0.13029 -0.99148 0.00000 0.38287 -0.92380 0.00000 0.38287 -0.92380 0.00000 0.60916 -0.79305 0.00000 0.60916 -0.79305 0.00000 0.79304 -0.60917 0.00000 0.79304 -0.60917 0.00000 0.92378 -0.38292 0.00000 0.92378 -0.38292 0.00000 0.99148 -0.13024 0.00000 0.99148 -0.13024 0.00000 -0.99147 -0.13030 0.00000 -0.99147 -0.13030 -0.00000 -0.92378 -0.38292 0.00000 -0.92378 -0.38292 -0.00000 -0.79307 -0.60913 0.00000 -0.79307 -0.60913 -0.00000 -0.60913 -0.79307 0.00000 -0.60913 -0.79307 -0.00000 -0.38287 -0.92380 0.00000 -0.38287 -0.92380 -0.00000 -0.13030 -0.99147 0.00000 -0.13030 -0.99147 -0.00000 -0.13030 0.99147 0.00000 -0.13030 0.99147 0.00000 -0.38287 0.92380 0.00000 -0.38287 0.92380 0.00000 -0.60913 0.79307 0.00000 -0.60913 0.79307 0.00000 -0.79307 0.60913 0.00000 -0.79307 0.60913 0.00000 -0.92378 0.38292 0.00000 -0.92378 0.38292 0.00000 -0.99147 0.13030 0.00000 -0.99147 0.13030 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -0.70711 0.00000 0.70711 -0.70711 0.00000 0.70711 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.70711 0.00000 0.70711 0.70711 -0.00000 0.70711 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 0.70711 0.00000 -0.70711 0.70711 0.00000 -0.70711 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.70711 0.00000 -0.70711 -0.70711 0.00000 -0.70711 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -0.70711 0.00000 0.70710 -0.70711 0.00000 0.70710 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.70711 0.00000 0.70710 0.70711 -0.00000 0.70710 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 0.70711 0.00000 -0.70711 0.70711 0.00000 -0.70711 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.70711 0.00000 -0.70711 -0.70711 0.00000 -0.70711 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -0.70711 0.00000 0.70711 -0.70711 0.00000 0.70711 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.70711 0.00000 0.70711 0.70711 -0.00000 0.70711 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 0.70711 0.00000 -0.70711 0.70711 0.00000 -0.70711 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.70711 0.00000 -0.70711 -0.70711 0.00000 -0.70711 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -0.70711 0.00000 0.70711 -0.70711 0.00000 0.70711 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.70711 0.00000 0.70711 0.70711 -0.00000 0.70711 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 0.70711 0.00000 -0.70711 0.70711 0.00000 -0.70711 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.70711 0.00000 -0.70711 -0.70711 0.00000 -0.70711 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.70711 0.00000 0.70711 0.70711 -0.00000 0.70711 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 0.70711 0.00000 -0.70711 0.70711 0.00000 -0.70711 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.70711 0.00000 -0.70711 -0.70711 0.00000 -0.70711 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -0.70711 0.00000 0.70711 -0.70711 0.00000 0.70711 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.70711 0.00000 0.70711 -0.70711 0.00000 0.70711 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -0.70711 0.00000 -0.70711 -0.70711 -0.00000 -0.70711 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.70711 0.00000 -0.70711 0.70711 0.00000 -0.70711 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 0.70711 0.00000 0.70711 0.70711 0.00000 0.70711 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.65342 0.75699 0.00000 -0.65342 0.75699 0.00000 -0.86972 -0.49355 0.00000 -0.86972 -0.49355 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.99314 0.11693 -0.00000 0.99314 0.11693 0.00000 0.93796 0.34676 -0.00000 0.93796 0.34676 0.00000 0.83175 0.55515 -0.00000 0.83175 0.55515 0.00000 0.67888 0.73425 -0.00000 0.67888 0.73425 0.00000 0.48928 0.87213 -0.00000 0.48928 0.87213 0.00000 0.26998 0.96287 -0.00000 0.26998 0.96287 0.00000 0.04029 0.99919 -0.00000 0.04029 0.99919 0.00000 -0.19565 0.98067 0.00000 -0.19565 0.98067 0.00000 -0.41891 0.90803 0.00000 -0.41891 0.90803 0.00000 -0.61920 0.78523 0.00000 -0.61920 0.78523 0.00000 -0.70711 0.70711 0.00000 -0.70711 0.70711 0.00000 -0.77980 0.62603 0.00000 -0.77980 0.62603 0.00000 -0.89714 0.44175 0.00000 -0.89714 0.44175 0.00000 -0.97174 0.23604 0.00000 -0.97174 0.23604 0.00000 -0.99979 0.02059 0.00000 -0.99979 0.02059 0.00000 -0.98031 -0.19748 0.00000 -0.98031 -0.19748 -0.00000 -0.91412 -0.40545 0.00000 -0.91412 -0.40545 -0.00000 -0.86442 -0.50277 0.00000 -0.86442 -0.50277 0.00000 -0.79232 -0.61011 0.00000 -0.79232 -0.61011 -0.00000 -0.60762 -0.79423 0.00000 -0.60762 -0.79423 -0.00000 -0.37999 -0.92499 0.00000 -0.37999 -0.92499 -0.00000 -0.13067 -0.99143 0.00000 -0.13067 -0.99143 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.13017 -0.99149 0.00000 0.13017 -0.99149 0.00000 0.38322 -0.92366 0.00000 0.38322 -0.92366 0.00000 0.60916 -0.79305 0.00000 0.60916 -0.79305 0.00000 0.79304 -0.60917 0.00000 0.79304 -0.60917 0.00000 0.92365 -0.38324 0.00000 0.92365 -0.38324 0.00000 0.99150 -0.13013 0.00000 0.99150 -0.13013 0.00000 0.94390 0.33024 -0.00000 0.94390 0.33024 0.00000 0.84684 0.53184 -0.00000 0.84684 0.53184 0.00000 0.70714 0.70707 -0.00000 0.70714 0.70707 0.00000 0.53181 0.84686 -0.00000 0.53181 0.84686 0.00000 0.33024 0.94390 -0.00000 0.33024 0.94390 0.00000 0.11167 0.99374 -0.00000 0.11167 0.99374 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.11167 0.99374 0.00000 -0.11167 0.99374 0.00000 -0.33026 0.94389 0.00000 -0.33026 0.94389 0.00000 -0.53181 0.84686 0.00000 -0.53181 0.84686 0.00000 -0.70714 0.70707 0.00000 -0.70714 0.70707 0.00000 -0.84684 0.53184 0.00000 -0.84684 0.53184 0.00000 -0.94390 0.33024 0.00000 -0.94390 0.33024 0.00000 -0.99149 0.13018 0.00000 -0.99149 0.13018 0.00000 -0.92365 0.38324 0.00000 -0.92365 0.38324 0.00000 -0.79303 0.60919 0.00000 -0.79303 0.60919 0.00000 -0.60920 0.79301 0.00000 -0.60920 0.79301 0.00000 -0.38322 0.92366 0.00000 -0.38322 0.92366 0.00000 -0.13018 0.99149 0.00000 -0.13018 0.99149 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.11167 0.99374 -0.00000 0.11167 0.99374 0.00000 0.33026 0.94389 -0.00000 0.33026 0.94389 0.00000 0.53181 0.84686 -0.00000 0.53181 0.84686 0.00000 0.70714 0.70707 -0.00000 0.70714 0.70707 0.00000 0.84684 0.53184 -0.00000 0.84684 0.53184 0.00000 0.94390 0.33024 -0.00000 0.94390 0.33024 0.00000 0.99374 0.11169 -0.00000 0.99374 0.11169 0.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.99314 0.11693 -0.00000 0.99314 0.11693 0.00000 0.93796 0.34676 -0.00000 0.93796 0.34676 0.00000 0.83175 0.55515 -0.00000 0.83175 0.55515 0.00000 0.67888 0.73425 -0.00000 0.67888 0.73425 0.00000 0.48928 0.87213 -0.00000 0.48928 0.87213 0.00000 0.26998 0.96287 -0.00000 0.26998 0.96287 0.00000 0.04029 0.99919 -0.00000 0.04029 0.99919 0.00000 -0.19565 0.98067 0.00000 -0.19565 0.98067 0.00000 -0.41891 0.90803 0.00000 -0.41891 0.90803 0.00000 -0.61920 0.78523 0.00000 -0.61920 0.78523 0.00000 -0.70711 0.70711 0.00000 -0.70711 0.70711 0.00000 -0.77980 0.62603 0.00000 -0.77980 0.62603 0.00000 -0.89714 0.44175 0.00000 -0.89714 0.44175 0.00000 -0.97174 0.23604 0.00000 -0.97174 0.23604 0.00000 -0.99979 0.02059 0.00000 -0.99979 0.02059 0.00000 -0.98031 -0.19748 0.00000 -0.98031 -0.19748 -0.00000 -0.91412 -0.40545 0.00000 -0.91412 -0.40545 -0.00000 -0.86442 -0.50277 0.00000 -0.86442 -0.50277 0.00000 -0.79232 -0.61011 0.00000 -0.79232 -0.61011 -0.00000 -0.60762 -0.79423 0.00000 -0.60762 -0.79423 -0.00000 -0.37999 -0.92499 0.00000 -0.37999 -0.92499 -0.00000 -0.13067 -0.99143 0.00000 -0.13067 -0.99143 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.13017 -0.99149 0.00000 0.13017 -0.99149 0.00000 0.38322 -0.92366 0.00000 0.38322 -0.92366 0.00000 0.60916 -0.79305 0.00000 0.60916 -0.79305 0.00000 0.79304 -0.60917 0.00000 0.79304 -0.60917 0.00000 0.92365 -0.38324 0.00000 0.92365 -0.38324 0.00000 0.99150 -0.13013 0.00000 0.99150 -0.13013 0.00000 0.94390 0.33024 -0.00000 0.94390 0.33024 0.00000 0.84684 0.53184 -0.00000 0.84684 0.53184 0.00000 0.70714 0.70707 -0.00000 0.70714 0.70707 0.00000 0.53181 0.84686 -0.00000 0.53181 0.84686 0.00000 0.33024 0.94390 -0.00000 0.33024 0.94390 0.00000 0.11167 0.99374 -0.00000 0.11167 0.99374 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.11167 0.99374 0.00000 -0.11167 0.99374 0.00000 -0.33026 0.94389 0.00000 -0.33026 0.94389 0.00000 -0.53181 0.84686 0.00000 -0.53181 0.84686 0.00000 -0.70714 0.70707 0.00000 -0.70714 0.70707 0.00000 -0.84684 0.53184 0.00000 -0.84684 0.53184 0.00000 -0.94390 0.33024 0.00000 -0.94390 0.33024 0.00000 -0.99149 0.13018 0.00000 -0.99149 0.13018 0.00000 -0.92365 0.38324 0.00000 -0.92365 0.38324 0.00000 -0.79303 0.60919 0.00000 -0.79303 0.60919 0.00000 -0.60920 0.79301 0.00000 -0.60920 0.79301 0.00000 -0.38322 0.92366 0.00000 -0.38322 0.92366 0.00000 -0.13018 0.99149 0.00000 -0.13018 0.99149 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.11167 0.99374 -0.00000 0.11167 0.99374 0.00000 0.33026 0.94389 -0.00000 0.33026 0.94389 0.00000 0.53181 0.84686 -0.00000 0.53181 0.84686 0.00000 0.70714 0.70707 -0.00000 0.70714 0.70707 0.00000 0.84684 0.53184 -0.00000 0.84684 0.53184 0.00000 0.94390 0.33024 -0.00000 0.94390 0.33024 0.00000 0.99374 0.11169 -0.00000 0.99374 0.11169 0.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.99314 0.11693 -0.00000 0.99314 0.11693 0.00000 0.93796 0.34676 -0.00000 0.93796 0.34676 0.00000 0.83175 0.55515 -0.00000 0.83175 0.55515 0.00000 0.67888 0.73425 -0.00000 0.67888 0.73425 0.00000 0.48928 0.87213 -0.00000 0.48928 0.87213 0.00000 0.26998 0.96287 -0.00000 0.26998 0.96287 0.00000 0.04029 0.99919 -0.00000 0.04029 0.99919 0.00000 -0.19565 0.98067 0.00000 -0.19565 0.98067 0.00000 -0.41891 0.90803 0.00000 -0.41891 0.90803 0.00000 -0.61920 0.78523 0.00000 -0.61920 0.78523 0.00000 -0.70711 0.70711 0.00000 -0.70711 0.70711 0.00000 -0.77980 0.62603 0.00000 -0.77980 0.62603 0.00000 -0.89714 0.44175 0.00000 -0.89714 0.44175 0.00000 -0.97174 0.23604 0.00000 -0.97174 0.23604 0.00000 -0.99979 0.02059 0.00000 -0.99979 0.02059 0.00000 -0.98031 -0.19748 0.00000 -0.98031 -0.19748 -0.00000 -0.91412 -0.40545 0.00000 -0.91412 -0.40545 -0.00000 -0.86442 -0.50277 0.00000 -0.86442 -0.50277 0.00000 -0.79232 -0.61011 0.00000 -0.79232 -0.61011 -0.00000 -0.60762 -0.79423 0.00000 -0.60762 -0.79423 -0.00000 -0.37999 -0.92499 0.00000 -0.37999 -0.92499 -0.00000 -0.13067 -0.99143 0.00000 -0.13067 -0.99143 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.13017 -0.99149 0.00000 0.13017 -0.99149 0.00000 0.38322 -0.92366 0.00000 0.38322 -0.92366 0.00000 0.60916 -0.79305 0.00000 0.60916 -0.79305 0.00000 0.79304 -0.60917 0.00000 0.79304 -0.60917 0.00000 0.92365 -0.38324 0.00000 0.92365 -0.38324 0.00000 0.99150 -0.13013 0.00000 0.99150 -0.13013 0.00000 0.94390 0.33024 -0.00000 0.94390 0.33024 0.00000 0.84684 0.53184 -0.00000 0.84684 0.53184 0.00000 0.70714 0.70707 -0.00000 0.70714 0.70707 0.00000 0.53181 0.84686 -0.00000 0.53181 0.84686 0.00000 0.33024 0.94390 -0.00000 0.33024 0.94390 0.00000 0.11167 0.99374 -0.00000 0.11167 0.99374 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.11167 0.99374 0.00000 -0.11167 0.99374 0.00000 -0.33026 0.94389 0.00000 -0.33026 0.94389 0.00000 -0.53181 0.84686 0.00000 -0.53181 0.84686 0.00000 -0.70714 0.70707 0.00000 -0.70714 0.70707 0.00000 -0.84684 0.53184 0.00000 -0.84684 0.53184 0.00000 -0.94390 0.33024 0.00000 -0.94390 0.33024 0.00000 -0.99149 0.13018 0.00000 -0.99149 0.13018 0.00000 -0.92365 0.38324 0.00000 -0.92365 0.38324 0.00000 -0.79303 0.60919 0.00000 -0.79303 0.60919 0.00000 -0.60920 0.79301 0.00000 -0.60920 0.79301 0.00000 -0.38322 0.92366 0.00000 -0.38322 0.92366 0.00000 -0.13018 0.99149 0.00000 -0.13018 0.99149 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.11167 0.99374 -0.00000 0.11167 0.99374 0.00000 0.33026 0.94389 -0.00000 0.33026 0.94389 0.00000 0.53181 0.84686 -0.00000 0.53181 0.84686 0.00000 0.70714 0.70707 -0.00000 0.70714 0.70707 0.00000 0.84684 0.53184 -0.00000 0.84684 0.53184 0.00000 0.94390 0.33024 -0.00000 0.94390 0.33024 0.00000 0.99374 0.11169 -0.00000 0.99374 0.11169 0.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 -0.30079 -0.94552 -0.12458 -0.30079 -0.94552 -0.12459 -0.30078 -0.94552 -0.12460 -0.24837 -0.93746 -0.24389 -0.24818 -0.93741 -0.24429 -0.13140 -0.87351 -0.46873 -0.13160 -0.87366 -0.46839 -0.00579 -0.75028 -0.66110 -0.00578 -0.75026 -0.66111 0.12058 -0.57546 -0.80889 0.12058 -0.57547 -0.80889 0.23843 -0.36188 -0.90122 0.23843 -0.36187 -0.90122 0.34029 -0.12303 -0.93224 0.34029 -0.12304 -0.93224 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.92389 0.00000 -0.38266 0.79333 0.00000 -0.60879 0.79333 0.00000 -0.60879 0.60878 0.00000 -0.79334 0.60878 0.00000 -0.79334 0.38269 0.00000 -0.92387 0.38269 0.00000 -0.92387 0.13053 0.00000 -0.99144 0.13053 0.00000 -0.99144 -0.13053 0.00000 -0.99144 -0.13053 -0.00000 -0.99144 -0.38269 0.00000 -0.92388 -0.38269 -0.00000 -0.92388 -0.60879 0.00000 -0.79333 -0.60879 -0.00000 -0.79333 -0.79333 0.00000 -0.60879 -0.79333 -0.00000 -0.60879 -0.92389 0.00000 -0.38266 -0.92389 -0.00000 -0.38266 -0.99144 0.00000 -0.13054 -0.99144 -0.00000 -0.13054 -0.99144 0.00000 0.13053 -0.99144 0.00000 0.13053 -0.92388 0.00000 0.38269 -0.92388 0.00000 0.38269 -0.79337 0.00000 0.60874 -0.79337 0.00000 0.60874 -0.60873 0.00000 0.79338 -0.60873 0.00000 0.79338 -0.38269 0.00000 0.92388 -0.38269 0.00000 0.92388 -0.13053 0.00000 0.99144 -0.13053 0.00000 0.99144 0.13053 -0.00000 0.99144 0.13053 0.00000 0.99144 0.38269 -0.00000 0.92387 0.38269 0.00000 0.92387 0.60872 -0.00000 0.79338 0.60872 0.00000 0.79338 0.79337 -0.00000 0.60874 0.79337 0.00000 0.60874 0.92388 -0.00000 0.38269 0.92388 0.00000 0.38269 0.99144 -0.00000 0.13053 0.99144 0.00000 0.13053 0.99144 0.00000 -0.13054 0.99144 0.00000 -0.13054 0.92389 0.00000 -0.38266 -1.00000 0.00000 -0.00000 0.48822 0.00000 -0.87272 0.48892 0.00000 -0.87233 0.48892 0.00000 -0.87233 0.34998 0.00000 -0.93676 0.34998 0.00000 -0.93676 0.35001 0.00000 -0.93675 0.35001 0.00000 -0.93675 0.20293 0.00000 -0.97919 0.20293 0.00000 -0.97919 0.05105 0.00000 -0.99870 0.05105 0.00000 -0.99870 -0.10201 0.00000 -0.99478 -0.10201 0.00000 -0.99478 -0.10195 0.00000 -0.99479 -0.10195 0.00000 -0.99479 -0.25202 0.00000 -0.96772 -0.25202 0.00000 -0.96772 -0.25275 0.00000 -0.96753 -0.25275 -0.00000 -0.96753 -0.39733 0.00000 -0.91768 -0.39733 -0.00000 -0.91768 -0.53280 0.00000 -0.84624 -0.53280 -0.00000 -0.84624 -0.65578 0.00000 -0.75495 -0.65578 -0.00000 -0.75495 -0.76312 0.00000 -0.64626 -0.76312 0.00000 -0.64626 -0.76342 0.00000 -0.64590 -0.76342 0.00000 -0.64590 -0.76323 0.00000 -0.64613 -0.76323 -0.00000 -0.64613 -0.85298 0.00000 -0.52195 -0.85298 -0.00000 -0.52195 -0.92266 0.00000 -0.38562 -0.92266 -0.00000 -0.38562 -0.97071 0.00000 -0.24026 -0.97071 -0.00000 -0.24026 -0.99597 0.00000 -0.08966 -0.99597 0.00000 -0.08966 -0.99601 0.00000 -0.08922 -0.99601 -0.00000 -0.08922 -0.99796 0.00000 0.06379 -0.99796 0.00000 0.06379 -0.97652 0.00000 0.21543 -0.97652 0.00000 0.21543 -0.93223 0.00000 0.36187 -0.93223 0.00000 0.36187 -0.88451 0.00000 0.46652 -0.88451 0.00000 0.46652 -0.84626 0.00000 0.53277 -0.84626 0.00000 0.53277 -0.77953 0.00000 0.62637 -0.77953 0.00000 0.62637 -0.67483 0.00000 0.73798 -0.67483 0.00000 0.73798 -0.55423 0.00000 0.83237 -0.55423 0.00000 0.83237 -0.42066 0.00000 0.90722 -0.42066 0.00000 0.90722 -0.42077 0.00000 0.90717 -0.42077 0.00000 0.90717 -0.27727 0.00000 0.96079 -0.27727 0.00000 0.96079 -0.12737 0.00000 0.99186 -0.12737 0.00000 0.99186 0.02547 -0.00000 0.99968 0.02547 0.00000 0.99968 0.17788 -0.00000 0.98405 0.17788 0.00000 0.98405 0.17786 -0.00000 0.98405 0.17786 0.00000 0.98405 0.32594 -0.00000 0.94539 0.32594 0.00000 0.94539 0.46649 -0.00000 0.88453 0.46649 0.00000 0.88453 0.59602 -0.00000 0.80297 0.59602 0.00000 0.80297 0.71161 -0.00000 0.70257 0.71161 0.00000 0.70257 0.81069 -0.00000 0.58548 0.81069 0.00000 0.58548 0.81049 -0.00000 0.58575 0.81049 0.00000 0.58575 0.89043 -0.00000 0.45512 0.89043 0.00000 0.45512 0.94946 -0.00000 0.31388 0.94946 0.00000 0.31388 0.98624 -0.00000 0.16534 0.98624 0.00000 0.16534 0.98627 -0.00000 0.16511 0.98627 0.00000 0.16511 0.99992 -0.00000 0.01287 0.99992 0.00000 0.01287 0.99992 -0.00000 0.01238 0.99992 0.00000 0.01238 0.99015 0.00000 -0.13998 0.99015 0.00000 -0.13998 0.95715 0.00000 -0.28959 0.95715 0.00000 -0.28959 0.90179 0.00000 -0.43217 0.90179 0.00000 -0.43217 0.82517 0.00000 -0.56488 0.72928 0.00000 -0.68422 0.61640 0.00000 -0.78743 0.61640 0.00000 -0.78743 0.48822 0.00000 -0.87272 0.38016 -0.11481 -0.91777 0.38016 -0.11488 -0.91776 0.37857 0.14635 -0.91393 0.37858 0.14616 -0.91396 0.35114 0.39761 -0.84771 0.35120 0.39711 -0.84792 0.29990 0.62114 -0.72405 0.29986 0.62127 -0.72395 0.04396 0.99338 -0.10611 0.04399 0.99337 -0.10620 -0.05601 0.98923 0.13523 -0.05597 0.98925 0.13512 -0.15189 0.91786 0.36670 -0.15193 0.91782 0.36678 -0.23785 0.78338 0.57423 -0.23791 0.78325 0.57438 -0.30722 0.59624 0.74170 -0.30722 0.59624 0.74170 -0.35584 0.36787 0.85910 -0.35581 0.36817 0.85898 -0.38015 0.11487 0.91776 -0.38015 0.11486 0.91776 -0.37856 -0.14639 0.91393 -0.37853 -0.14673 0.91388 -0.35113 -0.39758 0.84772 -0.35122 -0.39710 0.84791 -0.29992 -0.62113 0.72405 -0.29987 -0.62126 0.72395 -0.22823 -0.80270 0.55099 -0.22828 -0.80261 0.55109 -0.14064 -0.93003 0.33952 -0.14060 -0.93006 0.33944 -0.04399 -0.99337 0.10619 -0.04397 -0.99338 0.10616 0.05598 -0.98924 -0.13515 0.05600 -0.98923 -0.13520 0.15189 -0.91786 -0.36670 0.15193 -0.91782 -0.36678 0.23786 -0.78337 -0.57424 0.23781 -0.78347 -0.57412 0.92399 -0.00027 0.38242 0.92381 0.00003 0.38284 0.92380 0.00003 0.38287 0.92392 -0.00009 0.38257 0.92403 -0.00003 0.38231 0.92390 0.00002 0.38264 0.92370 -0.00021 0.38310 0.92378 -0.00019 0.38291 0.92399 0.00021 0.38241 0.92393 0.00016 0.38256 0.92392 0.00013 0.38259 0.92381 -0.00004 0.38286 0.92373 -0.00038 0.38304 0.92397 0.00019 0.38246 0.92394 -0.00008 0.38253 0.92396 -0.00001 0.38248 0.92398 0.00060 0.38244 0.92387 -0.00008 0.38270 0.92388 -0.00020 0.38269 0.92388 -0.00015 0.38268 0.92391 -0.00036 0.38261 0.92390 0.00019 0.38263 0.92380 0.00059 0.38287 0.92388 -0.00011 0.38268 0.92393 -0.00024 0.38257 0.92399 -0.00027 0.38242 0.92380 0.00005 0.38288 0.92371 0.00006 0.38310 0.92394 -0.00017 0.38254 0.92413 -0.00007 0.38208 0.92390 0.00002 0.38264 0.92370 -0.00021 0.38310 0.92378 -0.00019 0.38291 0.92399 0.00021 0.38241 0.92393 0.00016 0.38256 0.92392 0.00013 0.38259 0.92381 -0.00004 0.38286 0.92372 -0.00044 0.38306 0.92393 0.00006 0.38255 0.92393 -0.00002 0.38257 0.92387 -0.00022 0.38271 0.92389 0.00058 0.38265 0.92385 0.00032 0.38275 0.92388 -0.00021 0.38268 0.92388 -0.00021 0.38268 0.92390 -0.00039 0.38262 0.92389 0.00023 0.38265 0.92380 0.00059 0.38286 0.92388 -0.00011 0.38268 0.92393 -0.00023 0.38257 0.35437 -0.37747 -0.85553 0.30951 -0.58809 -0.74723 0.30951 -0.58809 -0.74723 0.24671 -0.76444 -0.59562 0.24672 -0.76443 -0.59563 0.16963 -0.89640 -0.40952 0.16963 -0.89639 -0.40952 0.08239 -0.97655 -0.19890 0.08238 -0.97655 -0.19890 -0.00937 -0.99970 0.02263 -0.00937 -0.99970 0.02263 -0.10055 -0.96487 0.24274 -0.10055 -0.96487 0.24274 -0.18608 -0.87381 0.44925 -0.32016 -0.54776 0.77295 -0.32016 -0.54776 0.77295 -0.36101 -0.33175 0.87156 -0.36109 -0.33142 0.87165 -0.38093 -0.09634 0.91957 -0.38091 -0.09657 0.91956 -0.37865 0.14501 0.91411 -0.37864 0.14486 0.91414 -0.35442 0.37715 0.85566 -0.35442 0.37715 0.85565 -0.30951 0.58810 0.74722 -0.30951 0.58811 0.74721 -0.24671 0.76444 0.59562 -0.24672 0.76443 0.59564 -0.16962 0.89640 0.40952 -0.16958 0.89647 0.40937 -0.08239 0.97655 0.19890 -0.08241 0.97653 0.19897 0.00938 0.99970 -0.02264 0.00938 0.99970 -0.02264 0.10054 0.96487 -0.24273 0.10054 0.96487 -0.24274 0.18608 0.87382 -0.44924 0.18608 0.87382 -0.44924 0.26067 0.73213 -0.62931 0.26067 0.73213 -0.62932 0.32016 0.54776 -0.77295 0.32016 0.54777 -0.77295 0.36101 0.33175 -0.87156 0.36101 0.33173 -0.87156 0.38090 0.09620 -0.91960 0.38091 0.09622 -0.91959 0.37866 -0.14451 -0.91418 0.37866 -0.14452 -0.91418 0.35437 -0.37746 -0.85554 0.92394 0.00008 0.38253 0.92393 0.00011 0.38256 0.92388 0.00003 0.38268 0.92375 0.00022 0.38299 0.92373 0.00018 0.38303 0.92387 0.00005 0.38271 0.92392 0.00019 0.38258 0.92393 0.00018 0.38257 0.92384 -0.00011 0.38277 0.92385 -0.00011 0.38276 0.92392 0.00024 0.38258 0.92387 0.00021 0.38270 0.92384 -0.00001 0.38278 0.92377 -0.00010 0.38296 0.92377 -0.00006 0.38295 0.92379 -0.00003 0.38291 0.92378 -0.00029 0.38293 0.92392 0.00013 0.38258 0.92392 0.00027 0.38259 0.92376 -0.00044 0.38296 0.92376 -0.00043 0.38296 0.92385 0.00031 0.38275 0.92389 0.00008 0.38267 0.92400 0.00009 0.38239 0.92397 0.00022 0.38246 0.92382 0.00014 0.38282 0.92385 0.00004 0.38275 0.92395 0.00013 0.38252 0.92395 0.00013 0.38252 0.92383 -0.00004 0.38281 0.92376 0.00006 0.38298 0.92379 0.00013 0.38290 0.92387 0.00005 0.38271 0.92393 0.00022 0.38255 0.92392 0.00023 0.38260 0.92382 -0.00011 0.38283 0.92385 -0.00011 0.38277 0.92389 0.00011 0.38265 0.92394 0.00014 0.38254 0.92394 0.00015 0.38254 0.92369 -0.00016 0.38315 0.92367 -0.00029 0.38318 0.92386 0.00007 0.38273 0.92386 -0.00001 0.38274 0.92390 0.00012 0.38263 0.92390 0.00018 0.38264 0.92378 -0.00037 0.38292 -0.28601 -0.66439 0.69050 -0.28601 -0.66440 0.69049 -0.33545 -0.48128 0.80985 -0.33545 -0.48126 0.80985 -0.36802 -0.27419 0.88847 -0.36808 -0.27388 0.88854 -0.38218 -0.05301 0.92257 -0.38214 -0.05335 0.92257 -0.37709 0.17026 0.91039 -0.37709 0.17026 0.91039 -0.25420 0.74751 0.61369 -0.25420 0.74750 0.61369 -0.18415 0.87660 0.44458 -0.18415 0.87660 0.44459 -0.10485 0.96173 0.25313 -0.10485 0.96173 0.25313 -0.02038 0.99858 0.04919 -0.02038 0.99858 0.04919 0.06506 0.98544 -0.15707 0.06506 0.98544 -0.15707 0.14753 0.92270 -0.35618 0.14753 0.92270 -0.35617 0.22230 0.81398 -0.53667 0.22230 0.81398 -0.53667 0.28607 0.66421 -0.69064 0.28604 0.66439 -0.69049 0.33548 0.48127 -0.80984 0.33550 0.48101 -0.80998 0.36801 0.27419 -0.88847 0.36801 0.27419 -0.88847 0.38214 0.05335 -0.92256 0.38214 0.05335 -0.92257 0.37707 -0.17059 -0.91034 0.37707 -0.17058 -0.91034 0.35317 -0.38510 -0.85263 0.35317 -0.38510 -0.85263 0.31145 -0.58104 -0.75192 0.31154 -0.58082 -0.75206 0.25422 -0.74750 -0.61368 0.25413 -0.74765 -0.61354 0.18415 -0.87660 -0.44458 0.18422 -0.87653 -0.44470 0.10486 -0.96173 -0.25313 0.10486 -0.96173 -0.25313 0.02038 -0.99858 -0.04919 0.02037 -0.99858 -0.04918 -0.38367 -0.12094 -0.91552 -0.38371 -0.12078 -0.91552 -0.38013 0.03788 -0.92416 -0.38018 0.03804 -0.92413 -0.39017 0.19441 -0.89998 -0.39009 0.19423 -0.90006 -0.41322 0.34127 -0.84427 -0.41340 0.34156 -0.84406 -0.44837 0.47118 -0.75957 -0.44848 0.47130 -0.75944 -0.49361 0.57731 -0.65043 -0.49334 0.57712 -0.65080 -0.54660 0.65453 -0.52233 -0.54654 0.65451 -0.52241 -0.60503 0.69902 -0.38119 -0.60501 0.69902 -0.38123 -0.66569 0.70836 -0.23471 -0.66551 0.70844 -0.23497 -0.72545 0.68233 -0.09032 -0.72576 0.68205 -0.08990 -0.78187 0.62177 0.04561 -0.78193 0.62169 0.04568 -0.83160 0.53010 0.16563 -0.83146 0.53037 0.16548 -0.87212 0.41217 0.26366 -0.87225 0.41184 0.26376 -0.90174 0.27316 0.33503 -0.90160 0.27368 0.33498 -0.91866 0.12095 0.37607 -0.91875 0.12046 0.37601 -0.92230 -0.03779 0.38461 -0.92227 -0.03749 0.38472 -0.91227 -0.19445 0.36050 -0.91227 -0.19440 0.36053 -0.88919 -0.34124 0.30480 -0.88916 -0.34158 0.30449 -0.85411 -0.47131 0.21993 -0.85411 -0.47130 0.21995 -0.69744 -0.69901 -0.15799 -0.63681 -0.70838 -0.30442 -0.63677 -0.70833 -0.30462 -0.57677 -0.68213 -0.44948 -0.57675 -0.68206 -0.44962 -0.52055 -0.62169 -0.58526 -0.52058 -0.62191 -0.58500 -0.47100 -0.53051 -0.70478 -0.47099 -0.52998 -0.70519 -0.43032 -0.41179 -0.80328 -0.43028 -0.41242 -0.80297 -0.40067 -0.27330 -0.87451 -0.40065 -0.27345 -0.87448 -0.92387 0.00029 -0.38271 -0.92385 0.00023 -0.38276 -0.92388 -0.00002 -0.38267 -0.92383 -0.00021 -0.38279 -0.92386 -0.00034 -0.38274 -0.92396 0.00024 -0.38249 -0.92400 0.00004 -0.38238 -0.92398 -0.00024 -0.38245 -0.92379 0.00051 -0.38290 -0.92378 0.00000 -0.38291 -0.92389 0.00025 -0.38267 -0.92391 0.00003 -0.38261 -0.92389 -0.00001 -0.38265 -0.92389 0.00002 -0.38266 -0.92382 -0.00024 -0.38282 -0.92380 -0.00014 -0.38287 -0.92386 0.00016 -0.38274 -0.92392 -0.00012 -0.38259 -0.92393 -0.00005 -0.38257 -0.92385 0.00025 -0.38275 -0.92385 0.00036 -0.38274 -0.92393 0.00009 -0.38256 -0.92378 0.00013 -0.38293 -0.92390 -0.00027 -0.38265 -0.92389 -0.00028 -0.38266 -0.92386 -0.00021 -0.38272 -0.92388 -0.00020 -0.38267 -0.92380 0.00000 -0.38288 -0.92391 0.00012 -0.38260 -0.92394 0.00007 -0.38253 -0.92380 -0.00011 -0.38286 -0.92396 -0.00030 -0.38249 -0.92408 -0.00012 -0.38219 -0.92393 -0.00001 -0.38257 -0.92383 -0.00017 -0.38280 -0.92399 -0.00021 -0.38243 -0.92382 -0.00054 -0.38283 -0.92394 -0.00013 -0.38254 -0.92388 0.00005 -0.38268 -0.92380 -0.00001 -0.38287 -0.92388 -0.00019 -0.38268 -0.92401 -0.00005 -0.38236 -0.92395 0.00006 -0.38252 -0.92382 -0.00010 -0.38283 -0.92368 0.00007 -0.38315 -0.92383 0.00029 -0.38279 -0.92370 0.00039 -0.38313 -0.92362 0.00026 -0.38331 -0.92380 0.00021 -0.38286 -0.92374 0.00009 -0.38301 -0.92396 0.00015 -0.38249 -0.92390 0.00000 -0.38264 0.92382 0.00010 0.38282 0.92385 0.00003 0.38276 0.92392 0.00008 0.38259 0.92385 0.00019 0.38275 0.92384 0.00017 0.38278 0.92395 0.00008 0.38250 0.92391 -0.00003 0.38260 0.92385 -0.00003 0.38274 0.92382 -0.00018 0.38282 0.92381 -0.00018 0.38285 0.92385 0.00021 0.38276 0.92389 0.00028 0.38265 0.92390 0.00008 0.38264 0.92385 -0.00002 0.38275 0.92386 -0.00012 0.38272 0.92390 0.00003 0.38263 0.92392 -0.00002 0.38260 0.92390 -0.00016 0.38264 0.92384 -0.00002 0.38278 0.92384 -0.00022 0.38279 0.92383 -0.00021 0.38280 0.92381 0.00008 0.38286 0.92394 0.00000 0.38254 0.92395 -0.00008 0.38251 0.92382 -0.00009 0.38283 0.92385 -0.00017 0.38276 0.92400 -0.00005 0.38240 0.92380 0.00027 0.38286 0.92376 0.00020 0.38296 0.92394 0.00006 0.38254 0.92395 0.00007 0.38252 0.92388 0.00008 0.38268 0.92380 -0.00030 0.38287 0.92390 -0.00024 0.38264 0.92395 0.00037 0.38250 0.92380 0.00015 0.38288 0.92380 -0.00010 0.38287 0.92389 0.00011 0.38266 0.92391 -0.00010 0.38260 0.92392 -0.00006 0.38257 0.92391 0.00001 0.38262 0.92389 -0.00015 0.38266 0.92385 -0.00005 0.38276 0.92384 -0.00024 0.38277 0.92383 -0.00022 0.38280 0.92380 0.00009 0.38287 0.92392 0.00001 0.38258 0.92390 0.00010 0.38262 -0.92390 0.00001 -0.38264 -0.92388 -0.00007 -0.38269 -0.92390 -0.00017 -0.38264 -0.92392 -0.00000 -0.38259 -0.92387 0.00014 -0.38271 -0.92387 0.00014 -0.38271 -0.92388 0.00013 -0.38269 -0.92387 0.00021 -0.38270 -0.92396 0.00014 -0.38249 -0.92397 0.00008 -0.38246 -0.92379 0.00009 -0.38289 -0.92383 -0.00001 -0.38281 -0.92386 0.00001 -0.38273 -0.92394 -0.00013 -0.38255 -0.92400 -0.00004 -0.38238 -0.92387 0.00009 -0.38271 -0.92378 -0.00014 -0.38294 -0.92387 -0.00017 -0.38271 -0.92393 0.00008 -0.38257 -0.92383 0.00004 -0.38279 -0.92382 -0.00005 -0.38282 -0.92390 0.00004 -0.38265 -0.92390 0.00012 -0.38264 -0.92385 0.00001 -0.38277 -0.92386 -0.00014 -0.38273 -0.92388 -0.00007 -0.38269 -0.92390 -0.00017 -0.38264 -0.92394 0.00014 -0.38253 -0.92390 0.00025 -0.38263 -0.92391 0.00031 -0.38262 -0.92386 0.00038 -0.38273 -0.92389 -0.00006 -0.38266 -0.92395 -0.00011 -0.38252 -0.92395 -0.00011 -0.38252 -0.92380 -0.00010 -0.38287 -0.92380 -0.00009 -0.38288 -0.92387 -0.00005 -0.38270 -0.92399 -0.00027 -0.38242 -0.92406 -0.00017 -0.38225 -0.92385 0.00004 -0.38277 -0.92377 -0.00014 -0.38294 -0.92387 -0.00017 -0.38270 -0.92393 0.00008 -0.38256 -0.92392 0.00008 -0.38260 -0.92391 0.00002 -0.38261 -0.92389 0.00000 -0.38265 -0.92390 0.00002 -0.38265 -0.92390 0.00003 -0.38264 -0.03858 -0.99491 0.09313 -0.03858 -0.99490 0.09314 0.06122 -0.98712 -0.14781 0.06121 -0.98712 -0.14779 0.15704 -0.91193 -0.37912 0.15704 -0.91193 -0.37912 0.24192 -0.77484 -0.58404 0.24194 -0.77479 -0.58410 0.31043 -0.58478 -0.74945 0.31043 -0.58478 -0.74944 0.35778 -0.35487 -0.86375 0.35776 -0.35496 -0.86372 0.38073 -0.10087 -0.91917 0.38075 -0.10048 -0.91920 0.37774 0.16021 -0.91195 0.37776 0.15994 -0.91199 0.34900 0.41026 -0.84255 0.34900 0.41025 -0.84255 0.29647 0.63230 -0.71575 0.29649 0.63224 -0.71580 0.22388 0.81102 -0.54049 0.22383 0.81112 -0.54036 0.13569 0.93503 -0.32758 0.13571 0.93501 -0.32764 0.03859 0.99490 -0.09316 0.03859 0.99490 -0.09317 -0.06122 0.98712 0.14780 -0.06122 0.98712 0.14779 -0.15700 0.91197 0.37902 -0.15700 0.91197 0.37902 -0.24192 0.77484 0.58404 -0.24194 0.77479 0.58410 -0.31048 0.58458 0.74958 -0.31048 0.58458 0.74958 -0.35778 0.35487 0.86375 -0.35776 0.35499 0.86371 -0.38073 0.10087 0.91917 -0.38074 0.10073 0.91918 -0.37774 -0.16020 0.91195 -0.37774 -0.16020 0.91195 -0.34904 -0.41003 0.84265 -0.34904 -0.41003 0.84265 -0.29648 -0.63229 0.71576 -0.29650 -0.63222 0.71581 0.13581 0.93490 -0.32788 0.03854 0.99492 -0.09305 0.03854 0.99492 -0.09304 -0.06128 0.98710 0.14794 -0.06129 0.98709 0.14796 -0.15692 0.91206 0.37884 -0.15690 0.91208 0.37880 -0.24194 0.77479 0.58410 -0.24194 0.77479 0.58410 -0.31041 0.58485 0.74940 -0.31041 0.58485 0.74940 -0.35780 0.35472 0.86380 -0.35782 0.35459 0.86385 -0.38073 0.10093 0.91916 -0.38072 0.10110 0.91915 -0.37774 -0.16026 0.91194 -0.37774 -0.16030 0.91193 -0.34900 -0.41021 0.84257 -0.34901 -0.41020 0.84257 -0.29646 -0.63233 0.71573 -0.29644 -0.63241 0.71567 -0.22381 -0.81115 0.54032 -0.22383 -0.81110 0.54038 -0.13581 -0.93490 0.32788 -0.13581 -0.93491 0.32788 -0.03854 -0.99492 0.09305 -0.03854 -0.99492 0.09304 0.06128 -0.98710 -0.14794 0.06129 -0.98709 -0.14796 0.15697 -0.91201 -0.37896 0.15695 -0.91203 -0.37891 0.24188 -0.77491 -0.58395 0.24194 -0.77479 -0.58410 0.31047 -0.58464 -0.74954 0.31041 -0.58485 -0.74940 0.35776 -0.35500 -0.86370 0.35777 -0.35490 -0.86374 0.38074 -0.10061 -0.91919 0.38074 -0.10075 -0.91918 0.37776 0.15993 -0.91199 0.37776 0.15995 -0.91199 0.34900 0.41022 -0.84256 0.34901 0.41020 -0.84257 0.29647 0.63232 -0.71574 0.29644 0.63242 -0.71566 0.92390 0.00001 0.38263 0.92382 0.00012 0.38282 0.92355 0.00015 0.38348 0.92385 -0.00002 0.38276 0.92406 0.00010 0.38224 0.92395 0.00009 0.38250 0.92397 0.00011 0.38247 0.92382 -0.00002 0.38283 0.92367 -0.00036 0.38319 0.92386 -0.00005 0.38273 0.92395 0.00032 0.38250 0.92386 0.00006 0.38273 0.92381 -0.00039 0.38286 0.92389 0.00002 0.38267 0.92389 0.00005 0.38267 0.92390 0.00017 0.38264 0.92389 0.00031 0.38267 0.92389 -0.00023 0.38265 0.92386 -0.00005 0.38273 0.92385 0.00007 0.38277 0.92388 -0.00004 0.38268 0.92383 0.00015 0.38279 0.92384 0.00015 0.38278 0.92391 -0.00002 0.38262 0.92390 -0.00001 0.38263 0.92394 -0.00007 0.38254 0.92402 -0.00008 0.38234 0.92385 0.00003 0.38276 0.92374 -0.00004 0.38302 0.92381 -0.00003 0.38284 0.92383 -0.00001 0.38281 0.92395 0.00009 0.38251 0.92396 0.00011 0.38250 0.92387 -0.00003 0.38270 0.92381 -0.00031 0.38286 0.92391 -0.00001 0.38261 0.92396 0.00040 0.38249 0.92389 0.00002 0.38267 0.92389 0.00005 0.38267 0.92386 -0.00022 0.38272 0.92383 0.00015 0.38279 0.92384 0.00007 0.38279 0.92394 -0.00048 0.38253 0.92387 0.00015 0.38272 0.92400 -0.00024 0.38238 0.92396 -0.00005 0.38250 0.92384 0.00015 0.38278 0.92390 0.00001 0.38264 -0.92382 -0.00030 -0.38284 -0.92388 -0.00018 -0.38269 -0.92402 0.00057 -0.38234 -0.92384 -0.00007 -0.38278 -0.92384 -0.00005 -0.38278 -0.92388 0.00018 -0.38269 -0.92389 -0.00043 -0.38267 -0.92391 0.00003 -0.38261 -0.92386 0.00039 -0.38272 -0.92389 -0.00002 -0.38267 -0.92393 -0.00019 -0.38257 -0.92389 0.00005 -0.38266 -0.92386 0.00013 -0.38274 -0.92394 -0.00014 -0.38255 -0.92375 0.00012 -0.38301 -0.92381 -0.00000 -0.38285 -0.92403 -0.00013 -0.38233 -0.92398 -0.00007 -0.38245 -0.92390 -0.00008 -0.38262 -0.92382 -0.00006 -0.38284 -0.92382 -0.00005 -0.38283 -0.92392 -0.00002 -0.38259 -0.92391 -0.00003 -0.38261 -0.92382 -0.00012 -0.38282 -0.92388 0.00002 -0.38269 -0.92394 0.00016 -0.38253 -0.92402 0.00057 -0.38234 -0.92384 -0.00007 -0.38278 -0.92383 -0.00014 -0.38280 -0.92388 0.00017 -0.38268 -0.92389 -0.00043 -0.38265 -0.92391 0.00004 -0.38260 -0.92386 0.00049 -0.38274 -0.92389 -0.00006 -0.38266 -0.92392 -0.00019 -0.38258 -0.92388 0.00008 -0.38269 -0.92397 -0.00013 -0.38247 -0.92395 -0.00009 -0.38251 -0.92375 0.00018 -0.38299 -0.92382 0.00006 -0.38284 -0.92389 0.00002 -0.38266 -0.92399 -0.00009 -0.38241 -0.92391 -0.00010 -0.38262 -0.92382 -0.00008 -0.38283 -0.92382 -0.00007 -0.38282 -0.92390 -0.00004 -0.38263 -0.92403 0.00017 -0.38233 -0.92395 0.00008 -0.38252 -0.31519 -0.56714 0.76093 -0.36059 -0.33489 0.87053 -0.36057 -0.33502 0.87049 -0.38147 -0.07968 0.92094 -0.38147 -0.07954 0.92095 -0.37635 0.18121 0.90858 -0.37635 0.18123 0.90858 -0.34560 0.42945 0.83435 -0.34560 0.42942 0.83436 -0.29129 0.64854 0.70324 -0.29129 0.64854 0.70324 -0.21710 0.82350 0.52414 -0.21713 0.82346 0.52419 -0.12811 0.94230 0.30929 -0.12809 0.94232 0.30925 -0.03050 0.99682 0.07362 -0.03050 0.99682 0.07363 0.06933 0.98345 -0.16738 0.06933 0.98345 -0.16739 0.16434 0.90310 -0.39675 0.16434 0.90310 -0.39675 0.24819 0.76117 -0.59918 0.24818 0.76118 -0.59917 0.31516 0.56726 -0.76085 0.31516 0.56724 -0.76086 0.36057 0.33502 -0.87049 0.36057 0.33502 -0.87049 0.38147 0.07952 -0.92095 0.38147 0.07955 -0.92095 0.37635 -0.18121 -0.90858 0.37635 -0.18123 -0.90858 0.34560 -0.42945 -0.83435 0.34560 -0.42945 -0.83435 0.29130 -0.64852 -0.70326 0.29130 -0.64852 -0.70325 0.21713 -0.82346 -0.52419 0.21713 -0.82346 -0.52419 0.12809 -0.94232 -0.30924 0.12809 -0.94232 -0.30924 0.03050 -0.99682 -0.07362 0.03050 -0.99682 -0.07363 -0.06934 -0.98345 0.16741 -0.06933 -0.98345 0.16739 -0.16434 -0.90309 0.39676 -0.16434 -0.90309 0.39675 -0.24815 -0.76125 0.59910 -0.24815 -0.76125 0.59910 -0.31516 -0.56724 0.76086 -0.31508 -0.56754 0.76067 -0.36063 -0.33454 0.87065 -0.36059 -0.33485 0.87055 -0.38146 -0.07988 0.92093 -0.38150 -0.07897 0.92099 -0.37636 0.18120 0.90858 -0.37639 0.18070 0.90867 -0.34561 0.42938 0.83438 -0.34554 0.42981 0.83419 -0.29128 0.64859 0.70320 -0.29144 0.64807 0.70361 -0.21691 0.82384 0.52367 -0.21692 0.82383 0.52369 -0.12824 0.94218 0.30960 -0.12824 0.94218 0.30959 -0.03044 0.99683 0.07349 -0.03044 0.99683 0.07349 0.06924 0.98349 -0.16717 0.06924 0.98349 -0.16717 0.16454 0.90285 -0.39723 0.16453 0.90285 -0.39722 0.24805 0.76149 -0.59884 0.24805 0.76149 -0.59884 0.31517 0.56718 -0.76090 0.31517 0.56718 -0.76090 0.36063 0.33454 -0.87065 0.36059 0.33488 -0.87054 0.38146 0.07981 -0.92093 0.38146 0.07983 -0.92093 0.37635 -0.18120 -0.90858 0.37632 -0.18156 -0.90853 0.34562 -0.42932 -0.83440 0.34567 -0.42906 -0.83452 0.29127 -0.64860 -0.70319 0.29120 -0.64881 -0.70303 0.21708 -0.82354 -0.52407 0.21707 -0.82355 -0.52406 0.12824 -0.94218 -0.30960 0.12828 -0.94214 -0.30970 0.03041 -0.99684 -0.07342 0.03040 -0.99684 -0.07340 -0.06924 -0.98349 0.16717 -0.06927 -0.98348 0.16723 -0.16454 -0.90285 0.39723 -0.16454 -0.90285 0.39723 -0.24821 -0.76112 0.59924 -0.24814 -0.76128 0.59907 -0.31502 -0.56777 0.76052 0.23598 0.87480 0.42313 0.14691 0.75583 0.63808 0.14716 0.75623 0.63755 0.04824 0.58608 0.80881 0.04803 0.58565 0.80914 -0.05438 0.37509 0.92539 -0.05422 0.37545 0.92526 -0.15274 0.13974 0.97834 -0.15273 0.13976 0.97834 -0.24078 -0.10527 0.96485 -0.24079 -0.10529 0.96485 -0.31278 -0.34429 0.88523 -0.31270 -0.34398 0.88538 -0.36303 -0.55821 0.74607 -0.36310 -0.55861 0.74573 -0.38876 -0.73510 0.55542 -0.38874 -0.73479 0.55584 -0.38797 -0.86165 0.32716 -0.38793 -0.86191 0.32653 -0.36071 -0.92955 0.07638 -0.36077 -0.92950 0.07672 -0.30881 -0.93399 -0.17973 -0.30896 -0.93405 -0.17918 -0.23616 -0.87500 -0.42261 -0.23597 -0.87481 -0.42312 -0.14690 -0.75583 -0.63808 -0.14716 -0.75621 -0.63756 -0.04824 -0.58606 -0.80883 -0.04803 -0.58568 -0.80912 0.05403 -0.37586 -0.92510 0.05439 -0.37510 -0.92539 0.15270 -0.13988 -0.97832 0.15265 -0.14000 -0.97831 0.24116 0.10635 -0.96464 0.24082 0.10539 -0.96483 0.31243 0.34298 -0.88586 0.31273 0.34401 -0.88536 0.36316 0.55885 -0.74552 0.36302 0.55819 -0.74608 0.38875 0.73489 -0.55571 0.38878 0.73520 -0.55528 0.38796 0.86180 -0.32679 0.38795 0.86191 -0.32651 0.36072 0.92955 -0.07633 0.36078 0.92949 -0.07674 0.30899 0.93406 0.17904 0.30896 0.93404 0.17918 0.23602 0.87486 0.42299 0.05692 0.78597 0.61563 -0.03573 0.61422 0.78833 -0.03571 0.61429 0.78827 -0.12586 0.40102 0.90738 -0.12585 0.40107 0.90736 -0.20768 0.15994 0.96503 -0.20775 0.15952 0.96509 -0.27536 -0.09232 0.95690 -0.27537 -0.09243 0.95688 -0.32452 -0.33956 0.88283 -0.32452 -0.33944 0.88287 -0.35126 -0.56295 0.74814 -0.35129 -0.56254 0.74842 -0.35392 -0.74708 0.56268 -0.35370 -0.74798 0.56163 -0.33200 -0.88083 0.33750 -0.33237 -0.88019 0.33881 -0.28801 -0.95325 0.09145 -0.28779 -0.95338 0.09082 -0.22421 -0.96116 -0.16095 -0.22422 -0.96116 -0.16093 -0.14530 -0.90385 -0.40242 -0.14535 -0.90389 -0.40231 -0.05693 -0.78583 -0.61582 -0.05676 -0.78564 -0.61608 0.03568 -0.61422 -0.78833 0.03565 -0.61427 -0.78829 0.12598 -0.40056 -0.90757 0.12574 -0.40102 -0.90740 0.20749 -0.16022 -0.96503 0.20741 -0.16040 -0.96501 0.27533 0.09249 -0.95689 0.27543 0.09277 -0.95683 0.32450 0.33960 -0.88282 0.32437 0.33918 -0.88303 0.35114 0.56254 -0.74849 0.35118 0.56272 -0.74834 0.35378 0.74755 -0.56215 0.35379 0.74763 -0.56204 0.33206 0.88082 -0.33747 0.33206 0.88080 -0.33753 0.28791 0.95328 -0.09149 0.28795 0.95322 -0.09196 0.22413 0.96118 0.16093 0.22408 0.96114 0.16126 0.14529 0.90385 0.40242 0.14534 0.90395 0.40218 0.05688 0.78585 0.61579 -0.12598 0.81994 0.55842 -0.20627 0.64590 0.73503 -0.20636 0.64539 0.73545 -0.27241 0.42813 0.86168 -0.27237 0.42855 0.86149 -0.32036 0.18041 0.92996 -0.32036 0.18032 0.92997 -0.34632 -0.07929 0.93476 -0.34635 -0.07889 0.93478 -0.34867 -0.33498 0.87534 -0.34870 -0.33482 0.87539 -0.32706 -0.56703 0.75598 -0.32693 -0.56748 0.75570 -0.28267 -0.76112 0.58378 -0.28285 -0.76075 0.58416 -0.21971 -0.90106 0.37392 -0.21956 -0.90123 0.37359 -0.14108 -0.98052 0.13670 -0.14119 -0.98047 0.13692 -0.05357 -0.99272 -0.10789 -0.05358 -0.99272 -0.10787 0.03759 -0.93779 -0.34517 0.03773 -0.93768 -0.34543 0.12621 -0.81950 -0.55901 0.12610 -0.81963 -0.55884 0.20622 -0.64588 -0.73506 0.20611 -0.64608 -0.73491 0.27242 -0.42811 -0.86169 0.27255 -0.42778 -0.86181 0.32022 -0.18129 -0.92983 0.32024 -0.18121 -0.92984 0.34637 0.07968 -0.93471 0.34638 0.07977 -0.93470 0.34868 0.33467 -0.87545 0.34870 0.33485 -0.87538 0.32703 0.56720 -0.75587 0.32703 0.56714 -0.75591 0.28285 0.76074 -0.58418 0.28283 0.76093 -0.58395 0.21934 0.90166 -0.37270 0.21948 0.90124 -0.37362 0.14131 0.98034 -0.13771 0.14114 0.98049 -0.13680 0.05349 0.99271 0.10802 0.05352 0.99272 0.10790 -0.03764 0.93778 0.34518 -0.03770 0.93769 0.34541 -0.12603 0.81979 0.55862 -0.14690 -0.75589 -0.63800 -0.23591 -0.87479 -0.42319 -0.23617 -0.87495 -0.42271 -0.30896 -0.93402 -0.17932 -0.30893 -0.93401 -0.17939 -0.36074 -0.92954 0.07629 -0.36074 -0.92954 0.07629 -0.38802 -0.86153 0.32741 -0.38792 -0.86175 0.32695 -0.38873 -0.73522 0.55528 -0.38876 -0.73501 0.55554 -0.36310 -0.55866 0.74570 -0.36310 -0.55853 0.74579 -0.31258 -0.34350 0.88561 -0.31260 -0.34373 0.88551 -0.24093 -0.10584 0.96475 -0.24086 -0.10542 0.96482 -0.15271 0.13986 0.97832 -0.15271 0.13984 0.97833 -0.05426 0.37536 0.92529 -0.05422 0.37551 0.92523 0.04810 0.58587 0.80898 0.04804 0.58568 0.80912 0.14706 0.75605 0.63778 0.14706 0.75605 0.63778 0.23603 0.87484 0.42303 0.23609 0.87498 0.42270 0.30889 0.93404 0.17931 0.30888 0.93403 0.17937 0.36068 0.92956 -0.07634 0.36068 0.92956 -0.07630 0.38796 0.86160 -0.32730 0.38800 0.86173 -0.32694 0.38881 0.73520 -0.55526 0.38876 0.73506 -0.55547 0.36307 0.55853 -0.74581 0.36305 0.55848 -0.74585 0.31262 0.34373 -0.88550 0.31273 0.34397 -0.88538 0.24086 0.10543 -0.96482 0.24084 0.10539 -0.96483 0.15287 -0.13947 -0.97836 0.15265 -0.13984 -0.97834 0.05407 -0.37570 -0.92516 0.05420 -0.37550 -0.92523 -0.04813 -0.58585 -0.80899 -0.04813 -0.58585 -0.80899 -0.14707 -0.75606 -0.63777 -0.92036 0.34070 -0.19200 -0.92007 0.34129 -0.19232 -0.92008 0.34127 -0.19235 -0.92046 0.34047 -0.19191 -0.91993 0.34165 -0.19239 -0.92007 0.34124 -0.19242 -0.92005 0.34118 -0.19264 -0.92012 0.34124 -0.19219 -0.92026 0.34027 -0.19324 -0.91985 0.34073 -0.19436 -0.92007 0.34127 -0.19237 -0.92008 0.34122 -0.19242 -0.92008 0.34125 -0.19238 -0.92045 0.34075 -0.19148 -0.91989 0.34176 -0.19237 -0.91992 0.34167 -0.19240 -0.92018 0.34087 -0.19255 -0.92016 0.34095 -0.19252 -0.91985 0.34070 -0.19443 -0.92007 0.34126 -0.19238 -0.91993 0.34141 -0.19277 -0.91970 0.34172 -0.19332 0.91997 -0.34133 0.19274 0.92004 -0.34132 0.19242 0.92021 -0.34110 0.19202 0.92007 -0.34123 0.19244 0.92001 -0.34134 0.19255 0.92013 -0.34116 0.19227 0.92011 -0.34121 0.19229 0.92002 -0.34137 0.19244 0.92036 -0.34054 0.19225 0.92016 -0.34099 0.19246 0.91992 -0.34165 0.19242 0.92001 -0.34143 0.19239 0.92009 -0.34115 0.19248 0.92017 -0.34093 0.19251 0.92007 -0.34136 0.19223 0.92004 -0.34146 0.19219 0.92009 -0.34109 0.19259 0.92003 -0.34136 0.19239 0.92003 -0.34161 0.19193 0.92008 -0.34120 0.19243 0.92002 -0.34105 0.19298 0.92004 -0.34134 0.19237 0.92021 -0.34136 0.19155 0.92010 -0.34118 0.19240 0.91984 -0.34139 0.19325 0.92001 -0.34136 0.19249 0.92021 -0.34110 0.19203 0.92007 -0.34122 0.19243 0.92001 -0.34134 0.19255 0.92013 -0.34116 0.19227 0.92018 -0.34105 0.19221 0.92005 -0.34130 0.19242 0.92002 -0.34136 0.19244 0.92015 -0.34108 0.19231 0.92020 -0.34096 0.19232 0.92004 -0.34135 0.19238 0.92001 -0.34144 0.19235 0.92004 -0.34135 0.19236 0.92013 -0.34099 0.19259 0.92008 -0.34115 0.19252 0.92000 -0.34170 0.19193 0.92011 -0.34120 0.19230 0.92011 -0.34098 0.19269 0.92008 -0.34127 0.19234 0.92003 -0.34116 0.19276 0.92004 -0.34131 0.19245 0.92012 -0.34131 0.19205 0.92008 -0.34124 0.19238 0.36059 0.33485 -0.87054 0.31524 0.56693 -0.76106 0.31518 0.56717 -0.76091 0.24805 0.76149 -0.59884 0.24821 0.76113 -0.59923 0.16454 0.90285 -0.39723 0.16441 0.90301 -0.39691 0.06924 0.98349 -0.16716 0.06931 0.98346 -0.16732 -0.03043 0.99683 0.07346 -0.03041 0.99684 0.07342 -0.12828 0.94214 0.30969 -0.12824 0.94218 0.30959 -0.21692 0.82383 0.52369 -0.21708 0.82354 0.52407 -0.29121 0.64879 0.70304 -0.29127 0.64859 0.70320 -0.34566 0.42910 0.83450 -0.34562 0.42935 0.83439 -0.37632 0.18154 0.90853 -0.37635 0.18120 0.90859 -0.38146 -0.07983 0.92093 -0.38146 -0.07983 0.92093 -0.36058 -0.33489 0.87053 -0.36059 -0.33485 0.87055 -0.31502 -0.56777 0.76052 -0.31524 -0.56693 0.76106 -0.24822 -0.76111 0.59925 -0.24822 -0.76111 0.59925 -0.16454 -0.90285 0.39723 -0.16440 -0.90301 0.39691 -0.06924 -0.98349 0.16716 -0.06930 -0.98347 0.16731 0.03041 -0.99684 -0.07342 0.03040 -0.99684 -0.07339 0.12824 -0.94218 -0.30959 0.12829 -0.94214 -0.30971 0.21708 -0.82354 -0.52407 0.21708 -0.82354 -0.52407 0.29128 -0.64859 -0.70320 0.29127 -0.64862 -0.70318 0.34562 -0.42935 -0.83439 0.34561 -0.42938 -0.83438 0.37635 -0.18120 -0.90858 0.37635 -0.18120 -0.90858 0.38146 0.07983 -0.92093 0.38147 0.07953 -0.92095 0.36059 0.33485 -0.87054 0.92389 0.00005 0.38265 0.92388 -0.00070 0.38268 0.92389 0.00020 0.38266 0.92391 -0.00005 0.38261 0.92262 0.00104 0.38571 0.92385 0.00016 0.38275 0.92386 0.00005 0.38272 0.92277 0.00097 0.38534 0.92390 -0.00055 0.38263 0.92388 -0.00004 0.38267 0.92391 -0.00033 0.38261 0.92387 0.00042 0.38271 0.92388 -0.00007 0.38267 0.92391 -0.00033 0.38262 0.92355 0.00105 0.38349 0.92383 0.00022 0.38280 0.92377 0.00215 0.38294 0.92372 -0.00052 0.38307 0.92356 0.00098 0.38344 0.92383 0.00021 0.38279 0.92387 -0.00101 0.38270 0.92394 0.00278 0.38252 0.19528 -0.86000 -0.47145 0.19539 -0.85985 -0.47169 0.27378 -0.69870 -0.66095 0.27374 -0.69882 -0.66085 0.33372 -0.48943 -0.80566 0.33375 -0.48928 -0.80573 0.37079 -0.24749 -0.89514 0.37079 -0.24742 -0.89515 0.32912 0.51026 -0.79455 0.32921 0.50984 -0.79479 0.26736 0.71547 -0.64546 0.26726 0.71574 -0.64520 0.18738 0.87192 -0.45237 0.18742 0.87186 -0.45247 0.09467 0.96892 -0.22855 0.09470 0.96890 -0.22863 -0.00457 0.99993 0.01103 -0.00457 0.99993 0.01103 -0.10336 0.96284 0.24953 -0.10330 0.96288 0.24939 -0.19528 0.86000 0.47145 -0.19537 0.85985 0.47168 -0.27384 0.69853 0.66112 -0.27374 0.69881 0.66086 -0.33367 0.48969 0.80553 -0.33374 0.48928 0.80574 -0.37077 0.24747 0.89515 -0.37078 0.24745 0.89515 -0.38265 -0.01214 0.92381 -0.38266 -0.01178 0.92381 -0.36847 -0.27004 0.88956 -0.36842 -0.27037 0.88947 -0.32911 -0.51026 0.79456 -0.32923 -0.50981 0.79480 -0.26726 -0.71575 0.64520 -0.26726 -0.71574 0.64520 -0.18752 -0.87172 0.45270 -0.18741 -0.87187 0.45246 -0.09465 -0.96893 0.22850 -0.09470 -0.96890 0.22862 0.92383 0.00028 0.38280 0.92383 0.00025 0.38280 0.92390 0.00001 0.38263 0.92393 -0.00029 0.38255 0.92388 -0.00018 0.38267 0.92386 -0.00005 0.38274 0.92387 -0.00006 0.38272 0.92380 0.00012 0.38287 0.92380 0.00012 0.38286 0.92391 -0.00008 0.38261 0.92396 -0.00009 0.38250 0.92380 0.00009 0.38288 0.92376 0.00007 0.38297 0.92392 -0.00000 0.38259 0.92397 0.00005 0.38245 0.92401 0.00005 0.38237 0.92407 0.00015 0.38223 0.92384 -0.00001 0.38278 0.92373 -0.00029 0.38304 0.92381 -0.00019 0.38286 0.92383 -0.00008 0.38279 0.92399 0.00026 0.38243 0.92399 0.00031 0.38241 0.92383 -0.00026 0.38281 0.92385 0.00016 0.38275 0.92392 -0.00026 0.38257 0.92392 -0.00005 0.38259 0.92390 0.00001 0.38263 0.92390 0.00007 0.38264 0.92386 0.00015 0.38273 0.92388 0.00003 0.38267 0.92379 0.00017 0.38291 0.92390 -0.00017 0.38263 0.92400 -0.00025 0.38239 0.92390 -0.00006 0.38263 0.92395 -0.00007 0.38251 0.92380 0.00010 0.38288 0.92377 0.00009 0.38296 0.92393 0.00001 0.38256 0.92396 0.00004 0.38248 0.92378 0.00002 0.38292 0.92372 -0.00008 0.38307 0.92384 0.00000 0.38277 0.92397 0.00032 0.38247 0.92390 0.00024 0.38263 0.92382 -0.00011 0.38284 0.92382 -0.00011 0.38283 0.92380 -0.00025 0.38288 0.92394 0.00023 0.38255 0.92391 -0.00019 0.38260 0.09963 -0.96551 -0.24054 0.00847 -0.99976 -0.02044 0.00847 -0.99976 -0.02044 -0.08347 -0.97592 0.20151 -0.08345 -0.97593 0.20147 -0.17039 -0.89541 0.41136 -0.17039 -0.89540 0.41137 -0.24738 -0.76298 0.59722 -0.24737 -0.76299 0.59721 -0.31009 -0.58601 0.74862 -0.31009 -0.58600 0.74863 -0.35474 -0.37506 0.85644 -0.35475 -0.37506 0.85644 -0.37880 -0.14201 0.91452 -0.37880 -0.14201 0.91452 -0.38082 0.09847 0.91939 -0.38082 0.09844 0.91939 -0.36066 0.33434 0.87071 -0.36066 0.33434 0.87071 -0.31972 0.54954 0.77188 -0.31968 0.54980 0.77170 -0.25995 0.73394 0.62751 -0.25995 0.73393 0.62751 -0.18532 0.87495 0.44735 -0.18536 0.87487 0.44749 -0.09963 0.96551 0.24054 -0.09962 0.96552 0.24050 -0.00847 0.99976 0.02044 -0.00847 0.99976 0.02044 0.08347 0.97593 -0.20150 0.08346 0.97593 -0.20150 0.17037 0.89544 -0.41130 0.17037 0.89543 -0.41131 0.24737 0.76298 -0.59722 0.24737 0.76299 -0.59721 0.31011 0.58592 -0.74869 0.31012 0.58590 -0.74870 0.35473 0.37517 -0.85640 0.35473 0.37518 -0.85639 0.37881 0.14186 -0.91454 0.37881 0.14187 -0.91454 0.38081 -0.09866 -0.91937 0.38086 -0.09832 -0.91939 0.36071 -0.33416 -0.87076 0.36064 -0.33448 -0.87067 0.31968 -0.54968 -0.77179 0.31968 -0.54967 -0.77179 0.25993 -0.73392 -0.62753 0.25992 -0.73394 -0.62752 0.18533 -0.87490 -0.44743 0.18533 -0.87490 -0.44744 0.09963 -0.96551 -0.24053 0.92390 -0.00017 0.38263 0.92393 0.00001 0.38255 0.92384 0.00022 0.38278 0.92381 -0.00015 0.38286 0.92391 -0.00033 0.38261 0.92392 0.00009 0.38258 0.92390 0.00011 0.38263 0.92390 0.00016 0.38264 0.92382 0.00021 0.38282 0.92385 0.00001 0.38276 0.92391 -0.00001 0.38261 0.92387 0.00016 0.38270 0.92394 0.00017 0.38254 0.92397 0.00006 0.38246 0.92378 -0.00001 0.38292 0.92387 -0.00019 0.38271 0.92397 -0.00011 0.38246 0.92392 -0.00004 0.38259 0.92388 -0.00009 0.38269 0.92388 -0.00008 0.38269 0.92386 -0.00011 0.38274 0.92396 -0.00013 0.38250 0.92409 0.00016 0.38217 0.92381 0.00006 0.38285 0.92371 -0.00022 0.38308 0.92399 0.00003 0.38243 0.92392 -0.00023 0.38258 0.92380 0.00014 0.38287 0.92382 0.00027 0.38282 0.92395 -0.00003 0.38250 0.92396 0.00006 0.38248 0.92391 0.00014 0.38260 0.92391 0.00008 0.38260 0.92391 0.00009 0.38262 0.92392 -0.00030 0.38257 0.92388 -0.00027 0.38268 0.92385 -0.00000 0.38275 0.92378 0.00002 0.38293 0.92384 -0.00029 0.38278 0.92394 -0.00028 0.38253 0.92385 0.00003 0.38276 0.92391 0.00005 0.38260 0.92400 -0.00012 0.38240 0.92385 -0.00023 0.38276 0.92380 -0.00017 0.38288 0.92387 -0.00009 0.38271 0.92410 -0.00026 0.38215 0.92416 -0.00017 0.38202 0.92395 -0.00013 0.38252 0.92396 -0.00011 0.38249 0.92372 -0.00019 0.38306 0.92383 0.00011 0.38281 0.92382 0.00011 0.38283 0.92382 0.00010 0.38283 -0.37552 0.19250 0.90660 -0.37552 0.19250 0.90660 -0.34971 0.40605 0.84429 -0.34972 0.40603 0.84430 -0.30634 0.59931 0.73958 -0.30634 0.59931 0.73958 -0.24758 0.76253 0.59771 -0.24757 0.76253 0.59770 -0.17654 0.88723 0.42621 -0.17654 0.88723 0.42621 0.07371 0.98128 -0.17794 0.07371 0.98128 -0.17795 0.15545 0.91378 -0.37529 0.15541 0.91383 -0.37517 0.22925 0.80074 -0.55341 0.22929 0.80062 -0.55357 0.29179 0.64701 -0.70445 0.29178 0.64702 -0.70443 0.33955 0.46123 -0.81974 0.33955 0.46121 -0.81975 0.37031 0.25218 -0.89402 0.37031 0.25220 -0.89402 0.38250 0.03058 -0.92345 0.38250 0.03057 -0.92345 0.37552 -0.19252 -0.90660 0.37552 -0.19251 -0.90660 0.34970 -0.40614 -0.84425 0.34970 -0.40615 -0.84425 0.30635 -0.59930 -0.73959 0.30638 -0.59922 -0.73964 0.24760 -0.76249 -0.59775 0.24757 -0.76253 -0.59770 0.17652 -0.88726 -0.42616 0.17652 -0.88726 -0.42616 0.09651 -0.96768 -0.23300 0.09651 -0.96768 -0.23300 0.01162 -0.99954 -0.02805 0.01162 -0.99954 -0.02805 -0.07371 -0.98128 0.17794 -0.07371 -0.98128 0.17795 -0.15545 -0.91378 0.37528 -0.15545 -0.91378 0.37528 -0.22926 -0.80068 0.55349 -0.22926 -0.80068 0.55349 -0.29178 -0.64702 0.70443 -0.29178 -0.64702 0.70443 -0.33954 -0.46123 0.81974 -0.33955 -0.46121 0.81975 -0.52597 -0.62925 -0.57219 -0.52603 -0.62966 -0.57169 -0.47549 -0.54093 -0.69376 -0.47549 -0.54080 -0.69387 -0.43390 -0.42527 -0.79428 -0.43394 -0.42441 -0.79471 -0.40326 -0.28782 -0.86864 -0.40315 -0.28861 -0.86843 -0.38480 -0.13663 -0.91283 -0.38474 -0.13689 -0.91282 -0.37980 0.02163 -0.92482 -0.37996 0.02214 -0.92474 -0.38858 0.17891 -0.90388 -0.38852 0.17877 -0.90393 -0.41037 0.32718 -0.85121 -0.41040 0.32723 -0.85117 -0.44427 0.45893 -0.76942 -0.44421 0.45885 -0.76950 -0.48853 0.56782 -0.66250 -0.48869 0.56794 -0.66229 -0.54105 0.64819 -0.53583 -0.54088 0.64814 -0.53607 -0.59892 0.69605 -0.39598 -0.59889 0.69605 -0.39603 -0.65952 0.70901 -0.24968 -0.65930 0.70910 -0.24999 -0.71959 0.68649 -0.10450 -0.71997 0.68617 -0.10398 -0.77650 0.62927 0.03258 -0.77614 0.62974 0.03213 -0.82677 0.54097 0.15427 -0.82688 0.54077 0.15439 -0.86850 0.42512 0.25490 -0.86864 0.42478 0.25501 -0.89930 0.28801 0.32910 -0.89920 0.28835 0.32907 -0.91758 0.13651 0.37339 -0.91752 0.13678 0.37342 -0.92251 -0.02142 0.38537 -0.92258 -0.02199 0.38519 -0.91389 -0.17918 0.36428 -0.91388 -0.17881 0.36449 -0.89206 -0.32714 0.31179 -0.89206 -0.32707 0.31186 -0.85817 -0.45898 0.22997 -0.85817 -0.45897 0.22999 -0.81387 -0.56787 0.12304 -0.81381 -0.56804 0.12266 -0.76149 -0.64817 -0.00361 -0.76158 -0.64807 -0.00310 -0.70345 -0.69611 -0.14351 -0.70339 -0.69610 -0.14381 -0.64293 -0.70902 -0.28970 -0.64294 -0.70904 -0.28964 -0.58282 -0.68646 -0.43485 -0.58278 -0.68635 -0.43507 -0.92381 0.00031 -0.38285 -0.92370 0.00026 -0.38311 -0.92369 0.00010 -0.38315 -0.92391 0.00030 -0.38260 -0.92388 -0.00011 -0.38268 -0.92392 -0.00005 -0.38259 -0.92392 0.00002 -0.38258 -0.92389 -0.00004 -0.38265 -0.92390 0.00015 -0.38264 -0.92387 0.00006 -0.38271 -0.92387 -0.00017 -0.38271 -0.92401 0.00050 -0.38237 -0.92402 0.00042 -0.38236 -0.92398 0.00045 -0.38243 -0.92401 0.00023 -0.38236 -0.92390 0.00030 -0.38264 -0.92393 0.00013 -0.38255 -0.92394 0.00012 -0.38254 -0.92389 0.00030 -0.38267 -0.92368 0.00035 -0.38316 -0.92384 -0.00004 -0.38277 -0.92399 -0.00004 -0.38241 -0.92396 0.00001 -0.38248 -0.92376 -0.00004 -0.38298 -0.92399 0.00001 -0.38242 -0.92399 0.00001 -0.38243 -0.92397 -0.00011 -0.38247 -0.92391 -0.00014 -0.38262 -0.92389 -0.00024 -0.38265 -0.92388 -0.00026 -0.38269 -0.92393 0.00047 -0.38255 -0.92368 0.00011 -0.38317 -0.92364 -0.00054 -0.38326 -0.92416 0.00048 -0.38202 -0.92415 0.00030 -0.38203 -0.92387 -0.00049 -0.38270 -0.92387 -0.00016 -0.38270 -0.92385 -0.00024 -0.38275 -0.92382 0.00069 -0.38282 -0.92385 -0.00025 -0.38276 -0.92384 0.00003 -0.38278 -0.92383 0.00003 -0.38279 -0.92384 -0.00009 -0.38277 -0.92386 -0.00009 -0.38274 -0.92380 0.00033 -0.38288 -0.92390 0.00028 -0.38263 -0.92407 -0.00054 -0.38223 -0.92393 -0.00049 -0.38256 -0.92378 0.00004 -0.38293 -0.92371 0.00005 -0.38309 -0.92375 -0.00004 -0.38300 -0.92398 -0.00004 -0.38245 0.92386 0.00006 0.38272 0.92377 -0.00025 0.38296 0.92379 -0.00040 0.38290 0.92386 -0.00004 0.38274 0.92385 -0.00003 0.38276 0.92385 -0.00004 0.38276 0.92383 -0.00000 0.38281 0.92384 -0.00030 0.38278 0.92382 -0.00028 0.38283 0.92385 -0.00051 0.38276 0.92399 -0.00055 0.38241 0.92381 0.00013 0.38286 0.92382 0.00014 0.38282 0.92389 -0.00001 0.38266 0.92385 -0.00006 0.38277 0.92390 -0.00013 0.38263 0.92396 -0.00000 0.38248 0.92385 0.00005 0.38277 0.92379 -0.00013 0.38289 0.92395 -0.00010 0.38251 0.92397 0.00002 0.38246 0.92393 -0.00001 0.38255 0.92393 0.00001 0.38255 0.92387 -0.00011 0.38270 0.92386 0.00007 0.38272 0.92389 0.00014 0.38267 0.92390 0.00003 0.38263 0.92391 0.00008 0.38260 0.92387 0.00023 0.38271 0.92385 -0.00004 0.38276 0.92393 -0.00020 0.38257 0.92392 0.00004 0.38258 0.92392 0.00004 0.38260 0.92390 0.00017 0.38264 0.92379 0.00020 0.38290 0.92393 -0.00033 0.38256 0.92388 -0.00035 0.38268 0.92387 -0.00032 0.38272 0.92403 -0.00014 0.38233 0.92378 0.00017 0.38293 0.92383 0.00028 0.38280 0.92392 0.00024 0.38258 0.92385 -0.00002 0.38275 0.92370 -0.00005 0.38312 0.92371 0.00005 0.38308 0.92394 0.00026 0.38254 0.92393 0.00001 0.38256 0.92387 -0.00010 0.38270 -0.92394 0.00012 -0.38254 -0.92376 -0.00037 -0.38297 -0.92373 -0.00014 -0.38305 -0.92380 0.00019 -0.38288 -0.92389 -0.00015 -0.38266 -0.92387 -0.00037 -0.38270 -0.92389 -0.00041 -0.38266 -0.92388 0.00003 -0.38267 -0.92385 0.00007 -0.38276 -0.92381 0.00038 -0.38285 -0.92380 0.00038 -0.38286 -0.92393 -0.00013 -0.38257 -0.92392 -0.00014 -0.38259 -0.92390 -0.00009 -0.38264 -0.92397 -0.00001 -0.38245 -0.92388 0.00011 -0.38267 -0.92381 -0.00003 -0.38286 -0.92390 -0.00009 -0.38264 -0.92391 -0.00005 -0.38261 -0.92390 -0.00005 -0.38263 -0.92389 -0.00008 -0.38265 -0.92386 -0.00011 -0.38274 -0.92386 -0.00003 -0.38273 -0.92394 0.00010 -0.38254 -0.92395 -0.00004 -0.38252 -0.92398 0.00006 -0.38244 -0.92394 0.00035 -0.38254 -0.92386 -0.00006 -0.38274 -0.92389 -0.00017 -0.38267 -0.92391 0.00011 -0.38261 -0.92388 0.00019 -0.38269 -0.92388 0.00003 -0.38269 -0.92385 0.00007 -0.38276 -0.92387 -0.00016 -0.38270 -0.92398 -0.00021 -0.38243 -0.92393 0.00003 -0.38257 -0.92385 0.00001 -0.38275 -0.92375 0.00027 -0.38301 -0.92376 0.00029 -0.38296 -0.92389 0.00012 -0.38266 -0.92380 -0.00004 -0.38287 -0.92390 -0.00010 -0.38263 -0.92400 0.00021 -0.38240 -0.92376 0.00019 -0.38298 -0.92373 0.00004 -0.38304 -0.92389 0.00016 -0.38266 -0.92388 -0.00002 -0.38269 -0.92394 0.00008 -0.38254 -0.32638 -0.52211 0.78796 -0.32638 -0.52211 0.78796 -0.26346 -0.72529 0.63604 -0.26346 -0.72529 0.63604 -0.18271 -0.87866 0.44111 -0.18271 -0.87866 0.44111 -0.08938 -0.97234 0.21578 -0.08938 -0.97234 0.21578 0.00985 -0.99967 -0.02379 0.00985 -0.99967 -0.02378 0.10861 -0.95888 -0.26221 0.10862 -0.95887 -0.26224 0.19993 -0.85268 -0.48266 0.19992 -0.85269 -0.48266 0.27750 -0.68860 -0.66995 0.27748 -0.68865 -0.66990 0.33625 -0.47745 -0.81177 0.33626 -0.47738 -0.81181 0.37209 -0.23371 -0.89829 0.37208 -0.23382 -0.89827 0.38256 0.02584 -0.92357 0.38256 0.02584 -0.92357 0.36694 0.28386 -0.88588 0.36693 0.28397 -0.88585 0.32638 0.52212 -0.78795 0.32638 0.52213 -0.78795 0.26346 0.72529 -0.63604 0.26346 0.72529 -0.63604 0.18272 0.87865 -0.44112 0.18272 0.87865 -0.44112 0.08937 0.97235 -0.21575 0.08938 0.97234 -0.21577 -0.00985 0.99967 0.02379 -0.00985 0.99967 0.02379 -0.10862 0.95887 0.26224 -0.10858 0.95890 0.26214 -0.19993 0.85268 0.48266 -0.19997 0.85260 0.48278 -0.27748 0.68865 0.66990 -0.27750 0.68860 0.66995 -0.33626 0.47737 0.81181 -0.33625 0.47745 0.81177 -0.37207 0.23383 0.89827 -0.37208 0.23371 0.89829 0.36693 0.28397 -0.88585 0.32642 0.52195 -0.78805 0.32634 0.52230 -0.78785 0.26343 0.72536 -0.63597 0.26349 0.72520 -0.63613 0.18274 0.87861 -0.44118 0.18276 0.87859 -0.44123 0.08936 0.97235 -0.21574 0.08933 0.97237 -0.21567 -0.00991 0.99966 0.02393 -0.00991 0.99966 0.02393 -0.10863 0.95887 0.26225 -0.10863 0.95887 0.26225 -0.19977 0.85293 0.48228 -0.19979 0.85289 0.48234 -0.27752 0.68854 0.67000 -0.27752 0.68854 0.66999 -0.33632 0.47710 0.81195 -0.33627 0.47736 0.81182 -0.37208 0.23374 0.89829 -0.37211 0.23343 0.89836 -0.38256 -0.02568 0.92357 -0.38256 -0.02569 0.92357 -0.36693 -0.28396 0.88585 -0.36693 -0.28396 0.88585 -0.32633 -0.52232 0.78784 -0.32636 -0.52220 0.78790 -0.26349 -0.72520 0.63612 -0.26349 -0.72521 0.63612 -0.18277 -0.87858 0.44124 -0.18275 -0.87861 0.44119 -0.08934 -0.97237 0.21567 -0.08936 -0.97235 0.21574 0.00992 -0.99966 -0.02394 0.00991 -0.99966 -0.02394 0.10862 -0.95887 -0.26224 0.10862 -0.95887 -0.26224 0.19979 -0.85289 -0.48235 0.19977 -0.85293 -0.48228 0.27751 -0.68856 -0.66998 0.27752 -0.68855 -0.66998 0.33627 -0.47734 -0.81183 0.33632 -0.47709 -0.81196 0.37211 -0.23344 -0.89835 0.37208 -0.23374 -0.89829 0.92382 0.00010 0.38282 0.92387 0.00001 0.38271 0.92384 0.00002 0.38278 0.92394 -0.00008 0.38253 0.92404 -0.00006 0.38231 0.92388 -0.00002 0.38269 0.92396 0.00006 0.38248 0.92378 -0.00002 0.38292 0.92379 -0.00001 0.38290 0.92390 0.00013 0.38263 0.92380 -0.00018 0.38287 0.92392 0.00008 0.38258 0.92401 0.00054 0.38238 0.92382 -0.00013 0.38282 0.92383 -0.00009 0.38281 0.92384 0.00001 0.38278 0.92384 -0.00002 0.38277 0.92385 0.00013 0.38276 0.92393 -0.00050 0.38256 0.92390 -0.00001 0.38263 0.92376 0.00053 0.38298 0.92389 -0.00020 0.38266 0.92402 -0.00050 0.38234 0.92381 0.00016 0.38285 0.92373 0.00026 0.38303 0.92387 0.00000 0.38270 0.92385 0.00001 0.38276 0.92398 -0.00011 0.38244 0.92403 -0.00010 0.38232 0.92382 -0.00005 0.38282 0.92406 0.00016 0.38225 0.92392 0.00010 0.38258 0.92373 -0.00024 0.38304 0.92382 -0.00014 0.38284 0.92381 -0.00016 0.38286 0.92391 0.00006 0.38261 0.92398 0.00045 0.38243 0.92389 -0.00016 0.38267 0.92388 -0.00004 0.38269 0.92384 0.00009 0.38277 0.92389 -0.00018 0.38266 0.92392 -0.00024 0.38259 0.92380 0.00012 0.38287 -0.92386 0.00025 -0.38273 -0.92390 -0.00012 -0.38263 -0.92383 0.00009 -0.38279 -0.92382 0.00016 -0.38283 -0.92394 -0.00006 -0.38253 -0.92393 -0.00004 -0.38255 -0.92370 0.00018 -0.38313 -0.92381 0.00001 -0.38285 -0.92419 -0.00006 -0.38193 -0.92400 0.00006 -0.38239 -0.92369 -0.00009 -0.38314 -0.92374 -0.00009 -0.38302 -0.92375 -0.00007 -0.38299 -0.92391 0.00005 -0.38261 -0.92407 0.00041 -0.38222 -0.92391 0.00016 -0.38260 -0.92372 -0.00057 -0.38306 -0.92392 -0.00003 -0.38258 -0.92392 -0.00002 -0.38258 -0.92390 -0.00014 -0.38264 -0.92390 0.00002 -0.38263 -0.92390 -0.00003 -0.38264 -0.92387 0.00029 -0.38270 -0.92388 -0.00019 -0.38269 -0.92381 0.00019 -0.38286 -0.92381 0.00017 -0.38285 -0.92405 -0.00056 -0.38228 -0.92393 -0.00004 -0.38257 -0.92366 0.00044 -0.38321 -0.92380 0.00008 -0.38287 -0.92402 -0.00012 -0.38234 -0.92401 -0.00010 -0.38237 -0.92384 -0.00007 -0.38278 -0.92380 -0.00004 -0.38288 -0.92382 -0.00003 -0.38282 -0.92388 -0.00002 -0.38269 -0.92396 0.00009 -0.38248 -0.92392 0.00006 -0.38259 -0.92383 -0.00015 -0.38281 -0.92383 -0.00015 -0.38280 -0.92391 0.00014 -0.38262 -0.92387 0.00005 -0.38270 -0.92387 0.00001 -0.38271 -0.92384 -0.00013 -0.38278 -0.92384 0.00004 -0.38277 -0.92384 -0.00004 -0.38279 -0.92388 -0.00060 -0.38269 -0.92387 0.00020 -0.38271 -0.36359 0.31191 0.87779 -0.32036 0.54698 0.77342 -0.32037 0.54695 0.77344 -0.25521 0.74515 0.61614 -0.25521 0.74516 0.61612 -0.17283 0.89221 0.41725 -0.17283 0.89220 0.41726 -0.07844 0.97877 0.18938 -0.07844 0.97877 0.18938 0.02111 0.99848 -0.05095 0.02110 0.99848 -0.05095 0.11935 0.95012 -0.28814 0.11933 0.95014 -0.28809 0.20932 0.83715 -0.50534 0.20935 0.83710 -0.50540 0.28511 0.66704 -0.68831 0.28511 0.66703 -0.68832 0.34145 0.45155 -0.82433 0.34144 0.45157 -0.82432 0.37456 0.20490 -0.90428 0.37456 0.20489 -0.90428 0.38210 -0.05513 -0.92247 0.38210 -0.05514 -0.92247 0.36359 -0.31192 -0.87779 0.36361 -0.31176 -0.87783 0.32037 -0.54695 -0.77344 0.32034 -0.54707 -0.77337 0.25523 -0.74509 -0.61619 0.25524 -0.74508 -0.61620 0.17281 -0.89223 -0.41720 0.17281 -0.89223 -0.41720 0.07842 -0.97878 -0.18931 0.07843 -0.97878 -0.18934 -0.02111 -0.99848 0.05097 -0.02111 -0.99848 0.05096 -0.11935 -0.95012 0.28814 -0.11935 -0.95012 0.28814 -0.20931 -0.83716 0.50533 -0.20934 -0.83711 0.50540 -0.28511 -0.66703 0.68832 -0.28508 -0.66713 0.68824 -0.34145 -0.45155 0.82433 -0.34145 -0.45155 0.82433 -0.36356 0.31214 0.87772 -0.32026 0.54738 0.77318 -0.32027 0.54734 0.77320 -0.25531 0.74491 0.61638 -0.25536 0.74481 0.61649 -0.17279 0.89226 0.41715 -0.17261 0.89251 0.41669 -0.07870 0.97863 0.18999 -0.07880 0.97857 0.19023 0.02127 0.99845 -0.05134 0.02126 0.99846 -0.05132 0.11951 0.94998 -0.28853 0.11941 0.95007 -0.28828 0.20919 0.83738 -0.50501 0.20941 0.83698 -0.50558 0.28507 0.66713 -0.68824 0.28499 0.66739 -0.68802 0.34153 0.45115 -0.82451 0.34158 0.45087 -0.82465 0.37453 0.20524 -0.90421 0.37454 0.20519 -0.90422 0.38210 -0.05503 -0.92248 0.38210 -0.05498 -0.92248 0.36356 -0.31214 -0.87772 0.36356 -0.31216 -0.87772 0.32027 -0.54734 -0.77320 0.32034 -0.54708 -0.77336 0.25538 -0.74476 -0.61654 0.25547 -0.74455 -0.61675 0.17273 -0.89235 -0.41699 0.17259 -0.89253 -0.41666 0.07872 -0.97861 -0.19006 0.07873 -0.97861 -0.19007 -0.02126 -0.99846 0.05132 -0.02126 -0.99846 0.05132 -0.11941 -0.95007 0.28829 -0.11955 -0.94995 0.28862 -0.20940 -0.83702 0.50552 -0.20918 -0.83738 0.50502 -0.28501 -0.66732 0.68808 -0.28525 -0.66666 0.68862 -0.34159 -0.45087 0.82464 -0.34138 -0.45186 0.82418 -0.37453 -0.20524 0.90421 -0.37453 -0.20524 0.90421 -0.38210 0.05498 0.92248 -0.38210 0.05498 0.92248 -0.36360 0.31182 0.87782 0.54761 0.76928 -0.32914 0.45781 0.88191 -0.11243 0.45786 0.88187 -0.11252 0.33635 0.93493 0.11301 0.33639 0.93493 0.11293 0.19215 0.92409 0.33034 0.19248 0.92419 0.32988 0.03527 0.85055 0.52471 0.03528 0.85056 0.52469 -0.12450 0.71884 0.68394 -0.12491 0.71841 0.68431 -0.27598 0.53778 0.79664 -0.27568 0.53822 0.79645 -0.40827 0.32054 0.85473 -0.40795 0.32117 0.85465 -0.51247 0.08232 0.85475 -0.51273 0.08156 0.85467 -0.58240 -0.16338 0.79631 -0.58241 -0.16343 0.79630 -0.61232 -0.39707 0.68367 -0.61232 -0.39707 0.68367 -0.60059 -0.60306 0.52499 -0.60051 -0.60348 0.52460 -0.54780 -0.76890 0.32972 -0.54781 -0.76888 0.32974 -0.45781 -0.88191 0.11245 -0.45786 -0.88187 0.11255 -0.33649 -0.93491 -0.11274 -0.33655 -0.93490 -0.11265 -0.19205 -0.92407 -0.33046 -0.19238 -0.92416 -0.33003 -0.03525 -0.85054 -0.52473 -0.03475 -0.85022 -0.52527 0.12451 -0.71884 -0.68393 0.12452 -0.71883 -0.68394 0.27596 -0.53783 -0.79661 0.27553 -0.53842 -0.79636 0.40830 -0.32048 -0.85474 0.40830 -0.32048 -0.85474 0.51289 -0.08112 -0.85461 0.51289 -0.08112 -0.85461 0.58225 0.16267 -0.79657 0.58225 0.16267 -0.79657 0.61229 0.39657 -0.68398 0.61232 0.39714 -0.68362 0.60052 0.60342 -0.52464 0.60058 0.60306 -0.52500 0.54789 0.76871 -0.32999 0.37864 0.91141 -0.16112 0.26326 0.96244 0.06642 0.26314 0.96245 0.06673 0.13026 0.94834 0.28929 0.13021 0.94831 0.28941 -0.01216 0.86974 0.49336 -0.01242 0.86947 0.49383 -0.15454 0.73089 0.66477 -0.15417 0.73149 0.66419 -0.28589 0.54265 0.78981 -0.28605 0.54227 0.79001 -0.39780 0.31672 0.86107 -0.39802 0.31596 0.86125 -0.48253 0.06844 0.87320 -0.48250 0.06859 0.87321 -0.53396 -0.18388 0.82527 -0.53395 -0.18333 0.82540 -0.54882 -0.42278 0.72115 -0.54885 -0.42258 0.72125 -0.52636 -0.63234 0.56841 -0.52624 -0.63268 0.56814 -0.46830 -0.79886 0.37751 -0.46853 -0.79853 0.37794 -0.37883 -0.91130 0.16134 -0.37868 -0.91140 0.16110 -0.26345 -0.96240 -0.06624 -0.26363 -0.96236 -0.06599 -0.13024 -0.94830 -0.28943 -0.13025 -0.94830 -0.28940 0.01260 -0.86936 -0.49402 0.01241 -0.86947 -0.49383 0.15419 -0.73133 -0.66437 0.15406 -0.73144 -0.66427 0.28565 -0.54281 -0.78979 0.28605 -0.54227 -0.79001 0.39810 -0.31601 -0.86119 0.39826 -0.31573 -0.86122 0.48276 -0.06805 -0.87311 0.48231 -0.06915 -0.87327 0.53383 0.18308 -0.82553 0.53405 0.18389 -0.82521 0.54885 0.42292 -0.72104 0.54876 0.42222 -0.72152 0.52638 0.63192 -0.56886 0.52635 0.63262 -0.56811 0.46817 0.79925 -0.37685 0.46838 0.79859 -0.37798 0.37871 0.91133 -0.16139 0.20879 0.94556 -0.24964 0.10469 0.99438 -0.01554 0.10494 0.99434 -0.01639 -0.00617 0.97579 0.21860 -0.00646 0.97559 0.21951 -0.11710 0.89057 0.43951 -0.11690 0.89089 0.43891 -0.22010 0.74477 0.62998 -0.22027 0.74429 0.63048 -0.30842 0.54678 0.77840 -0.30831 0.54730 0.77808 -0.37554 0.31143 0.87292 -0.37547 0.31211 0.87270 -0.41675 0.05536 0.90733 -0.41675 0.05494 0.90736 -0.42928 -0.20442 0.87973 -0.42923 -0.20487 0.87965 -0.41245 -0.45017 0.79198 -0.41236 -0.45051 0.79183 -0.36760 -0.66464 0.65048 -0.36794 -0.66389 0.65106 -0.29849 -0.83280 0.46620 -0.29802 -0.83342 0.46539 -0.20856 -0.94568 0.24937 -0.20895 -0.94543 0.25002 -0.10505 -0.99433 0.01640 -0.10503 -0.99433 0.01637 0.00611 -0.97579 -0.21862 0.00653 -0.97564 -0.21927 0.11726 -0.89059 -0.43942 0.11687 -0.89091 -0.43888 0.22007 -0.74474 -0.63003 0.22061 -0.74401 -0.63070 0.30858 -0.54681 -0.77831 0.30846 -0.54705 -0.77820 0.37563 -0.31117 -0.87297 0.37529 -0.31213 -0.87277 0.41651 -0.05583 -0.90741 0.41672 -0.05494 -0.90737 0.42927 0.20490 -0.87963 0.42926 0.20482 -0.87965 0.41257 0.44974 -0.79216 0.41257 0.44949 -0.79231 0.36768 0.66460 -0.65047 0.36768 0.66465 -0.65042 0.29846 0.83282 -0.46618 0.29841 0.83299 -0.46592 0.20870 0.94567 -0.24930 -0.45783 -0.88190 0.11244 -0.54782 -0.76889 0.32971 -0.54782 -0.76888 0.32971 -0.60051 -0.60355 0.52450 -0.60051 -0.60356 0.52450 -0.61232 -0.39663 0.68392 -0.61230 -0.39685 0.68381 -0.58237 -0.16331 0.79635 -0.58238 -0.16334 0.79634 -0.51279 0.08134 0.85465 -0.51275 0.08156 0.85466 -0.40813 0.32083 0.85469 -0.40818 0.32069 0.85472 -0.27579 0.53805 0.79652 -0.27579 0.53804 0.79652 -0.12459 0.71875 0.68402 -0.12459 0.71874 0.68402 0.03507 0.85042 0.52493 0.03506 0.85042 0.52494 0.19243 0.92417 0.32997 0.19246 0.92419 0.32991 0.33645 0.93492 0.11281 0.33639 0.93492 0.11294 0.45785 0.88189 -0.11247 0.45785 0.88188 -0.11248 0.54779 0.76895 -0.32961 0.54778 0.76896 -0.32960 0.60051 0.60357 -0.52448 0.60051 0.60339 -0.52469 0.61229 0.39686 -0.68381 0.61227 0.39673 -0.68391 0.58236 0.16331 -0.79636 0.58239 0.16337 -0.79633 0.51261 -0.08187 -0.85471 0.51260 -0.08188 -0.85471 0.40836 -0.32034 -0.85477 0.40835 -0.32036 -0.85476 0.27578 -0.53806 -0.79652 0.27580 -0.53804 -0.79652 0.12459 -0.71874 -0.68402 0.12457 -0.71876 -0.68401 -0.03507 -0.85042 -0.52493 -0.03506 -0.85042 -0.52494 -0.19223 -0.92412 -0.33022 -0.19223 -0.92412 -0.33022 -0.33658 -0.93490 -0.11259 -0.33667 -0.93488 -0.11248 -0.45783 -0.88190 0.11244 -0.79000 0.34521 -0.50669 -0.78991 0.34547 -0.50664 -0.78985 0.34539 -0.50680 -0.78989 0.34546 -0.50669 -0.78982 0.34538 -0.50686 -0.78989 0.34521 -0.50686 -0.78858 0.34592 -0.50841 -0.78979 0.34535 -0.50691 -0.79001 0.34553 -0.50645 -0.78987 0.34547 -0.50671 -0.78985 0.34512 -0.50698 -0.78969 0.34461 -0.50758 -0.78984 0.34549 -0.50674 -0.78982 0.34540 -0.50684 -0.78931 0.34558 -0.50750 -0.78979 0.34536 -0.50691 -0.78983 0.34539 -0.50683 -0.78982 0.34539 -0.50685 -0.78987 0.34519 -0.50690 -0.78968 0.34459 -0.50761 -0.78977 0.34512 -0.50710 -0.78994 0.34566 -0.50647 0.78990 -0.34527 0.50681 0.78987 -0.34528 0.50683 0.78975 -0.34542 0.50692 0.78994 -0.34526 0.50675 0.78979 -0.34550 0.50682 0.78976 -0.34554 0.50684 0.78972 -0.34563 0.50684 0.78989 -0.34532 0.50678 0.78980 -0.34564 0.50670 0.78989 -0.34542 0.50671 0.78996 -0.34488 0.50697 0.78980 -0.34554 0.50678 0.78978 -0.34527 0.50699 0.78976 -0.34548 0.50687 0.78978 -0.34555 0.50679 0.78977 -0.34542 0.50690 0.78994 -0.34563 0.50650 0.78988 -0.34548 0.50669 0.78988 -0.34548 0.50669 0.78975 -0.34535 0.50697 0.78971 -0.34536 0.50704 0.78992 -0.34542 0.50666 0.78992 -0.34542 0.50667 0.78965 -0.34547 0.50705 0.78990 -0.34527 0.50681 0.78989 -0.34527 0.50682 0.78975 -0.34544 0.50692 0.78993 -0.34527 0.50676 0.78980 -0.34549 0.50681 0.78983 -0.34545 0.50679 0.78987 -0.34535 0.50679 0.78982 -0.34544 0.50681 0.78989 -0.34519 0.50687 0.78980 -0.34542 0.50685 0.78977 -0.34564 0.50675 0.78987 -0.34522 0.50687 0.78989 -0.34557 0.50661 0.78992 -0.34532 0.50674 0.78982 -0.34503 0.50708 0.78987 -0.34549 0.50669 0.78996 -0.34560 0.50648 0.78984 -0.34530 0.50687 0.78961 -0.34519 0.50731 0.78995 -0.34554 0.50654 0.79005 -0.34553 0.50639 0.78965 -0.34542 0.50708 0.78994 -0.34528 0.50673 0.78986 -0.34530 0.50684 0.32049 -0.54648 -0.77372 0.36361 -0.31180 -0.87782 0.36356 -0.31216 -0.87771 0.38210 -0.05500 -0.92248 0.38211 -0.05495 -0.92248 0.37454 0.20524 -0.90421 0.37454 0.20524 -0.90421 0.34145 0.45154 -0.82433 0.34152 0.45115 -0.82452 0.28517 0.66687 -0.68846 0.28507 0.66715 -0.68822 0.20925 0.83727 -0.50517 0.20934 0.83711 -0.50540 0.11951 0.94998 -0.28853 0.11945 0.95004 -0.28837 0.02126 0.99846 -0.05132 0.02126 0.99846 -0.05132 -0.07873 0.97861 0.19007 -0.07879 0.97857 0.19023 -0.17264 0.89245 0.41681 -0.17260 0.89251 0.41669 -0.25547 0.74453 0.61677 -0.25530 0.74495 0.61634 -0.32026 0.54738 0.77318 -0.32033 0.54710 0.77335 -0.36360 0.31184 0.87781 -0.36366 0.31135 0.87796 -0.37454 -0.20524 0.90421 -0.34158 -0.45087 0.82464 -0.34145 -0.45154 0.82433 -0.28500 -0.66734 0.68806 -0.28518 -0.66684 0.68847 -0.20940 -0.83700 0.50554 -0.20925 -0.83727 0.50517 -0.11941 -0.95007 0.28827 -0.11951 -0.94999 0.28852 -0.02126 -0.99846 0.05132 -0.02124 -0.99846 0.05128 0.07873 -0.97861 -0.19006 0.07880 -0.97857 -0.19023 0.17279 -0.89226 -0.41715 0.17259 -0.89252 -0.41668 0.25529 -0.74495 -0.61634 0.25529 -0.74495 -0.61634 0.32027 -0.54734 -0.77320 0.92377 -0.00296 0.38293 0.92396 -0.00041 0.38249 0.92376 0.00066 0.38298 0.92308 0.00206 0.38460 0.92460 -0.00136 0.38093 0.92376 0.00009 0.38298 0.92391 -0.00024 0.38262 0.92266 -0.00217 0.38561 0.92387 -0.00002 0.38270 0.92387 -0.00001 0.38271 0.92379 0.00040 0.38290 0.92404 0.00309 0.38228 0.92382 -0.00000 0.38282 0.92396 -0.00073 0.38248 0.92332 0.00135 0.38402 0.92421 -0.00063 0.38189 0.92367 0.00029 0.38318 0.92390 -0.00023 0.38262 0.92557 0.00302 0.37857 0.92387 -0.00003 0.38270 0.92387 -0.00001 0.38271 0.92387 0.00001 0.38272 0.70711 0.70711 0.00000 0.70711 0.70711 0.00000 0.15149 -0.98845 -0.00284 0.14816 -0.98896 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 -0.57735 0.57735 -0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 0.57735 -0.57735 0.57735 0.57735 -0.57735 0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 -0.57735 0.57735 -0.57735 0.57735 0.57735 0.40825 0.40825 -0.81649 0.62667 -0.26072 -0.73434 0.81146 -0.33760 0.47700 0.81146 -0.33760 0.47700 0.70708 0.70708 0.00000 0.40825 0.40825 -0.81649 0.62667 -0.26072 -0.73434 0.32963 0.13593 -0.93426 0.92447 0.38124 0.00287 0.92447 0.38124 0.00287 0.81146 -0.33760 0.47700 0.62667 -0.26072 -0.73434 0.00000 1.00000 -0.00000 0.40825 0.40825 -0.81649 0.70708 0.70708 0.00000 0.73919 0.67342 -0.00693 0.73919 0.67342 -0.00693 0.59154 0.53893 -0.59966 0.40825 0.40825 -0.81649 0.99563 -0.09293 -0.00933 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.70708 0.70708 0.00000 0.81146 -0.33760 0.47700 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 0.70708 0.70708 0.00000 0.81146 -0.33760 0.47700 0.92447 0.38124 0.00287 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 0.81146 -0.33760 0.47700 0.00000 0.00000 0.00000 0.73919 0.67342 -0.00693 0.70708 0.70708 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.73919 0.67342 -0.00693 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 -1.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -1.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 -0.00000 0.82517 0.00000 -0.56488 0.72928 0.00000 -0.68422 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -0.00000 -1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -0.00000 -1.00000 -0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.38269 0.00001 -0.92388 0.38269 0.00001 -0.92388 0.38268 -0.00002 -0.92388 0.38268 -0.00001 -0.92388 1.00000 -0.00000 0.00000 -1.00000 -0.00000 -0.00000 0.00000 1.00000 0.00000 0.00000 -0.70708 -0.70708 0.57323 -0.58531 -0.57335 0.57323 -0.58531 0.57335 0.57323 -0.58531 0.57335 0.00000 -0.70708 0.70708 0.00000 -0.70708 -0.70708 -1.00000 -0.00000 0.00000 0.00000 0.00000 1.00000 0.00000 1.00000 0.00000 0.99978 -0.02085 0.00000 -0.72701 -0.68663 0.00001 -0.99986 -0.01651 -0.00012 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 1.00000 -0.00000 0.70711 0.70711 0.00000 -0.70711 0.70711 0.00000 0.00000 1.00000 -0.00000 -0.70712 0.70710 0.00000 -1.00000 0.00000 0.00000 0.70712 0.70710 0.00000 0.00000 -1.00000 0.00000 0.72656 -0.68710 0.00000 -0.00000 0.00000 -1.00000 0.00000 -0.00000 1.00000 -0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 0.00000 -1.00000 0.00000 -0.00000 -1.00000 1.00000 0.00000 -0.00000 1.00000 0.00000 0.00000 0.94018 0.31509 0.12953 1.00000 0.00000 -0.00000 -0.98744 0.15799 0.00000 -0.83065 0.54491 -0.11444 -0.98744 0.15799 0.00000 -0.98744 0.15799 0.00000 0.97548 0.22011 0.00000 0.97548 0.22011 -0.00000 0.34868 0.91062 0.22180 0.97548 0.22011 -0.00000 -0.00000 1.00000 0.00000 -0.00000 0.00000 1.00000 -0.00000 0.00000 -1.00000 0.01305 -0.99991 0.00000 0.59051 0.80703 0.00000 0.77435 -0.63276 0.00000 -0.12278 0.98418 0.12771 0.35758 0.93388 0.00000

12 0 10 0 14 0 26 1 27 1 22 1 28 2 24 2 29 2 11 3 13 3 16 3 28 4 29 4 26 4 26 5 29 5 27 5 27 6 29 6 22 6 22 7 29 7 24 7 10 8 12 8 11 8 11 9 12 9 13 9 13 10 12 10 16 10 16 11 12 11 14 11 15 12 23 13 25 14 25 15 17 16 15 17 14 18 15 18 17 18 17 18 16 18 14 18 2 19 6 20 7 21 2 22 7 23 3 24 0 25 2 26 3 27 3 28 1 29 0 30 0 31 1 32 5 33 5 34 4 35 0 36 4 37 5 38 10 39 10 40 8 41 4 42 3 43 7 44 11 45 1 46 10 47 5 48 10 49 1 50 3 51 10 52 3 53 11 54 8 55 18 56 19 57 19 58 34 59 8 60 0 61 4 62 8 63 2 64 9 65 6 66 0 67 8 68 9 69 0 70 9 71 2 72 18 73 20 74 21 75 21 76 19 77 18 78 20 79 30 80 32 81 32 82 21 83 20 84 30 85 31 86 33 87 33 88 32 89 30 90 26 91 28 92 33 93 33 94 31 95 26 96 22 97 24 97 25 97 25 97 23 97 22 97 28 98 32 99 33 100 21 101 32 102 28 103 9 104 19 105 21 106 9 107 21 108 28 109 6 110 9 111 11 112 11 113 7 114 6 115 17 116 25 116 24 116 16 117 17 117 24 117 11 118 16 118 24 118 24 118 28 118 11 118 11 119 28 119 34 119 8 120 20 121 18 122 14 123 22 123 23 123 23 123 15 123 14 123 10 124 26 124 22 124 22 124 14 124 10 124 8 125 10 126 26 127 30 128 26 129 31 130 20 131 8 132 26 133 20 134 26 135 30 136 35 137 38 138 39 139 39 140 36 141 35 142 41 143 44 144 45 145 45 146 42 147 41 148 35 149 40 150 38 151 35 152 37 153 40 154 42 155 45 156 43 157 43 158 45 159 46 160 47 161 55 162 61 163 61 164 53 165 47 166 47 167 48 168 56 169 56 170 55 171 47 172 48 173 51 174 59 175 59 176 56 177 48 178 51 179 52 180 60 181 60 182 59 183 51 184 49 185 57 186 60 187 60 188 52 189 49 190 49 191 50 192 58 193 58 194 57 195 49 196 50 197 54 198 62 199 62 200 58 201 50 202 53 203 61 204 62 205 62 206 54 207 53 208 55 209 56 210 59 211 55 212 59 213 61 214 57 215 58 216 60 217 58 218 62 219 60 220 59 221 60 222 62 223 62 224 61 225 59 226 49 227 52 228 50 229 47 230 51 231 48 232 47 233 53 234 51 235 51 236 53 237 54 238 54 239 52 240 51 241 50 242 52 243 54 244 35 245 36 246 63 247 63 248 37 249 35 250 38 251 40 252 64 253 64 254 39 255 38 256 41 257 42 258 43 259 43 260 65 261 41 262 40 263 65 264 43 265 43 266 64 267 40 268 44 269 66 270 46 271 46 272 45 273 44 274 41 275 65 276 44 277 37 278 63 279 46 280 46 281 66 282 37 283 36 284 39 285 64 286 36 287 64 288 63 289 43 290 46 291 63 292 63 293 64 294 43 295 44 296 65 297 66 298 37 299 66 300 65 301 65 302 40 303 37 304 80 305 67 306 68 307 68 308 77 309 80 310 73 311 68 312 67 313 74 314 71 315 70 316 70 317 69 318 74 319 81 320 69 321 70 322 81 323 78 324 69 325 80 326 70 327 71 328 71 329 67 330 80 331 76 332 68 333 73 334 73 335 67 336 71 337 71 338 72 339 73 340 77 341 68 342 74 343 74 344 69 345 77 346 76 347 75 348 74 349 74 350 68 351 76 352 79 353 77 354 69 355 69 356 78 357 79 358 82 359 81 360 70 361 70 362 80 363 82 364 74 365 72 366 71 367 75 368 72 369 74 370 82 371 80 372 77 373 82 374 77 375 79 376 76 377 73 378 72 379 72 380 75 381 76 382 82 383 79 384 78 385 78 386 81 387 82 388 123 389 127 390 129 391 129 392 125 393 123 394 130 395 128 396 124 397 124 398 126 399 130 400 117 401 125 402 129 403 129 404 121 405 117 406 130 407 126 408 118 409 118 410 122 411 130 412 115 413 117 414 121 415 121 416 119 417 115 418 122 419 118 420 116 421 116 422 120 423 122 424 115 425 119 426 127 427 127 428 123 429 115 430 128 431 120 432 116 433 116 434 124 435 128 436 127 437 119 438 121 439 121 440 129 441 127 442 122 443 120 444 128 445 128 446 130 447 122 448 123 449 125 450 117 451 117 452 115 453 123 454 118 455 126 456 124 457 124 458 116 459 118 460 109 461 107 461 137 461 137 461 135 461 109 461 138 462 108 462 110 462 110 462 136 462 138 462 107 463 101 463 143 463 143 463 137 463 107 463 144 464 102 464 108 464 108 464 138 464 144 464 101 465 99 465 145 465 145 465 143 465 101 465 146 466 100 466 102 466 102 466 144 466 146 466 95 467 97 467 149 467 149 467 147 467 95 467 150 468 98 468 96 468 96 468 148 468 150 468 93 469 103 469 141 469 141 469 151 469 93 469 142 470 104 470 94 470 94 470 152 470 142 470 97 471 89 471 155 471 155 471 149 471 97 471 156 472 90 472 98 472 98 472 150 472 156 472 83 473 85 473 159 473 159 473 161 473 83 473 160 474 86 474 84 474 84 474 162 474 160 474 131 475 165 475 163 475 163 475 141 475 131 475 164 476 166 476 132 476 132 476 142 476 164 476 145 477 167 477 169 477 169 477 143 477 145 477 170 478 168 478 146 478 146 478 144 478 170 478 143 479 171 479 173 479 173 479 133 479 143 479 174 480 172 480 144 480 144 480 134 480 174 480 175 481 177 481 179 481 180 482 178 482 176 482 143 483 175 483 179 483 179 483 137 483 143 483 180 484 176 484 144 484 144 484 138 484 180 484 137 485 179 485 177 485 177 485 133 485 137 485 178 486 180 486 138 486 138 486 134 486 178 486 133 487 177 487 175 487 175 487 143 487 133 487 176 488 178 488 134 488 134 488 144 488 176 488 181 489 183 489 185 489 186 490 184 490 182 490 137 491 181 491 185 491 185 491 135 491 137 491 186 492 182 492 138 492 138 492 136 492 186 492 135 493 185 493 183 493 183 493 133 493 135 493 184 494 186 494 136 494 136 494 134 494 184 494 133 495 183 495 181 495 181 495 137 495 133 495 182 496 184 496 134 496 134 496 138 496 182 496 187 497 189 497 191 497 192 498 190 498 188 498 155 499 187 499 191 499 191 499 149 499 155 499 192 500 188 500 156 500 156 500 150 500 192 500 149 501 191 501 189 501 189 501 157 501 149 501 190 502 192 502 150 502 150 502 158 502 190 502 157 503 189 503 187 503 187 503 155 503 157 503 188 504 190 504 158 504 158 504 156 504 188 504 193 505 195 505 153 505 154 506 196 506 194 506 149 507 193 507 153 507 154 508 194 508 150 508 157 509 195 509 193 509 193 509 149 509 157 509 194 510 196 510 158 510 158 510 150 510 194 510 197 511 153 511 199 511 200 512 154 512 198 512 149 513 197 513 199 513 199 513 147 513 149 513 200 514 198 514 150 514 150 514 148 514 200 514 147 515 199 515 153 515 154 516 200 516 148 516 153 517 197 517 149 517 150 518 198 518 154 518 99 519 105 519 107 519 108 520 106 520 100 520 99 521 101 521 107 521 108 522 102 522 100 522 83 523 93 523 91 523 92 524 94 524 84 524 83 525 91 525 85 525 86 526 92 526 84 526 87 527 89 527 95 527 96 528 90 528 88 528 89 529 97 529 95 529 96 530 98 530 90 530 85 531 91 531 87 531 88 532 92 532 86 532 91 533 95 533 87 533 88 534 96 534 92 534 107 535 105 535 113 535 114 536 106 536 108 536 107 537 113 537 109 537 110 538 114 538 108 538 111 539 113 539 105 539 106 540 114 540 112 540 111 541 105 541 103 541 104 542 106 542 112 542 85 543 87 543 195 543 195 543 159 543 85 543 196 544 88 544 86 544 86 544 160 544 196 544 87 545 89 545 187 545 187 545 195 545 87 545 188 546 90 546 88 546 88 546 196 546 188 546 109 547 113 547 183 547 183 547 185 547 109 547 184 548 114 548 110 548 110 548 186 548 184 548 111 549 165 549 183 549 183 549 113 549 111 549 184 550 166 550 112 550 112 550 114 550 184 550 83 551 161 551 165 551 165 551 111 551 83 551 166 552 162 552 84 552 84 552 112 552 166 552 91 553 93 553 151 553 151 553 153 553 91 553 152 554 94 554 92 554 92 554 154 554 152 554 91 555 153 555 199 555 199 555 95 555 91 555 200 556 154 556 92 556 92 556 96 556 200 556 99 557 167 557 139 557 139 557 105 557 99 557 140 558 168 558 100 558 100 558 106 558 140 558 103 559 105 559 139 559 139 559 163 559 103 559 140 560 106 560 104 560 104 560 164 560 140 560 139 561 175 561 183 561 184 562 176 562 140 562 139 563 183 563 165 563 166 564 184 564 140 564 139 565 165 565 163 565 164 566 166 566 140 566 151 567 161 567 153 567 154 568 162 568 152 568 153 569 161 569 159 569 160 570 162 570 154 570 153 571 159 571 195 571 196 572 160 572 154 572 151 573 163 573 165 573 166 574 164 574 152 574 151 575 165 575 161 575 162 576 166 576 152 576 83 577 111 577 103 577 104 578 112 578 84 578 83 579 103 579 93 579 94 580 104 580 84 580 139 581 167 581 175 581 176 582 168 582 140 582 261 583 233 583 225 583 226 584 234 584 262 584 301 585 281 585 291 585 292 586 282 586 302 586 301 587 273 587 281 587 282 588 274 588 302 588 249 589 235 589 239 589 240 590 236 590 250 590 249 591 237 591 235 591 236 592 238 592 250 592 247 593 241 593 205 593 206 594 242 594 248 594 247 595 239 595 241 595 242 596 240 596 248 596 249 597 239 597 247 597 248 598 240 598 250 598 261 599 235 599 237 599 238 600 236 600 262 600 261 601 217 601 235 601 236 602 218 602 262 602 261 603 225 603 217 603 218 604 226 604 262 604 281 605 279 605 261 605 261 605 237 605 281 605 262 606 280 606 282 606 282 606 238 606 262 606 285 607 233 607 261 607 261 607 279 607 285 607 262 608 234 608 286 608 286 608 280 608 262 608 293 609 247 609 201 609 201 609 289 609 293 609 202 610 248 610 294 610 294 610 290 610 202 610 293 611 291 611 249 611 249 611 247 611 293 611 250 612 292 612 294 612 294 612 248 612 250 612 301 613 239 613 235 613 235 613 273 613 301 613 236 614 240 614 302 614 302 614 274 614 236 614 273 615 235 615 217 615 217 615 271 615 273 615 218 616 236 616 274 616 274 616 272 616 218 616 275 617 271 617 217 617 217 617 215 617 275 617 218 618 272 618 276 618 276 618 216 618 218 618 297 619 295 619 213 619 213 619 205 619 297 619 214 620 296 620 298 620 298 620 206 620 214 620 299 621 297 621 205 621 205 621 241 621 299 621 206 622 298 622 300 622 300 622 242 622 206 622 273 623 279 623 281 623 282 624 280 624 274 624 273 625 271 625 279 625 280 626 272 626 274 626 277 627 271 627 275 627 276 628 272 628 278 628 277 629 279 629 271 629 272 630 280 630 278 630 293 631 289 631 297 631 298 632 290 632 294 632 299 633 293 633 297 633 298 634 294 634 300 634 295 635 287 635 289 635 290 636 288 636 296 636 297 637 295 637 289 637 290 638 296 638 298 638 301 639 293 639 299 639 300 640 294 640 302 640 301 641 291 641 293 641 294 642 292 642 302 642 285 643 283 643 277 643 278 644 284 644 286 644 285 645 279 645 277 645 278 646 280 646 286 646 247 647 203 647 251 647 252 648 204 648 248 648 253 649 201 649 247 649 248 650 202 650 254 650 251 651 203 651 201 651 201 651 253 651 251 651 202 652 204 652 252 652 252 652 254 652 202 652 203 653 247 653 201 653 202 654 248 654 204 654 243 655 205 655 207 655 207 655 251 655 243 655 208 656 206 656 244 656 244 656 252 656 208 656 251 657 207 657 247 657 248 658 208 658 252 658 207 659 205 659 247 659 248 660 206 660 208 660 243 661 211 661 213 661 213 661 245 661 243 661 214 662 212 662 244 662 244 662 246 662 214 662 251 663 209 663 211 663 211 663 243 663 251 663 212 664 210 664 252 664 252 664 244 664 212 664 245 665 213 665 209 665 209 665 251 665 245 665 210 666 214 666 246 666 246 666 252 666 210 666 213 667 211 667 209 667 210 668 212 668 214 668 267 669 217 669 219 669 219 669 263 669 267 669 220 670 218 670 268 670 268 670 264 670 220 670 265 671 215 671 217 671 217 671 267 671 265 671 218 672 216 672 266 672 266 672 268 672 218 672 263 673 219 673 215 673 215 673 265 673 263 673 216 674 220 674 264 674 264 674 266 674 216 674 219 675 217 675 215 675 216 676 218 676 220 676 267 677 223 677 225 677 225 677 257 677 267 677 226 678 224 678 268 678 268 678 258 678 226 678 263 679 221 679 223 679 223 679 267 679 263 679 224 680 222 680 264 680 264 680 268 680 224 680 257 681 225 681 221 681 221 681 263 681 257 681 222 682 226 682 258 682 258 682 264 682 222 682 225 683 223 683 221 683 222 684 224 684 226 684 257 685 229 685 227 685 227 685 267 685 257 685 228 686 230 686 258 686 258 686 268 686 228 686 255 687 233 687 231 687 231 687 257 687 255 687 232 688 234 688 256 688 256 688 258 688 232 688 269 689 235 689 237 689 237 689 259 689 269 689 238 690 236 690 270 690 270 690 260 690 238 690 301 691 299 691 241 691 241 691 239 691 301 691 242 692 300 692 302 692 302 692 240 692 242 692 287 693 295 693 245 693 245 693 251 693 287 693 246 694 296 694 288 694 288 694 252 694 246 694 291 695 281 695 259 695 259 695 249 695 291 695 260 696 282 696 292 696 292 696 250 696 260 696 289 697 287 697 251 697 251 697 253 697 289 697 252 698 288 698 290 698 290 698 254 698 252 698 283 699 285 699 255 699 255 699 257 699 283 699 256 700 286 700 284 700 284 700 258 700 256 700 277 701 283 701 257 701 257 701 263 701 277 701 258 702 284 702 278 702 278 702 264 702 258 702 275 703 277 703 263 703 263 703 265 703 275 703 264 704 278 704 276 704 276 704 266 704 264 704 315 705 313 705 317 705 329 706 330 706 325 706 331 707 327 707 332 707 314 708 316 708 319 708 331 709 332 709 329 709 329 710 332 710 330 710 330 711 332 711 325 711 325 712 332 712 327 712 313 713 315 713 314 713 314 714 315 714 316 714 316 715 315 715 319 715 319 716 315 716 317 716 318 717 326 718 328 719 328 720 320 721 318 722 317 723 318 723 320 723 320 723 319 723 317 723 305 724 309 725 310 726 305 727 310 728 306 729 303 730 305 731 306 732 306 733 304 734 303 735 303 736 304 737 308 738 308 739 307 740 303 741 307 742 308 743 313 744 313 745 311 746 307 747 306 748 310 749 314 750 304 751 313 752 308 753 313 754 304 755 306 756 313 757 306 758 314 759 311 760 321 761 322 762 322 763 337 764 311 765 303 766 307 767 311 768 305 769 312 770 309 771 303 772 311 773 312 774 303 775 312 776 305 777 321 778 323 779 324 780 324 781 322 782 321 783 323 784 333 785 335 786 335 787 324 788 323 789 333 790 334 791 336 792 336 793 335 794 333 795 329 796 331 797 336 798 336 799 334 800 329 801 325 802 327 802 328 802 328 802 326 802 325 802 331 803 335 804 336 805 324 806 335 807 331 808 312 809 322 810 324 811 312 812 324 813 331 814 309 815 312 816 314 817 314 818 310 819 309 820 320 821 328 821 327 821 319 822 320 822 327 822 314 823 319 823 327 823 327 823 331 823 314 823 314 824 331 824 337 824 311 825 323 826 321 827 317 828 325 828 326 828 326 828 318 828 317 828 313 829 329 829 325 829 325 829 317 829 313 829 311 830 313 831 329 832 333 833 329 834 334 835 323 836 311 837 329 838 323 839 329 840 333 841 338 842 340 843 341 844 341 845 339 846 338 847 340 848 338 849 346 850 346 851 347 852 340 853 341 854 340 855 347 856 347 857 348 858 341 859 339 860 341 861 348 862 348 863 349 864 339 865 338 866 339 867 349 868 349 869 346 870 338 871 349 872 348 873 347 874 347 875 346 876 349 877 390 878 391 878 388 878 364 879 373 880 374 881 374 882 365 883 364 884 371 885 374 886 375 887 375 888 372 889 371 890 362 891 363 892 366 893 366 894 365 895 362 896 367 897 368 898 370 899 370 900 369 901 367 902 362 903 365 904 374 905 374 906 371 907 362 908 363 909 372 910 373 911 373 912 364 913 363 914 380 915 381 915 385 915 380 916 385 916 384 916 382 917 386 917 385 917 385 917 380 917 382 917 376 918 388 918 391 918 391 918 378 918 376 918 383 919 387 919 385 919 385 919 381 919 383 919 379 920 392 920 389 920 389 920 377 920 379 920 388 921 389 921 392 921 392 921 390 921 388 921 387 922 389 922 388 922 388 922 386 922 387 922 385 923 387 923 386 923 386 923 384 923 385 923 382 924 383 924 381 924 381 924 380 924 382 924 377 925 383 925 382 925 382 925 376 925 377 925 376 926 378 926 379 926 379 926 377 926 376 926 390 927 392 927 379 927 379 927 378 927 390 927 353 928 358 929 361 930 361 931 354 932 353 933 353 934 354 935 399 936 399 937 400 938 353 939 354 940 361 941 397 942 397 943 399 944 354 945 361 946 358 947 398 948 398 949 397 950 361 951 358 952 353 953 400 954 400 955 398 956 358 957 398 958 400 959 401 960 401 961 403 962 398 963 397 964 398 965 403 966 403 967 404 968 397 969 399 970 397 971 404 972 404 973 402 974 399 975 400 976 399 977 402 978 402 979 401 980 400 981 404 982 403 983 401 984 401 985 402 986 404 987 350 988 355 989 357 990 357 991 352 992 350 993 350 994 352 995 407 996 407 997 408 998 350 999 352 1000 357 1001 405 1002 405 1003 407 1004 352 1005 357 1006 355 1007 406 1008 406 1009 405 1010 357 1011 355 1012 350 1013 408 1014 408 1015 406 1016 355 1017 406 1018 408 1019 409 1020 409 1021 411 1022 406 1023 405 1024 406 1025 411 1026 411 1027 412 1028 405 1029 407 1030 405 1031 412 1032 412 1033 410 1034 407 1035 408 1036 407 1037 410 1038 410 1039 409 1040 408 1041 409 1042 410 1043 414 1044 414 1045 413 1046 409 1047 410 1048 412 1049 415 1050 415 1051 414 1052 410 1053 412 1054 411 1055 416 1056 416 1057 415 1058 412 1059 411 1060 409 1061 413 1062 413 1063 416 1064 411 1065 415 1066 416 1067 413 1068 413 1069 414 1070 415 1071 440 1072 442 1072 443 1072 443 1072 441 1072 440 1072 437 1073 441 1073 443 1073 443 1073 439 1073 437 1073 436 1074 437 1074 439 1074 439 1074 438 1074 436 1074 436 1075 438 1075 442 1075 442 1075 440 1075 436 1075 428 1076 432 1076 434 1076 434 1076 430 1076 428 1076 432 1077 433 1077 435 1077 435 1077 434 1077 432 1077 429 1078 433 1078 435 1078 435 1078 431 1078 429 1078 426 1079 429 1079 431 1079 431 1079 427 1079 426 1079 423 1080 426 1080 427 1080 427 1080 424 1080 423 1080 420 1081 423 1081 424 1081 424 1081 421 1081 420 1081 418 1082 417 1082 444 1082 444 1082 445 1082 418 1082 419 1083 417 1083 444 1083 444 1083 446 1083 419 1083 422 1084 419 1084 446 1084 446 1084 447 1084 422 1084 425 1085 422 1085 447 1085 447 1085 448 1085 425 1085 445 1086 444 1086 450 1086 450 1086 449 1086 445 1086 446 1087 444 1087 450 1087 450 1087 451 1087 446 1087 447 1088 446 1088 451 1088 451 1088 452 1088 447 1088 448 1089 447 1089 452 1089 452 1089 453 1089 448 1089 449 1090 450 1090 455 1090 455 1090 454 1090 449 1090 451 1091 450 1091 455 1091 455 1091 456 1091 451 1091 452 1092 451 1092 456 1092 456 1092 457 1092 452 1092 453 1093 452 1093 457 1093 457 1093 458 1093 453 1093 425 1094 428 1094 430 1094 430 1094 460 1094 425 1094 422 1095 425 1095 460 1095 460 1095 461 1095 422 1095 419 1096 422 1096 466 1096 466 1096 467 1096 419 1096 417 1097 419 1097 462 1097 462 1097 463 1097 417 1097 418 1098 459 1098 468 1098 468 1098 444 1098 418 1098 420 1099 421 1099 459 1099 459 1099 445 1099 420 1099 442 1100 438 1100 439 1100 439 1100 443 1100 442 1100 421 1101 469 1101 459 1101 459 1102 469 1102 463 1102 463 1103 469 1103 467 1103 461 1104 462 1104 469 1104 460 1105 461 1105 469 1105 430 1106 465 1106 469 1106 469 1106 434 1106 430 1106 460 1107 469 1107 465 1107 434 1108 435 1108 469 1108 431 1109 435 1109 469 1109 427 1110 431 1110 469 1110 424 1111 427 1111 469 1111 421 1112 424 1112 469 1112 440 1113 441 1113 437 1113 437 1113 436 1113 440 1113 507 1114 524 1114 508 1114 508 1115 524 1115 525 1115 524 1116 507 1116 509 1116 524 1117 509 1117 526 1117 526 1118 509 1118 510 1118 526 1119 510 1119 527 1119 527 1120 510 1120 511 1120 527 1121 511 1121 528 1121 528 1122 511 1122 512 1122 528 1123 512 1123 529 1123 529 1124 512 1124 513 1124 529 1125 513 1125 530 1125 530 1126 513 1126 514 1126 530 1127 514 1127 531 1127 532 1128 515 1128 516 1128 532 1129 516 1129 533 1129 533 1130 516 1130 517 1130 533 1131 517 1131 534 1131 534 1132 517 1132 518 1132 534 1133 518 1133 535 1133 535 1134 518 1134 519 1134 535 1135 519 1135 536 1135 536 1136 519 1136 520 1136 536 1137 520 1137 537 1137 556 1138 542 1138 557 1138 557 1139 542 1139 543 1139 554 1140 556 1140 555 1140 555 1141 556 1141 557 1141 545 1142 541 1142 544 1142 544 1143 541 1143 540 1143 542 1144 540 1144 543 1144 543 1145 540 1145 541 1145 544 1146 540 1146 546 1146 546 1147 540 1147 542 1147 546 1148 542 1148 548 1148 548 1149 542 1149 550 1149 556 1150 554 1150 542 1150 542 1151 554 1151 552 1151 542 1152 552 1152 550 1152 541 1153 545 1153 543 1153 543 1154 545 1154 547 1154 543 1155 547 1155 549 1155 555 1156 557 1156 553 1156 553 1157 557 1157 543 1157 553 1158 543 1158 551 1158 551 1159 543 1159 549 1159 552 1160 554 1160 553 1160 553 1161 554 1161 555 1161 547 1162 546 1162 548 1162 547 1163 548 1163 549 1163 549 1164 548 1164 550 1164 549 1165 550 1165 551 1165 551 1166 550 1166 552 1166 551 1167 552 1167 553 1167 547 1168 545 1168 546 1168 546 1169 545 1169 544 1169 561 1170 567 1170 560 1170 560 1171 567 1171 566 1171 559 1172 561 1172 558 1172 558 1173 561 1173 560 1173 562 1174 564 1174 563 1174 563 1175 564 1175 565 1175 567 1176 565 1176 566 1176 566 1177 565 1177 564 1177 565 1178 567 1178 563 1178 563 1179 567 1179 561 1179 563 1180 561 1180 559 1180 558 1181 560 1181 562 1181 562 1182 560 1182 566 1182 562 1183 566 1183 564 1183 558 1184 562 1184 559 1184 559 1185 562 1185 563 1185 571 1186 569 1186 577 1186 577 1187 569 1187 575 1187 574 1188 575 1188 568 1188 568 1189 575 1189 569 1189 570 1190 572 1190 576 1190 576 1191 572 1191 578 1191 579 1192 578 1192 573 1192 573 1193 578 1193 572 1193 576 1194 578 1194 574 1194 574 1195 578 1195 579 1195 574 1196 579 1196 575 1196 575 1197 579 1197 577 1197 569 1198 571 1198 568 1198 568 1199 571 1199 573 1199 568 1200 573 1200 570 1200 570 1201 573 1201 572 1201 568 1202 570 1202 574 1202 574 1203 570 1203 576 1203 573 1204 571 1204 579 1204 579 1205 571 1205 577 1205 583 1206 589 1206 582 1206 582 1207 589 1207 588 1207 581 1208 583 1208 580 1208 580 1209 583 1209 582 1209 584 1210 586 1210 585 1210 585 1211 586 1211 587 1211 589 1212 587 1212 588 1212 588 1213 587 1213 586 1213 587 1214 589 1214 585 1214 585 1215 589 1215 583 1215 585 1216 583 1216 581 1216 580 1217 582 1217 584 1217 584 1218 582 1218 588 1218 584 1219 588 1219 586 1219 580 1220 584 1220 581 1220 581 1221 584 1221 585 1221 598 1222 592 1222 599 1222 599 1223 592 1223 593 1223 596 1224 598 1224 597 1224 597 1225 598 1225 599 1225 595 1226 591 1226 594 1226 594 1227 591 1227 590 1227 592 1228 590 1228 593 1228 593 1229 590 1229 591 1229 590 1230 592 1230 594 1230 594 1231 592 1231 598 1231 594 1232 598 1232 596 1232 597 1233 599 1233 595 1233 595 1234 599 1234 593 1234 595 1235 593 1235 591 1235 597 1236 595 1236 596 1236 596 1237 595 1237 594 1237 603 1238 617 1238 602 1238 602 1239 617 1239 616 1239 601 1240 603 1240 600 1240 600 1241 603 1241 602 1241 612 1242 614 1242 613 1242 613 1243 614 1243 615 1243 617 1244 615 1244 616 1244 616 1245 615 1245 614 1245 613 1246 615 1246 611 1246 611 1247 615 1247 617 1247 611 1248 617 1248 609 1248 609 1249 617 1249 607 1249 603 1250 601 1250 617 1250 617 1251 601 1251 605 1251 617 1252 605 1252 607 1252 614 1253 612 1253 616 1253 616 1254 612 1254 610 1254 616 1255 610 1255 608 1255 600 1256 602 1256 604 1256 604 1257 602 1257 616 1257 604 1258 616 1258 606 1258 606 1259 616 1259 608 1259 605 1260 601 1260 604 1260 604 1261 601 1261 600 1261 610 1262 611 1262 609 1262 610 1263 609 1263 608 1263 608 1264 609 1264 607 1264 608 1265 607 1265 606 1265 606 1266 607 1266 605 1266 606 1267 605 1267 604 1267 610 1268 612 1268 611 1268 611 1269 612 1269 613 1269 626 1270 620 1270 627 1270 627 1271 620 1271 621 1271 624 1272 626 1272 625 1272 625 1273 626 1273 627 1273 623 1274 619 1274 622 1274 622 1275 619 1275 618 1275 620 1276 618 1276 621 1276 621 1277 618 1277 619 1277 618 1278 620 1278 622 1278 622 1279 620 1279 626 1279 622 1280 626 1280 624 1280 625 1281 627 1281 623 1281 623 1282 627 1282 621 1282 623 1283 621 1283 619 1283 625 1284 623 1284 624 1284 624 1285 623 1285 622 1285 637 1286 634 1286 631 1286 631 1287 634 1287 628 1287 629 1288 628 1288 635 1288 635 1289 628 1289 634 1289 636 1290 639 1290 630 1290 630 1291 639 1291 633 1291 632 1292 633 1292 638 1292 638 1293 633 1293 639 1293 630 1294 633 1294 629 1294 629 1295 633 1295 632 1295 629 1296 632 1296 628 1296 628 1297 632 1297 631 1297 634 1298 637 1298 635 1298 635 1299 637 1299 638 1299 635 1300 638 1300 636 1300 636 1301 638 1301 639 1301 635 1302 636 1302 629 1302 629 1303 636 1303 630 1303 638 1304 637 1304 632 1304 632 1305 637 1305 631 1305 648 1306 642 1306 649 1306 649 1307 642 1307 643 1307 646 1308 648 1308 647 1308 647 1309 648 1309 649 1309 645 1310 641 1310 644 1310 644 1311 641 1311 640 1311 642 1312 640 1312 643 1312 643 1313 640 1313 641 1313 640 1314 642 1314 644 1314 644 1315 642 1315 648 1315 644 1316 648 1316 646 1316 647 1317 649 1317 645 1317 645 1318 649 1318 643 1318 645 1319 643 1319 641 1319 647 1320 645 1320 646 1320 646 1321 645 1321 644 1321 653 1322 659 1322 652 1322 652 1323 659 1323 658 1323 651 1324 653 1324 650 1324 650 1325 653 1325 652 1325 654 1326 656 1326 655 1326 655 1327 656 1327 657 1327 659 1328 657 1328 658 1328 658 1329 657 1329 656 1329 657 1330 659 1330 655 1330 655 1331 659 1331 653 1331 655 1332 653 1332 651 1332 650 1333 652 1333 654 1333 654 1334 652 1334 658 1334 654 1335 658 1335 656 1335 650 1336 654 1336 651 1336 651 1337 654 1337 655 1337 677 1338 676 1338 668 1338 668 1339 676 1339 667 1339 675 1340 677 1340 666 1340 666 1341 677 1341 668 1341 661 1342 660 1342 670 1342 670 1343 660 1343 669 1343 676 1344 669 1344 667 1344 667 1345 669 1345 660 1345 670 1346 669 1346 671 1346 671 1347 669 1347 676 1347 671 1348 676 1348 672 1348 672 1349 676 1349 673 1349 677 1350 675 1350 676 1350 676 1351 675 1351 674 1351 676 1352 674 1352 673 1352 660 1353 661 1353 667 1353 667 1354 661 1354 662 1354 667 1355 662 1355 663 1355 666 1356 668 1356 665 1356 665 1357 668 1357 667 1357 665 1358 667 1358 664 1358 664 1359 667 1359 663 1359 674 1360 675 1360 665 1360 665 1361 675 1361 666 1361 662 1362 671 1362 672 1362 662 1363 672 1363 663 1363 663 1364 672 1364 673 1364 663 1365 673 1365 664 1365 664 1366 673 1366 674 1366 664 1367 674 1367 665 1367 662 1368 661 1368 671 1368 671 1369 661 1369 670 1369 681 1370 682 1370 686 1370 686 1371 682 1371 687 1371 680 1372 681 1372 685 1372 685 1373 681 1373 686 1373 683 1374 684 1374 678 1374 678 1375 684 1375 679 1375 682 1376 679 1376 687 1376 687 1377 679 1377 684 1377 679 1378 682 1378 678 1378 678 1379 682 1379 681 1379 678 1380 681 1380 680 1380 685 1381 686 1381 683 1381 683 1382 686 1382 687 1382 683 1383 687 1383 684 1383 685 1384 683 1384 680 1384 680 1385 683 1385 678 1385 690 1386 688 1386 691 1386 691 1387 688 1387 689 1387 695 1388 689 1388 694 1388 694 1389 689 1389 688 1389 696 1390 698 1390 697 1390 697 1391 698 1391 699 1391 693 1392 699 1392 692 1392 692 1393 699 1393 698 1393 697 1394 699 1394 695 1394 695 1395 699 1395 693 1395 695 1396 693 1396 689 1396 689 1397 693 1397 691 1397 688 1398 690 1398 694 1398 694 1399 690 1399 692 1399 694 1400 692 1400 696 1400 696 1401 692 1401 698 1401 694 1402 696 1402 695 1402 695 1403 696 1403 697 1403 692 1404 690 1404 693 1404 693 1405 690 1405 691 1405 703 1406 704 1406 708 1406 708 1407 704 1407 709 1407 702 1408 703 1408 707 1408 707 1409 703 1409 708 1409 705 1410 706 1410 700 1410 700 1411 706 1411 701 1411 704 1412 701 1412 709 1412 709 1413 701 1413 706 1413 701 1414 704 1414 700 1414 700 1415 704 1415 703 1415 700 1416 703 1416 702 1416 707 1417 708 1417 705 1417 705 1418 708 1418 709 1418 705 1419 709 1419 706 1419 707 1420 705 1420 702 1420 702 1421 705 1421 700 1421 719 1422 718 1422 714 1422 714 1423 718 1423 713 1423 717 1424 719 1424 712 1424 712 1425 719 1425 714 1425 711 1426 710 1426 716 1426 716 1427 710 1427 715 1427 718 1428 715 1428 713 1428 713 1429 715 1429 710 1429 715 1430 718 1430 716 1430 716 1431 718 1431 719 1431 716 1432 719 1432 717 1432 712 1433 714 1433 711 1433 711 1434 714 1434 713 1434 711 1435 713 1435 710 1435 712 1436 711 1436 717 1436 717 1437 711 1437 716 1437 473 1438 481 1439 483 1440 483 1441 475 1442 473 1443 476 1444 484 1445 485 1446 485 1447 501 1448 476 1449 472 1450 480 1451 482 1452 482 1453 498 1454 472 1455 470 1456 478 1457 479 1458 479 1459 495 1460 470 1461 473 1462 475 1463 492 1464 492 1465 493 1466 473 1467 472 1468 498 1469 486 1470 486 1471 487 1472 472 1473 470 1474 495 1475 491 1476 491 1477 489 1478 470 1479 476 1480 501 1481 490 1482 490 1483 488 1484 476 1485 491 1486 495 1487 497 1488 497 1489 493 1490 491 1491 471 1492 479 1493 481 1494 481 1495 473 1496 471 1497 483 1498 499 1499 501 1500 501 1501 485 1502 483 1503 476 1504 498 1505 482 1506 482 1507 484 1508 476 1509 478 1510 494 1511 496 1512 496 1513 480 1514 478 1515 470 1516 472 1517 487 1518 487 1519 489 1520 470 1521 486 1522 498 1523 500 1524 500 1525 488 1526 486 1527 475 1528 477 1529 490 1530 490 1531 492 1532 475 1533 471 1534 491 1535 493 1536 493 1537 497 1538 471 1539 486 1540 492 1541 493 1542 493 1543 487 1544 486 1545 488 1546 490 1547 492 1548 492 1549 486 1550 488 1551 487 1552 493 1553 491 1554 491 1555 489 1556 487 1557 480 1558 482 1559 483 1560 483 1561 481 1562 480 1563 478 1564 480 1565 481 1566 481 1567 479 1568 478 1569 520 1570 521 1570 538 1570 538 1570 537 1570 520 1570 523 1571 722 1571 539 1571 539 1571 525 1571 523 1571 521 1572 522 1572 538 1572 522 1573 539 1573 538 1573 513 1574 516 1574 515 1574 515 1574 514 1574 513 1574 512 1575 517 1575 516 1575 512 1576 516 1576 513 1576 511 1577 518 1577 517 1577 511 1578 517 1578 512 1578 510 1579 519 1579 511 1579 519 1580 518 1580 511 1580 509 1581 520 1581 519 1581 509 1582 519 1582 510 1582 507 1583 521 1583 509 1583 521 1584 520 1584 509 1584 507 1585 508 1585 522 1585 507 1586 522 1586 521 1586 724 1587 723 1587 722 1587 724 1588 722 1588 725 1588 503 1589 720 1589 723 1589 503 1590 723 1590 724 1590 525 1591 503 1591 724 1591 525 1592 724 1592 725 1592 720 1593 523 1593 723 1593 523 1594 722 1594 723 1594 502 1595 508 1595 503 1595 508 1596 525 1596 503 1596 502 1597 505 1597 522 1597 502 1598 522 1598 508 1598 502 1599 503 1600 506 1601 502 1602 506 1603 505 1604 505 1605 506 1605 522 1605 506 1606 539 1606 522 1606 523 1607 525 1607 725 1607 523 1608 725 1608 722 1608 524 1609 538 1609 539 1609 524 1610 539 1610 525 1610 503 1611 525 1611 523 1611 503 1612 523 1612 721 1612 514 1613 515 1613 531 1613 515 1614 532 1614 531 1614 755 1615 753 1615 754 1615 754 1616 753 1616 752 1616 752 1617 753 1617 751 1617 752 1618 751 1618 750 1618 750 1619 751 1619 749 1619 750 1620 749 1620 748 1620 748 1621 749 1621 747 1621 748 1622 747 1622 746 1622 746 1623 747 1623 745 1623 746 1624 745 1624 744 1624 744 1625 745 1625 743 1625 744 1626 743 1626 742 1626 742 1627 743 1627 735 1627 742 1628 735 1628 733 1628 755 1629 754 1629 756 1629 755 1630 756 1630 757 1630 757 1631 756 1631 758 1631 757 1632 758 1632 759 1632 759 1633 758 1633 760 1633 759 1634 760 1634 761 1634 761 1635 760 1635 762 1635 761 1636 762 1636 763 1636 763 1637 762 1637 764 1637 763 1638 764 1638 765 1638 765 1639 764 1639 769 1639 765 1640 769 1640 771 1640 770 1641 768 1641 734 1641 734 1642 768 1642 732 1642 769 1643 768 1643 766 1643 773 1644 772 1644 770 1644 766 1645 767 1645 769 1645 771 1646 775 1646 770 1646 770 1647 775 1647 774 1647 770 1648 774 1648 773 1648 736 1649 737 1649 734 1649 734 1650 737 1650 738 1650 740 1651 735 1651 734 1651 740 1652 734 1652 739 1652 739 1653 734 1653 738 1653 733 1654 731 1654 730 1654 733 1655 730 1655 732 1655 765 1656 771 1656 770 1656 734 1657 735 1657 743 1657 743 1658 745 1658 734 1658 734 1659 745 1659 747 1659 734 1660 747 1660 749 1660 765 1661 770 1661 763 1661 757 1662 759 1662 770 1662 770 1663 759 1663 761 1663 770 1664 761 1664 763 1664 749 1665 751 1665 734 1665 734 1666 751 1666 753 1666 734 1667 753 1667 770 1667 770 1668 753 1668 755 1668 770 1669 755 1669 757 1669 750 1670 748 1670 732 1670 732 1671 748 1671 746 1671 768 1672 760 1672 758 1672 746 1673 744 1673 732 1673 732 1674 744 1674 742 1674 732 1675 742 1675 733 1675 769 1676 764 1676 768 1676 768 1677 764 1677 762 1677 768 1678 762 1678 760 1678 758 1679 756 1679 768 1679 768 1680 756 1680 754 1680 768 1681 754 1681 732 1681 732 1682 754 1682 752 1682 732 1683 752 1683 750 1683 804 1684 806 1684 803 1684 803 1685 806 1685 805 1685 805 1686 806 1686 808 1686 805 1687 808 1687 807 1687 807 1688 808 1688 810 1688 807 1689 810 1689 809 1689 809 1690 810 1690 812 1690 809 1691 812 1691 811 1691 811 1692 812 1692 814 1692 811 1693 814 1693 813 1693 813 1694 814 1694 816 1694 813 1695 816 1695 815 1695 815 1696 816 1696 821 1696 815 1697 821 1697 819 1697 804 1698 803 1698 801 1698 804 1699 801 1699 802 1699 802 1700 801 1700 799 1700 802 1701 799 1701 800 1701 800 1702 799 1702 797 1702 800 1703 797 1703 798 1703 798 1704 797 1704 795 1704 798 1705 795 1705 796 1705 796 1706 795 1706 793 1706 796 1707 793 1707 794 1707 794 1708 793 1708 787 1708 794 1709 787 1709 789 1709 790 1710 788 1710 822 1710 822 1711 788 1711 820 1711 787 1712 788 1712 786 1712 786 1713 785 1713 787 1713 829 1714 828 1714 822 1714 822 1715 828 1715 827 1715 824 1716 819 1716 821 1716 824 1717 821 1717 825 1717 825 1718 821 1718 822 1718 825 1719 822 1719 826 1719 826 1720 822 1720 827 1720 819 1721 817 1721 818 1721 819 1722 818 1722 820 1722 802 1723 800 1723 790 1723 790 1724 800 1724 798 1724 822 1725 812 1725 810 1725 798 1726 796 1726 790 1726 790 1727 796 1727 794 1727 790 1728 794 1728 789 1728 821 1729 816 1729 822 1729 822 1730 816 1730 814 1730 822 1731 814 1731 812 1731 810 1732 808 1732 822 1732 822 1733 808 1733 806 1733 822 1734 806 1734 790 1734 790 1735 806 1735 804 1735 790 1736 804 1736 802 1736 815 1737 819 1737 820 1737 788 1738 787 1738 793 1738 793 1739 795 1739 788 1739 788 1740 795 1740 797 1740 788 1741 797 1741 799 1741 815 1742 820 1742 813 1742 807 1743 809 1743 820 1743 820 1744 809 1744 811 1744 820 1745 811 1745 813 1745 799 1746 801 1746 788 1746 788 1747 801 1747 803 1747 788 1748 803 1748 820 1748 820 1749 803 1749 805 1749 820 1750 805 1750 807 1750 851 1751 852 1751 849 1751 849 1752 852 1752 850 1752 873 1753 875 1753 871 1753 873 1754 871 1754 869 1754 869 1755 871 1755 867 1755 869 1756 867 1756 865 1756 865 1757 867 1757 863 1757 865 1758 863 1758 861 1758 861 1759 863 1759 859 1759 861 1760 859 1760 857 1760 857 1761 859 1761 855 1761 857 1762 855 1762 853 1762 853 1763 855 1763 851 1763 853 1764 851 1764 849 1764 876 1765 874 1765 870 1765 876 1766 870 1766 872 1766 872 1767 870 1767 866 1767 872 1768 866 1768 868 1768 868 1769 866 1769 862 1769 868 1770 862 1770 864 1770 864 1771 862 1771 858 1771 864 1772 858 1772 860 1772 860 1773 858 1773 854 1773 860 1774 854 1774 856 1774 856 1775 854 1775 850 1775 856 1776 850 1776 852 1776 834 1777 835 1777 838 1777 836 1778 837 1778 839 1778 839 1779 841 1779 838 1779 838 1780 841 1780 840 1780 836 1781 839 1781 874 1781 841 1782 844 1782 876 1782 876 1783 844 1783 883 1783 876 1784 883 1784 874 1784 874 1785 883 1785 879 1785 874 1786 879 1786 836 1786 873 1787 838 1787 835 1787 846 1788 843 1788 840 1788 835 1789 878 1789 873 1789 875 1790 848 1790 840 1790 840 1791 848 1791 847 1791 840 1792 847 1792 846 1792 871 1793 875 1793 840 1793 855 1794 859 1794 840 1794 859 1795 863 1795 840 1795 840 1796 863 1796 867 1796 840 1797 867 1797 871 1797 841 1798 876 1798 872 1798 872 1799 868 1799 841 1799 841 1800 868 1800 864 1800 841 1801 864 1801 860 1801 860 1802 856 1802 841 1802 841 1803 856 1803 852 1803 841 1804 852 1804 840 1804 840 1805 852 1805 851 1805 840 1806 851 1806 855 1806 870 1807 874 1807 839 1807 838 1808 873 1808 869 1808 869 1809 865 1809 838 1809 838 1810 865 1810 861 1810 838 1811 861 1811 857 1811 839 1812 854 1812 858 1812 858 1813 862 1813 839 1813 839 1814 862 1814 866 1814 839 1815 866 1815 870 1815 857 1816 853 1816 838 1816 838 1817 853 1817 849 1817 838 1818 849 1818 839 1818 839 1819 849 1819 850 1819 839 1820 850 1820 854 1820 726 1821 730 1821 734 1821 734 1821 728 1821 726 1821 726 1822 728 1822 729 1822 729 1822 727 1822 726 1822 727 1823 729 1823 741 1823 741 1823 731 1823 727 1823 731 1824 733 1824 735 1824 735 1824 741 1824 731 1824 726 1825 727 1825 731 1825 731 1825 732 1825 726 1825 728 1826 734 1826 741 1826 741 1826 729 1826 728 1826 766 1827 777 1827 779 1827 779 1827 772 1827 766 1827 767 1828 778 1828 780 1828 780 1828 776 1828 767 1828 777 1829 779 1829 780 1829 780 1829 778 1829 777 1829 767 1830 776 1830 771 1830 771 1830 769 1830 767 1830 766 1831 777 1831 778 1831 778 1831 767 1831 766 1831 772 1832 776 1832 780 1832 780 1832 779 1832 772 1832 837 1833 845 1833 884 1833 884 1833 880 1833 837 1833 836 1834 841 1834 845 1834 845 1834 837 1834 836 1834 879 1835 880 1835 884 1835 884 1835 883 1835 879 1835 841 1836 883 1836 884 1836 884 1836 845 1836 841 1836 836 1837 837 1837 880 1837 880 1837 879 1837 836 1837 834 1838 877 1838 878 1838 878 1838 835 1838 834 1838 834 1839 835 1839 840 1839 840 1839 842 1839 834 1839 834 1840 842 1840 881 1840 881 1840 877 1840 834 1840 877 1841 881 1841 882 1841 882 1841 878 1841 877 1841 873 1842 878 1842 882 1842 882 1842 875 1842 873 1842 842 1843 843 1843 882 1843 882 1843 881 1843 842 1843 781 1844 785 1844 791 1844 791 1844 783 1844 781 1844 781 1845 783 1845 784 1845 784 1845 782 1845 781 1845 782 1846 784 1846 790 1846 790 1846 786 1846 782 1846 818 1847 831 1847 833 1847 833 1847 822 1847 818 1847 830 1848 832 1848 833 1848 833 1848 831 1848 830 1848 817 1849 823 1849 832 1849 832 1849 830 1849 817 1849 817 1850 819 1850 824 1850 824 1850 823 1850 817 1850 822 1851 833 1851 832 1851 832 1851 823 1851 822 1851 817 1852 830 1852 831 1852 831 1852 818 1852 817 1852 781 1853 782 1853 786 1853 786 1853 785 1853 781 1853 785 1854 791 1854 789 1854 789 1854 787 1854 785 1854 783 1855 791 1855 790 1855 790 1855 784 1855 783 1855 976 1856 988 1856 978 1856 978 1857 988 1857 990 1857 978 1858 990 1858 974 1858 974 1859 990 1859 986 1859 974 1860 986 1860 972 1860 972 1861 986 1861 984 1861 972 1862 984 1862 970 1862 970 1863 984 1863 982 1863 970 1864 982 1864 966 1864 966 1865 982 1865 980 1865 966 1866 980 1866 964 1866 964 1867 980 1867 968 1867 964 1868 968 1868 959 1868 959 1869 968 1869 961 1869 899 1870 885 1870 901 1870 901 1871 885 1871 887 1871 901 1872 887 1872 903 1872 903 1873 887 1873 889 1873 903 1874 889 1874 905 1874 905 1875 889 1875 891 1875 905 1876 891 1876 907 1876 907 1877 891 1877 893 1877 907 1878 893 1878 909 1878 909 1879 893 1879 895 1879 909 1880 895 1880 913 1880 913 1881 895 1881 897 1881 913 1882 897 1882 915 1882 915 1883 897 1883 911 1883 915 1884 911 1884 919 1884 919 1885 911 1885 921 1885 919 1886 921 1886 924 1886 924 1887 921 1887 926 1887 900 1888 886 1888 899 1888 886 1889 885 1889 899 1889 902 1890 901 1890 903 1890 902 1891 903 1891 904 1891 904 1892 903 1892 905 1892 904 1893 905 1893 906 1893 906 1894 905 1894 907 1894 906 1895 907 1895 908 1895 908 1896 907 1896 909 1896 908 1897 909 1897 910 1897 910 1898 909 1898 913 1898 910 1899 913 1899 914 1899 914 1900 913 1900 915 1900 914 1901 915 1901 916 1901 916 1902 915 1902 919 1902 916 1903 919 1903 920 1903 948 1904 950 1904 959 1904 959 1905 950 1905 958 1905 958 1906 950 1906 953 1906 958 1907 953 1907 952 1907 928 1908 920 1908 925 1908 925 1909 920 1909 919 1909 925 1910 919 1910 924 1910 928 1911 930 1911 920 1911 920 1912 930 1912 932 1912 920 1913 932 1913 934 1913 942 1914 944 1914 959 1914 959 1915 944 1915 946 1915 959 1916 946 1916 948 1916 934 1917 936 1917 920 1917 920 1918 936 1918 938 1918 920 1919 938 1919 959 1919 959 1920 938 1920 940 1920 959 1921 940 1921 942 1921 959 1922 958 1922 963 1922 959 1923 963 1923 964 1923 964 1924 963 1924 965 1924 964 1925 965 1925 966 1925 966 1926 965 1926 969 1926 966 1927 969 1927 970 1927 970 1928 969 1928 971 1928 970 1929 971 1929 972 1929 972 1930 971 1930 973 1930 972 1931 973 1931 974 1931 974 1932 973 1932 977 1932 974 1933 977 1933 978 1933 988 1934 976 1934 987 1934 987 1935 976 1935 975 1935 990 1936 989 1936 985 1936 990 1937 985 1937 986 1937 986 1938 985 1938 983 1938 986 1939 983 1939 984 1939 984 1940 983 1940 981 1940 984 1941 981 1941 982 1941 982 1942 981 1942 979 1942 982 1943 979 1943 980 1943 980 1944 979 1944 967 1944 980 1945 967 1945 968 1945 968 1946 967 1946 960 1946 968 1947 960 1947 961 1947 923 1948 937 1948 922 1948 922 1949 937 1949 935 1949 922 1950 935 1950 933 1950 933 1951 931 1951 922 1951 922 1952 931 1952 929 1952 922 1953 929 1953 921 1953 921 1954 929 1954 927 1954 921 1955 927 1955 926 1955 961 1956 951 1956 949 1956 949 1957 947 1957 961 1957 961 1958 947 1958 945 1958 961 1959 945 1959 962 1959 951 1960 961 1960 955 1960 955 1961 961 1961 960 1961 955 1962 960 1962 954 1962 945 1963 943 1963 962 1963 962 1964 943 1964 941 1964 962 1965 941 1965 923 1965 923 1966 941 1966 939 1966 923 1967 939 1967 937 1967 922 1968 921 1968 911 1968 922 1969 911 1969 912 1969 912 1970 911 1970 897 1970 912 1971 897 1971 898 1971 898 1972 897 1972 895 1972 898 1973 895 1973 896 1973 896 1974 895 1974 893 1974 896 1975 893 1975 894 1975 894 1976 893 1976 891 1976 894 1977 891 1977 892 1977 892 1978 891 1978 889 1978 892 1979 889 1979 890 1979 890 1980 889 1980 887 1980 890 1981 887 1981 888 1981 920 1982 922 1982 916 1982 916 1983 922 1983 912 1983 916 1984 912 1984 914 1984 914 1985 912 1985 898 1985 914 1986 898 1986 910 1986 910 1987 898 1987 896 1987 910 1988 896 1988 908 1988 908 1989 896 1989 894 1989 908 1990 894 1990 906 1990 906 1991 894 1991 892 1991 906 1992 892 1992 904 1992 904 1993 892 1993 890 1993 904 1994 890 1994 902 1994 902 1995 890 1995 888 1995 902 1996 888 1996 900 1996 900 1997 888 1997 886 1997 952 1998 954 1998 958 1998 958 1999 954 1999 960 1999 958 2000 960 2000 963 2000 963 2001 960 2001 967 2001 963 2002 967 2002 965 2002 965 2003 967 2003 979 2003 965 2004 979 2004 969 2004 969 2005 979 2005 981 2005 969 2006 981 2006 971 2006 971 2007 981 2007 983 2007 971 2008 983 2008 973 2008 973 2009 983 2009 985 2009 973 2010 985 2010 977 2010 977 2011 985 2011 989 2011 977 2012 989 2012 975 2012 975 2013 989 2013 987 2013 925 2014 924 2014 927 2014 927 2015 924 2015 926 2015 955 2016 954 2016 953 2016 953 2017 954 2017 952 2017 939 2018 941 2018 938 2018 938 2019 941 2019 940 2019 956 2020 917 2020 959 2020 959 2021 917 2021 920 2021 961 2022 962 2022 959 2022 959 2023 962 2023 957 2023 959 2024 957 2024 956 2024 917 2025 918 2025 920 2025 920 2026 918 2026 923 2026 920 2027 923 2027 922 2027 957 2028 918 2028 956 2028 956 2029 918 2029 917 2029 923 2030 918 2030 962 2030 962 2031 918 2031 957 2031 939 2032 938 2032 936 2032 939 2033 936 2033 937 2033 937 2034 936 2034 934 2034 937 2035 934 2035 935 2035 935 2036 934 2036 932 2036 935 2037 932 2037 933 2037 933 2038 932 2038 930 2038 933 2039 930 2039 931 2039 931 2040 930 2040 928 2040 931 2041 928 2041 929 2041 929 2042 928 2042 925 2042 929 2043 925 2043 927 2043 955 2044 953 2044 950 2044 955 2045 950 2045 951 2045 951 2046 950 2046 948 2046 951 2047 948 2047 949 2047 949 2048 948 2048 946 2048 949 2049 946 2049 947 2049 947 2050 946 2050 944 2050 947 2051 944 2051 945 2051 945 2052 944 2052 942 2052 945 2053 942 2053 943 2053 943 2054 942 2054 940 2054 943 2055 940 2055 941 2055 1005 2056 991 2056 1007 2056 1007 2057 991 2057 993 2057 1007 2058 993 2058 1009 2058 1009 2059 993 2059 995 2059 1009 2060 995 2060 1011 2060 1011 2061 995 2061 997 2061 1011 2062 997 2062 1013 2062 1013 2063 997 2063 999 2063 1013 2064 999 2064 1015 2064 1015 2065 999 2065 1001 2065 1015 2066 1001 2066 1019 2066 1019 2067 1001 2067 1003 2067 1019 2068 1003 2068 1021 2068 1021 2069 1003 2069 1017 2069 1021 2070 1017 2070 1025 2070 1025 2071 1017 2071 1028 2071 1086 2072 1100 2072 1088 2072 1088 2073 1100 2073 1102 2073 1088 2074 1102 2074 1084 2074 1084 2075 1102 2075 1098 2075 1084 2076 1098 2076 1082 2076 1082 2077 1098 2077 1096 2077 1082 2078 1096 2078 1080 2078 1080 2079 1096 2079 1094 2079 1080 2080 1094 2080 1078 2080 1078 2081 1094 2081 1092 2081 1078 2082 1092 2082 1074 2082 1074 2083 1092 2083 1090 2083 1074 2084 1090 2084 1072 2084 1072 2085 1090 2085 1076 2085 1072 2086 1076 2086 1067 2086 1067 2087 1076 2087 1070 2087 1067 2088 1070 2088 1061 2088 1061 2089 1070 2089 1063 2089 1085 2090 1099 2090 1086 2090 1086 2091 1099 2091 1100 2091 1087 2092 1088 2092 1084 2092 1087 2093 1084 2093 1083 2093 1083 2094 1084 2094 1082 2094 1083 2095 1082 2095 1081 2095 1081 2096 1082 2096 1080 2096 1081 2097 1080 2097 1079 2097 1079 2098 1080 2098 1078 2098 1079 2099 1078 2099 1077 2099 1077 2100 1078 2100 1074 2100 1077 2101 1074 2101 1073 2101 1073 2102 1074 2102 1072 2102 1073 2103 1072 2103 1071 2103 1071 2104 1072 2104 1067 2104 1071 2105 1067 2105 1066 2105 1058 2106 1056 2106 1066 2106 1042 2107 1040 2107 1025 2107 1025 2108 1040 2108 1038 2108 1058 2109 1066 2109 1060 2109 1060 2110 1066 2110 1067 2110 1060 2111 1067 2111 1061 2111 1038 2112 1036 2112 1025 2112 1025 2113 1036 2113 1034 2113 1025 2114 1034 2114 1026 2114 1026 2115 1034 2115 1030 2115 1026 2116 1030 2116 1031 2116 1056 2117 1054 2117 1066 2117 1066 2118 1054 2118 1052 2118 1066 2119 1052 2119 1050 2119 1050 2120 1048 2120 1066 2120 1066 2121 1048 2121 1046 2121 1066 2122 1046 2122 1025 2122 1025 2123 1046 2123 1044 2123 1025 2124 1044 2124 1042 2124 1025 2125 1026 2125 1022 2125 1025 2126 1022 2126 1021 2126 1021 2127 1022 2127 1020 2127 1021 2128 1020 2128 1019 2128 1019 2129 1020 2129 1016 2129 1019 2130 1016 2130 1015 2130 1015 2131 1016 2131 1014 2131 1015 2132 1014 2132 1013 2132 1013 2133 1014 2133 1012 2133 1013 2134 1012 2134 1011 2134 1011 2135 1012 2135 1010 2135 1011 2136 1010 2136 1009 2136 1009 2137 1010 2137 1008 2137 1009 2138 1008 2138 1007 2138 991 2139 1005 2139 992 2139 992 2140 1005 2140 1006 2140 993 2141 994 2141 996 2141 993 2142 996 2142 995 2142 995 2143 996 2143 998 2143 995 2144 998 2144 997 2144 997 2145 998 2145 1000 2145 997 2146 1000 2146 999 2146 999 2147 1000 2147 1002 2147 999 2148 1002 2148 1001 2148 1001 2149 1002 2149 1004 2149 1001 2150 1004 2150 1003 2150 1003 2151 1004 2151 1018 2151 1003 2152 1018 2152 1017 2152 1017 2153 1018 2153 1029 2153 1017 2154 1029 2154 1028 2154 1028 2155 1035 2155 1037 2155 1037 2156 1039 2156 1028 2156 1028 2157 1039 2157 1041 2157 1028 2158 1041 2158 1027 2158 1035 2159 1028 2159 1032 2159 1032 2160 1028 2160 1029 2160 1032 2161 1029 2161 1033 2161 1055 2162 1057 2162 1069 2162 1069 2163 1057 2163 1059 2163 1069 2164 1059 2164 1070 2164 1070 2165 1059 2165 1062 2165 1070 2166 1062 2166 1063 2166 1041 2167 1043 2167 1027 2167 1027 2168 1043 2168 1045 2168 1027 2169 1045 2169 1068 2169 1068 2170 1045 2170 1047 2170 1047 2171 1049 2171 1068 2171 1068 2172 1049 2172 1051 2172 1068 2173 1051 2173 1069 2173 1069 2174 1051 2174 1053 2174 1069 2175 1053 2175 1055 2175 1069 2176 1070 2176 1076 2176 1069 2177 1076 2177 1075 2177 1075 2178 1076 2178 1090 2178 1075 2179 1090 2179 1089 2179 1089 2180 1090 2180 1092 2180 1089 2181 1092 2181 1091 2181 1091 2182 1092 2182 1094 2182 1091 2183 1094 2183 1093 2183 1093 2184 1094 2184 1096 2184 1093 2185 1096 2185 1095 2185 1095 2186 1096 2186 1098 2186 1095 2187 1098 2187 1097 2187 1097 2188 1098 2188 1102 2188 1097 2189 1102 2189 1101 2189 1066 2190 1069 2190 1071 2190 1071 2191 1069 2191 1075 2191 1071 2192 1075 2192 1073 2192 1073 2193 1075 2193 1089 2193 1073 2194 1089 2194 1077 2194 1077 2195 1089 2195 1091 2195 1077 2196 1091 2196 1079 2196 1079 2197 1091 2197 1093 2197 1079 2198 1093 2198 1081 2198 1081 2199 1093 2199 1095 2199 1081 2200 1095 2200 1083 2200 1083 2201 1095 2201 1097 2201 1083 2202 1097 2202 1087 2202 1087 2203 1097 2203 1101 2203 1087 2204 1101 2204 1085 2204 1085 2205 1101 2205 1099 2205 1031 2206 1033 2206 1026 2206 1026 2207 1033 2207 1029 2207 1026 2208 1029 2208 1022 2208 1022 2209 1029 2209 1018 2209 1022 2210 1018 2210 1020 2210 1020 2211 1018 2211 1004 2211 1020 2212 1004 2212 1016 2212 1016 2213 1004 2213 1002 2213 1016 2214 1002 2214 1014 2214 1014 2215 1002 2215 1000 2215 1014 2216 1000 2216 1012 2216 1012 2217 1000 2217 998 2217 1012 2218 998 2218 1010 2218 1010 2219 998 2219 996 2219 1010 2220 996 2220 1008 2220 1008 2221 996 2221 994 2221 1008 2222 994 2222 1006 2222 1006 2223 994 2223 992 2223 1060 2224 1061 2224 1062 2224 1062 2225 1061 2225 1063 2225 1032 2226 1033 2226 1030 2226 1030 2227 1033 2227 1031 2227 1047 2228 1045 2228 1046 2228 1046 2229 1045 2229 1044 2229 1024 2230 1065 2230 1025 2230 1025 2231 1065 2231 1066 2231 1028 2232 1027 2232 1025 2232 1025 2233 1027 2233 1023 2233 1025 2234 1023 2234 1024 2234 1065 2235 1064 2235 1066 2235 1066 2236 1064 2236 1068 2236 1066 2237 1068 2237 1069 2237 1023 2238 1064 2238 1024 2238 1024 2239 1064 2239 1065 2239 1068 2240 1064 2240 1027 2240 1027 2241 1064 2241 1023 2241 1047 2242 1046 2242 1048 2242 1047 2243 1048 2243 1049 2243 1049 2244 1048 2244 1050 2244 1049 2245 1050 2245 1051 2245 1051 2246 1050 2246 1052 2246 1051 2247 1052 2247 1053 2247 1053 2248 1052 2248 1054 2248 1053 2249 1054 2249 1055 2249 1055 2250 1054 2250 1056 2250 1055 2251 1056 2251 1057 2251 1057 2252 1056 2252 1058 2252 1057 2253 1058 2253 1059 2253 1059 2254 1058 2254 1060 2254 1059 2255 1060 2255 1062 2255 1032 2256 1030 2256 1034 2256 1032 2257 1034 2257 1035 2257 1035 2258 1034 2258 1036 2258 1035 2259 1036 2259 1037 2259 1037 2260 1036 2260 1038 2260 1037 2261 1038 2261 1039 2261 1039 2262 1038 2262 1040 2262 1039 2263 1040 2263 1041 2263 1041 2264 1040 2264 1042 2264 1041 2265 1042 2265 1043 2265 1043 2266 1042 2266 1044 2266 1043 2267 1044 2267 1045 2267 1109 2268 1110 2268 1115 2268 1115 2269 1110 2269 1116 2269 1115 2270 1116 2270 1118 2270 1118 2271 1116 2271 1122 2271 1118 2272 1122 2272 1120 2272 1120 2273 1122 2273 1134 2273 1120 2274 1134 2274 1124 2274 1124 2275 1134 2275 1136 2275 1124 2276 1136 2276 1126 2276 1126 2277 1136 2277 1138 2277 1126 2278 1138 2278 1128 2278 1128 2279 1138 2279 1140 2279 1128 2280 1140 2280 1130 2280 1130 2281 1140 2281 1142 2281 1130 2282 1142 2282 1132 2282 1132 2283 1142 2283 1144 2283 1174 2284 1173 2284 1178 2284 1178 2285 1173 2285 1177 2285 1178 2286 1177 2286 1181 2286 1181 2287 1177 2287 1185 2287 1181 2288 1185 2288 1183 2288 1183 2289 1185 2289 1199 2289 1183 2290 1199 2290 1187 2290 1187 2291 1199 2291 1201 2291 1187 2292 1201 2292 1189 2292 1189 2293 1201 2293 1203 2293 1189 2294 1203 2294 1191 2294 1191 2295 1203 2295 1205 2295 1191 2296 1205 2296 1193 2296 1193 2297 1205 2297 1207 2297 1193 2298 1207 2298 1195 2298 1195 2299 1207 2299 1209 2299 1195 2300 1209 2300 1196 2300 1196 2301 1209 2301 1210 2301 1108 2302 1107 2302 1174 2302 1174 2303 1107 2303 1173 2303 1114 2304 1178 2304 1181 2304 1114 2305 1181 2305 1117 2305 1117 2306 1181 2306 1183 2306 1117 2307 1183 2307 1119 2307 1119 2308 1183 2308 1187 2308 1119 2309 1187 2309 1123 2309 1123 2310 1187 2310 1189 2310 1123 2311 1189 2311 1125 2311 1125 2312 1189 2312 1191 2312 1125 2313 1191 2313 1127 2313 1127 2314 1191 2314 1193 2314 1127 2315 1193 2315 1129 2315 1129 2316 1193 2316 1195 2316 1129 2317 1195 2317 1131 2317 1132 2318 1150 2318 1154 2318 1132 2319 1166 2319 1198 2319 1198 2320 1166 2320 1170 2320 1198 2321 1170 2321 1197 2321 1165 2322 1161 2322 1131 2322 1131 2323 1161 2323 1157 2323 1131 2324 1157 2324 1153 2324 1154 2325 1158 2325 1132 2325 1132 2326 1158 2326 1162 2326 1132 2327 1162 2327 1166 2327 1165 2328 1131 2328 1169 2328 1169 2329 1131 2329 1195 2329 1169 2330 1195 2330 1196 2330 1153 2331 1149 2331 1131 2331 1131 2332 1149 2332 1145 2332 1131 2333 1145 2333 1132 2333 1132 2334 1145 2334 1146 2334 1132 2335 1146 2335 1150 2335 1132 2336 1198 2336 1194 2336 1132 2337 1194 2337 1130 2337 1130 2338 1194 2338 1192 2338 1130 2339 1192 2339 1128 2339 1128 2340 1192 2340 1190 2340 1128 2341 1190 2341 1126 2341 1126 2342 1190 2342 1188 2342 1126 2343 1188 2343 1124 2343 1124 2344 1188 2344 1184 2344 1124 2345 1184 2345 1120 2345 1120 2346 1184 2346 1182 2346 1120 2347 1182 2347 1118 2347 1118 2348 1182 2348 1179 2348 1118 2349 1179 2349 1115 2349 1110 2350 1109 2350 1176 2350 1176 2351 1109 2351 1175 2351 1116 2352 1180 2352 1186 2352 1116 2353 1186 2353 1122 2353 1122 2354 1186 2354 1200 2354 1122 2355 1200 2355 1134 2355 1134 2356 1200 2356 1202 2356 1134 2357 1202 2357 1136 2357 1136 2358 1202 2358 1204 2358 1136 2359 1204 2359 1138 2359 1138 2360 1204 2360 1206 2360 1138 2361 1206 2361 1140 2361 1140 2362 1206 2362 1208 2362 1140 2363 1208 2363 1142 2363 1142 2364 1208 2364 1212 2364 1142 2365 1212 2365 1144 2365 1168 2366 1164 2366 1144 2366 1168 2367 1144 2367 1172 2367 1172 2368 1144 2368 1212 2368 1172 2369 1212 2369 1211 2369 1164 2370 1160 2370 1144 2370 1144 2371 1160 2371 1156 2371 1144 2372 1156 2372 1106 2372 1105 2373 1151 2373 1143 2373 1143 2374 1151 2374 1155 2374 1143 2375 1155 2375 1159 2375 1156 2376 1152 2376 1106 2376 1106 2377 1152 2377 1148 2377 1106 2378 1148 2378 1105 2378 1105 2379 1148 2379 1147 2379 1105 2380 1147 2380 1151 2380 1159 2381 1163 2381 1143 2381 1143 2382 1163 2382 1167 2382 1143 2383 1167 2383 1209 2383 1209 2384 1167 2384 1171 2384 1209 2385 1171 2385 1210 2385 1143 2386 1209 2386 1207 2386 1143 2387 1207 2387 1141 2387 1141 2388 1207 2388 1205 2388 1141 2389 1205 2389 1139 2389 1139 2390 1205 2390 1203 2390 1139 2391 1203 2391 1137 2391 1137 2392 1203 2392 1201 2392 1137 2393 1201 2393 1135 2393 1135 2394 1201 2394 1199 2394 1135 2395 1199 2395 1133 2395 1133 2396 1199 2396 1185 2396 1133 2397 1185 2397 1121 2397 1121 2398 1185 2398 1177 2398 1121 2399 1177 2399 1113 2399 1131 2400 1143 2400 1129 2400 1129 2401 1143 2401 1141 2401 1129 2402 1141 2402 1127 2402 1127 2403 1141 2403 1139 2403 1127 2404 1139 2404 1125 2404 1125 2405 1139 2405 1137 2405 1125 2406 1137 2406 1123 2406 1123 2407 1137 2407 1135 2407 1123 2408 1135 2408 1119 2408 1119 2409 1135 2409 1133 2409 1119 2410 1133 2410 1117 2410 1117 2411 1133 2411 1121 2411 1117 2412 1121 2412 1114 2412 1114 2413 1121 2413 1113 2413 1114 2414 1113 2414 1108 2414 1108 2415 1113 2415 1107 2415 1197 2416 1211 2416 1198 2416 1198 2417 1211 2417 1212 2417 1198 2418 1212 2418 1194 2418 1194 2419 1212 2419 1208 2419 1194 2420 1208 2420 1192 2420 1192 2421 1208 2421 1206 2421 1192 2422 1206 2422 1190 2422 1190 2423 1206 2423 1204 2423 1190 2424 1204 2424 1188 2424 1188 2425 1204 2425 1202 2425 1188 2426 1202 2426 1184 2426 1184 2427 1202 2427 1200 2427 1184 2428 1200 2428 1182 2428 1182 2429 1200 2429 1186 2429 1182 2430 1186 2430 1179 2430 1179 2431 1186 2431 1180 2431 1169 2432 1196 2432 1171 2432 1171 2433 1196 2433 1210 2433 1172 2434 1211 2434 1170 2434 1170 2435 1211 2435 1197 2435 1147 2436 1148 2436 1145 2436 1145 2437 1148 2437 1146 2437 1112 2438 1111 2438 1132 2438 1132 2439 1111 2439 1131 2439 1144 2440 1106 2440 1132 2440 1132 2441 1106 2441 1104 2441 1132 2442 1104 2442 1112 2442 1111 2443 1103 2443 1131 2443 1131 2444 1103 2444 1105 2444 1131 2445 1105 2445 1143 2445 1104 2446 1103 2446 1112 2446 1112 2447 1103 2447 1111 2447 1105 2448 1103 2448 1106 2448 1106 2449 1103 2449 1104 2449 1147 2450 1145 2450 1149 2450 1147 2451 1149 2451 1151 2451 1151 2452 1149 2452 1153 2452 1151 2453 1153 2453 1155 2453 1155 2454 1153 2454 1157 2454 1155 2455 1157 2455 1159 2455 1159 2456 1157 2456 1161 2456 1159 2457 1161 2457 1163 2457 1163 2458 1161 2458 1165 2458 1163 2459 1165 2459 1167 2459 1167 2460 1165 2460 1169 2460 1167 2461 1169 2461 1171 2461 1172 2462 1170 2462 1166 2462 1172 2463 1166 2463 1168 2463 1168 2464 1166 2464 1162 2464 1168 2465 1162 2465 1164 2465 1164 2466 1162 2466 1158 2466 1164 2467 1158 2467 1160 2467 1160 2468 1158 2468 1154 2468 1160 2469 1154 2469 1156 2469 1156 2470 1154 2470 1150 2470 1156 2471 1150 2471 1152 2471 1152 2472 1150 2472 1146 2472 1152 2473 1146 2473 1148 2473 1110 2474 1176 2474 1180 2474 1180 2474 1116 2474 1110 2474 1107 2475 1113 2475 1178 2475 1178 2475 1173 2475 1107 2475 1109 2476 1115 2476 1179 2476 1179 2476 1175 2476 1109 2476 1179 2477 1180 2477 1176 2477 1176 2477 1175 2477 1179 2477 1099 2478 1101 2478 1102 2478 1102 2478 1100 2478 1099 2478 1085 2479 1086 2479 1088 2479 1088 2479 1087 2479 1085 2479 1005 2480 1007 2480 1008 2480 1008 2480 1006 2480 1005 2480 991 2481 992 2481 994 2481 994 2481 993 2481 991 2481 987 2482 989 2482 990 2482 990 2482 988 2482 987 2482 975 2483 976 2483 978 2483 978 2483 977 2483 975 2483 885 2484 886 2484 888 2484 888 2484 887 2484 885 2484 899 2485 901 2485 902 2485 902 2485 900 2485 899 2485 1324 2486 1323 2486 1316 2486 1324 2487 1316 2487 1317 2487 1317 2488 1316 2488 1312 2488 1317 2489 1312 2489 1313 2489 1313 2490 1312 2490 1307 2490 1313 2491 1307 2491 1308 2491 1308 2492 1307 2492 1303 2492 1308 2493 1303 2493 1304 2493 1304 2494 1303 2494 1299 2494 1304 2495 1299 2495 1300 2495 1300 2496 1299 2496 1295 2496 1300 2497 1295 2497 1296 2497 1296 2498 1295 2498 1292 2498 1288 2499 1287 2499 1283 2499 1288 2500 1283 2500 1284 2500 1284 2501 1283 2501 1279 2501 1284 2502 1279 2502 1280 2502 1280 2503 1279 2503 1275 2503 1280 2504 1275 2504 1276 2504 1276 2505 1275 2505 1270 2505 1276 2506 1270 2506 1271 2506 1271 2507 1270 2507 1266 2507 1271 2508 1266 2508 1267 2508 1267 2509 1266 2509 1262 2509 1267 2510 1262 2510 1263 2510 1263 2511 1262 2511 1258 2511 1258 2512 1262 2512 1261 2512 1261 2513 1260 2513 1258 2513 1258 2514 1260 2514 1259 2514 1258 2515 1259 2515 1257 2515 1268 2516 1265 2516 1264 2516 1264 2517 1265 2517 1258 2517 1264 2518 1258 2518 1257 2518 1272 2519 1274 2519 1268 2519 1268 2520 1274 2520 1269 2520 1268 2521 1269 2521 1265 2521 1272 2522 1273 2522 1274 2522 1274 2523 1273 2523 1277 2523 1274 2524 1277 2524 1278 2524 1278 2525 1277 2525 1281 2525 1278 2526 1281 2526 1282 2526 1282 2527 1281 2527 1285 2527 1282 2528 1285 2528 1286 2528 1286 2529 1285 2529 1289 2529 1294 2530 1293 2530 1297 2530 1294 2531 1297 2531 1298 2531 1298 2532 1297 2532 1301 2532 1298 2533 1301 2533 1302 2533 1302 2534 1301 2534 1305 2534 1302 2535 1305 2535 1306 2535 1306 2536 1305 2536 1309 2536 1306 2537 1309 2537 1311 2537 1309 2538 1310 2538 1311 2538 1311 2539 1310 2539 1314 2539 1311 2540 1314 2540 1315 2540 1315 2541 1314 2541 1318 2541 1315 2542 1318 2542 1319 2542 1322 2543 1323 2543 1324 2543 1319 2544 1318 2544 1320 2544 1319 2545 1320 2545 1324 2545 1324 2546 1320 2546 1321 2546 1324 2547 1321 2547 1322 2547 1368 2548 1370 2548 1369 2548 1369 2549 1370 2549 1371 2549 1358 2550 1368 2550 1360 2550 1360 2551 1368 2551 1369 2551 1359 2552 1358 2552 1361 2552 1361 2553 1358 2553 1360 2553 1364 2554 1359 2554 1365 2554 1365 2555 1359 2555 1361 2555 1355 2556 1348 2556 1357 2556 1357 2557 1348 2557 1349 2557 1354 2558 1355 2558 1356 2558 1356 2559 1355 2559 1357 2559 1345 2560 1354 2560 1347 2560 1347 2561 1354 2561 1356 2561 1344 2562 1345 2562 1346 2562 1346 2563 1345 2563 1347 2563 1348 2564 1355 2564 1352 2564 1359 2565 1352 2565 1355 2565 1359 2566 1355 2566 1358 2566 1358 2567 1355 2567 1354 2567 1358 2568 1354 2568 1368 2568 1344 2569 1350 2569 1345 2569 1360 2570 1356 2570 1361 2570 1361 2571 1356 2571 1357 2571 1371 2572 1367 2572 1369 2572 1396 2573 1398 2573 1397 2573 1397 2574 1398 2574 1399 2574 1386 2575 1396 2575 1388 2575 1388 2576 1396 2576 1397 2576 1387 2577 1386 2577 1389 2577 1389 2578 1386 2578 1388 2578 1392 2579 1387 2579 1393 2579 1393 2580 1387 2580 1389 2580 1383 2581 1376 2581 1385 2581 1385 2582 1376 2582 1377 2582 1382 2583 1383 2583 1384 2583 1384 2584 1383 2584 1385 2584 1373 2585 1382 2585 1375 2585 1375 2586 1382 2586 1384 2586 1372 2587 1373 2587 1374 2587 1374 2588 1373 2588 1375 2588 1376 2589 1383 2589 1380 2589 1387 2590 1380 2590 1383 2590 1387 2591 1383 2591 1386 2591 1386 2592 1383 2592 1382 2592 1386 2593 1382 2593 1396 2593 1372 2594 1378 2594 1373 2594 1385 2595 1389 2595 1384 2595 1384 2596 1389 2596 1388 2596 1337 2597 1342 2598 1343 2599 1343 2600 1338 2601 1337 2602 1334 2603 1339 2604 1342 2605 1342 2606 1337 2607 1334 2608 1335 2609 1336 2610 1341 2611 1341 2612 1340 2613 1335 2614 1336 2615 1338 2616 1343 2617 1343 2618 1341 2619 1336 2620 1334 2621 1335 2622 1340 2623 1340 2624 1339 2625 1334 2626 1335 2627 1334 2628 1337 2629 1338 2630 1336 2631 1335 2632 1338 2633 1335 2634 1337 2635 1340 2636 1342 2637 1339 2638 1343 2639 1342 2640 1340 2641 1343 2642 1340 2643 1341 2644 1333 2645 1329 2646 1332 2647 1330 2648 1329 2649 1333 2650 1330 2651 1333 2652 1331 2653 1253 2654 1255 2655 1256 2656 1256 2657 1254 2658 1253 2659 1325 2660 1327 2661 1328 2662 1328 2663 1326 2664 1325 2665 1255 2666 1327 2667 1328 2668 1328 2669 1256 2670 1255 2671 1253 2672 1325 2673 1326 2674 1326 2675 1254 2676 1253 2677 1254 2678 1256 2679 1328 2680 1328 2681 1326 2682 1254 2683 1253 2684 1255 2685 1327 2686 1327 2687 1325 2688 1253 2689 1282 2690 1286 2690 1288 2690 1288 2690 1284 2690 1282 2690 1278 2691 1282 2691 1284 2691 1284 2691 1280 2691 1278 2691 1274 2692 1278 2692 1280 2692 1280 2692 1276 2692 1274 2692 1269 2693 1274 2693 1276 2693 1276 2693 1271 2693 1269 2693 1265 2694 1269 2694 1271 2694 1271 2694 1267 2694 1265 2694 1258 2695 1265 2695 1267 2695 1267 2695 1263 2695 1258 2695 1315 2696 1319 2696 1324 2696 1324 2696 1317 2696 1315 2696 1311 2697 1315 2697 1317 2697 1317 2697 1313 2697 1311 2697 1306 2698 1311 2698 1313 2698 1313 2698 1308 2698 1306 2698 1302 2699 1306 2699 1308 2699 1308 2699 1304 2699 1302 2699 1298 2700 1302 2700 1304 2700 1304 2700 1300 2700 1298 2700 1294 2701 1298 2701 1300 2701 1300 2701 1296 2701 1294 2701 1348 2702 1352 2702 1353 2702 1353 2702 1349 2702 1348 2702 1362 2703 1364 2703 1365 2703 1365 2703 1363 2703 1362 2703 1352 2704 1362 2704 1363 2704 1363 2704 1353 2704 1352 2704 1359 2705 1364 2705 1362 2705 1352 2706 1359 2706 1362 2706 1366 2707 1370 2707 1368 2707 1345 2708 1368 2708 1354 2708 1345 2709 1366 2709 1368 2709 1345 2710 1350 2710 1366 2710 1344 2711 1346 2711 1351 2711 1344 2712 1351 2712 1350 2712 1366 2713 1367 2713 1371 2713 1371 2713 1370 2713 1366 2713 1387 2714 1392 2714 1390 2714 1380 2715 1387 2715 1390 2715 1373 2716 1396 2716 1382 2716 1394 2717 1398 2717 1396 2717 1373 2718 1378 2718 1396 2718 1378 2719 1394 2719 1396 2719 1377 2720 1381 2720 1385 2720 1376 2721 1380 2721 1377 2721 1380 2722 1381 2722 1377 2722 1380 2723 1390 2723 1391 2723 1380 2724 1391 2724 1381 2724 1390 2725 1392 2725 1391 2725 1392 2726 1393 2726 1391 2726 1372 2727 1374 2727 1379 2727 1372 2728 1379 2728 1378 2728 1394 2729 1395 2729 1399 2729 1394 2730 1399 2730 1398 2730 1361 2731 1363 2731 1365 2731 1374 2732 1375 2732 1379 2732 1397 2733 1399 2733 1395 2733 1388 2734 1397 2734 1395 2734 1379 2735 1375 2735 1384 2735 1388 2736 1395 2736 1379 2736 1388 2737 1379 2737 1384 2737 1391 2738 1393 2738 1389 2738 1389 2739 1385 2739 1381 2739 1389 2740 1381 2740 1391 2740 1353 2741 1357 2741 1349 2741 1367 2742 1360 2742 1369 2742 1351 2743 1360 2743 1367 2743 1356 2744 1360 2744 1351 2744 1356 2745 1351 2745 1347 2745 1357 2746 1353 2746 1363 2746 1357 2747 1363 2747 1361 2747 1346 2748 1347 2748 1351 2748 1237 2749 1238 2750 1244 2751 1244 2752 1243 2753 1237 2754 1239 2755 1240 2756 1242 2757 1242 2758 1241 2759 1239 2760 1237 2761 1239 2762 1240 2763 1240 2764 1238 2765 1237 2766 1241 2767 1243 2768 1244 2769 1244 2770 1242 2771 1241 2772 1238 2773 1240 2774 1242 2775 1242 2776 1244 2777 1238 2778 1237 2779 1243 2780 1241 2781 1241 2782 1239 2783 1237 2784 1221 2785 1222 2786 1228 2787 1228 2788 1227 2789 1221 2790 1223 2791 1224 2792 1226 2793 1226 2794 1225 2795 1223 2796 1221 2797 1223 2798 1224 2799 1224 2800 1222 2801 1221 2802 1222 2803 1224 2804 1226 2805 1226 2806 1228 2807 1222 2808 1225 2809 1227 2810 1228 2811 1228 2812 1226 2813 1225 2814 1221 2815 1227 2816 1225 2817 1225 2818 1223 2819 1221 2820 1231 2821 1232 2822 1234 2823 1234 2824 1233 2825 1231 2826 1229 2827 1230 2828 1236 2829 1236 2830 1235 2831 1229 2832 1230 2833 1232 2834 1234 2835 1234 2836 1236 2837 1230 2838 1229 2839 1231 2840 1232 2841 1232 2842 1230 2843 1229 2844 1229 2845 1235 2846 1233 2847 1233 2848 1231 2849 1229 2850 1233 2851 1235 2852 1236 2853 1236 2854 1234 2855 1233 2856 1215 2857 1216 2858 1218 2859 1218 2860 1217 2861 1215 2862 1213 2863 1214 2864 1220 2865 1220 2866 1219 2867 1213 2868 1214 2869 1216 2870 1218 2871 1218 2872 1220 2873 1214 2874 1213 2875 1215 2876 1216 2877 1216 2878 1214 2879 1213 2880 1213 2881 1219 2882 1217 2883 1217 2884 1215 2885 1213 2886 1217 2887 1219 2888 1220 2889 1220 2890 1218 2891 1217 2892 1247 2893 1248 2894 1252 2895 1252 2896 1251 2897 1247 2898 1245 2899 1246 2900 1250 2901 1250 2902 1249 2903 1245 2904 1249 2905 1251 2906 1252 2907 1252 2908 1250 2909 1249 2910 1245 2911 1247 2912 1251 2913 1251 2914 1249 2915 1245 2916 1245 2917 1246 2918 1248 2919 1248 2920 1247 2921 1245 2922 1246 2923 1250 2924 1252 2925 1252 2926 1248 2927 1246 2928 1416 2929 1422 2930 1423 2931 1423 2932 1417 2933 1416 2934 1418 2935 1420 2936 1421 2937 1421 2938 1419 2939 1418 2940 1417 2941 1419 2942 1421 2943 1421 2944 1423 2945 1417 2946 1420 2947 1422 2948 1423 2949 1423 2950 1421 2951 1420 2952 1416 2953 1422 2954 1420 2955 1420 2956 1418 2957 1416 2958 1416 2959 1418 2960 1419 2961 1419 2962 1417 2963 1416 2964 1424 2965 1430 2966 1431 2967 1431 2968 1425 2969 1424 2970 1426 2971 1428 2972 1429 2973 1429 2974 1427 2975 1426 2976 1424 2977 1426 2978 1428 2979 1428 2980 1430 2981 1424 2982 1428 2983 1429 2984 1431 2985 1431 2986 1430 2987 1428 2988 1424 2989 1425 2990 1427 2991 1427 2992 1426 2993 1424 2994 1425 2995 1431 2996 1429 2997 1429 2998 1427 2999 1425 3000 1404 3001 1406 3002 1407 3003 1407 3004 1405 3005 1404 3006 1402 3007 1403 3008 1407 3009 1407 3010 1406 3011 1402 3012 1400 3013 1402 3014 1406 3015 1406 3016 1404 3017 1400 3018 1400 3019 1401 3020 1403 3021 1403 3022 1402 3023 1400 3024 1401 3025 1405 3026 1407 3027 1407 3028 1403 3029 1401 3030 1404 3031 1405 3032 1401 3033 1401 3034 1400 3035 1404 3036 1408 3037 1412 3038 1414 3039 1414 3040 1410 3041 1408 3042 1412 3043 1413 3044 1415 3045 1415 3046 1414 3047 1412 3048 1408 3049 1410 3050 1411 3051 1411 3052 1409 3053 1408 3054 1410 3055 1414 3056 1415 3057 1415 3058 1411 3059 1410 3060 1409 3061 1411 3062 1415 3063 1415 3064 1413 3065 1409 3066 1408 3067 1409 3068 1413 3069 1413 3070 1412 3071 1408 3072 1288 3073 1296 3073 1292 3073 1292 3073 1290 3073 1288 3073 1286 3074 1289 3074 1291 3074 1291 3074 1294 3074 1286 3074 1286 3075 1294 3075 1296 3075 1296 3075 1288 3075 1286 3075 1436 3076 1432 3076 1438 3076 1438 3077 1432 3077 1434 3077 1437 3078 1436 3078 1439 3078 1439 3079 1436 3079 1438 3079 1432 3080 1433 3080 1434 3080 1434 3081 1433 3081 1435 3081 1433 3082 1437 3082 1435 3082 1435 3083 1437 3083 1439 3083 1452 3084 1445 3084 1449 3084 1449 3085 1445 3085 1444 3085 1449 3086 1444 3086 1448 3086 1448 3087 1444 3087 1446 3087 1448 3088 1446 3088 1454 3088 1454 3089 1446 3089 1447 3089 1454 3090 1447 3090 1455 3090 1455 3091 1447 3091 1441 3091 1455 3092 1441 3092 1451 3092 1451 3093 1441 3093 1440 3093 1451 3094 1440 3094 1450 3094 1450 3095 1440 3095 1442 3095 1450 3096 1442 3096 1453 3096 1453 3097 1442 3097 1443 3097 1453 3098 1443 3098 1452 3098 1452 3099 1443 3099 1445 3099 1442 3100 1440 3100 1443 3100 1443 3101 1440 3101 1441 3101 1443 3102 1441 3102 1445 3102 1445 3103 1441 3103 1447 3103 1445 3104 1447 3104 1444 3104 1444 3105 1447 3105 1446 3105 1449 3106 1448 3106 1452 3106 1452 3107 1448 3107 1454 3107 1452 3108 1454 3108 1453 3108 1453 3109 1454 3109 1455 3109 1453 3110 1455 3110 1450 3110 1450 3111 1455 3111 1451 3111 1477 3112 1485 3112 1476 3112 1476 3113 1485 3113 1482 3113 1476 3114 1482 3114 1478 3114 1478 3115 1482 3115 1483 3115 1478 3116 1483 3116 1479 3116 1479 3117 1483 3117 1487 3117 1479 3118 1487 3118 1473 3118 1473 3119 1487 3119 1486 3119 1473 3120 1486 3120 1472 3120 1472 3121 1486 3121 1480 3121 1472 3122 1480 3122 1474 3122 1474 3123 1480 3123 1481 3123 1474 3124 1481 3124 1475 3124 1475 3125 1481 3125 1484 3125 1475 3126 1484 3126 1477 3126 1477 3127 1484 3127 1485 3127 1481 3128 1480 3128 1484 3128 1484 3129 1480 3129 1486 3129 1484 3130 1486 3130 1485 3130 1485 3131 1486 3131 1487 3131 1485 3132 1487 3132 1482 3132 1482 3133 1487 3133 1483 3133 1476 3134 1478 3134 1477 3134 1477 3135 1478 3135 1479 3135 1477 3136 1479 3136 1475 3136 1475 3137 1479 3137 1473 3137 1475 3138 1473 3138 1474 3138 1474 3139 1473 3139 1472 3139 1557 3140 1569 3140 1573 3140 1569 3141 1557 3141 1565 3141 1527 3142 1523 3142 1547 3142 1561 3143 1565 3143 1553 3143 1553 3144 1565 3144 1557 3144 1553 3145 1557 3145 1549 3145 1549 3146 1557 3146 1545 3146 1547 3147 1523 3147 1545 3147 1545 3148 1523 3148 1521 3148 1545 3149 1521 3149 1525 3149 1541 3150 1549 3150 1537 3150 1537 3151 1549 3151 1545 3151 1537 3152 1545 3152 1533 3152 1533 3153 1545 3153 1525 3153 1533 3154 1525 3154 1529 3154 1559 3155 1555 3155 1547 3155 1547 3156 1555 3156 1551 3156 1531 3157 1527 3157 1535 3157 1535 3158 1527 3158 1547 3158 1535 3159 1547 3159 1539 3159 1539 3160 1547 3160 1551 3160 1539 3161 1551 3161 1543 3161 1573 3162 1577 3162 1557 3162 1557 3163 1577 3163 1581 3163 1557 3164 1581 3164 1559 3164 1559 3165 1581 3165 1583 3165 1559 3166 1583 3166 1579 3166 1563 3167 1555 3167 1567 3167 1567 3168 1555 3168 1559 3168 1567 3169 1559 3169 1571 3169 1571 3170 1559 3170 1579 3170 1571 3171 1579 3171 1575 3171 1566 3172 1570 3172 1558 3172 1524 3173 1520 3173 1544 3173 1544 3174 1520 3174 1546 3174 1556 3175 1580 3175 1576 3175 1538 3176 1542 3176 1550 3176 1556 3177 1552 3177 1544 3177 1544 3178 1552 3178 1548 3178 1528 3179 1524 3179 1532 3179 1532 3180 1524 3180 1544 3180 1532 3181 1544 3181 1536 3181 1536 3182 1544 3182 1548 3182 1536 3183 1548 3183 1540 3183 1580 3184 1556 3184 1582 3184 1582 3185 1556 3185 1558 3185 1582 3186 1558 3186 1578 3186 1578 3187 1558 3187 1570 3187 1578 3188 1570 3188 1574 3188 1560 3189 1552 3189 1564 3189 1564 3190 1552 3190 1556 3190 1564 3191 1556 3191 1568 3191 1568 3192 1556 3192 1576 3192 1568 3193 1576 3193 1572 3193 1530 3194 1534 3194 1526 3194 1526 3195 1534 3195 1546 3195 1526 3196 1546 3196 1522 3196 1522 3197 1546 3197 1520 3197 1534 3198 1538 3198 1546 3198 1546 3199 1538 3199 1550 3199 1546 3200 1550 3200 1558 3200 1558 3201 1550 3201 1554 3201 1558 3202 1554 3202 1566 3202 1566 3203 1554 3203 1562 3203 1583 3204 1581 3204 1582 3204 1582 3205 1581 3205 1580 3205 1554 3206 1550 3206 1555 3206 1555 3207 1550 3207 1551 3207 1521 3208 1523 3208 1520 3208 1520 3209 1523 3209 1522 3209 1553 3210 1549 3210 1552 3210 1552 3211 1549 3211 1548 3211 1557 3212 1559 3212 1556 3212 1556 3213 1559 3213 1558 3213 1559 3214 1547 3214 1558 3214 1558 3215 1547 3215 1546 3215 1547 3216 1545 3216 1546 3216 1546 3217 1545 3217 1544 3217 1545 3218 1557 3218 1544 3218 1544 3219 1557 3219 1556 3219 1583 3220 1582 3220 1578 3220 1583 3221 1578 3221 1579 3221 1579 3222 1578 3222 1574 3222 1579 3223 1574 3223 1575 3223 1575 3224 1574 3224 1570 3224 1575 3225 1570 3225 1571 3225 1571 3226 1570 3226 1566 3226 1571 3227 1566 3227 1567 3227 1567 3228 1566 3228 1562 3228 1567 3229 1562 3229 1563 3229 1563 3230 1562 3230 1554 3230 1563 3231 1554 3231 1555 3231 1553 3232 1552 3232 1560 3232 1553 3233 1560 3233 1561 3233 1561 3234 1560 3234 1564 3234 1561 3235 1564 3235 1565 3235 1565 3236 1564 3236 1568 3236 1565 3237 1568 3237 1569 3237 1569 3238 1568 3238 1572 3238 1569 3239 1572 3239 1573 3239 1573 3240 1572 3240 1576 3240 1573 3241 1576 3241 1577 3241 1577 3242 1576 3242 1580 3242 1577 3243 1580 3243 1581 3243 1521 3244 1520 3244 1524 3244 1521 3245 1524 3245 1525 3245 1525 3246 1524 3246 1528 3246 1525 3247 1528 3247 1529 3247 1529 3248 1528 3248 1532 3248 1529 3249 1532 3249 1533 3249 1533 3250 1532 3250 1536 3250 1533 3251 1536 3251 1537 3251 1537 3252 1536 3252 1540 3252 1537 3253 1540 3253 1541 3253 1541 3254 1540 3254 1548 3254 1541 3255 1548 3255 1549 3255 1551 3256 1550 3256 1542 3256 1551 3257 1542 3257 1543 3257 1543 3258 1542 3258 1538 3258 1543 3259 1538 3259 1539 3259 1539 3260 1538 3260 1534 3260 1539 3261 1534 3261 1535 3261 1535 3262 1534 3262 1530 3262 1535 3263 1530 3263 1531 3263 1531 3264 1530 3264 1526 3264 1531 3265 1526 3265 1527 3265 1527 3266 1526 3266 1522 3266 1527 3267 1522 3267 1523 3267 1587 3268 1586 3268 1585 3268 1585 3269 1586 3269 1584 3269 1591 3270 1587 3270 1589 3270 1589 3271 1587 3271 1585 3271 1595 3272 1591 3272 1593 3272 1593 3273 1591 3273 1589 3273 1599 3274 1595 3274 1597 3274 1597 3275 1595 3275 1593 3275 1598 3276 1599 3276 1596 3276 1596 3277 1599 3277 1597 3277 1594 3278 1598 3278 1592 3278 1592 3279 1598 3279 1596 3279 1590 3280 1594 3280 1588 3280 1588 3281 1594 3281 1592 3281 1586 3282 1590 3282 1584 3282 1584 3283 1590 3283 1588 3283 1594 3284 1590 3284 1598 3284 1598 3285 1590 3285 1586 3285 1598 3286 1586 3286 1599 3286 1599 3287 1586 3287 1587 3287 1599 3288 1587 3288 1595 3288 1595 3289 1587 3289 1591 3289 1593 3290 1589 3290 1597 3290 1597 3291 1589 3291 1585 3291 1597 3292 1585 3292 1596 3292 1596 3293 1585 3293 1584 3293 1596 3294 1584 3294 1592 3294 1592 3295 1584 3295 1588 3295 1603 3296 1602 3296 1601 3296 1601 3297 1602 3297 1600 3297 1607 3298 1603 3298 1605 3298 1605 3299 1603 3299 1601 3299 1611 3300 1607 3300 1609 3300 1609 3301 1607 3301 1605 3301 1615 3302 1611 3302 1613 3302 1613 3303 1611 3303 1609 3303 1614 3304 1615 3304 1612 3304 1612 3305 1615 3305 1613 3305 1610 3306 1614 3306 1608 3306 1608 3307 1614 3307 1612 3307 1606 3308 1610 3308 1604 3308 1604 3309 1610 3309 1608 3309 1602 3310 1606 3310 1600 3310 1600 3311 1606 3311 1604 3311 1610 3312 1606 3312 1614 3312 1614 3313 1606 3313 1602 3313 1614 3314 1602 3314 1615 3314 1615 3315 1602 3315 1603 3315 1615 3316 1603 3316 1611 3316 1611 3317 1603 3317 1607 3317 1609 3318 1605 3318 1613 3318 1613 3319 1605 3319 1601 3319 1613 3320 1601 3320 1612 3320 1612 3321 1601 3321 1600 3321 1612 3322 1600 3322 1608 3322 1608 3323 1600 3323 1604 3323 1619 3324 1618 3324 1617 3324 1617 3325 1618 3325 1616 3325 1623 3326 1619 3326 1621 3326 1621 3327 1619 3327 1617 3327 1627 3328 1623 3328 1625 3328 1625 3329 1623 3329 1621 3329 1631 3330 1627 3330 1629 3330 1629 3331 1627 3331 1625 3331 1630 3332 1631 3332 1628 3332 1628 3333 1631 3333 1629 3333 1626 3334 1630 3334 1624 3334 1624 3335 1630 3335 1628 3335 1622 3336 1626 3336 1620 3336 1620 3337 1626 3337 1624 3337 1618 3338 1622 3338 1616 3338 1616 3339 1622 3339 1620 3339 1626 3340 1622 3340 1630 3340 1630 3341 1622 3341 1618 3341 1630 3342 1618 3342 1631 3342 1631 3343 1618 3343 1619 3343 1631 3344 1619 3344 1627 3344 1627 3345 1619 3345 1623 3345 1625 3346 1621 3346 1629 3346 1629 3347 1621 3347 1617 3347 1629 3348 1617 3348 1628 3348 1628 3349 1617 3349 1616 3349 1628 3350 1616 3350 1624 3350 1624 3351 1616 3351 1620 3351 1635 3352 1634 3352 1633 3352 1633 3353 1634 3353 1632 3353 1639 3354 1635 3354 1637 3354 1637 3355 1635 3355 1633 3355 1643 3356 1639 3356 1641 3356 1641 3357 1639 3357 1637 3357 1647 3358 1643 3358 1645 3358 1645 3359 1643 3359 1641 3359 1646 3360 1647 3360 1644 3360 1644 3361 1647 3361 1645 3361 1642 3362 1646 3362 1640 3362 1640 3363 1646 3363 1644 3363 1638 3364 1642 3364 1636 3364 1636 3365 1642 3365 1640 3365 1634 3366 1638 3366 1632 3366 1632 3367 1638 3367 1636 3367 1639 3368 1643 3368 1635 3368 1635 3369 1643 3369 1647 3369 1635 3370 1647 3370 1634 3370 1634 3371 1647 3371 1646 3371 1634 3372 1646 3372 1638 3372 1638 3373 1646 3373 1642 3373 1636 3374 1640 3374 1632 3374 1632 3375 1640 3375 1644 3375 1632 3376 1644 3376 1633 3376 1633 3377 1644 3377 1645 3377 1633 3378 1645 3378 1637 3378 1637 3379 1645 3379 1641 3379 1659 3380 1655 3380 1657 3380 1657 3381 1655 3381 1653 3381 1663 3382 1659 3382 1661 3382 1661 3383 1659 3383 1657 3383 1662 3384 1663 3384 1660 3384 1660 3385 1663 3385 1661 3385 1658 3386 1662 3386 1656 3386 1656 3387 1662 3387 1660 3387 1654 3388 1658 3388 1652 3388 1652 3389 1658 3389 1656 3389 1650 3390 1654 3390 1648 3390 1648 3391 1654 3391 1652 3391 1651 3392 1650 3392 1649 3392 1649 3393 1650 3393 1648 3393 1655 3394 1651 3394 1653 3394 1653 3395 1651 3395 1649 3395 1650 3396 1651 3396 1654 3396 1654 3397 1651 3397 1655 3397 1654 3398 1655 3398 1658 3398 1658 3399 1655 3399 1659 3399 1658 3400 1659 3400 1662 3400 1662 3401 1659 3401 1663 3401 1660 3402 1661 3402 1656 3402 1656 3403 1661 3403 1657 3403 1656 3404 1657 3404 1652 3404 1652 3405 1657 3405 1653 3405 1652 3406 1653 3406 1648 3406 1648 3407 1653 3407 1649 3407 1669 3408 1673 3408 1671 3408 1671 3409 1673 3409 1675 3409 1665 3410 1669 3410 1667 3410 1667 3411 1669 3411 1671 3411 1664 3412 1665 3412 1666 3412 1666 3413 1665 3413 1667 3413 1668 3414 1664 3414 1670 3414 1670 3415 1664 3415 1666 3415 1672 3416 1668 3416 1674 3416 1674 3417 1668 3417 1670 3417 1676 3418 1672 3418 1678 3418 1678 3419 1672 3419 1674 3419 1677 3420 1676 3420 1679 3420 1679 3421 1676 3421 1678 3421 1673 3422 1677 3422 1675 3422 1675 3423 1677 3423 1679 3423 1676 3424 1677 3424 1672 3424 1672 3425 1677 3425 1673 3425 1672 3426 1673 3426 1668 3426 1668 3427 1673 3427 1669 3427 1668 3428 1669 3428 1664 3428 1664 3429 1669 3429 1665 3429 1666 3430 1667 3430 1670 3430 1670 3431 1667 3431 1671 3431 1670 3432 1671 3432 1674 3432 1674 3433 1671 3433 1675 3433 1674 3434 1675 3434 1678 3434 1678 3435 1675 3435 1679 3435 1685 3436 1684 3436 1681 3436 1681 3437 1684 3437 1680 3437 1681 3438 1680 3438 1683 3438 1683 3439 1680 3439 1682 3439 1695 3440 1694 3440 1691 3440 1691 3441 1694 3441 1690 3441 1695 3442 1691 3442 1693 3442 1693 3443 1691 3443 1689 3443 1687 3444 1681 3444 1683 3444 1685 3445 1681 3445 1687 3445 1692 3446 1688 3446 1694 3446 1694 3447 1688 3447 1690 3447 1680 3448 1686 3448 1682 3448 1686 3449 1680 3449 1684 3449 1743 3450 1742 3450 1738 3450 1743 3451 1738 3451 1739 3451 1739 3452 1738 3452 1736 3452 1739 3453 1736 3453 1737 3453 1737 3454 1736 3454 1734 3454 1737 3455 1734 3455 1735 3455 1735 3456 1734 3456 1732 3456 1735 3457 1732 3457 1733 3457 1733 3458 1732 3458 1730 3458 1733 3459 1730 3459 1731 3459 1731 3460 1730 3460 1728 3460 1731 3461 1728 3461 1729 3461 1729 3462 1728 3462 1726 3462 1729 3463 1726 3463 1727 3463 1727 3464 1726 3464 1724 3464 1727 3465 1724 3465 1725 3465 1725 3466 1724 3466 1722 3466 1725 3467 1722 3467 1723 3467 1723 3468 1722 3468 1720 3468 1723 3469 1720 3469 1721 3469 1721 3470 1720 3470 1709 3470 1709 3471 1720 3471 1708 3471 1709 3472 1708 3472 1706 3472 1709 3473 1706 3473 1707 3473 1707 3474 1706 3474 1702 3474 1707 3475 1702 3475 1703 3475 1703 3476 1702 3476 1698 3476 1703 3477 1698 3477 1699 3477 1699 3478 1698 3478 1696 3478 1699 3479 1696 3479 1697 3479 1697 3480 1696 3480 1700 3480 1697 3481 1700 3481 1701 3481 1701 3482 1700 3482 1704 3482 1701 3483 1704 3483 1705 3483 1705 3484 1704 3484 1711 3484 1711 3485 1704 3485 1710 3485 1711 3486 1710 3486 1712 3486 1711 3487 1712 3487 1713 3487 1713 3488 1712 3488 1714 3488 1713 3489 1714 3489 1715 3489 1715 3490 1714 3490 1716 3490 1715 3491 1716 3491 1717 3491 1717 3492 1716 3492 1718 3492 1717 3493 1718 3493 1719 3493 1719 3494 1718 3494 1789 3494 1789 3495 1718 3495 1788 3495 1789 3496 1788 3496 1794 3496 1789 3497 1794 3497 1795 3497 1795 3498 1794 3498 1798 3498 1795 3499 1798 3499 1799 3499 1799 3500 1798 3500 1802 3500 1799 3501 1802 3501 1803 3501 1803 3502 1802 3502 1806 3502 1803 3503 1806 3503 1807 3503 1807 3504 1806 3504 1810 3504 1807 3505 1810 3505 1811 3505 1811 3506 1810 3506 1814 3506 1811 3507 1814 3507 1815 3507 1813 3508 1812 3508 1808 3508 1813 3509 1808 3509 1809 3509 1809 3510 1808 3510 1804 3510 1809 3511 1804 3511 1805 3511 1805 3512 1804 3512 1800 3512 1805 3513 1800 3513 1801 3513 1801 3514 1800 3514 1796 3514 1801 3515 1796 3515 1797 3515 1797 3516 1796 3516 1792 3516 1797 3517 1792 3517 1793 3517 1793 3518 1792 3518 1790 3518 1793 3519 1790 3519 1791 3519 1791 3520 1790 3520 1787 3520 1787 3521 1790 3521 1786 3521 1787 3522 1786 3522 1784 3522 1787 3523 1784 3523 1785 3523 1785 3524 1784 3524 1782 3524 1785 3525 1782 3525 1783 3525 1783 3526 1782 3526 1780 3526 1783 3527 1780 3527 1781 3527 1781 3528 1780 3528 1778 3528 1781 3529 1778 3529 1779 3529 1779 3530 1778 3530 1776 3530 1779 3531 1776 3531 1777 3531 1777 3532 1776 3532 1774 3532 1777 3533 1774 3533 1775 3533 1771 3534 1770 3534 1768 3534 1771 3535 1768 3535 1769 3535 1769 3536 1768 3536 1766 3536 1769 3537 1766 3537 1767 3537 1767 3538 1766 3538 1764 3538 1767 3539 1764 3539 1765 3539 1765 3540 1764 3540 1762 3540 1765 3541 1762 3541 1763 3541 1763 3542 1762 3542 1760 3542 1763 3543 1760 3543 1761 3543 1761 3544 1760 3544 1758 3544 1761 3545 1758 3545 1759 3545 1759 3546 1758 3546 1757 3546 1757 3547 1758 3547 1756 3547 1757 3548 1756 3548 1754 3548 1757 3549 1754 3549 1755 3549 1755 3550 1754 3550 1752 3550 1755 3551 1752 3551 1753 3551 1753 3552 1752 3552 1750 3552 1753 3553 1750 3553 1751 3553 1751 3554 1750 3554 1748 3554 1751 3555 1748 3555 1749 3555 1749 3556 1748 3556 1746 3556 1749 3557 1746 3557 1747 3557 1747 3558 1746 3558 1744 3558 1747 3559 1744 3559 1745 3559 1745 3560 1744 3560 1740 3560 1745 3561 1740 3561 1741 3561 1815 3562 1769 3562 1767 3562 1817 3563 1773 3563 1815 3563 1815 3564 1773 3564 1771 3564 1815 3565 1771 3565 1769 3565 1789 3566 1765 3566 1763 3566 1765 3567 1789 3567 1767 3567 1767 3568 1789 3568 1795 3568 1767 3569 1795 3569 1799 3569 1791 3570 1813 3570 1809 3570 1781 3571 1779 3571 1783 3571 1783 3572 1779 3572 1777 3572 1783 3573 1777 3573 1785 3573 1785 3574 1777 3574 1775 3574 1785 3575 1775 3575 1787 3575 1787 3576 1775 3576 1773 3576 1787 3577 1773 3577 1791 3577 1791 3578 1773 3578 1817 3578 1791 3579 1817 3579 1813 3579 1811 3580 1815 3580 1807 3580 1807 3581 1815 3581 1767 3581 1807 3582 1767 3582 1803 3582 1803 3583 1767 3583 1799 3583 1705 3584 1745 3584 1741 3584 1797 3585 1793 3585 1801 3585 1801 3586 1793 3586 1791 3586 1801 3587 1791 3587 1805 3587 1805 3588 1791 3588 1809 3588 1745 3589 1705 3589 1747 3589 1747 3590 1705 3590 1711 3590 1747 3591 1711 3591 1749 3591 1749 3592 1711 3592 1713 3592 1749 3593 1713 3593 1751 3593 1721 3594 1741 3594 1743 3594 1721 3595 1743 3595 1723 3595 1723 3596 1743 3596 1739 3596 1723 3597 1739 3597 1725 3597 1725 3598 1739 3598 1737 3598 1725 3599 1737 3599 1727 3599 1727 3600 1737 3600 1735 3600 1727 3601 1735 3601 1729 3601 1729 3602 1735 3602 1733 3602 1729 3603 1733 3603 1731 3603 1721 3604 1709 3604 1741 3604 1741 3605 1709 3605 1707 3605 1741 3606 1707 3606 1703 3606 1763 3607 1761 3607 1789 3607 1789 3608 1761 3608 1759 3608 1789 3609 1759 3609 1719 3609 1719 3610 1759 3610 1757 3610 1757 3611 1755 3611 1719 3611 1719 3612 1755 3612 1753 3612 1719 3613 1753 3613 1717 3613 1717 3614 1753 3614 1751 3614 1717 3615 1751 3615 1715 3615 1715 3616 1751 3616 1713 3616 1701 3617 1705 3617 1697 3617 1697 3618 1705 3618 1741 3618 1697 3619 1741 3619 1699 3619 1699 3620 1741 3620 1703 3620 1808 3621 1812 3621 1816 3621 1802 3622 1798 3622 1794 3622 1740 3623 1744 3623 1704 3623 1814 3624 1810 3624 1766 3624 1766 3625 1810 3625 1806 3625 1806 3626 1802 3626 1766 3626 1766 3627 1802 3627 1794 3627 1766 3628 1794 3628 1764 3628 1764 3629 1794 3629 1788 3629 1764 3630 1788 3630 1762 3630 1762 3631 1788 3631 1760 3631 1776 3632 1778 3632 1774 3632 1774 3633 1778 3633 1780 3633 1774 3634 1780 3634 1772 3634 1772 3635 1780 3635 1782 3635 1766 3636 1768 3636 1814 3636 1814 3637 1768 3637 1770 3637 1814 3638 1770 3638 1816 3638 1816 3639 1770 3639 1772 3639 1816 3640 1772 3640 1786 3640 1786 3641 1772 3641 1782 3641 1786 3642 1782 3642 1784 3642 1704 3643 1744 3643 1710 3643 1718 3644 1756 3644 1788 3644 1788 3645 1756 3645 1758 3645 1788 3646 1758 3646 1760 3646 1792 3647 1796 3647 1800 3647 1786 3648 1790 3648 1816 3648 1816 3649 1790 3649 1792 3649 1816 3650 1792 3650 1808 3650 1808 3651 1792 3651 1800 3651 1808 3652 1800 3652 1804 3652 1696 3653 1698 3653 1700 3653 1700 3654 1698 3654 1702 3654 1700 3655 1702 3655 1704 3655 1704 3656 1702 3656 1706 3656 1704 3657 1706 3657 1740 3657 1706 3658 1708 3658 1740 3658 1740 3659 1708 3659 1720 3659 1740 3660 1720 3660 1742 3660 1742 3661 1720 3661 1722 3661 1742 3662 1722 3662 1738 3662 1738 3663 1722 3663 1724 3663 1738 3664 1724 3664 1736 3664 1736 3665 1724 3665 1726 3665 1736 3666 1726 3666 1734 3666 1734 3667 1726 3667 1728 3667 1734 3668 1728 3668 1732 3668 1732 3669 1728 3669 1730 3669 1744 3670 1746 3670 1710 3670 1710 3671 1746 3671 1748 3671 1710 3672 1748 3672 1712 3672 1712 3673 1748 3673 1750 3673 1712 3674 1750 3674 1714 3674 1714 3675 1750 3675 1716 3675 1716 3676 1750 3676 1752 3676 1716 3677 1752 3677 1718 3677 1718 3678 1752 3678 1754 3678 1718 3679 1754 3679 1756 3679 1865 3680 1864 3680 1860 3680 1865 3681 1860 3681 1861 3681 1861 3682 1860 3682 1858 3682 1861 3683 1858 3683 1859 3683 1859 3684 1858 3684 1856 3684 1859 3685 1856 3685 1857 3685 1857 3686 1856 3686 1854 3686 1857 3687 1854 3687 1855 3687 1855 3688 1854 3688 1852 3688 1855 3689 1852 3689 1853 3689 1853 3690 1852 3690 1850 3690 1853 3691 1850 3691 1851 3691 1851 3692 1850 3692 1848 3692 1851 3693 1848 3693 1849 3693 1849 3694 1848 3694 1846 3694 1849 3695 1846 3695 1847 3695 1847 3696 1846 3696 1844 3696 1847 3697 1844 3697 1845 3697 1845 3698 1844 3698 1842 3698 1845 3699 1842 3699 1843 3699 1843 3700 1842 3700 1831 3700 1831 3701 1842 3701 1830 3701 1831 3702 1830 3702 1828 3702 1831 3703 1828 3703 1829 3703 1829 3704 1828 3704 1824 3704 1829 3705 1824 3705 1825 3705 1825 3706 1824 3706 1820 3706 1825 3707 1820 3707 1821 3707 1821 3708 1820 3708 1818 3708 1821 3709 1818 3709 1819 3709 1819 3710 1818 3710 1822 3710 1819 3711 1822 3711 1823 3711 1823 3712 1822 3712 1826 3712 1823 3713 1826 3713 1827 3713 1827 3714 1826 3714 1833 3714 1833 3715 1826 3715 1832 3715 1833 3716 1832 3716 1834 3716 1833 3717 1834 3717 1835 3717 1835 3718 1834 3718 1836 3718 1835 3719 1836 3719 1837 3719 1837 3720 1836 3720 1838 3720 1837 3721 1838 3721 1839 3721 1839 3722 1838 3722 1840 3722 1839 3723 1840 3723 1841 3723 1841 3724 1840 3724 1911 3724 1911 3725 1840 3725 1910 3725 1911 3726 1910 3726 1916 3726 1911 3727 1916 3727 1917 3727 1917 3728 1916 3728 1920 3728 1917 3729 1920 3729 1921 3729 1921 3730 1920 3730 1924 3730 1921 3731 1924 3731 1925 3731 1925 3732 1924 3732 1928 3732 1925 3733 1928 3733 1929 3733 1929 3734 1928 3734 1932 3734 1929 3735 1932 3735 1933 3735 1933 3736 1932 3736 1936 3736 1933 3737 1936 3737 1937 3737 1935 3738 1934 3738 1930 3738 1935 3739 1930 3739 1931 3739 1931 3740 1930 3740 1926 3740 1931 3741 1926 3741 1927 3741 1927 3742 1926 3742 1922 3742 1927 3743 1922 3743 1923 3743 1923 3744 1922 3744 1918 3744 1923 3745 1918 3745 1919 3745 1919 3746 1918 3746 1914 3746 1919 3747 1914 3747 1915 3747 1915 3748 1914 3748 1912 3748 1915 3749 1912 3749 1913 3749 1913 3750 1912 3750 1909 3750 1909 3751 1912 3751 1908 3751 1909 3752 1908 3752 1906 3752 1909 3753 1906 3753 1907 3753 1907 3754 1906 3754 1904 3754 1907 3755 1904 3755 1905 3755 1905 3756 1904 3756 1902 3756 1905 3757 1902 3757 1903 3757 1903 3758 1902 3758 1900 3758 1903 3759 1900 3759 1901 3759 1901 3760 1900 3760 1898 3760 1901 3761 1898 3761 1899 3761 1899 3762 1898 3762 1896 3762 1899 3763 1896 3763 1897 3763 1893 3764 1892 3764 1890 3764 1893 3765 1890 3765 1891 3765 1891 3766 1890 3766 1888 3766 1891 3767 1888 3767 1889 3767 1889 3768 1888 3768 1886 3768 1889 3769 1886 3769 1887 3769 1887 3770 1886 3770 1884 3770 1887 3771 1884 3771 1885 3771 1885 3772 1884 3772 1882 3772 1885 3773 1882 3773 1883 3773 1883 3774 1882 3774 1880 3774 1883 3775 1880 3775 1881 3775 1881 3776 1880 3776 1879 3776 1879 3777 1880 3777 1878 3777 1879 3778 1878 3778 1876 3778 1879 3779 1876 3779 1877 3779 1877 3780 1876 3780 1874 3780 1877 3781 1874 3781 1875 3781 1875 3782 1874 3782 1872 3782 1875 3783 1872 3783 1873 3783 1873 3784 1872 3784 1870 3784 1873 3785 1870 3785 1871 3785 1871 3786 1870 3786 1868 3786 1871 3787 1868 3787 1869 3787 1869 3788 1868 3788 1866 3788 1869 3789 1866 3789 1867 3789 1867 3790 1866 3790 1862 3790 1867 3791 1862 3791 1863 3791 1893 3792 1891 3792 1937 3792 1937 3793 1891 3793 1889 3793 1903 3794 1901 3794 1905 3794 1905 3795 1901 3795 1899 3795 1905 3796 1899 3796 1907 3796 1907 3797 1899 3797 1897 3797 1907 3798 1897 3798 1909 3798 1909 3799 1897 3799 1895 3799 1909 3800 1895 3800 1913 3800 1917 3801 1889 3801 1911 3801 1911 3802 1889 3802 1887 3802 1911 3803 1887 3803 1885 3803 1933 3804 1937 3804 1929 3804 1929 3805 1937 3805 1889 3805 1929 3806 1889 3806 1925 3806 1925 3807 1889 3807 1917 3807 1925 3808 1917 3808 1921 3808 1827 3809 1867 3809 1863 3809 1931 3810 1927 3810 1935 3810 1935 3811 1927 3811 1923 3811 1893 3812 1937 3812 1895 3812 1895 3813 1937 3813 1939 3813 1895 3814 1939 3814 1913 3814 1913 3815 1939 3815 1935 3815 1913 3816 1935 3816 1915 3816 1915 3817 1935 3817 1923 3817 1915 3818 1923 3818 1919 3818 1867 3819 1827 3819 1869 3819 1869 3820 1827 3820 1833 3820 1869 3821 1833 3821 1871 3821 1871 3822 1833 3822 1835 3822 1871 3823 1835 3823 1873 3823 1843 3824 1863 3824 1865 3824 1843 3825 1865 3825 1845 3825 1845 3826 1865 3826 1861 3826 1845 3827 1861 3827 1847 3827 1847 3828 1861 3828 1859 3828 1847 3829 1859 3829 1849 3829 1849 3830 1859 3830 1857 3830 1849 3831 1857 3831 1851 3831 1851 3832 1857 3832 1855 3832 1851 3833 1855 3833 1853 3833 1843 3834 1831 3834 1863 3834 1863 3835 1831 3835 1829 3835 1863 3836 1829 3836 1825 3836 1835 3837 1837 3837 1873 3837 1873 3838 1837 3838 1839 3838 1873 3839 1839 3839 1875 3839 1875 3840 1839 3840 1841 3840 1875 3841 1841 3841 1877 3841 1823 3842 1827 3842 1819 3842 1819 3843 1827 3843 1863 3843 1819 3844 1863 3844 1821 3844 1821 3845 1863 3845 1825 3845 1885 3846 1883 3846 1911 3846 1911 3847 1883 3847 1881 3847 1911 3848 1881 3848 1841 3848 1841 3849 1881 3849 1879 3849 1841 3850 1879 3850 1877 3850 1930 3851 1934 3851 1938 3851 1924 3852 1920 3852 1916 3852 1894 3853 1938 3853 1892 3853 1892 3854 1938 3854 1936 3854 1892 3855 1936 3855 1890 3855 1908 3856 1894 3856 1896 3856 1862 3857 1866 3857 1826 3857 1890 3858 1936 3858 1888 3858 1888 3859 1936 3859 1932 3859 1888 3860 1932 3860 1928 3860 1894 3861 1908 3861 1938 3861 1938 3862 1908 3862 1912 3862 1938 3863 1912 3863 1914 3863 1928 3864 1924 3864 1888 3864 1888 3865 1924 3865 1916 3865 1888 3866 1916 3866 1886 3866 1886 3867 1916 3867 1910 3867 1886 3868 1910 3868 1884 3868 1884 3869 1910 3869 1882 3869 1904 3870 1906 3870 1902 3870 1902 3871 1906 3871 1908 3871 1902 3872 1908 3872 1900 3872 1900 3873 1908 3873 1896 3873 1900 3874 1896 3874 1898 3874 1826 3875 1866 3875 1832 3875 1840 3876 1878 3876 1910 3876 1910 3877 1878 3877 1880 3877 1910 3878 1880 3878 1882 3878 1926 3879 1930 3879 1922 3879 1922 3880 1930 3880 1938 3880 1922 3881 1938 3881 1918 3881 1918 3882 1938 3882 1914 3882 1818 3883 1820 3883 1822 3883 1822 3884 1820 3884 1824 3884 1822 3885 1824 3885 1826 3885 1826 3886 1824 3886 1828 3886 1826 3887 1828 3887 1862 3887 1828 3888 1830 3888 1862 3888 1862 3889 1830 3889 1842 3889 1862 3890 1842 3890 1864 3890 1864 3891 1842 3891 1844 3891 1864 3892 1844 3892 1860 3892 1860 3893 1844 3893 1846 3893 1860 3894 1846 3894 1858 3894 1858 3895 1846 3895 1848 3895 1858 3896 1848 3896 1856 3896 1856 3897 1848 3897 1850 3897 1856 3898 1850 3898 1854 3898 1854 3899 1850 3899 1852 3899 1866 3900 1868 3900 1832 3900 1832 3901 1868 3901 1870 3901 1832 3902 1870 3902 1834 3902 1834 3903 1870 3903 1872 3903 1834 3904 1872 3904 1836 3904 1836 3905 1872 3905 1838 3905 1838 3906 1872 3906 1874 3906 1838 3907 1874 3907 1840 3907 1840 3908 1874 3908 1876 3908 1840 3909 1876 3909 1878 3909 1987 3910 1986 3910 1982 3910 1987 3911 1982 3911 1983 3911 1983 3912 1982 3912 1980 3912 1983 3913 1980 3913 1981 3913 1981 3914 1980 3914 1978 3914 1981 3915 1978 3915 1979 3915 1979 3916 1978 3916 1976 3916 1979 3917 1976 3917 1977 3917 1977 3918 1976 3918 1974 3918 1977 3919 1974 3919 1975 3919 1975 3920 1974 3920 1972 3920 1975 3921 1972 3921 1973 3921 1973 3922 1972 3922 1970 3922 1973 3923 1970 3923 1971 3923 1971 3924 1970 3924 1968 3924 1971 3925 1968 3925 1969 3925 1969 3926 1968 3926 1966 3926 1969 3927 1966 3927 1967 3927 1967 3928 1966 3928 1964 3928 1967 3929 1964 3929 1965 3929 1965 3930 1964 3930 1953 3930 1953 3931 1964 3931 1952 3931 1953 3932 1952 3932 1950 3932 1953 3933 1950 3933 1951 3933 1951 3934 1950 3934 1946 3934 1951 3935 1946 3935 1947 3935 1947 3936 1946 3936 1942 3936 1947 3937 1942 3937 1943 3937 1943 3938 1942 3938 1940 3938 1943 3939 1940 3939 1941 3939 1941 3940 1940 3940 1944 3940 1941 3941 1944 3941 1945 3941 1945 3942 1944 3942 1948 3942 1945 3943 1948 3943 1949 3943 1949 3944 1948 3944 1955 3944 1955 3945 1948 3945 1954 3945 1955 3946 1954 3946 1956 3946 1955 3947 1956 3947 1957 3947 1957 3948 1956 3948 1958 3948 1957 3949 1958 3949 1959 3949 1959 3950 1958 3950 1960 3950 1959 3951 1960 3951 1961 3951 1961 3952 1960 3952 1962 3952 1961 3953 1962 3953 1963 3953 1963 3954 1962 3954 2033 3954 2033 3955 1962 3955 2032 3955 2033 3956 2032 3956 2038 3956 2033 3957 2038 3957 2039 3957 2039 3958 2038 3958 2042 3958 2039 3959 2042 3959 2043 3959 2043 3960 2042 3960 2046 3960 2043 3961 2046 3961 2047 3961 2047 3962 2046 3962 2050 3962 2047 3963 2050 3963 2051 3963 2051 3964 2050 3964 2054 3964 2051 3965 2054 3965 2055 3965 2055 3966 2054 3966 2058 3966 2055 3967 2058 3967 2059 3967 2057 3968 2056 3968 2052 3968 2057 3969 2052 3969 2053 3969 2053 3970 2052 3970 2048 3970 2053 3971 2048 3971 2049 3971 2049 3972 2048 3972 2044 3972 2049 3973 2044 3973 2045 3973 2045 3974 2044 3974 2040 3974 2045 3975 2040 3975 2041 3975 2041 3976 2040 3976 2036 3976 2041 3977 2036 3977 2037 3977 2037 3978 2036 3978 2034 3978 2037 3979 2034 3979 2035 3979 2035 3980 2034 3980 2031 3980 2031 3981 2034 3981 2030 3981 2031 3982 2030 3982 2028 3982 2031 3983 2028 3983 2029 3983 2029 3984 2028 3984 2026 3984 2029 3985 2026 3985 2027 3985 2027 3986 2026 3986 2024 3986 2027 3987 2024 3987 2025 3987 2025 3988 2024 3988 2022 3988 2025 3989 2022 3989 2023 3989 2023 3990 2022 3990 2020 3990 2023 3991 2020 3991 2021 3991 2021 3992 2020 3992 2018 3992 2021 3993 2018 3993 2019 3993 2015 3994 2014 3994 2012 3994 2015 3995 2012 3995 2013 3995 2013 3996 2012 3996 2010 3996 2013 3997 2010 3997 2011 3997 2011 3998 2010 3998 2008 3998 2011 3999 2008 3999 2009 3999 2009 4000 2008 4000 2006 4000 2009 4001 2006 4001 2007 4001 2007 4002 2006 4002 2004 4002 2007 4003 2004 4003 2005 4003 2005 4004 2004 4004 2002 4004 2005 4005 2002 4005 2003 4005 2003 4006 2002 4006 2001 4006 2001 4007 2002 4007 2000 4007 2001 4008 2000 4008 1998 4008 2001 4009 1998 4009 1999 4009 1999 4010 1998 4010 1996 4010 1999 4011 1996 4011 1997 4011 1997 4012 1996 4012 1994 4012 1997 4013 1994 4013 1995 4013 1995 4014 1994 4014 1992 4014 1995 4015 1992 4015 1993 4015 1993 4016 1992 4016 1990 4016 1993 4017 1990 4017 1991 4017 1991 4018 1990 4018 1988 4018 1991 4019 1988 4019 1989 4019 1989 4020 1988 4020 1984 4020 1989 4021 1984 4021 1985 4021 2015 4022 2013 4022 2059 4022 2059 4023 2013 4023 2011 4023 2025 4024 2023 4024 2027 4024 2027 4025 2023 4025 2021 4025 2027 4026 2021 4026 2029 4026 2029 4027 2021 4027 2019 4027 2029 4028 2019 4028 2031 4028 2031 4029 2019 4029 2017 4029 2031 4030 2017 4030 2035 4030 2039 4031 2011 4031 2033 4031 2033 4032 2011 4032 2009 4032 2033 4033 2009 4033 2007 4033 2055 4034 2059 4034 2051 4034 2051 4035 2059 4035 2011 4035 2051 4036 2011 4036 2047 4036 2047 4037 2011 4037 2039 4037 2047 4038 2039 4038 2043 4038 1949 4039 1989 4039 1985 4039 2053 4040 2049 4040 2057 4040 2057 4041 2049 4041 2045 4041 2015 4042 2059 4042 2017 4042 2017 4043 2059 4043 2061 4043 2017 4044 2061 4044 2035 4044 2035 4045 2061 4045 2057 4045 2035 4046 2057 4046 2037 4046 2037 4047 2057 4047 2045 4047 2037 4048 2045 4048 2041 4048 1965 4049 1985 4049 1987 4049 1965 4050 1987 4050 1967 4050 1967 4051 1987 4051 1983 4051 1967 4052 1983 4052 1969 4052 1969 4053 1983 4053 1981 4053 1969 4054 1981 4054 1971 4054 1971 4055 1981 4055 1979 4055 1971 4056 1979 4056 1973 4056 1973 4057 1979 4057 1977 4057 1973 4058 1977 4058 1975 4058 1989 4059 1949 4059 1991 4059 1991 4060 1949 4060 1955 4060 1991 4061 1955 4061 1993 4061 1993 4062 1955 4062 1957 4062 1993 4063 1957 4063 1995 4063 1965 4064 1953 4064 1985 4064 1985 4065 1953 4065 1951 4065 1985 4066 1951 4066 1947 4066 1957 4067 1959 4067 1995 4067 1995 4068 1959 4068 1961 4068 1995 4069 1961 4069 1997 4069 1997 4070 1961 4070 1963 4070 1997 4071 1963 4071 1999 4071 1945 4072 1949 4072 1941 4072 1941 4073 1949 4073 1985 4073 1941 4074 1985 4074 1943 4074 1943 4075 1985 4075 1947 4075 2007 4076 2005 4076 2033 4076 2033 4077 2005 4077 2003 4077 2033 4078 2003 4078 1963 4078 1963 4079 2003 4079 2001 4079 1963 4080 2001 4080 1999 4080 2052 4081 2056 4081 2060 4081 2002 4082 2004 4082 2032 4082 2046 4083 2042 4083 2038 4083 2016 4084 2060 4084 2014 4084 2014 4085 2060 4085 2058 4085 2014 4086 2058 4086 2012 4086 2030 4087 2016 4087 2018 4087 1984 4088 1988 4088 1948 4088 2012 4089 2058 4089 2010 4089 2010 4090 2058 4090 2054 4090 2010 4091 2054 4091 2050 4091 2016 4092 2030 4092 2060 4092 2060 4093 2030 4093 2034 4093 2060 4094 2034 4094 2036 4094 1948 4095 1988 4095 1954 4095 2026 4096 2028 4096 2024 4096 2024 4097 2028 4097 2030 4097 2024 4098 2030 4098 2022 4098 2022 4099 2030 4099 2018 4099 2022 4100 2018 4100 2020 4100 2002 4101 2032 4101 2000 4101 2000 4102 2032 4102 1962 4102 2000 4103 1962 4103 1998 4103 2050 4104 2046 4104 2010 4104 2010 4105 2046 4105 2038 4105 2010 4106 2038 4106 2008 4106 2008 4107 2038 4107 2032 4107 2008 4108 2032 4108 2006 4108 2006 4109 2032 4109 2004 4109 2048 4110 2052 4110 2044 4110 2044 4111 2052 4111 2060 4111 2044 4112 2060 4112 2040 4112 2040 4113 2060 4113 2036 4113 1940 4114 1942 4114 1944 4114 1944 4115 1942 4115 1946 4115 1944 4116 1946 4116 1948 4116 1948 4117 1946 4117 1950 4117 1948 4118 1950 4118 1984 4118 1950 4119 1952 4119 1984 4119 1984 4120 1952 4120 1964 4120 1984 4121 1964 4121 1986 4121 1986 4122 1964 4122 1966 4122 1986 4123 1966 4123 1982 4123 1982 4124 1966 4124 1968 4124 1982 4125 1968 4125 1980 4125 1980 4126 1968 4126 1970 4126 1980 4127 1970 4127 1978 4127 1978 4128 1970 4128 1972 4128 1978 4129 1972 4129 1976 4129 1976 4130 1972 4130 1974 4130 1998 4131 1962 4131 1996 4131 1996 4132 1962 4132 1960 4132 1996 4133 1960 4133 1994 4133 1988 4134 1990 4134 1954 4134 1954 4135 1990 4135 1992 4135 1954 4136 1992 4136 1956 4136 1956 4137 1992 4137 1994 4137 1956 4138 1994 4138 1958 4138 1958 4139 1994 4139 1960 4139 2105 4140 2103 4140 2104 4140 2104 4141 2103 4141 2102 4141 2093 4142 2091 4142 2089 4142 2090 4143 2092 4143 2088 4143 2111 4144 2122 4144 2110 4144 2110 4145 2122 4145 2121 4145 2110 4146 2121 4146 2118 4146 2122 4147 2111 4147 2112 4147 2122 4148 2112 4148 2123 4148 2123 4149 2112 4149 2113 4149 2123 4150 2113 4150 2124 4150 2124 4151 2113 4151 2114 4151 2124 4152 2114 4152 2125 4152 2125 4153 2114 4153 2115 4153 2125 4154 2115 4154 2126 4154 2126 4155 2115 4155 2116 4155 2126 4156 2116 4156 2127 4156 2127 4157 2116 4157 2117 4157 2127 4158 2117 4158 2128 4158 2138 4159 2166 4159 2162 4159 2138 4160 2162 4160 2158 4160 2138 4161 2158 4161 2153 4161 2138 4162 2153 4162 2149 4162 2138 4163 2149 4163 2145 4163 2138 4164 2145 4164 2141 4164 2138 4165 2141 4165 2135 4165 2138 4166 2135 4166 2132 4166 2138 4167 2132 4167 2136 4167 2138 4168 2136 4168 2142 4168 2138 4169 2142 4169 2146 4169 2138 4170 2146 4170 2150 4170 2138 4171 2150 4171 2154 4171 2138 4172 2154 4172 2159 4172 2138 4173 2159 4173 2163 4173 2138 4174 2163 4174 2167 4174 2138 4175 2167 4175 2171 4175 2138 4176 2171 4176 2175 4176 2138 4177 2175 4177 2179 4177 2138 4178 2179 4178 2181 4178 2138 4179 2181 4179 2178 4179 2138 4180 2178 4180 2174 4180 2138 4181 2174 4181 2170 4181 2138 4182 2170 4182 2166 4182 2137 4183 2143 4183 2147 4183 2137 4184 2147 4184 2151 4184 2137 4185 2151 4185 2155 4185 2137 4186 2155 4186 2160 4186 2137 4187 2160 4187 2164 4187 2137 4188 2164 4188 2168 4188 2137 4189 2168 4189 2172 4189 2137 4190 2172 4190 2176 4190 2137 4191 2176 4191 2180 4191 2137 4192 2180 4192 2177 4192 2137 4193 2177 4193 2173 4193 2137 4194 2173 4194 2169 4194 2137 4195 2169 4195 2165 4195 2137 4196 2165 4196 2161 4196 2156 4197 2157 4197 2137 4197 2137 4198 2157 4198 2152 4198 2137 4199 2152 4199 2148 4199 2137 4200 2148 4200 2144 4200 2137 4201 2144 4201 2140 4201 2137 4202 2140 4202 2134 4202 2137 4203 2134 4203 2131 4203 2137 4204 2131 4204 2133 4204 2137 4205 2133 4205 2139 4205 2137 4206 2139 4206 2143 4206 2178 4207 2172 4207 2174 4207 2174 4208 2172 4208 2168 4208 2174 4209 2168 4209 2170 4209 2170 4210 2168 4210 2164 4210 2170 4211 2164 4211 2166 4211 2166 4212 2164 4212 2160 4212 2166 4213 2160 4213 2162 4213 2162 4214 2160 4214 2155 4214 2162 4215 2155 4215 2158 4215 2158 4216 2155 4216 2151 4216 2158 4217 2151 4217 2153 4217 2153 4218 2151 4218 2147 4218 2153 4219 2147 4219 2149 4219 2149 4220 2147 4220 2143 4220 2149 4221 2143 4221 2145 4221 2145 4222 2143 4222 2139 4222 2145 4223 2139 4223 2141 4223 2141 4224 2139 4224 2133 4224 2141 4225 2133 4225 2135 4225 2135 4226 2133 4226 2131 4226 2135 4227 2131 4227 2132 4227 2132 4228 2131 4228 2134 4228 2132 4229 2134 4229 2136 4229 2136 4230 2134 4230 2140 4230 2136 4231 2140 4231 2142 4231 2142 4232 2140 4232 2144 4232 2142 4233 2144 4233 2146 4233 2146 4234 2144 4234 2148 4234 2146 4235 2148 4235 2150 4235 2150 4236 2148 4236 2152 4236 2150 4237 2152 4237 2154 4237 2154 4238 2152 4238 2157 4238 2154 4239 2157 4239 2159 4239 2159 4240 2157 4240 2161 4240 2159 4241 2161 4241 2163 4241 2163 4242 2161 4242 2165 4242 2163 4243 2165 4243 2167 4243 2167 4244 2165 4244 2169 4244 2167 4245 2169 4245 2171 4245 2171 4246 2169 4246 2173 4246 2171 4247 2173 4247 2175 4247 2175 4248 2173 4248 2177 4248 2175 4249 2177 4249 2179 4249 2179 4250 2177 4250 2180 4250 2179 4251 2180 4251 2181 4251 2181 4252 2180 4252 2176 4252 2181 4253 2176 4253 2178 4253 2178 4254 2176 4254 2172 4254 2138 4255 2137 4255 2156 4255 2258 4256 2256 4256 2257 4256 2257 4257 2256 4257 2253 4257 2253 4258 2256 4258 2252 4258 2253 4259 2252 4259 2249 4259 2249 4260 2252 4260 2248 4260 2249 4261 2248 4261 2247 4261 2248 4262 2246 4262 2247 4262 2247 4263 2246 4263 2240 4263 2247 4264 2240 4264 2241 4264 2241 4265 2240 4265 2236 4265 2241 4266 2236 4266 2237 4266 2237 4267 2236 4267 2233 4267 2233 4268 2236 4268 2232 4268 2233 4269 2232 4269 2231 4269 2231 4270 2232 4270 2230 4270 2231 4271 2230 4271 2229 4271 2229 4272 2230 4272 2228 4272 2229 4273 2228 4273 2225 4273 2228 4274 2224 4274 2225 4274 2225 4275 2224 4275 2218 4275 2225 4276 2218 4276 2219 4276 2219 4277 2218 4277 2214 4277 2219 4278 2214 4278 2215 4278 2215 4279 2214 4279 2210 4279 2215 4280 2210 4280 2211 4280 2211 4281 2210 4281 2207 4281 2207 4282 2210 4282 2206 4282 2207 4283 2206 4283 2205 4283 2205 4284 2206 4284 2204 4284 2205 4285 2204 4285 2203 4285 2204 4286 2202 4286 2203 4286 2203 4287 2202 4287 2196 4287 2203 4288 2196 4288 2197 4288 2197 4289 2196 4289 2192 4289 2197 4290 2192 4290 2193 4290 2193 4291 2192 4291 2188 4291 2193 4292 2188 4292 2189 4292 2189 4293 2188 4293 2187 4293 2187 4294 2188 4294 2186 4294 2187 4295 2186 4295 2183 4295 2186 4296 2182 4296 2183 4296 2183 4297 2182 4297 2184 4297 2183 4298 2184 4298 2185 4298 2185 4299 2184 4299 2190 4299 2185 4300 2190 4300 2191 4300 2191 4301 2190 4301 2194 4301 2191 4302 2194 4302 2195 4302 2195 4303 2194 4303 2199 4303 2199 4304 2194 4304 2198 4304 2199 4305 2198 4305 2201 4305 2198 4306 2200 4306 2201 4306 2201 4307 2200 4307 2208 4307 2201 4308 2208 4308 2209 4308 2209 4309 2208 4309 2212 4309 2209 4310 2212 4310 2213 4310 2213 4311 2212 4311 2216 4311 2213 4312 2216 4312 2217 4312 2217 4313 2216 4313 2221 4313 2221 4314 2216 4314 2220 4314 2221 4315 2220 4315 2223 4315 2220 4316 2222 4316 2223 4316 2223 4317 2222 4317 2226 4317 2223 4318 2226 4318 2227 4318 2227 4319 2226 4319 2234 4319 2227 4320 2234 4320 2235 4320 2235 4321 2234 4321 2238 4321 2235 4322 2238 4322 2239 4322 2239 4323 2238 4323 2243 4323 2243 4324 2238 4324 2242 4324 2243 4325 2242 4325 2245 4325 2242 4326 2244 4326 2245 4326 2245 4327 2244 4327 2250 4327 2245 4328 2250 4328 2251 4328 2251 4329 2250 4329 2254 4329 2251 4330 2254 4330 2255 4330 2255 4331 2254 4331 2260 4331 2255 4332 2260 4332 2261 4332 2261 4333 2260 4333 2264 4333 2261 4334 2264 4334 2265 4334 2265 4335 2264 4335 2267 4335 2267 4336 2264 4336 2266 4336 2267 4337 2266 4337 2271 4337 2266 4338 2270 4338 2271 4338 2271 4339 2270 4339 2274 4339 2271 4340 2274 4340 2275 4340 2275 4341 2274 4341 2278 4341 2275 4342 2278 4342 2279 4342 2279 4343 2278 4343 2283 4343 2283 4344 2278 4344 2282 4344 2283 4345 2282 4345 2285 4345 2285 4346 2282 4346 2284 4346 2285 4347 2284 4347 2287 4347 2287 4348 2284 4348 2286 4348 2287 4349 2286 4349 2289 4349 2286 4350 2288 4350 2289 4350 2289 4351 2288 4351 2280 4351 2289 4352 2280 4352 2281 4352 2281 4353 2280 4353 2276 4353 2281 4354 2276 4354 2277 4354 2277 4355 2276 4355 2272 4355 2277 4356 2272 4356 2273 4356 2273 4357 2272 4357 2268 4357 2269 4358 2268 4358 2262 4358 2263 4359 2262 4359 2258 4359 2263 4360 2258 4360 2259 4360 2259 4361 2258 4361 2257 4361 2297 4362 2429 4362 2428 4362 2297 4363 2428 4363 2296 4363 2296 4364 2428 4364 2430 4364 2296 4365 2430 4365 2298 4365 2298 4366 2430 4366 2433 4366 2298 4367 2433 4367 2301 4367 2301 4368 2433 4368 2435 4368 2301 4369 2435 4369 2305 4369 2312 4370 2442 4370 2445 4370 2312 4371 2445 4371 2319 4371 2319 4372 2445 4372 2449 4372 2319 4373 2449 4373 2325 4373 2325 4374 2449 4374 2451 4374 2325 4375 2451 4375 2331 4375 2331 4376 2451 4376 2455 4376 2331 4377 2455 4377 2336 4377 2336 4378 2455 4378 2457 4378 2336 4379 2457 4379 2340 4379 2340 4380 2457 4380 2460 4380 2340 4381 2460 4381 2343 4381 2343 4382 2460 4382 2461 4382 2343 4383 2461 4383 2344 4383 2344 4384 2461 4384 2459 4384 2344 4385 2459 4385 2342 4385 2342 4386 2459 4386 2456 4386 2342 4387 2456 4387 2339 4387 2339 4388 2456 4388 2454 4388 2339 4389 2454 4389 2334 4389 2334 4390 2454 4390 2450 4390 2334 4391 2450 4391 2330 4391 2330 4392 2450 4392 2447 4392 2330 4393 2447 4393 2324 4393 2324 4394 2447 4394 2444 4394 2324 4395 2444 4395 2317 4395 2317 4396 2444 4396 2440 4396 2317 4397 2440 4397 2311 4397 2311 4398 2440 4398 2438 4398 2311 4399 2438 4399 2307 4399 2307 4400 2438 4400 2434 4400 2307 4401 2434 4401 2303 4401 2439 4402 2436 4402 2442 4402 2442 4403 2436 4403 2441 4403 2442 4404 2441 4404 2445 4404 2445 4405 2441 4405 2446 4405 2445 4406 2446 4406 2449 4406 2449 4407 2446 4407 2452 4407 2449 4408 2452 4408 2451 4408 2451 4409 2452 4409 2458 4409 2451 4410 2458 4410 2455 4410 2455 4411 2458 4411 2463 4411 2455 4412 2463 4412 2457 4412 2457 4413 2463 4413 2465 4413 2457 4414 2465 4414 2460 4414 2460 4415 2465 4415 2467 4415 2460 4416 2467 4416 2461 4416 2461 4417 2467 4417 2469 4417 2461 4418 2469 4418 2459 4418 2459 4419 2469 4419 2468 4419 2459 4420 2468 4420 2456 4420 2456 4421 2468 4421 2466 4421 2456 4422 2466 4422 2454 4422 2454 4423 2466 4423 2464 4423 2454 4424 2464 4424 2450 4424 2464 4425 2462 4425 2450 4425 2450 4426 2462 4426 2453 4426 2450 4427 2453 4427 2447 4427 2447 4428 2453 4428 2448 4428 2447 4429 2448 4429 2444 4429 2444 4430 2448 4430 2443 4430 2444 4431 2443 4431 2440 4431 2440 4432 2443 4432 2437 4432 2440 4433 2437 4433 2438 4433 2438 4434 2437 4434 2431 4434 2438 4435 2431 4435 2434 4435 2434 4436 2431 4436 2426 4436 2434 4437 2426 4437 2432 4437 2432 4438 2426 4438 2424 4438 2432 4439 2424 4439 2429 4439 2429 4440 2424 4440 2422 4440 2429 4441 2422 4441 2428 4441 2428 4442 2422 4442 2420 4442 2428 4443 2420 4443 2430 4443 2430 4444 2420 4444 2421 4444 2430 4445 2421 4445 2433 4445 2433 4446 2421 4446 2423 4446 2433 4447 2423 4447 2435 4447 2435 4448 2423 4448 2425 4448 2435 4449 2425 4449 2439 4449 2439 4450 2425 4450 2427 4450 2439 4451 2427 4451 2436 4451 2411 4452 2465 4452 2408 4452 2408 4453 2465 4453 2463 4453 2408 4454 2463 4454 2405 4454 2405 4455 2463 4455 2458 4455 2405 4456 2458 4456 2401 4456 2401 4457 2458 4457 2452 4457 2401 4458 2452 4458 2397 4458 2397 4459 2452 4459 2446 4459 2397 4460 2446 4460 2394 4460 2394 4461 2446 4461 2441 4461 2394 4462 2441 4462 2390 4462 2390 4463 2441 4463 2436 4463 2390 4464 2436 4464 2387 4464 2387 4465 2436 4465 2427 4465 2381 4466 2425 4466 2423 4466 2381 4467 2423 4467 2377 4467 2377 4468 2423 4468 2421 4468 2377 4469 2421 4469 2374 4469 2374 4470 2421 4470 2420 4470 2374 4471 2420 4471 2373 4471 2373 4472 2420 4472 2422 4472 2373 4473 2422 4473 2376 4473 2376 4474 2422 4474 2424 4474 2376 4475 2424 4475 2379 4475 2379 4476 2424 4476 2426 4476 2379 4477 2426 4477 2382 4477 2382 4478 2426 4478 2431 4478 2382 4479 2431 4479 2385 4479 2385 4480 2431 4480 2437 4480 2385 4481 2437 4481 2388 4481 2388 4482 2437 4482 2443 4482 2388 4483 2443 4483 2391 4483 2391 4484 2443 4484 2448 4484 2391 4485 2448 4485 2395 4485 2395 4486 2448 4486 2453 4486 2395 4487 2453 4487 2399 4487 2399 4488 2453 4488 2462 4488 2399 4489 2462 4489 2403 4489 2403 4490 2462 4490 2464 4490 2403 4491 2464 4491 2406 4491 2406 4492 2464 4492 2466 4492 2406 4493 2466 4493 2410 4493 2410 4494 2466 4494 2468 4494 2410 4495 2468 4495 2413 4495 2413 4496 2468 4496 2469 4496 2413 4497 2469 4497 2414 4497 2414 4498 2469 4498 2467 4498 2414 4499 2467 4499 2411 4499 2411 4500 2467 4500 2465 4500 2390 4501 2392 4501 2394 4501 2394 4502 2392 4502 2396 4502 2394 4503 2396 4503 2397 4503 2397 4504 2396 4504 2400 4504 2397 4505 2400 4505 2401 4505 2401 4506 2400 4506 2404 4506 2401 4507 2404 4507 2405 4507 2405 4508 2404 4508 2409 4508 2405 4509 2409 4509 2408 4509 2408 4510 2409 4510 2415 4510 2408 4511 2415 4511 2411 4511 2411 4512 2415 4512 2417 4512 2411 4513 2417 4513 2414 4513 2414 4514 2417 4514 2419 4514 2414 4515 2419 4515 2413 4515 2413 4516 2419 4516 2418 4516 2413 4517 2418 4517 2410 4517 2410 4518 2418 4518 2416 4518 2410 4519 2416 4519 2406 4519 2406 4520 2416 4520 2412 4520 2406 4521 2412 4521 2403 4521 2412 4522 2407 4522 2403 4522 2403 4523 2407 4523 2402 4523 2403 4524 2402 4524 2399 4524 2399 4525 2402 4525 2398 4525 2399 4526 2398 4526 2395 4526 2395 4527 2398 4527 2393 4527 2395 4528 2393 4528 2391 4528 2391 4529 2393 4529 2389 4529 2391 4530 2389 4530 2388 4530 2388 4531 2389 4531 2386 4531 2388 4532 2386 4532 2385 4532 2385 4533 2386 4533 2383 4533 2385 4534 2383 4534 2382 4534 2382 4535 2383 4535 2378 4535 2382 4536 2378 4536 2379 4536 2379 4537 2378 4537 2372 4537 2379 4538 2372 4538 2376 4538 2376 4539 2372 4539 2370 4539 2376 4540 2370 4540 2373 4540 2373 4541 2370 4541 2368 4541 2373 4542 2368 4542 2374 4542 2374 4543 2368 4543 2369 4543 2374 4544 2369 4544 2377 4544 2377 4545 2369 4545 2371 4545 2377 4546 2371 4546 2381 4546 2381 4547 2371 4547 2375 4547 2333 4548 2380 4548 2375 4548 2333 4549 2375 4549 2326 4549 2326 4550 2375 4550 2371 4550 2326 4551 2371 4551 2321 4551 2321 4552 2371 4552 2369 4552 2321 4553 2369 4553 2316 4553 2316 4554 2369 4554 2368 4554 2316 4555 2368 4555 2315 4555 2315 4556 2368 4556 2370 4556 2315 4557 2370 4557 2318 4557 2328 4558 2378 4558 2383 4558 2328 4559 2383 4559 2337 4559 2337 4560 2383 4560 2386 4560 2337 4561 2386 4561 2349 4561 2349 4562 2386 4562 2389 4562 2349 4563 2389 4563 2352 4563 2352 4564 2389 4564 2393 4564 2352 4565 2393 4565 2354 4565 2354 4566 2393 4566 2398 4566 2354 4567 2398 4567 2356 4567 2356 4568 2398 4568 2402 4568 2356 4569 2402 4569 2358 4569 2358 4570 2402 4570 2407 4570 2358 4571 2407 4571 2360 4571 2360 4572 2407 4572 2412 4572 2360 4573 2412 4573 2362 4573 2362 4574 2412 4574 2416 4574 2362 4575 2416 4575 2364 4575 2364 4576 2416 4576 2418 4576 2364 4577 2418 4577 2366 4577 2366 4578 2418 4578 2419 4578 2366 4579 2419 4579 2367 4579 2367 4580 2419 4580 2417 4580 2367 4581 2417 4581 2365 4581 2365 4582 2417 4582 2415 4582 2365 4583 2415 4583 2363 4583 2363 4584 2415 4584 2409 4584 2363 4585 2409 4585 2361 4585 2361 4586 2409 4586 2404 4586 2361 4587 2404 4587 2359 4587 2359 4588 2404 4588 2400 4588 2359 4589 2400 4589 2357 4589 2357 4590 2400 4590 2396 4590 2357 4591 2396 4591 2355 4591 2355 4592 2396 4592 2392 4592 2355 4593 2392 4593 2353 4593 2365 4594 2348 4594 2367 4594 2367 4595 2348 4595 2351 4595 2367 4596 2351 4596 2366 4596 2366 4597 2351 4597 2350 4597 2366 4598 2350 4598 2364 4598 2364 4599 2350 4599 2347 4599 2364 4600 2347 4600 2362 4600 2362 4601 2347 4601 2345 4601 2362 4602 2345 4602 2360 4602 2360 4603 2345 4603 2338 4603 2360 4604 2338 4604 2358 4604 2358 4605 2338 4605 2332 4605 2358 4606 2332 4606 2356 4606 2356 4607 2332 4607 2327 4607 2356 4608 2327 4608 2354 4608 2354 4609 2327 4609 2320 4609 2354 4610 2320 4610 2352 4610 2352 4611 2320 4611 2313 4611 2352 4612 2313 4612 2349 4612 2349 4613 2313 4613 2309 4613 2349 4614 2309 4614 2337 4614 2337 4615 2309 4615 2304 4615 2337 4616 2304 4616 2328 4616 2328 4617 2304 4617 2299 4617 2328 4618 2299 4618 2322 4618 2322 4619 2299 4619 2294 4619 2322 4620 2294 4620 2318 4620 2318 4621 2294 4621 2292 4621 2318 4622 2292 4622 2315 4622 2315 4623 2292 4623 2290 4623 2315 4624 2290 4624 2316 4624 2316 4625 2290 4625 2291 4625 2316 4626 2291 4626 2321 4626 2321 4627 2291 4627 2293 4627 2321 4628 2293 4628 2326 4628 2326 4629 2293 4629 2295 4629 2326 4630 2295 4630 2333 4630 2333 4631 2295 4631 2302 4631 2353 4632 2310 4632 2314 4632 2353 4633 2314 4633 2355 4633 2355 4634 2314 4634 2323 4634 2355 4635 2323 4635 2357 4635 2357 4636 2323 4636 2329 4636 2357 4637 2329 4637 2359 4637 2359 4638 2329 4638 2335 4638 2359 4639 2335 4639 2361 4639 2361 4640 2335 4640 2341 4640 2361 4641 2341 4641 2363 4641 2363 4642 2341 4642 2346 4642 2363 4643 2346 4643 2365 4643 2365 4644 2346 4644 2348 4644 2342 4645 2350 4645 2344 4645 2344 4646 2350 4646 2351 4646 2344 4647 2351 4647 2343 4647 2343 4648 2351 4648 2348 4648 2343 4649 2348 4649 2340 4649 2340 4650 2348 4650 2346 4650 2340 4651 2346 4651 2336 4651 2336 4652 2346 4652 2341 4652 2336 4653 2341 4653 2331 4653 2301 4654 2293 4654 2298 4654 2298 4655 2293 4655 2291 4655 2298 4656 2291 4656 2296 4656 2296 4657 2291 4657 2290 4657 2296 4658 2290 4658 2297 4658 2297 4659 2290 4659 2292 4659 2297 4660 2292 4660 2300 4660 2300 4661 2292 4661 2294 4661 2300 4662 2294 4662 2303 4662 2303 4663 2294 4663 2299 4663 2303 4664 2299 4664 2307 4664 2307 4665 2299 4665 2304 4665 2307 4666 2304 4666 2311 4666 2341 4667 2335 4667 2331 4667 2331 4668 2335 4668 2329 4668 2331 4669 2329 4669 2325 4669 2325 4670 2329 4670 2323 4670 2325 4671 2323 4671 2319 4671 2319 4672 2323 4672 2314 4672 2319 4673 2314 4673 2312 4673 2312 4674 2314 4674 2310 4674 2312 4675 2310 4675 2308 4675 2308 4676 2310 4676 2306 4676 2308 4677 2306 4677 2305 4677 2305 4678 2306 4678 2302 4678 2305 4679 2302 4679 2301 4679 2301 4680 2302 4680 2295 4680 2301 4681 2295 4681 2293 4681 2304 4682 2309 4682 2311 4682 2311 4683 2309 4683 2313 4683 2311 4684 2313 4684 2317 4684 2317 4685 2313 4685 2320 4685 2317 4686 2320 4686 2324 4686 2324 4687 2320 4687 2327 4687 2324 4688 2327 4688 2330 4688 2330 4689 2327 4689 2332 4689 2330 4690 2332 4690 2334 4690 2334 4691 2332 4691 2338 4691 2334 4692 2338 4692 2339 4692 2339 4693 2338 4693 2345 4693 2339 4694 2345 4694 2342 4694 2342 4695 2345 4695 2347 4695 2342 4696 2347 4696 2350 4696 2541 4697 2540 4697 2537 4697 2537 4698 2540 4698 2536 4698 2537 4699 2536 4699 2534 4699 2534 4700 2536 4700 2532 4700 2534 4701 2532 4701 2530 4701 2530 4702 2532 4702 2527 4702 2530 4703 2527 4703 2526 4703 2526 4704 2527 4704 2521 4704 2526 4705 2521 4705 2524 4705 2524 4706 2521 4706 2519 4706 2524 4707 2519 4707 2523 4707 2523 4708 2519 4708 2518 4708 2523 4709 2518 4709 2525 4709 2525 4710 2518 4710 2520 4710 2525 4711 2520 4711 2528 4711 2528 4712 2520 4712 2522 4712 2528 4713 2522 4713 2531 4713 2531 4714 2522 4714 2529 4714 2531 4715 2529 4715 2535 4715 2535 4716 2529 4716 2533 4716 2535 4717 2533 4717 2539 4717 2539 4718 2533 4718 2538 4718 2539 4719 2538 4719 2542 4719 2542 4720 2538 4720 2543 4720 2542 4721 2543 4721 2546 4721 2546 4722 2543 4722 2547 4722 2546 4723 2547 4723 2549 4723 2549 4724 2547 4724 2551 4724 2549 4725 2551 4725 2553 4725 2553 4726 2551 4726 2556 4726 2553 4727 2556 4727 2557 4727 2557 4728 2556 4728 2562 4728 2557 4729 2562 4729 2559 4729 2559 4730 2562 4730 2564 4730 2559 4731 2564 4731 2560 4731 2560 4732 2564 4732 2565 4732 2560 4733 2565 4733 2558 4733 2558 4734 2565 4734 2563 4734 2558 4735 2563 4735 2555 4735 2555 4736 2563 4736 2561 4736 2555 4737 2561 4737 2552 4737 2552 4738 2561 4738 2554 4738 2552 4739 2554 4739 2548 4739 2548 4740 2554 4740 2550 4740 2548 4741 2550 4741 2544 4741 2544 4742 2550 4742 2545 4742 2544 4743 2545 4743 2541 4743 2541 4744 2545 4744 2540 4744 2511 4745 2516 4745 2509 4745 2509 4746 2516 4746 2514 4746 2509 4747 2514 4747 2505 4747 2505 4748 2514 4748 2508 4748 2505 4749 2508 4749 2501 4749 2501 4750 2508 4750 2503 4750 2501 4751 2503 4751 2498 4751 2498 4752 2503 4752 2499 4752 2498 4753 2499 4753 2494 4753 2494 4754 2499 4754 2495 4754 2494 4755 2495 4755 2491 4755 2491 4756 2495 4756 2490 4756 2491 4757 2490 4757 2487 4757 2487 4758 2490 4758 2485 4758 2487 4759 2485 4759 2483 4759 2483 4760 2485 4760 2481 4760 2483 4761 2481 4761 2480 4761 2480 4762 2481 4762 2474 4762 2480 4763 2474 4763 2477 4763 2477 4764 2474 4764 2472 4764 2477 4765 2472 4765 2475 4765 2475 4766 2472 4766 2470 4766 2475 4767 2470 4767 2476 4767 2476 4768 2470 4768 2471 4768 2476 4769 2471 4769 2478 4769 2478 4770 2471 4770 2473 4770 2478 4771 2473 4771 2482 4771 2482 4772 2473 4772 2479 4772 2482 4773 2479 4773 2486 4773 2486 4774 2479 4774 2484 4774 2486 4775 2484 4775 2489 4775 2489 4776 2484 4776 2488 4776 2489 4777 2488 4777 2493 4777 2493 4778 2488 4778 2492 4778 2493 4779 2492 4779 2496 4779 2496 4780 2492 4780 2497 4780 2496 4781 2497 4781 2500 4781 2500 4782 2497 4782 2502 4782 2500 4783 2502 4783 2504 4783 2504 4784 2502 4784 2506 4784 2504 4785 2506 4785 2507 4785 2507 4786 2506 4786 2513 4786 2507 4787 2513 4787 2510 4787 2510 4788 2513 4788 2515 4788 2510 4789 2515 4789 2512 4789 2512 4790 2515 4790 2517 4790 2512 4791 2517 4791 2511 4791 2511 4792 2517 4792 2516 4792 2538 4793 2490 4793 2495 4793 2538 4794 2495 4794 2543 4794 2543 4795 2495 4795 2499 4795 2543 4796 2499 4796 2547 4796 2547 4797 2499 4797 2503 4797 2547 4798 2503 4798 2551 4798 2551 4799 2503 4799 2508 4799 2551 4800 2508 4800 2556 4800 2556 4801 2508 4801 2514 4801 2556 4802 2514 4802 2562 4802 2562 4803 2514 4803 2516 4803 2562 4804 2516 4804 2564 4804 2564 4805 2516 4805 2517 4805 2564 4806 2517 4806 2565 4806 2565 4807 2517 4807 2515 4807 2565 4808 2515 4808 2563 4808 2563 4809 2515 4809 2513 4809 2563 4810 2513 4810 2561 4810 2561 4811 2513 4811 2506 4811 2561 4812 2506 4812 2554 4812 2554 4813 2506 4813 2502 4813 2554 4814 2502 4814 2550 4814 2550 4815 2502 4815 2497 4815 2550 4816 2497 4816 2545 4816 2545 4817 2497 4817 2492 4817 2545 4818 2492 4818 2540 4818 2540 4819 2492 4819 2488 4819 2540 4820 2488 4820 2536 4820 2536 4821 2488 4821 2484 4821 2536 4822 2484 4822 2532 4822 2532 4823 2484 4823 2479 4823 2532 4824 2479 4824 2527 4824 2527 4825 2479 4825 2473 4825 2527 4826 2473 4826 2521 4826 2521 4827 2473 4827 2471 4827 2521 4828 2471 4828 2519 4828 2519 4829 2471 4829 2470 4829 2519 4830 2470 4830 2518 4830 2518 4831 2470 4831 2472 4831 2518 4832 2472 4832 2520 4832 2520 4833 2472 4833 2474 4833 2520 4834 2474 4834 2522 4834 2522 4835 2474 4835 2481 4835 2522 4836 2481 4836 2529 4836 2535 4837 2539 4837 2491 4837 2491 4838 2539 4838 2542 4838 2491 4839 2542 4839 2494 4839 2494 4840 2542 4840 2546 4840 2494 4841 2546 4841 2498 4841 2498 4842 2546 4842 2549 4842 2498 4843 2549 4843 2501 4843 2501 4844 2549 4844 2553 4844 2501 4845 2553 4845 2505 4845 2505 4846 2553 4846 2557 4846 2505 4847 2557 4847 2509 4847 2509 4848 2557 4848 2559 4848 2509 4849 2559 4849 2511 4849 2511 4850 2559 4850 2560 4850 2511 4851 2560 4851 2512 4851 2512 4852 2560 4852 2558 4852 2512 4853 2558 4853 2510 4853 2510 4854 2558 4854 2555 4854 2510 4855 2555 4855 2507 4855 2507 4856 2555 4856 2552 4856 2507 4857 2552 4857 2504 4857 2504 4858 2552 4858 2548 4858 2504 4859 2548 4859 2500 4859 2500 4860 2548 4860 2544 4860 2500 4861 2544 4861 2496 4861 2496 4862 2544 4862 2541 4862 2496 4863 2541 4863 2493 4863 2493 4864 2541 4864 2537 4864 2493 4865 2537 4865 2489 4865 2489 4866 2537 4866 2534 4866 2489 4867 2534 4867 2486 4867 2486 4868 2534 4868 2530 4868 2486 4869 2530 4869 2482 4869 2482 4870 2530 4870 2526 4870 2482 4871 2526 4871 2478 4871 2478 4872 2526 4872 2524 4872 2478 4873 2524 4873 2476 4873 2476 4874 2524 4874 2523 4874 2476 4875 2523 4875 2475 4875 2475 4876 2523 4876 2525 4876 2475 4877 2525 4877 2477 4877 2477 4878 2525 4878 2528 4878 2477 4879 2528 4879 2480 4879 2480 4880 2528 4880 2531 4880 2480 4881 2531 4881 2483 4881 2785 4882 2791 4882 2782 4882 2782 4883 2791 4883 2783 4883 2782 4884 2783 4884 2779 4884 2779 4885 2783 4885 2776 4885 2779 4886 2776 4886 2777 4886 2777 4887 2776 4887 2766 4887 2777 4888 2766 4888 2774 4888 2774 4889 2766 4889 2764 4889 2774 4890 2764 4890 2771 4890 2771 4891 2764 4891 2762 4891 2771 4892 2762 4892 2769 4892 2769 4893 2762 4893 2760 4893 2769 4894 2760 4894 2767 4894 2767 4895 2760 4895 2758 4895 2767 4896 2758 4896 2768 4896 2768 4897 2758 4897 2759 4897 2768 4898 2759 4898 2770 4898 2770 4899 2759 4899 2761 4899 2770 4900 2761 4900 2773 4900 2773 4901 2761 4901 2763 4901 2773 4902 2763 4902 2775 4902 2775 4903 2763 4903 2765 4903 2775 4904 2765 4904 2778 4904 2778 4905 2765 4905 2772 4905 2778 4906 2772 4906 2781 4906 2781 4907 2772 4907 2780 4907 2781 4908 2780 4908 2784 4908 2784 4909 2780 4909 2787 4909 2784 4910 2787 4910 2786 4910 2786 4911 2787 4911 2797 4911 2786 4912 2797 4912 2789 4912 2789 4913 2797 4913 2799 4913 2789 4914 2799 4914 2792 4914 2792 4915 2799 4915 2801 4915 2792 4916 2801 4916 2794 4916 2794 4917 2801 4917 2803 4917 2794 4918 2803 4918 2796 4918 2796 4919 2803 4919 2805 4919 2796 4920 2805 4920 2795 4920 2795 4921 2805 4921 2804 4921 2795 4922 2804 4922 2793 4922 2793 4923 2804 4923 2802 4923 2793 4924 2802 4924 2790 4924 2790 4925 2802 4925 2800 4925 2790 4926 2800 4926 2788 4926 2788 4927 2800 4927 2798 4927 2788 4928 2798 4928 2785 4928 2785 4929 2798 4929 2791 4929 2742 4930 2752 4930 2745 4930 2745 4931 2752 4931 2754 4931 2745 4932 2754 4932 2747 4932 2747 4933 2754 4933 2756 4933 2747 4934 2756 4934 2748 4934 2748 4935 2756 4935 2757 4935 2748 4936 2757 4936 2746 4936 2746 4937 2757 4937 2755 4937 2746 4938 2755 4938 2744 4938 2744 4939 2755 4939 2753 4939 2744 4940 2753 4940 2741 4940 2741 4941 2753 4941 2751 4941 2741 4942 2751 4942 2738 4942 2738 4943 2751 4943 2749 4943 2738 4944 2749 4944 2736 4944 2736 4945 2749 4945 2739 4945 2736 4946 2739 4946 2733 4946 2733 4947 2739 4947 2732 4947 2733 4948 2732 4948 2730 4948 2730 4949 2732 4949 2724 4949 2730 4950 2724 4950 2727 4950 2727 4951 2724 4951 2717 4951 2727 4952 2717 4952 2725 4952 2725 4953 2717 4953 2715 4953 2725 4954 2715 4954 2722 4954 2722 4955 2715 4955 2713 4955 2722 4956 2713 4956 2720 4956 2720 4957 2713 4957 2711 4957 2720 4958 2711 4958 2719 4958 2719 4959 2711 4959 2710 4959 2719 4960 2710 4960 2721 4960 2721 4961 2710 4961 2712 4961 2721 4962 2712 4962 2723 4962 2723 4963 2712 4963 2714 4963 2723 4964 2714 4964 2726 4964 2726 4965 2714 4965 2716 4965 2726 4966 2716 4966 2729 4966 2729 4967 2716 4967 2718 4967 2729 4968 2718 4968 2731 4968 2731 4969 2718 4969 2728 4969 2731 4970 2728 4970 2734 4970 2734 4971 2728 4971 2735 4971 2734 4972 2735 4972 2737 4972 2737 4973 2735 4973 2743 4973 2737 4974 2743 4974 2740 4974 2740 4975 2743 4975 2750 4975 2740 4976 2750 4976 2742 4976 2742 4977 2750 4977 2752 4977 2715 4978 2761 4978 2713 4978 2713 4979 2761 4979 2759 4979 2713 4980 2759 4980 2711 4980 2711 4981 2759 4981 2758 4981 2711 4982 2758 4982 2710 4982 2710 4983 2758 4983 2760 4983 2710 4984 2760 4984 2712 4984 2712 4985 2760 4985 2762 4985 2712 4986 2762 4986 2714 4986 2714 4987 2762 4987 2764 4987 2714 4988 2764 4988 2716 4988 2716 4989 2764 4989 2766 4989 2716 4990 2766 4990 2718 4990 2718 4991 2766 4991 2776 4991 2718 4992 2776 4992 2728 4992 2728 4993 2776 4993 2783 4993 2728 4994 2783 4994 2735 4994 2735 4995 2783 4995 2791 4995 2735 4996 2791 4996 2743 4996 2743 4997 2791 4997 2798 4997 2743 4998 2798 4998 2750 4998 2750 4999 2798 4999 2800 4999 2750 5000 2800 5000 2752 5000 2752 5001 2800 5001 2802 5001 2752 5002 2802 5002 2754 5002 2754 5003 2802 5003 2804 5003 2754 5004 2804 5004 2756 5004 2756 5005 2804 5005 2805 5005 2756 5006 2805 5006 2757 5006 2757 5007 2805 5007 2803 5007 2757 5008 2803 5008 2755 5008 2755 5009 2803 5009 2801 5009 2755 5010 2801 5010 2753 5010 2753 5011 2801 5011 2799 5011 2753 5012 2799 5012 2751 5012 2751 5013 2799 5013 2797 5013 2751 5014 2797 5014 2749 5014 2749 5015 2797 5015 2787 5015 2749 5016 2787 5016 2739 5016 2739 5017 2787 5017 2780 5017 2739 5018 2780 5018 2732 5018 2732 5019 2780 5019 2772 5019 2732 5020 2772 5020 2724 5020 2724 5021 2772 5021 2765 5021 2724 5022 2765 5022 2717 5022 2717 5023 2765 5023 2763 5023 2717 5024 2763 5024 2715 5024 2715 5025 2763 5025 2761 5025 2691 5026 2722 5026 2689 5026 2689 5027 2722 5027 2720 5027 2689 5028 2720 5028 2687 5028 2687 5029 2720 5029 2719 5029 2687 5030 2719 5030 2686 5030 2686 5031 2719 5031 2721 5031 2686 5032 2721 5032 2688 5032 2688 5033 2721 5033 2723 5033 2688 5034 2723 5034 2690 5034 2690 5035 2723 5035 2726 5035 2690 5036 2726 5036 2692 5036 2692 5037 2726 5037 2729 5037 2692 5038 2729 5038 2694 5038 2694 5039 2729 5039 2731 5039 2694 5040 2731 5040 2696 5040 2696 5041 2731 5041 2734 5041 2696 5042 2734 5042 2698 5042 2698 5043 2734 5043 2737 5043 2698 5044 2737 5044 2700 5044 2700 5045 2737 5045 2740 5045 2700 5046 2740 5046 2702 5046 2702 5047 2740 5047 2742 5047 2702 5048 2742 5048 2704 5048 2704 5049 2742 5049 2745 5049 2704 5050 2745 5050 2706 5050 2706 5051 2745 5051 2747 5051 2706 5052 2747 5052 2708 5052 2708 5053 2747 5053 2748 5053 2708 5054 2748 5054 2709 5054 2709 5055 2748 5055 2746 5055 2709 5056 2746 5056 2707 5056 2707 5057 2746 5057 2744 5057 2707 5058 2744 5058 2705 5058 2705 5059 2744 5059 2741 5059 2705 5060 2741 5060 2703 5060 2703 5061 2741 5061 2738 5061 2703 5062 2738 5062 2701 5062 2701 5063 2738 5063 2736 5063 2701 5064 2736 5064 2699 5064 2699 5065 2736 5065 2733 5065 2699 5066 2733 5066 2697 5066 2697 5067 2733 5067 2730 5067 2697 5068 2730 5068 2695 5068 2695 5069 2730 5069 2727 5069 2695 5070 2727 5070 2693 5070 2693 5071 2727 5071 2725 5071 2693 5072 2725 5072 2691 5072 2691 5073 2725 5073 2722 5073 2655 5074 2618 5074 2653 5074 2653 5075 2618 5075 2616 5075 2653 5076 2616 5076 2651 5076 2651 5077 2616 5077 2613 5077 2651 5078 2613 5078 2649 5078 2649 5079 2613 5079 2610 5079 2649 5080 2610 5080 2647 5080 2647 5081 2610 5081 2608 5081 2647 5082 2608 5082 2645 5082 2645 5083 2608 5083 2604 5083 2645 5084 2604 5084 2643 5084 2643 5085 2604 5085 2602 5085 2643 5086 2602 5086 2641 5086 2641 5087 2602 5087 2600 5087 2641 5088 2600 5088 2639 5088 2639 5089 2600 5089 2599 5089 2639 5090 2599 5090 2638 5090 2638 5091 2599 5091 2601 5091 2638 5092 2601 5092 2640 5092 2640 5093 2601 5093 2603 5093 2640 5094 2603 5094 2642 5094 2642 5095 2603 5095 2605 5095 2642 5096 2605 5096 2644 5096 2644 5097 2605 5097 2609 5097 2644 5098 2609 5098 2646 5098 2646 5099 2609 5099 2611 5099 2646 5100 2611 5100 2648 5100 2648 5101 2611 5101 2614 5101 2648 5102 2614 5102 2650 5102 2650 5103 2614 5103 2617 5103 2650 5104 2617 5104 2652 5104 2652 5105 2617 5105 2619 5105 2652 5106 2619 5106 2654 5106 2654 5107 2619 5107 2623 5107 2654 5108 2623 5108 2656 5108 2656 5109 2623 5109 2625 5109 2656 5110 2625 5110 2658 5110 2658 5111 2625 5111 2627 5111 2658 5112 2627 5112 2660 5112 2660 5113 2627 5113 2628 5113 2660 5114 2628 5114 2661 5114 2661 5115 2628 5115 2626 5115 2661 5116 2626 5116 2659 5116 2659 5117 2626 5117 2624 5117 2659 5118 2624 5118 2657 5118 2657 5119 2624 5119 2622 5119 2657 5120 2622 5120 2655 5120 2655 5121 2622 5121 2618 5121 2674 5122 2651 5122 2672 5122 2672 5123 2651 5123 2649 5123 2672 5124 2649 5124 2670 5124 2670 5125 2649 5125 2647 5125 2670 5126 2647 5126 2668 5126 2668 5127 2647 5127 2645 5127 2668 5128 2645 5128 2666 5128 2666 5129 2645 5129 2643 5129 2666 5130 2643 5130 2664 5130 2664 5131 2643 5131 2641 5131 2664 5132 2641 5132 2662 5132 2662 5133 2641 5133 2639 5133 2662 5134 2639 5134 2663 5134 2663 5135 2639 5135 2638 5135 2663 5136 2638 5136 2665 5136 2665 5137 2638 5137 2640 5137 2665 5138 2640 5138 2667 5138 2667 5139 2640 5139 2642 5139 2667 5140 2642 5140 2669 5140 2669 5141 2642 5141 2644 5141 2669 5142 2644 5142 2671 5142 2671 5143 2644 5143 2646 5143 2671 5144 2646 5144 2673 5144 2673 5145 2646 5145 2648 5145 2673 5146 2648 5146 2675 5146 2675 5147 2648 5147 2650 5147 2675 5148 2650 5148 2677 5148 2677 5149 2650 5149 2652 5149 2677 5150 2652 5150 2679 5150 2679 5151 2652 5151 2654 5151 2679 5152 2654 5152 2681 5152 2681 5153 2654 5153 2656 5153 2681 5154 2656 5154 2683 5154 2683 5155 2656 5155 2658 5155 2683 5156 2658 5156 2685 5156 2685 5157 2658 5157 2660 5157 2685 5158 2660 5158 2684 5158 2684 5159 2660 5159 2661 5159 2684 5160 2661 5160 2682 5160 2682 5161 2661 5161 2659 5161 2682 5162 2659 5162 2680 5162 2680 5163 2659 5163 2657 5163 2680 5164 2657 5164 2678 5164 2678 5165 2657 5165 2655 5165 2678 5166 2655 5166 2676 5166 2676 5167 2655 5167 2653 5167 2676 5168 2653 5168 2674 5168 2674 5169 2653 5169 2651 5169 2694 5170 2672 5170 2692 5170 2692 5171 2672 5171 2670 5171 2692 5172 2670 5172 2690 5172 2690 5173 2670 5173 2668 5173 2690 5174 2668 5174 2688 5174 2688 5175 2668 5175 2666 5175 2688 5176 2666 5176 2686 5176 2686 5177 2666 5177 2664 5177 2686 5178 2664 5178 2687 5178 2687 5179 2664 5179 2662 5179 2687 5180 2662 5180 2689 5180 2689 5181 2662 5181 2663 5181 2689 5182 2663 5182 2691 5182 2691 5183 2663 5183 2665 5183 2691 5184 2665 5184 2693 5184 2693 5185 2665 5185 2667 5185 2693 5186 2667 5186 2695 5186 2695 5187 2667 5187 2669 5187 2695 5188 2669 5188 2697 5188 2697 5189 2669 5189 2671 5189 2697 5190 2671 5190 2699 5190 2699 5191 2671 5191 2673 5191 2699 5192 2673 5192 2701 5192 2701 5193 2673 5193 2675 5193 2701 5194 2675 5194 2703 5194 2703 5195 2675 5195 2677 5195 2703 5196 2677 5196 2705 5196 2705 5197 2677 5197 2679 5197 2705 5198 2679 5198 2707 5198 2707 5199 2679 5199 2681 5199 2707 5200 2681 5200 2709 5200 2709 5201 2681 5201 2683 5201 2709 5202 2683 5202 2708 5202 2708 5203 2683 5203 2685 5203 2708 5204 2685 5204 2706 5204 2706 5205 2685 5205 2684 5205 2706 5206 2684 5206 2704 5206 2704 5207 2684 5207 2682 5207 2704 5208 2682 5208 2702 5208 2702 5209 2682 5209 2680 5209 2702 5210 2680 5210 2700 5210 2700 5211 2680 5211 2678 5211 2700 5212 2678 5212 2698 5212 2698 5213 2678 5213 2676 5213 2698 5214 2676 5214 2696 5214 2696 5215 2676 5215 2674 5215 2696 5216 2674 5216 2694 5216 2694 5217 2674 5217 2672 5217 2576 5218 2598 5218 2574 5218 2574 5219 2598 5219 2596 5219 2574 5220 2596 5220 2572 5220 2572 5221 2596 5221 2594 5221 2572 5222 2594 5222 2570 5222 2570 5223 2594 5223 2592 5223 2570 5224 2592 5224 2568 5224 2568 5225 2592 5225 2590 5225 2568 5226 2590 5226 2566 5226 2566 5227 2590 5227 2591 5227 2566 5228 2591 5228 2567 5228 2567 5229 2591 5229 2593 5229 2567 5230 2593 5230 2569 5230 2569 5231 2593 5231 2595 5231 2569 5232 2595 5232 2571 5232 2571 5233 2595 5233 2597 5233 2571 5234 2597 5234 2573 5234 2573 5235 2597 5235 2606 5235 2573 5236 2606 5236 2575 5236 2575 5237 2606 5237 2612 5237 2575 5238 2612 5238 2577 5238 2577 5239 2612 5239 2620 5239 2577 5240 2620 5240 2579 5240 2579 5241 2620 5241 2629 5241 2579 5242 2629 5242 2581 5242 2581 5243 2629 5243 2631 5243 2581 5244 2631 5244 2583 5244 2583 5245 2631 5245 2633 5245 2583 5246 2633 5246 2585 5246 2585 5247 2633 5247 2635 5247 2585 5248 2635 5248 2587 5248 2587 5249 2635 5249 2637 5249 2587 5250 2637 5250 2589 5250 2589 5251 2637 5251 2636 5251 2589 5252 2636 5252 2588 5252 2588 5253 2636 5253 2634 5253 2588 5254 2634 5254 2586 5254 2586 5255 2634 5255 2632 5255 2586 5256 2632 5256 2584 5256 2584 5257 2632 5257 2630 5257 2584 5258 2630 5258 2582 5258 2582 5259 2630 5259 2621 5259 2582 5260 2621 5260 2580 5260 2580 5261 2621 5261 2615 5261 2580 5262 2615 5262 2578 5262 2578 5263 2615 5263 2607 5263 2578 5264 2607 5264 2576 5264 2576 5265 2607 5265 2598 5265 2587 5266 2589 5266 2588 5266 2587 5267 2588 5267 2567 5267 2567 5268 2588 5268 2568 5268 2567 5269 2568 5269 2566 5269 2585 5270 2587 5270 2583 5270 2583 5271 2587 5271 2567 5271 2583 5272 2567 5272 2581 5272 2581 5273 2567 5273 2577 5273 2581 5274 2577 5274 2579 5274 2580 5275 2578 5275 2582 5275 2582 5276 2578 5276 2568 5276 2582 5277 2568 5277 2584 5277 2584 5278 2568 5278 2588 5278 2584 5279 2588 5279 2586 5279 2572 5280 2570 5280 2574 5280 2574 5281 2570 5281 2568 5281 2574 5282 2568 5282 2576 5282 2576 5283 2568 5283 2578 5283 2575 5284 2577 5284 2573 5284 2573 5285 2577 5285 2567 5285 2573 5286 2567 5286 2571 5286 2571 5287 2567 5287 2569 5287 2622 5288 2631 5288 2618 5288 2618 5289 2631 5289 2629 5289 2618 5290 2629 5290 2616 5290 2616 5291 2629 5291 2620 5291 2616 5292 2620 5292 2613 5292 2613 5293 2620 5293 2612 5293 2613 5294 2612 5294 2610 5294 2610 5295 2612 5295 2606 5295 2610 5296 2606 5296 2608 5296 2608 5297 2606 5297 2597 5297 2608 5298 2597 5298 2604 5298 2604 5299 2597 5299 2595 5299 2604 5300 2595 5300 2602 5300 2602 5301 2595 5301 2593 5301 2602 5302 2593 5302 2600 5302 2600 5303 2593 5303 2591 5303 2600 5304 2591 5304 2599 5304 2599 5305 2591 5305 2590 5305 2599 5306 2590 5306 2601 5306 2601 5307 2590 5307 2592 5307 2601 5308 2592 5308 2603 5308 2603 5309 2592 5309 2594 5309 2603 5310 2594 5310 2605 5310 2605 5311 2594 5311 2596 5311 2605 5312 2596 5312 2609 5312 2609 5313 2596 5313 2598 5313 2609 5314 2598 5314 2611 5314 2611 5315 2598 5315 2607 5315 2611 5316 2607 5316 2614 5316 2614 5317 2607 5317 2615 5317 2614 5318 2615 5318 2617 5318 2617 5319 2615 5319 2621 5319 2617 5320 2621 5320 2619 5320 2619 5321 2621 5321 2630 5321 2619 5322 2630 5322 2623 5322 2623 5323 2630 5323 2632 5323 2623 5324 2632 5324 2625 5324 2625 5325 2632 5325 2634 5325 2625 5326 2634 5326 2627 5326 2627 5327 2634 5327 2636 5327 2627 5328 2636 5328 2628 5328 2628 5329 2636 5329 2637 5329 2628 5330 2637 5330 2626 5330 2626 5331 2637 5331 2635 5331 2626 5332 2635 5332 2624 5332 2624 5333 2635 5333 2633 5333 2624 5334 2633 5334 2622 5334 2622 5335 2633 5335 2631 5335 2828 5336 2793 5336 2826 5336 2826 5337 2793 5337 2790 5337 2826 5338 2790 5338 2824 5338 2824 5339 2790 5339 2788 5339 2824 5340 2788 5340 2822 5340 2822 5341 2788 5341 2785 5341 2822 5342 2785 5342 2820 5342 2820 5343 2785 5343 2782 5343 2820 5344 2782 5344 2818 5344 2818 5345 2782 5345 2779 5345 2818 5346 2779 5346 2816 5346 2816 5347 2779 5347 2777 5347 2816 5348 2777 5348 2814 5348 2814 5349 2777 5349 2774 5349 2814 5350 2774 5350 2812 5350 2812 5351 2774 5351 2771 5351 2812 5352 2771 5352 2810 5352 2810 5353 2771 5353 2769 5353 2810 5354 2769 5354 2808 5354 2808 5355 2769 5355 2767 5355 2808 5356 2767 5356 2806 5356 2806 5357 2767 5357 2768 5357 2806 5358 2768 5358 2807 5358 2807 5359 2768 5359 2770 5359 2807 5360 2770 5360 2809 5360 2809 5361 2770 5361 2773 5361 2809 5362 2773 5362 2811 5362 2811 5363 2773 5363 2775 5363 2811 5364 2775 5364 2813 5364 2813 5365 2775 5365 2778 5365 2813 5366 2778 5366 2815 5366 2815 5367 2778 5367 2781 5367 2815 5368 2781 5368 2817 5368 2817 5369 2781 5369 2784 5369 2817 5370 2784 5370 2819 5370 2819 5371 2784 5371 2786 5371 2819 5372 2786 5372 2821 5372 2821 5373 2786 5373 2789 5373 2821 5374 2789 5374 2823 5374 2823 5375 2789 5375 2792 5375 2823 5376 2792 5376 2825 5376 2825 5377 2792 5377 2794 5377 2825 5378 2794 5378 2827 5378 2827 5379 2794 5379 2796 5379 2827 5380 2796 5380 2829 5380 2829 5381 2796 5381 2795 5381 2829 5382 2795 5382 2828 5382 2828 5383 2795 5383 2793 5383 2807 5384 2829 5384 2806 5384 2806 5385 2829 5385 2828 5385 2807 5386 2809 5386 2829 5386 2829 5387 2809 5387 2825 5387 2829 5388 2825 5388 2827 5388 2828 5389 2826 5389 2806 5389 2806 5390 2826 5390 2810 5390 2806 5391 2810 5391 2808 5391 2809 5392 2811 5392 2825 5392 2825 5393 2811 5393 2813 5393 2825 5394 2813 5394 2815 5394 2826 5395 2824 5395 2810 5395 2810 5396 2824 5396 2822 5396 2810 5397 2822 5397 2820 5397 2823 5398 2825 5398 2821 5398 2821 5399 2825 5399 2815 5399 2821 5400 2815 5400 2819 5400 2819 5401 2815 5401 2817 5401 2812 5402 2810 5402 2814 5402 2814 5403 2810 5403 2820 5403 2814 5404 2820 5404 2816 5404 2816 5405 2820 5405 2818 5405 2849 5406 2983 5406 2980 5406 2849 5407 2980 5407 2846 5407 2846 5408 2980 5408 2977 5408 2846 5409 2977 5409 2842 5409 2842 5410 2977 5410 2975 5410 2842 5411 2975 5411 2838 5411 2838 5412 2975 5412 2972 5412 2838 5413 2972 5413 2836 5413 2839 5414 2976 5414 2978 5414 2839 5415 2978 5415 2843 5415 2843 5416 2978 5416 2981 5416 2843 5417 2981 5417 2847 5417 2847 5418 2981 5418 2984 5418 2847 5419 2984 5419 2850 5419 2850 5420 2984 5420 2988 5420 2850 5421 2988 5421 2854 5421 2854 5422 2988 5422 2990 5422 2854 5423 2990 5423 2862 5423 2862 5424 2990 5424 2994 5424 2862 5425 2994 5425 2868 5425 2868 5426 2994 5426 2997 5426 2868 5427 2997 5427 2873 5427 2873 5428 2997 5428 3000 5428 2873 5429 3000 5429 2877 5429 2877 5430 3000 5430 3002 5430 2877 5431 3002 5431 2882 5431 2882 5432 3002 5432 3005 5432 2882 5433 3005 5433 2885 5433 2885 5434 3005 5434 3004 5434 2885 5435 3004 5435 2884 5435 2884 5436 3004 5436 3001 5436 2884 5437 3001 5437 2881 5437 2881 5438 3001 5438 2999 5438 2881 5439 2999 5439 2876 5439 2876 5440 2999 5440 2996 5440 2876 5441 2996 5441 2872 5441 2872 5442 2996 5442 2993 5442 2872 5443 2993 5443 2867 5443 2867 5444 2993 5444 2989 5444 2867 5445 2989 5445 2861 5445 3004 5446 3011 5446 3001 5446 3001 5447 3011 5447 3009 5447 3001 5448 3009 5448 2999 5448 2999 5449 3009 5449 3007 5449 2999 5450 3007 5450 2996 5450 2996 5451 3007 5451 3003 5451 2996 5452 3003 5452 2993 5452 2993 5453 3003 5453 2995 5453 2993 5454 2995 5454 2989 5454 2989 5455 2995 5455 2991 5455 2989 5456 2991 5456 2987 5456 2987 5457 2991 5457 2985 5457 2987 5458 2985 5458 2983 5458 2983 5459 2985 5459 2979 5459 2983 5460 2979 5460 2980 5460 2980 5461 2979 5461 2971 5461 2980 5462 2971 5462 2977 5462 2977 5463 2971 5463 2969 5463 2977 5464 2969 5464 2975 5464 2975 5465 2969 5465 2967 5465 2975 5466 2967 5466 2972 5466 2972 5467 2967 5467 2965 5467 2972 5468 2965 5468 2973 5468 2965 5469 2964 5469 2973 5469 2973 5470 2964 5470 2966 5470 2973 5471 2966 5471 2976 5471 2976 5472 2966 5472 2968 5472 2976 5473 2968 5473 2978 5473 2978 5474 2968 5474 2970 5474 2978 5475 2970 5475 2981 5475 2981 5476 2970 5476 2974 5476 2981 5477 2974 5477 2984 5477 2984 5478 2974 5478 2982 5478 2984 5479 2982 5479 2988 5479 2988 5480 2982 5480 2986 5480 2988 5481 2986 5481 2990 5481 2990 5482 2986 5482 2992 5482 2990 5483 2992 5483 2994 5483 2994 5484 2992 5484 2998 5484 2994 5485 2998 5485 2997 5485 2997 5486 2998 5486 3006 5486 2997 5487 3006 5487 3000 5487 3000 5488 3006 5488 3008 5488 3000 5489 3008 5489 3002 5489 3002 5490 3008 5490 3010 5490 3002 5491 3010 5491 3005 5491 3005 5492 3010 5492 3012 5492 3005 5493 3012 5493 3004 5493 3004 5494 3012 5494 3013 5494 3004 5495 3013 5495 3011 5495 2943 5496 2992 5496 2939 5496 2939 5497 2992 5497 2986 5497 2939 5498 2986 5498 2935 5498 2935 5499 2986 5499 2982 5499 2935 5500 2982 5500 2932 5500 2932 5501 2982 5501 2974 5501 2932 5502 2974 5502 2928 5502 2928 5503 2974 5503 2970 5503 2928 5504 2970 5504 2924 5504 2924 5505 2970 5505 2968 5505 2924 5506 2968 5506 2920 5506 2920 5507 2968 5507 2966 5507 2920 5508 2966 5508 2918 5508 2918 5509 2966 5509 2964 5509 2918 5510 2964 5510 2915 5510 2915 5511 2964 5511 2965 5511 2915 5512 2965 5512 2917 5512 2917 5513 2965 5513 2967 5513 2917 5514 2967 5514 2919 5514 2919 5515 2967 5515 2969 5515 2919 5516 2969 5516 2923 5516 2923 5517 2969 5517 2971 5517 2923 5518 2971 5518 2927 5518 2927 5519 2971 5519 2979 5519 2927 5520 2979 5520 2930 5520 2930 5521 2979 5521 2985 5521 2930 5522 2985 5522 2934 5522 2934 5523 2985 5523 2991 5523 2934 5524 2991 5524 2938 5524 2938 5525 2991 5525 2995 5525 2938 5526 2995 5526 2941 5526 2941 5527 2995 5527 3003 5527 2941 5528 3003 5528 2945 5528 2945 5529 3003 5529 3007 5529 2945 5530 3007 5530 2949 5530 2949 5531 3007 5531 3009 5531 2949 5532 3009 5532 2953 5532 2953 5533 3009 5533 3011 5533 2953 5534 3011 5534 2955 5534 2955 5535 3011 5535 3013 5535 2955 5536 3013 5536 2958 5536 2958 5537 3013 5537 3012 5537 2958 5538 3012 5538 2956 5538 2956 5539 3012 5539 3010 5539 2956 5540 3010 5540 2954 5540 2954 5541 3010 5541 3008 5541 2954 5542 3008 5542 2950 5542 2950 5543 3008 5543 3006 5543 2950 5544 3006 5544 2946 5544 2946 5545 3006 5545 2998 5545 2946 5546 2998 5546 2943 5546 2943 5547 2998 5547 2992 5547 2958 5548 2962 5548 2955 5548 2955 5549 2962 5549 2960 5549 2955 5550 2960 5550 2953 5550 2953 5551 2960 5551 2957 5551 2953 5552 2957 5552 2949 5552 2949 5553 2957 5553 2951 5553 2949 5554 2951 5554 2945 5554 2945 5555 2951 5555 2947 5555 2945 5556 2947 5556 2941 5556 2941 5557 2947 5557 2942 5557 2941 5558 2942 5558 2938 5558 2938 5559 2942 5559 2937 5559 2938 5560 2937 5560 2934 5560 2934 5561 2937 5561 2933 5561 2934 5562 2933 5562 2930 5562 2930 5563 2933 5563 2929 5563 2930 5564 2929 5564 2927 5564 2927 5565 2929 5565 2925 5565 2927 5566 2925 5566 2923 5566 2923 5567 2925 5567 2921 5567 2923 5568 2921 5568 2919 5568 2919 5569 2921 5569 2914 5569 2919 5570 2914 5570 2917 5570 2917 5571 2914 5571 2912 5571 2917 5572 2912 5572 2915 5572 2912 5573 2910 5573 2915 5573 2915 5574 2910 5574 2911 5574 2915 5575 2911 5575 2918 5575 2918 5576 2911 5576 2913 5576 2918 5577 2913 5577 2920 5577 2920 5578 2913 5578 2916 5578 2920 5579 2916 5579 2924 5579 2924 5580 2916 5580 2922 5580 2924 5581 2922 5581 2928 5581 2928 5582 2922 5582 2926 5582 2928 5583 2926 5583 2932 5583 2932 5584 2926 5584 2931 5584 2932 5585 2931 5585 2935 5585 2935 5586 2931 5586 2936 5586 2935 5587 2936 5587 2939 5587 2939 5588 2936 5588 2940 5588 2939 5589 2940 5589 2943 5589 2943 5590 2940 5590 2944 5590 2943 5591 2944 5591 2946 5591 2946 5592 2944 5592 2948 5592 2946 5593 2948 5593 2950 5593 2950 5594 2948 5594 2952 5594 2950 5595 2952 5595 2954 5595 2954 5596 2952 5596 2959 5596 2954 5597 2959 5597 2956 5597 2956 5598 2959 5598 2961 5598 2956 5599 2961 5599 2958 5599 2958 5600 2961 5600 2963 5600 2958 5601 2963 5601 2962 5601 2856 5602 2910 5602 2912 5602 2856 5603 2912 5603 2858 5603 2858 5604 2912 5604 2914 5604 2858 5605 2914 5605 2864 5605 2864 5606 2914 5606 2921 5606 2864 5607 2921 5607 2870 5607 2870 5608 2921 5608 2925 5608 2870 5609 2925 5609 2878 5609 2878 5610 2925 5610 2929 5610 2878 5611 2929 5611 2892 5611 2896 5612 2937 5612 2942 5612 2896 5613 2942 5613 2898 5613 2898 5614 2942 5614 2947 5614 2898 5615 2947 5615 2900 5615 2900 5616 2947 5616 2951 5616 2900 5617 2951 5617 2902 5617 2902 5618 2951 5618 2957 5618 2902 5619 2957 5619 2904 5619 2904 5620 2957 5620 2960 5620 2904 5621 2960 5621 2906 5621 2906 5622 2960 5622 2962 5622 2906 5623 2962 5623 2908 5623 2908 5624 2962 5624 2963 5624 2908 5625 2963 5625 2909 5625 2909 5626 2963 5626 2961 5626 2909 5627 2961 5627 2907 5627 2907 5628 2961 5628 2959 5628 2907 5629 2959 5629 2905 5629 2905 5630 2959 5630 2952 5630 2905 5631 2952 5631 2903 5631 2903 5632 2952 5632 2948 5632 2903 5633 2948 5633 2901 5633 2901 5634 2948 5634 2944 5634 2901 5635 2944 5635 2899 5635 2899 5636 2944 5636 2940 5636 2899 5637 2940 5637 2897 5637 2897 5638 2940 5638 2936 5638 2897 5639 2936 5639 2895 5639 2895 5640 2936 5640 2931 5640 2895 5641 2931 5641 2893 5641 2893 5642 2931 5642 2926 5642 2893 5643 2926 5643 2883 5643 2883 5644 2926 5644 2922 5644 2883 5645 2922 5645 2871 5645 2871 5646 2922 5646 2916 5646 2871 5647 2916 5647 2865 5647 2865 5648 2916 5648 2913 5648 2865 5649 2913 5649 2859 5649 2899 5650 2869 5650 2901 5650 2901 5651 2869 5651 2875 5651 2901 5652 2875 5652 2903 5652 2903 5653 2875 5653 2880 5653 2903 5654 2880 5654 2905 5654 2905 5655 2880 5655 2887 5655 2905 5656 2887 5656 2907 5656 2907 5657 2887 5657 2889 5657 2907 5658 2889 5658 2909 5658 2909 5659 2889 5659 2891 5659 2909 5660 2891 5660 2908 5660 2908 5661 2891 5661 2890 5661 2908 5662 2890 5662 2906 5662 2906 5663 2890 5663 2888 5663 2906 5664 2888 5664 2904 5664 2904 5665 2888 5665 2886 5665 2904 5666 2886 5666 2902 5666 2902 5667 2886 5667 2879 5667 2902 5668 2879 5668 2900 5668 2900 5669 2879 5669 2874 5669 2900 5670 2874 5670 2898 5670 2898 5671 2874 5671 2866 5671 2898 5672 2866 5672 2896 5672 2896 5673 2866 5673 2860 5673 2896 5674 2860 5674 2894 5674 2894 5675 2860 5675 2852 5675 2894 5676 2852 5676 2892 5676 2892 5677 2852 5677 2848 5677 2892 5678 2848 5678 2878 5678 2878 5679 2848 5679 2844 5679 2878 5680 2844 5680 2870 5680 2870 5681 2844 5681 2840 5681 2870 5682 2840 5682 2864 5682 2864 5683 2840 5683 2834 5683 2864 5684 2834 5684 2858 5684 2858 5685 2834 5685 2832 5685 2858 5686 2832 5686 2856 5686 2856 5687 2832 5687 2830 5687 2856 5688 2830 5688 2857 5688 2857 5689 2830 5689 2831 5689 2857 5690 2831 5690 2859 5690 2859 5691 2831 5691 2833 5691 2859 5692 2833 5692 2865 5692 2865 5693 2833 5693 2835 5693 2865 5694 2835 5694 2871 5694 2871 5695 2835 5695 2841 5695 2871 5696 2841 5696 2883 5696 2883 5697 2841 5697 2845 5697 2883 5698 2845 5698 2893 5698 2893 5699 2845 5699 2851 5699 2893 5700 2851 5700 2895 5700 2895 5701 2851 5701 2855 5701 2895 5702 2855 5702 2897 5702 2897 5703 2855 5703 2863 5703 2897 5704 2863 5704 2899 5704 2899 5705 2863 5705 2869 5705 2847 5706 2841 5706 2843 5706 2843 5707 2841 5707 2835 5707 2843 5708 2835 5708 2839 5708 2839 5709 2835 5709 2833 5709 2839 5710 2833 5710 2837 5710 2837 5711 2833 5711 2831 5711 2837 5712 2831 5712 2836 5712 2836 5713 2831 5713 2830 5713 2836 5714 2830 5714 2838 5714 2838 5715 2830 5715 2832 5715 2838 5716 2832 5716 2842 5716 2877 5717 2880 5717 2873 5717 2873 5718 2880 5718 2875 5718 2873 5719 2875 5719 2868 5719 2868 5720 2875 5720 2869 5720 2868 5721 2869 5721 2862 5721 2862 5722 2869 5722 2863 5722 2862 5723 2863 5723 2854 5723 2854 5724 2863 5724 2855 5724 2854 5725 2855 5725 2850 5725 2850 5726 2855 5726 2851 5726 2850 5727 2851 5727 2847 5727 2847 5728 2851 5728 2845 5728 2847 5729 2845 5729 2841 5729 2867 5730 2874 5730 2872 5730 2872 5731 2874 5731 2879 5731 2872 5732 2879 5732 2876 5732 2876 5733 2879 5733 2886 5733 2876 5734 2886 5734 2881 5734 2881 5735 2886 5735 2888 5735 2881 5736 2888 5736 2884 5736 2884 5737 2888 5737 2890 5737 2884 5738 2890 5738 2885 5738 2885 5739 2890 5739 2891 5739 2885 5740 2891 5740 2882 5740 2882 5741 2891 5741 2889 5741 2882 5742 2889 5742 2877 5742 2877 5743 2889 5743 2887 5743 2877 5744 2887 5744 2880 5744 2832 5745 2834 5745 2842 5745 2842 5746 2834 5746 2840 5746 2842 5747 2840 5747 2846 5747 2846 5748 2840 5748 2844 5748 2846 5749 2844 5749 2849 5749 2849 5750 2844 5750 2848 5750 2849 5751 2848 5751 2853 5751 2853 5752 2848 5752 2852 5752 2853 5753 2852 5753 2861 5753 2861 5754 2852 5754 2860 5754 2861 5755 2860 5755 2867 5755 2867 5756 2860 5756 2866 5756 2867 5757 2866 5757 2874 5757 3067 5758 3063 5758 3071 5758 3071 5759 3063 5759 3065 5759 3071 5760 3065 5760 3073 5760 3073 5761 3065 5761 3070 5761 3073 5762 3070 5762 3077 5762 3077 5763 3070 5763 3075 5763 3077 5764 3075 5764 3081 5764 3081 5765 3075 5765 3079 5765 3081 5766 3079 5766 3085 5766 3085 5767 3079 5767 3084 5767 3085 5768 3084 5768 3088 5768 3088 5769 3084 5769 3089 5769 3088 5770 3089 5770 3091 5770 3091 5771 3089 5771 3093 5771 3091 5772 3093 5772 3095 5772 3095 5773 3093 5773 3097 5773 3095 5774 3097 5774 3099 5774 3099 5775 3097 5775 3103 5775 3099 5776 3103 5776 3102 5776 3102 5777 3103 5777 3107 5777 3102 5778 3107 5778 3105 5778 3105 5779 3107 5779 3109 5779 3105 5780 3109 5780 3104 5780 3104 5781 3109 5781 3108 5781 3104 5782 3108 5782 3100 5782 3100 5783 3108 5783 3106 5783 3100 5784 3106 5784 3098 5784 3098 5785 3106 5785 3101 5785 3098 5786 3101 5786 3094 5786 3094 5787 3101 5787 3096 5787 3094 5788 3096 5788 3090 5788 3090 5789 3096 5789 3092 5789 3090 5790 3092 5790 3086 5790 3086 5791 3092 5791 3087 5791 3086 5792 3087 5792 3083 5792 3083 5793 3087 5793 3082 5793 3083 5794 3082 5794 3080 5794 3080 5795 3082 5795 3078 5795 3080 5796 3078 5796 3076 5796 3076 5797 3078 5797 3074 5797 3076 5798 3074 5798 3072 5798 3072 5799 3074 5799 3068 5799 3072 5800 3068 5800 3069 5800 3069 5801 3068 5801 3064 5801 3069 5802 3064 5802 3066 5802 3066 5803 3064 5803 3062 5803 3066 5804 3062 5804 3067 5804 3067 5805 3062 5805 3063 5805 3057 5806 3061 5806 3054 5806 3054 5807 3061 5807 3059 5807 3054 5808 3059 5808 3051 5808 3051 5809 3059 5809 3055 5809 3051 5810 3055 5810 3047 5810 3047 5811 3055 5811 3049 5811 3047 5812 3049 5812 3043 5812 3043 5813 3049 5813 3045 5813 3043 5814 3045 5814 3040 5814 3040 5815 3045 5815 3041 5815 3040 5816 3041 5816 3037 5816 3037 5817 3041 5817 3036 5817 3037 5818 3036 5818 3033 5818 3033 5819 3036 5819 3031 5819 3033 5820 3031 5820 3029 5820 3029 5821 3031 5821 3027 5821 3029 5822 3027 5822 3025 5822 3025 5823 3027 5823 3022 5823 3025 5824 3022 5824 3023 5824 3023 5825 3022 5825 3017 5825 3023 5826 3017 5826 3019 5826 3019 5827 3017 5827 3015 5827 3019 5828 3015 5828 3018 5828 3018 5829 3015 5829 3014 5829 3018 5830 3014 5830 3021 5830 3021 5831 3014 5831 3016 5831 3021 5832 3016 5832 3024 5832 3024 5833 3016 5833 3020 5833 3024 5834 3020 5834 3028 5834 3028 5835 3020 5835 3026 5835 3028 5836 3026 5836 3032 5836 3032 5837 3026 5837 3030 5837 3032 5838 3030 5838 3035 5838 3035 5839 3030 5839 3034 5839 3035 5840 3034 5840 3038 5840 3038 5841 3034 5841 3039 5841 3038 5842 3039 5842 3042 5842 3042 5843 3039 5843 3044 5843 3042 5844 3044 5844 3046 5844 3046 5845 3044 5845 3048 5845 3046 5846 3048 5846 3050 5846 3050 5847 3048 5847 3053 5847 3050 5848 3053 5848 3052 5848 3052 5849 3053 5849 3058 5849 3052 5850 3058 5850 3056 5850 3056 5851 3058 5851 3060 5851 3056 5852 3060 5852 3057 5852 3057 5853 3060 5853 3061 5853 3065 5854 3017 5854 3022 5854 3065 5855 3022 5855 3070 5855 3070 5856 3022 5856 3027 5856 3070 5857 3027 5857 3075 5857 3075 5858 3027 5858 3031 5858 3075 5859 3031 5859 3079 5859 3079 5860 3031 5860 3036 5860 3079 5861 3036 5861 3084 5861 3084 5862 3036 5862 3041 5862 3084 5863 3041 5863 3089 5863 3089 5864 3041 5864 3045 5864 3089 5865 3045 5865 3093 5865 3093 5866 3045 5866 3049 5866 3093 5867 3049 5867 3097 5867 3097 5868 3049 5868 3055 5868 3097 5869 3055 5869 3103 5869 3103 5870 3055 5870 3059 5870 3103 5871 3059 5871 3107 5871 3107 5872 3059 5872 3061 5872 3107 5873 3061 5873 3109 5873 3109 5874 3061 5874 3060 5874 3109 5875 3060 5875 3108 5875 3108 5876 3060 5876 3058 5876 3108 5877 3058 5877 3106 5877 3106 5878 3058 5878 3053 5878 3106 5879 3053 5879 3101 5879 3101 5880 3053 5880 3048 5880 3101 5881 3048 5881 3096 5881 3096 5882 3048 5882 3044 5882 3096 5883 3044 5883 3092 5883 3092 5884 3044 5884 3039 5884 3092 5885 3039 5885 3087 5885 3087 5886 3039 5886 3034 5886 3087 5887 3034 5887 3082 5887 3082 5888 3034 5888 3030 5888 3082 5889 3030 5889 3078 5889 3078 5890 3030 5890 3026 5890 3078 5891 3026 5891 3074 5891 3074 5892 3026 5892 3020 5892 3074 5893 3020 5893 3068 5893 3068 5894 3020 5894 3016 5894 3068 5895 3016 5895 3064 5895 3064 5896 3016 5896 3014 5896 3064 5897 3014 5897 3062 5897 3067 5898 3071 5898 3023 5898 3023 5899 3071 5899 3073 5899 3023 5900 3073 5900 3025 5900 3025 5901 3073 5901 3077 5901 3025 5902 3077 5902 3029 5902 3029 5903 3077 5903 3081 5903 3029 5904 3081 5904 3033 5904 3033 5905 3081 5905 3085 5905 3033 5906 3085 5906 3037 5906 3037 5907 3085 5907 3088 5907 3037 5908 3088 5908 3040 5908 3040 5909 3088 5909 3091 5909 3040 5910 3091 5910 3043 5910 3043 5911 3091 5911 3095 5911 3043 5912 3095 5912 3047 5912 3047 5913 3095 5913 3099 5913 3047 5914 3099 5914 3051 5914 3051 5915 3099 5915 3102 5915 3051 5916 3102 5916 3054 5916 3054 5917 3102 5917 3105 5917 3054 5918 3105 5918 3057 5918 3057 5919 3105 5919 3104 5919 3057 5920 3104 5920 3056 5920 3056 5921 3104 5921 3100 5921 3056 5922 3100 5922 3052 5922 3052 5923 3100 5923 3098 5923 3052 5924 3098 5924 3050 5924 3050 5925 3098 5925 3094 5925 3050 5926 3094 5926 3046 5926 3046 5927 3094 5927 3090 5927 3046 5928 3090 5928 3042 5928 3042 5929 3090 5929 3086 5929 3042 5930 3086 5930 3038 5930 3038 5931 3086 5931 3083 5931 3038 5932 3083 5932 3035 5932 3035 5933 3083 5933 3080 5933 3035 5934 3080 5934 3032 5934 3032 5935 3080 5935 3076 5935 3032 5936 3076 5936 3028 5936 3028 5937 3076 5937 3072 5937 3028 5938 3072 5938 3024 5938 3024 5939 3072 5939 3069 5939 3024 5940 3069 5940 3021 5940 3021 5941 3069 5941 3066 5941 3021 5942 3066 5942 3018 5942 3318 5943 3308 5943 3321 5943 3321 5944 3308 5944 3317 5944 3321 5945 3317 5945 3323 5945 3323 5946 3317 5946 3325 5946 3323 5947 3325 5947 3326 5947 3326 5948 3325 5948 3333 5948 3326 5949 3333 5949 3329 5949 3329 5950 3333 5950 3339 5950 3329 5951 3339 5951 3331 5951 3331 5952 3339 5952 3341 5952 3331 5953 3341 5953 3334 5953 3334 5954 3341 5954 3343 5954 3334 5955 3343 5955 3336 5955 3336 5956 3343 5956 3345 5956 3336 5957 3345 5957 3337 5957 3337 5958 3345 5958 3346 5958 3337 5959 3346 5959 3335 5959 3335 5960 3346 5960 3344 5960 3335 5961 3344 5961 3332 5961 3332 5962 3344 5962 3342 5962 3332 5963 3342 5963 3330 5963 3330 5964 3342 5964 3340 5964 3330 5965 3340 5965 3327 5965 3327 5966 3340 5966 3338 5966 3327 5967 3338 5967 3324 5967 3324 5968 3338 5968 3328 5968 3324 5969 3328 5969 3322 5969 3322 5970 3328 5970 3320 5970 3322 5971 3320 5971 3319 5971 3319 5972 3320 5972 3312 5972 3319 5973 3312 5973 3316 5973 3316 5974 3312 5974 3307 5974 3316 5975 3307 5975 3314 5975 3314 5976 3307 5976 3305 5976 3314 5977 3305 5977 3311 5977 3311 5978 3305 5978 3303 5978 3311 5979 3303 5979 3309 5979 3310 5980 3302 5980 3313 5980 3313 5981 3302 5981 3304 5981 3313 5982 3304 5982 3315 5982 3315 5983 3304 5983 3306 5983 3315 5984 3306 5984 3318 5984 3318 5985 3306 5985 3308 5985 3266 5986 3257 5986 3269 5986 3269 5987 3257 5987 3259 5987 3269 5988 3259 5988 3271 5988 3271 5989 3259 5989 3261 5989 3271 5990 3261 5990 3274 5990 3274 5991 3261 5991 3267 5991 3274 5992 3267 5992 3277 5992 3277 5993 3267 5993 3275 5993 3277 5994 3275 5994 3279 5994 3279 5995 3275 5995 3283 5995 3279 5996 3283 5996 3282 5996 3282 5997 3283 5997 3293 5997 3282 5998 3293 5998 3285 5998 3285 5999 3293 5999 3295 5999 3285 6000 3295 6000 3287 6000 3287 6001 3295 6001 3297 6001 3287 6002 3297 6002 3290 6002 3290 6003 3297 6003 3299 6003 3290 6004 3299 6004 3292 6004 3292 6005 3299 6005 3301 6005 3292 6006 3301 6006 3291 6006 3291 6007 3301 6007 3300 6007 3291 6008 3300 6008 3289 6008 3289 6009 3300 6009 3298 6009 3289 6010 3298 6010 3286 6010 3286 6011 3298 6011 3296 6011 3286 6012 3296 6012 3284 6012 3284 6013 3296 6013 3294 6013 3284 6014 3294 6014 3281 6014 3281 6015 3294 6015 3288 6015 3281 6016 3288 6016 3278 6016 3278 6017 3288 6017 3280 6017 3278 6018 3280 6018 3276 6018 3276 6019 3280 6019 3272 6019 3276 6020 3272 6020 3273 6020 3273 6021 3272 6021 3262 6021 3273 6022 3262 6022 3270 6022 3270 6023 3262 6023 3260 6023 3270 6024 3260 6024 3268 6024 3268 6025 3260 6025 3258 6025 3268 6026 3258 6026 3265 6026 3265 6027 3258 6027 3256 6027 3265 6028 3256 6028 3263 6028 3263 6029 3256 6029 3254 6029 3263 6030 3254 6030 3264 6030 3264 6031 3254 6031 3255 6031 3264 6032 3255 6032 3266 6032 3266 6033 3255 6033 3257 6033 3255 6034 3303 6034 3257 6034 3257 6035 3303 6035 3305 6035 3257 6036 3305 6036 3259 6036 3259 6037 3305 6037 3307 6037 3259 6038 3307 6038 3261 6038 3261 6039 3307 6039 3312 6039 3261 6040 3312 6040 3267 6040 3267 6041 3312 6041 3320 6041 3267 6042 3320 6042 3275 6042 3275 6043 3320 6043 3328 6043 3275 6044 3328 6044 3283 6044 3283 6045 3328 6045 3338 6045 3283 6046 3338 6046 3293 6046 3293 6047 3338 6047 3340 6047 3293 6048 3340 6048 3295 6048 3295 6049 3340 6049 3342 6049 3295 6050 3342 6050 3297 6050 3297 6051 3342 6051 3344 6051 3297 6052 3344 6052 3299 6052 3299 6053 3344 6053 3346 6053 3299 6054 3346 6054 3301 6054 3301 6055 3346 6055 3345 6055 3301 6056 3345 6056 3300 6056 3300 6057 3345 6057 3343 6057 3300 6058 3343 6058 3298 6058 3298 6059 3343 6059 3341 6059 3298 6060 3341 6060 3296 6060 3296 6061 3341 6061 3339 6061 3296 6062 3339 6062 3294 6062 3294 6063 3339 6063 3333 6063 3294 6064 3333 6064 3288 6064 3288 6065 3333 6065 3325 6065 3288 6066 3325 6066 3280 6066 3280 6067 3325 6067 3317 6067 3280 6068 3317 6068 3272 6068 3272 6069 3317 6069 3308 6069 3272 6070 3308 6070 3262 6070 3262 6071 3308 6071 3306 6071 3262 6072 3306 6072 3260 6072 3260 6073 3306 6073 3304 6073 3260 6074 3304 6074 3258 6074 3258 6075 3304 6075 3302 6075 3258 6076 3302 6076 3256 6076 3231 6077 3266 6077 3233 6077 3233 6078 3266 6078 3269 6078 3233 6079 3269 6079 3235 6079 3235 6080 3269 6080 3271 6080 3235 6081 3271 6081 3237 6081 3237 6082 3271 6082 3274 6082 3237 6083 3274 6083 3239 6083 3239 6084 3274 6084 3277 6084 3239 6085 3277 6085 3241 6085 3241 6086 3277 6086 3279 6086 3241 6087 3279 6087 3243 6087 3243 6088 3279 6088 3282 6088 3243 6089 3282 6089 3245 6089 3245 6090 3282 6090 3285 6090 3245 6091 3285 6091 3247 6091 3247 6092 3285 6092 3287 6092 3247 6093 3287 6093 3249 6093 3249 6094 3287 6094 3290 6094 3249 6095 3290 6095 3251 6095 3251 6096 3290 6096 3292 6096 3251 6097 3292 6097 3253 6097 3253 6098 3292 6098 3291 6098 3253 6099 3291 6099 3252 6099 3252 6100 3291 6100 3289 6100 3252 6101 3289 6101 3250 6101 3250 6102 3289 6102 3286 6102 3250 6103 3286 6103 3248 6103 3248 6104 3286 6104 3284 6104 3248 6105 3284 6105 3246 6105 3246 6106 3284 6106 3281 6106 3246 6107 3281 6107 3244 6107 3244 6108 3281 6108 3278 6108 3244 6109 3278 6109 3242 6109 3242 6110 3278 6110 3276 6110 3242 6111 3276 6111 3240 6111 3240 6112 3276 6112 3273 6112 3240 6113 3273 6113 3238 6113 3238 6114 3273 6114 3270 6114 3238 6115 3270 6115 3236 6115 3236 6116 3270 6116 3268 6116 3236 6117 3268 6117 3234 6117 3234 6118 3268 6118 3265 6118 3234 6119 3265 6119 3232 6119 3232 6120 3265 6120 3263 6120 3232 6121 3263 6121 3230 6121 3230 6122 3263 6122 3264 6122 3230 6123 3264 6123 3231 6123 3231 6124 3264 6124 3266 6124 3203 6125 3168 6125 3201 6125 3201 6126 3168 6126 3165 6126 3201 6127 3165 6127 3199 6127 3199 6128 3165 6128 3163 6128 3199 6129 3163 6129 3197 6129 3197 6130 3163 6130 3160 6130 3197 6131 3160 6131 3195 6131 3195 6132 3160 6132 3157 6132 3195 6133 3157 6133 3193 6133 3193 6134 3157 6134 3154 6134 3193 6135 3154 6135 3191 6135 3191 6136 3154 6136 3151 6136 3191 6137 3151 6137 3189 6137 3189 6138 3151 6138 3148 6138 3189 6139 3148 6139 3187 6139 3187 6140 3148 6140 3146 6140 3187 6141 3146 6141 3185 6141 3185 6142 3146 6142 3143 6142 3185 6143 3143 6143 3183 6143 3183 6144 3143 6144 3142 6144 3183 6145 3142 6145 3182 6145 3182 6146 3142 6146 3145 6146 3182 6147 3145 6147 3184 6147 3184 6148 3145 6148 3147 6148 3184 6149 3147 6149 3186 6149 3186 6150 3147 6150 3150 6150 3186 6151 3150 6151 3188 6151 3188 6152 3150 6152 3152 6152 3188 6153 3152 6153 3190 6153 3190 6154 3152 6154 3155 6154 3190 6155 3155 6155 3192 6155 3192 6156 3155 6156 3158 6156 3192 6157 3158 6157 3194 6157 3194 6158 3158 6158 3161 6158 3194 6159 3161 6159 3196 6159 3196 6160 3161 6160 3164 6160 3196 6161 3164 6161 3198 6161 3198 6162 3164 6162 3167 6162 3198 6163 3167 6163 3200 6163 3200 6164 3167 6164 3169 6164 3200 6165 3169 6165 3202 6165 3202 6166 3169 6166 3172 6166 3202 6167 3172 6167 3204 6167 3204 6168 3172 6168 3173 6168 3204 6169 3173 6169 3205 6169 3205 6170 3173 6170 3170 6170 3205 6171 3170 6171 3203 6171 3203 6172 3170 6172 3168 6172 3223 6173 3199 6173 3221 6173 3221 6174 3199 6174 3197 6174 3221 6175 3197 6175 3219 6175 3219 6176 3197 6176 3195 6176 3219 6177 3195 6177 3217 6177 3217 6178 3195 6178 3193 6178 3217 6179 3193 6179 3215 6179 3215 6180 3193 6180 3191 6180 3215 6181 3191 6181 3213 6181 3213 6182 3191 6182 3189 6182 3213 6183 3189 6183 3211 6183 3211 6184 3189 6184 3187 6184 3211 6185 3187 6185 3209 6185 3209 6186 3187 6186 3185 6186 3209 6187 3185 6187 3207 6187 3207 6188 3185 6188 3183 6188 3207 6189 3183 6189 3206 6189 3206 6190 3183 6190 3182 6190 3206 6191 3182 6191 3208 6191 3208 6192 3182 6192 3184 6192 3208 6193 3184 6193 3210 6193 3210 6194 3184 6194 3186 6194 3210 6195 3186 6195 3212 6195 3212 6196 3186 6196 3188 6196 3212 6197 3188 6197 3214 6197 3214 6198 3188 6198 3190 6198 3214 6199 3190 6199 3216 6199 3216 6200 3190 6200 3192 6200 3216 6201 3192 6201 3218 6201 3218 6202 3192 6202 3194 6202 3218 6203 3194 6203 3220 6203 3220 6204 3194 6204 3196 6204 3220 6205 3196 6205 3222 6205 3222 6206 3196 6206 3198 6206 3222 6207 3198 6207 3224 6207 3224 6208 3198 6208 3200 6208 3224 6209 3200 6209 3226 6209 3226 6210 3200 6210 3202 6210 3226 6211 3202 6211 3228 6211 3228 6212 3202 6212 3204 6212 3228 6213 3204 6213 3229 6213 3229 6214 3204 6214 3205 6214 3229 6215 3205 6215 3227 6215 3227 6216 3205 6216 3203 6216 3227 6217 3203 6217 3225 6217 3225 6218 3203 6218 3201 6218 3225 6219 3201 6219 3223 6219 3223 6220 3201 6220 3199 6220 3245 6221 3221 6221 3243 6221 3243 6222 3221 6222 3219 6222 3243 6223 3219 6223 3241 6223 3241 6224 3219 6224 3217 6224 3241 6225 3217 6225 3239 6225 3239 6226 3217 6226 3215 6226 3239 6227 3215 6227 3237 6227 3237 6228 3215 6228 3213 6228 3237 6229 3213 6229 3235 6229 3235 6230 3213 6230 3211 6230 3235 6231 3211 6231 3233 6231 3233 6232 3211 6232 3209 6232 3233 6233 3209 6233 3231 6233 3231 6234 3209 6234 3207 6234 3231 6235 3207 6235 3230 6235 3230 6236 3207 6236 3206 6236 3230 6237 3206 6237 3232 6237 3232 6238 3206 6238 3208 6238 3232 6239 3208 6239 3234 6239 3234 6240 3208 6240 3210 6240 3234 6241 3210 6241 3236 6241 3236 6242 3210 6242 3212 6242 3236 6243 3212 6243 3238 6243 3238 6244 3212 6244 3214 6244 3238 6245 3214 6245 3240 6245 3240 6246 3214 6246 3216 6246 3240 6247 3216 6247 3242 6247 3242 6248 3216 6248 3218 6248 3242 6249 3218 6249 3244 6249 3244 6250 3218 6250 3220 6250 3244 6251 3220 6251 3246 6251 3246 6252 3220 6252 3222 6252 3246 6253 3222 6253 3248 6253 3248 6254 3222 6254 3224 6254 3248 6255 3224 6255 3250 6255 3250 6256 3224 6256 3226 6256 3250 6257 3226 6257 3252 6257 3252 6258 3226 6258 3228 6258 3252 6259 3228 6259 3253 6259 3253 6260 3228 6260 3229 6260 3253 6261 3229 6261 3251 6261 3251 6262 3229 6262 3227 6262 3251 6263 3227 6263 3249 6263 3249 6264 3227 6264 3225 6264 3249 6265 3225 6265 3247 6265 3247 6266 3225 6266 3223 6266 3247 6267 3223 6267 3245 6267 3245 6268 3223 6268 3221 6268 3116 6269 3138 6269 3114 6269 3114 6270 3138 6270 3136 6270 3114 6271 3136 6271 3112 6271 3112 6272 3136 6272 3134 6272 3112 6273 3134 6273 3110 6273 3110 6274 3134 6274 3135 6274 3110 6275 3135 6275 3111 6275 3111 6276 3135 6276 3137 6276 3111 6277 3137 6277 3113 6277 3113 6278 3137 6278 3139 6278 3113 6279 3139 6279 3115 6279 3115 6280 3139 6280 3141 6280 3115 6281 3141 6281 3117 6281 3117 6282 3141 6282 3149 6282 3117 6283 3149 6283 3119 6283 3119 6284 3149 6284 3156 6284 3119 6285 3156 6285 3121 6285 3121 6286 3156 6286 3162 6286 3121 6287 3162 6287 3123 6287 3123 6288 3162 6288 3171 6288 3123 6289 3171 6289 3125 6289 3125 6290 3171 6290 3175 6290 3125 6291 3175 6291 3127 6291 3127 6292 3175 6292 3177 6292 3127 6293 3177 6293 3129 6293 3129 6294 3177 6294 3179 6294 3129 6295 3179 6295 3131 6295 3131 6296 3179 6296 3181 6296 3131 6297 3181 6297 3133 6297 3133 6298 3181 6298 3180 6298 3133 6299 3180 6299 3132 6299 3132 6300 3180 6300 3178 6300 3132 6301 3178 6301 3130 6301 3130 6302 3178 6302 3176 6302 3130 6303 3176 6303 3128 6303 3128 6304 3176 6304 3174 6304 3128 6305 3174 6305 3126 6305 3126 6306 3174 6306 3166 6306 3126 6307 3166 6307 3124 6307 3124 6308 3166 6308 3159 6308 3124 6309 3159 6309 3122 6309 3122 6310 3159 6310 3153 6310 3122 6311 3153 6311 3120 6311 3120 6312 3153 6312 3144 6312 3120 6313 3144 6313 3118 6313 3118 6314 3144 6314 3140 6314 3118 6315 3140 6315 3116 6315 3116 6316 3140 6316 3138 6316 3118 6317 3116 6317 3114 6317 3129 6318 3120 6318 3118 6318 3114 6319 3123 6319 3125 6319 3118 6320 3114 6320 3129 6320 3129 6321 3114 6321 3125 6321 3129 6322 3125 6322 3127 6322 3132 6323 3130 6323 3133 6323 3133 6324 3130 6324 3120 6324 3133 6325 3120 6325 3131 6325 3131 6326 3120 6326 3129 6326 3124 6327 3122 6327 3126 6327 3126 6328 3122 6328 3120 6328 3126 6329 3120 6329 3128 6329 3128 6330 3120 6330 3130 6330 3111 6331 3113 6331 3110 6331 3110 6332 3113 6332 3123 6332 3110 6333 3123 6333 3112 6333 3112 6334 3123 6334 3114 6334 3119 6335 3121 6335 3117 6335 3117 6336 3121 6336 3123 6336 3117 6337 3123 6337 3115 6337 3115 6338 3123 6338 3113 6338 3157 6339 3156 6339 3154 6339 3154 6340 3156 6340 3149 6340 3154 6341 3149 6341 3151 6341 3151 6342 3149 6342 3141 6342 3151 6343 3141 6343 3148 6343 3148 6344 3141 6344 3139 6344 3148 6345 3139 6345 3146 6345 3146 6346 3139 6346 3137 6346 3146 6347 3137 6347 3143 6347 3143 6348 3137 6348 3135 6348 3143 6349 3135 6349 3142 6349 3142 6350 3135 6350 3134 6350 3142 6351 3134 6351 3145 6351 3145 6352 3134 6352 3136 6352 3145 6353 3136 6353 3147 6353 3147 6354 3136 6354 3138 6354 3147 6355 3138 6355 3150 6355 3150 6356 3138 6356 3140 6356 3150 6357 3140 6357 3152 6357 3152 6358 3140 6358 3144 6358 3152 6359 3144 6359 3155 6359 3155 6360 3144 6360 3153 6360 3155 6361 3153 6361 3158 6361 3158 6362 3153 6362 3159 6362 3158 6363 3159 6363 3161 6363 3161 6364 3159 6364 3166 6364 3161 6365 3166 6365 3164 6365 3164 6366 3166 6366 3174 6366 3164 6367 3174 6367 3167 6367 3167 6368 3174 6368 3176 6368 3167 6369 3176 6369 3169 6369 3169 6370 3176 6370 3178 6370 3169 6371 3178 6371 3172 6371 3172 6372 3178 6372 3180 6372 3172 6373 3180 6373 3173 6373 3173 6374 3180 6374 3181 6374 3173 6375 3181 6375 3170 6375 3170 6376 3181 6376 3179 6376 3170 6377 3179 6377 3168 6377 3168 6378 3179 6378 3177 6378 3168 6379 3177 6379 3165 6379 3165 6380 3177 6380 3175 6380 3165 6381 3175 6381 3163 6381 3163 6382 3175 6382 3171 6382 3163 6383 3171 6383 3160 6383 3160 6384 3171 6384 3162 6384 3160 6385 3162 6385 3157 6385 3157 6386 3162 6386 3156 6386 3365 6387 3334 6387 3367 6387 3367 6388 3334 6388 3336 6388 3367 6389 3336 6389 3369 6389 3369 6390 3336 6390 3337 6390 3369 6391 3337 6391 3370 6391 3370 6392 3337 6392 3335 6392 3370 6393 3335 6393 3368 6393 3368 6394 3335 6394 3332 6394 3368 6395 3332 6395 3366 6395 3366 6396 3332 6396 3330 6396 3366 6397 3330 6397 3364 6397 3364 6398 3330 6398 3327 6398 3364 6399 3327 6399 3362 6399 3362 6400 3327 6400 3324 6400 3362 6401 3324 6401 3360 6401 3360 6402 3324 6402 3322 6402 3360 6403 3322 6403 3358 6403 3358 6404 3322 6404 3319 6404 3358 6405 3319 6405 3356 6405 3356 6406 3319 6406 3316 6406 3356 6407 3316 6407 3354 6407 3354 6408 3316 6408 3314 6408 3354 6409 3314 6409 3352 6409 3352 6410 3314 6410 3311 6410 3352 6411 3311 6411 3350 6411 3350 6412 3311 6412 3309 6412 3350 6413 3309 6413 3348 6413 3347 6414 3310 6414 3349 6414 3349 6415 3310 6415 3313 6415 3349 6416 3313 6416 3351 6416 3351 6417 3313 6417 3315 6417 3351 6418 3315 6418 3353 6418 3353 6419 3315 6419 3318 6419 3353 6420 3318 6420 3355 6420 3355 6421 3318 6421 3321 6421 3355 6422 3321 6422 3357 6422 3357 6423 3321 6423 3323 6423 3357 6424 3323 6424 3359 6424 3359 6425 3323 6425 3326 6425 3359 6426 3326 6426 3361 6426 3361 6427 3326 6427 3329 6427 3361 6428 3329 6428 3363 6428 3363 6429 3329 6429 3331 6429 3363 6430 3331 6430 3365 6430 3365 6431 3331 6431 3334 6431 3360 6432 3358 6432 3362 6432 3362 6433 3358 6433 3348 6433 3362 6434 3348 6434 3364 6434 3352 6435 3350 6435 3354 6435 3354 6436 3350 6436 3348 6436 3354 6437 3348 6437 3356 6437 3356 6438 3348 6438 3358 6438 3351 6439 3353 6439 3349 6439 3349 6440 3353 6440 3364 6440 3349 6441 3364 6441 3347 6441 3347 6442 3364 6442 3348 6442 3357 6443 3359 6443 3355 6443 3355 6444 3359 6444 3369 6444 3355 6445 3369 6445 3353 6445 3365 6446 3367 6446 3363 6446 3363 6447 3367 6447 3369 6447 3363 6448 3369 6448 3361 6448 3361 6449 3369 6449 3359 6449 3366 6450 3364 6450 3368 6450 3368 6451 3364 6451 3353 6451 3368 6452 3353 6452 3370 6452 3370 6453 3353 6453 3369 6453 3385 6454 3381 6454 3386 6454 3386 6455 3381 6455 3382 6455 3380 6456 3379 6456 3384 6456 3384 6457 3379 6457 3383 6457 2106 6458 2108 6459 2109 6460 2109 6461 2107 6462 2106 6463 1465 6464 1469 6465 1471 6466 1471 6467 1467 6468 1465 6469 1468 6470 1470 6471 1471 6472 1471 6473 1469 6474 1468 6475 1466 6476 1467 6477 1471 6478 1471 6479 1470 6480 1466 6481 1464 6482 1466 6483 1470 6484 1470 6485 1468 6486 1464 6487 1464 6488 1468 6489 1469 6490 1469 6491 1465 6492 1464 6493 1465 6494 1467 6495 1466 6496 1466 6497 1464 6498 1465 6499 1456 6500 1460 6501 1462 6502 1462 6503 1458 6504 1456 6505 1460 6506 1461 6507 1463 6508 1463 6509 1462 6510 1460 6511 1456 6512 1458 6513 1459 6514 1459 6515 1457 6516 1456 6517 1458 6518 1462 6519 1463 6520 1463 6521 1459 6522 1458 6523 1456 6524 1457 6525 1461 6526 1461 6527 1460 6528 1456 6529 1461 6530 1457 6531 1459 6532 1459 6533 1463 6534 1461 6535 1489 6536 1493 6537 1495 6538 1495 6539 1491 6540 1489 6541 1488 6542 1492 6543 1493 6544 1493 6545 1489 6546 1488 6547 1492 6548 1494 6549 1495 6550 1495 6551 1493 6552 1492 6553 1488 6554 1489 6555 1491 6556 1491 6557 1490 6558 1488 6559 1490 6560 1491 6561 1495 6562 1495 6563 1494 6564 1490 6565 1488 6566 1490 6567 1494 6568 1494 6569 1492 6570 1488 6571 1497 6572 1501 6573 1503 6574 1503 6575 1499 6576 1497 6577 1496 6578 1500 6579 1501 6580 1501 6581 1497 6582 1496 6583 1496 6584 1498 6585 1502 6586 1502 6587 1500 6588 1496 6589 1498 6590 1499 6591 1503 6592 1503 6593 1502 6594 1498 6595 1500 6596 1502 6597 1503 6598 1503 6599 1501 6600 1500 6601 1496 6602 1497 6603 1499 6604 1499 6605 1498 6606 1496 6607 1514 6608 1518 6609 1519 6610 1519 6611 1515 6612 1514 6613 1512 6614 1516 6615 1518 6616 1518 6617 1514 6618 1512 6619 1513 6620 1515 6621 1519 6622 1519 6623 1517 6624 1513 6625 1516 6626 1517 6627 1519 6628 1519 6629 1518 6630 1516 6631 1512 6632 1514 6633 1515 6634 1515 6635 1513 6636 1512 6637 1512 6638 1513 6639 1517 6640 1517 6641 1516 6642 1512 6643 1504 6644 1508 6645 1510 6646 1510 6647 1506 6648 1504 6649 1504 6650 1505 6651 1509 6652 1509 6653 1508 6654 1504 6655 1505 6656 1507 6657 1511 6658 1511 6659 1509 6660 1505 6661 1506 6662 1510 6663 1511 6664 1511 6665 1507 6666 1506 6667 1504 6668 1506 6669 1507 6670 1507 6671 1505 6672 1504 6673 1508 6674 1509 6675 1511 6676 1511 6677 1510 6678 1508 6679 3371 6680 3373 6681 3374 6682 3374 6683 3372 6684 3371 6685 3373 6686 3375 6687 3376 6688 3376 6689 3374 6690 3373 6691 3376 6692 3382 6692 3381 6692 3381 6692 3375 6692 3376 6692 3371 6693 3372 6694 3378 6695 3378 6696 3377 6697 3371 6698 3377 6699 3379 6699 3380 6699 3380 6699 3378 6699 3377 6699 3383 6700 3385 6700 3386 6700 3386 6700 3384 6700 3383 6700 3380 6701 3384 6701 3387 6701 3386 6702 3382 6702 3388 6702 3388 6702 3389 6702 3386 6702 3372 6703 3374 6704 3391 6705 3391 6706 3390 6707 3372 6708 3374 6709 3376 6710 3392 6711 3392 6712 3391 6713 3374 6714 3382 6715 3376 6715 3392 6715 3392 6715 3388 6715 3382 6715 3378 6716 3372 6717 3390 6718 3390 6719 3393 6720 3378 6721 3378 6722 3380 6722 3393 6722 3384 6723 3386 6723 3389 6723 3389 6723 3387 6723 3384 6723 3374 6724 3386 6724 3382 6724 3382 6724 3392 6724 3374 6724 3386 6725 3390 6725 3391 6725 3380 6726 3387 6726 3386 6726 3380 6727 3386 6727 3384 6727 3380 6728 3389 6728 3390 6728 3380 6729 3390 6729 3393 6729 3379 6730 3385 6730 3383 6730 3371 6731 3373 6731 3379 6731 3371 6732 3379 6732 3377 6732 3379 6733 3373 6733 3375 6733 3381 6734 3385 6734 3379 6734 3381 6735 3379 6735 3375 6735 2137 6736 2161 6736 2157 6736 2183 6737 2185 6737 3394 6737 2187 6738 2183 6738 3394 6738 2185 6739 2191 6739 3394 6739 2189 6740 2187 6740 3394 6740 2193 6741 2189 6741 3394 6741 2191 6742 2195 6742 3394 6742 2197 6743 2193 6743 3394 6743 2195 6744 2199 6744 3394 6744 2203 6745 2197 6745 3394 6745 2199 6746 2201 6746 3394 6746 2201 6747 2209 6747 3394 6747 2205 6748 2203 6748 3394 6748 2207 6749 2205 6749 3394 6749 2211 6750 2207 6750 3394 6750 2209 6751 2213 6751 3394 6751 2215 6752 2211 6752 3394 6752 2213 6753 2217 6753 3394 6753 2219 6754 2215 6754 3394 6754 2217 6755 2221 6755 3394 6755 2225 6756 2219 6756 3394 6756 2221 6757 2223 6757 3394 6757 2223 6758 2227 6758 3394 6758 2229 6759 2225 6759 3394 6759 2227 6760 2235 6760 3394 6760 2231 6761 2229 6761 3394 6761 2233 6762 2231 6762 3394 6762 2237 6763 2233 6763 3394 6763 2235 6764 2239 6764 3394 6764 2241 6765 2237 6765 3394 6765 2239 6766 2243 6766 3394 6766 2247 6767 2241 6767 3394 6767 2243 6768 2245 6768 3394 6768 2245 6769 2251 6769 3394 6769 2249 6770 2247 6770 3394 6770 2253 6771 2249 6771 3394 6771 2251 6772 2255 6772 3394 6772 2257 6773 2253 6773 3394 6773 2255 6774 2261 6774 3394 6774 2263 6775 2257 6775 3394 6775 2263 6776 2259 6776 3394 6776 2261 6777 2265 6777 3394 6777 2269 6778 2263 6778 3394 6778 2265 6779 2267 6779 3394 6779 2267 6780 2271 6780 3394 6780 2273 6781 2269 6781 3394 6781 2271 6782 2275 6782 3394 6782 2277 6783 2273 6783 3394 6783 2275 6784 2279 6784 3394 6784 2281 6785 2277 6785 3394 6785 2279 6786 2283 6786 3394 6786 2289 6787 2281 6787 3394 6787 2283 6788 2285 6788 3394 6788 2285 6789 2287 6789 3394 6789 2287 6790 2289 6790 3394 6790 2268 6791 2269 6791 2273 6791 2262 6792 2263 6792 2269 6792 3725 6793 3729 6793 3728 6793 3728 6793 3724 6793 3725 6793 3726 6794 3730 6794 3729 6794 3729 6794 3725 6794 3726 6794 3727 6795 3731 6795 3730 6795 3730 6795 3726 6795 3727 6795 3724 6796 3728 6796 3731 6796 3731 6796 3727 6796 3724 6796 3728 6797 3729 6797 3730 6797 3730 6797 3731 6797 3728 6797 3724 6798 3733 6798 3732 6798 3732 6798 3441 6798 3724 6798 3727 6799 3734 6799 3733 6799 3733 6799 3724 6799 3727 6799 3442 6800 3735 6800 3734 6800 3734 6800 3727 6800 3442 6800 3441 6801 3732 6801 3735 6801 3735 6801 3442 6801 3441 6801 3732 6802 3733 6802 3734 6802 3734 6802 3735 6802 3732 6802 3727 6803 3737 6803 3736 6803 3736 6803 3442 6803 3727 6803 3726 6804 3738 6804 3737 6804 3737 6804 3727 6804 3726 6804 3439 6805 3739 6805 3738 6805 3738 6805 3726 6805 3439 6805 3442 6806 3736 6806 3739 6806 3739 6806 3439 6806 3442 6806 3736 6807 3737 6807 3738 6807 3738 6807 3739 6807 3736 6807 3726 6808 3741 6808 3740 6808 3740 6808 3439 6808 3726 6808 3725 6809 3742 6809 3741 6809 3741 6809 3726 6809 3725 6809 3438 6810 3743 6810 3742 6810 3742 6810 3725 6810 3438 6810 3439 6811 3740 6811 3743 6811 3743 6811 3438 6811 3439 6811 3740 6812 3741 6812 3742 6812 3742 6812 3743 6812 3740 6812 3725 6813 3745 6813 3744 6813 3744 6813 3438 6813 3725 6813 3724 6814 3746 6814 3745 6814 3745 6814 3725 6814 3724 6814 3441 6815 3747 6815 3746 6815 3746 6815 3724 6815 3441 6815 3438 6816 3744 6816 3747 6816 3747 6816 3441 6816 3438 6816 3744 6817 3745 6817 3746 6817 3746 6817 3747 6817 3744 6817 3721 6818 3749 6818 3748 6818 3748 6818 3720 6818 3721 6818 3722 6819 3750 6819 3749 6819 3749 6819 3721 6819 3722 6819 3723 6820 3751 6820 3750 6820 3750 6820 3722 6820 3723 6820 3720 6821 3748 6821 3751 6821 3751 6821 3723 6821 3720 6821 3748 6822 3749 6822 3750 6822 3750 6822 3751 6822 3748 6822 3720 6823 3753 6823 3752 6823 3752 6823 3440 6823 3720 6823 3723 6824 3754 6824 3753 6824 3753 6824 3720 6824 3723 6824 3441 6825 3755 6825 3754 6825 3754 6825 3723 6825 3441 6825 3440 6826 3752 6826 3755 6826 3755 6826 3441 6826 3440 6826 3752 6827 3753 6827 3754 6827 3754 6827 3755 6827 3752 6827 3723 6828 3757 6828 3756 6828 3756 6828 3441 6828 3723 6828 3722 6829 3758 6829 3757 6829 3757 6829 3723 6829 3722 6829 3438 6830 3759 6830 3758 6830 3758 6830 3722 6830 3438 6830 3441 6831 3756 6831 3759 6831 3759 6831 3438 6831 3441 6831 3756 6832 3757 6832 3758 6832 3758 6832 3759 6832 3756 6832 3722 6833 3761 6833 3760 6833 3760 6833 3438 6833 3722 6833 3721 6834 3762 6834 3761 6834 3761 6834 3722 6834 3721 6834 3437 6835 3763 6835 3762 6835 3762 6835 3721 6835 3437 6835 3438 6836 3760 6836 3763 6836 3763 6836 3437 6836 3438 6836 3760 6837 3761 6837 3762 6837 3762 6837 3763 6837 3760 6837 3721 6838 3765 6838 3764 6838 3764 6838 3437 6838 3721 6838 3720 6839 3766 6839 3765 6839 3765 6839 3721 6839 3720 6839 3440 6840 3767 6840 3766 6840 3766 6840 3720 6840 3440 6840 3437 6841 3764 6841 3767 6841 3767 6841 3440 6841 3437 6841 3764 6842 3765 6842 3766 6842 3766 6842 3767 6842 3764 6842 3717 6843 3769 6843 3768 6843 3768 6843 3716 6843 3717 6843 3718 6844 3770 6844 3769 6844 3769 6844 3717 6844 3718 6844 3719 6845 3771 6845 3770 6845 3770 6845 3718 6845 3719 6845 3716 6846 3768 6846 3771 6846 3771 6846 3719 6846 3716 6846 3768 6847 3769 6847 3770 6847 3770 6847 3771 6847 3768 6847 3716 6848 3773 6848 3772 6848 3772 6848 3442 6848 3716 6848 3719 6849 3774 6849 3773 6849 3773 6849 3716 6849 3719 6849 3440 6850 3775 6850 3774 6850 3774 6850 3719 6850 3440 6850 3442 6851 3772 6851 3775 6851 3775 6851 3440 6851 3442 6851 3772 6852 3773 6852 3774 6852 3774 6852 3775 6852 3772 6852 3719 6853 3777 6853 3776 6853 3776 6853 3440 6853 3719 6853 3718 6854 3778 6854 3777 6854 3777 6854 3719 6854 3718 6854 3437 6855 3779 6855 3778 6855 3778 6855 3718 6855 3437 6855 3440 6856 3776 6856 3779 6856 3779 6856 3437 6856 3440 6856 3776 6857 3777 6857 3778 6857 3778 6857 3779 6857 3776 6857 3718 6858 3781 6858 3780 6858 3780 6858 3437 6858 3718 6858 3717 6859 3782 6859 3781 6859 3781 6859 3718 6859 3717 6859 3439 6860 3783 6860 3782 6860 3782 6860 3717 6860 3439 6860 3437 6861 3780 6861 3783 6861 3783 6861 3439 6861 3437 6861 3780 6862 3781 6862 3782 6862 3782 6862 3783 6862 3780 6862 3717 6863 3785 6863 3784 6863 3784 6863 3439 6863 3717 6863 3716 6864 3786 6864 3785 6864 3785 6864 3717 6864 3716 6864 3442 6865 3787 6865 3786 6865 3786 6865 3716 6865 3442 6865 3439 6866 3784 6866 3787 6866 3787 6866 3442 6866 3439 6866 3784 6867 3785 6867 3786 6867 3786 6867 3787 6867 3784 6867 3714 6868 3789 6868 3788 6868 3788 6868 3713 6868 3714 6868 3715 6869 3790 6869 3789 6869 3789 6869 3714 6869 3715 6869 3713 6870 3788 6870 3790 6870 3790 6870 3715 6870 3713 6870 3788 6871 3789 6871 3790 6871 3713 6872 3792 6872 3791 6872 3791 6872 3439 6872 3713 6872 3715 6873 3793 6873 3792 6873 3792 6873 3713 6873 3715 6873 3437 6874 3794 6874 3793 6874 3793 6874 3715 6874 3437 6874 3439 6875 3791 6875 3794 6875 3794 6875 3437 6875 3439 6875 3791 6876 3792 6876 3793 6876 3793 6876 3794 6876 3791 6876 3715 6877 3796 6877 3795 6877 3795 6877 3437 6877 3715 6877 3714 6878 3797 6878 3796 6878 3796 6878 3715 6878 3714 6878 3438 6879 3798 6879 3797 6879 3797 6879 3714 6879 3438 6879 3437 6880 3795 6880 3798 6880 3798 6880 3438 6880 3437 6880 3795 6881 3796 6881 3797 6881 3797 6881 3798 6881 3795 6881 3714 6882 3800 6882 3799 6882 3799 6882 3438 6882 3714 6882 3713 6883 3801 6883 3800 6883 3800 6883 3714 6883 3713 6883 3439 6884 3802 6884 3801 6884 3801 6884 3713 6884 3439 6884 3438 6885 3799 6885 3802 6885 3802 6885 3439 6885 3438 6885 3799 6886 3800 6886 3801 6886 3801 6886 3802 6886 3799 6886 3710 6887 3804 6887 3803 6887 3803 6887 3709 6887 3710 6887 3711 6888 3805 6888 3804 6888 3804 6888 3710 6888 3711 6888 3712 6889 3806 6889 3805 6889 3805 6889 3711 6889 3712 6889 3709 6890 3803 6890 3806 6890 3806 6890 3712 6890 3709 6890 3803 6891 3804 6891 3805 6891 3805 6891 3806 6891 3803 6891 3709 6892 3808 6892 3807 6892 3807 6892 3442 6892 3709 6892 3712 6893 3809 6893 3808 6893 3808 6893 3709 6893 3712 6893 3482 6894 3810 6894 3809 6894 3809 6894 3712 6894 3482 6894 3442 6895 3807 6895 3810 6895 3810 6895 3482 6895 3442 6895 3807 6896 3808 6896 3809 6896 3809 6896 3810 6896 3807 6896 3712 6897 3812 6897 3811 6897 3811 6897 3482 6897 3712 6897 3711 6898 3813 6898 3812 6898 3812 6898 3712 6898 3711 6898 3436 6899 3814 6899 3813 6899 3813 6899 3711 6899 3436 6899 3482 6900 3811 6900 3814 6900 3814 6900 3436 6900 3482 6900 3811 6901 3812 6901 3813 6901 3813 6901 3814 6901 3811 6901 3711 6902 3816 6902 3815 6902 3815 6902 3436 6902 3711 6902 3710 6903 3817 6903 3816 6903 3816 6903 3711 6903 3710 6903 3435 6904 3818 6904 3817 6904 3817 6904 3710 6904 3435 6904 3436 6905 3815 6905 3818 6905 3818 6905 3435 6905 3436 6905 3815 6906 3816 6906 3817 6906 3817 6906 3818 6906 3815 6906 3710 6907 3820 6907 3819 6907 3819 6907 3435 6907 3710 6907 3709 6908 3821 6908 3820 6908 3820 6908 3710 6908 3709 6908 3442 6909 3822 6909 3821 6909 3821 6909 3709 6909 3442 6909 3435 6910 3819 6910 3822 6910 3822 6910 3442 6910 3435 6910 3819 6911 3820 6911 3821 6911 3821 6911 3822 6911 3819 6911 3706 6912 3824 6912 3823 6912 3823 6912 3705 6912 3706 6912 3707 6913 3825 6913 3824 6913 3824 6913 3706 6913 3707 6913 3708 6914 3826 6914 3825 6914 3825 6914 3707 6914 3708 6914 3705 6915 3823 6915 3826 6915 3826 6915 3708 6915 3705 6915 3823 6916 3824 6916 3825 6916 3825 6916 3826 6916 3823 6916 3705 6917 3828 6917 3827 6917 3827 6917 3440 6917 3705 6917 3708 6918 3829 6918 3828 6918 3828 6918 3705 6918 3708 6918 3442 6919 3830 6919 3829 6919 3829 6919 3708 6919 3442 6919 3440 6920 3827 6920 3830 6920 3830 6920 3442 6920 3440 6920 3827 6921 3828 6921 3829 6921 3829 6921 3830 6921 3827 6921 3708 6922 3832 6922 3831 6922 3831 6922 3442 6922 3708 6922 3707 6923 3833 6923 3832 6923 3832 6923 3708 6923 3707 6923 3435 6924 3834 6924 3833 6924 3833 6924 3707 6924 3435 6924 3442 6925 3831 6925 3834 6925 3834 6925 3435 6925 3442 6925 3831 6926 3832 6926 3833 6926 3833 6926 3834 6926 3831 6926 3707 6927 3836 6927 3835 6927 3835 6927 3435 6927 3707 6927 3706 6928 3837 6928 3836 6928 3836 6928 3707 6928 3706 6928 3434 6929 3838 6929 3837 6929 3837 6929 3706 6929 3434 6929 3435 6930 3835 6930 3838 6930 3838 6930 3434 6930 3435 6930 3835 6931 3836 6931 3837 6931 3837 6931 3838 6931 3835 6931 3706 6932 3840 6932 3839 6932 3839 6932 3434 6932 3706 6932 3705 6933 3841 6933 3840 6933 3840 6933 3706 6933 3705 6933 3440 6934 3842 6934 3841 6934 3841 6934 3705 6934 3440 6934 3434 6935 3839 6935 3842 6935 3842 6935 3440 6935 3434 6935 3839 6936 3840 6936 3841 6936 3841 6936 3842 6936 3839 6936 3702 6937 3844 6937 3843 6937 3843 6937 3701 6937 3702 6937 3703 6938 3845 6938 3844 6938 3844 6938 3702 6938 3703 6938 3704 6939 3846 6939 3845 6939 3845 6939 3703 6939 3704 6939 3701 6940 3843 6940 3846 6940 3846 6940 3704 6940 3701 6940 3843 6941 3844 6941 3845 6941 3845 6941 3846 6941 3843 6941 3701 6942 3848 6942 3847 6942 3847 6942 3480 6942 3701 6942 3704 6943 3849 6943 3848 6943 3848 6943 3701 6943 3704 6943 3440 6944 3850 6944 3849 6944 3849 6944 3704 6944 3440 6944 3480 6945 3847 6945 3850 6945 3850 6945 3440 6945 3480 6945 3847 6946 3848 6946 3849 6946 3849 6946 3850 6946 3847 6946 3704 6947 3852 6947 3851 6947 3851 6947 3440 6947 3704 6947 3703 6948 3853 6948 3852 6948 3852 6948 3704 6948 3703 6948 3434 6949 3854 6949 3853 6949 3853 6949 3703 6949 3434 6949 3440 6950 3851 6950 3854 6950 3854 6950 3434 6950 3440 6950 3851 6951 3852 6951 3853 6951 3853 6951 3854 6951 3851 6951 3703 6952 3856 6952 3855 6952 3855 6952 3434 6952 3703 6952 3702 6953 3857 6953 3856 6953 3856 6953 3703 6953 3702 6953 3433 6954 3858 6954 3857 6954 3857 6954 3702 6954 3433 6954 3434 6955 3855 6955 3858 6955 3858 6955 3433 6955 3434 6955 3855 6956 3856 6956 3857 6956 3857 6956 3858 6956 3855 6956 3702 6957 3860 6957 3859 6957 3859 6957 3433 6957 3702 6957 3701 6958 3861 6958 3860 6958 3860 6958 3702 6958 3701 6958 3480 6959 3862 6959 3861 6959 3861 6959 3701 6959 3480 6959 3433 6960 3859 6960 3862 6960 3862 6960 3480 6960 3433 6960 3859 6961 3860 6961 3861 6961 3861 6961 3862 6961 3859 6961 3698 6962 3864 6962 3863 6962 3863 6962 3697 6962 3698 6962 3699 6963 3865 6963 3864 6963 3864 6963 3698 6963 3699 6963 3700 6964 3866 6964 3865 6964 3865 6964 3699 6964 3700 6964 3697 6965 3863 6965 3866 6965 3866 6965 3700 6965 3697 6965 3863 6966 3864 6966 3865 6966 3865 6966 3866 6966 3863 6966 3697 6967 3868 6967 3867 6967 3867 6967 3482 6967 3697 6967 3700 6968 3869 6968 3868 6968 3868 6968 3697 6968 3700 6968 3480 6969 3870 6969 3869 6969 3869 6969 3700 6969 3480 6969 3482 6970 3867 6970 3870 6970 3870 6970 3480 6970 3482 6970 3867 6971 3868 6971 3869 6971 3869 6971 3870 6971 3867 6971 3700 6972 3872 6972 3871 6972 3871 6972 3480 6972 3700 6972 3699 6973 3873 6973 3872 6973 3872 6973 3700 6973 3699 6973 3433 6974 3874 6974 3873 6974 3873 6974 3699 6974 3433 6974 3480 6975 3871 6975 3874 6975 3874 6975 3433 6975 3480 6975 3871 6976 3872 6976 3873 6976 3873 6976 3874 6976 3871 6976 3699 6977 3876 6977 3875 6977 3875 6977 3433 6977 3699 6977 3698 6978 3877 6978 3876 6978 3876 6978 3699 6978 3698 6978 3436 6979 3878 6979 3877 6979 3877 6979 3698 6979 3436 6979 3433 6980 3875 6980 3878 6980 3878 6980 3436 6980 3433 6980 3875 6981 3876 6981 3877 6981 3877 6981 3878 6981 3875 6981 3698 6982 3880 6982 3879 6982 3879 6982 3436 6982 3698 6982 3697 6983 3881 6983 3880 6983 3880 6983 3698 6983 3697 6983 3482 6984 3882 6984 3881 6984 3881 6984 3697 6984 3482 6984 3436 6985 3879 6985 3882 6985 3882 6985 3482 6985 3436 6985 3879 6986 3880 6986 3881 6986 3881 6986 3882 6986 3879 6986 3694 6987 3884 6987 3883 6987 3883 6987 3693 6987 3694 6987 3695 6988 3885 6988 3884 6988 3884 6988 3694 6988 3695 6988 3696 6989 3886 6989 3885 6989 3885 6989 3695 6989 3696 6989 3693 6990 3883 6990 3886 6990 3886 6990 3696 6990 3693 6990 3883 6991 3884 6991 3885 6991 3885 6991 3886 6991 3883 6991 3693 6992 3888 6992 3887 6992 3887 6992 3436 6992 3693 6992 3696 6993 3889 6993 3888 6993 3888 6993 3693 6993 3696 6993 3433 6994 3890 6994 3889 6994 3889 6994 3696 6994 3433 6994 3436 6995 3887 6995 3890 6995 3890 6995 3433 6995 3436 6995 3887 6996 3888 6996 3889 6996 3889 6996 3890 6996 3887 6996 3696 6997 3892 6997 3891 6997 3891 6997 3433 6997 3696 6997 3695 6998 3893 6998 3892 6998 3892 6998 3696 6998 3695 6998 3434 6999 3894 6999 3893 6999 3893 6999 3695 6999 3434 6999 3433 7000 3891 7000 3894 7000 3894 7000 3434 7000 3433 7000 3891 7001 3892 7001 3893 7001 3893 7001 3894 7001 3891 7001 3695 7002 3896 7002 3895 7002 3895 7002 3434 7002 3695 7002 3694 7003 3897 7003 3896 7003 3896 7003 3695 7003 3694 7003 3435 7004 3898 7004 3897 7004 3897 7004 3694 7004 3435 7004 3434 7005 3895 7005 3898 7005 3898 7005 3435 7005 3434 7005 3895 7006 3896 7006 3897 7006 3897 7006 3898 7006 3895 7006 3694 7007 3900 7007 3899 7007 3899 7007 3435 7007 3694 7007 3693 7008 3901 7008 3900 7008 3900 7008 3694 7008 3693 7008 3436 7009 3902 7009 3901 7009 3901 7009 3693 7009 3436 7009 3435 7010 3899 7010 3902 7010 3902 7010 3436 7010 3435 7010 3899 7011 3900 7011 3901 7011 3901 7011 3902 7011 3899 7011 3690 7012 3904 7012 3903 7012 3903 7012 3689 7012 3690 7012 3691 7013 3905 7013 3904 7013 3904 7013 3690 7013 3691 7013 3692 7014 3906 7014 3905 7014 3905 7014 3691 7014 3692 7014 3689 7015 3903 7015 3906 7015 3906 7015 3692 7015 3689 7015 3903 7016 3904 7016 3905 7016 3905 7016 3906 7016 3903 7016 3689 7017 3908 7017 3907 7017 3907 7017 3440 7017 3689 7017 3692 7018 3909 7018 3908 7018 3908 7018 3689 7018 3692 7018 3480 7019 3910 7019 3909 7019 3909 7019 3692 7019 3480 7019 3440 7020 3907 7020 3910 7020 3910 7020 3480 7020 3440 7020 3907 7021 3908 7021 3909 7021 3909 7021 3910 7021 3907 7021 3692 7022 3912 7022 3911 7022 3911 7022 3480 7022 3692 7022 3691 7023 3913 7023 3912 7023 3912 7023 3692 7023 3691 7023 3432 7024 3914 7024 3913 7024 3913 7024 3691 7024 3432 7024 3480 7025 3911 7025 3914 7025 3914 7025 3432 7025 3480 7025 3911 7026 3912 7026 3913 7026 3913 7026 3914 7026 3911 7026 3691 7027 3916 7027 3915 7027 3915 7027 3432 7027 3691 7027 3690 7028 3917 7028 3916 7028 3916 7028 3691 7028 3690 7028 3431 7029 3918 7029 3917 7029 3917 7029 3690 7029 3431 7029 3432 7030 3915 7030 3918 7030 3918 7030 3431 7030 3432 7030 3915 7031 3916 7031 3917 7031 3917 7031 3918 7031 3915 7031 3690 7032 3920 7032 3919 7032 3919 7032 3431 7032 3690 7032 3689 7033 3921 7033 3920 7033 3920 7033 3690 7033 3689 7033 3440 7034 3922 7034 3921 7034 3921 7034 3689 7034 3440 7034 3431 7035 3919 7035 3922 7035 3922 7035 3440 7035 3431 7035 3919 7036 3920 7036 3921 7036 3921 7036 3922 7036 3919 7036 3686 7037 3924 7037 3923 7037 3923 7037 3685 7037 3686 7037 3687 7038 3925 7038 3924 7038 3924 7038 3686 7038 3687 7038 3688 7039 3926 7039 3925 7039 3925 7039 3687 7039 3688 7039 3685 7040 3923 7040 3926 7040 3926 7040 3688 7040 3685 7040 3923 7041 3924 7041 3925 7041 3925 7041 3926 7041 3923 7041 3685 7042 3928 7042 3927 7042 3927 7042 3441 7042 3685 7042 3688 7043 3929 7043 3928 7043 3928 7043 3685 7043 3688 7043 3440 7044 3930 7044 3929 7044 3929 7044 3688 7044 3440 7044 3441 7045 3927 7045 3930 7045 3930 7045 3440 7045 3441 7045 3927 7046 3928 7046 3929 7046 3929 7046 3930 7046 3927 7046 3688 7047 3932 7047 3931 7047 3931 7047 3440 7047 3688 7047 3687 7048 3933 7048 3932 7048 3932 7048 3688 7048 3687 7048 3431 7049 3934 7049 3933 7049 3933 7049 3687 7049 3431 7049 3440 7050 3931 7050 3934 7050 3934 7050 3431 7050 3440 7050 3931 7051 3932 7051 3933 7051 3933 7051 3934 7051 3931 7051 3687 7052 3936 7052 3935 7052 3935 7052 3431 7052 3687 7052 3686 7053 3937 7053 3936 7053 3936 7053 3687 7053 3686 7053 3430 7054 3938 7054 3937 7054 3937 7054 3686 7054 3430 7054 3431 7055 3935 7055 3938 7055 3938 7055 3430 7055 3431 7055 3935 7056 3936 7056 3937 7056 3937 7056 3938 7056 3935 7056 3686 7057 3940 7057 3939 7057 3939 7057 3430 7057 3686 7057 3685 7058 3941 7058 3940 7058 3940 7058 3686 7058 3685 7058 3441 7059 3942 7059 3941 7059 3941 7059 3685 7059 3441 7059 3430 7060 3939 7060 3942 7060 3942 7060 3441 7060 3430 7060 3939 7061 3940 7061 3941 7061 3941 7061 3942 7061 3939 7061 3682 7062 3944 7062 3943 7062 3943 7062 3681 7062 3682 7062 3683 7063 3945 7063 3944 7063 3944 7063 3682 7063 3683 7063 3684 7064 3946 7064 3945 7064 3945 7064 3683 7064 3684 7064 3681 7065 3943 7065 3946 7065 3946 7065 3684 7065 3681 7065 3943 7066 3944 7066 3945 7066 3945 7066 3946 7066 3943 7066 3681 7067 3948 7067 3947 7067 3947 7067 3483 7067 3681 7067 3684 7068 3949 7068 3948 7068 3948 7068 3681 7068 3684 7068 3441 7069 3950 7069 3949 7069 3949 7069 3684 7069 3441 7069 3483 7070 3947 7070 3950 7070 3950 7070 3441 7070 3483 7070 3947 7071 3948 7071 3949 7071 3949 7071 3950 7071 3947 7071 3684 7072 3952 7072 3951 7072 3951 7072 3441 7072 3684 7072 3683 7073 3953 7073 3952 7073 3952 7073 3684 7073 3683 7073 3430 7074 3954 7074 3953 7074 3953 7074 3683 7074 3430 7074 3441 7075 3951 7075 3954 7075 3954 7075 3430 7075 3441 7075 3951 7076 3952 7076 3953 7076 3953 7076 3954 7076 3951 7076 3683 7077 3956 7077 3955 7077 3955 7077 3430 7077 3683 7077 3682 7078 3957 7078 3956 7078 3956 7078 3683 7078 3682 7078 3429 7079 3958 7079 3957 7079 3957 7079 3682 7079 3429 7079 3430 7080 3955 7080 3958 7080 3958 7080 3429 7080 3430 7080 3955 7081 3956 7081 3957 7081 3957 7081 3958 7081 3955 7081 3682 7082 3960 7082 3959 7082 3959 7082 3429 7082 3682 7082 3681 7083 3961 7083 3960 7083 3960 7083 3682 7083 3681 7083 3483 7084 3962 7084 3961 7084 3961 7084 3681 7084 3483 7084 3429 7085 3959 7085 3962 7085 3962 7085 3483 7085 3429 7085 3959 7086 3960 7086 3961 7086 3961 7086 3962 7086 3959 7086 3678 7087 3964 7087 3963 7087 3963 7087 3677 7087 3678 7087 3679 7088 3965 7088 3964 7088 3964 7088 3678 7088 3679 7088 3680 7089 3966 7089 3965 7089 3965 7089 3679 7089 3680 7089 3677 7090 3963 7090 3966 7090 3966 7090 3680 7090 3677 7090 3963 7091 3964 7091 3965 7091 3965 7091 3966 7091 3963 7091 3677 7092 3968 7092 3967 7092 3967 7092 3480 7092 3677 7092 3680 7093 3969 7093 3968 7093 3968 7093 3677 7093 3680 7093 3483 7094 3970 7094 3969 7094 3969 7094 3680 7094 3483 7094 3480 7095 3967 7095 3970 7095 3970 7095 3483 7095 3480 7095 3967 7096 3968 7096 3969 7096 3969 7096 3970 7096 3967 7096 3680 7097 3972 7097 3971 7097 3971 7097 3483 7097 3680 7097 3679 7098 3973 7098 3972 7098 3972 7098 3680 7098 3679 7098 3429 7099 3974 7099 3973 7099 3973 7099 3679 7099 3429 7099 3483 7100 3971 7100 3974 7100 3974 7100 3429 7100 3483 7100 3971 7101 3972 7101 3973 7101 3973 7101 3974 7101 3971 7101 3679 7102 3976 7102 3975 7102 3975 7102 3429 7102 3679 7102 3678 7103 3977 7103 3976 7103 3976 7103 3679 7103 3678 7103 3432 7104 3978 7104 3977 7104 3977 7104 3678 7104 3432 7104 3429 7105 3975 7105 3978 7105 3978 7105 3432 7105 3429 7105 3975 7106 3976 7106 3977 7106 3977 7106 3978 7106 3975 7106 3678 7107 3980 7107 3979 7107 3979 7107 3432 7107 3678 7107 3677 7108 3981 7108 3980 7108 3980 7108 3678 7108 3677 7108 3480 7109 3982 7109 3981 7109 3981 7109 3677 7109 3480 7109 3432 7110 3979 7110 3982 7110 3982 7110 3480 7110 3432 7110 3979 7111 3980 7111 3981 7111 3981 7111 3982 7111 3979 7111 3674 7112 3984 7112 3983 7112 3983 7112 3673 7112 3674 7112 3675 7113 3985 7113 3984 7113 3984 7113 3674 7113 3675 7113 3676 7114 3986 7114 3985 7114 3985 7114 3675 7114 3676 7114 3673 7115 3983 7115 3986 7115 3986 7115 3676 7115 3673 7115 3983 7116 3984 7116 3985 7116 3985 7116 3986 7116 3983 7116 3673 7117 3988 7117 3987 7117 3987 7117 3432 7117 3673 7117 3676 7118 3989 7118 3988 7118 3988 7118 3673 7118 3676 7118 3429 7119 3990 7119 3989 7119 3989 7119 3676 7119 3429 7119 3432 7120 3987 7120 3990 7120 3990 7120 3429 7120 3432 7120 3987 7121 3988 7121 3989 7121 3989 7121 3990 7121 3987 7121 3676 7122 3992 7122 3991 7122 3991 7122 3429 7122 3676 7122 3675 7123 3993 7123 3992 7123 3992 7123 3676 7123 3675 7123 3430 7124 3994 7124 3993 7124 3993 7124 3675 7124 3430 7124 3429 7125 3991 7125 3994 7125 3994 7125 3430 7125 3429 7125 3991 7126 3992 7126 3993 7126 3993 7126 3994 7126 3991 7126 3675 7127 3996 7127 3995 7127 3995 7127 3430 7127 3675 7127 3674 7128 3997 7128 3996 7128 3996 7128 3675 7128 3674 7128 3431 7129 3998 7129 3997 7129 3997 7129 3674 7129 3431 7129 3430 7130 3995 7130 3998 7130 3998 7130 3431 7130 3430 7130 3995 7131 3996 7131 3997 7131 3997 7131 3998 7131 3995 7131 3674 7132 4000 7132 3999 7132 3999 7132 3431 7132 3674 7132 3673 7133 4001 7133 4000 7133 4000 7133 3674 7133 3673 7133 3432 7134 4002 7134 4001 7134 4001 7134 3673 7134 3432 7134 3431 7135 3999 7135 4002 7135 4002 7135 3432 7135 3431 7135 3999 7136 4000 7136 4001 7136 4001 7136 4002 7136 3999 7136 3670 7137 4004 7137 4003 7137 4003 7137 3669 7137 3670 7137 3671 7138 4005 7138 4004 7138 4004 7138 3670 7138 3671 7138 3672 7139 4006 7139 4005 7139 4005 7139 3671 7139 3672 7139 3669 7140 4003 7140 4006 7140 4006 7140 3672 7140 3669 7140 4003 7141 4004 7141 4005 7141 4005 7141 4006 7141 4003 7141 3669 7142 4008 7142 4007 7142 4007 7142 3441 7142 3669 7142 3672 7143 4009 7143 4008 7143 4008 7143 3669 7143 3672 7143 3483 7144 4010 7144 4009 7144 4009 7144 3672 7144 3483 7144 3441 7145 4007 7145 4010 7145 4010 7145 3483 7145 3441 7145 4007 7146 4008 7146 4009 7146 4009 7146 4010 7146 4007 7146 3672 7147 4012 7147 4011 7147 4011 7147 3483 7147 3672 7147 3671 7148 4013 7148 4012 7148 4012 7148 3672 7148 3671 7148 3428 7149 4014 7149 4013 7149 4013 7149 3671 7149 3428 7149 3483 7150 4011 7150 4014 7150 4014 7150 3428 7150 3483 7150 4011 7151 4012 7151 4013 7151 4013 7151 4014 7151 4011 7151 3671 7152 4016 7152 4015 7152 4015 7152 3428 7152 3671 7152 3670 7153 4017 7153 4016 7153 4016 7153 3671 7153 3670 7153 3427 7154 4018 7154 4017 7154 4017 7154 3670 7154 3427 7154 3428 7155 4015 7155 4018 7155 4018 7155 3427 7155 3428 7155 4015 7156 4016 7156 4017 7156 4017 7156 4018 7156 4015 7156 3670 7157 4020 7157 4019 7157 4019 7157 3427 7157 3670 7157 3669 7158 4021 7158 4020 7158 4020 7158 3670 7158 3669 7158 3441 7159 4022 7159 4021 7159 4021 7159 3669 7159 3441 7159 3427 7160 4019 7160 4022 7160 4022 7160 3441 7160 3427 7160 4019 7161 4020 7161 4021 7161 4021 7161 4022 7161 4019 7161 3666 7162 4024 7162 4023 7162 4023 7162 3665 7162 3666 7162 3667 7163 4025 7163 4024 7163 4024 7163 3666 7163 3667 7163 3668 7164 4026 7164 4025 7164 4025 7164 3667 7164 3668 7164 3665 7165 4023 7165 4026 7165 4026 7165 3668 7165 3665 7165 4023 7166 4024 7166 4025 7166 4025 7166 4026 7166 4023 7166 3665 7167 4028 7167 4027 7167 4027 7167 3442 7167 3665 7167 3668 7168 4029 7168 4028 7168 4028 7168 3665 7168 3668 7168 3441 7169 4030 7169 4029 7169 4029 7169 3668 7169 3441 7169 3442 7170 4027 7170 4030 7170 4030 7170 3441 7170 3442 7170 4027 7171 4028 7171 4029 7171 4029 7171 4030 7171 4027 7171 3668 7172 4032 7172 4031 7172 4031 7172 3441 7172 3668 7172 3667 7173 4033 7173 4032 7173 4032 7173 3668 7173 3667 7173 3427 7174 4034 7174 4033 7174 4033 7174 3667 7174 3427 7174 3441 7175 4031 7175 4034 7175 4034 7175 3427 7175 3441 7175 4031 7176 4032 7176 4033 7176 4033 7176 4034 7176 4031 7176 3667 7177 4036 7177 4035 7177 4035 7177 3427 7177 3667 7177 3666 7178 4037 7178 4036 7178 4036 7178 3667 7178 3666 7178 3426 7179 4038 7179 4037 7179 4037 7179 3666 7179 3426 7179 3427 7180 4035 7180 4038 7180 4038 7180 3426 7180 3427 7180 4035 7181 4036 7181 4037 7181 4037 7181 4038 7181 4035 7181 3666 7182 4040 7182 4039 7182 4039 7182 3426 7182 3666 7182 3665 7183 4041 7183 4040 7183 4040 7183 3666 7183 3665 7183 3442 7184 4042 7184 4041 7184 4041 7184 3665 7184 3442 7184 3426 7185 4039 7185 4042 7185 4042 7185 3442 7185 3426 7185 4039 7186 4040 7186 4041 7186 4041 7186 4042 7186 4039 7186 3662 7187 4044 7187 4043 7187 4043 7187 3661 7187 3662 7187 3663 7188 4045 7188 4044 7188 4044 7188 3662 7188 3663 7188 3664 7189 4046 7189 4045 7189 4045 7189 3663 7189 3664 7189 3661 7190 4043 7190 4046 7190 4046 7190 3664 7190 3661 7190 4043 7191 4044 7191 4045 7191 4045 7191 4046 7191 4043 7191 3661 7192 4048 7192 4047 7192 4047 7192 3482 7192 3661 7192 3664 7193 4049 7193 4048 7193 4048 7193 3661 7193 3664 7193 3442 7194 4050 7194 4049 7194 4049 7194 3664 7194 3442 7194 3482 7195 4047 7195 4050 7195 4050 7195 3442 7195 3482 7195 4047 7196 4048 7196 4049 7196 4049 7196 4050 7196 4047 7196 3664 7197 4052 7197 4051 7197 4051 7197 3442 7197 3664 7197 3663 7198 4053 7198 4052 7198 4052 7198 3664 7198 3663 7198 3426 7199 4054 7199 4053 7199 4053 7199 3663 7199 3426 7199 3442 7200 4051 7200 4054 7200 4054 7200 3426 7200 3442 7200 4051 7201 4052 7201 4053 7201 4053 7201 4054 7201 4051 7201 3663 7202 4056 7202 4055 7202 4055 7202 3426 7202 3663 7202 3662 7203 4057 7203 4056 7203 4056 7203 3663 7203 3662 7203 3425 7204 4058 7204 4057 7204 4057 7204 3662 7204 3425 7204 3426 7205 4055 7205 4058 7205 4058 7205 3425 7205 3426 7205 4055 7206 4056 7206 4057 7206 4057 7206 4058 7206 4055 7206 3662 7207 4060 7207 4059 7207 4059 7207 3425 7207 3662 7207 3661 7208 4061 7208 4060 7208 4060 7208 3662 7208 3661 7208 3482 7209 4062 7209 4061 7209 4061 7209 3661 7209 3482 7209 3425 7210 4059 7210 4062 7210 4062 7210 3482 7210 3425 7210 4059 7211 4060 7211 4061 7211 4061 7211 4062 7211 4059 7211 3658 7212 4064 7212 4063 7212 4063 7212 3657 7212 3658 7212 3659 7213 4065 7213 4064 7213 4064 7213 3658 7213 3659 7213 3660 7214 4066 7214 4065 7214 4065 7214 3659 7214 3660 7214 3657 7215 4063 7215 4066 7215 4066 7215 3660 7215 3657 7215 4063 7216 4064 7216 4065 7216 4065 7216 4066 7216 4063 7216 3657 7217 4068 7217 4067 7217 4067 7217 3483 7217 3657 7217 3660 7218 4069 7218 4068 7218 4068 7218 3657 7218 3660 7218 3482 7219 4070 7219 4069 7219 4069 7219 3660 7219 3482 7219 3483 7220 4067 7220 4070 7220 4070 7220 3482 7220 3483 7220 4067 7221 4068 7221 4069 7221 4069 7221 4070 7221 4067 7221 3660 7222 4072 7222 4071 7222 4071 7222 3482 7222 3660 7222 3659 7223 4073 7223 4072 7223 4072 7223 3660 7223 3659 7223 3425 7224 4074 7224 4073 7224 4073 7224 3659 7224 3425 7224 3482 7225 4071 7225 4074 7225 4074 7225 3425 7225 3482 7225 4071 7226 4072 7226 4073 7226 4073 7226 4074 7226 4071 7226 3659 7227 4076 7227 4075 7227 4075 7227 3425 7227 3659 7227 3658 7228 4077 7228 4076 7228 4076 7228 3659 7228 3658 7228 3428 7229 4078 7229 4077 7229 4077 7229 3658 7229 3428 7229 3425 7230 4075 7230 4078 7230 4078 7230 3428 7230 3425 7230 4075 7231 4076 7231 4077 7231 4077 7231 4078 7231 4075 7231 3658 7232 4080 7232 4079 7232 4079 7232 3428 7232 3658 7232 3657 7233 4081 7233 4080 7233 4080 7233 3658 7233 3657 7233 3483 7234 4082 7234 4081 7234 4081 7234 3657 7234 3483 7234 3428 7235 4079 7235 4082 7235 4082 7235 3483 7235 3428 7235 4079 7236 4080 7236 4081 7236 4081 7236 4082 7236 4079 7236 3654 7237 4084 7237 4083 7237 4083 7237 3653 7237 3654 7237 3655 7238 4085 7238 4084 7238 4084 7238 3654 7238 3655 7238 3656 7239 4086 7239 4085 7239 4085 7239 3655 7239 3656 7239 3653 7240 4083 7240 4086 7240 4086 7240 3656 7240 3653 7240 4083 7241 4084 7241 4085 7241 4085 7241 4086 7241 4083 7241 3653 7242 4088 7242 4087 7242 4087 7242 3428 7242 3653 7242 3656 7243 4089 7243 4088 7243 4088 7243 3653 7243 3656 7243 3425 7244 4090 7244 4089 7244 4089 7244 3656 7244 3425 7244 3428 7245 4087 7245 4090 7245 4090 7245 3425 7245 3428 7245 4087 7246 4088 7246 4089 7246 4089 7246 4090 7246 4087 7246 3656 7247 4092 7247 4091 7247 4091 7247 3425 7247 3656 7247 3655 7248 4093 7248 4092 7248 4092 7248 3656 7248 3655 7248 3426 7249 4094 7249 4093 7249 4093 7249 3655 7249 3426 7249 3425 7250 4091 7250 4094 7250 4094 7250 3426 7250 3425 7250 4091 7251 4092 7251 4093 7251 4093 7251 4094 7251 4091 7251 3655 7252 4096 7252 4095 7252 4095 7252 3426 7252 3655 7252 3654 7253 4097 7253 4096 7253 4096 7253 3655 7253 3654 7253 3427 7254 4098 7254 4097 7254 4097 7254 3654 7254 3427 7254 3426 7255 4095 7255 4098 7255 4098 7255 3427 7255 3426 7255 4095 7256 4096 7256 4097 7256 4097 7256 4098 7256 4095 7256 3654 7257 4100 7257 4099 7257 4099 7257 3427 7257 3654 7257 3653 7258 4101 7258 4100 7258 4100 7258 3654 7258 3653 7258 3428 7259 4102 7259 4101 7259 4101 7259 3653 7259 3428 7259 3427 7260 4099 7260 4102 7260 4102 7260 3428 7260 3427 7260 4099 7261 4100 7261 4101 7261 4101 7261 4102 7261 4099 7261 3650 7262 4104 7262 4103 7262 4103 7262 3649 7262 3650 7262 3651 7263 4105 7263 4104 7263 4104 7263 3650 7263 3651 7263 3652 7264 4106 7264 4105 7264 4105 7264 3651 7264 3652 7264 3649 7265 4103 7265 4106 7265 4106 7265 3652 7265 3649 7265 4103 7266 4104 7266 4105 7266 4105 7266 4106 7266 4103 7266 3649 7267 4108 7267 4107 7267 4107 7267 3444 7267 3649 7267 3652 7268 4109 7268 4108 7268 4108 7268 3649 7268 3652 7268 3445 7269 4110 7269 4109 7269 4109 7269 3652 7269 3445 7269 3444 7270 4107 7270 4110 7270 4110 7270 3445 7270 3444 7270 4107 7271 4108 7271 4109 7271 4109 7271 4110 7271 4107 7271 3652 7272 4112 7272 4111 7272 4111 7272 3445 7272 3652 7272 3651 7273 4113 7273 4112 7273 4112 7273 3652 7273 3651 7273 3424 7274 4114 7274 4113 7274 4113 7274 3651 7274 3424 7274 3445 7275 4111 7275 4114 7275 4114 7275 3424 7275 3445 7275 4111 7276 4112 7276 4113 7276 4113 7276 4114 7276 4111 7276 3651 7277 4116 7277 4115 7277 4115 7277 3424 7277 3651 7277 3650 7278 4117 7278 4116 7278 4116 7278 3651 7278 3650 7278 3423 7279 4118 7279 4117 7279 4117 7279 3650 7279 3423 7279 3424 7280 4115 7280 4118 7280 4118 7280 3423 7280 3424 7280 4115 7281 4116 7281 4117 7281 4117 7281 4118 7281 4115 7281 3650 7282 4120 7282 4119 7282 4119 7282 3423 7282 3650 7282 3649 7283 4121 7283 4120 7283 4120 7283 3650 7283 3649 7283 3444 7284 4122 7284 4121 7284 4121 7284 3649 7284 3444 7284 3423 7285 4119 7285 4122 7285 4122 7285 3444 7285 3423 7285 4119 7286 4120 7286 4121 7286 4121 7286 4122 7286 4119 7286 3646 7287 4124 7287 4123 7287 4123 7287 3645 7287 3646 7287 3647 7288 4125 7288 4124 7288 4124 7288 3646 7288 3647 7288 3648 7289 4126 7289 4125 7289 4125 7289 3647 7289 3648 7289 3645 7290 4123 7290 4126 7290 4126 7290 3648 7290 3645 7290 4123 7291 4124 7291 4125 7291 4125 7291 4126 7291 4123 7291 3645 7292 4128 7292 4127 7292 4127 7292 3443 7292 3645 7292 3648 7293 4129 7293 4128 7293 4128 7293 3645 7293 3648 7293 3444 7294 4130 7294 4129 7294 4129 7294 3648 7294 3444 7294 3443 7295 4127 7295 4130 7295 4130 7295 3444 7295 3443 7295 4127 7296 4128 7296 4129 7296 4129 7296 4130 7296 4127 7296 3648 7297 4132 7297 4131 7297 4131 7297 3444 7297 3648 7297 3647 7298 4133 7298 4132 7298 4132 7298 3648 7298 3647 7298 3423 7299 4134 7299 4133 7299 4133 7299 3647 7299 3423 7299 3444 7300 4131 7300 4134 7300 4134 7300 3423 7300 3444 7300 4131 7301 4132 7301 4133 7301 4133 7301 4134 7301 4131 7301 3647 7302 4136 7302 4135 7302 4135 7302 3423 7302 3647 7302 3646 7303 4137 7303 4136 7303 4136 7303 3647 7303 3646 7303 3422 7304 4138 7304 4137 7304 4137 7304 3646 7304 3422 7304 3423 7305 4135 7305 4138 7305 4138 7305 3422 7305 3423 7305 4135 7306 4136 7306 4137 7306 4137 7306 4138 7306 4135 7306 3646 7307 4140 7307 4139 7307 4139 7307 3422 7307 3646 7307 3645 7308 4141 7308 4140 7308 4140 7308 3646 7308 3645 7308 3443 7309 4142 7309 4141 7309 4141 7309 3645 7309 3443 7309 3422 7310 4139 7310 4142 7310 4142 7310 3443 7310 3422 7310 4139 7311 4140 7311 4141 7311 4141 7311 4142 7311 4139 7311 3642 7312 4144 7312 4143 7312 4143 7312 3641 7312 3642 7312 3643 7313 4145 7313 4144 7313 4144 7313 3642 7313 3643 7313 3644 7314 4146 7314 4145 7314 4145 7314 3643 7314 3644 7314 3641 7315 4143 7315 4146 7315 4146 7315 3644 7315 3641 7315 4143 7316 4144 7316 4145 7316 4145 7316 4146 7316 4143 7316 3641 7317 4148 7317 4147 7317 4147 7317 3445 7317 3641 7317 3644 7318 4149 7318 4148 7318 4148 7318 3641 7318 3644 7318 3443 7319 4150 7319 4149 7319 4149 7319 3644 7319 3443 7319 3445 7320 4147 7320 4150 7320 4150 7320 3443 7320 3445 7320 4147 7321 4148 7321 4149 7321 4149 7321 4150 7321 4147 7321 3644 7322 4152 7322 4151 7322 4151 7322 3443 7322 3644 7322 3643 7323 4153 7323 4152 7323 4152 7323 3644 7323 3643 7323 3422 7324 4154 7324 4153 7324 4153 7324 3643 7324 3422 7324 3443 7325 4151 7325 4154 7325 4154 7325 3422 7325 3443 7325 4151 7326 4152 7326 4153 7326 4153 7326 4154 7326 4151 7326 3643 7327 4156 7327 4155 7327 4155 7327 3422 7327 3643 7327 3642 7328 4157 7328 4156 7328 4156 7328 3643 7328 3642 7328 3424 7329 4158 7329 4157 7329 4157 7329 3642 7329 3424 7329 3422 7330 4155 7330 4158 7330 4158 7330 3424 7330 3422 7330 4155 7331 4156 7331 4157 7331 4157 7331 4158 7331 4155 7331 3642 7332 4160 7332 4159 7332 4159 7332 3424 7332 3642 7332 3641 7333 4161 7333 4160 7333 4160 7333 3642 7333 3641 7333 3445 7334 4162 7334 4161 7334 4161 7334 3641 7334 3445 7334 3424 7335 4159 7335 4162 7335 4162 7335 3445 7335 3424 7335 4159 7336 4160 7336 4161 7336 4161 7336 4162 7336 4159 7336 3639 7337 4164 7337 4163 7337 4163 7337 3638 7337 3639 7337 3640 7338 4165 7338 4164 7338 4164 7338 3639 7338 3640 7338 3638 7339 4163 7339 4165 7339 4165 7339 3640 7339 3638 7339 4163 7340 4164 7340 4165 7340 3638 7341 4167 7341 4166 7341 4166 7341 3424 7341 3638 7341 3640 7342 4168 7342 4167 7342 4167 7342 3638 7342 3640 7342 3422 7343 4169 7343 4168 7343 4168 7343 3640 7343 3422 7343 3424 7344 4166 7344 4169 7344 4169 7344 3422 7344 3424 7344 4166 7345 4167 7345 4168 7345 4168 7345 4169 7345 4166 7345 3640 7346 4171 7346 4170 7346 4170 7346 3422 7346 3640 7346 3639 7347 4172 7347 4171 7347 4171 7347 3640 7347 3639 7347 3423 7348 4173 7348 4172 7348 4172 7348 3639 7348 3423 7348 3422 7349 4170 7349 4173 7349 4173 7349 3423 7349 3422 7349 4170 7350 4171 7350 4172 7350 4172 7350 4173 7350 4170 7350 3639 7351 4175 7351 4174 7351 4174 7351 3423 7351 3639 7351 3638 7352 4176 7352 4175 7352 4175 7352 3639 7352 3638 7352 3424 7353 4177 7353 4176 7353 4176 7353 3638 7353 3424 7353 3423 7354 4174 7354 4177 7354 4177 7354 3424 7354 3423 7354 4174 7355 4175 7355 4176 7355 4176 7355 4177 7355 4174 7355 3635 7356 4179 7356 4178 7356 4178 7356 3634 7356 3635 7356 3636 7357 4180 7357 4179 7357 4179 7357 3635 7357 3636 7357 3637 7358 4181 7358 4180 7358 4180 7358 3636 7358 3637 7358 3634 7359 4178 7359 4181 7359 4181 7359 3637 7359 3634 7359 4178 7360 4179 7360 4180 7360 4180 7360 4181 7360 4178 7360 3634 7361 4183 7361 4182 7361 4182 7361 3445 7361 3634 7361 3637 7362 4184 7362 4183 7362 4183 7362 3634 7362 3637 7362 3449 7363 4185 7363 4184 7363 4184 7363 3637 7363 3449 7363 3445 7364 4182 7364 4185 7364 4185 7364 3449 7364 3445 7364 4182 7365 4183 7365 4184 7365 4184 7365 4185 7365 4182 7365 3637 7366 4187 7366 4186 7366 4186 7366 3449 7366 3637 7366 3636 7367 4188 7367 4187 7367 4187 7367 3637 7367 3636 7367 3421 7368 4189 7368 4188 7368 4188 7368 3636 7368 3421 7368 3449 7369 4186 7369 4189 7369 4189 7369 3421 7369 3449 7369 4186 7370 4187 7370 4188 7370 4188 7370 4189 7370 4186 7370 3636 7371 4191 7371 4190 7371 4190 7371 3421 7371 3636 7371 3635 7372 4192 7372 4191 7372 4191 7372 3636 7372 3635 7372 3420 7373 4193 7373 4192 7373 4192 7373 3635 7373 3420 7373 3421 7374 4190 7374 4193 7374 4193 7374 3420 7374 3421 7374 4190 7375 4191 7375 4192 7375 4192 7375 4193 7375 4190 7375 3635 7376 4195 7376 4194 7376 4194 7376 3420 7376 3635 7376 3634 7377 4196 7377 4195 7377 4195 7377 3635 7377 3634 7377 3445 7378 4197 7378 4196 7378 4196 7378 3634 7378 3445 7378 3420 7379 4194 7379 4197 7379 4197 7379 3445 7379 3420 7379 4194 7380 4195 7380 4196 7380 4196 7380 4197 7380 4194 7380 3631 7381 4199 7381 4198 7381 4198 7381 3630 7381 3631 7381 3632 7382 4200 7382 4199 7382 4199 7382 3631 7382 3632 7382 3633 7383 4201 7383 4200 7383 4200 7383 3632 7383 3633 7383 3630 7384 4198 7384 4201 7384 4201 7384 3633 7384 3630 7384 4198 7385 4199 7385 4200 7385 4200 7385 4201 7385 4198 7385 3630 7386 4203 7386 4202 7386 4202 7386 3443 7386 3630 7386 3633 7387 4204 7387 4203 7387 4203 7387 3630 7387 3633 7387 3445 7388 4205 7388 4204 7388 4204 7388 3633 7388 3445 7388 3443 7389 4202 7389 4205 7389 4205 7389 3445 7389 3443 7389 4202 7390 4203 7390 4204 7390 4204 7390 4205 7390 4202 7390 3633 7391 4207 7391 4206 7391 4206 7391 3445 7391 3633 7391 3632 7392 4208 7392 4207 7392 4207 7392 3633 7392 3632 7392 3420 7393 4209 7393 4208 7393 4208 7393 3632 7393 3420 7393 3445 7394 4206 7394 4209 7394 4209 7394 3420 7394 3445 7394 4206 7395 4207 7395 4208 7395 4208 7395 4209 7395 4206 7395 3632 7396 4211 7396 4210 7396 4210 7396 3420 7396 3632 7396 3631 7397 4212 7397 4211 7397 4211 7397 3632 7397 3631 7397 3419 7398 4213 7398 4212 7398 4212 7398 3631 7398 3419 7398 3420 7399 4210 7399 4213 7399 4213 7399 3419 7399 3420 7399 4210 7400 4211 7400 4212 7400 4212 7400 4213 7400 4210 7400 3631 7401 4215 7401 4214 7401 4214 7401 3419 7401 3631 7401 3630 7402 4216 7402 4215 7402 4215 7402 3631 7402 3630 7402 3443 7403 4217 7403 4216 7403 4216 7403 3630 7403 3443 7403 3419 7404 4214 7404 4217 7404 4217 7404 3443 7404 3419 7404 4214 7405 4215 7405 4216 7405 4216 7405 4217 7405 4214 7405 3627 7406 4219 7406 4218 7406 4218 7406 3626 7406 3627 7406 3628 7407 4220 7407 4219 7407 4219 7407 3627 7407 3628 7407 3629 7408 4221 7408 4220 7408 4220 7408 3628 7408 3629 7408 3626 7409 4218 7409 4221 7409 4221 7409 3629 7409 3626 7409 4218 7410 4219 7410 4220 7410 4220 7410 4221 7410 4218 7410 3626 7411 4223 7411 4222 7411 4222 7411 3453 7411 3626 7411 3629 7412 4224 7412 4223 7412 4223 7412 3626 7412 3629 7412 3443 7413 4225 7413 4224 7413 4224 7413 3629 7413 3443 7413 3453 7414 4222 7414 4225 7414 4225 7414 3443 7414 3453 7414 4222 7415 4223 7415 4224 7415 4224 7415 4225 7415 4222 7415 3629 7416 4227 7416 4226 7416 4226 7416 3443 7416 3629 7416 3628 7417 4228 7417 4227 7417 4227 7417 3629 7417 3628 7417 3419 7418 4229 7418 4228 7418 4228 7418 3628 7418 3419 7418 3443 7419 4226 7419 4229 7419 4229 7419 3419 7419 3443 7419 4226 7420 4227 7420 4228 7420 4228 7420 4229 7420 4226 7420 3628 7421 4231 7421 4230 7421 4230 7421 3419 7421 3628 7421 3627 7422 4232 7422 4231 7422 4231 7422 3628 7422 3627 7422 3418 7423 4233 7423 4232 7423 4232 7423 3627 7423 3418 7423 3419 7424 4230 7424 4233 7424 4233 7424 3418 7424 3419 7424 4230 7425 4231 7425 4232 7425 4232 7425 4233 7425 4230 7425 3627 7426 4235 7426 4234 7426 4234 7426 3418 7426 3627 7426 3626 7427 4236 7427 4235 7427 4235 7427 3627 7427 3626 7427 3453 7428 4237 7428 4236 7428 4236 7428 3626 7428 3453 7428 3418 7429 4234 7429 4237 7429 4237 7429 3453 7429 3418 7429 4234 7430 4235 7430 4236 7430 4236 7430 4237 7430 4234 7430 3623 7431 4239 7431 4238 7431 4238 7431 3622 7431 3623 7431 3624 7432 4240 7432 4239 7432 4239 7432 3623 7432 3624 7432 3625 7433 4241 7433 4240 7433 4240 7433 3624 7433 3625 7433 3622 7434 4238 7434 4241 7434 4241 7434 3625 7434 3622 7434 4238 7435 4239 7435 4240 7435 4240 7435 4241 7435 4238 7435 3622 7436 4243 7436 4242 7436 4242 7436 3449 7436 3622 7436 3625 7437 4244 7437 4243 7437 4243 7437 3622 7437 3625 7437 3453 7438 4245 7438 4244 7438 4244 7438 3625 7438 3453 7438 3449 7439 4242 7439 4245 7439 4245 7439 3453 7439 3449 7439 4242 7440 4243 7440 4244 7440 4244 7440 4245 7440 4242 7440 3625 7441 4247 7441 4246 7441 4246 7441 3453 7441 3625 7441 3624 7442 4248 7442 4247 7442 4247 7442 3625 7442 3624 7442 3418 7443 4249 7443 4248 7443 4248 7443 3624 7443 3418 7443 3453 7444 4246 7444 4249 7444 4249 7444 3418 7444 3453 7444 4246 7445 4247 7445 4248 7445 4248 7445 4249 7445 4246 7445 3624 7446 4251 7446 4250 7446 4250 7446 3418 7446 3624 7446 3623 7447 4252 7447 4251 7447 4251 7447 3624 7447 3623 7447 3421 7448 4253 7448 4252 7448 4252 7448 3623 7448 3421 7448 3418 7449 4250 7449 4253 7449 4253 7449 3421 7449 3418 7449 4250 7450 4251 7450 4252 7450 4252 7450 4253 7450 4250 7450 3623 7451 4255 7451 4254 7451 4254 7451 3421 7451 3623 7451 3622 7452 4256 7452 4255 7452 4255 7452 3623 7452 3622 7452 3449 7453 4257 7453 4256 7453 4256 7453 3622 7453 3449 7453 3421 7454 4254 7454 4257 7454 4257 7454 3449 7454 3421 7454 4254 7455 4255 7455 4256 7455 4256 7455 4257 7455 4254 7455 3619 7456 4259 7456 4258 7456 4258 7456 3618 7456 3619 7456 3620 7457 4260 7457 4259 7457 4259 7457 3619 7457 3620 7457 3621 7458 4261 7458 4260 7458 4260 7458 3620 7458 3621 7458 3618 7459 4258 7459 4261 7459 4261 7459 3621 7459 3618 7459 4258 7460 4259 7460 4260 7460 4260 7460 4261 7460 4258 7460 3618 7461 4263 7461 4262 7461 4262 7461 3421 7461 3618 7461 3621 7462 4264 7462 4263 7462 4263 7462 3618 7462 3621 7462 3418 7463 4265 7463 4264 7463 4264 7463 3621 7463 3418 7463 3421 7464 4262 7464 4265 7464 4265 7464 3418 7464 3421 7464 4262 7465 4263 7465 4264 7465 4264 7465 4265 7465 4262 7465 3621 7466 4267 7466 4266 7466 4266 7466 3418 7466 3621 7466 3620 7467 4268 7467 4267 7467 4267 7467 3621 7467 3620 7467 3419 7468 4269 7468 4268 7468 4268 7468 3620 7468 3419 7468 3418 7469 4266 7469 4269 7469 4269 7469 3419 7469 3418 7469 4266 7470 4267 7470 4268 7470 4268 7470 4269 7470 4266 7470 3620 7471 4271 7471 4270 7471 4270 7471 3419 7471 3620 7471 3619 7472 4272 7472 4271 7472 4271 7472 3620 7472 3619 7472 3420 7473 4273 7473 4272 7473 4272 7473 3619 7473 3420 7473 3419 7474 4270 7474 4273 7474 4273 7474 3420 7474 3419 7474 4270 7475 4271 7475 4272 7475 4272 7475 4273 7475 4270 7475 3619 7476 4275 7476 4274 7476 4274 7476 3420 7476 3619 7476 3618 7477 4276 7477 4275 7477 4275 7477 3619 7477 3618 7477 3421 7478 4277 7478 4276 7478 4276 7478 3618 7478 3421 7478 3420 7479 4274 7479 4277 7479 4277 7479 3421 7479 3420 7479 4274 7480 4275 7480 4276 7480 4276 7480 4277 7480 4274 7480 3615 7481 4279 7481 4278 7481 4278 7481 3614 7481 3615 7481 3616 7482 4280 7482 4279 7482 4279 7482 3615 7482 3616 7482 3617 7483 4281 7483 4280 7483 4280 7483 3616 7483 3617 7483 3614 7484 4278 7484 4281 7484 4281 7484 3617 7484 3614 7484 4278 7485 4279 7485 4280 7485 4280 7485 4281 7485 4278 7485 3614 7486 4283 7486 4282 7486 4282 7486 3443 7486 3614 7486 3617 7487 4284 7487 4283 7487 4283 7487 3614 7487 3617 7487 3453 7488 4285 7488 4284 7488 4284 7488 3617 7488 3453 7488 3443 7489 4282 7489 4285 7489 4285 7489 3453 7489 3443 7489 4282 7490 4283 7490 4284 7490 4284 7490 4285 7490 4282 7490 3617 7491 4287 7491 4286 7491 4286 7491 3453 7491 3617 7491 3616 7492 4288 7492 4287 7492 4287 7492 3617 7492 3616 7492 3417 7493 4289 7493 4288 7493 4288 7493 3616 7493 3417 7493 3453 7494 4286 7494 4289 7494 4289 7494 3417 7494 3453 7494 4286 7495 4287 7495 4288 7495 4288 7495 4289 7495 4286 7495 3616 7496 4291 7496 4290 7496 4290 7496 3417 7496 3616 7496 3615 7497 4292 7497 4291 7497 4291 7497 3616 7497 3615 7497 3416 7498 4293 7498 4292 7498 4292 7498 3615 7498 3416 7498 3417 7499 4290 7499 4293 7499 4293 7499 3416 7499 3417 7499 4290 7500 4291 7500 4292 7500 4292 7500 4293 7500 4290 7500 3615 7501 4295 7501 4294 7501 4294 7501 3416 7501 3615 7501 3614 7502 4296 7502 4295 7502 4295 7502 3615 7502 3614 7502 3443 7503 4297 7503 4296 7503 4296 7503 3614 7503 3443 7503 3416 7504 4294 7504 4297 7504 4297 7504 3443 7504 3416 7504 4294 7505 4295 7505 4296 7505 4296 7505 4297 7505 4294 7505 3611 7506 4299 7506 4298 7506 4298 7506 3610 7506 3611 7506 3612 7507 4300 7507 4299 7507 4299 7507 3611 7507 3612 7507 3613 7508 4301 7508 4300 7508 4300 7508 3612 7508 3613 7508 3610 7509 4298 7509 4301 7509 4301 7509 3613 7509 3610 7509 4298 7510 4299 7510 4300 7510 4300 7510 4301 7510 4298 7510 3610 7511 4303 7511 4302 7511 4302 7511 3444 7511 3610 7511 3613 7512 4304 7512 4303 7512 4303 7512 3610 7512 3613 7512 3443 7513 4305 7513 4304 7513 4304 7513 3613 7513 3443 7513 3444 7514 4302 7514 4305 7514 4305 7514 3443 7514 3444 7514 4302 7515 4303 7515 4304 7515 4304 7515 4305 7515 4302 7515 3613 7516 4307 7516 4306 7516 4306 7516 3443 7516 3613 7516 3612 7517 4308 7517 4307 7517 4307 7517 3613 7517 3612 7517 3416 7518 4309 7518 4308 7518 4308 7518 3612 7518 3416 7518 3443 7519 4306 7519 4309 7519 4309 7519 3416 7519 3443 7519 4306 7520 4307 7520 4308 7520 4308 7520 4309 7520 4306 7520 3612 7521 4311 7521 4310 7521 4310 7521 3416 7521 3612 7521 3611 7522 4312 7522 4311 7522 4311 7522 3612 7522 3611 7522 3415 7523 4313 7523 4312 7523 4312 7523 3611 7523 3415 7523 3416 7524 4310 7524 4313 7524 4313 7524 3415 7524 3416 7524 4310 7525 4311 7525 4312 7525 4312 7525 4313 7525 4310 7525 3611 7526 4315 7526 4314 7526 4314 7526 3415 7526 3611 7526 3610 7527 4316 7527 4315 7527 4315 7527 3611 7527 3610 7527 3444 7528 4317 7528 4316 7528 4316 7528 3610 7528 3444 7528 3415 7529 4314 7529 4317 7529 4317 7529 3444 7529 3415 7529 4314 7530 4315 7530 4316 7530 4316 7530 4317 7530 4314 7530 3607 7531 4319 7531 4318 7531 4318 7531 3606 7531 3607 7531 3608 7532 4320 7532 4319 7532 4319 7532 3607 7532 3608 7532 3609 7533 4321 7533 4320 7533 4320 7533 3608 7533 3609 7533 3606 7534 4318 7534 4321 7534 4321 7534 3609 7534 3606 7534 4318 7535 4319 7535 4320 7535 4320 7535 4321 7535 4318 7535 3606 7536 4323 7536 4322 7536 4322 7536 3450 7536 3606 7536 3609 7537 4324 7537 4323 7537 4323 7537 3606 7537 3609 7537 3444 7538 4325 7538 4324 7538 4324 7538 3609 7538 3444 7538 3450 7539 4322 7539 4325 7539 4325 7539 3444 7539 3450 7539 4322 7540 4323 7540 4324 7540 4324 7540 4325 7540 4322 7540 3609 7541 4327 7541 4326 7541 4326 7541 3444 7541 3609 7541 3608 7542 4328 7542 4327 7542 4327 7542 3609 7542 3608 7542 3415 7543 4329 7543 4328 7543 4328 7543 3608 7543 3415 7543 3444 7544 4326 7544 4329 7544 4329 7544 3415 7544 3444 7544 4326 7545 4327 7545 4328 7545 4328 7545 4329 7545 4326 7545 3608 7546 4331 7546 4330 7546 4330 7546 3415 7546 3608 7546 3607 7547 4332 7547 4331 7547 4331 7547 3608 7547 3607 7547 3414 7548 4333 7548 4332 7548 4332 7548 3607 7548 3414 7548 3415 7549 4330 7549 4333 7549 4333 7549 3414 7549 3415 7549 4330 7550 4331 7550 4332 7550 4332 7550 4333 7550 4330 7550 3607 7551 4335 7551 4334 7551 4334 7551 3414 7551 3607 7551 3606 7552 4336 7552 4335 7552 4335 7552 3607 7552 3606 7552 3450 7553 4337 7553 4336 7553 4336 7553 3606 7553 3450 7553 3414 7554 4334 7554 4337 7554 4337 7554 3450 7554 3414 7554 4334 7555 4335 7555 4336 7555 4336 7555 4337 7555 4334 7555 3603 7556 4339 7556 4338 7556 4338 7556 3602 7556 3603 7556 3604 7557 4340 7557 4339 7557 4339 7557 3603 7557 3604 7557 3605 7558 4341 7558 4340 7558 4340 7558 3604 7558 3605 7558 3602 7559 4338 7559 4341 7559 4341 7559 3605 7559 3602 7559 4338 7560 4339 7560 4340 7560 4340 7560 4341 7560 4338 7560 3602 7561 4343 7561 4342 7561 4342 7561 3453 7561 3602 7561 3605 7562 4344 7562 4343 7562 4343 7562 3602 7562 3605 7562 3450 7563 4345 7563 4344 7563 4344 7563 3605 7563 3450 7563 3453 7564 4342 7564 4345 7564 4345 7564 3450 7564 3453 7564 4342 7565 4343 7565 4344 7565 4344 7565 4345 7565 4342 7565 3605 7566 4347 7566 4346 7566 4346 7566 3450 7566 3605 7566 3604 7567 4348 7567 4347 7567 4347 7567 3605 7567 3604 7567 3414 7568 4349 7568 4348 7568 4348 7568 3604 7568 3414 7568 3450 7569 4346 7569 4349 7569 4349 7569 3414 7569 3450 7569 4346 7570 4347 7570 4348 7570 4348 7570 4349 7570 4346 7570 3604 7571 4351 7571 4350 7571 4350 7571 3414 7571 3604 7571 3603 7572 4352 7572 4351 7572 4351 7572 3604 7572 3603 7572 3417 7573 4353 7573 4352 7573 4352 7573 3603 7573 3417 7573 3414 7574 4350 7574 4353 7574 4353 7574 3417 7574 3414 7574 4350 7575 4351 7575 4352 7575 4352 7575 4353 7575 4350 7575 3603 7576 4355 7576 4354 7576 4354 7576 3417 7576 3603 7576 3602 7577 4356 7577 4355 7577 4355 7577 3603 7577 3602 7577 3453 7578 4357 7578 4356 7578 4356 7578 3602 7578 3453 7578 3417 7579 4354 7579 4357 7579 4357 7579 3453 7579 3417 7579 4354 7580 4355 7580 4356 7580 4356 7580 4357 7580 4354 7580 3599 7581 4359 7581 4358 7581 4358 7581 3598 7581 3599 7581 3600 7582 4360 7582 4359 7582 4359 7582 3599 7582 3600 7582 3601 7583 4361 7583 4360 7583 4360 7583 3600 7583 3601 7583 3598 7584 4358 7584 4361 7584 4361 7584 3601 7584 3598 7584 4358 7585 4359 7585 4360 7585 4360 7585 4361 7585 4358 7585 3598 7586 4363 7586 4362 7586 4362 7586 3417 7586 3598 7586 3601 7587 4364 7587 4363 7587 4363 7587 3598 7587 3601 7587 3414 7588 4365 7588 4364 7588 4364 7588 3601 7588 3414 7588 3417 7589 4362 7589 4365 7589 4365 7589 3414 7589 3417 7589 4362 7590 4363 7590 4364 7590 4364 7590 4365 7590 4362 7590 3601 7591 4367 7591 4366 7591 4366 7591 3414 7591 3601 7591 3600 7592 4368 7592 4367 7592 4367 7592 3601 7592 3600 7592 3415 7593 4369 7593 4368 7593 4368 7593 3600 7593 3415 7593 3414 7594 4366 7594 4369 7594 4369 7594 3415 7594 3414 7594 4366 7595 4367 7595 4368 7595 4368 7595 4369 7595 4366 7595 3600 7596 4371 7596 4370 7596 4370 7596 3415 7596 3600 7596 3599 7597 4372 7597 4371 7597 4371 7597 3600 7597 3599 7597 3416 7598 4373 7598 4372 7598 4372 7598 3599 7598 3416 7598 3415 7599 4370 7599 4373 7599 4373 7599 3416 7599 3415 7599 4370 7600 4371 7600 4372 7600 4372 7600 4373 7600 4370 7600 3599 7601 4375 7601 4374 7601 4374 7601 3416 7601 3599 7601 3598 7602 4376 7602 4375 7602 4375 7602 3599 7602 3598 7602 3417 7603 4377 7603 4376 7603 4376 7603 3598 7603 3417 7603 3416 7604 4374 7604 4377 7604 4377 7604 3417 7604 3416 7604 4374 7605 4375 7605 4376 7605 4376 7605 4377 7605 4374 7605 3595 7606 4379 7606 4378 7606 4378 7606 3594 7606 3595 7606 3596 7607 4380 7607 4379 7607 4379 7607 3595 7607 3596 7607 3597 7608 4381 7608 4380 7608 4380 7608 3596 7608 3597 7608 3594 7609 4378 7609 4381 7609 4381 7609 3597 7609 3594 7609 4378 7610 4379 7610 4380 7610 4380 7610 4381 7610 4378 7610 3594 7611 4383 7611 4382 7611 4382 7611 3444 7611 3594 7611 3597 7612 4384 7612 4383 7612 4383 7612 3594 7612 3597 7612 3450 7613 4385 7613 4384 7613 4384 7613 3597 7613 3450 7613 3444 7614 4382 7614 4385 7614 4385 7614 3450 7614 3444 7614 4382 7615 4383 7615 4384 7615 4384 7615 4385 7615 4382 7615 3597 7616 4387 7616 4386 7616 4386 7616 3450 7616 3597 7616 3596 7617 4388 7617 4387 7617 4387 7617 3597 7617 3596 7617 3413 7618 4389 7618 4388 7618 4388 7618 3596 7618 3413 7618 3450 7619 4386 7619 4389 7619 4389 7619 3413 7619 3450 7619 4386 7620 4387 7620 4388 7620 4388 7620 4389 7620 4386 7620 3596 7621 4391 7621 4390 7621 4390 7621 3413 7621 3596 7621 3595 7622 4392 7622 4391 7622 4391 7622 3596 7622 3595 7622 3412 7623 4393 7623 4392 7623 4392 7623 3595 7623 3412 7623 3413 7624 4390 7624 4393 7624 4393 7624 3412 7624 3413 7624 4390 7625 4391 7625 4392 7625 4392 7625 4393 7625 4390 7625 3595 7626 4395 7626 4394 7626 4394 7626 3412 7626 3595 7626 3594 7627 4396 7627 4395 7627 4395 7627 3595 7627 3594 7627 3444 7628 4397 7628 4396 7628 4396 7628 3594 7628 3444 7628 3412 7629 4394 7629 4397 7629 4397 7629 3444 7629 3412 7629 4394 7630 4395 7630 4396 7630 4396 7630 4397 7630 4394 7630 3591 7631 4399 7631 4398 7631 4398 7631 3590 7631 3591 7631 3592 7632 4400 7632 4399 7632 4399 7632 3591 7632 3592 7632 3593 7633 4401 7633 4400 7633 4400 7633 3592 7633 3593 7633 3590 7634 4398 7634 4401 7634 4401 7634 3593 7634 3590 7634 4398 7635 4399 7635 4400 7635 4400 7635 4401 7635 4398 7635 3590 7636 4403 7636 4402 7636 4402 7636 3445 7636 3590 7636 3593 7637 4404 7637 4403 7637 4403 7637 3590 7637 3593 7637 3444 7638 4405 7638 4404 7638 4404 7638 3593 7638 3444 7638 3445 7639 4402 7639 4405 7639 4405 7639 3444 7639 3445 7639 4402 7640 4403 7640 4404 7640 4404 7640 4405 7640 4402 7640 3593 7641 4407 7641 4406 7641 4406 7641 3444 7641 3593 7641 3592 7642 4408 7642 4407 7642 4407 7642 3593 7642 3592 7642 3412 7643 4409 7643 4408 7643 4408 7643 3592 7643 3412 7643 3444 7644 4406 7644 4409 7644 4409 7644 3412 7644 3444 7644 4406 7645 4407 7645 4408 7645 4408 7645 4409 7645 4406 7645 3592 7646 4411 7646 4410 7646 4410 7646 3412 7646 3592 7646 3591 7647 4412 7647 4411 7647 4411 7647 3592 7647 3591 7647 3411 7648 4413 7648 4412 7648 4412 7648 3591 7648 3411 7648 3412 7649 4410 7649 4413 7649 4413 7649 3411 7649 3412 7649 4410 7650 4411 7650 4412 7650 4412 7650 4413 7650 4410 7650 3591 7651 4415 7651 4414 7651 4414 7651 3411 7651 3591 7651 3590 7652 4416 7652 4415 7652 4415 7652 3591 7652 3590 7652 3445 7653 4417 7653 4416 7653 4416 7653 3590 7653 3445 7653 3411 7654 4414 7654 4417 7654 4417 7654 3445 7654 3411 7654 4414 7655 4415 7655 4416 7655 4416 7655 4417 7655 4414 7655 3587 7656 4419 7656 4418 7656 4418 7656 3586 7656 3587 7656 3588 7657 4420 7657 4419 7657 4419 7657 3587 7657 3588 7657 3589 7658 4421 7658 4420 7658 4420 7658 3588 7658 3589 7658 3586 7659 4418 7659 4421 7659 4421 7659 3589 7659 3586 7659 4418 7660 4419 7660 4420 7660 4420 7660 4421 7660 4418 7660 3586 7661 4423 7661 4422 7661 4422 7661 3449 7661 3586 7661 3589 7662 4424 7662 4423 7662 4423 7662 3586 7662 3589 7662 3445 7663 4425 7663 4424 7663 4424 7663 3589 7663 3445 7663 3449 7664 4422 7664 4425 7664 4425 7664 3445 7664 3449 7664 4422 7665 4423 7665 4424 7665 4424 7665 4425 7665 4422 7665 3589 7666 4427 7666 4426 7666 4426 7666 3445 7666 3589 7666 3588 7667 4428 7667 4427 7667 4427 7667 3589 7667 3588 7667 3411 7668 4429 7668 4428 7668 4428 7668 3588 7668 3411 7668 3445 7669 4426 7669 4429 7669 4429 7669 3411 7669 3445 7669 4426 7670 4427 7670 4428 7670 4428 7670 4429 7670 4426 7670 3588 7671 4431 7671 4430 7671 4430 7671 3411 7671 3588 7671 3587 7672 4432 7672 4431 7672 4431 7672 3588 7672 3587 7672 3410 7673 4433 7673 4432 7673 4432 7673 3587 7673 3410 7673 3411 7674 4430 7674 4433 7674 4433 7674 3410 7674 3411 7674 4430 7675 4431 7675 4432 7675 4432 7675 4433 7675 4430 7675 3587 7676 4435 7676 4434 7676 4434 7676 3410 7676 3587 7676 3586 7677 4436 7677 4435 7677 4435 7677 3587 7677 3586 7677 3449 7678 4437 7678 4436 7678 4436 7678 3586 7678 3449 7678 3410 7679 4434 7679 4437 7679 4437 7679 3449 7679 3410 7679 4434 7680 4435 7680 4436 7680 4436 7680 4437 7680 4434 7680 3583 7681 4439 7681 4438 7681 4438 7681 3582 7681 3583 7681 3584 7682 4440 7682 4439 7682 4439 7682 3583 7682 3584 7682 3585 7683 4441 7683 4440 7683 4440 7683 3584 7683 3585 7683 3582 7684 4438 7684 4441 7684 4441 7684 3585 7684 3582 7684 4438 7685 4439 7685 4440 7685 4440 7685 4441 7685 4438 7685 3582 7686 4443 7686 4442 7686 4442 7686 3450 7686 3582 7686 3585 7687 4444 7687 4443 7687 4443 7687 3582 7687 3585 7687 3449 7688 4445 7688 4444 7688 4444 7688 3585 7688 3449 7688 3450 7689 4442 7689 4445 7689 4445 7689 3449 7689 3450 7689 4442 7690 4443 7690 4444 7690 4444 7690 4445 7690 4442 7690 3585 7691 4447 7691 4446 7691 4446 7691 3449 7691 3585 7691 3584 7692 4448 7692 4447 7692 4447 7692 3585 7692 3584 7692 3410 7693 4449 7693 4448 7693 4448 7693 3584 7693 3410 7693 3449 7694 4446 7694 4449 7694 4449 7694 3410 7694 3449 7694 4446 7695 4447 7695 4448 7695 4448 7695 4449 7695 4446 7695 3584 7696 4451 7696 4450 7696 4450 7696 3410 7696 3584 7696 3583 7697 4452 7697 4451 7697 4451 7697 3584 7697 3583 7697 3413 7698 4453 7698 4452 7698 4452 7698 3583 7698 3413 7698 3410 7699 4450 7699 4453 7699 4453 7699 3413 7699 3410 7699 4450 7700 4451 7700 4452 7700 4452 7700 4453 7700 4450 7700 3583 7701 4455 7701 4454 7701 4454 7701 3413 7701 3583 7701 3582 7702 4456 7702 4455 7702 4455 7702 3583 7702 3582 7702 3450 7703 4457 7703 4456 7703 4456 7703 3582 7703 3450 7703 3413 7704 4454 7704 4457 7704 4457 7704 3450 7704 3413 7704 4454 7705 4455 7705 4456 7705 4456 7705 4457 7705 4454 7705 3579 7706 4459 7706 4458 7706 4458 7706 3578 7706 3579 7706 3580 7707 4460 7707 4459 7707 4459 7707 3579 7707 3580 7707 3581 7708 4461 7708 4460 7708 4460 7708 3580 7708 3581 7708 3578 7709 4458 7709 4461 7709 4461 7709 3581 7709 3578 7709 4458 7710 4459 7710 4460 7710 4460 7710 4461 7710 4458 7710 3578 7711 4463 7711 4462 7711 4462 7711 3413 7711 3578 7711 3581 7712 4464 7712 4463 7712 4463 7712 3578 7712 3581 7712 3410 7713 4465 7713 4464 7713 4464 7713 3581 7713 3410 7713 3413 7714 4462 7714 4465 7714 4465 7714 3410 7714 3413 7714 4462 7715 4463 7715 4464 7715 4464 7715 4465 7715 4462 7715 3581 7716 4467 7716 4466 7716 4466 7716 3410 7716 3581 7716 3580 7717 4468 7717 4467 7717 4467 7717 3581 7717 3580 7717 3411 7718 4469 7718 4468 7718 4468 7718 3580 7718 3411 7718 3410 7719 4466 7719 4469 7719 4469 7719 3411 7719 3410 7719 4466 7720 4467 7720 4468 7720 4468 7720 4469 7720 4466 7720 3580 7721 4471 7721 4470 7721 4470 7721 3411 7721 3580 7721 3579 7722 4472 7722 4471 7722 4471 7722 3580 7722 3579 7722 3412 7723 4473 7723 4472 7723 4472 7723 3579 7723 3412 7723 3411 7724 4470 7724 4473 7724 4473 7724 3412 7724 3411 7724 4470 7725 4471 7725 4472 7725 4472 7725 4473 7725 4470 7725 3579 7726 4475 7726 4474 7726 4474 7726 3412 7726 3579 7726 3578 7727 4476 7727 4475 7727 4475 7727 3579 7727 3578 7727 3413 7728 4477 7728 4476 7728 4476 7728 3578 7728 3413 7728 3412 7729 4474 7729 4477 7729 4477 7729 3413 7729 3412 7729 4474 7730 4475 7730 4476 7730 4476 7730 4477 7730 4474 7730 3575 7731 4479 7731 4478 7731 4478 7731 3574 7731 3575 7731 3576 7732 4480 7732 4479 7732 4479 7732 3575 7732 3576 7732 3577 7733 4481 7733 4480 7733 4480 7733 3576 7733 3577 7733 3574 7734 4478 7734 4481 7734 4481 7734 3577 7734 3574 7734 4478 7735 4479 7735 4480 7735 4480 7735 4481 7735 4478 7735 3574 7736 4483 7736 4482 7736 4482 7736 3447 7736 3574 7736 3577 7737 4484 7737 4483 7737 4483 7737 3574 7737 3577 7737 3448 7738 4485 7738 4484 7738 4484 7738 3577 7738 3448 7738 3447 7739 4482 7739 4485 7739 4485 7739 3448 7739 3447 7739 4482 7740 4483 7740 4484 7740 4484 7740 4485 7740 4482 7740 3577 7741 4487 7741 4486 7741 4486 7741 3448 7741 3577 7741 3576 7742 4488 7742 4487 7742 4487 7742 3577 7742 3576 7742 3409 7743 4489 7743 4488 7743 4488 7743 3576 7743 3409 7743 3448 7744 4486 7744 4489 7744 4489 7744 3409 7744 3448 7744 4486 7745 4487 7745 4488 7745 4488 7745 4489 7745 4486 7745 3576 7746 4491 7746 4490 7746 4490 7746 3409 7746 3576 7746 3575 7747 4492 7747 4491 7747 4491 7747 3576 7747 3575 7747 3408 7748 4493 7748 4492 7748 4492 7748 3575 7748 3408 7748 3409 7749 4490 7749 4493 7749 4493 7749 3408 7749 3409 7749 4490 7750 4491 7750 4492 7750 4492 7750 4493 7750 4490 7750 3575 7751 4495 7751 4494 7751 4494 7751 3408 7751 3575 7751 3574 7752 4496 7752 4495 7752 4495 7752 3575 7752 3574 7752 3447 7753 4497 7753 4496 7753 4496 7753 3574 7753 3447 7753 3408 7754 4494 7754 4497 7754 4497 7754 3447 7754 3408 7754 4494 7755 4495 7755 4496 7755 4496 7755 4497 7755 4494 7755 3571 7756 4499 7756 4498 7756 4498 7756 3570 7756 3571 7756 3572 7757 4500 7757 4499 7757 4499 7757 3571 7757 3572 7757 3573 7758 4501 7758 4500 7758 4500 7758 3572 7758 3573 7758 3570 7759 4498 7759 4501 7759 4501 7759 3573 7759 3570 7759 4498 7760 4499 7760 4500 7760 4500 7760 4501 7760 4498 7760 3570 7761 4503 7761 4502 7761 4502 7761 3446 7761 3570 7761 3573 7762 4504 7762 4503 7762 4503 7762 3570 7762 3573 7762 3447 7763 4505 7763 4504 7763 4504 7763 3573 7763 3447 7763 3446 7764 4502 7764 4505 7764 4505 7764 3447 7764 3446 7764 4502 7765 4503 7765 4504 7765 4504 7765 4505 7765 4502 7765 3573 7766 4507 7766 4506 7766 4506 7766 3447 7766 3573 7766 3572 7767 4508 7767 4507 7767 4507 7767 3573 7767 3572 7767 3408 7768 4509 7768 4508 7768 4508 7768 3572 7768 3408 7768 3447 7769 4506 7769 4509 7769 4509 7769 3408 7769 3447 7769 4506 7770 4507 7770 4508 7770 4508 7770 4509 7770 4506 7770 3572 7771 4511 7771 4510 7771 4510 7771 3408 7771 3572 7771 3571 7772 4512 7772 4511 7772 4511 7772 3572 7772 3571 7772 3407 7773 4513 7773 4512 7773 4512 7773 3571 7773 3407 7773 3408 7774 4510 7774 4513 7774 4513 7774 3407 7774 3408 7774 4510 7775 4511 7775 4512 7775 4512 7775 4513 7775 4510 7775 3571 7776 4515 7776 4514 7776 4514 7776 3407 7776 3571 7776 3570 7777 4516 7777 4515 7777 4515 7777 3571 7777 3570 7777 3446 7778 4517 7778 4516 7778 4516 7778 3570 7778 3446 7778 3407 7779 4514 7779 4517 7779 4517 7779 3446 7779 3407 7779 4514 7780 4515 7780 4516 7780 4516 7780 4517 7780 4514 7780 3567 7781 4519 7781 4518 7781 4518 7781 3566 7781 3567 7781 3568 7782 4520 7782 4519 7782 4519 7782 3567 7782 3568 7782 3569 7783 4521 7783 4520 7783 4520 7783 3568 7783 3569 7783 3566 7784 4518 7784 4521 7784 4521 7784 3569 7784 3566 7784 4518 7785 4519 7785 4520 7785 4520 7785 4521 7785 4518 7785 3566 7786 4523 7786 4522 7786 4522 7786 3448 7786 3566 7786 3569 7787 4524 7787 4523 7787 4523 7787 3566 7787 3569 7787 3446 7788 4525 7788 4524 7788 4524 7788 3569 7788 3446 7788 3448 7789 4522 7789 4525 7789 4525 7789 3446 7789 3448 7789 4522 7790 4523 7790 4524 7790 4524 7790 4525 7790 4522 7790 3569 7791 4527 7791 4526 7791 4526 7791 3446 7791 3569 7791 3568 7792 4528 7792 4527 7792 4527 7792 3569 7792 3568 7792 3407 7793 4529 7793 4528 7793 4528 7793 3568 7793 3407 7793 3446 7794 4526 7794 4529 7794 4529 7794 3407 7794 3446 7794 4526 7795 4527 7795 4528 7795 4528 7795 4529 7795 4526 7795 3568 7796 4531 7796 4530 7796 4530 7796 3407 7796 3568 7796 3567 7797 4532 7797 4531 7797 4531 7797 3568 7797 3567 7797 3409 7798 4533 7798 4532 7798 4532 7798 3567 7798 3409 7798 3407 7799 4530 7799 4533 7799 4533 7799 3409 7799 3407 7799 4530 7800 4531 7800 4532 7800 4532 7800 4533 7800 4530 7800 3567 7801 4535 7801 4534 7801 4534 7801 3409 7801 3567 7801 3566 7802 4536 7802 4535 7802 4535 7802 3567 7802 3566 7802 3448 7803 4537 7803 4536 7803 4536 7803 3566 7803 3448 7803 3409 7804 4534 7804 4537 7804 4537 7804 3448 7804 3409 7804 4534 7805 4535 7805 4536 7805 4536 7805 4537 7805 4534 7805 3564 7806 4539 7806 4538 7806 4538 7806 3563 7806 3564 7806 3565 7807 4540 7807 4539 7807 4539 7807 3564 7807 3565 7807 3563 7808 4538 7808 4540 7808 4540 7808 3565 7808 3563 7808 4538 7809 4539 7809 4540 7809 3563 7810 4542 7810 4541 7810 4541 7810 3409 7810 3563 7810 3565 7811 4543 7811 4542 7811 4542 7811 3563 7811 3565 7811 3407 7812 4544 7812 4543 7812 4543 7812 3565 7812 3407 7812 3409 7813 4541 7813 4544 7813 4544 7813 3407 7813 3409 7813 4541 7814 4542 7814 4543 7814 4543 7814 4544 7814 4541 7814 3565 7815 4546 7815 4545 7815 4545 7815 3407 7815 3565 7815 3564 7816 4547 7816 4546 7816 4546 7816 3565 7816 3564 7816 3408 7817 4548 7817 4547 7817 4547 7817 3564 7817 3408 7817 3407 7818 4545 7818 4548 7818 4548 7818 3408 7818 3407 7818 4545 7819 4546 7819 4547 7819 4547 7819 4548 7819 4545 7819 3564 7820 4550 7820 4549 7820 4549 7820 3408 7820 3564 7820 3563 7821 4551 7821 4550 7821 4550 7821 3564 7821 3563 7821 3409 7822 4552 7822 4551 7822 4551 7822 3563 7822 3409 7822 3408 7823 4549 7823 4552 7823 4552 7823 3409 7823 3408 7823 4549 7824 4550 7824 4551 7824 4551 7824 4552 7824 4549 7824 3560 7825 4554 7825 4553 7825 4553 7825 3559 7825 3560 7825 3561 7826 4555 7826 4554 7826 4554 7826 3560 7826 3561 7826 3562 7827 4556 7827 4555 7827 4555 7827 3561 7827 3562 7827 3559 7828 4553 7828 4556 7828 4556 7828 3562 7828 3559 7828 4553 7829 4554 7829 4555 7829 4555 7829 4556 7829 4553 7829 3559 7830 4558 7830 4557 7830 4557 7830 3448 7830 3559 7830 3562 7831 4559 7831 4558 7831 4558 7831 3559 7831 3562 7831 3492 7832 4560 7832 4559 7832 4559 7832 3562 7832 3492 7832 3448 7833 4557 7833 4560 7833 4560 7833 3492 7833 3448 7833 4557 7834 4558 7834 4559 7834 4559 7834 4560 7834 4557 7834 3562 7835 4562 7835 4561 7835 4561 7835 3492 7835 3562 7835 3561 7836 4563 7836 4562 7836 4562 7836 3562 7836 3561 7836 3406 7837 4564 7837 4563 7837 4563 7837 3561 7837 3406 7837 3492 7838 4561 7838 4564 7838 4564 7838 3406 7838 3492 7838 4561 7839 4562 7839 4563 7839 4563 7839 4564 7839 4561 7839 3561 7840 4566 7840 4565 7840 4565 7840 3406 7840 3561 7840 3560 7841 4567 7841 4566 7841 4566 7841 3561 7841 3560 7841 3405 7842 4568 7842 4567 7842 4567 7842 3560 7842 3405 7842 3406 7843 4565 7843 4568 7843 4568 7843 3405 7843 3406 7843 4565 7844 4566 7844 4567 7844 4567 7844 4568 7844 4565 7844 3560 7845 4570 7845 4569 7845 4569 7845 3405 7845 3560 7845 3559 7846 4571 7846 4570 7846 4570 7846 3560 7846 3559 7846 3448 7847 4572 7847 4571 7847 4571 7847 3559 7847 3448 7847 3405 7848 4569 7848 4572 7848 4572 7848 3448 7848 3405 7848 4569 7849 4570 7849 4571 7849 4571 7849 4572 7849 4569 7849 3556 7850 4574 7850 4573 7850 4573 7850 3555 7850 3556 7850 3557 7851 4575 7851 4574 7851 4574 7851 3556 7851 3557 7851 3558 7852 4576 7852 4575 7852 4575 7852 3557 7852 3558 7852 3555 7853 4573 7853 4576 7853 4576 7853 3558 7853 3555 7853 4573 7854 4574 7854 4575 7854 4575 7854 4576 7854 4573 7854 3555 7855 4578 7855 4577 7855 4577 7855 3446 7855 3555 7855 3558 7856 4579 7856 4578 7856 4578 7856 3555 7856 3558 7856 3448 7857 4580 7857 4579 7857 4579 7857 3558 7857 3448 7857 3446 7858 4577 7858 4580 7858 4580 7858 3448 7858 3446 7858 4577 7859 4578 7859 4579 7859 4579 7859 4580 7859 4577 7859 3558 7860 4582 7860 4581 7860 4581 7860 3448 7860 3558 7860 3557 7861 4583 7861 4582 7861 4582 7861 3558 7861 3557 7861 3405 7862 4584 7862 4583 7862 4583 7862 3557 7862 3405 7862 3448 7863 4581 7863 4584 7863 4584 7863 3405 7863 3448 7863 4581 7864 4582 7864 4583 7864 4583 7864 4584 7864 4581 7864 3557 7865 4586 7865 4585 7865 4585 7865 3405 7865 3557 7865 3556 7866 4587 7866 4586 7866 4586 7866 3557 7866 3556 7866 3404 7867 4588 7867 4587 7867 4587 7867 3556 7867 3404 7867 3405 7868 4585 7868 4588 7868 4588 7868 3404 7868 3405 7868 4585 7869 4586 7869 4587 7869 4587 7869 4588 7869 4585 7869 3556 7870 4590 7870 4589 7870 4589 7870 3404 7870 3556 7870 3555 7871 4591 7871 4590 7871 4590 7871 3556 7871 3555 7871 3446 7872 4592 7872 4591 7872 4591 7872 3555 7872 3446 7872 3404 7873 4589 7873 4592 7873 4592 7873 3446 7873 3404 7873 4589 7874 4590 7874 4591 7874 4591 7874 4592 7874 4589 7874 3552 7875 4594 7875 4593 7875 4593 7875 3551 7875 3552 7875 3553 7876 4595 7876 4594 7876 4594 7876 3552 7876 3553 7876 3554 7877 4596 7877 4595 7877 4595 7877 3553 7877 3554 7877 3551 7878 4593 7878 4596 7878 4596 7878 3554 7878 3551 7878 4593 7879 4594 7879 4595 7879 4595 7879 4596 7879 4593 7879 3551 7880 4598 7880 4597 7880 4597 7880 3495 7880 3551 7880 3554 7881 4599 7881 4598 7881 4598 7881 3551 7881 3554 7881 3446 7882 4600 7882 4599 7882 4599 7882 3554 7882 3446 7882 3495 7883 4597 7883 4600 7883 4600 7883 3446 7883 3495 7883 4597 7884 4598 7884 4599 7884 4599 7884 4600 7884 4597 7884 3554 7885 4602 7885 4601 7885 4601 7885 3446 7885 3554 7885 3553 7886 4603 7886 4602 7886 4602 7886 3554 7886 3553 7886 3404 7887 4604 7887 4603 7887 4603 7887 3553 7887 3404 7887 3446 7888 4601 7888 4604 7888 4604 7888 3404 7888 3446 7888 4601 7889 4602 7889 4603 7889 4603 7889 4604 7889 4601 7889 3553 7890 4606 7890 4605 7890 4605 7890 3404 7890 3553 7890 3552 7891 4607 7891 4606 7891 4606 7891 3553 7891 3552 7891 3403 7892 4608 7892 4607 7892 4607 7892 3552 7892 3403 7892 3404 7893 4605 7893 4608 7893 4608 7893 3403 7893 3404 7893 4605 7894 4606 7894 4607 7894 4607 7894 4608 7894 4605 7894 3552 7895 4610 7895 4609 7895 4609 7895 3403 7895 3552 7895 3551 7896 4611 7896 4610 7896 4610 7896 3552 7896 3551 7896 3495 7897 4612 7897 4611 7897 4611 7897 3551 7897 3495 7897 3403 7898 4609 7898 4612 7898 4612 7898 3495 7898 3403 7898 4609 7899 4610 7899 4611 7899 4611 7899 4612 7899 4609 7899 3548 7900 4614 7900 4613 7900 4613 7900 3547 7900 3548 7900 3549 7901 4615 7901 4614 7901 4614 7901 3548 7901 3549 7901 3550 7902 4616 7902 4615 7902 4615 7902 3549 7902 3550 7902 3547 7903 4613 7903 4616 7903 4616 7903 3550 7903 3547 7903 4613 7904 4614 7904 4615 7904 4615 7904 4616 7904 4613 7904 3547 7905 4618 7905 4617 7905 4617 7905 3492 7905 3547 7905 3550 7906 4619 7906 4618 7906 4618 7906 3547 7906 3550 7906 3495 7907 4620 7907 4619 7907 4619 7907 3550 7907 3495 7907 3492 7908 4617 7908 4620 7908 4620 7908 3495 7908 3492 7908 4617 7909 4618 7909 4619 7909 4619 7909 4620 7909 4617 7909 3550 7910 4622 7910 4621 7910 4621 7910 3495 7910 3550 7910 3549 7911 4623 7911 4622 7911 4622 7911 3550 7911 3549 7911 3403 7912 4624 7912 4623 7912 4623 7912 3549 7912 3403 7912 3495 7913 4621 7913 4624 7913 4624 7913 3403 7913 3495 7913 4621 7914 4622 7914 4623 7914 4623 7914 4624 7914 4621 7914 3549 7915 4626 7915 4625 7915 4625 7915 3403 7915 3549 7915 3548 7916 4627 7916 4626 7916 4626 7916 3549 7916 3548 7916 3406 7917 4628 7917 4627 7917 4627 7917 3548 7917 3406 7917 3403 7918 4625 7918 4628 7918 4628 7918 3406 7918 3403 7918 4625 7919 4626 7919 4627 7919 4627 7919 4628 7919 4625 7919 3548 7920 4630 7920 4629 7920 4629 7920 3406 7920 3548 7920 3547 7921 4631 7921 4630 7921 4630 7921 3548 7921 3547 7921 3492 7922 4632 7922 4631 7922 4631 7922 3547 7922 3492 7922 3406 7923 4629 7923 4632 7923 4632 7923 3492 7923 3406 7923 4629 7924 4630 7924 4631 7924 4631 7924 4632 7924 4629 7924 3544 7925 4634 7925 4633 7925 4633 7925 3543 7925 3544 7925 3545 7926 4635 7926 4634 7926 4634 7926 3544 7926 3545 7926 3546 7927 4636 7927 4635 7927 4635 7927 3545 7927 3546 7927 3543 7928 4633 7928 4636 7928 4636 7928 3546 7928 3543 7928 4633 7929 4634 7929 4635 7929 4635 7929 4636 7929 4633 7929 3543 7930 4638 7930 4637 7930 4637 7930 3406 7930 3543 7930 3546 7931 4639 7931 4638 7931 4638 7931 3543 7931 3546 7931 3403 7932 4640 7932 4639 7932 4639 7932 3546 7932 3403 7932 3406 7933 4637 7933 4640 7933 4640 7933 3403 7933 3406 7933 4637 7934 4638 7934 4639 7934 4639 7934 4640 7934 4637 7934 3546 7935 4642 7935 4641 7935 4641 7935 3403 7935 3546 7935 3545 7936 4643 7936 4642 7936 4642 7936 3546 7936 3545 7936 3404 7937 4644 7937 4643 7937 4643 7937 3545 7937 3404 7937 3403 7938 4641 7938 4644 7938 4644 7938 3404 7938 3403 7938 4641 7939 4642 7939 4643 7939 4643 7939 4644 7939 4641 7939 3545 7940 4646 7940 4645 7940 4645 7940 3404 7940 3545 7940 3544 7941 4647 7941 4646 7941 4646 7941 3545 7941 3544 7941 3405 7942 4648 7942 4647 7942 4647 7942 3544 7942 3405 7942 3404 7943 4645 7943 4648 7943 4648 7943 3405 7943 3404 7943 4645 7944 4646 7944 4647 7944 4647 7944 4648 7944 4645 7944 3544 7945 4650 7945 4649 7945 4649 7945 3405 7945 3544 7945 3543 7946 4651 7946 4650 7946 4650 7946 3544 7946 3543 7946 3406 7947 4652 7947 4651 7947 4651 7947 3543 7947 3406 7947 3405 7948 4649 7948 4652 7948 4652 7948 3406 7948 3405 7948 4649 7949 4650 7949 4651 7949 4651 7949 4652 7949 4649 7949 3540 7950 4654 7950 4653 7950 4653 7950 3539 7950 3540 7950 3541 7951 4655 7951 4654 7951 4654 7951 3540 7951 3541 7951 3542 7952 4656 7952 4655 7952 4655 7952 3541 7952 3542 7952 3539 7953 4653 7953 4656 7953 4656 7953 3542 7953 3539 7953 4653 7954 4654 7954 4655 7954 4655 7954 4656 7954 4653 7954 3539 7955 4658 7955 4657 7955 4657 7955 3446 7955 3539 7955 3542 7956 4659 7956 4658 7956 4658 7956 3539 7956 3542 7956 3495 7957 4660 7957 4659 7957 4659 7957 3542 7957 3495 7957 3446 7958 4657 7958 4660 7958 4660 7958 3495 7958 3446 7958 4657 7959 4658 7959 4659 7959 4659 7959 4660 7959 4657 7959 3542 7960 4662 7960 4661 7960 4661 7960 3495 7960 3542 7960 3541 7961 4663 7961 4662 7961 4662 7961 3542 7961 3541 7961 3402 7962 4664 7962 4663 7962 4663 7962 3541 7962 3402 7962 3495 7963 4661 7963 4664 7963 4664 7963 3402 7963 3495 7963 4661 7964 4662 7964 4663 7964 4663 7964 4664 7964 4661 7964 3541 7965 4666 7965 4665 7965 4665 7965 3402 7965 3541 7965 3540 7966 4667 7966 4666 7966 4666 7966 3541 7966 3540 7966 3401 7967 4668 7967 4667 7967 4667 7967 3540 7967 3401 7967 3402 7968 4665 7968 4668 7968 4668 7968 3401 7968 3402 7968 4665 7969 4666 7969 4667 7969 4667 7969 4668 7969 4665 7969 3540 7970 4670 7970 4669 7970 4669 7970 3401 7970 3540 7970 3539 7971 4671 7971 4670 7971 4670 7971 3540 7971 3539 7971 3446 7972 4672 7972 4671 7972 4671 7972 3539 7972 3446 7972 3401 7973 4669 7973 4672 7973 4672 7973 3446 7973 3401 7973 4669 7974 4670 7974 4671 7974 4671 7974 4672 7974 4669 7974 3536 7975 4674 7975 4673 7975 4673 7975 3535 7975 3536 7975 3537 7976 4675 7976 4674 7976 4674 7976 3536 7976 3537 7976 3538 7977 4676 7977 4675 7977 4675 7977 3537 7977 3538 7977 3535 7978 4673 7978 4676 7978 4676 7978 3538 7978 3535 7978 4673 7979 4674 7979 4675 7979 4675 7979 4676 7979 4673 7979 3535 7980 4678 7980 4677 7980 4677 7980 3447 7980 3535 7980 3538 7981 4679 7981 4678 7981 4678 7981 3535 7981 3538 7981 3446 7982 4680 7982 4679 7982 4679 7982 3538 7982 3446 7982 3447 7983 4677 7983 4680 7983 4680 7983 3446 7983 3447 7983 4677 7984 4678 7984 4679 7984 4679 7984 4680 7984 4677 7984 3538 7985 4682 7985 4681 7985 4681 7985 3446 7985 3538 7985 3537 7986 4683 7986 4682 7986 4682 7986 3538 7986 3537 7986 3401 7987 4684 7987 4683 7987 4683 7987 3537 7987 3401 7987 3446 7988 4681 7988 4684 7988 4684 7988 3401 7988 3446 7988 4681 7989 4682 7989 4683 7989 4683 7989 4684 7989 4681 7989 3537 7990 4686 7990 4685 7990 4685 7990 3401 7990 3537 7990 3536 7991 4687 7991 4686 7991 4686 7991 3537 7991 3536 7991 3400 7992 4688 7992 4687 7992 4687 7992 3536 7992 3400 7992 3401 7993 4685 7993 4688 7993 4688 7993 3400 7993 3401 7993 4685 7994 4686 7994 4687 7994 4687 7994 4688 7994 4685 7994 3536 7995 4690 7995 4689 7995 4689 7995 3400 7995 3536 7995 3535 7996 4691 7996 4690 7996 4690 7996 3536 7996 3535 7996 3447 7997 4692 7997 4691 7997 4691 7997 3535 7997 3447 7997 3400 7998 4689 7998 4692 7998 4692 7998 3447 7998 3400 7998 4689 7999 4690 7999 4691 7999 4691 7999 4692 7999 4689 7999 3532 8000 4694 8000 4693 8000 4693 8000 3531 8000 3532 8000 3533 8001 4695 8001 4694 8001 4694 8001 3532 8001 3533 8001 3534 8002 4696 8002 4695 8002 4695 8002 3533 8002 3534 8002 3531 8003 4693 8003 4696 8003 4696 8003 3534 8003 3531 8003 4693 8004 4694 8004 4695 8004 4695 8004 4696 8004 4693 8004 3531 8005 4698 8005 4697 8005 4697 8005 3491 8005 3531 8005 3534 8006 4699 8006 4698 8006 4698 8006 3531 8006 3534 8006 3447 8007 4700 8007 4699 8007 4699 8007 3534 8007 3447 8007 3491 8008 4697 8008 4700 8008 4700 8008 3447 8008 3491 8008 4697 8009 4698 8009 4699 8009 4699 8009 4700 8009 4697 8009 3534 8010 4702 8010 4701 8010 4701 8010 3447 8010 3534 8010 3533 8011 4703 8011 4702 8011 4702 8011 3534 8011 3533 8011 3400 8012 4704 8012 4703 8012 4703 8012 3533 8012 3400 8012 3447 8013 4701 8013 4704 8013 4704 8013 3400 8013 3447 8013 4701 8014 4702 8014 4703 8014 4703 8014 4704 8014 4701 8014 3533 8015 4706 8015 4705 8015 4705 8015 3400 8015 3533 8015 3532 8016 4707 8016 4706 8016 4706 8016 3533 8016 3532 8016 3399 8017 4708 8017 4707 8017 4707 8017 3532 8017 3399 8017 3400 8018 4705 8018 4708 8018 4708 8018 3399 8018 3400 8018 4705 8019 4706 8019 4707 8019 4707 8019 4708 8019 4705 8019 3532 8020 4710 8020 4709 8020 4709 8020 3399 8020 3532 8020 3531 8021 4711 8021 4710 8021 4710 8021 3532 8021 3531 8021 3491 8022 4712 8022 4711 8022 4711 8022 3531 8022 3491 8022 3399 8023 4709 8023 4712 8023 4712 8023 3491 8023 3399 8023 4709 8024 4710 8024 4711 8024 4711 8024 4712 8024 4709 8024 3528 8025 4714 8025 4713 8025 4713 8025 3527 8025 3528 8025 3529 8026 4715 8026 4714 8026 4714 8026 3528 8026 3529 8026 3530 8027 4716 8027 4715 8027 4715 8027 3529 8027 3530 8027 3527 8028 4713 8028 4716 8028 4716 8028 3530 8028 3527 8028 4713 8029 4714 8029 4715 8029 4715 8029 4716 8029 4713 8029 3527 8030 4718 8030 4717 8030 4717 8030 3495 8030 3527 8030 3530 8031 4719 8031 4718 8031 4718 8031 3527 8031 3530 8031 3491 8032 4720 8032 4719 8032 4719 8032 3530 8032 3491 8032 3495 8033 4717 8033 4720 8033 4720 8033 3491 8033 3495 8033 4717 8034 4718 8034 4719 8034 4719 8034 4720 8034 4717 8034 3530 8035 4722 8035 4721 8035 4721 8035 3491 8035 3530 8035 3529 8036 4723 8036 4722 8036 4722 8036 3530 8036 3529 8036 3399 8037 4724 8037 4723 8037 4723 8037 3529 8037 3399 8037 3491 8038 4721 8038 4724 8038 4724 8038 3399 8038 3491 8038 4721 8039 4722 8039 4723 8039 4723 8039 4724 8039 4721 8039 3529 8040 4726 8040 4725 8040 4725 8040 3399 8040 3529 8040 3528 8041 4727 8041 4726 8041 4726 8041 3529 8041 3528 8041 3402 8042 4728 8042 4727 8042 4727 8042 3528 8042 3402 8042 3399 8043 4725 8043 4728 8043 4728 8043 3402 8043 3399 8043 4725 8044 4726 8044 4727 8044 4727 8044 4728 8044 4725 8044 3528 8045 4730 8045 4729 8045 4729 8045 3402 8045 3528 8045 3527 8046 4731 8046 4730 8046 4730 8046 3528 8046 3527 8046 3495 8047 4732 8047 4731 8047 4731 8047 3527 8047 3495 8047 3402 8048 4729 8048 4732 8048 4732 8048 3495 8048 3402 8048 4729 8049 4730 8049 4731 8049 4731 8049 4732 8049 4729 8049 3524 8050 4734 8050 4733 8050 4733 8050 3523 8050 3524 8050 3525 8051 4735 8051 4734 8051 4734 8051 3524 8051 3525 8051 3526 8052 4736 8052 4735 8052 4735 8052 3525 8052 3526 8052 3523 8053 4733 8053 4736 8053 4736 8053 3526 8053 3523 8053 4733 8054 4734 8054 4735 8054 4735 8054 4736 8054 4733 8054 3523 8055 4738 8055 4737 8055 4737 8055 3402 8055 3523 8055 3526 8056 4739 8056 4738 8056 4738 8056 3523 8056 3526 8056 3399 8057 4740 8057 4739 8057 4739 8057 3526 8057 3399 8057 3402 8058 4737 8058 4740 8058 4740 8058 3399 8058 3402 8058 4737 8059 4738 8059 4739 8059 4739 8059 4740 8059 4737 8059 3526 8060 4742 8060 4741 8060 4741 8060 3399 8060 3526 8060 3525 8061 4743 8061 4742 8061 4742 8061 3526 8061 3525 8061 3400 8062 4744 8062 4743 8062 4743 8062 3525 8062 3400 8062 3399 8063 4741 8063 4744 8063 4744 8063 3400 8063 3399 8063 4741 8064 4742 8064 4743 8064 4743 8064 4744 8064 4741 8064 3525 8065 4746 8065 4745 8065 4745 8065 3400 8065 3525 8065 3524 8066 4747 8066 4746 8066 4746 8066 3525 8066 3524 8066 3401 8067 4748 8067 4747 8067 4747 8067 3524 8067 3401 8067 3400 8068 4745 8068 4748 8068 4748 8068 3401 8068 3400 8068 4745 8069 4746 8069 4747 8069 4747 8069 4748 8069 4745 8069 3524 8070 4750 8070 4749 8070 4749 8070 3401 8070 3524 8070 3523 8071 4751 8071 4750 8071 4750 8071 3524 8071 3523 8071 3402 8072 4752 8072 4751 8072 4751 8072 3523 8072 3402 8072 3401 8073 4749 8073 4752 8073 4752 8073 3402 8073 3401 8073 4749 8074 4750 8074 4751 8074 4751 8074 4752 8074 4749 8074 3520 8075 4754 8075 4753 8075 4753 8075 3519 8075 3520 8075 3521 8076 4755 8076 4754 8076 4754 8076 3520 8076 3521 8076 3522 8077 4756 8077 4755 8077 4755 8077 3521 8077 3522 8077 3519 8078 4753 8078 4756 8078 4756 8078 3522 8078 3519 8078 4753 8079 4754 8079 4755 8079 4755 8079 4756 8079 4753 8079 3519 8080 4758 8080 4757 8080 4757 8080 3447 8080 3519 8080 3522 8081 4759 8081 4758 8081 4758 8081 3519 8081 3522 8081 3491 8082 4760 8082 4759 8082 4759 8082 3522 8082 3491 8082 3447 8083 4757 8083 4760 8083 4760 8083 3491 8083 3447 8083 4757 8084 4758 8084 4759 8084 4759 8084 4760 8084 4757 8084 3522 8085 4762 8085 4761 8085 4761 8085 3491 8085 3522 8085 3521 8086 4763 8086 4762 8086 4762 8086 3522 8086 3521 8086 3398 8087 4764 8087 4763 8087 4763 8087 3521 8087 3398 8087 3491 8088 4761 8088 4764 8088 4764 8088 3398 8088 3491 8088 4761 8089 4762 8089 4763 8089 4763 8089 4764 8089 4761 8089 3521 8090 4766 8090 4765 8090 4765 8090 3398 8090 3521 8090 3520 8091 4767 8091 4766 8091 4766 8091 3521 8091 3520 8091 3397 8092 4768 8092 4767 8092 4767 8092 3520 8092 3397 8092 3398 8093 4765 8093 4768 8093 4768 8093 3397 8093 3398 8093 4765 8094 4766 8094 4767 8094 4767 8094 4768 8094 4765 8094 3520 8095 4770 8095 4769 8095 4769 8095 3397 8095 3520 8095 3519 8096 4771 8096 4770 8096 4770 8096 3520 8096 3519 8096 3447 8097 4772 8097 4771 8097 4771 8097 3519 8097 3447 8097 3397 8098 4769 8098 4772 8098 4772 8098 3447 8098 3397 8098 4769 8099 4770 8099 4771 8099 4771 8099 4772 8099 4769 8099 3516 8100 4774 8100 4773 8100 4773 8100 3515 8100 3516 8100 3517 8101 4775 8101 4774 8101 4774 8101 3516 8101 3517 8101 3518 8102 4776 8102 4775 8102 4775 8102 3517 8102 3518 8102 3515 8103 4773 8103 4776 8103 4776 8103 3518 8103 3515 8103 4773 8104 4774 8104 4775 8104 4775 8104 4776 8104 4773 8104 3515 8105 4778 8105 4777 8105 4777 8105 3448 8105 3515 8105 3518 8106 4779 8106 4778 8106 4778 8106 3515 8106 3518 8106 3447 8107 4780 8107 4779 8107 4779 8107 3518 8107 3447 8107 3448 8108 4777 8108 4780 8108 4780 8108 3447 8108 3448 8108 4777 8109 4778 8109 4779 8109 4779 8109 4780 8109 4777 8109 3518 8110 4782 8110 4781 8110 4781 8110 3447 8110 3518 8110 3517 8111 4783 8111 4782 8111 4782 8111 3518 8111 3517 8111 3397 8112 4784 8112 4783 8112 4783 8112 3517 8112 3397 8112 3447 8113 4781 8113 4784 8113 4784 8113 3397 8113 3447 8113 4781 8114 4782 8114 4783 8114 4783 8114 4784 8114 4781 8114 3517 8115 4786 8115 4785 8115 4785 8115 3397 8115 3517 8115 3516 8116 4787 8116 4786 8116 4786 8116 3517 8116 3516 8116 3396 8117 4788 8117 4787 8117 4787 8117 3516 8117 3396 8117 3397 8118 4785 8118 4788 8118 4788 8118 3396 8118 3397 8118 4785 8119 4786 8119 4787 8119 4787 8119 4788 8119 4785 8119 3516 8120 4790 8120 4789 8120 4789 8120 3396 8120 3516 8120 3515 8121 4791 8121 4790 8121 4790 8121 3516 8121 3515 8121 3448 8122 4792 8122 4791 8122 4791 8122 3515 8122 3448 8122 3396 8123 4789 8123 4792 8123 4792 8123 3448 8123 3396 8123 4789 8124 4790 8124 4791 8124 4791 8124 4792 8124 4789 8124 3512 8125 4794 8125 4793 8125 4793 8125 3511 8125 3512 8125 3513 8126 4795 8126 4794 8126 4794 8126 3512 8126 3513 8126 3514 8127 4796 8127 4795 8127 4795 8127 3513 8127 3514 8127 3511 8128 4793 8128 4796 8128 4796 8128 3514 8128 3511 8128 4793 8129 4794 8129 4795 8129 4795 8129 4796 8129 4793 8129 3511 8130 4798 8130 4797 8130 4797 8130 3492 8130 3511 8130 3514 8131 4799 8131 4798 8131 4798 8131 3511 8131 3514 8131 3448 8132 4800 8132 4799 8132 4799 8132 3514 8132 3448 8132 3492 8133 4797 8133 4800 8133 4800 8133 3448 8133 3492 8133 4797 8134 4798 8134 4799 8134 4799 8134 4800 8134 4797 8134 3514 8135 4802 8135 4801 8135 4801 8135 3448 8135 3514 8135 3513 8136 4803 8136 4802 8136 4802 8136 3514 8136 3513 8136 3396 8137 4804 8137 4803 8137 4803 8137 3513 8137 3396 8137 3448 8138 4801 8138 4804 8138 4804 8138 3396 8138 3448 8138 4801 8139 4802 8139 4803 8139 4803 8139 4804 8139 4801 8139 3513 8140 4806 8140 4805 8140 4805 8140 3396 8140 3513 8140 3512 8141 4807 8141 4806 8141 4806 8141 3513 8141 3512 8141 3395 8142 4808 8142 4807 8142 4807 8142 3512 8142 3395 8142 3396 8143 4805 8143 4808 8143 4808 8143 3395 8143 3396 8143 4805 8144 4806 8144 4807 8144 4807 8144 4808 8144 4805 8144 3512 8145 4810 8145 4809 8145 4809 8145 3395 8145 3512 8145 3511 8146 4811 8146 4810 8146 4810 8146 3512 8146 3511 8146 3492 8147 4812 8147 4811 8147 4811 8147 3511 8147 3492 8147 3395 8148 4809 8148 4812 8148 4812 8148 3492 8148 3395 8148 4809 8149 4810 8149 4811 8149 4811 8149 4812 8149 4809 8149 3508 8150 4814 8150 4813 8150 4813 8150 3507 8150 3508 8150 3509 8151 4815 8151 4814 8151 4814 8151 3508 8151 3509 8151 3510 8152 4816 8152 4815 8152 4815 8152 3509 8152 3510 8152 3507 8153 4813 8153 4816 8153 4816 8153 3510 8153 3507 8153 4813 8154 4814 8154 4815 8154 4815 8154 4816 8154 4813 8154 3507 8155 4818 8155 4817 8155 4817 8155 3491 8155 3507 8155 3510 8156 4819 8156 4818 8156 4818 8156 3507 8156 3510 8156 3492 8157 4820 8157 4819 8157 4819 8157 3510 8157 3492 8157 3491 8158 4817 8158 4820 8158 4820 8158 3492 8158 3491 8158 4817 8159 4818 8159 4819 8159 4819 8159 4820 8159 4817 8159 3510 8160 4822 8160 4821 8160 4821 8160 3492 8160 3510 8160 3509 8161 4823 8161 4822 8161 4822 8161 3510 8161 3509 8161 3395 8162 4824 8162 4823 8162 4823 8162 3509 8162 3395 8162 3492 8163 4821 8163 4824 8163 4824 8163 3395 8163 3492 8163 4821 8164 4822 8164 4823 8164 4823 8164 4824 8164 4821 8164 3509 8165 4826 8165 4825 8165 4825 8165 3395 8165 3509 8165 3508 8166 4827 8166 4826 8166 4826 8166 3509 8166 3508 8166 3398 8167 4828 8167 4827 8167 4827 8167 3508 8167 3398 8167 3395 8168 4825 8168 4828 8168 4828 8168 3398 8168 3395 8168 4825 8169 4826 8169 4827 8169 4827 8169 4828 8169 4825 8169 3508 8170 4830 8170 4829 8170 4829 8170 3398 8170 3508 8170 3507 8171 4831 8171 4830 8171 4830 8171 3508 8171 3507 8171 3491 8172 4832 8172 4831 8172 4831 8172 3507 8172 3491 8172 3398 8173 4829 8173 4832 8173 4832 8173 3491 8173 3398 8173 4829 8174 4830 8174 4831 8174 4831 8174 4832 8174 4829 8174 3504 8175 4834 8175 4833 8175 4833 8175 3503 8175 3504 8175 3505 8176 4835 8176 4834 8176 4834 8176 3504 8176 3505 8176 3506 8177 4836 8177 4835 8177 4835 8177 3505 8177 3506 8177 3503 8178 4833 8178 4836 8178 4836 8178 3506 8178 3503 8178 4833 8179 4834 8179 4835 8179 4835 8179 4836 8179 4833 8179 3503 8180 4838 8180 4837 8180 4837 8180 3398 8180 3503 8180 3506 8181 4839 8181 4838 8181 4838 8181 3503 8181 3506 8181 3395 8182 4840 8182 4839 8182 4839 8182 3506 8182 3395 8182 3398 8183 4837 8183 4840 8183 4840 8183 3395 8183 3398 8183 4837 8184 4838 8184 4839 8184 4839 8184 4840 8184 4837 8184 3506 8185 4842 8185 4841 8185 4841 8185 3395 8185 3506 8185 3505 8186 4843 8186 4842 8186 4842 8186 3506 8186 3505 8186 3396 8187 4844 8187 4843 8187 4843 8187 3505 8187 3396 8187 3395 8188 4841 8188 4844 8188 4844 8188 3396 8188 3395 8188 4841 8189 4842 8189 4843 8189 4843 8189 4844 8189 4841 8189 3505 8190 4846 8190 4845 8190 4845 8190 3396 8190 3505 8190 3504 8191 4847 8191 4846 8191 4846 8191 3505 8191 3504 8191 3397 8192 4848 8192 4847 8192 4847 8192 3504 8192 3397 8192 3396 8193 4845 8193 4848 8193 4848 8193 3397 8193 3396 8193 4845 8194 4846 8194 4847 8194 4847 8194 4848 8194 4845 8194 3504 8195 4850 8195 4849 8195 4849 8195 3397 8195 3504 8195 3503 8196 4851 8196 4850 8196 4850 8196 3504 8196 3503 8196 3398 8197 4852 8197 4851 8197 4851 8197 3503 8197 3398 8197 3397 8198 4849 8198 4852 8198 4852 8198 3398 8198 3397 8198 4849 8199 4850 8199 4851 8199 4851 8199 4852 8199 4849 8199 2184 8200 4854 8200 4853 8200 4853 8200 2182 8200 2184 8200 3501 8201 4855 8201 4854 8201 4854 8201 2184 8201 3501 8201 3502 8202 4856 8202 4855 8202 4855 8202 3501 8202 3502 8202 2182 8203 4853 8203 4856 8203 4856 8203 3502 8203 2182 8203 4853 8204 4854 8204 4855 8204 4855 8204 4856 8204 4853 8204 2186 8205 4858 8205 4857 8205 4857 8205 2182 8205 2186 8205 3500 8206 4859 8206 4858 8206 4858 8206 2186 8206 3500 8206 3502 8207 4860 8207 4859 8207 4859 8207 3500 8207 3502 8207 2182 8208 4857 8208 4860 8208 4860 8208 3502 8208 2182 8208 4857 8209 4858 8209 4859 8209 4859 8209 4860 8209 4857 8209 2190 8210 4862 8210 4861 8210 4861 8210 2184 8210 2190 8210 3498 8211 4863 8211 4862 8211 4862 8211 2190 8211 3498 8211 3501 8212 4864 8212 4863 8212 4863 8212 3498 8212 3501 8212 2184 8213 4861 8213 4864 8213 4864 8213 3501 8213 2184 8213 4861 8214 4862 8214 4863 8214 4863 8214 4864 8214 4861 8214 2188 8215 4866 8215 4865 8215 4865 8215 2186 8215 2188 8215 3499 8216 4867 8216 4866 8216 4866 8216 2188 8216 3499 8216 3500 8217 4868 8217 4867 8217 4867 8217 3499 8217 3500 8217 2186 8218 4865 8218 4868 8218 4868 8218 3500 8218 2186 8218 4865 8219 4866 8219 4867 8219 4867 8219 4868 8219 4865 8219 2192 8220 4870 8220 4869 8220 4869 8220 2188 8220 2192 8220 3497 8221 4871 8221 4870 8221 4870 8221 2192 8221 3497 8221 3499 8222 4872 8222 4871 8222 4871 8222 3497 8222 3499 8222 2188 8223 4869 8223 4872 8223 4872 8223 3499 8223 2188 8223 4869 8224 4870 8224 4871 8224 4871 8224 4872 8224 4869 8224 2194 8225 4874 8225 4873 8225 4873 8225 2190 8225 2194 8225 3496 8226 4875 8226 4874 8226 4874 8226 2194 8226 3496 8226 3498 8227 4876 8227 4875 8227 4875 8227 3496 8227 3498 8227 2190 8228 4873 8228 4876 8228 4876 8228 3498 8228 2190 8228 4873 8229 4874 8229 4875 8229 4875 8229 4876 8229 4873 8229 2196 8230 4878 8230 4877 8230 4877 8230 2192 8230 2196 8230 3495 8231 4879 8231 4878 8231 4878 8231 2196 8231 3495 8231 3497 8232 4880 8232 4879 8232 4879 8232 3495 8232 3497 8232 2192 8233 4877 8233 4880 8233 4880 8233 3497 8233 2192 8233 4877 8234 4878 8234 4879 8234 4879 8234 4880 8234 4877 8234 2198 8235 4882 8235 4881 8235 4881 8235 2194 8235 2198 8235 3494 8236 4883 8236 4882 8236 4882 8236 2198 8236 3494 8236 3496 8237 4884 8237 4883 8237 4883 8237 3494 8237 3496 8237 2194 8238 4881 8238 4884 8238 4884 8238 3496 8238 2194 8238 4881 8239 4882 8239 4883 8239 4883 8239 4884 8239 4881 8239 2202 8240 4886 8240 4885 8240 4885 8240 2196 8240 2202 8240 3492 8241 4887 8241 4886 8241 4886 8241 2202 8241 3492 8241 3495 8242 4888 8242 4887 8242 4887 8242 3492 8242 3495 8242 2196 8243 4885 8243 4888 8243 4888 8243 3495 8243 2196 8243 4885 8244 4886 8244 4887 8244 4887 8244 4888 8244 4885 8244 2196 8245 4890 8245 4889 8245 4889 8245 2204 8245 2196 8245 3495 8246 4891 8246 4890 8246 4890 8246 2196 8246 3495 8246 3491 8247 4892 8247 4891 8247 4891 8247 3495 8247 3491 8247 2204 8248 4889 8248 4892 8248 4892 8248 3491 8248 2204 8248 4889 8249 4890 8249 4891 8249 4891 8249 4892 8249 4889 8249 2200 8250 4894 8250 4893 8250 4893 8250 2198 8250 2200 8250 3493 8251 4895 8251 4894 8251 4894 8251 2200 8251 3493 8251 3494 8252 4896 8252 4895 8252 4895 8252 3493 8252 3494 8252 2198 8253 4893 8253 4896 8253 4896 8253 3494 8253 2198 8253 4893 8254 4894 8254 4895 8254 4895 8254 4896 8254 4893 8254 2208 8255 4898 8255 4897 8255 4897 8255 2200 8255 2208 8255 3489 8256 4899 8256 4898 8256 4898 8256 2208 8256 3489 8256 3493 8257 4900 8257 4899 8257 4899 8257 3489 8257 3493 8257 2200 8258 4897 8258 4900 8258 4900 8258 3493 8258 2200 8258 4897 8259 4898 8259 4899 8259 4899 8259 4900 8259 4897 8259 2204 8260 4902 8260 4901 8260 4901 8260 2202 8260 2204 8260 3491 8261 4903 8261 4902 8261 4902 8261 2204 8261 3491 8261 3492 8262 4904 8262 4903 8262 4903 8262 3491 8262 3492 8262 2202 8263 4901 8263 4904 8263 4904 8263 3492 8263 2202 8263 4901 8264 4902 8264 4903 8264 4903 8264 4904 8264 4901 8264 2206 8265 4906 8265 4905 8265 4905 8265 2204 8265 2206 8265 3490 8266 4907 8266 4906 8266 4906 8266 2206 8266 3490 8266 3491 8267 4908 8267 4907 8267 4907 8267 3490 8267 3491 8267 2204 8268 4905 8268 4908 8268 4908 8268 3491 8268 2204 8268 4905 8269 4906 8269 4907 8269 4907 8269 4908 8269 4905 8269 2210 8270 4910 8270 4909 8270 4909 8270 2206 8270 2210 8270 3488 8271 4911 8271 4910 8271 4910 8271 2210 8271 3488 8271 3490 8272 4912 8272 4911 8272 4911 8272 3488 8272 3490 8272 2206 8273 4909 8273 4912 8273 4912 8273 3490 8273 2206 8273 4909 8274 4910 8274 4911 8274 4911 8274 4912 8274 4909 8274 2212 8275 4914 8275 4913 8275 4913 8275 2208 8275 2212 8275 3487 8276 4915 8276 4914 8276 4914 8276 2212 8276 3487 8276 3489 8277 4916 8277 4915 8277 4915 8277 3487 8277 3489 8277 2208 8278 4913 8278 4916 8278 4916 8278 3489 8278 2208 8278 4913 8279 4914 8279 4915 8279 4915 8279 4916 8279 4913 8279 2214 8280 4918 8280 4917 8280 4917 8280 2210 8280 2214 8280 3486 8281 4919 8281 4918 8281 4918 8281 2214 8281 3486 8281 3488 8282 4920 8282 4919 8282 4919 8282 3486 8282 3488 8282 2210 8283 4917 8283 4920 8283 4920 8283 3488 8283 2210 8283 4917 8284 4918 8284 4919 8284 4919 8284 4920 8284 4917 8284 2216 8285 4922 8285 4921 8285 4921 8285 2212 8285 2216 8285 3485 8286 4923 8286 4922 8286 4922 8286 2216 8286 3485 8286 3487 8287 4924 8287 4923 8287 4923 8287 3485 8287 3487 8287 2212 8288 4921 8288 4924 8288 4924 8288 3487 8288 2212 8288 4921 8289 4922 8289 4923 8289 4923 8289 4924 8289 4921 8289 2218 8290 4926 8290 4925 8290 4925 8290 2214 8290 2218 8290 3484 8291 4927 8291 4926 8291 4926 8291 2218 8291 3484 8291 3486 8292 4928 8292 4927 8292 4927 8292 3484 8292 3486 8292 2214 8293 4925 8293 4928 8293 4928 8293 3486 8293 2214 8293 4925 8294 4926 8294 4927 8294 4927 8294 4928 8294 4925 8294 2220 8295 4930 8295 4929 8295 4929 8295 2216 8295 2220 8295 3483 8296 4931 8296 4930 8296 4930 8296 2220 8296 3483 8296 3485 8297 4932 8297 4931 8297 4931 8297 3483 8297 3485 8297 2216 8298 4929 8298 4932 8298 4932 8298 3485 8298 2216 8298 4929 8299 4930 8299 4931 8299 4931 8299 4932 8299 4929 8299 2224 8300 4934 8300 4933 8300 4933 8300 2218 8300 2224 8300 3481 8301 4935 8301 4934 8301 4934 8301 2224 8301 3481 8301 3484 8302 4936 8302 4935 8302 4935 8302 3481 8302 3484 8302 2218 8303 4933 8303 4936 8303 4936 8303 3484 8303 2218 8303 4933 8304 4934 8304 4935 8304 4935 8304 4936 8304 4933 8304 2220 8305 4938 8305 4937 8305 4937 8305 2222 8305 2220 8305 3483 8306 4939 8306 4938 8306 4938 8306 2220 8306 3483 8306 3482 8307 4940 8307 4939 8307 4939 8307 3483 8307 3482 8307 2222 8308 4937 8308 4940 8308 4940 8308 3482 8308 2222 8308 4937 8309 4938 8309 4939 8309 4939 8309 4940 8309 4937 8309 2226 8310 4942 8310 4941 8310 4941 8310 2220 8310 2226 8310 3480 8311 4943 8311 4942 8311 4942 8311 2226 8311 3480 8311 3483 8312 4944 8312 4943 8312 4943 8312 3480 8312 3483 8312 2220 8313 4941 8313 4944 8313 4944 8313 3483 8313 2220 8313 4941 8314 4942 8314 4943 8314 4943 8314 4944 8314 4941 8314 2222 8315 4946 8315 4945 8315 4945 8315 2226 8315 2222 8315 3482 8316 4947 8316 4946 8316 4946 8316 2222 8316 3482 8316 3480 8317 4948 8317 4947 8317 4947 8317 3482 8317 3480 8317 2226 8318 4945 8318 4948 8318 4948 8318 3480 8318 2226 8318 4945 8319 4946 8319 4947 8319 4947 8319 4948 8319 4945 8319 2228 8320 4950 8320 4949 8320 4949 8320 2224 8320 2228 8320 3479 8321 4951 8321 4950 8321 4950 8321 2228 8321 3479 8321 3481 8322 4952 8322 4951 8322 4951 8322 3479 8322 3481 8322 2224 8323 4949 8323 4952 8323 4952 8323 3481 8323 2224 8323 4949 8324 4950 8324 4951 8324 4951 8324 4952 8324 4949 8324 2234 8325 4954 8325 4953 8325 4953 8325 2226 8325 2234 8325 3476 8326 4955 8326 4954 8326 4954 8326 2234 8326 3476 8326 3480 8327 4956 8327 4955 8327 4955 8327 3476 8327 3480 8327 2226 8328 4953 8328 4956 8328 4956 8328 3480 8328 2226 8328 4953 8329 4954 8329 4955 8329 4955 8329 4956 8329 4953 8329 2230 8330 4958 8330 4957 8330 4957 8330 2228 8330 2230 8330 3478 8331 4959 8331 4958 8331 4958 8331 2230 8331 3478 8331 3479 8332 4960 8332 4959 8332 4959 8332 3478 8332 3479 8332 2228 8333 4957 8333 4960 8333 4960 8333 3479 8333 2228 8333 4957 8334 4958 8334 4959 8334 4959 8334 4960 8334 4957 8334 2232 8335 4962 8335 4961 8335 4961 8335 2230 8335 2232 8335 3477 8336 4963 8336 4962 8336 4962 8336 2232 8336 3477 8336 3478 8337 4964 8337 4963 8337 4963 8337 3477 8337 3478 8337 2230 8338 4961 8338 4964 8338 4964 8338 3478 8338 2230 8338 4961 8339 4962 8339 4963 8339 4963 8339 4964 8339 4961 8339 2236 8340 4966 8340 4965 8340 4965 8340 2232 8340 2236 8340 3475 8341 4967 8341 4966 8341 4966 8341 2236 8341 3475 8341 3477 8342 4968 8342 4967 8342 4967 8342 3475 8342 3477 8342 2232 8343 4965 8343 4968 8343 4968 8343 3477 8343 2232 8343 4965 8344 4966 8344 4967 8344 4967 8344 4968 8344 4965 8344 2238 8345 4970 8345 4969 8345 4969 8345 2234 8345 2238 8345 3474 8346 4971 8346 4970 8346 4970 8346 2238 8346 3474 8346 3476 8347 4972 8347 4971 8347 4971 8347 3474 8347 3476 8347 2234 8348 4969 8348 4972 8348 4972 8348 3476 8348 2234 8348 4969 8349 4970 8349 4971 8349 4971 8349 4972 8349 4969 8349 2240 8350 4974 8350 4973 8350 4973 8350 2236 8350 2240 8350 3473 8351 4975 8351 4974 8351 4974 8351 2240 8351 3473 8351 3475 8352 4976 8352 4975 8352 4975 8352 3473 8352 3475 8352 2236 8353 4973 8353 4976 8353 4976 8353 3475 8353 2236 8353 4973 8354 4974 8354 4975 8354 4975 8354 4976 8354 4973 8354 2242 8355 4978 8355 4977 8355 4977 8355 2238 8355 2242 8355 3472 8356 4979 8356 4978 8356 4978 8356 2242 8356 3472 8356 3474 8357 4980 8357 4979 8357 4979 8357 3472 8357 3474 8357 2238 8358 4977 8358 4980 8358 4980 8358 3474 8358 2238 8358 4977 8359 4978 8359 4979 8359 4979 8359 4980 8359 4977 8359 2246 8360 4982 8360 4981 8360 4981 8360 2240 8360 2246 8360 3470 8361 4983 8361 4982 8361 4982 8361 2246 8361 3470 8361 3473 8362 4984 8362 4983 8362 4983 8362 3470 8362 3473 8362 2240 8363 4981 8363 4984 8363 4984 8363 3473 8363 2240 8363 4981 8364 4982 8364 4983 8364 4983 8364 4984 8364 4981 8364 2244 8365 4986 8365 4985 8365 4985 8365 2242 8365 2244 8365 3471 8366 4987 8366 4986 8366 4986 8366 2244 8366 3471 8366 3472 8367 4988 8367 4987 8367 4987 8367 3471 8367 3472 8367 2242 8368 4985 8368 4988 8368 4988 8368 3472 8368 2242 8368 4985 8369 4986 8369 4987 8369 4987 8369 4988 8369 4985 8369 2250 8370 4990 8370 4989 8370 4989 8370 2244 8370 2250 8370 3468 8371 4991 8371 4990 8371 4990 8371 2250 8371 3468 8371 3471 8372 4992 8372 4991 8372 4991 8372 3468 8372 3471 8372 2244 8373 4989 8373 4992 8373 4992 8373 3471 8373 2244 8373 4989 8374 4990 8374 4991 8374 4991 8374 4992 8374 4989 8374 2248 8375 4994 8375 4993 8375 4993 8375 2246 8375 2248 8375 3469 8376 4995 8376 4994 8376 4994 8376 2248 8376 3469 8376 3470 8377 4996 8377 4995 8377 4995 8377 3469 8377 3470 8377 2246 8378 4993 8378 4996 8378 4996 8378 3470 8378 2246 8378 4993 8379 4994 8379 4995 8379 4995 8379 4996 8379 4993 8379 2252 8380 4998 8380 4997 8380 4997 8380 2248 8380 2252 8380 3467 8381 4999 8381 4998 8381 4998 8381 2252 8381 3467 8381 3469 8382 5000 8382 4999 8382 4999 8382 3467 8382 3469 8382 2248 8383 4997 8383 5000 8383 5000 8383 3469 8383 2248 8383 4997 8384 4998 8384 4999 8384 4999 8384 5000 8384 4997 8384 2254 8385 5002 8385 5001 8385 5001 8385 2250 8385 2254 8385 3466 8386 5003 8386 5002 8386 5002 8386 2254 8386 3466 8386 3468 8387 5004 8387 5003 8387 5003 8387 3466 8387 3468 8387 2250 8388 5001 8388 5004 8388 5004 8388 3468 8388 2250 8388 5001 8389 5002 8389 5003 8389 5003 8389 5004 8389 5001 8389 2256 8390 5006 8390 5005 8390 5005 8390 2252 8390 2256 8390 3465 8391 5007 8391 5006 8391 5006 8391 2256 8391 3465 8391 3467 8392 5008 8392 5007 8392 5007 8392 3465 8392 3467 8392 2252 8393 5005 8393 5008 8393 5008 8393 3467 8393 2252 8393 5005 8394 5006 8394 5007 8394 5007 8394 5008 8394 5005 8394 2260 8395 5010 8395 5009 8395 5009 8395 2254 8395 2260 8395 3463 8396 5011 8396 5010 8396 5010 8396 2260 8396 3463 8396 3466 8397 5012 8397 5011 8397 5011 8397 3463 8397 3466 8397 2254 8398 5009 8398 5012 8398 5012 8398 3466 8398 2254 8398 5009 8399 5010 8399 5011 8399 5011 8399 5012 8399 5009 8399 2258 8400 5014 8400 5013 8400 5013 8400 2256 8400 2258 8400 3464 8401 5015 8401 5014 8401 5014 8401 2258 8401 3464 8401 3465 8402 5016 8402 5015 8402 5015 8402 3464 8402 3465 8402 2256 8403 5013 8403 5016 8403 5016 8403 3465 8403 2256 8403 5013 8404 5014 8404 5015 8404 5015 8404 5016 8404 5013 8404 2262 8405 5018 8405 5017 8405 5017 8405 2258 8405 2262 8405 3462 8406 5019 8406 5018 8406 5018 8406 2262 8406 3462 8406 3464 8407 5020 8407 5019 8407 5019 8407 3462 8407 3464 8407 2258 8408 5017 8408 5020 8408 5020 8408 3464 8408 2258 8408 5017 8409 5018 8409 5019 8409 5019 8409 5020 8409 5017 8409 2264 8410 5022 8410 5021 8410 5021 8410 2260 8410 2264 8410 3461 8411 5023 8411 5022 8411 5022 8411 2264 8411 3461 8411 3463 8412 5024 8412 5023 8412 5023 8412 3461 8412 3463 8412 2260 8413 5021 8413 5024 8413 5024 8413 3463 8413 2260 8413 5021 8414 5022 8414 5023 8414 5023 8414 5024 8414 5021 8414 2268 8415 5026 8415 5025 8415 5025 8415 2262 8415 2268 8415 3459 8416 5027 8416 5026 8416 5026 8416 2268 8416 3459 8416 3462 8417 5028 8417 5027 8417 5027 8417 3459 8417 3462 8417 2262 8418 5025 8418 5028 8418 5028 8418 3462 8418 2262 8418 5025 8419 5026 8419 5027 8419 5027 8419 5028 8419 5025 8419 2266 8420 5030 8420 5029 8420 5029 8420 2264 8420 2266 8420 3460 8421 5031 8421 5030 8421 5030 8421 2266 8421 3460 8421 3461 8422 5032 8422 5031 8422 5031 8422 3460 8422 3461 8422 2264 8423 5029 8423 5032 8423 5032 8423 3461 8423 2264 8423 5029 8424 5030 8424 5031 8424 5031 8424 5032 8424 5029 8424 2270 8425 5034 8425 5033 8425 5033 8425 2266 8425 2270 8425 3458 8426 5035 8426 5034 8426 5034 8426 2270 8426 3458 8426 3460 8427 5036 8427 5035 8427 5035 8427 3458 8427 3460 8427 2266 8428 5033 8428 5036 8428 5036 8428 3460 8428 2266 8428 5033 8429 5034 8429 5035 8429 5035 8429 5036 8429 5033 8429 2272 8430 5038 8430 5037 8430 5037 8430 2268 8430 2272 8430 3457 8431 5039 8431 5038 8431 5038 8431 2272 8431 3457 8431 3459 8432 5040 8432 5039 8432 5039 8432 3457 8432 3459 8432 2268 8433 5037 8433 5040 8433 5040 8433 3459 8433 2268 8433 5037 8434 5038 8434 5039 8434 5039 8434 5040 8434 5037 8434 2274 8435 5042 8435 5041 8435 5041 8435 2270 8435 2274 8435 3456 8436 5043 8436 5042 8436 5042 8436 2274 8436 3456 8436 3458 8437 5044 8437 5043 8437 5043 8437 3456 8437 3458 8437 2270 8438 5041 8438 5044 8438 5044 8438 3458 8438 2270 8438 5041 8439 5042 8439 5043 8439 5043 8439 5044 8439 5041 8439 2276 8440 5046 8440 5045 8440 5045 8440 2272 8440 2276 8440 3455 8441 5047 8441 5046 8441 5046 8441 2276 8441 3455 8441 3457 8442 5048 8442 5047 8442 5047 8442 3455 8442 3457 8442 2272 8443 5045 8443 5048 8443 5048 8443 3457 8443 2272 8443 5045 8444 5046 8444 5047 8444 5047 8444 5048 8444 5045 8444 2278 8445 5050 8445 5049 8445 5049 8445 2274 8445 2278 8445 3454 8446 5051 8446 5050 8446 5050 8446 2278 8446 3454 8446 3456 8447 5052 8447 5051 8447 5051 8447 3454 8447 3456 8447 2274 8448 5049 8448 5052 8448 5052 8448 3456 8448 2274 8448 5049 8449 5050 8449 5051 8449 5051 8449 5052 8449 5049 8449 2280 8450 5054 8450 5053 8450 5053 8450 2276 8450 2280 8450 3453 8451 5055 8451 5054 8451 5054 8451 2280 8451 3453 8451 3455 8452 5056 8452 5055 8452 5055 8452 3453 8452 3455 8452 2276 8453 5053 8453 5056 8453 5056 8453 3455 8453 2276 8453 5053 8454 5054 8454 5055 8454 5055 8454 5056 8454 5053 8454 2282 8455 5058 8455 5057 8455 5057 8455 2278 8455 2282 8455 3452 8456 5059 8456 5058 8456 5058 8456 2282 8456 3452 8456 3454 8457 5060 8457 5059 8457 5059 8457 3452 8457 3454 8457 2278 8458 5057 8458 5060 8458 5060 8458 3454 8458 2278 8458 5057 8459 5058 8459 5059 8459 5059 8459 5060 8459 5057 8459 2280 8460 5062 8460 5061 8460 5061 8460 2286 8460 2280 8460 3453 8461 5063 8461 5062 8461 5062 8461 2280 8461 3453 8461 3450 8462 5064 8462 5063 8462 5063 8462 3453 8462 3450 8462 2286 8463 5061 8463 5064 8463 5064 8463 3450 8463 2286 8463 5061 8464 5062 8464 5063 8464 5063 8464 5064 8464 5061 8464 2288 8465 5066 8465 5065 8465 5065 8465 2280 8465 2288 8465 3449 8466 5067 8466 5066 8466 5066 8466 2288 8466 3449 8466 3453 8467 5068 8467 5067 8467 5067 8467 3449 8467 3453 8467 2280 8468 5065 8468 5068 8468 5068 8468 3453 8468 2280 8468 5065 8469 5066 8469 5067 8469 5067 8469 5068 8469 5065 8469 2284 8470 5070 8470 5069 8470 5069 8470 2282 8470 2284 8470 3451 8471 5071 8471 5070 8471 5070 8471 2284 8471 3451 8471 3452 8472 5072 8472 5071 8472 5071 8472 3451 8472 3452 8472 2282 8473 5069 8473 5072 8473 5072 8473 3452 8473 2282 8473 5069 8474 5070 8474 5071 8474 5071 8474 5072 8474 5069 8474 2286 8475 5074 8475 5073 8475 5073 8475 2284 8475 2286 8475 3450 8476 5075 8476 5074 8476 5074 8476 2286 8476 3450 8476 3451 8477 5076 8477 5075 8477 5075 8477 3450 8477 3451 8477 2284 8478 5073 8478 5076 8478 5076 8478 3451 8478 2284 8478 5073 8479 5074 8479 5075 8479 5075 8479 5076 8479 5073 8479 2286 8480 5078 8480 5077 8480 5077 8480 2288 8480 2286 8480 3450 8481 5079 8481 5078 8481 5078 8481 2286 8481 3450 8481 3449 8482 5080 8482 5079 8482 5079 8482 3450 8482 3449 8482 2288 8483 5077 8483 5080 8483 5080 8483 3449 8483 2288 8483 5077 8484 5078 8484 5079 8484 5079 8484 5080 8484 5077 8484 2119 8485 2120 8485 2129 8485 2119 8486 2129 8486 2130 8486 2117 8487 2119 8487 2128 8487 2119 8488 2130 8488 2128 8488 2078 8489 2079 8489 2077 8489 2077 8489 2076 8489 2078 8489 2080 8490 2081 8490 2083 8490 2070 8491 2071 8491 2081 8491 2081 8491 2080 8491 2070 8491 2084 8492 2096 8493 2097 8494 2097 8495 2085 8496 2084 8497 2088 8498 2089 8498 2091 8498 2091 8498 2090 8498 2088 8498 2070 8499 2080 8499 2082 8499 2076 8500 2077 8500 2089 8500 2089 8500 2088 8500 2076 8500 2096 8501 2098 8501 2099 8501 2099 8501 2097 8501 2096 8501 2062 8502 2069 8502 2068 8502 2068 8502 2063 8502 2062 8502 2068 8503 2069 8503 2070 8503 2070 8503 2071 8503 2068 8503 2075 8504 2079 8504 2078 8504 2078 8504 2074 8504 2075 8504 2091 8505 2093 8505 2092 8505 2092 8505 2090 8505 2091 8505 2067 8506 2073 8506 2072 8506 2072 8506 2066 8506 2067 8506 2073 8507 2075 8507 2074 8507 2074 8507 2072 8507 2073 8507 2093 8508 2095 8508 2094 8508 2094 8508 2092 8508 2093 8508 2095 8509 2101 8509 2100 8509 2100 8509 2094 8509 2095 8509 2065 8510 2067 8510 2066 8510 2066 8510 2064 8510 2065 8510 2063 8511 2065 8511 2064 8511 2064 8511 2062 8511 2063 8511 2101 8512 2105 8512 2104 8512 2104 8512 2100 8512 2101 8512 2087 8513 2083 8513 2082 8513 2082 8513 2086 8513 2087 8513 2098 8514 2102 8514 2103 8514 2103 8514 2099 8514 2098 8514 2071 8515 2083 8515 2081 8515 2073 8516 2063 8516 2068 8516 2068 8516 2075 8516 2073 8516 2105 8517 2101 8517 2095 8517 2095 8517 2103 8517 2105 8517 2085 8518 2097 8518 2099 8518 2099 8518 2087 8518 2085 8518 2065 8519 2063 8519 2073 8519 2073 8519 2067 8519 2065 8519 2071 8520 2083 8520 2077 8520 2077 8520 2068 8520 2071 8520 2079 8521 2075 8521 2068 8521 2068 8521 2077 8521 2079 8521 2087 8522 2099 8522 2093 8522 2093 8522 2089 8522 2087 8522 2095 8523 2093 8523 2099 8523 2099 8523 2103 8523 2095 8523 2089 8524 2077 8524 2083 8524 2083 8524 2087 8524 2089 8524 2064 8525 2066 8525 2072 8525 2072 8525 2062 8525 2064 8525 2078 8526 2076 8526 2069 8526 2069 8526 2074 8526 2078 8526 2104 8527 2102 8527 2094 8527 2094 8527 2100 8527 2104 8527 2098 8528 2096 8528 2084 8528 2084 8528 2086 8528 2098 8528 2072 8529 2074 8529 2069 8529 2069 8529 2062 8529 2072 8529 2092 8530 2098 8530 2086 8530 2086 8530 2088 8530 2092 8530 2094 8531 2102 8531 2098 8531 2098 8531 2092 8531 2094 8531 2076 8532 2082 8532 2070 8532 2070 8532 2069 8532 2076 8532 2086 8533 2082 8533 2076 8533 2076 8533 2088 8533 2086 8533 1693 8534 1692 8534 1694 8534 1693 8535 1694 8535 1695 8535 1691 8536 1693 8536 1694 8536 1693 8537 1692 8537 1694 8537 1688 8538 1689 8538 1691 8538 1688 8539 1691 8539 1694 8539 1688 8540 1689 8540 1691 8540 1688 8541 1691 8541 1690 8541 1684 8542 1685 8542 1687 8542 1684 8543 1687 8543 1686 8543 1681 8544 1687 8544 1684 8544 1687 8545 1686 8545 1684 8545 1689 8546 1688 8546 1686 8546 1686 8546 1687 8546 1689 8546 1693 8547 1689 8547 1687 8547 1687 8547 1683 8547 1693 8547 1682 8548 1686 8548 1688 8548 1688 8548 1692 8548 1682 8548 1683 8549 1682 8549 1692 8549 1692 8549 1693 8549 1683 8549 1689 8550 1693 8550 1692 8550 1692 8550 1688 8550 1689 8550 1686 8551 1687 8551 1683 8551 1683 8551 1682 8551 1686 8551 1680 8552 1683 8552 1687 8552 1687 8552 1686 8552 1680 8552 1681 8553 1687 8553 1686 8553 1686 8553 1680 8553 1681 8553

113 133 114 134 131 133 132 134 139 145 140 146 157 159 158 160 131 161 132 162 139 143 140 144 139 141 140 142 259 261 260 262 257 261 258 262 239 269 240 270 241 243 242 244 255 261 256 262 267 269 268 270 267 271 268 272 342 343 343 345 344 345 339 343 362 368 364 366 370 371 373 375 368 393 370 394 369 395 367 396 418 420 447 461 451 462 455 463 459 464 461 466 462 467 463 468 503 504 504 523 504 720 720 721 790 792 844 845 1287 1290 1291 1293 2380 2384 2384 2387

-0.36256 -0.79184 0.49146 4.048 0.93136 -0.32674 0.16064 -2.75925 0.03337 0.51597 0.85596 2.36461 0.0 0.0 0.0 1.0 0.68588 -0.31737 0.65486 3.91539 0.72763 0.31247 -0.61067 -4.15057 -0.01082 0.89534 0.44525 2.00697 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 -0.0 -1.0 0.0 0.0 1.0 -0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 -0.0 -1.0 0.0 0.0 1.0 -0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 -0.0 -1.0 0.0 0.0 1.0 -0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 -0.0 -1.0 0.45925 0.0 1.0 -0.0 -0.49463 0.0 0.0 0.0 1.0 1.0 0.0 0.0 -0.35157 0.0 -0.0 -1.0 0.68875 0.0 1.0 -0.0 -0.39119 0.0 0.0 0.0 1.0 1.0 0.0 0.0 -0.35157 0.0 -0.0 -1.0 0.68875 0.0 1.0 -0.0 -0.39119 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 -0.0 -1.0 0.20709 0.0 1.0 -0.0 -0.66585 0.0 0.0 0.0 1.0
hkl-5.0.0.2449/data/Makefile.in0000644000175000017500000003706113237017633016105 0ustar00piccapicca00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = data ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(hkl3ddir)" DATA = $(hkl3d_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASY = @ASY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BULLET_CFLAGS = @BULLET_CFLAGS@ BULLET_LIBS = @BULLET_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMACS = @EMACS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ G3D_CFLAGS = @G3D_CFLAGS@ G3D_LIBS = @G3D_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GNUPLOT = @GNUPLOT@ GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ GOBJECT_LIBS = @GOBJECT_LIBS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTKGLEXT_CFLAGS = @GTKGLEXT_CFLAGS@ GTKGLEXT_LIBS = @GTKGLEXT_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HDF5_CFLAGS = @HDF5_CFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VMAJ = @VMAJ@ YAML_CFLAGS = @YAML_CFLAGS@ YAML_LIBS = @YAML_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ release_info = @release_info@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ version_info = @version_info@ EXTRA_DIST = diffabs.dae diffabs.yaml hkl3ddir = $(pkgdatadir)/hkl3d hkl3d_DATA = diffabs.dae diffabs.yaml all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-hkl3dDATA: $(hkl3d_DATA) @$(NORMAL_INSTALL) @list='$(hkl3d_DATA)'; test -n "$(hkl3ddir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(hkl3ddir)'"; \ $(MKDIR_P) "$(DESTDIR)$(hkl3ddir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(hkl3ddir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(hkl3ddir)" || exit $$?; \ done uninstall-hkl3dDATA: @$(NORMAL_UNINSTALL) @list='$(hkl3d_DATA)'; test -n "$(hkl3ddir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(hkl3ddir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(hkl3ddir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-hkl3dDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-hkl3dDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-hkl3dDATA \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-hkl3dDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: hkl-5.0.0.2449/data/diffabs.yaml0000644000175000017500000000324612710332473016315 0ustar00piccapicca00000000000000--- ! - FileName: diffabs.dae Objects: - Id: 2 Name: kphi Transformation: [1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000] Hide: no - Id: 3 Name: kappa Transformation: [1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000] Hide: no - Id: 4 Name: komega Transformation: [1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000] Hide: no - Id: 5 Name: mu Transformation: [1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000] Hide: no - Id: 6 Name: gamma Transformation: [1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000] Hide: no - Id: 7 Name: delta Transformation: [1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000] Hide: no - Id: 8 Name: base Transformation: [1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000] Hide: no ... hkl-5.0.0.2449/gtk-doc.make0000644000175000017500000002504013216240766015312 0ustar00piccapicca00000000000000# -*- mode: makefile -*- # # gtk-doc.make - make rules for gtk-doc # Copyright (C) 2003 James Henstridge # 2004-2007 Damon Chaplin # 2007-2017 Stefan Sauer # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . #################################### # Everything below here is generic # #################################### if GTK_DOC_USE_LIBTOOL GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) GTKDOC_RUN = $(LIBTOOL) --mode=execute else GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) GTKDOC_RUN = endif # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to # whether a source that is a target of one rule is then # searched for in VPATH/GPATH. # GPATH = $(srcdir) TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE) SETUP_FILES = \ $(content_files) \ $(expand_content_files) \ $(DOC_MAIN_SGML_FILE) \ $(DOC_MODULE)-sections.txt \ $(DOC_MODULE)-overrides.txt EXTRA_DIST = \ $(HTML_IMAGES) \ $(SETUP_FILES) DOC_STAMPS=setup-build.stamp scan-build.stamp sgml-build.stamp \ html-build.stamp pdf-build.stamp \ sgml.stamp html.stamp pdf.stamp SCANOBJ_FILES = \ $(DOC_MODULE).args \ $(DOC_MODULE).hierarchy \ $(DOC_MODULE).interfaces \ $(DOC_MODULE).prerequisites \ $(DOC_MODULE).signals REPORT_FILES = \ $(DOC_MODULE)-undocumented.txt \ $(DOC_MODULE)-undeclared.txt \ $(DOC_MODULE)-unused.txt gtkdoc-check.test: Makefile $(AM_V_GEN)echo "#!/bin/sh -e" > $@; \ echo "$(GTKDOC_CHECK_PATH) || exit 1" >> $@; \ chmod +x $@ CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) gtkdoc-check.test if GTK_DOC_BUILD_HTML HTML_BUILD_STAMP=html-build.stamp else HTML_BUILD_STAMP= endif if GTK_DOC_BUILD_PDF PDF_BUILD_STAMP=pdf-build.stamp else PDF_BUILD_STAMP= endif all-gtk-doc: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) .PHONY: all-gtk-doc if ENABLE_GTK_DOC all-local: all-gtk-doc endif docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) $(REPORT_FILES): sgml-build.stamp #### setup #### GTK_DOC_V_SETUP=$(GTK_DOC_V_SETUP_@AM_V@) GTK_DOC_V_SETUP_=$(GTK_DOC_V_SETUP_@AM_DEFAULT_V@) GTK_DOC_V_SETUP_0=@echo " DOC Preparing build"; setup-build.stamp: -$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ files=`echo $(SETUP_FILES) $(DOC_MODULE).types`; \ if test "x$$files" != "x" ; then \ for file in $$files ; do \ destdir=`dirname $(abs_builddir)/$$file`; \ test -d "$$destdir" || mkdir -p "$$destdir"; \ test -f $(abs_srcdir)/$$file && \ cp -pf $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \ done; \ fi; \ fi $(AM_V_at)touch setup-build.stamp #### scan #### GTK_DOC_V_SCAN=$(GTK_DOC_V_SCAN_@AM_V@) GTK_DOC_V_SCAN_=$(GTK_DOC_V_SCAN_@AM_DEFAULT_V@) GTK_DOC_V_SCAN_0=@echo " DOC Scanning header files"; GTK_DOC_V_INTROSPECT=$(GTK_DOC_V_INTROSPECT_@AM_V@) GTK_DOC_V_INTROSPECT_=$(GTK_DOC_V_INTROSPECT_@AM_DEFAULT_V@) GTK_DOC_V_INTROSPECT_0=@echo " DOC Introspecting gobjects"; scan-build.stamp: setup-build.stamp $(HFILE_GLOB) $(CFILE_GLOB) $(GTK_DOC_V_SCAN)_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES) $(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ scanobj_options=""; \ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ scanobj_options="--verbose"; \ fi; \ fi; \ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \ else \ for i in $(SCANOBJ_FILES) ; do \ test -f $$i || touch $$i ; \ done \ fi $(AM_V_at)touch scan-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp @true #### xml #### GTK_DOC_V_XML=$(GTK_DOC_V_XML_@AM_V@) GTK_DOC_V_XML_=$(GTK_DOC_V_XML_@AM_DEFAULT_V@) GTK_DOC_V_XML_0=@echo " DOC Building XML"; sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(HFILE_GLOB) $(CFILE_GLOB) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files) xml/gtkdocentities.ent $(GTK_DOC_V_XML)_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS) $(AM_V_at)touch sgml-build.stamp sgml.stamp: sgml-build.stamp @true $(DOC_MAIN_SGML_FILE): sgml-build.stamp @true xml/gtkdocentities.ent: Makefile $(GTK_DOC_V_XML)$(MKDIR_P) $(@D) && ( \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ ) > $@ #### html #### GTK_DOC_V_HTML=$(GTK_DOC_V_HTML_@AM_V@) GTK_DOC_V_HTML_=$(GTK_DOC_V_HTML_@AM_DEFAULT_V@) GTK_DOC_V_HTML_0=@echo " DOC Building HTML"; GTK_DOC_V_XREF=$(GTK_DOC_V_XREF_@AM_V@) GTK_DOC_V_XREF_=$(GTK_DOC_V_XREF_@AM_DEFAULT_V@) GTK_DOC_V_XREF_0=@echo " DOC Fixing cross-references"; html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files) $(GTK_DOC_V_HTML)rm -rf html && mkdir html && \ mkhtml_options=""; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ mkhtml_options="$$mkhtml_options --verbose"; \ fi; \ fi; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ if test "$$?" = "0"; then \ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \ fi; \ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) -@test "x$(HTML_IMAGES)" = "x" || \ for file in $(HTML_IMAGES) ; do \ test -f $(abs_srcdir)/$$file && cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ test -f $(abs_builddir)/$$file && cp $(abs_builddir)/$$file $(abs_builddir)/html; \ test -f $$file && cp $$file $(abs_builddir)/html; \ done; $(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) $(AM_V_at)touch html-build.stamp #### pdf #### GTK_DOC_V_PDF=$(GTK_DOC_V_PDF_@AM_V@) GTK_DOC_V_PDF_=$(GTK_DOC_V_PDF_@AM_DEFAULT_V@) GTK_DOC_V_PDF_0=@echo " DOC Building PDF"; pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files) $(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \ mkpdf_options=""; \ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ mkpdf_options="$$mkpdf_options --verbose"; \ fi; \ fi; \ if test "x$(HTML_IMAGES)" != "x"; then \ for img in $(HTML_IMAGES); do \ part=`dirname $$img`; \ echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \ if test $$? != 0; then \ mkpdf_options="$$mkpdf_options --imgdir=$$part"; \ fi; \ done; \ fi; \ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS) $(AM_V_at)touch pdf-build.stamp ############## clean-local: @rm -f *~ *.bak @rm -rf .libs @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-types" ; then \ rm -f $(DOC_MODULE).types; \ fi @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-sections" ; then \ rm -f $(DOC_MODULE)-sections.txt; \ fi distclean-local: @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ rm -f $(SETUP_FILES) $(DOC_MODULE).types; \ fi maintainer-clean-local: @rm -rf xml html install-data-local: @installfiles=`echo $(builddir)/html/*`; \ if test "$$installfiles" = '$(builddir)/html/*'; \ then echo 1>&2 'Nothing to install' ; \ else \ if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ $(mkinstalldirs) $${installdir} ; \ for i in $$installfiles; do \ echo ' $(INSTALL_DATA) '$$i ; \ $(INSTALL_DATA) $$i $${installdir}; \ done; \ if test -n "$(DOC_MODULE_VERSION)"; then \ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \ fi; \ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \ fi uninstall-local: @if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ rm -rf $${installdir} # # Require gtk-doc when making dist # if HAVE_GTK_DOC dist-check-gtkdoc: docs else dist-check-gtkdoc: @echo "*** gtk-doc is needed to run 'make dist'. ***" @echo "*** gtk-doc was not found when 'configure' ran. ***" @echo "*** please install gtk-doc and rerun 'configure'. ***" @false endif dist-hook: dist-check-gtkdoc all-gtk-doc dist-hook-local @mkdir $(distdir)/html @cp ./html/* $(distdir)/html @-cp ./$(DOC_MODULE).pdf $(distdir)/ @-cp ./$(DOC_MODULE).types $(distdir)/ @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/ @cd $(distdir) && rm -f $(DISTCLEANFILES) @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html .PHONY : dist-hook-local docs hkl-5.0.0.2449/NEWS0000644000175000017500000001725613236600666013635 0ustar00piccapicca00000000000000# -*- org -*- * 5.0.0 UNRELEASED ** General - 5.x runtime can be co-installed with the 4.x series. - hkl.h contain all the Public API. - A clear separation between the public and private API was achieved, in order to propose a Long Time Support of the 5.x series. - c-tap-hardness library was embeded to provide the unit test framework. - gobject-instrospection provide the binding support. Look at this [[https://wiki.gnome.org/action/show/Projects/GObjectIntrospection][page]] for more informations. - Documentation was generated with org-mode and asymptote for the figures. - New diffractometers added - E4CH (eulerian 4 circles horizontal) geometry. - MARS beamline (SOLEIL) eulerian 4 circles vertical geometry. - SOLEIL SIRIUS KAPPA - SOLEIL SIRIUS TURRET - New Pseudo Axes engines. - qper_qpar - A not yet public hkl3d library used only by the gui allow to compute (Bullet) and display (OpenGL) collision for model described using the COLLADA file format. - all private symbols are now hidden. ** Buildsystem - add a --disable-hkl3d flag to avoid hkl3d library compilation. - replace the --enable-ghkl with a --disable-gui. - use ./configure --help for all the options ** Gui - Rewriten using Gtk instead of Gtkmm, in order to minimise the required dependencies. - Added a 3D view to display diffractometers and collisions. - Added the K6C 3D model. ** Bindings - Provide the garantie via unit tests that the python API will be stable during all the 5.x lifetime. - For other languages look at [[https://wiki.gnome.org/Projects/GObjectIntrospection/][here]]. * 4.0.4 UNRELEASED * add the SOLEIL SIXS MED2+2 diffractometer - engine: hkl - mode: reflectivity. - engine: qper_qpar * add the SOLEIL MARS diffractometer - engine: qper_qpar * add the PETRA3 P09 EH2 diffractometer - engine: qper_qpar * modified E6C - engine: qper_qpar - add modes : hkl psi_constant_horizontal, constant_mu_horizontal * K6C - engine hkl: - add the constant_incidence mode - engine: qper_qpar * add the sphinx documentation * 4.0.3 06-06-2010 * remove the usage.c file to avoid a GPL2-GPL3+ incompatibility * update the documentation * fix warning catched by clang * 4.0.2 01-06-2010 * add the ghkl manpage and .desktop file * fix the ghkl quit menuitem bugs * 4.0.1 10-05-2010 * fix a few ghkl bugs (.ui files installation) * add a --enable-ghkl=[yes,no] flag to allow compiling the gui interface * do not forgot to link ghkl against gsl. * display by default the preference panel of ghkl. * 4.0.0 14-04-2010 * add the autotools buildsystem and remove all other systems. * add a GUI ghkl for testing purpose based on gtkmm. * add the GNU info doc * add the gtk-doc to document the api (work in progress) * new structure for the HklDetector (prepare for 2D detectors) * HklGeometryConfig shared between all equivalent HklGeometries. * fix for 64 bits computers runtime error. * add the GError class to report calculation errors (not yet used) * new way to set the UB matrix of a sample (hkl_sample_set_UB). * new ZAxis geometry - mode zaxis - mode reflectivity (mu = gamma) * 3.0.1 23-10-2009 * add the psi_constant mode to the e4cv, e6c, k4cv and k6c geometries. (thanks teresa) * upgrade the user guide to explain how to add a mode. * the horizontal modes are also valid if omega = +-PI. (e6c, k6c) * remove geometries with an invalid range from the list of solutions. * 3.0.0 15-07-2009 * Rewrote from scratch in C with the GSL library. - now most of pseudo axes modes are numeric. So a 6 circles mode is now a real 6 circles mode. * Eulerian 4 circles - PseudoAxisEngine "hkl": "h", "k", "l" * Mode "bissector" * Mode "constant_omega" * Mode "constant_chi" * Mode "constant_phi" * Mode "double_diffraction" - PseudoAxisEngine "psi": "psi" * Mode "psi" * Kappa 4 circles - PseudoAxisEngine "hkl": "h", "k", "l" * Mode "bissector" * Mode "constant_omega" * Mode "constant_chi" * Mode "constant_phi" * Mode "double_diffraction" - PseudoAxisEngine "psi": "psi" * Mode "psi" - PseudoAxisEngien "eulerians": "omega", "chi", "phi" * mode "eulerians" * Eulerian 6 circles - PseudoAxisEngine "hkl": "h", "k", "l" * Mode "bissector_vertical" * Mode "constant_omega_vertical" * Mode "constant_chi_vertical" * Mode "constant_phi_vertical" * Mode "double_diffraction_vertical" * Mode "lifting_detector" * Mode "bissector_horizontal" * Mode "double_diffraction_horizontal" - PseudoAxisEngine "psi": "psi" * Mode "psi" * Kappa 6 circles - PseudoAxisEngine "hkl": "h", "k", "l" * Mode "bissector_vertical" * Mode "constant_omega_vertical" * Mode "constant_chi_vertical" * Mode "constant_phi_vertical" * Mode "double_diffraction_vertical" * Mode "lifting_detector" * Mode "bissector_horizontal" * Mode "constant_phi_horizontal" * Mode "constant_kphi_horizontal" * Mode "double_diffraction_horizontal" - PseudoAxisEngine "psi": "psi" * Mode "psi" - PseudoAxisEngien "eulerians": "omega", "chi", "phi" * mode "eulerians" * 2.3.0 24-01-2007 * Refactoring of the sample part. - It is now possible to create different kind of samples easily. - MonoCrystal type. * Diffractometers: - Eulerian 6 Circles. - kappa 4 Circles Vertical. * Refactoring of the PseudoAxe part. - Derived PseudoAxe can be created from an already existing PseudoAxe if the Geometry conversion exist. - Better related PseudoAxes (ex Eulerians on a Kappa) - The PseudoAxe is just a interface, computation is done by the PseudoAxeEngine. - Eulerian 4 Circles Vertical - "th2th" : derived from the twoC - "q2th" : derived from the twoC - "q" : derived from the twoC - kappa 4 Circles Vertical - "omega", "chi", "phi" : eulerian 4 circles Vertical pseudoAxes. - "th2th" : derived from the twoC - "q2th" : derived from the twoC - "q" : derived from the twoC - "psi" : derived from the Eulerian 4 Circlers Vertical. - Eulerian 6 Circles: - "tth" : 2 * theta - "q" : 2 * tau * sin(theta) / lambda - "psi" : derived from the Eulerian 4 Circlers Vertical. - Kappa6C - "omega", "chi", "phi" : derived from the Kappa 4 Circles Vertical. - "tth" derived from the Eulerian6C. - "q" derived from the Eulerian6C. - "psi" : derived from the Eulerian 4 Circlers Vertical. * Refactoring of the Modes. - Derived Mode can be created from an already existing Mode if the Geometry conversion exist. - all Eulerian 4 Circles on the kappa4C, Eulerian6c and Kappa6C diffractometers. * 2.2.0 19-06-2006 * Diffractometers: - twoC Vertical. - Eulerian 4 Circles Vertical. - Kappa 6 Circles. * PseudoAxes - twoC - "th2th": omega - 2theta (domega = d2theta / 2) - "q2th" : omega - 2theta (domega = d2theta / 2) but q2th = 2 tau sin(theta) / lambda - "q" : 2 * tau * sin(theta) / lambda - Eulerian 4 Circles Vertical - "th2th": omega - 2theta (domega = d2theta / 2) - "q2th" : omega - 2theta (domega = d2theta / 2) but q2th = 2 tau sin(theta) / lambda - "q" : 2 * tau * sin(theta) / lambda - "psi" : Rotation of the sample oaround the Q vector. * Modes - twoC - "symetric" (omega = theta, 2theta = 2 * theta) - "fix incidence" (omega = free, 2theta = 2 * theta) - Eulerian 4 circles: - "Bissector" - "Delta Theta" - "Constant Omega" - "Constant Chi" - 'Constant Phi" - Kappa6C - all Eulerian 4 Circles modes. hkl-5.0.0.2449/hkl3d/0000755000175000017500000000000013237020540014114 5ustar00piccapicca00000000000000hkl-5.0.0.2449/hkl3d/hkl3d.h0000644000175000017500000001250113236600666015305 0ustar00piccapicca00000000000000/* This file is part of the hkl3d library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2010-2018 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel * Oussama SBOUI */ #ifndef __HKL3D_H__ #define __HKL3D_H__ #include #include "hkl.h" // forward declaration due to bullet static linking struct btCollisionObject; struct btCollisionWorld; struct btCollisionConfiguration; struct btBroadphaseInterface; struct btCollisionDispatcher; struct btCollisionShape; struct btVector3; struct btTriangleMesh; #ifdef __cplusplus extern "C" { #endif typedef struct _Hkl3DStats Hkl3DStats; typedef struct _Hkl3DObject Hkl3DObject; typedef struct _Hkl3DModel Hkl3DModel; typedef struct _Hkl3DConfig Hkl3DConfig; typedef struct _Hkl3DAxis Hkl3DAxis; typedef struct _Hkl3DGeometry Hkl3DGeometry; typedef struct _Hkl3D Hkl3D; /**************/ /* Hkl3DStats */ /**************/ struct _Hkl3DStats { struct timeval collision; struct timeval transformation; }; extern double hkl3d_stats_get_collision_ms(const Hkl3DStats *self); extern void hkl3d_stats_fprintf(FILE *f, Hkl3DStats *self); /***************/ /* Hkl3DObject */ /***************/ struct _Hkl3DObject { Hkl3DModel *model; /* weak reference */ int id; Hkl3DAxis *axis; /* weak reference */ G3DObject *g3d; /* weak reference */ struct btCollisionObject *btObject; struct btCollisionShape *btShape; struct btTriangleMesh *meshes; struct btVector3 *color; int is_colliding; int hide; int added; int selected; int movable; char *axis_name; float transformation[16]; }; extern void hkl3d_object_aabb_get(const Hkl3DObject *self, float from[3], float to[3]); extern void hkl3d_object_fprintf(FILE *f, const Hkl3DObject *self); /**************/ /* Hkl3DModel */ /**************/ struct _Hkl3DModel { char *filename; G3DModel *g3d; Hkl3DObject **objects; size_t len; }; extern void hkl3d_model_fprintf(FILE *f, const Hkl3DModel *self); /***************/ /* Hkl3DConfig */ /***************/ struct _Hkl3DConfig { Hkl3DModel **models; size_t len; }; extern void hkl3d_config_fprintf(FILE *f, const Hkl3DConfig *self); /*************/ /* Hkl3DAxis */ /*************/ struct _Hkl3DAxis { Hkl3DObject **objects; /* connected object */ size_t len; }; /*****************/ /* HKL3DGeometry */ /*****************/ struct _Hkl3DGeometry { HklGeometry *geometry; /* weak reference */ Hkl3DAxis **axes; }; /*********/ /* HKL3D */ /*********/ struct _Hkl3D { char const *filename; /* config filename */ Hkl3DGeometry *geometry; G3DModel *model; Hkl3DStats stats; Hkl3DConfig *config; struct btCollisionConfiguration *_btCollisionConfiguration; struct btBroadphaseInterface *_btBroadphase; struct btCollisionWorld *_btWorld; struct btCollisionDispatcher *_btDispatcher; #ifdef USE_PARALLEL_DISPATCHER struct btThreadSupportInterface *_btThreadSupportInterface; #endif }; HKLAPI extern Hkl3D* hkl3d_new(const char *filename, HklGeometry *geometry) HKL_ARG_NONNULL(2); HKLAPI extern void hkl3d_free(Hkl3D *self) HKL_ARG_NONNULL(1); HKLAPI extern int hkl3d_is_colliding(Hkl3D *self) HKL_ARG_NONNULL(1); HKLAPI extern void hkl3d_load_config(Hkl3D *self, const char *filename) HKL_ARG_NONNULL(1, 2); HKLAPI extern void hkl3d_save_config(Hkl3D *self, const char *filename) HKL_ARG_NONNULL(1, 2); HKLAPI extern Hkl3DModel *hkl3d_add_model_from_file(Hkl3D *self, const char *filename, const char *directory) HKL_ARG_NONNULL(1, 2, 3); HKLAPI extern void hkl3d_connect_all_axes(Hkl3D *self) HKL_ARG_NONNULL(1); HKLAPI extern void hkl3d_hide_object(Hkl3D *self, Hkl3DObject *object, int hide) HKL_ARG_NONNULL(1, 2); HKLAPI extern void hkl3d_remove_object(Hkl3D *self, Hkl3DObject *object) HKL_ARG_NONNULL(1, 2); HKLAPI extern void hkl3d_get_bounding_boxes(Hkl3D *self, struct btVector3 *min, struct btVector3 *max) HKL_ARG_NONNULL(1, 2, 3); HKLAPI extern int hkl3d_get_nb_manifolds(Hkl3D *self) HKL_ARG_NONNULL(1); HKLAPI extern int hkl3d_get_nb_contacts(Hkl3D *self, int manifold) HKL_ARG_NONNULL(1); HKLAPI extern void hkl3d_get_collision_coordinates(Hkl3D *self, int manifold, int contact, double *xa, double *ya, double *za, double *xb, double *yb, double *zb) HKL_ARG_NONNULL(1); HKLAPI extern void hkl3d_connect_object_to_axis(Hkl3D *self, Hkl3DObject *object, const char *name) HKL_ARG_NONNULL(1, 2, 3); HKLAPI extern void hkl3d_fprintf(FILE *f, const Hkl3D *self) HKL_ARG_NONNULL(1, 2); #ifdef __cplusplus } #endif #endif hkl-5.0.0.2449/hkl3d/Makefile.am0000644000175000017500000000126013211061165016147 0ustar00piccapicca00000000000000# Process this file with automake to produce Makefile.in AM_CXXFLAGS = \ -fpermissive \ -I$(top_srcdir) \ -I$(top_srcdir)/hkl \ -I$(top_srcdir)/hkl3d \ -I$(top_srcdir)/hkl3d/bullet/src\ -DPKGDATA=\""$(pkgdatadir)"\" \ $(G3D_CFLAGS) \ $(YAML_CFLAGS) \ $(BULLET_CFLAGS) AM_LDFLAGS = -version-info 0:0:0 \ $(G3D_LIBS) \ $(YAML_LIBS) \ $(BULLET_LIBS) noinst_LTLIBRARIES = libhkl3d.la libhkl3d_la_SOURCES = hkl3d.cpp libhkl3d_la_LIBADD = \ $(top_builddir)/hkl/libhkl.la noinst_HEADERS = hkl3d.h # Support for GNU Flymake, in Emacs. check-syntax: AM_CXXFLAGS += -fsyntax-only -pipe check-syntax: test -z "$(CHK_SOURCES)" || $(CXXCOMPILE) $(CHK_SOURCES) .PHONY: check-syntax hkl-5.0.0.2449/hkl3d/hkl3d.cpp0000644000175000017500000010120113237017527015633 0ustar00piccapicca00000000000000/* This file is part of the hkl3d library. * * The hkl library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The hkl library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the hkl library. If not, see . * * Copyright (C) 2010 Synchrotron SOLEIL * L'Orme des Merisiers Saint-Aubin * BP 48 91192 GIF-sur-YVETTE CEDEX * * Authors: Picca Frédéric-Emmanuel * Oussama Sboui */ #include #include #include #include #include #include #include #include #include #include #include #include #include "hkl3d.h" #include "hkl-geometry-private.h" #include "btBulletCollisionCommon.h" #include "BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h" #include "BulletCollision/Gimpact/btGImpactShape.h" #ifdef USE_PARALLEL_DISPATCHER # include "BulletMultiThreaded/SpuGatheringCollisionDispatcher.h" # include "BulletMultiThreaded/PlatformDefinitions.h" # include "BulletMultiThreaded/PosixThreadSupport.h" # include "BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.h" #endif /***************/ /* static part */ /***************/ static float identity[] = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ,0, 0, 0, 0, 1}; static void *_hkl3d_malloc(int size, const char *error) { void *tmp; tmp = calloc(1, size); if(!tmp){ fprintf(stderr, "%s", error); exit(128); } return tmp; } /* malloc method */ #define HKL3D_MALLOC(type) (type *)_hkl3d_malloc(sizeof(type), "Can not allocate memory for a " #type) /***************/ /* Hkl3DObject */ /***************/ static btTriangleMesh *trimesh_from_g3dobject(G3DObject *object) { btTriangleMesh *trimesh; float *vertex; GSList *faces; trimesh = new btTriangleMesh(); trimesh->preallocateVertices(object->vertex_count); faces = object->faces; vertex = object->vertex_data; while(faces){ G3DFace *face; face = (G3DFace*)faces->data; btVector3 vertex0(vertex[3*(face->vertex_indices[0])], vertex[3*(face->vertex_indices[0])+1], vertex[3*(face->vertex_indices[0])+2]); btVector3 vertex1(vertex[3*(face->vertex_indices[1])], vertex[3*(face->vertex_indices[1])+1], vertex[3*(face->vertex_indices[1])+2]); btVector3 vertex2(vertex[3*(face->vertex_indices[2])], vertex[3*(face->vertex_indices[2])+1], vertex[3*(face->vertex_indices[2])+2]); trimesh->addTriangle(vertex0, vertex1, vertex2, true); faces = g_slist_next(faces); } return trimesh; } static btCollisionShape* shape_from_trimesh(btTriangleMesh *trimesh, int movable) { btCollisionShape* shape; /* * create the bullet shape depending on the static status or not of the piece * static : do not move * movable : connected to a HklGeometry axis. */ if (movable >= 0){ shape = dynamic_cast(new btGImpactMeshShape(trimesh)); shape->setMargin(btScalar(0)); shape->setLocalScaling(btVector3(1,1,1)); /* maybe usefull for softbodies (useless for now) */ (dynamic_cast(shape))->postUpdate(); /* needed for the collision and must be call after the postUpdate (doc) */ (dynamic_cast(shape))->updateBound(); }else{ shape = dynamic_cast(new btBvhTriangleMeshShape (trimesh, true)); shape->setMargin(btScalar(0)); shape->setLocalScaling(btVector3(1,1,1)); } return shape; } static btCollisionObject * btObject_from_shape(btCollisionShape* shape) { btCollisionObject *btObject; /* create the Object and add the shape */ btObject = new btCollisionObject(); btObject->setCollisionShape(shape); btObject->activate(true); return btObject; } static Hkl3DObject *hkl3d_object_new(Hkl3DModel *model, G3DObject *object, int id) { int i; GSList *faces; G3DMaterial* material; Hkl3DObject *self = NULL; self = HKL3D_MALLOC(Hkl3DObject); /* extract the color from the first face */ /* this is usefull for the bullet GL draw method */ faces = object->faces; material = ((G3DFace *)faces->data)->material; /* fill the hkl3d object structure. */ self->model = model; self->id = id; self->axis_name = strdup(object->name); self->axis = NULL; self->g3d = object; self->meshes = trimesh_from_g3dobject(object); self->btShape = shape_from_trimesh(self->meshes, false); self->btObject = btObject_from_shape(self->btShape); self->color = new btVector3(material->r, material->g, material->b); self->hide = object->hide; self->added = false; self->selected = false; self->movable = false; /* * if the object already contain a transformation set the Hkl3DObject * transformation with this transformation. Otherwise set it with the * identity */ if(object->transformation){ for(i=0; i<16; i++) self->transformation[i] = object->transformation->matrix[i]; }else{ /* create one as we requiered it to apply our transformations */ object->transformation = g_new0(G3DTransformation, 1); for(i=0; i<16; i++){ self->transformation[i] = identity[i]; object->transformation->matrix[i] = identity[i]; } } self->is_colliding = false; return self; } static void hkl3d_object_free(Hkl3DObject *self) { if(!self) return; /* memory leak in libg3d */ if(self->g3d && self->g3d->transformation){ g_free(self->g3d->transformation); self->g3d->transformation = NULL; } if(self->color){ delete self->color; self->color = NULL; } if(self->btObject){ delete self->btObject; self->btObject = NULL; } if(self->btShape){ delete self->btShape; self->btShape = NULL; } if(self->meshes){ delete self->meshes; self->meshes = NULL; } if(self->axis_name){ free(self->axis_name); self->axis_name = NULL; } free(self); } static void hkl3d_object_set_movable(Hkl3DObject *self, int movable) { if(!self) return; if(self->movable != movable){ self->movable = movable; delete self->btObject; delete self->btShape; self->btShape = shape_from_trimesh(self->meshes, movable); self->btObject = btObject_from_shape(self->btShape); } } static void hkl3d_object_set_axis_name(Hkl3DObject *self, const char *name) { if(!self || !name || self->axis_name == name) return; if(self->axis_name) free(self->axis_name); self->axis_name = strdup(name); } static void matrix_fprintf(FILE *f, const float matrix[]) { fprintf(f, "transformation : "); for(uint i=0; i<4; ++i){ if(i) fprintf(f, " "); for(uint j=0; j<4; ++j){ fprintf(f, " %6.3f", matrix[4 * i + j]); } fprintf(f, "\n"); } } void hkl3d_object_aabb_get(const Hkl3DObject *self, float from[3], float to[3]) { btVector3 min, max; self->btShape->getAabb(self->btObject->getWorldTransform(), min, max); from[0] = min.getX(); from[1] = min.getY(); from[2] = min.getZ(); to[0] = max.getX(); to[1] = max.getY(); to[2] = max.getZ(); } void hkl3d_object_fprintf(FILE *f, const Hkl3DObject *self) { GSList *faces; G3DMaterial* material; faces = self->g3d->faces; material = ((G3DFace *)faces->data)->material; fprintf(f, "id : %d\n", self->id); fprintf(f, "name : %s (%p)\n", self->axis_name, self->axis_name); fprintf(f, "axis : %p\n", self->axis); matrix_fprintf(f, self->transformation); fprintf(f, "btObject : %p\n", self->btObject); fprintf(f, "g3d : %p\n", self->g3d); matrix_fprintf(f, self->g3d->transformation->matrix); fprintf(f, "btShape : %p\n", self->btShape); fprintf(f, "meshes : %p\n", self->meshes); fprintf(f, "color : %f, %f, %f\n", material->r, material->g, material->b); fprintf(f, "is_colliding : %d\n", self->is_colliding); fprintf(f, "hide : %d\n", self->hide); fprintf(f, "added : %d\n", self->added); fprintf(f, "selected : %d\n", self->selected); } /**************/ /* Hkl3DModel */ /**************/ static Hkl3DModel *hkl3d_model_new(void) { Hkl3DModel *self = NULL; self = HKL3D_MALLOC(Hkl3DModel); self->filename = NULL; self->objects = NULL; self->len = 0; self->g3d = NULL; return self; } static void hkl3d_model_free(Hkl3DModel *self) { size_t i; if(!self) return; free(self->filename); for(i=0; ilen; ++i) hkl3d_object_free(self->objects[i]); free(self->objects); g3d_model_free(self->g3d); free(self); } static void hkl3d_model_add_object(Hkl3DModel *self, Hkl3DObject *object) { if(!self || !object) return; self->objects = (typeof(self->objects))realloc(self->objects, sizeof(*self->objects) * (self->len + 1)); self->objects[self->len++] = object; } static void hkl3d_model_delete_object(Hkl3DModel *self, Hkl3DObject *object) { size_t i; if(!self || !object) return; if(self != object->model) return; /* find the index of the object */ for(i=0; self->objects[i] != object; ++i); hkl3d_object_free(object); self->len--; /* move all above objects of 1 position */ if(i < self->len) memmove(object, object + 1, sizeof(object) * (self->len - i)); } void hkl3d_model_fprintf(FILE *f, const Hkl3DModel *self) { fprintf(f, "config (%zd):\n", self->len); for(size_t i=0; ilen; ++i) hkl3d_object_fprintf(f, self->objects[i]); } /* * Initialize the bullet collision environment. * create the Hkl3DObjects * create the Hkl3DConfig */ static Hkl3DModel *hkl3d_model_new_from_file(const char *filename) { G3DModel *model; Hkl3DModel *self = NULL; GSList *objects; /* lets iterate from the first object. */ G3DContext *context; if(!filename) return NULL; /* load the model from the file */ context = g3d_context_new(); model = g3d_model_load_full(context, filename, 0); g3d_context_free(context); if(!model) return NULL; self = hkl3d_model_new(); self->filename = strdup(filename); self->g3d = model; /* create all the attached Hkl3DObjects */ objects = model->objects; while(objects){ G3DObject *object; object = (G3DObject*)objects->data; if(object->vertex_count){ int id; Hkl3DObject *hkl3dObject; id = g_slist_index(model->objects, object); hkl3dObject = hkl3d_object_new(self, object, id); /* remembers objects to avoid memory leak */ hkl3d_model_add_object(self, hkl3dObject); } objects = g_slist_next(objects); } return self; } /***************/ /* Hkl3DConfig */ /***************/ static Hkl3DConfig* hkl3d_config_new(void) { Hkl3DConfig* self = NULL; self = (Hkl3DConfig*)malloc(sizeof(Hkl3DConfig)); if(!self) return NULL; self->models = NULL; self->len = 0; return self; } static void hkl3d_config_free(Hkl3DConfig *self) { if(!self) return; for(size_t i=0; ilen; ++i) hkl3d_model_free(self->models[i]); free(self->models); free(self); } static void hkl3d_config_add_model(Hkl3DConfig *self, Hkl3DModel *model) { self->models = (typeof(self->models))realloc(self->models, sizeof(*self->models) * (self->len + 1)); self->models[self->len++] = model; } void hkl3d_config_fprintf(FILE *f, const Hkl3DConfig *self) { fprintf(f, "models (%zd):\n", self->len); for(size_t i=0; ilen; ++i) hkl3d_model_fprintf(f, self->models[i]); } /**************/ /* Hkl3DStats */ /**************/ double hkl3d_stats_get_collision_ms(const Hkl3DStats *self) { return self->collision.tv_sec*1000. + self->collision.tv_usec/1000.; } void hkl3d_stats_fprintf(FILE *f, const Hkl3DStats *self) { fprintf(f, "transformation : %f ms collision : %f ms \n", self->transformation.tv_sec*1000. + self->transformation.tv_usec/1000., hkl3d_stats_get_collision_ms(self)); } /*************/ /* Hkl3DAxis */ /*************/ static Hkl3DAxis *hkl3d_axis_new(void) { Hkl3DAxis *self = NULL; self = HKL3D_MALLOC(Hkl3DAxis); self->objects = NULL; /* do not own the objects */ self->len = 0; return self; } static void hkl3d_axis_free(Hkl3DAxis *self) { if(!self) return; free(self->objects); free(self); } /* should be optimized (useless if the Hkl3DObject had a connection with the Hkl3DAxis */ static void hkl3d_axis_attach_object(Hkl3DAxis *self, Hkl3DObject *object) { object->axis = self; self->objects = (Hkl3DObject **)realloc(self->objects, sizeof(*self->objects) * (self->len + 1)); self->objects[self->len++] = object; } /* should be optimized (useless if the Hkl3DObject had a connection with the Hkl3DAxis */ static void hkl3d_axis_detach_object(Hkl3DAxis *self, Hkl3DObject *object) { size_t i; if(!self || !object) return; if(self != object->axis) return; /* find the index of the object in the object list */ for(i=0; self->objects[i] != object; ++i); object->axis = NULL; /* move all above objects of 1 position */ self->len--; if(i < self->len) memmove(object, object+1, sizeof(object) * (self->len - i)); } static void hkl3d_axis_fprintf(FILE *f, const Hkl3DAxis *self) { if(!f || !self) return; fprintf(f, "Axis len : %zd\n", self->len); for(size_t i=0; ilen; ++i) hkl3d_object_fprintf(f, self->objects[i]); } /*****************/ /* Hkl3DGeometry */ /*****************/ static Hkl3DGeometry *hkl3d_geometry_new(HklGeometry *geometry) { uint i; Hkl3DGeometry *self = NULL; self = HKL3D_MALLOC(Hkl3DGeometry); self->geometry = geometry; self->axes = (Hkl3DAxis **)malloc(darray_size(geometry->axes) * sizeof(*self->axes)); for(i=0; iaxes); ++i) self->axes[i] = hkl3d_axis_new(); return self; } static void hkl3d_geometry_free(Hkl3DGeometry *self) { uint i; if(!self) return; for(i=0; igeometry->axes); ++i) hkl3d_axis_free(self->axes[i]); free(self->axes); free(self); } static void hkl3d_geometry_apply_transformations(Hkl3DGeometry *self) { HklHolder **holder; darray_foreach(holder, self->geometry->holders){ size_t j; btQuaternion btQ(0, 0, 0, 1); size_t len = (*holder)->config->len; for(j=0; jconfig->idx[j]; const HklQuaternion *q = hkl_parameter_quaternion_get(darray_item(self->geometry->axes, idx)); G3DMatrix G3DM[16]; /* conversion beetween hkl -> bullet coordinates */ btQ *= btQuaternion(-q->data[1], q->data[3], q->data[2], q->data[0]); /* move each object connected to that hkl Axis. */ /* apply the quaternion transformation to the bullet object */ /* use the bullet library to compute the OpenGL matrix */ /* apply this matrix to the G3DObject for the visualisation */ for(k=0; kaxes[idx]->len; ++k){ self->axes[idx]->objects[k]->btObject->getWorldTransform().setRotation(btQ); self->axes[idx]->objects[k]->btObject->getWorldTransform().getOpenGLMatrix( G3DM ); memcpy(self->axes[idx]->objects[k]->g3d->transformation->matrix, &G3DM[0], sizeof(G3DM)); } } } } static void hkl3d_geometry_fprintf(FILE *f, const Hkl3DGeometry *self) { if(!f || !self) return; fprintf(f, "Hkl3DGeometry : \n"); hkl_geometry_fprintf(f, self->geometry); for(size_t i=0; igeometry->axes); ++i) hkl3d_axis_fprintf(f, self->axes[i]); } static Hkl3DAxis *hkl3d_geometry_axis_get(Hkl3DGeometry *self, const char *name) { for(size_t i=0; igeometry->axes); ++i){ if (!strcmp(hkl_parameter_name_get(darray_item(self->geometry->axes, i)), name)) return self->axes[i]; } return NULL; } /*********/ /* HKL3D */ /*********/ static void hkl3d_apply_transformations(Hkl3D *self) { struct timeval debut, fin; /* set the right transformation of each objects and get numbers */ gettimeofday(&debut, NULL); hkl3d_geometry_apply_transformations(self->geometry); gettimeofday(&fin, NULL); timersub(&fin, &debut, &self->stats.transformation); } void hkl3d_connect_all_axes(Hkl3D *self) { /* connect use the axes names */ for(size_t i=0;iconfig->len;i++) for(size_t j=0;jconfig->models[i]->len;j++) hkl3d_connect_object_to_axis(self, self->config->models[i]->objects[j], self->config->models[i]->objects[j]->axis_name); } /** * Hkl3D::Hkl3D: * @filename: * @geometry: * * * * Returns: **/ Hkl3D *hkl3d_new(const char *filename, HklGeometry *geometry) { Hkl3D *self = NULL; self = HKL3D_MALLOC(Hkl3D); self->geometry = hkl3d_geometry_new(geometry); self->config = hkl3d_config_new(); self->model= g3d_model_new(); /* initialize the bullet part */ self->_btCollisionConfiguration = new btDefaultCollisionConfiguration(); #ifdef USE_PARALLEL_DISPATCHER int maxNumOutstandingTasks = 2; PosixThreadSupport::ThreadConstructionInfo constructionInfo("collision", processCollisionTask, createCollisionLocalStoreMemory, maxNumOutstandingTasks); self->_btThreadSupportInterface = new PosixThreadSupport(constructionInfo); self->_btDispatcher = new SpuGatheringCollisionDispatcher(self->_btThreadSupportInterface, maxNumOutstandingTasks, self->_btCollisionConfiguration); #else self->_btDispatcher = new btCollisionDispatcher(self->_btCollisionConfiguration); #endif btGImpactCollisionAlgorithm::registerAlgorithm(self->_btDispatcher); btVector3 worldAabbMin(-1000,-1000,-1000); btVector3 worldAabbMax( 1000, 1000, 1000); self->_btBroadphase = new btAxisSweep3(worldAabbMin, worldAabbMax); self->_btWorld = new btCollisionWorld(self->_btDispatcher, self->_btBroadphase, self->_btCollisionConfiguration); self->filename = filename; if (filename) hkl3d_load_config(self, filename); return self; } void hkl3d_free(Hkl3D *self) { /* remove all objects from the collision world */ for(size_t i=0; iconfig->len; ++i) for(size_t j=0; jconfig->models[i]->len; ++j) if(self->config->models[i]->objects[j]->added) self->_btWorld->removeCollisionObject(self->config->models[i]->objects[j]->btObject); hkl3d_geometry_free(self->geometry); hkl3d_config_free(self->config); if (self->_btWorld) delete self->_btWorld; if (self->_btBroadphase) delete self->_btBroadphase; if (self->_btDispatcher) delete self->_btDispatcher; #ifdef USE_PARALLEL_DISPATCHER if (self->_btThreadSupportInterface){ /* delete _btThreadSupportInterface; */ /* _btThreadSupportInterface = 0; */ } #endif if (self->_btCollisionConfiguration) delete self->_btCollisionConfiguration; g_free(self->model); /* do not use g3d_model_free as it is juste a container for all config->model */ free(self); } Hkl3DModel *hkl3d_add_model_from_file(Hkl3D *self, const char *filename, const char *directory) { int current; Hkl3DModel *model = NULL; int res; /* first set the current directory using the directory * parameter. Maybe using openat should be a better solution * in the hkl3d_model_new_from_file */ current = open(".", O_RDONLY); if (current < 0) return NULL; res = chdir(directory); if(res < 0) goto close_current; model = hkl3d_model_new_from_file(filename); if(model){ /* we can not display two different models with the current g3dviewer code */ /* so concatenate this loaded model with the one of hkl3d */ self->model->objects = g_slist_concat(self->model->objects, model->g3d->objects); self->model->materials = g_slist_concat(self->model->materials, model->g3d->materials); /* update the Hkl3D internals from the model */ hkl3d_config_add_model(self->config, model); } /* restore the current directory */ res = fchdir(current); return model; close_current: close(current); return NULL; } /* check that the axis name is really available in the Geometry */ /* if axis name not valid make the object static object->name = NULL */ /* ok so check if the axis was already connected or not */ /* if already connected check if it was a different axis do the job */ /* if not yet connected do the job */ /* fill movingCollisionObject and movingG3DObjects vectors for transformations */ void hkl3d_connect_object_to_axis(Hkl3D *self, Hkl3DObject *object, const char *name) { Hkl3DAxis *axis3d = hkl3d_geometry_axis_get(self->geometry, name); if (!object->movable){ if(axis3d){ /* static -> movable */ self->_btWorld->removeCollisionObject(object->btObject); hkl3d_object_set_movable(object, true); self->_btWorld->addCollisionObject(object->btObject); object->added = true; hkl3d_axis_attach_object(axis3d, object); } }else{ if(!axis3d){ /* movable -> static */ self->_btWorld->removeCollisionObject(object->btObject); hkl3d_object_set_movable(object, false); self->_btWorld->addCollisionObject(object->btObject); object->added = true; }else{ /* movable -> movable */ if(strcmp(object->axis_name, name)){ /* not the same axis */ hkl3d_axis_detach_object(object->axis, object); hkl3d_axis_attach_object(axis3d, object); } } } hkl3d_object_set_axis_name(object, name); } void hkl3d_load_config(Hkl3D *self, const char *filename) { int j = 0; int l; int endEvent = 0; yaml_parser_t parser; yaml_event_t input_event; FILE *file; char *dirc; char *dir; Hkl3DModel *config = NULL; /* Clear the objects. */ memset(&parser, 0, sizeof(parser)); memset(&input_event, 0, sizeof(input_event)); file = fopen(filename, "rb"); if (!file){ fprintf(stderr, "Could not open the %s config file\n", filename); return; } if (!yaml_parser_initialize(&parser)) fprintf(stderr, "Could not initialize the parser object\n"); yaml_parser_set_input_file(&parser, file); /* compute the dirname of the config file as all model files */ /* will be relative to this directory */ dirc = strdup(filename); dir = dirname(dirc); while(!endEvent){ /* Get the next event. */ yaml_parser_parse(&parser, &input_event); /* Check if this is the stream end. */ if(input_event.type == YAML_STREAM_END_EVENT) endEvent = 1; if(input_event.type == YAML_DOCUMENT_START_EVENT){ j=0; /* skip 4 events */ // DOCUMENT-START // SEQUENCE-START // MAPPING-START // SCALAR fileName key for(l=0;l<4;l++){ yaml_event_delete(&input_event); yaml_parser_parse(&parser, &input_event); } /* the add form file method create a default Hkl3DModel and add it to the HKL3D */ /* we just need to update this config with the values from the configuration file */ config = hkl3d_add_model_from_file(self, (const char *)input_event.data.scalar.value, dir); /* skip 3 events */ // SCALAR objects key // SEQUENCE-START // MAPPING-START for(l=0;l<3;l++){ yaml_event_delete(&input_event); yaml_parser_parse(&parser, &input_event); } } if((input_event.type==YAML_MAPPING_START_EVENT)&& config){ j++; /* skip 2 events */ // MAPPING-START // SCALAR iD key for(l=0;l<2;l++){ yaml_event_delete(&input_event); yaml_parser_parse(&parser, &input_event); } /* get the object id */ config->objects[j-1]->id = atoi((const char *)input_event.data.scalar.value); /* skip 2 more events */ // SCALAR valueId // SCALAR Name key for(l=0;l<2;l++){ yaml_event_delete(&input_event); yaml_parser_parse(&parser, &input_event); } /* get the name of the object from the config file */ hkl3d_object_set_axis_name(config->objects[j-1], (const char *)input_event.data.scalar.value); /* skip 3 events */ // SCALAR NameValue // SCALAR transformation key // SEQUENCE-START for(l=0;l<3;l++){ yaml_event_delete(&input_event); yaml_parser_parse(&parser, &input_event); } /* get the 16 values of the transformation */ for(l=0;l<16;l++){ config->objects[j-1]->transformation[l] = atof((const char *)input_event.data.scalar.value); yaml_event_delete(&input_event); yaml_parser_parse(&parser, &input_event); } /* skip 2 events */ // SEQUENCE-END // SCALAR hide key for(l=0;l<2;l++){ yaml_event_delete(&input_event); yaml_parser_parse(&parser, &input_event); } /* get the hide value */ config->objects[j-1]->hide = strcmp((const char *)input_event.data.scalar.value, "no"); config->objects[j-1]->g3d->hide = config->objects[j-1]->hide; } yaml_event_delete(&input_event); } free(dirc); yaml_parser_delete(&parser); fclose(file); /* now that everythings goes fine we can save the filename */ self->filename = filename; hkl3d_connect_all_axes(self); } void hkl3d_save_config(Hkl3D *self, const char *filename) { for(size_t i=0; iconfig->len; i++){ char number[64]; int properties1, key1, value1,seq0; int root; time_t now; yaml_emitter_t emitter; yaml_document_t output_document; yaml_event_t output_event; FILE * file; memset(&emitter, 0, sizeof(emitter)); memset(&output_document, 0, sizeof(output_document)); memset(&output_event, 0, sizeof(output_event)); if (!yaml_emitter_initialize(&emitter)) fprintf(stderr, "Could not inialize the emitter object\n"); /* Set the emitter parameters */ file = fopen(filename, "a+"); if(!file){ fprintf(stderr, "Could not open the config file %s to save\n", filename); return; } yaml_emitter_set_output_file(&emitter, file); yaml_emitter_open(&emitter); /* Create an output_document object */ if (!yaml_document_initialize(&output_document, NULL, NULL, NULL, 0, 0)) fprintf(stderr, "Could not create a output_document object\n"); /* Create the root of the config file */ time(&now); root = yaml_document_add_sequence(&output_document, (yaml_char_t *)ctime(&now), YAML_BLOCK_SEQUENCE_STYLE); /* create the property of the root sequence */ properties1 = yaml_document_add_mapping(&output_document, (yaml_char_t *)YAML_MAP_TAG, YAML_BLOCK_MAPPING_STYLE); yaml_document_append_sequence_item(&output_document, root, properties1); /* add the map key1 : value1 to the property */ key1 = yaml_document_add_scalar(&output_document, NULL, (yaml_char_t *)"FileName", -1, YAML_PLAIN_SCALAR_STYLE); value1 = yaml_document_add_scalar(&output_document, NULL, (yaml_char_t *)self->config->models[i]->filename, -1, YAML_PLAIN_SCALAR_STYLE); yaml_document_append_mapping_pair(&output_document, properties1, key1, value1); /* add the map key1 : seq0 to the first property */ key1 = yaml_document_add_scalar(&output_document, NULL, (yaml_char_t *)"Objects", -1, YAML_PLAIN_SCALAR_STYLE); /* create the sequence of objects */ seq0 = yaml_document_add_sequence(&output_document, (yaml_char_t *)YAML_SEQ_TAG, YAML_BLOCK_SEQUENCE_STYLE); for(size_t j=0; jconfig->models[i]->len; j++){ int k; int properties; int key; int value; int seq1; properties = yaml_document_add_mapping(&output_document, (yaml_char_t *)YAML_MAP_TAG, YAML_BLOCK_MAPPING_STYLE); yaml_document_append_sequence_item(&output_document,seq0, properties); key = yaml_document_add_scalar(&output_document, NULL, (yaml_char_t *)"Id", -1, YAML_PLAIN_SCALAR_STYLE); sprintf(number, "%d", self->config->models[i]->objects[j]->id); value = yaml_document_add_scalar(&output_document, NULL, (yaml_char_t *)number, -1, YAML_PLAIN_SCALAR_STYLE); yaml_document_append_mapping_pair(&output_document,properties,key,value); key = yaml_document_add_scalar(&output_document, NULL, (yaml_char_t *)"Name", -1, YAML_PLAIN_SCALAR_STYLE); value = yaml_document_add_scalar(&output_document, NULL, (yaml_char_t *)self->config->models[i]->objects[j]->axis_name, -1, YAML_PLAIN_SCALAR_STYLE); yaml_document_append_mapping_pair(&output_document,properties,key,value); key = yaml_document_add_scalar(&output_document, NULL, (yaml_char_t *)"Transformation", -1, YAML_PLAIN_SCALAR_STYLE); seq1 = yaml_document_add_sequence(&output_document, (yaml_char_t *)YAML_SEQ_TAG, YAML_FLOW_SEQUENCE_STYLE); yaml_document_append_mapping_pair(&output_document,properties, key, seq1); for(k=0; k<16; k++){ sprintf(number, "%f", self->config->models[i]->objects[j]->transformation[k]); value = yaml_document_add_scalar(&output_document, NULL, (yaml_char_t *)number, -1, YAML_PLAIN_SCALAR_STYLE); yaml_document_append_sequence_item(&output_document,seq1,value); } key = yaml_document_add_scalar(&output_document, NULL, (yaml_char_t *)"Hide", -1, YAML_PLAIN_SCALAR_STYLE); if(self->config->models[i]->objects[j]->hide) value = yaml_document_add_scalar(&output_document, NULL, (yaml_char_t *)"yes", -1, YAML_PLAIN_SCALAR_STYLE); else value = yaml_document_add_scalar(&output_document, NULL, (yaml_char_t *)"no", -1, YAML_PLAIN_SCALAR_STYLE); yaml_document_append_mapping_pair(&output_document,properties,key,value); } yaml_document_append_mapping_pair(&output_document, properties1, key1, seq0); /* flush the document */ yaml_emitter_dump(&emitter, &output_document); fclose(file); yaml_document_delete(&output_document); yaml_emitter_delete(&emitter); } } /** * Hkl3D::hide_object: * * update the visibility of an Hkl3DObject in the bullet world * add or remove the object from the _btWorld depending on the hide * member of the object. **/ void hkl3d_hide_object(Hkl3D *self, Hkl3DObject *object, int hide) { /* first update the G3DObject */ object->hide = hide; object->g3d->hide = hide; if(object->hide){ if (object->added){ self->_btWorld->removeCollisionObject(object->btObject); object->added = false; } }else{ if(!object->added){ self->_btWorld->addCollisionObject(object->btObject); object->added = true; } } } /* remove an object from the model */ void hkl3d_remove_object(Hkl3D *self, Hkl3DObject *object) { hkl3d_hide_object(self, object, TRUE); hkl3d_axis_detach_object(object->axis, object); /* now remove the G3DObject from the model */ self->model->objects = g_slist_remove(self->model->objects, object->g3d); hkl3d_model_delete_object(object->model, object); } int hkl3d_is_colliding(Hkl3D *self) { int numManifolds; struct timeval debut, fin; /* apply geometry transformation */ hkl3d_apply_transformations(self); /* perform the collision detection and get numbers */ gettimeofday(&debut, NULL); if(self->_btWorld){ self->_btWorld->performDiscreteCollisionDetection(); self->_btWorld->updateAabbs(); } gettimeofday(&fin, NULL); timersub(&fin, &debut, &self->stats.collision); numManifolds = self->_btDispatcher->getNumManifolds(); /* update Hkl3DObject collision from manifolds */ for(size_t i=0; iconfig->len; i++){ for(size_t j=0; jconfig->models[i]->len; j++){ Hkl3DObject *object = self->config->models[i]->objects[j]; object->is_colliding = FALSE; for(int k=0; k_btDispatcher->getManifoldByIndexInternal(k); object->is_colliding |= object->btObject == manifold->getBody0(); object->is_colliding |= object->btObject == manifold->getBody1(); } } } return numManifolds != 0; } /** * Hkl3D::get_bounding_boxes: * @min: * @max: * * get the bounding boxes of the current world from the bullet internals. **/ void hkl3d_get_bounding_boxes(Hkl3D *self, struct btVector3 *min, struct btVector3 *max) { self->_btWorld->getBroadphase()->getBroadphaseAabb(*min, *max); } int hkl3d_get_nb_manifolds(Hkl3D *self) { return self->_btDispatcher->getNumManifolds(); } int hkl3d_get_nb_contacts(Hkl3D *self, int manifold) { return self->_btDispatcher->getManifoldByIndexInternal(manifold)->getNumContacts(); } void hkl3d_get_collision_coordinates(Hkl3D *self, int manifold, int contact, double *xa, double *ya, double *za, double *xb, double *yb, double *zb) { btPersistentManifold *contactManifold; contactManifold = self->_btDispatcher->getManifoldByIndexInternal(manifold); btManifoldPoint & pt = contactManifold->getContactPoint(contact); btVector3 ptA = pt.getPositionWorldOnA(); btVector3 ptB = pt.getPositionWorldOnB(); *xa = ptA.x(); *ya = ptA.y(); *za = ptA.z(); *xb = ptB.x(); *yb = ptB.y(); *zb = ptB.z(); } void hkl3d_fprintf(FILE *f, const Hkl3D *self) { fprintf(f, "filename : %s\n", self->filename); hkl3d_geometry_fprintf(f, self->geometry); fprintf(f, "\n"); fprintf(f, "model : %p\n", self->model); hkl3d_stats_fprintf(f, &self->stats); hkl3d_config_fprintf(f, self->config); fprintf(f, "_btCollisionConfiguration : %p\n", self->_btCollisionConfiguration); fprintf(f, "_btBroadphase : %p\n", self->_btBroadphase); fprintf(f, "_btWorld : %p\n", self->_btWorld); fprintf(f, "_btDispatcher : %p\n", self->_btDispatcher); #ifdef USE_PARALLEL_DISPATCHER fprintf(f, "_btThreadSupportInterface : %p\n", self->_btThreadSupportInterface); #endif } hkl-5.0.0.2449/hkl3d/Makefile.in0000644000175000017500000004724613237017634016210 0ustar00piccapicca00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Process this file with automake to produce Makefile.in VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = hkl3d ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libhkl3d_la_DEPENDENCIES = $(top_builddir)/hkl/libhkl.la am_libhkl3d_la_OBJECTS = hkl3d.lo libhkl3d_la_OBJECTS = $(am_libhkl3d_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(libhkl3d_la_SOURCES) DIST_SOURCES = $(libhkl3d_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASY = @ASY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BULLET_CFLAGS = @BULLET_CFLAGS@ BULLET_LIBS = @BULLET_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMACS = @EMACS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ G3D_CFLAGS = @G3D_CFLAGS@ G3D_LIBS = @G3D_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GNUPLOT = @GNUPLOT@ GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ GOBJECT_LIBS = @GOBJECT_LIBS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTKGLEXT_CFLAGS = @GTKGLEXT_CFLAGS@ GTKGLEXT_LIBS = @GTKGLEXT_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HDF5_CFLAGS = @HDF5_CFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VMAJ = @VMAJ@ YAML_CFLAGS = @YAML_CFLAGS@ YAML_LIBS = @YAML_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ release_info = @release_info@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ version_info = @version_info@ AM_CXXFLAGS = \ -fpermissive \ -I$(top_srcdir) \ -I$(top_srcdir)/hkl \ -I$(top_srcdir)/hkl3d \ -I$(top_srcdir)/hkl3d/bullet/src\ -DPKGDATA=\""$(pkgdatadir)"\" \ $(G3D_CFLAGS) \ $(YAML_CFLAGS) \ $(BULLET_CFLAGS) AM_LDFLAGS = -version-info 0:0:0 \ $(G3D_LIBS) \ $(YAML_LIBS) \ $(BULLET_LIBS) noinst_LTLIBRARIES = libhkl3d.la libhkl3d_la_SOURCES = hkl3d.cpp libhkl3d_la_LIBADD = \ $(top_builddir)/hkl/libhkl.la noinst_HEADERS = hkl3d.h all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu hkl3d/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu hkl3d/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libhkl3d.la: $(libhkl3d_la_OBJECTS) $(libhkl3d_la_DEPENDENCIES) $(EXTRA_libhkl3d_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libhkl3d_la_OBJECTS) $(libhkl3d_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkl3d.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Support for GNU Flymake, in Emacs. check-syntax: AM_CXXFLAGS += -fsyntax-only -pipe check-syntax: test -z "$(CHK_SOURCES)" || $(CXXCOMPILE) $(CHK_SOURCES) .PHONY: check-syntax # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: