[PATCH] gnu: Add traceroute.

  • Done
  • quality assurance status badge
Details
4 participants
  • Leo Famulari
  • Christopher Baines
  • Maxim Cournoyer
  • Vincent Legoll
Owner
unassigned
Submitted by
Vincent Legoll
Severity
normal
V
V
Vincent Legoll wrote on 7 Mar 2020 00:13
(address . guix-patches@gnu.org)
CAEwRq=qLnNS2HzekK-PVPc3Pytk9+uz+F4K+H2BWP2Xo3DEk=Q@mail.gmail.com
This need an in-depth review, as there is something strange, I had to
set LIBRARY_PATH to overcome gcc/ld not finding crt{i,1}.o

I found the following bug:
that met a similar issue...

Please advise how to proceed further.

--
Vincent Legoll
From 5252f45030c9d725befcba698b0e5e9f9c49e00d Mon Sep 17 00:00:00 2001
From: Vincent Legoll <vincent.legoll@gmail.com>
Date: Sat, 7 Mar 2020 00:05:39 +0100
Subject: [PATCH] gnu: Add traceroute.

* gnu/packages/networking.scm (traceroute): New variable.
---
gnu/packages/networking.scm | 45 +++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)

Toggle diff (58 lines)
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index eddfffd662..92b6391a53 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -2864,6 +2864,51 @@ Such interfaces are useful for VPN software, virtualization, emulation,
simulation, and a number of other applications.")
(license license:gpl2)))
+(define-public traceroute
+ (package
+ (name "traceroute")
+ (version "2.1.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "mirror://sourceforge/traceroute/traceroute/"
+ "traceroute-" version "/traceroute-" version ".tar.gz"))
+ (sha256
+ (base32 "1dh32vcfawkl1p9g4ral1p0camds4paqr8db1kaqxwyk6hmd4s9n"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:tests? #f ; No tests.
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'patch-make
+ (lambda _
+ (substitute* "Make.rules"
+ ((" -lm ") " "))
+ #t))
+ (replace 'build
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((libglibc (assoc-ref inputs "glibc"))
+ (headers (assoc-ref inputs "linux-libre-headers")))
+ (invoke "make" "LDFLAGS=-lm -L../libsupp"
+ (string-append "LIBRARY_PATH=" libglibc "/lib")
+ (string-append "CFLAGS=-I" headers "/include")))))
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (invoke "make" (string-append "prefix=" out) "install"))))
+ (delete 'bootstrap) ;there is no configure.ac file
+ (delete 'configure)))) ;there is no configure script
+ (native-inputs
+ `(("glibc" ,glibc)
+ ("linux-libre-headers" ,linux-libre-headers)))
+ (home-page "http://traceroute.sourceforge.net/")
+ (synopsis "Tracks the route taken by packets over an IP network")
+ (description "Traceroute tracks the route packets taken from an IP network
+on their way to a given host. It utilizes the IP protocol's time to live (TTL)
+field and attempts to elicit an ICMP TIME_EXCEEDED response from each gateway
+along the path to the host.")
+ (license license:gpl2)))
+
(define-public vde2
(package
(name "vde2")
--
2.25.1
V
V
Vincent Legoll wrote on 7 Mar 2020 02:28
(address . 39961@debbugs.gnu.org)
CAEwRq=pqy68n5oiHdrc7r3eJ4P2g9OE54dLO8d7P0pwBM0YC2A@mail.gmail.com
tracerouted OK to 9.9.9.9

--
Vincent Legoll
V
V
Vincent Legoll wrote on 7 Mar 2020 12:06
(address . 39961@debbugs.gnu.org)
CAEwRq=qvJFQqAkPEumB7O8efrc=JLM3VyS6FfaBRa++fd_WUkg@mail.gmail.com
I've since seen a few other issues on the same subject, but cannot
find a way to get it work without setting LIBRARY_PATH...

I tried guix environment --ad-hoc gcc-toolchain, adding the missed
GUIX_PROFILE to .bash_profile, etc.

--
Vincent Legoll
V
V
Vincent Legoll wrote on 7 Mar 2020 12:08
(address . 39961@debbugs.gnu.org)
CAEwRq=pfYMxbQpH-0PBFMcbLt8RrQrMUek5wPjwGoE0TXOyJiQ@mail.gmail.com
I am running all this through ssh into a VM, so I also tried to run
with bash -l...

This is probably misconfiguration on my end...

--
Vincent Legoll
L
L
Leo Famulari wrote on 7 Mar 2020 14:09
Re: [bug#39961] [PATCH] gnu: Add traceroute.
(name . Vincent Legoll)(address . vincent.legoll@gmail.com)(address . 39961@debbugs.gnu.org)
20200307130918.GA3194@jasmine.lan
On Sat, Mar 07, 2020 at 12:13:18AM +0100, Vincent Legoll wrote:
Toggle quote (3 lines)
> + (uri (string-append "mirror://sourceforge/traceroute/traceroute/"
> + "traceroute-" version "/traceroute-" version ".tar.gz"))

How does this compare to the traceroute provided by the inetutils
package?
V
V
Vincent Legoll wrote on 7 Mar 2020 14:23
(name . Leo Famulari)(address . leo@famulari.name)(address . 39961@debbugs.gnu.org)
CAEwRq=pOqB-kkixxbU92MZUKMKJk=FdweGLOsCBZHFcwAXME-w@mail.gmail.com
On Sat, Mar 7, 2020 at 2:09 PM Leo Famulari <leo@famulari.name> wrote:
Toggle quote (3 lines)
> How does this compare to the traceroute provided by the inetutils
> package?

It looks like this one does not need special permissions to run:

guest@guixsd ~/dev/repo/guix [env]$
/gnu/store/3h3h9qr14l7m1cwxi9598jzc3qd5pzaf-traceroute-2.1.0/bin/traceroute
-n 9.9.9.9
traceroute to 9.9.9.9 (9.9.9.9), 30 hops max, 60 byte packets
[...]
7 212.27.56.30 45.227 ms 41.741 ms 41.734 ms
8 212.27.56.38 48.909 ms 49.304 ms 48.599 ms
9 212.27.56.41 55.846 ms 50.545 ms 51.603 ms
10 195.66.225.238 54.105 ms 51.924 ms 56.401 ms
11 9.9.9.9 54.743 ms !X 50.748 ms !X 52.979 ms !X

guest@guixsd ~/dev/repo/guix [env]$
/gnu/store/ljwvyw48n2j28q0w96qykr04wcgwzcnh-inetutils-1.9.4/bin/traceroute
9.9.9.9
traceroute to 9.9.9.9 (9.9.9.9), 64 hops max
/gnu/store/ljwvyw48n2j28q0w96qykr04wcgwzcnh-inetutils-1.9.4/bin/traceroute:
socket: Operation not permitted

guest@guixsd ~/dev/repo/guix [env]$ sudo
/gnu/store/ljwvyw48n2j28q0w96qykr04wcgwzcnh-inetutils-1.9.4/bin/traceroute
9.9.9.9
traceroute to 9.9.9.9 (9.9.9.9), 64 hops max
[...]
7 212.27.56.30 51.092ms 38.423ms 34.532ms
8 212.27.56.38 44.764ms 41.931ms 44.963ms
9 212.27.56.41 55.887ms 50.083ms 49.295ms
10 195.66.225.238 51.184ms 62.666ms 57.945ms
11 9.9.9.9 48.800ms !* 48.870ms !* 61.399ms !*

guest@guixsd ~/dev/repo/guix [env]$ ls -lh
/gnu/store/3h3h9qr14l7m1cwxi9598jzc3qd5pzaf-traceroute-2.1.0/bin/traceroute
/gnu/store/ljwvyw48n2j28q0w96qykr04wcgwzcnh-inetutils-1.9.4/bin/traceroute
-r-xr-xr-x 8 root root 85K Jan 1 1970
/gnu/store/3h3h9qr14l7m1cwxi9598jzc3qd5pzaf-traceroute-2.1.0/bin/traceroute
-r-xr-xr-x 2 root root 70K Jan 1 1970
/gnu/store/ljwvyw48n2j28q0w96qykr04wcgwzcnh-inetutils-1.9.4/bin/traceroute

--
Vincent Legoll
V
V
Vincent Legoll wrote on 28 Dec 2020 15:45
traceroute
(address . 39961@debbugs.gnu.org)
CAEwRq=ppPXpJRp6E0ttCB1OWhj+LapuyauE8=f4+RqpushYQDw@mail.gmail.com
ping ?

Anything I should add ?

--
Vincent Legoll
C
C
Christopher Baines wrote on 1 Jan 2021 13:08
(name . Vincent Legoll)(address . vincent.legoll@gmail.com)(address . 39961@debbugs.gnu.org)
87o8i897xa.fsf@cbaines.net
Vincent Legoll <vincent.legoll@gmail.com> writes:

Toggle quote (4 lines)
> ping ?
>
> Anything I should add ?

This traceroute implementation looks to be particularly difficult to
build, just searching the web for some of the errors brings up other
people having problems with it (like [1]).


Some comments though, I'd suggest transforming what you're doing with
make flags from modifying the phases to adding to the #:make-flags
argument, so something like this:

#:make-flags
(list (string-append "LIBRARY_PATH="
(assoc-ref %build-inputs "libc")
"/lib")
(string-append "CFLAGS=-I"
(assoc-ref %build-inputs "kernel-headers")
"/include")
"LDFLAGS=-lm -L../libsupp"
(string-append "prefix=" (assoc-ref %outputs "out")))

What I've also done here is used the %build-inputs alist, which includes
the implicit libc and kernel-headers inputs, so you can remove those
inputs from the package definition.

As for the -lm issue with the Makefile, that's pretty frustrating. The
best thing I could come up with is something like this:

(substitute* "default.rules"
((" \\$\\(LIBDEPS\\)") "$(filter-out -l%,$(LIBDEPS))"))

That has the advantage of still passing the -lm flag to gcc, and just
avoiding make tripping up over it.

Finally, I think the license might be gpl2+, with lgpl2.1+ for libsupp,
so it would be good to list both of those, with a comment describing
what the lgpl license applies to.

Could you send an updated patch?

Thanks,

Chris
-----BEGIN PGP SIGNATURE-----

iQKlBAEBCgCPFiEEPonu50WOcg2XVOCyXiijOwuE9XcFAl/vEKFfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcRHG1haWxAY2Jh
aW5lcy5uZXQACgkQXiijOwuE9XdS1g/+KeWIM+ByjMC25XiwtVC5xSFw2NFbklP3
keVRE8EufRBvMlzklxXi11ybProCxw5IVFTyhhZt2+9E9QIh5hdks3ugckSWMZP7
tOuwFVDIj0iIz96MgbpjkyPTt+itqf/A+qcCgiBdf/8p68sMP0M89ByW/s2ZH5/5
P/5rI2UAN1ffwsL2KtVf9xaHpW2BMm379XraKddqXI1Mtx9lLbpBxlXYsQiJKEGb
/7cIBoPK3lkixWnwchG3YWL178Jgmr3u82p8WgerrZs4UUBmXHXwFmlKY1HF4XSM
GhdZFqaoWJYTZydz4olCKrlUkKXMMsNjCyOI9btZSwQUHzdAW4kUtQwTbN8mk5Tw
pjKAGH5jeKirZQgrwZvBfIcAMkFvKWxKRLdle7wJdi98hnfUaH82Fj1H6u54+P8z
5uCyBUO3ZbRjTj4pYrAMSVRNeNqitszcCFePkjyscM5s8uBCeZbS1u0YPH5yFdAA
J/sgCmqEb4uOTzalImTyB0mVqeB9l7M3lEnBiSmm/6RTici1dXCED2jVyptntdZ5
JPXxdoG6wYMj5rh+VoeSVnNRU3iiQ4j1rsu1PCao2A/EWvAjhlobSfgBl2fat23T
B4Im9h+G3aqcBi0k/VLMUNNdkePrp3HoR7mvJtoWOQycg9ExgGwATgf1a5KI6Ace
25dkEOSnzKY=
=Ffzv
-----END PGP SIGNATURE-----

V
V
Vincent Legoll wrote on 11 Jan 2021 17:31
New patch
(address . 39961@debbugs.gnu.org)
CAEwRq=oLC2=zXj8GLz4v7e=Wm9__zkDg5onEa-m1QB5E9R_w_Q@mail.gmail.com
Hello,

following this is an updated patch, with
Christopher's feddback applied.

The nice thing is it now builds properly
without the LIBRABRY_PATH and the other
hacks. The licenses should be also good
now.

Is this OK ?

--
Vincent Legoll
V
V
Vincent Legoll wrote on 11 Jan 2021 17:31
[PATCH] gnu: Add traceroute.
(address . 39961@debbugs.gnu.org)(name . Vincent Legoll)(address . vincent.legoll@gmail.com)
20210111163117.20895-1-vincent.legoll@gmail.com
* gnu/packages/networking.scm (traceroute): New variable.
---
gnu/packages/networking.scm | 45 +++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)

Toggle diff (58 lines)
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 83a99ded72..5055cf399d 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -3680,6 +3680,51 @@ simulation, and a number of other applications.")
network. This must be enabled on the target host, usually in the BIOS.")
(license license:gpl2)))
+(define-public traceroute
+ (package
+ (name "traceroute")
+ (version "2.1.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "mirror://sourceforge/traceroute/traceroute/"
+ "traceroute-" version "/traceroute-" version ".tar.gz"))
+ (sha256
+ (base32 "1dh32vcfawkl1p9g4ral1p0camds4paqr8db1kaqxwyk6hmd4s9n"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:tests? #f ; No tests.
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'patch-make
+ (lambda _
+ (substitute* "Make.rules"
+ ((" -lm ") " "))
+ #t))
+ (replace 'build
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((libglibc (assoc-ref inputs "glibc"))
+ (headers (assoc-ref inputs "linux-libre-headers")))
+ (invoke "make" "LDFLAGS=-lm -L../libsupp"
+ (string-append "LIBRARY_PATH=" libglibc "/lib")
+ (string-append "CFLAGS=-I" headers "/include")))))
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (invoke "make" (string-append "prefix=" out) "install"))))
+ (delete 'bootstrap) ;there is no configure.ac file
+ (delete 'configure)))) ;there is no configure script
+ (native-inputs
+ `(("glibc" ,glibc)
+ ("linux-libre-headers" ,linux-libre-headers)))
+ (home-page "http://traceroute.sourceforge.net/")
+ (synopsis "Tracks the route taken by packets over an IP network")
+ (description "Traceroute tracks the route packets taken from an IP network
+on their way to a given host. It utilizes the IP protocol's time to live (TTL)
+field and attempts to elicit an ICMP TIME_EXCEEDED response from each gateway
+along the path to the host.")
+ (license license:gpl2)))
+
(define-public vde2
(package
(name "vde2")
--
2.30.0
V
V
Vincent Legoll wrote on 11 Jan 2021 17:32
(address . 39961@debbugs.gnu.org)(name . Vincent Legoll)(address . vincent.legoll@gmail.com)
20210111163240.20986-1-vincent.legoll@gmail.com
* gnu/packages/networking.scm (traceroute): New variable.
---
gnu/packages/networking.scm | 39 +++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)

Toggle diff (52 lines)
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 83a99ded72..4c3faaa578 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -3680,6 +3680,45 @@ simulation, and a number of other applications.")
network. This must be enabled on the target host, usually in the BIOS.")
(license license:gpl2)))
+(define-public traceroute
+ (package
+ (name "traceroute")
+ (version "2.1.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "mirror://sourceforge/traceroute/traceroute/"
+ "traceroute-" version "/traceroute-" version ".tar.gz"))
+ (sha256
+ (base32 "1dh32vcfawkl1p9g4ral1p0camds4paqr8db1kaqxwyk6hmd4s9n"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:tests? #f ; No tests.
+ #:make-flags
+ (list (string-append "LIBRARY_PATH="
+ (assoc-ref %build-inputs "libc") "/lib")
+ (string-append "CFLAGS=-I"
+ (assoc-ref %build-inputs "kernel-headers") "/include")
+ "LDFLAGS=-lm -L../libsupp"
+ (string-append "prefix=" (assoc-ref %outputs "out")))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'patch-make
+ (lambda _
+ (substitute* "default.rules"
+ ((" \\$\\(LIBDEPS\\)") "$(filter-out -l%,$(LIBDEPS))"))
+ #t))
+ (delete 'bootstrap) ; there is no configure.ac file
+ (delete 'configure)))) ; there is no configure script
+ (home-page "http://traceroute.sourceforge.net/")
+ (synopsis "Tracks the route taken by packets over an IP network")
+ (description "Traceroute tracks the route packets taken from an IP network
+on their way to a given host. It utilizes the IP protocol's time to live (TTL)
+field and attempts to elicit an ICMP TIME_EXCEEDED response from each gateway
+along the path to the host.")
+ (license '(license:gpl2+
+ license:lgpl2.1+)))) ; for the libsupp subdirectory
+
(define-public vde2
(package
(name "vde2")
--
2.30.0
M
M
Maxim Cournoyer wrote on 14 Jul 2021 05:15
(name . Vincent Legoll)(address . vincent.legoll@gmail.com)
87wnptpow7.fsf_-_@gmail.com
Hello,

Vincent Legoll <vincent.legoll@gmail.com> writes:

Toggle quote (56 lines)
> * gnu/packages/networking.scm (traceroute): New variable.
> ---
> gnu/packages/networking.scm | 39 +++++++++++++++++++++++++++++++++++++
> 1 file changed, 39 insertions(+)
>
> diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
> index 83a99ded72..4c3faaa578 100644
> --- a/gnu/packages/networking.scm
> +++ b/gnu/packages/networking.scm
> @@ -3680,6 +3680,45 @@ simulation, and a number of other applications.")
> network. This must be enabled on the target host, usually in the BIOS.")
> (license license:gpl2)))
>
> +(define-public traceroute
> + (package
> + (name "traceroute")
> + (version "2.1.0")
> + (source
> + (origin
> + (method url-fetch)
> + (uri (string-append "mirror://sourceforge/traceroute/traceroute/"
> + "traceroute-" version "/traceroute-" version ".tar.gz"))
> + (sha256
> + (base32 "1dh32vcfawkl1p9g4ral1p0camds4paqr8db1kaqxwyk6hmd4s9n"))))
> + (build-system gnu-build-system)
> + (arguments
> + `(#:tests? #f ; No tests.
> + #:make-flags
> + (list (string-append "LIBRARY_PATH="
> + (assoc-ref %build-inputs "libc") "/lib")
> + (string-append "CFLAGS=-I"
> + (assoc-ref %build-inputs "kernel-headers") "/include")
> + "LDFLAGS=-lm -L../libsupp"
> + (string-append "prefix=" (assoc-ref %outputs "out")))
> + #:phases
> + (modify-phases %standard-phases
> + (add-after 'unpack 'patch-make
> + (lambda _
> + (substitute* "default.rules"
> + ((" \\$\\(LIBDEPS\\)") "$(filter-out -l%,$(LIBDEPS))"))
> + #t))
> + (delete 'bootstrap) ; there is no configure.ac file
> + (delete 'configure)))) ; there is no configure script
> + (home-page "http://traceroute.sourceforge.net/")
> + (synopsis "Tracks the route taken by packets over an IP network")
> + (description "Traceroute tracks the route packets taken from an IP network
> +on their way to a given host. It utilizes the IP protocol's time to live (TTL)
> +field and attempts to elicit an ICMP TIME_EXCEEDED response from each gateway
> +along the path to the host.")
> + (license '(license:gpl2+
> + license:lgpl2.1+)))) ; for the libsupp subdirectory
> +
> (define-public vde2
> (package
> (name "vde2")

I edited it to expound the description someone and for cosmetic reasons
(fitting in the 80 chars limit for example), like so:

Toggle snippet (61 lines)
1 file changed, 18 insertions(+), 14 deletions(-)
gnu/packages/networking.scm | 32 ++++++++++++++++++--------------

modified gnu/packages/networking.scm
@@ -3796,17 +3796,19 @@ network. This must be enabled on the target host, usually in the BIOS.")
(origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/traceroute/traceroute/"
- "traceroute-" version "/traceroute-" version ".tar.gz"))
+ "traceroute-" version "/traceroute-"
+ version ".tar.gz"))
(sha256
(base32 "1dh32vcfawkl1p9g4ral1p0camds4paqr8db1kaqxwyk6hmd4s9n"))))
(build-system gnu-build-system)
(arguments
- `(#:tests? #f ; No tests.
+ `(#:tests? #f ;no test suite
#:make-flags
(list (string-append "LIBRARY_PATH="
- (assoc-ref %build-inputs "libc") "/lib")
+ (assoc-ref %build-inputs "libc") "/lib")
(string-append "CFLAGS=-I"
- (assoc-ref %build-inputs "kernel-headers") "/include")
+ (assoc-ref %build-inputs "kernel-headers")
+ "/include")
"LDFLAGS=-lm -L../libsupp"
(string-append "prefix=" (assoc-ref %outputs "out")))
#:phases
@@ -3814,18 +3816,20 @@ network. This must be enabled on the target host, usually in the BIOS.")
(add-after 'unpack 'patch-make
(lambda _
(substitute* "default.rules"
- ((" \\$\\(LIBDEPS\\)") "$(filter-out -l%,$(LIBDEPS))"))
- #t))
- (delete 'bootstrap) ; there is no configure.ac file
- (delete 'configure)))) ; there is no configure script
+ ((" \\$\\(LIBDEPS\\)") "$(filter-out -l%,$(LIBDEPS))"))))
+ (delete 'bootstrap) ;no configure.ac file
+ (delete 'configure)))) ;no configure script
(home-page "http://traceroute.sourceforge.net/")
(synopsis "Tracks the route taken by packets over an IP network")
- (description "Traceroute tracks the route packets taken from an IP network
-on their way to a given host. It utilizes the IP protocol's time to live (TTL)
-field and attempts to elicit an ICMP TIME_EXCEEDED response from each gateway
-along the path to the host.")
- (license '(license:gpl2+
- license:lgpl2.1+)))) ; for the libsupp subdirectory
+ (description "This package provides a modern, but Linux-specific
+implementation of the @command{traceroute} command that can be used to follow
+the route taken by packets on an IP network on their way to a given host. It
+utilizes the IP protocol's time to live (TTL) field and attempts to elicit an
+ICMP TIME_EXCEEDED response from each gateway along the path to the host.
+Compared to other implementations, this @command{traceroute} command allows
+some traces for unprivileged users.")
+ (license (list license:gpl2+
+ license:lgpl2.1+)))) ;for the libsupp subdirectory
(define-public vde2
(package

And pushed as 59e97a67ba.

Thank you!

Closing.

Maxim
Closed
?