TrueCharts Nextcloud vs. iXsystems Nextcloud

radomirpolach

Explorer
Joined
Feb 13, 2022
Messages
71
I am not sure what the discussion is, but my TrueCharts NextCloud died with update to 24.0.2_15.2.2. Only deploys 2/3. That is scary, as I have years of experience with Nextcloud and it is super stable, so issue must be with the App.
 

truecharts

Guru
Joined
Aug 19, 2021
Messages
788
I am not sure what the discussion is, but my TrueCharts NextCloud died with update to 24.0.2_15.2.2. Only deploys 2/3. That is scary, as I have years of experience with Nextcloud and it is super stable, so issue must be with the App.

Please be ware we do not offer active support on this forums, please contact our support staff by filling a ticket on Discord instead.

Most likely all you have to do is double check the storage migration steps as highlighted in our recent announcements due to breaking structural changes in our Nextcloud App.

Please always be aware that major (first digit) updates in semantic versioning, mean "potentially breaking". Which is the same for both TrueCharts Apps as-well-as Nextcloud itself. In this case this mostly refered to changes in our storage backend, which got changed due to many users requesting seperation of userdata from config/app data.
 

truecharts

Guru
Joined
Aug 19, 2021
Messages
788

Thank you for the link, we've made sure to post a clearification, as the migration issues are not related to the issues previously encountered in version 14.x.x.

The timeframe however was too close not-to comment to explain.

Where is that announcement?

All our announcements are crossposted on:
- Discord
- Facebook
- Twitter
- Telegram

Most of which should be on the website :)
(We should be looking at streamlining this and including it in the website as well during our documentation rework planned for next few months)
 

Patrick M. Hausen

Hall of Famer
Joined
Nov 25, 2013
Messages
7,776
If you run a mission critical nextcloud instance, you need to have the sysadmin knowhow to do so, anyway. That's why I'd recommend using neither an app on SCALE nor a plugin on CORE but rolling your own in the environment you feel at home the most. E.g. inside a jail on CORE or a VM. Nextcloud is a complex large 3-tier web application that requires certain skills. I found that "canned" installations actually tend to get in my way more than they help. That's why I run mine in a jail. pkg upgrade followed by occ upgrade - always worked so far.
 

radomirpolach

Explorer
Joined
Feb 13, 2022
Messages
71
If you run a mission critical nextcloud instance, you need to have the sysadmin knowhow to do so, anyway. That's why I'd recommend using neither an app on SCALE nor a plugin on CORE but rolling your own in the environment you feel at home the most. E.g. inside a jail on CORE or a VM. Nextcloud is a complex large 3-tier web application that requires certain skills. I found that "canned" installations actually tend to get in my way more than they help. That's why I run mine in a jail. pkg upgrade followed by occ upgrade - always worked so far.
This is just for my personal usage, but I ran my own download for years. Never had even any problems.

I reinstalled the app, uploaded 10GB of files and it got rekt, some PHP upstream is dying and I am not sure where are logs from that even coming.
 

radomirpolach

Explorer
Joined
Feb 13, 2022
Messages
71
Code:
2022-07-08 22:13:34.275881+00:002022/07/08 22:13:34 [error] 30#30: *15 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 172.16.43.171, server: , request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "nextcloud.xxx", referrer: "https://nextcloud.xxx"

It is just dying.
 

truecharts

Guru
Joined
Aug 19, 2021
Messages
788
This is just for my personal usage, but I ran my own download for years. Never had even any problems.

I reinstalled the app, uploaded 10GB of files and it got rekt, some PHP upstream is dying and I am not sure where are logs from that even coming.

We do have support staff available for issues like these.
This should obviously not happen and we really want to help you out here, but if you don't file a support ticket we're not able to do much for you.

The breaking change-update was meant as a way to solidify our backend to ensure less (if any) failures in the future. It contains a huge number of optimalisations and bugfixes.

The error you posted, however, is, often, not something to be concerned about and shows frequently during startup, that's why it's imperitive to contact our staff to figure out the actual issue involved. In short this error just means "Nextcloud Not Started Yet".

(to be clear: We're not related to TrueNAS or iX-Systems and are a seperate project with seperate staff and seperate support workflows)
 
Last edited:

radomirpolach

Explorer
Joined
Feb 13, 2022
Messages
71
We do have support staff available for issues like these.
This should obviously not happen and we really want to help you out here, but if you don't file a support ticket we're not able to do much for you.

The breaking change-update was meant as a way to solidify our backend to ensure less (if any) failures in the future. It contains a huge number of optimalisations and bugfixes.

The error you posted, however, is, often, not something to be concerned about and shows frequently during startup, that's why it's imperitive to contact our staff to figure out the actual issue involved. In short this error just means "Nextcloud Not Started Yet".

(to be clear: We're not related to TrueNAS or iX-Systems and are a seperate project with seperate staff and seperate support workflows)

The issue is caused by uploading bigger file (600MB) through WebUI. On WebDAV it silently fails. On WebUI, it break Nextcloud and haven't found a way to recover yet. This worked fine before the app overhaul.

Why is this persistent after restart of the app is beyond me.
 

indivision

Guru
Joined
Jan 4, 2013
Messages
806
If you run a mission critical nextcloud instance, you need to have the sysadmin knowhow to do so, anyway. That's why I'd recommend using neither an app on SCALE nor a plugin on CORE but rolling your own in the environment you feel at home the most. E.g. inside a jail on CORE or a VM. Nextcloud is a complex large 3-tier web application that requires certain skills. I found that "canned" installations actually tend to get in my way more than they help. That's why I run mine in a jail. pkg upgrade followed by occ upgrade - always worked so far.

Thank you.

This is the conclusion I've landed on as well. Charts deliver a lot of great pros. But, there are some cons in certain contexts.
 

radomirpolach

Explorer
Joined
Feb 13, 2022
Messages
71
Thank you.

This is the conclusion I've landed on as well. Charts deliver a lot of great pros. But, there are some cons in certain contexts.
I don't think containerization is the issue. I don't mean to offend anybody, but this just seems to be a badly written app which introduced breaking change and was not tested? Because I had basically no custom configuration, and it crashed on upgrade and my clean installation crashes while uploading large files. I used Nextcloud directly for years and I stitched my config together years ago, and it reliably performed ever since with minimum maintenance.
 

indivision

Guru
Joined
Jan 4, 2013
Messages
806
I don't think containerization is the issue. I don't mean to offend anybody, but this just seems to be a badly written app which introduced breaking change and was not tested? Because I had basically no custom configuration, and it crashed on upgrade and my clean installation crashes while uploading large files. I used Nextcloud directly for years and I stitched my config together years ago, and it reliably performed ever since with minimum maintenance.

It did have a string of issues, even before the .15 update. True. But, I think that still highlights the issue with containerization. You're basically outsourcing a part of your app maintenance. So, you really need to know who you are working with on a critical app, what testing is like and how much consideration is made for users in the wild. Without the containerization, you have better options to fix things.

I suspect the issue for you is that you were supposed to have read the manual migration "instructions" before updating. But, those instructions aren't the most robust, even if you did see them before updating:

ifttt.PNG


This sounds like simply moving the entire data path to html. But, that didn't work for me either. I had to set up the same path for both data and html to get it to boot, which doesn't seem like the right solution long term, either. It's just not clear enough for something that is likely to break things for a lot of users if done wrong.

It can be worse. In my case, they've acknowledged that the "support" I got led to a broken install. But, still leave me banned and with a hostile impression. Imagine if I had relied on this for a business on a mission critical project?! It's just not viable to risk being put in that position over petty behavior. It's like being forced to hire an employee that is pre-emptively disgruntled because they aren't getting paid.
 
Last edited:

radomirpolach

Explorer
Joined
Feb 13, 2022
Messages
71
Moving files would be a minor inconvenience, but even clean installation doesn't work for me. PHP seems to be dying.
 

indivision

Guru
Joined
Jan 4, 2013
Messages
806
Moving files would be a minor inconvenience, but even clean installation doesn't work for me. PHP seems to be dying.

Moving files were not all that was needed for me (forgot to mention). You also have to run some maintenance commands. I did this through the "OCC Web" app in Nextcloud once I got it to boot. But, if you mean just a blank, clean install, that does sound odd. Haven't seen that...

[Is it possible that you are installing it "clean" but are using the same data or html path where you still have files from the last install?]
 

truecharts

Guru
Joined
Aug 19, 2021
Messages
788
The issue is caused by uploading bigger file (600MB) through WebUI. On WebDAV it silently fails. On WebUI, it break Nextcloud and haven't found a way to recover yet. This worked fine before the app overhaul.

Why is this persistent after restart of the app is beyond me.

Thanks for reporting it, please file a bug report with out developers on github for issues like these as this indeed looks to be, most likely, code related. We've seen 1 or 2 minor remarks about that before, but no one filed a report for it, so it hasn't been fixed yet.

For small bugs like these the response time when filing a bugreport is usually under 24 hours and the fix time most often under 48 hours.

I don't think containerization is the issue. I don't mean to offend anybody, but this just seems to be a badly written app which introduced breaking change and was not tested? Because I had basically no custom configuration, and it crashed on upgrade and my clean installation crashes while uploading large files. I used Nextcloud directly for years and I stitched my config together years ago, and it reliably performed ever since with minimum maintenance.

We agree that the previous App was badly writhen and borderline unmaintainable or, at the very least, very hard to improve on.
One of those issues was the bad structure of storage which had to be redone as well.

That's why we went ahead last month and have completely remade it from scratch, which (sadly enough) requires users to (atleast) manually migrate their data.

If there is more assistance needed or more issues arise, we're opened our support tickets for this specific major change, due to community request and after having a few support staff members go over migration themselves.

We don't expect many breaking changes and always clearly tag them as semvar major (aka: potentially breaking) and try hard to send out announcents any time we can. We're very sorry people don't get the memo and have staff available to help everybody out, as we understand how inconvenient it might be.

To be 100% clear:
From, a technical perspective Nextcloud 15.x.x is a completely new app, compared to 14.x.x


Moving files were not all that was needed for me (forgot to mention). You also have to run some maintenance commands. I did this through the "OCC Web" app in Nextcloud once I got it to boot. But, if you mean just a blank, clean install, that does sound odd. Haven't seen that...

Care to relate?
Technically there isn't any change of actuall Nextcloud versioning or content on update from 14.x.x to 15.x.x, so nextcloud should (if the files are in their respective places) not "see" any relevant changes when updating from 14.x.x and 15.x.x

For new installs placing back the old files, it might be needed to scan all files using OCC.
OCC-Web is a good call by the way, we'll look into if we can add that by default to prevent users running into "how to occ" issues repeatedly, considering how getting into the shell is slight convoluted on Nextcloud.

It did have a string of issues, even before the .15 update. True. But, I think that still highlights the issue with containerization. You're basically outsourcing a part of your app maintenance. So, you really need to know who you are working with on a critical app, what testing is like and how much consideration is made for users in the wild. Without the containerization, you have better options to fix things.

We agree that there whas a string of issues in 14.x.x. Mostly due to how 14.x.x forced every single change into the main container, which caused an accident where a change wasn't completely pushed to the right container.

With 15.x.x all our code is mostly cut into more bite-sized smaller pieces, so we expect less of these issues.

In terms of testing:
Our CI tests, by the nature of major version changes, exclude upgrade testing between major releases. We will look into if we can improve or modify that behavior in the future.
I suspect the issue for you is that you were supposed to have read the manual migration "instructions" before updating. But, those instructions aren't the most robust, even if you did see them before updating:

View attachment 56709

We agree that this announcement wasn't the most thorough.
We are working on completely reworking our documentation backend and will take to heart to put more effort into putting migration guidelines directly in the manual in the future.
This sounds like simply moving the entire data path to html. But, that didn't work for me either. I had to set up the same path for both data and html to get it to boot, which doesn't seem like the right solution long term, either. It's just not clear enough for something that is likely to break things for a lot of users if done wrong.

We do not advice that, instead we advice TrueTool PVC mounting to manually move the data between the PVC's and ensure that data is left in the data PVC (or moved to a hostPath mountpoint) while the rest is moved to the html PVC.

For more detail be sure to ask our staff!
One just responded with a full-go-ver on one of the recent support tickets :)
It can be worse. In my case, they've acknowledged that the "support" I got led to a broken install. But, still leave me banned and with a hostile impression.

We do acknowledge that we're sorry you misunderstood our support staff their assistance.

Imagine if I had relied on this for a business on a mission critical project?! It's just not viable to risk being put in that position over petty behavior.

With any form of community and opensource support, you might get banned when you do not follow their rules. Whatever those rules might be. This, for example, includes the iX-Forums or OpenZFS Github, to name a few often mission-critical pieces of software with community support.

If you need business-level support for mission critical processes, it's always adviseable to see if you can get commercial support with a contract.

We've even discussed this among our staff and there definately are options to get something like this set-up, in case people are interested. Anyone is free to throw us an email or DM somewhere to see what we make happen! :)

It's like being forced to hire an employee that is pre-emptively disgruntled because they aren't getting paid.

It's fair to assume most slaves would be pre-emptively disgruntled because they aren't getting paid.
 
Last edited:

indivision

Guru
Joined
Jan 4, 2013
Messages
806
Care to relate?
Technically there isn't any change of actuall Nextcloud versioning or content on update from 14.x.x to 15.x.x, so nextcloud should (if the files are in their respective places) not "see" any relevant changes when updating from 14.x.x and 15.x.x

For new installs placing back the old files, it might be needed to scan all files using OCC.

Mine is not a new install. Moving the files to html did not allow it to boot. But, copying the same path to both html and data did. So, it appears to be looking for files in both folders now. I would like to make truly separate paths for each and put the right files/folders in each. But, I don't have an easy way of knowing specifically how they are split up.

In any case, after getting it to boot there were still errors within the app. I couldn't create new files, etc. But, running the indexing command in OCC fixed that.

OCC-Web is a good call by the way, we'll look into if we can add that by default to prevent users running into "how to occ" issues repeatedly, considering how getting into the shell is slight convoluted on Nextcloud.

Indeed. It is by far the easiest way to run those commands, imo: https://apps.nextcloud.com/apps/occweb

I wouldn't put it in there by default because in a multi-user scenario an admin wouldn't want their client-users messing around in it. But, it's very easy to find, install and use. It's in "Apps > Tools" and installs with one button. Then you can reach it from the top nav.

In terms of testing:
Our CI tests, by the nature of major version changes, exclude upgrade testing between major releases. We will look into if we can improve or modify that behavior in the future.

Sounds good!

We agree that this announcement wasn't the most thorough.
We are working on completely reworking our documentation backend and will take to heart to put more effort into putting migration guidelines directly in the manual in the future.

Fair enough!

We do not advice that, instead we advice TrueTool PVC mounting to manually move the data between the PVC's and ensure that data is left in the data PVC (or moved to a hostPath mountpoint) while the rest is moved to the html PVC.

I appreciate you offering this explanation. Please do not take offense. But, this is not clear. This is a lot like the instructions I was getting before. They are ambiguous. Perhaps due to language differences?

"manually move the data" and "the rest is moved to" are in conflict. It's all data of different kinds. Do you mean only the data folder?

I thought TrueTool was for automatic updates. It also allows moving files?

For more detail be sure to ask our staff!
One just responded with a full-go-ver on one of the recent support tickets :)

I can't ask the staff because I was banned over a rule that conflicts with the goals you stated here ("we are always open to feedback").

I'm not getting the impression that you are really getting what the problem is. So, I'm not likely to come back. I've seen enough.

We do acknowledge that we're sorry you misunderstood our support staff their assistance.

Haha! Ok. I thought it was a genuine apology. I guess it was a non-apology then.

Thank you for clarifying that!

With any form of community and opensource support, you might get banned when you do not follow their rules. Whatever those rules might be. This, for example, includes the iX-Forums or OpenZFS Github, to name a few often mission-critical pieces of software with community support.

This is disingenuous in the extreme.

I was there when this rule was first put in place. And it was due to a user having a similar experience as me and seeking to discuss it. Ornias had pissed off and confused yet another user. So, he invented a rule that gave him a way to silence users saying anything about him, even constructive criticism.

Nobody at iX-Forums or OpenZFS Github either creates such Id-serving rules or enforces them in as arbitrary a manner as Ornias. So, please, do not compare apples to oranges.

If you need business-level support for mission critical processes, it's always adviseable to see if you can get commercial support with a contract.

We've even discussed this among our staff and there definately are options to get something like this set-up, in case people are interested. Anyone is free to throw us an email or DM somewhere to see what we make happen! :)

Are you being genuine? Why would I seek to hire anyone from a group whose leadership calls me names? lol

You guys seem to be confused about this whole "we won't do this for free" thing.

I don't pay for respect. I pay for time.

If someone doesn't know how to treat people, they simply don't meet professional requirements for ANY job. Thus, I do not want their time for anything.

It's fair to assume most slaves would be pre-emptively disgruntled because they aren't getting paid.

lol. This highlights what I've been saying in this thread well.

You chose to offer these services. That doesn't make you Spartacus and it doesn't exempt you from having to treat people with basic decency and fairness.
 

truecharts

Guru
Joined
Aug 19, 2021
Messages
788
Mine is not a new install. Moving the files to html did not allow it to boot. But, copying the same path to both html and data did. So, it appears to be looking for files in both folders now. I would like to make truly separate paths for each and put the right files/folders in each. But, I don't have an easy way of knowing specifically how they are split up.

Thats a fair question!

on 14.x.x:
data = /var/www/html/

From 15.x.x onwards:
html = /var/www/html/
data = /var/www/html/data/


I appreciate you offering this explanation. Please do not take offense. But, this is not clear. This is a lot like the instructions I was getting before. They are ambiguous. Perhaps due to language differences?

We'll try and look at writhing a more thorough explaination later this week.
As you might understand, that will take some time.


I can't ask the staff because I was banned over a rule that conflicts with the goals you stated here ("we are always open to feedback").

We're here to help people into the right direction.
We're sorry, but we're going to ignore your other attempts to get back to your temporary-ban for making a direct, not project related, personal attack, from this point onwards.
 

indivision

Guru
Joined
Jan 4, 2013
Messages
806
We're here to help people into the right direction.
We're sorry, but we're going to ignore your other attempts to get back to your temporary-ban for making a direct, not project related, personal attack, from this point onwards.

Sorry. I'm just not going to let you guys mischaracterize this.

The statement that I was banned for was not a personal attack and I've already described exactly what it was here. It was constructive criticism, only offered after being called a name, laughed at and generally mistreated by TrueCharts staff. I maintained civility even after all of that.

And it was 100% directly related to the project. So much so that another user I don't know followed up after seeing this incident to voice the same concern. See for yourself:

jesper1.PNG


jesper2.PNG


jesper3.PNG


jesper4.PNG


Imagine politely asking for help. Having the door slammed in your face and then being banned for saying that the person who did this isn't good at giving support.

That is what happened. And without anyone really owning up to it (and you clearly have not) it can and will happen again to someone else.
 
Last edited:

truecharts

Guru
Joined
Aug 19, 2021
Messages
788
Sorry. I'm just not going to let you guys mischaracterize this.

The statement that I was banned for was not a personal attack and I've already described exactly what it was here. It was constructive criticism, only offered after being called a name, laughed at and generally mistreated by TrueCharts staff. I maintained civility even after all of that.

And it was 100% directly related to the project. So much so that another user I don't know followed up after seeing this incident to voice the same concern.

Imagine politely asking for help. Having the door slammed in your face and then being banned for saying that the person who did this isn't good at giving support.

That is what happened. And without anyone really owning up to it (and you clearly have not) it can and will happen again to someone else.

After discussing it with our Head moderator we've decided that we do want to go on-topic about this one more time.

The reasoning behind your temporary-ban was as follows:
- You got the following reply on your original support request: "Found the issue, is solved in the new major release of Nextcloud."
- You took that as a advice to blindly install the new major release after it was released.
- Your ticket got closed because it was a breaking change update, at which point we should've pointed you towards another channel instead.
- You opened a new ticket, complaining about your migration. On which multiple staffmembers explained it was a breaking change
- Your started to blame the staff for installing said breaking change
- You got multiple options to continue to discuss fixing your Nextcloud Installation
- Instead you started a rant in the "Rants channel" ranting about the support-skills of Ornias (which is fair to some degree)
- At the end you started to even bring his personality into question.
- At which point (after consulting with the headmoderator) we called it "quits" and you got a warning+timeout for a week.

In our view, starting to rant about people's "personality" instead of "skills" or "mistakes" (which is, in fact, somewhat fair and reasonable) in a "rants" channel, crossed a line.

That's our moderation call and we stand by that decision.
However, with the continued personal attacks here, we've decided that we want to thank you for your presence within our community but do not want future involvement.
 

indivision

Guru
Joined
Jan 4, 2013
Messages
806
The reasoning behind your temporary-ban was as follows:
- You got the following reply on your original support request: "Found the issue, is solved in the new major release of Nextcloud."
- You took that as a advice to blindly install the new major release after it was released.

Again, that information was given within a ticket where TrueCharts staff was telling me multiple times to switch to different builds. So, it was not unreasonable for me to think that Ornias was in fact telling me to make this change.

Besides, your explanation of this doesn't really make any sense when you consider the alternative. For instance, when was I supposed to make that update? Never? What is the opposite of making that update "blindly"?

All that said, it's not like I was trying to shame TrueCharts or anything like that. I was actually just trying to defend myself because the way Ornias closed the ticket was with some insulting comment like "you should have known better." All I really wanted was for him to see that my choices were actually reasonable and that this unfortunate break was a team effort.

- Your ticket got closed because it was a breaking change update, at which point we should've pointed you towards another channel instead.

Not only was the ticket closed with no helpful information it included a message with a bunch of stilted language: something like "you should know by now" and "you've repeatedly been told". None of that really made sense as there was no previous time where anything was told to me, etc. It was just unwarranted hostility.

- You opened a new ticket, complaining about your migration. On which multiple staffmembers explained it was a breaking change

This is another misleading characterization.

I opened another ticket because Ornias' closing statement was not clear. I started the new ticket by saying that I had some follow up questions for clarification.

Ornius had said that using Cloudflare was not supported. I found this confusing because TrueCharts publishes a guide showing how to use Traefik with Cloudflare. I now think he was trying to say that they can't troubleshoot it but it is in fact otherwise supported in the sense that it is meant to work with it. But, he and other staff were so defensive about even simple questions it just went in circles for a bit.

It is simply untrue that I spent this time complaining about my migration. I was asking relevant questions that would either help me find info for fixing my app or better understand what TrueCharts was willing to do in these circumstances.

- Your started to blame the staff for installing said breaking change

Just the opposite, I was defending myself because from the start of Ornius' input you guys took an angle of "too bad! this was all your fault! see you later!"

- You got multiple options to continue to discuss fixing your Nextcloud Installation

This was definitely not offered in a helpful way. It was presented like "too bad you screwed up. maybe someone floating around in this other channel will help you."

- Instead you started a rant in the "Rants channel" ranting about the support-skills of Ornias (which is fair to some degree)

lol. I'm not sure how you guys can sleep at night with this stuff.

You are leaving out that Ornias' first suggestion for me was insultingly to write about this in the rant channel. Clearly, I wasn't trying to just rant about things. I was looking for helpful information toward fixing my Nextcloud build.

Eventually, he called me a name. Another staff member added a laughing emoji about that and closed the ticket. So, at that point, I finally DID feel like I had something to say in the rant channel.

There, I said that there are staff at TrueCharts that are great at support. But, that Ornias does not have a personality conducive for it. I suggested that he should let the other staff handle support and he could focus on coding.

That was my great sin that I was banned over.

- At the end you started to even bring his personality into question.

So what? Someone not having the personality for support is not a personal attack in any way shape or form. There are many things I don't have the personality for. Someone else saying so is not an insult.

The reality here is that Ornias was wrong in the way he treated me in that ticket. He was mad because I questioned him directly about it. Banning me for this statement was just an excuse for him to lash out because the guy has a hard time accepting criticism. Any criticism at all. No matter how valid or diplomatically put.

In our view, starting to rant about people's "personality" instead of "skills" or "mistakes" (which is, in fact, somewhat fair and reasonable) in a "rants" channel, crossed a line.

I think you are simply choosing to throw me under the bus instead of doing the more internally difficult but ethically right thing. Sad.

You know as well as I do that what I wrote was not crossing any line that is taken seriously in the TrueCharts discord. Minutes later Ornias called me an idiot and a douche. Another user implicated directly that he is a narcissist. Nothing happened. But, me saying Ornias isn't a personality fit for support? THAT is the great sin? Please.

However, with the continued personal attacks here, we've decided that we want to thank you for your presence within our community but do not want future involvement.

Hah. I would just like to point out that the only personal attacks that were actually made were by TrueCharts staff toward me.
 
Top