mirror of https://github.com/CGAL/cgal
Remove whitespace
This commit is contained in:
parent
d409ffdd7f
commit
3dfd7031c2
|
|
@ -165,7 +165,7 @@ concepts `Field` and `RealEmbeddable`, while
|
||||||
`RingNumberType` combines `IntegralDomainWithoutDivision` and
|
`RingNumberType` combines `IntegralDomainWithoutDivision` and
|
||||||
`RealEmbeddable`. Algebraically, the real number types do not form
|
`RealEmbeddable`. Algebraically, the real number types do not form
|
||||||
distinct structures and are therefore not listed in the concept
|
distinct structures and are therefore not listed in the concept
|
||||||
hierarchy of Figure \ref figConceptHierarchyOfAlgebraicStructures .
|
hierarchy of Figure \ref figConceptHierarchyOfAlgebraicStructures.
|
||||||
|
|
||||||
# Interoperability #
|
# Interoperability #
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -146,7 +146,7 @@ such that the alpha shape satisfies the following two properties
|
||||||
(i) all data points are either on the boundary or in the interior
|
(i) all data points are either on the boundary or in the interior
|
||||||
of the regularized version of the alpha shape (no singular faces).
|
of the regularized version of the alpha shape (no singular faces).
|
||||||
|
|
||||||
(ii) The number of components is equal or less than a given number .<BR>
|
(ii) The number of components is equal or less than a given number.
|
||||||
|
|
||||||
The current implementation is static, that is after its construction
|
The current implementation is static, that is after its construction
|
||||||
points cannot be inserted or removed.
|
points cannot be inserted or removed.
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,9 @@ namespace CGAL {
|
||||||
|
|
||||||
This chapter describes the two-dimensional Apollonius graph
|
This chapter describes the two-dimensional Apollonius graph
|
||||||
of \cgal. We start with a few definitions in
|
of \cgal. We start with a few definitions in
|
||||||
Section \ref secapollonius2definitions .
|
Section \ref secapollonius2definitions.
|
||||||
The software design of the 2D Apollonius graph package is described
|
The software design of the 2D Apollonius graph package is described
|
||||||
in Section \ref secapollonius2design .
|
in Section \ref secapollonius2design.
|
||||||
In Section \ref secapollonius2traits we discuss the geometric
|
In Section \ref secapollonius2traits we discuss the geometric
|
||||||
traits of the 2D Apollonius graph package and in Section
|
traits of the 2D Apollonius graph package and in Section
|
||||||
\ref secapollonius2hierarchy the Apollonius graph hierarchy, a data
|
\ref secapollonius2hierarchy the Apollonius graph hierarchy, a data
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
The optimization code uses infix `OPTIMISATION` in the assertions,
|
The optimization code uses infix `OPTIMISATION` in the assertions,
|
||||||
e.g. defining the compiler flag
|
e.g. defining the compiler flag
|
||||||
`CGAL_OPTIMISATION_NO_PRECONDITIONS` switches precondition
|
`CGAL_OPTIMISATION_NO_PRECONDITIONS` switches precondition
|
||||||
checking off, cf. Section \ref secchecks .
|
checking off, cf. Section \ref secchecks.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -289,7 +289,7 @@ otherwise the box might shrink and one might miss intersections.
|
||||||
\section secboxintersparams Example Using the topology and the cutoff Parameters
|
\section secboxintersparams Example Using the topology and the cutoff Parameters
|
||||||
|
|
||||||
Boxes can be interpreted by the box intersection algorithm as closed
|
Boxes can be interpreted by the box intersection algorithm as closed
|
||||||
or as half-open boxes, see also Section \ref secboxintersdef . Closed
|
or as half-open boxes, see also Section \ref secboxintersdef. Closed
|
||||||
boxes support zero-width boxes and they can intersect at their
|
boxes support zero-width boxes and they can intersect at their
|
||||||
boundaries, while half-open boxes always have a positive volume and
|
boundaries, while half-open boxes always have a positive volume and
|
||||||
they only intersect iff their interiors overlap. The choice between
|
they only intersect iff their interiors overlap. The choice between
|
||||||
|
|
@ -304,7 +304,7 @@ parameter and its two values:
|
||||||
The example program uses a two-dimensional box with `int`
|
The example program uses a two-dimensional box with `int`
|
||||||
coordinates and `id`-numbers that are by default explicitly
|
coordinates and `id`-numbers that are by default explicitly
|
||||||
stored. We create the same boxes as in the minimal example in
|
stored. We create the same boxes as in the minimal example in
|
||||||
Section \ref secboxintersectminimal . We create a \f$ 3 \times 3\f$ grid
|
Section \ref secboxintersectminimal. We create a \f$ 3 \times 3\f$ grid
|
||||||
of `boxes`, and two boxes for the `query` sequence, namely the
|
of `boxes`, and two boxes for the `query` sequence, namely the
|
||||||
box at the center and the box from the upper-right corner of the grid.
|
box at the center and the box from the upper-right corner of the grid.
|
||||||
|
|
||||||
|
|
@ -379,7 +379,7 @@ box intersection is reported to an empty dummy callback.
|
||||||
For each box set, a near-optimal cutoff parameter is determined using
|
For each box set, a near-optimal cutoff parameter is determined using
|
||||||
an adaptive approximation. The runtime required for streaming is
|
an adaptive approximation. The runtime required for streaming is
|
||||||
compared against usual scanning. Results on a Xeon 2.4GHz with 4GB
|
compared against usual scanning. Results on a Xeon 2.4GHz with 4GB
|
||||||
main memory can be seen in Figure \ref fig_benchmark . For a small
|
main memory can be seen in Figure \ref fig_benchmark. For a small
|
||||||
number of boxes, pure scanning is still faster than streaming with
|
number of boxes, pure scanning is still faster than streaming with
|
||||||
optimal cutoff, which would just delegate the box sets to the scanning
|
optimal cutoff, which would just delegate the box sets to the scanning
|
||||||
algorithm. As there are more and more boxes, the overhead becomes less
|
algorithm. As there are more and more boxes, the overhead becomes less
|
||||||
|
|
|
||||||
|
|
@ -66,10 +66,10 @@ polyhedron and therefore selected, but in case of the open unit cube
|
||||||
which allows the correct representation of Nef polyhedra, which are
|
which allows the correct representation of Nef polyhedra, which are
|
||||||
closed under Boolean and topological operations. Details can be found
|
closed under Boolean and topological operations. Details can be found
|
||||||
in the chapter on 3D Boolean operations on Nef
|
in the chapter on 3D Boolean operations on Nef
|
||||||
polyhedra \ref chapterNef3 .
|
polyhedra \ref chapterNef3.
|
||||||
|
|
||||||
Usually, an instance of `Nef_polyhedron_3` does not contain any
|
Usually, an instance of `Nef_polyhedron_3` does not contain any
|
||||||
redundant items. However, the function `convex_decomposition_3`
|
redundant items. However, the function `::convex_decomposition_3`
|
||||||
subdivides selected volumes of a given `Nef_polyhedron_3` by
|
subdivides selected volumes of a given `Nef_polyhedron_3` by
|
||||||
selected facets. These additional facets are therefore redundant,
|
selected facets. These additional facets are therefore redundant,
|
||||||
i.e., their insertion alters the representation of the polyhedron, but
|
i.e., their insertion alters the representation of the polyhedron, but
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ and the plane equations of each face are not computed.
|
||||||
\pre There are at least four points in the range
|
\pre There are at least four points in the range
|
||||||
[`first`, `last`) not all of which are collinear.
|
[`first`, `last`) not all of which are collinear.
|
||||||
|
|
||||||
The function `convex_hull_3` computes the convex hull of a given set of
|
The function `::convex_hull_3` computes the convex hull of a given set of
|
||||||
three-dimensional points
|
three-dimensional points
|
||||||
Two versions of this function
|
Two versions of this function
|
||||||
are available. The first can be used when it is known that the result
|
are available. The first can be used when it is known that the result
|
||||||
|
|
@ -44,7 +44,7 @@ and for the second, it is required that
|
||||||
For both versions, if the kernel `R` of the points determined by `InputIterator::value_type`
|
For both versions, if the kernel `R` of the points determined by `InputIterator::value_type`
|
||||||
is a kernel with exact predicates but inexact constructions
|
is a kernel with exact predicates but inexact constructions
|
||||||
(in practice we check `R::Has_filtered_predicates_tag` is `Tag_true` and `R::FT` is a floating point type),
|
(in practice we check `R::Has_filtered_predicates_tag` is `Tag_true` and `R::FT` is a floating point type),
|
||||||
then the default traits class of `convex_hull_3` is `Convex_hull_traits_3<R>`, and `R` otherwise.
|
then the default traits class of `::convex_hull_3` is `Convex_hull_traits_3<R>`, and `R` otherwise.
|
||||||
|
|
||||||
\sa `CGAL::convex_hull_incremental_3`
|
\sa `CGAL::convex_hull_incremental_3`
|
||||||
\sa `CGAL::ch_eddy`
|
\sa `CGAL::ch_eddy`
|
||||||
|
|
@ -62,7 +62,7 @@ Example
|
||||||
The following program computes the convex hull of a set of 250 random
|
The following program computes the convex hull of a set of 250 random
|
||||||
points chosen from a sphere of radius 100. It then determines if the resulting
|
points chosen from a sphere of radius 100. It then determines if the resulting
|
||||||
hull is a segment or a polyhedron. Notice that the traits class is not
|
hull is a segment or a polyhedron. Notice that the traits class is not
|
||||||
necessary in the call to `convex_hull_3` but is used in the definition
|
necessary in the call to `::convex_hull_3` but is used in the definition
|
||||||
of `Polyhedron_3`.
|
of `Polyhedron_3`.
|
||||||
|
|
||||||
\cgalexample{Convex_hull_3/quickhull_3.cpp}
|
\cgalexample{Convex_hull_3/quickhull_3.cpp}
|
||||||
|
|
|
||||||
|
|
@ -192,7 +192,7 @@ Convex_hull_d<R>(int d, R Kernel = R());
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
returns the dimension of ambient space
|
returns the dimension of ambient space.
|
||||||
*/
|
*/
|
||||||
int dimension() ;
|
int dimension() ;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ The convex hull class is parameterized by a traits class that provides
|
||||||
model <I>e.g.</I>, `Homogeneous<RT>` or `Cartesian<FT>` for use
|
model <I>e.g.</I>, `Homogeneous<RT>` or `Cartesian<FT>` for use
|
||||||
with `Convex_hull_d`, where the dimension is fixed to three.
|
with `Convex_hull_d`, where the dimension is fixed to three.
|
||||||
The validity of the computed convex hull can be checked using the
|
The validity of the computed convex hull can be checked using the
|
||||||
member function `is_valid`, which implements the algorithm
|
member function `::is_valid`, which implements the algorithm
|
||||||
of Mehlhorn <I>et al.</I>\cite mnssssu-cgpvg-96 to determine if
|
of Mehlhorn <I>et al.</I>\cite mnssssu-cgpvg-96 to determine if
|
||||||
the vertices of a given polytope constitute a strongly convex point
|
the vertices of a given polytope constitute a strongly convex point
|
||||||
set or not.
|
set or not.
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,9 @@ generators and second deterministic point generators. Most random
|
||||||
point generators and a few deterministic point generators are provided
|
point generators and a few deterministic point generators are provided
|
||||||
as input iterators. The input iterators model an infinite sequence of
|
as input iterators. The input iterators model an infinite sequence of
|
||||||
points. The function `CGAL::cpp0x::copy_n()` can be used to copy a
|
points. The function `CGAL::cpp0x::copy_n()` can be used to copy a
|
||||||
finite sequence; see Section \ref sectionCopyN . The iterator adaptor
|
finite sequence; see Section \ref sectionCopyN. The iterator adaptor
|
||||||
`Counting_iterator` can be used to create finite iterator
|
`Counting_iterator` can be used to create finite iterator
|
||||||
ranges; see Section \ref sectionCountingIterator .
|
ranges; see Section \ref sectionCountingIterator.
|
||||||
Other generators are provided as functions that write to output
|
Other generators are provided as functions that write to output
|
||||||
iterators. Further functions add degeneracies or random perturbations.
|
iterators. Further functions add degeneracies or random perturbations.
|
||||||
|
|
||||||
|
|
@ -40,7 +40,7 @@ distributed in a sphere (`Random_points_in_sphere_3`)
|
||||||
or cube (`Random_points_in_cube_3`) or on the boundary of a sphere
|
or cube (`Random_points_in_cube_3`) or on the boundary of a sphere
|
||||||
(`Random_points_on_sphere_3`).
|
(`Random_points_on_sphere_3`).
|
||||||
For generating 3D grid points, we provide the function
|
For generating 3D grid points, we provide the function
|
||||||
`points_on_cube_grid_3` that writes to
|
`::points_on_cube_grid_3` that writes to
|
||||||
an output iterator.
|
an output iterator.
|
||||||
|
|
||||||
For higher dimensions, input iterators are provided for random points uniformly
|
For higher dimensions, input iterators are provided for random points uniformly
|
||||||
|
|
|
||||||
|
|
@ -224,7 +224,7 @@ In addition, the class `Monge_via_jet_fitting` stores
|
||||||
|
|
||||||
This concept provides the types for the input sample points, together
|
This concept provides the types for the input sample points, together
|
||||||
with \f$ 3d\f$ vectors and a number type. It is used as template for the
|
with \f$ 3d\f$ vectors and a number type. It is used as template for the
|
||||||
class `Monge_via_jet_fitting<DataKernel, LocalKernel, SvdTraits>` . Typically, one can use
|
class `Monge_via_jet_fitting<DataKernel, LocalKernel, SvdTraits>`. Typically, one can use
|
||||||
`CGAL::Cartesian<double>`.
|
`CGAL::Cartesian<double>`.
|
||||||
|
|
||||||
## Template parameter <TT>LocalKernel</TT> ##
|
## Template parameter <TT>LocalKernel</TT> ##
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@
|
||||||
The optimization code uses infix `OPTIMISATION` in the assertions,
|
The optimization code uses infix `OPTIMISATION` in the assertions,
|
||||||
e.g. defining the compiler flag
|
e.g. defining the compiler flag
|
||||||
`CGAL_OPTIMISATION_NO_PRECONDITIONS` switches precondition
|
`CGAL_OPTIMISATION_NO_PRECONDITIONS` switches precondition
|
||||||
checking off, cf. Section \ref secchecks .
|
checking off, cf. Section \ref secchecks.
|
||||||
|
|
||||||
# Classified References Pages #
|
# Classified References Pages #
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -316,12 +316,12 @@ parameters::internal::Perturb_options perturb = parameters::perturb(),
|
||||||
parameters::internal::Exude_options exude = parameters::exude());
|
parameters::internal::Exude_options exude = parameters::exude());
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
The function `make_mesh_3` generates from scratch a mesh
|
The function `::make_mesh_3` generates from scratch a mesh
|
||||||
of the input domain, while
|
of the input domain, while
|
||||||
the function `refine_mesh_3` refines
|
the function `::refine_mesh_3` refines
|
||||||
an existing mesh of the input domain. Note that as the protection
|
an existing mesh of the input domain. Note that as the protection
|
||||||
of 0- and 1-dimensional features does not rely on Delaunay
|
of 0- and 1-dimensional features does not rely on Delaunay
|
||||||
refinement, the function `refine_mesh_3` has no parameter
|
refinement, the function `r::efine_mesh_3` has no parameter
|
||||||
to preserve features.
|
to preserve features.
|
||||||
|
|
||||||
## The data structure ##
|
## The data structure ##
|
||||||
|
|
@ -499,8 +499,8 @@ appropriate values of these types:
|
||||||
These parameters are optional and can be passed in any order.
|
These parameters are optional and can be passed in any order.
|
||||||
If one parameter is not passed the default value is used. By default,
|
If one parameter is not passed the default value is used. By default,
|
||||||
only the perturber and the exuder are activated.
|
only the perturber and the exuder are activated.
|
||||||
Note that whatever may be the optimization processes activated by `make_mesh_3`
|
Note that whatever may be the optimization processes activated by `::make_mesh_3`
|
||||||
or `refine_mesh_3`,
|
or `::refine_mesh_3`,
|
||||||
they are always launched in the order that is a suborder
|
they are always launched in the order that is a suborder
|
||||||
of the following:
|
of the following:
|
||||||
`odt smoother`, `Lloyd smoother`, `perturber` and
|
`odt smoother`, `Lloyd smoother`, `perturber` and
|
||||||
|
|
@ -590,7 +590,7 @@ where each subdomain corresponds to a specific tissue.
|
||||||
In the following example, the image is read from the file
|
In the following example, the image is read from the file
|
||||||
`liner.inr.gz` which is encoded in the format of the library Inrimage
|
`liner.inr.gz` which is encoded in the format of the library Inrimage
|
||||||
`http://inrimage.gforge.inria.fr/`.
|
`http://inrimage.gforge.inria.fr/`.
|
||||||
The resulting mesh is shown in Figure \ref figureliver_3d_image_mesh .
|
The resulting mesh is shown in Figure \ref figureliver_3d_image_mesh.
|
||||||
|
|
||||||
\cgalexample{Mesh_3/mesh_3D_image.cpp}
|
\cgalexample{Mesh_3/mesh_3D_image.cpp}
|
||||||
|
|
||||||
|
|
@ -657,7 +657,7 @@ domain. We add by hand the intersection of the spheres as a sharp feature.
|
||||||
\anchor Mesh_3_subsection_examples_optimization
|
\anchor Mesh_3_subsection_examples_optimization
|
||||||
|
|
||||||
In the previous examples, the mesh generation is launched through a call
|
In the previous examples, the mesh generation is launched through a call
|
||||||
`make_mesh_3(domain,criteria)` with a minimal number of parameters. In such cases,
|
`::make_mesh_3(domain,criteria)` with a minimal number of parameters. In such cases,
|
||||||
the default optimization strategy is applied: after the Delaunay refinement process
|
the default optimization strategy is applied: after the Delaunay refinement process
|
||||||
two optimization steps are performed, a perturbation and a sliver exudation.
|
two optimization steps are performed, a perturbation and a sliver exudation.
|
||||||
The following examples show how to disable default optimization steps
|
The following examples show how to disable default optimization steps
|
||||||
|
|
@ -671,10 +671,10 @@ a perturbation phase which is launched with no time bound
|
||||||
and an objective of 10 degrees for the minimum dihedral angle
|
and an objective of 10 degrees for the minimum dihedral angle
|
||||||
of the mesh.
|
of the mesh.
|
||||||
The example shows two ways of achieving the same result. The first way
|
The example shows two ways of achieving the same result. The first way
|
||||||
issues a single call to `make_mesh_3` with the required optimization
|
issues a single call to `::make_mesh_3` with the required optimization
|
||||||
process activated and tuned. In the second way, `make_mesh_3` is first called
|
process activated and tuned. In the second way, `::make_mesh_3` is first called
|
||||||
without any optimization process and the resulting mesh is next optimized
|
without any optimization process and the resulting mesh is next optimized
|
||||||
through a call to `perturb_mesh_3` with tuned parameters.
|
through a call to `::perturb_mesh_3` with tuned parameters.
|
||||||
|
|
||||||
\cgalexample{Mesh_3/mesh_optimization_example.cpp}
|
\cgalexample{Mesh_3/mesh_optimization_example.cpp}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -125,7 +125,7 @@ contains `S.number_of_holes()` holes in its interior).
|
||||||
</center>
|
</center>
|
||||||
|
|
||||||
The following example program constructs the Minkowski sum of two triangles,
|
The following example program constructs the Minkowski sum of two triangles,
|
||||||
as depicted in Figure \ref mink_figsum_tri . The result in this case is
|
as depicted in Figure \ref mink_figsum_tri. The result in this case is
|
||||||
a convex hexagon. This program, as other example programs in this chapter,
|
a convex hexagon. This program, as other example programs in this chapter,
|
||||||
includes the auxiliary header file `ms_rational_nt.h` which defines
|
includes the auxiliary header file `ms_rational_nt.h` which defines
|
||||||
`Number_type` as either `Gmpq` or `Quotient<MP_Float>`,
|
`Number_type` as either `Gmpq` or `Quotient<MP_Float>`,
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ the class `CGAL::Real\_timer` is the version for the real time.
|
||||||
Instantiations of both classes are objects with a state. The state is
|
Instantiations of both classes are objects with a state. The state is
|
||||||
either <I>running/</I> or it is <I>stopped</I>. The state of an object
|
either <I>running/</I> or it is <I>stopped</I>. The state of an object
|
||||||
`t` is controlled
|
`t` is controlled
|
||||||
with `t.start()` and `t.stop()` . The timer counts the
|
with `t.start()` and `t.stop()`. The timer counts the
|
||||||
time elapsed since its creation or last reset. It counts only the time
|
time elapsed since its creation or last reset. It counts only the time
|
||||||
where it is in the running state. The time information is given in seconds.
|
where it is in the running state. The time information is given in seconds.
|
||||||
The timer counts also the number of intervals it was running, i.e. it
|
The timer counts also the number of intervals it was running, i.e. it
|
||||||
|
|
@ -80,7 +80,7 @@ of the polyhedron.
|
||||||
|
|
||||||
The solution provided here is inspired by the strategy
|
The solution provided here is inspired by the strategy
|
||||||
pattern \cite cgal:ghjv-dpero-95, though it serves a different intent, see
|
pattern \cite cgal:ghjv-dpero-95, though it serves a different intent, see
|
||||||
Figure \ref figureModifierDesign . The abstract base class
|
Figure \ref figureModifierDesign. The abstract base class
|
||||||
`Modifier_base<R>` declares a pure virtual member function
|
`Modifier_base<R>` declares a pure virtual member function
|
||||||
`operator()` that accepts a single reference parameter of the
|
`operator()` that accepts a single reference parameter of the
|
||||||
internal representation type. The member function `delegate()` of
|
internal representation type. The member function `delegate()` of
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ uses three-valued comparisons and offers additional functionality,
|
||||||
generic algorithms, iterators, functor adaptors for binding and swapping
|
generic algorithms, iterators, functor adaptors for binding and swapping
|
||||||
arguments and for composition, functors for projection and creation and
|
arguments and for composition, functors for projection and creation and
|
||||||
adaptor classes around iterators and circulators. See also circulators in
|
adaptor classes around iterators and circulators. See also circulators in
|
||||||
Chapter \ref chapterCirculators . A class storing polymorphic objects
|
Chapter \ref chapterCirculators. A class storing polymorphic objects
|
||||||
is also provided, as well as a class to manage the uncertainty of some values.
|
is also provided, as well as a class to manage the uncertainty of some values.
|
||||||
Finally, tags and policy classes to specify complexity trade-offs of data-structures,
|
Finally, tags and policy classes to specify complexity trade-offs of data-structures,
|
||||||
and a class which helps specifying that the default types in template
|
and a class which helps specifying that the default types in template
|
||||||
|
|
|
||||||
|
|
@ -398,7 +398,7 @@ Therefore, the `Exact_predicates_inexact_constructions_kernel` should be used.
|
||||||
|
|
||||||
\cgalexample{Straight_skeleton_2/Low_level_API.cpp}
|
\cgalexample{Straight_skeleton_2/Low_level_API.cpp}
|
||||||
|
|
||||||
## Exterior Skeletons and Exterior Offset contours ##
|
## Exterior Skeletons and Exterior Offset Contours ##
|
||||||
|
|
||||||
This \cgal package can only construct the straight skeleton and offset contours in the <I>interior</I> of a polygon with holes. However, constructing exterior skeletons and exterior offsets is possible:
|
This \cgal package can only construct the straight skeleton and offset contours in the <I>interior</I> of a polygon with holes. However, constructing exterior skeletons and exterior offsets is possible:
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue