/* chart-grid.c generated by valac 0.56.19, the Vala compiler
 * generated from chart-grid.vala, do not modify */

/*
 * Copyright (c) 2025 focus-timer contributors
 *
 * SPDX-License-Identifier: GPL-3.0-or-later
 *
 * Authors: Kamil Prusko <kamilprusko@gmail.com>
 */

#include "ft_ui.h"
#include <glib.h>
#include <float.h>
#include <math.h>
#include <gtk/gtk.h>
#include <glib-object.h>
#include <gsk/gsk.h>
#include <gdk/gdk.h>
#include <string.h>

#if !defined(VALA_STRICT_C)
#if !defined(__clang__) && defined(__GNUC__) && (__GNUC__ >= 14)
#pragma GCC diagnostic warning "-Wincompatible-pointer-types"
#elif defined(__clang__) && (__clang_major__ >= 16)
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
#endif
#endif

enum  {
	FT_CHART_GRID_0_PROPERTY,
	FT_CHART_GRID_X_AXIS_PROPERTY,
	FT_CHART_GRID_Y_AXIS_PROPERTY,
	FT_CHART_GRID_X_ORIGIN_PROPERTY,
	FT_CHART_GRID_Y_ORIGIN_PROPERTY,
	FT_CHART_GRID_LINE_WIDTH_PROPERTY,
	FT_CHART_GRID_HORIZONTAL_PROPERTY,
	FT_CHART_GRID_VERTICAL_PROPERTY,
	FT_CHART_GRID_NUM_PROPERTIES
};
static GParamSpec* ft_chart_grid_properties[FT_CHART_GRID_NUM_PROPERTIES];
#define _gsk_path_unref0(var) ((var == NULL) ? NULL : (var = (gsk_path_unref (var), NULL)))
#define _gsk_path_builder_unref0(var) ((var == NULL) ? NULL : (var = (gsk_path_builder_unref (var), NULL)))
#define __vala_GskStroke_free0(var) ((var == NULL) ? NULL : (var = (_vala_GskStroke_free (var), NULL)))

struct _FtChartGridPrivate {
	FtChartAxis* _x_axis;
	FtChartAxis* _y_axis;
	gint _x_origin;
	gint _y_origin;
	gfloat _line_width;
	gboolean _horizontal;
	gboolean _vertical;
};

static gint FtChartGrid_private_offset;
static gpointer ft_chart_grid_parent_class = NULL;

static void ___lambda11_ (FtChartGrid* self);
static void ____lambda11__ft_chart_axis_configured (FtChartAxis* _sender,
                                             gpointer self);
static void ___lambda12_ (FtChartGrid* self);
static void ____lambda12__ft_chart_axis_configured (FtChartAxis* _sender,
                                             gpointer self);
static void ft_chart_grid_real_snapshot (GtkWidget* base,
                                  GtkSnapshot* snapshot);
static void _vala_GskStroke_free (GskStroke* self);
static void ft_chart_grid_real_dispose (GObject* base);
static void ft_chart_grid_finalize (GObject * obj);
static GType ft_chart_grid_get_type_once (void);
static void _vala_ft_chart_grid_get_property (GObject * object,
                                       guint property_id,
                                       GValue * value,
                                       GParamSpec * pspec);
static void _vala_ft_chart_grid_set_property (GObject * object,
                                       guint property_id,
                                       const GValue * value,
                                       GParamSpec * pspec);
static inline gpointer _vala_memdup2 (gconstpointer mem,
                        gsize byte_size);

static inline gpointer
ft_chart_grid_get_instance_private (FtChartGrid* self)
{
	return G_STRUCT_MEMBER_P (self, FtChartGrid_private_offset);
}

static void
___lambda11_ (FtChartGrid* self)
{
	gtk_widget_queue_draw ((GtkWidget*) self);
}

static void
____lambda11__ft_chart_axis_configured (FtChartAxis* _sender,
                                        gpointer self)
{
	___lambda11_ ((FtChartGrid*) self);
}

static void
___lambda12_ (FtChartGrid* self)
{
	gtk_widget_queue_draw ((GtkWidget*) self);
}

static void
____lambda12__ft_chart_axis_configured (FtChartAxis* _sender,
                                        gpointer self)
{
	___lambda12_ ((FtChartGrid*) self);
}

FtChartGrid*
ft_chart_grid_construct (GType object_type,
                         FtChartAxis* x_axis,
                         FtChartAxis* y_axis)
{
	FtChartGrid * self = NULL;
	FtChartAxis* _tmp0_;
	FtChartAxis* _tmp2_;
	self = (FtChartGrid*) g_object_new (object_type, NULL);
	self->priv->_x_axis = x_axis;
	self->priv->_y_axis = y_axis;
	_tmp0_ = self->priv->_x_axis;
	if (_tmp0_ != NULL) {
		FtChartAxis* _tmp1_;
		_tmp1_ = self->priv->_x_axis;
		g_signal_connect_object (_tmp1_, "configured", (GCallback) ____lambda11__ft_chart_axis_configured, self, 0);
	}
	_tmp2_ = self->priv->_y_axis;
	if (_tmp2_ != NULL) {
		FtChartAxis* _tmp3_;
		_tmp3_ = self->priv->_y_axis;
		g_signal_connect_object (_tmp3_, "configured", (GCallback) ____lambda12__ft_chart_axis_configured, self, 0);
	}
	return self;
}

FtChartGrid*
ft_chart_grid_new (FtChartAxis* x_axis,
                   FtChartAxis* y_axis)
{
	return ft_chart_grid_construct (FT_TYPE_CHART_GRID, x_axis, y_axis);
}

static void
_vala_GskStroke_free (GskStroke* self)
{
	g_boxed_free (gsk_stroke_get_type (), self);
}

static void
ft_chart_grid_real_snapshot (GtkWidget* base,
                             GtkSnapshot* snapshot)
{
	FtChartGrid * self;
	gfloat width = 0.0F;
	gfloat height = 0.0F;
	GskStroke* stroke = NULL;
	GskStroke* _tmp0_;
	GskPathBuilder* path_builder = NULL;
	GskPathBuilder* _tmp1_;
	gfloat line_offset = 0.0F;
	GdkRGBA color = {0};
	GdkRGBA _tmp2_ = {0};
	gboolean _tmp3_ = FALSE;
	gboolean _tmp4_;
	gboolean _tmp5_;
	gboolean _tmp15_ = FALSE;
	gboolean _tmp16_;
	gboolean _tmp17_;
	GskPathBuilder* _tmp27_;
	GskPath* _tmp28_;
	GskPath* _tmp29_;
	GskStroke* _tmp30_;
	GdkRGBA _tmp31_;
	self = (FtChartGrid*) base;
	g_return_if_fail (snapshot != NULL);
	width = (gfloat) gtk_widget_get_width ((GtkWidget*) self);
	height = (gfloat) gtk_widget_get_height ((GtkWidget*) self);
	_tmp0_ = gsk_stroke_new (self->priv->_line_width);
	stroke = _tmp0_;
	_tmp1_ = gsk_path_builder_new ();
	path_builder = _tmp1_;
	line_offset = fabsf (fmodf (self->priv->_line_width - 1.0f, 2.0f) - 1.0f) * 0.5f;
	gtk_widget_get_color ((GtkWidget*) self, &_tmp2_);
	color = _tmp2_;
	color.alpha = color.alpha * 0.5f;
	_tmp4_ = ft_chart_grid_get_horizontal (self);
	_tmp5_ = _tmp4_;
	if (_tmp5_) {
		FtChartAxis* _tmp6_;
		_tmp6_ = self->priv->_y_axis;
		_tmp3_ = _tmp6_ != NULL;
	} else {
		_tmp3_ = FALSE;
	}
	if (_tmp3_) {
		gfloat y_scale = 0.0F;
		FtChartAxis* _tmp7_;
		gfloat _tmp8_;
		gfloat _tmp9_;
		FtChartAxis* _tmp10_;
		gint _tmp11_ = 0;
		gfloat* _tmp12_;
		_tmp7_ = self->priv->_y_axis;
		_tmp8_ = ft_chart_axis_get_scale (_tmp7_);
		_tmp9_ = _tmp8_;
		y_scale = -_tmp9_;
		_tmp10_ = self->priv->_y_axis;
		_tmp12_ = ft_chart_axis_get_ticks (_tmp10_, &_tmp11_);
		{
			gfloat* tick_value_collection = NULL;
			gint tick_value_collection_length1 = 0;
			gint _tick_value_collection_size_ = 0;
			gint tick_value_it = 0;
			tick_value_collection = _tmp12_;
			tick_value_collection_length1 = _tmp11_;
			for (tick_value_it = 0; tick_value_it < tick_value_collection_length1; tick_value_it = tick_value_it + 1) {
				gfloat tick_value = 0.0F;
				tick_value = tick_value_collection[tick_value_it];
				{
					gfloat line_y = 0.0F;
					GskPathBuilder* _tmp13_;
					GskPathBuilder* _tmp14_;
					line_y = roundf ((tick_value * y_scale) + ((gfloat) self->priv->_y_origin)) + line_offset;
					_tmp13_ = path_builder;
					gsk_path_builder_move_to (_tmp13_, 0.0f, line_y);
					_tmp14_ = path_builder;
					gsk_path_builder_line_to (_tmp14_, width, line_y);
				}
			}
			tick_value_collection = (g_free (tick_value_collection), NULL);
		}
	}
	_tmp16_ = ft_chart_grid_get_vertical (self);
	_tmp17_ = _tmp16_;
	if (_tmp17_) {
		FtChartAxis* _tmp18_;
		_tmp18_ = self->priv->_x_axis;
		_tmp15_ = _tmp18_ != NULL;
	} else {
		_tmp15_ = FALSE;
	}
	if (_tmp15_) {
		gfloat x_scale = 0.0F;
		FtChartAxis* _tmp19_;
		gfloat _tmp20_;
		gfloat _tmp21_;
		FtChartAxis* _tmp22_;
		gint _tmp23_ = 0;
		gfloat* _tmp24_;
		_tmp19_ = self->priv->_x_axis;
		_tmp20_ = ft_chart_axis_get_scale (_tmp19_);
		_tmp21_ = _tmp20_;
		x_scale = _tmp21_;
		_tmp22_ = self->priv->_x_axis;
		_tmp24_ = ft_chart_axis_get_ticks (_tmp22_, &_tmp23_);
		{
			gfloat* tick_value_collection = NULL;
			gint tick_value_collection_length1 = 0;
			gint _tick_value_collection_size_ = 0;
			gint tick_value_it = 0;
			tick_value_collection = _tmp24_;
			tick_value_collection_length1 = _tmp23_;
			for (tick_value_it = 0; tick_value_it < tick_value_collection_length1; tick_value_it = tick_value_it + 1) {
				gfloat tick_value = 0.0F;
				tick_value = tick_value_collection[tick_value_it];
				{
					gfloat line_x = 0.0F;
					GskPathBuilder* _tmp25_;
					GskPathBuilder* _tmp26_;
					line_x = roundf ((tick_value * x_scale) + ((gfloat) self->priv->_x_origin)) + line_offset;
					_tmp25_ = path_builder;
					gsk_path_builder_move_to (_tmp25_, line_x, 0.0f);
					_tmp26_ = path_builder;
					gsk_path_builder_line_to (_tmp26_, line_x, height);
				}
			}
			tick_value_collection = (g_free (tick_value_collection), NULL);
		}
	}
	_tmp27_ = path_builder;
	_tmp28_ = gsk_path_builder_to_path (_tmp27_);
	_tmp29_ = _tmp28_;
	_tmp30_ = stroke;
	_tmp31_ = color;
	gtk_snapshot_append_stroke (snapshot, _tmp29_, _tmp30_, &_tmp31_);
	_gsk_path_unref0 (_tmp29_);
	_gsk_path_builder_unref0 (path_builder);
	__vala_GskStroke_free0 (stroke);
}

static void
ft_chart_grid_real_dispose (GObject* base)
{
	FtChartGrid * self;
	self = (FtChartGrid*) base;
	self->priv->_x_axis = NULL;
	self->priv->_y_axis = NULL;
	G_OBJECT_CLASS (ft_chart_grid_parent_class)->dispose ((GObject*) G_TYPE_CHECK_INSTANCE_CAST (self, gtk_widget_get_type (), GtkWidget));
}

FtChartAxis*
ft_chart_grid_get_x_axis (FtChartGrid* self)
{
	FtChartAxis* result;
	FtChartAxis* _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_x_axis;
	result = _tmp0_;
	return result;
}

FtChartAxis*
ft_chart_grid_get_y_axis (FtChartGrid* self)
{
	FtChartAxis* result;
	FtChartAxis* _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_y_axis;
	result = _tmp0_;
	return result;
}

gint
ft_chart_grid_get_x_origin (FtChartGrid* self)
{
	gint result;
	g_return_val_if_fail (self != NULL, -1);
	result = self->priv->_x_origin;
	return result;
}

void
ft_chart_grid_set_x_origin (FtChartGrid* self,
                            gint value)
{
	g_return_if_fail (self != NULL);
	self->priv->_x_origin = value;
	g_object_notify_by_pspec ((GObject *) self, ft_chart_grid_properties[FT_CHART_GRID_X_ORIGIN_PROPERTY]);
}

gint
ft_chart_grid_get_y_origin (FtChartGrid* self)
{
	gint result;
	g_return_val_if_fail (self != NULL, -1);
	result = self->priv->_y_origin;
	return result;
}

void
ft_chart_grid_set_y_origin (FtChartGrid* self,
                            gint value)
{
	g_return_if_fail (self != NULL);
	self->priv->_y_origin = value;
	g_object_notify_by_pspec ((GObject *) self, ft_chart_grid_properties[FT_CHART_GRID_Y_ORIGIN_PROPERTY]);
}

gfloat
ft_chart_grid_get_line_width (FtChartGrid* self)
{
	gfloat result;
	g_return_val_if_fail (self != NULL, -1.0F);
	result = self->priv->_line_width;
	return result;
}

void
ft_chart_grid_set_line_width (FtChartGrid* self,
                              gfloat value)
{
	g_return_if_fail (self != NULL);
	self->priv->_line_width = value;
	gtk_widget_queue_draw ((GtkWidget*) self);
	g_object_notify_by_pspec ((GObject *) self, ft_chart_grid_properties[FT_CHART_GRID_LINE_WIDTH_PROPERTY]);
}

gboolean
ft_chart_grid_get_horizontal (FtChartGrid* self)
{
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->priv->_horizontal;
	return result;
}

void
ft_chart_grid_set_horizontal (FtChartGrid* self,
                              gboolean value)
{
	g_return_if_fail (self != NULL);
	self->priv->_horizontal = value;
	gtk_widget_queue_draw ((GtkWidget*) self);
	g_object_notify_by_pspec ((GObject *) self, ft_chart_grid_properties[FT_CHART_GRID_HORIZONTAL_PROPERTY]);
}

gboolean
ft_chart_grid_get_vertical (FtChartGrid* self)
{
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->priv->_vertical;
	return result;
}

void
ft_chart_grid_set_vertical (FtChartGrid* self,
                            gboolean value)
{
	g_return_if_fail (self != NULL);
	self->priv->_vertical = value;
	gtk_widget_queue_draw ((GtkWidget*) self);
	g_object_notify_by_pspec ((GObject *) self, ft_chart_grid_properties[FT_CHART_GRID_VERTICAL_PROPERTY]);
}

static void
ft_chart_grid_class_init (FtChartGridClass * klass,
                          gpointer klass_data)
{
	ft_chart_grid_parent_class = g_type_class_peek_parent (klass);
	g_type_class_adjust_private_offset (klass, &FtChartGrid_private_offset);
	((GtkWidgetClass *) klass)->snapshot = (void (*) (GtkWidget*, GtkSnapshot*)) ft_chart_grid_real_snapshot;
	((GObjectClass *) klass)->dispose = (void (*) (GObject*)) ft_chart_grid_real_dispose;
	G_OBJECT_CLASS (klass)->get_property = _vala_ft_chart_grid_get_property;
	G_OBJECT_CLASS (klass)->set_property = _vala_ft_chart_grid_set_property;
	G_OBJECT_CLASS (klass)->finalize = ft_chart_grid_finalize;
	g_object_class_install_property (G_OBJECT_CLASS (klass), FT_CHART_GRID_X_AXIS_PROPERTY, ft_chart_grid_properties[FT_CHART_GRID_X_AXIS_PROPERTY] = g_param_spec_object ("x-axis", "x-axis", "x-axis", FT_TYPE_CHART_AXIS, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FT_CHART_GRID_Y_AXIS_PROPERTY, ft_chart_grid_properties[FT_CHART_GRID_Y_AXIS_PROPERTY] = g_param_spec_object ("y-axis", "y-axis", "y-axis", FT_TYPE_CHART_AXIS, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FT_CHART_GRID_X_ORIGIN_PROPERTY, ft_chart_grid_properties[FT_CHART_GRID_X_ORIGIN_PROPERTY] = g_param_spec_int ("x-origin", "x-origin", "x-origin", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FT_CHART_GRID_Y_ORIGIN_PROPERTY, ft_chart_grid_properties[FT_CHART_GRID_Y_ORIGIN_PROPERTY] = g_param_spec_int ("y-origin", "y-origin", "y-origin", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FT_CHART_GRID_LINE_WIDTH_PROPERTY, ft_chart_grid_properties[FT_CHART_GRID_LINE_WIDTH_PROPERTY] = g_param_spec_float ("line-width", "line-width", "line-width", -G_MAXFLOAT, G_MAXFLOAT, 0.0F, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FT_CHART_GRID_HORIZONTAL_PROPERTY, ft_chart_grid_properties[FT_CHART_GRID_HORIZONTAL_PROPERTY] = g_param_spec_boolean ("horizontal", "horizontal", "horizontal", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FT_CHART_GRID_VERTICAL_PROPERTY, ft_chart_grid_properties[FT_CHART_GRID_VERTICAL_PROPERTY] = g_param_spec_boolean ("vertical", "vertical", "vertical", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	gtk_widget_class_set_css_name (GTK_WIDGET_CLASS (klass), "chartgrid");
}

static void
ft_chart_grid_instance_init (FtChartGrid * self,
                             gpointer klass)
{
	self->priv = ft_chart_grid_get_instance_private (self);
	self->priv->_x_axis = NULL;
	self->priv->_y_axis = NULL;
	self->priv->_x_origin = 0;
	self->priv->_y_origin = 0;
	self->priv->_line_width = 1.0f;
	self->priv->_horizontal = TRUE;
	self->priv->_vertical = TRUE;
}

static void
ft_chart_grid_finalize (GObject * obj)
{
	FtChartGrid * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, FT_TYPE_CHART_GRID, FtChartGrid);
	G_OBJECT_CLASS (ft_chart_grid_parent_class)->finalize (obj);
}

static GType
ft_chart_grid_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (FtChartGridClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) ft_chart_grid_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (FtChartGrid), 0, (GInstanceInitFunc) ft_chart_grid_instance_init, NULL };
	GType ft_chart_grid_type_id;
	ft_chart_grid_type_id = g_type_register_static (gtk_widget_get_type (), "FtChartGrid", &g_define_type_info, 0);
	FtChartGrid_private_offset = g_type_add_instance_private (ft_chart_grid_type_id, sizeof (FtChartGridPrivate));
	return ft_chart_grid_type_id;
}

GType
ft_chart_grid_get_type (void)
{
	static volatile gsize ft_chart_grid_type_id__once = 0;
	if (g_once_init_enter (&ft_chart_grid_type_id__once)) {
		GType ft_chart_grid_type_id;
		ft_chart_grid_type_id = ft_chart_grid_get_type_once ();
		g_once_init_leave (&ft_chart_grid_type_id__once, ft_chart_grid_type_id);
	}
	return ft_chart_grid_type_id__once;
}

static void
_vala_ft_chart_grid_get_property (GObject * object,
                                  guint property_id,
                                  GValue * value,
                                  GParamSpec * pspec)
{
	FtChartGrid * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, FT_TYPE_CHART_GRID, FtChartGrid);
	switch (property_id) {
		case FT_CHART_GRID_X_AXIS_PROPERTY:
		g_value_set_object (value, ft_chart_grid_get_x_axis (self));
		break;
		case FT_CHART_GRID_Y_AXIS_PROPERTY:
		g_value_set_object (value, ft_chart_grid_get_y_axis (self));
		break;
		case FT_CHART_GRID_X_ORIGIN_PROPERTY:
		g_value_set_int (value, ft_chart_grid_get_x_origin (self));
		break;
		case FT_CHART_GRID_Y_ORIGIN_PROPERTY:
		g_value_set_int (value, ft_chart_grid_get_y_origin (self));
		break;
		case FT_CHART_GRID_LINE_WIDTH_PROPERTY:
		g_value_set_float (value, ft_chart_grid_get_line_width (self));
		break;
		case FT_CHART_GRID_HORIZONTAL_PROPERTY:
		g_value_set_boolean (value, ft_chart_grid_get_horizontal (self));
		break;
		case FT_CHART_GRID_VERTICAL_PROPERTY:
		g_value_set_boolean (value, ft_chart_grid_get_vertical (self));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}

static void
_vala_ft_chart_grid_set_property (GObject * object,
                                  guint property_id,
                                  const GValue * value,
                                  GParamSpec * pspec)
{
	FtChartGrid * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, FT_TYPE_CHART_GRID, FtChartGrid);
	switch (property_id) {
		case FT_CHART_GRID_X_ORIGIN_PROPERTY:
		ft_chart_grid_set_x_origin (self, g_value_get_int (value));
		break;
		case FT_CHART_GRID_Y_ORIGIN_PROPERTY:
		ft_chart_grid_set_y_origin (self, g_value_get_int (value));
		break;
		case FT_CHART_GRID_LINE_WIDTH_PROPERTY:
		ft_chart_grid_set_line_width (self, g_value_get_float (value));
		break;
		case FT_CHART_GRID_HORIZONTAL_PROPERTY:
		ft_chart_grid_set_horizontal (self, g_value_get_boolean (value));
		break;
		case FT_CHART_GRID_VERTICAL_PROPERTY:
		ft_chart_grid_set_vertical (self, g_value_get_boolean (value));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}

static inline gpointer
_vala_memdup2 (gconstpointer mem,
               gsize byte_size)
{
	gpointer new_mem;
	if (mem && byte_size != 0) {
		new_mem = g_malloc (byte_size);
		memcpy (new_mem, mem, byte_size);
	} else {
		new_mem = NULL;
	}
	return new_mem;
}

