Jump to content

Development Updates


johnparker007

Recommended Posts

Read back to understand it’s journey.  Sadly it doesn’t seem to have much member interest,  it will quite possibly change the way you interact with fruit machine emulation.  You will be able to play fruit machines and video machines (at some point), also maybe some VR action too.

It is a 3D arcade simulator, you can create your own arcades, play online so machines won’t exclusively be played by just you, so there will an element of the unknown regarding state of a machine when you play it, like in real life ;)

J

Edited by serene02
  • Like 2
Link to comment
Share on other sites

@nails I think @serene02 covered it well up above, for the fruit machine side, it's pretty much what he said (for now, I have other FME features/enhancements in the concept stage, that may or may not be possible - for instance 'insta-boot' so the machines have zero startup time to get to their previous state).  There is also planned video games, coin pushers, other arcade machines support... but that will be much later on...

4 hours ago, serene02 said:

I’m super hyped to get a test version once JP is happy to hook us up ;)

I appreciate that bud, I'm in early stages of rewriting all the rendering to be much faster, so you'll all have to hang in there for quite a while yet before I can get to a suitable pre-alpha state, where it can go out.  Realistically, I think we're looking at 2-3 months at least for pre-alpha, it's just a really big project (for one coder).

Currently you can't actually even play the machines with the new lamp renderer, only walk around :)   And nothing else is being rendered, except reels/cabinets which may get to stay as they are as they've already had some efficiency enhancements not posted on here (for instance, I am now performing runtime mesh combining on the cabinets... there are more minor optimisations to be had, but not required for pre-alpha)

I know it must be slightly frustrating, as you've seen videos where the machines 'work' - but with the new rendering system, it's kinda all-or-nothing, it's a large and complex change to develop, then integrate.  Those earlier videos were showing it can be done, and more a proof-of-concept, now I'm focussing on getting it done without it maxxing out a gaming PC;  on the builds from a couple of weeks ago, when I had a lot of machines onscreen at the same time, my PC fans would all reeeally spin fast at CPU ~65%, GPU ~40% ...with the new stuff at CPU ~10%, GPU ~20%, the PC is nice and quiet and not sounding like it's about to take off, which is always a good sign ;) 

I've actually made a start on the new 7 segment (really 8 including the 'dot' segment, one of those legacy terms that stuck I guess :) ) renderer, and done a quick workaround fix for the blurry buttons/lamps with new renderer (proper fix will also save RAM but is a big job).  I'll pop up a tech update soonish, probably once I've got the new 7 segment renderer working well enough in a test scene... well I say it singular, I'll be looking to render like 100,000 of them to make sure it's got the speedy goodness.

For a bit of roadmap info in this meandering post (it's Friday night, I've had a few cans after work ;) )... I guess currently for pre-alpha, I'm thinking in no specific order:

* Build entirely GPU based rendering subsystems for:
....- 7 segment displays
....- segment alpha displays
....- dot alpha displays

* get machines working in play mode as well as attract mode with the new rendering systems, and fully remove the legacy slow systems (which will mean the overlapping lamps look initially worse than they were before on the old slow lamp renderer)

* resolve issues with the new lamp rendering causing heavy glitches/failure to 'light' on overlapping lamps, this may be a complex one to solve, but I have some ideas

* Learn how to do 'anchoring' then redo all the UI so far plus any new UI needed.  Currently the UI only works in your desktop resolution is 1920x1080 - any other resolution it corrupts, buttons/text are pushed offscreen etc

* More work on the attract mode player (render data recorder), this will be required, as more refactoring is needed so I can develop some kind of high-level shared machine render pipeline, so the inactive machines and the single engaged machine are all driving the renderers through a unified (much faster) system

* Installer/updater could be good, I've not looked into what's involved here

* General bugfixes of medium-high impact issues

* The thing to find MFME.exe on your system and pull it into the install folder - this will also currently mess up your history, so you'll see "_DATA_LAYOUT.fml" as your last played machines, among other potential problems.  But probably fine for pre-alpha, it's only for the adventurous ;) Later I may be able to solve these issues with more dll injection (the same as how the 'turbo startup' system take some control over MFME's internal processes)

* Probably a ton of other things I haven't anticipated

So TL:DR is hang in there guys, it's going to take a while yet :) 

  • Like 5

[ Arcade Simulator ] Pre-alpha installer: http://arcadesimulator.net  |  Known Issues: https://tinyurl.com/yz4uom2e  |  Donation info: https://tinyurl.com/yzvgl4xo
[ Community Drive ] The drive: http://tinyurl.com/yckze665
[ Fruit Machine Database ] Initial google sheets (WIP): https://tinyurl.com/2c5znxzz
[ MFME Launch ] Source code: https://github.com/johnparker007/MFMELaunch
[ Oasis ] Source code: https://github.com/johnparker007/Oasis
[ Sound ROM Editor ] Source code: https://github.com/johnparker007/SoundRomEditor

Link to comment
Share on other sites

Tech update :) 

Seven segment shader - initial test:

This is a first approach to a seven segment display shader.  It works by having the 8 segments split across two images, with a segment in each channel (so red, green, blue, alpha, with two images gives 8x segments).

In these images previews, alpha is shown in white:
image.thumb.png.f88ad7e420d8568be6b75f0bab66836a.png

The shader can then create any possible drawn segment by combining the various channels (red/green/blue/alpha) of the two images, plus set a base background color.  As per the lamp shader, this runs entirely on the graphics card, meaning the CPU has to do no work to draw these.

I'm not 100% sure this is the fastest way for this new shader, another option we have in reserve is creating a simple texture atlas (also known as a sprite sheet), and having every possible combination of segments.  For 256 possible combinations (8 segments x 8 segments), at a resolution of 256x256 per pre-rendered segment, it would require a 4k texture (4096/256 == 16, 16x16 == 256 possible segment configurations).  Nice to have an option in reserve since all this recent shading programming is new to me :)   This approach is probably even faster, but requires far more memory per texture atlas, so if I wanted 3 variations on the 3 main styles of display, that'd be 9x4k textures, which is a significantly wasteful, when that texture memory could be better spent on backglass/lamp textures.

Next stage is creating a test scene to really push this, and render say 10,000 segment displays randomly changing, driven by the same direct GPU call system as the new lamp renderer - and check that CPU/GPU usage is definitely about the same between drawing and not drawing.  If that tests ok, then I can start on getting them in for real :) Ultimately it means that all the machines in attract mode will then show their seven segment animations etc (with more work on the attract mode recording/playback system), and when playing machines they will use this renderer (machines are currently unplayable until work is done to refactor stuff so they can use the new renderers).

Edited by johnparker007
  • Like 3
  • Awesome 1

[ Arcade Simulator ] Pre-alpha installer: http://arcadesimulator.net  |  Known Issues: https://tinyurl.com/yz4uom2e  |  Donation info: https://tinyurl.com/yzvgl4xo
[ Community Drive ] The drive: http://tinyurl.com/yckze665
[ Fruit Machine Database ] Initial google sheets (WIP): https://tinyurl.com/2c5znxzz
[ MFME Launch ] Source code: https://github.com/johnparker007/MFMELaunch
[ Oasis ] Source code: https://github.com/johnparker007/Oasis
[ Sound ROM Editor ] Source code: https://github.com/johnparker007/SoundRomEditor

Link to comment
Share on other sites

Have done further work on the new seven-segment display shader/renderer - here's 50,000 in a cloud, randomly changing which segments are lit, and also the overall segment color, for every display, every frame :) 
 


GPU is very comfortably drawing them all via the same technique as the new lamp renderer, so I think this one is now good to actually port over to the machine rendering (to replace the old slow system, these also look nicer).  Means I need to get the attract modes recording the seven segment displays for testing, along with the segment alpha displays (which I'll probably move onto next).

Edited by johnparker007
  • Like 1
  • Awesome 1

[ Arcade Simulator ] Pre-alpha installer: http://arcadesimulator.net  |  Known Issues: https://tinyurl.com/yz4uom2e  |  Donation info: https://tinyurl.com/yzvgl4xo
[ Community Drive ] The drive: http://tinyurl.com/yckze665
[ Fruit Machine Database ] Initial google sheets (WIP): https://tinyurl.com/2c5znxzz
[ MFME Launch ] Source code: https://github.com/johnparker007/MFMELaunch
[ Oasis ] Source code: https://github.com/johnparker007/Oasis
[ Sound ROM Editor ] Source code: https://github.com/johnparker007/SoundRomEditor

Link to comment
Share on other sites

Just realised I was doing the 'off segments' the same color as the background which was wrong, here's what they look like with brighter off segments :) 
image.thumb.png.0488c5816648b662f1a3c46505e9b1bc.png
 

  • Like 1
  • Awesome 1

[ Arcade Simulator ] Pre-alpha installer: http://arcadesimulator.net  |  Known Issues: https://tinyurl.com/yz4uom2e  |  Donation info: https://tinyurl.com/yzvgl4xo
[ Community Drive ] The drive: http://tinyurl.com/yckze665
[ Fruit Machine Database ] Initial google sheets (WIP): https://tinyurl.com/2c5znxzz
[ MFME Launch ] Source code: https://github.com/johnparker007/MFMELaunch
[ Oasis ] Source code: https://github.com/johnparker007/Oasis
[ Sound ROM Editor ] Source code: https://github.com/johnparker007/SoundRomEditor

Link to comment
Share on other sites

:wow:I'm not going to pretend I have a clue how you do this stuff JP, I just sit in awe of everything you are doing here. Keep the updates coming, it will hopefully provide documentation of how you arrived at the finished article in the future. Thanks man. :mess_177:

Edited by davep180
  • Like 4
Link to comment
Share on other sites

Hey John,  any benefit to running that stress test with mipmapping on ?

I assume unity shaders can be 'switched' or plugged into shader nodes.?!

See, I'd like to ramp the display #s up with & without 'mm' until the CPU/GPU trade off is giving out performance numbers (but I also realise its not really necessary but 'maybe' helpful determining optimal distances for your arcade walkabouts and mm levels?

Sorry mate, Sunday morning wake n bake.

 

 

Edited by JimmytheNugg
  • Like 2
Link to comment
Share on other sites

4 hours ago, JimmytheNugg said:

Hey John,  any benefit to running that stress test with mipmapping on ?

I assume unity shaders can be 'switched' or plugged into shader nodes.?!

See, I'd like to ramp the display #s up with & without 'mm' until the CPU/GPU trade off is giving out performance numbers (but I also realise its not really necessary but 'maybe' helpful determining optimal distances for your arcade walkabouts and mm levels?

Sorry mate, Sunday morning wake n bake.

 

 

The 'layout' mipmapping is a work in progress at present... currently I have workaround in to 'fix' the blurry buttons (see new vids in next post).  There is also currently no anisotropic filtering on the layout images, this is something I'll be looking at down the line (as it's really improved the floor/walls/ceiling).  This will also improve the appearance (sharpen up mipmapped textures viewed from angle/in distance).

Also, the normal mipmapping stuff is getting confused due to the way I'm bypassing a lot of Unity's rendering system and running the rendering code directly on the GPU with manual atlassing (that has some disproportionate scaling in from my 'perspective panel' conversion process)... all can probably be improved more, though for now, it's just getting everything drawing again with these custom shaders/instanced indirect draw calls.

Another thing to bear in mind is that for arcade with say 300 fruit machines in, that would exceed the available RAM for a lot of users - so I'm planning to use some form of mipmap streaming / virtual texture streaming to handle that (the same way GTA 5 has a massive world, but streams things in as they're needed).

I'm planning to have various graphics setting exposed to the user, so things that can be changed at runtime will also be available in there, so you'll be able to pull up that menu and have a tinker, and hopefully achieve the look you want - though I'll of course aim to have the default looking good.

Enjoy your wake 'n' bake, I often do the same when I wake up with a hangover from the weekend beers ;) 

Edited by johnparker007
  • Like 2
  • Awesome 1

[ Arcade Simulator ] Pre-alpha installer: http://arcadesimulator.net  |  Known Issues: https://tinyurl.com/yz4uom2e  |  Donation info: https://tinyurl.com/yzvgl4xo
[ Community Drive ] The drive: http://tinyurl.com/yckze665
[ Fruit Machine Database ] Initial google sheets (WIP): https://tinyurl.com/2c5znxzz
[ MFME Launch ] Source code: https://github.com/johnparker007/MFMELaunch
[ Oasis ] Source code: https://github.com/johnparker007/Oasis
[ Sound ROM Editor ] Source code: https://github.com/johnparker007/SoundRomEditor

Link to comment
Share on other sites

A bit more progress :) 

I've added in a 'workaround' fix for now to fix the very blurry buttons we were seeing on the JPM vogues, plus other general lamp blurriness issues.

I've got the attract mode to record lamp brightnesses - so that machines like this JPM one that use varying lamp brightnesses during their attracts will now show that properly.

The big one - have done some refactoring of the new rendering system, and got the seven segment displays drawing in the arcade at the correct positions/scales.  They're all just drawing with all segments on for now, I'll be getting the attract mode recording/playing back their content as one of the next jobs :) 

 

Edited by johnparker007
  • Like 5
  • Awesome 2

[ Arcade Simulator ] Pre-alpha installer: http://arcadesimulator.net  |  Known Issues: https://tinyurl.com/yz4uom2e  |  Donation info: https://tinyurl.com/yzvgl4xo
[ Community Drive ] The drive: http://tinyurl.com/yckze665
[ Fruit Machine Database ] Initial google sheets (WIP): https://tinyurl.com/2c5znxzz
[ MFME Launch ] Source code: https://github.com/johnparker007/MFMELaunch
[ Oasis ] Source code: https://github.com/johnparker007/Oasis
[ Sound ROM Editor ] Source code: https://github.com/johnparker007/SoundRomEditor

Link to comment
Share on other sites

Nice going again JP, as the Tesco slogan states "Every Little Helps" to get that bit further (not saying it is little but you know exactly what I mean), you may not get lots of responses or reactions but you are being watched intensively by the whole community which shows in the figures;). that I can guarantee 100%, bit like when a release is done, it has been downloaded 100 times but that is x10 against the responses/reactions. The way I see it is every download is positive and comments are superfluous unless it is to do with any bugs or fixes, if people want to come out and thank you that is all good, is also their choice and is very much appreciated but the real proof in the pudding is succession and the gratification it gives you my friend to give something that is truly immense just like we have seen over the years. 

  • Like 4

 

 

Link to comment
Share on other sites

Thanks @Big J :)  

Since posting that vid I've got the 7 segments looking a lot better (again down to mipmapping issues as @JimmytheNugg pointed out earlier with a keen eye :) )...  I should be able to get the default mipmapping all a lot better, it's just not working as it should at the mo because of the custom stuff I'm doing to get things onscreen so fast.

All these little bits of progress are a buzz to me too, I never thought I'd get the rendering this tight, but over the course of the project, I've had to buckle in and learn stuff outside the comfort zone to achieve necessary milestones, like full-screen with no emulators visible, and running on modest hardware.  I remember getting it so I could send input to MFME (and MAME) running hidden in the background - both those jobs were really tricky to figure out!  A lot of this stuff just hasn't been tackled before, so I'm having to think on my feet quite a bit :) 

This new fast renderer stuff is a relief to have coming together, I really didn't want it to need a full-on gaming PC just to play it, and this is the solution to that... also been getting some background stuff looked at, in terms of servers... I'm lucky enough to have BT Full Fibre in my area - so I'm thinking now I can perhaps upgrade to that, then run all the various server stuff from a dedicated server PC at my house.  Rather than paying every month for 'cloud' services, which would have meant doing more tin-rattling than I'd like.  Be good for the website and patch updates, and I may also be able to do all the multiplayer/voice chat/game streaming further down the line (so you can stand next to your mate, watching them play, and have a voice chat over your headset...) -   I suspect I'll be hassling @slasher for a bit of advice along the way with all that stuff, as he's a web wizard, I've not done a ton of web stuff...

This is certainly become the most interesting project I've ever come up with/worked on, so it's all good :D  Let's hope that hangover's not too bad tomorrow so I can get some more progress on my renderers...

  • Like 3
  • Awesome 1

[ Arcade Simulator ] Pre-alpha installer: http://arcadesimulator.net  |  Known Issues: https://tinyurl.com/yz4uom2e  |  Donation info: https://tinyurl.com/yzvgl4xo
[ Community Drive ] The drive: http://tinyurl.com/yckze665
[ Fruit Machine Database ] Initial google sheets (WIP): https://tinyurl.com/2c5znxzz
[ MFME Launch ] Source code: https://github.com/johnparker007/MFMELaunch
[ Oasis ] Source code: https://github.com/johnparker007/Oasis
[ Sound ROM Editor ] Source code: https://github.com/johnparker007/SoundRomEditor

Link to comment
Share on other sites

Well you know the saying fools rush in an' all but know you are taking your time to get it spot on, that headset stuff sounds like a damn good plan, can even call @slasher a cunt over the airwaves and am sure will get some colourful metaphors back. He is a wiz with a fair few things and will help in anyway possible I'm sure, as for me I'm bloody useless so will have to stay the spectator for now, if I come up with any ideas I'll let you know as good that you are open to suggestion. I'm still learning and things are gradually coming to me as Slasher is good at explaining but would be good to get others thoughts and ideas as want it the best it can be, in this case too many cooks don't spoil the broth lol.

I'm sure when the time is right for you (as we don't want to get ahead of ourselves) you will have it running in a way where it does satisfy the masses and the future of emulation will continue for a long time to come with MAME and MFME in separate worlds if you get my drift so we all can have our cake and eat it.

 

  • Like 3

 

 

Link to comment
Share on other sites

Indeed mate, that checklist I posted a bit back, I'm sticking to - once the main components are in place alongside the base functionality for patch updates etc, it should be Arcade SIm for all, just gonna keep plugging away :)

  • Like 1
  • Thanks 1

[ Arcade Simulator ] Pre-alpha installer: http://arcadesimulator.net  |  Known Issues: https://tinyurl.com/yz4uom2e  |  Donation info: https://tinyurl.com/yzvgl4xo
[ Community Drive ] The drive: http://tinyurl.com/yckze665
[ Fruit Machine Database ] Initial google sheets (WIP): https://tinyurl.com/2c5znxzz
[ MFME Launch ] Source code: https://github.com/johnparker007/MFMELaunch
[ Oasis ] Source code: https://github.com/johnparker007/Oasis
[ Sound ROM Editor ] Source code: https://github.com/johnparker007/SoundRomEditor

Link to comment
Share on other sites

- seven segments now working, and attract mode records/plays back the seven segment states :) 
- testing improvements to lit lamp texture rendering
- also improved seven segment rendering

And now time to ring BT to book in this gigabit fibre connection, for self-hosting all the various server stuff we'll need...

 

  • Like 5

[ Arcade Simulator ] Pre-alpha installer: http://arcadesimulator.net  |  Known Issues: https://tinyurl.com/yz4uom2e  |  Donation info: https://tinyurl.com/yzvgl4xo
[ Community Drive ] The drive: http://tinyurl.com/yckze665
[ Fruit Machine Database ] Initial google sheets (WIP): https://tinyurl.com/2c5znxzz
[ MFME Launch ] Source code: https://github.com/johnparker007/MFMELaunch
[ Oasis ] Source code: https://github.com/johnparker007/Oasis
[ Sound ROM Editor ] Source code: https://github.com/johnparker007/SoundRomEditor

Link to comment
Share on other sites

Tech update - have started work on making the new fast renderer for the dot matrix alpha displays :) 

I was going to do the segment alphas next, but I pretty much know how I'm going to do those, whereas this required figuring out some new stuff, so though best to tackle the unknown first.

This first stage has gone ok, so again this is rendering the off dots/on dots to show the letter 'J' entirely on the graphics card, leaving the CPU free to do other things.

Here's a vid showing the sliders/general look: :)

Next will be getting it working in my 'universe' scene and drawing many thousands of them at 60fps to check all is good... then it'll be onto getting it to actually work on the machines, and recording/playing back in attract mode...

  • Like 3

[ Arcade Simulator ] Pre-alpha installer: http://arcadesimulator.net  |  Known Issues: https://tinyurl.com/yz4uom2e  |  Donation info: https://tinyurl.com/yzvgl4xo
[ Community Drive ] The drive: http://tinyurl.com/yckze665
[ Fruit Machine Database ] Initial google sheets (WIP): https://tinyurl.com/2c5znxzz
[ MFME Launch ] Source code: https://github.com/johnparker007/MFMELaunch
[ Oasis ] Source code: https://github.com/johnparker007/Oasis
[ Sound ROM Editor ] Source code: https://github.com/johnparker007/SoundRomEditor

Link to comment
Share on other sites

3 hours ago, slasher said:

Looks like this is going really well! 

As you well know, hit me up any time about anything and if I can help I will! 

 

Thanks bud and thanks for your help already on getting this server sorted out! :) 

  • Like 2

[ Arcade Simulator ] Pre-alpha installer: http://arcadesimulator.net  |  Known Issues: https://tinyurl.com/yz4uom2e  |  Donation info: https://tinyurl.com/yzvgl4xo
[ Community Drive ] The drive: http://tinyurl.com/yckze665
[ Fruit Machine Database ] Initial google sheets (WIP): https://tinyurl.com/2c5znxzz
[ MFME Launch ] Source code: https://github.com/johnparker007/MFMELaunch
[ Oasis ] Source code: https://github.com/johnparker007/Oasis
[ Sound ROM Editor ] Source code: https://github.com/johnparker007/SoundRomEditor

Link to comment
Share on other sites

16 hours ago, bullionbars2011 said:

This look brill really can't wait to have a blast on this just got a new gaming laptop so hopefully the laptop will run this 😀👍 you done brill progress on this I've been watching every video on your YouTube on how things have changed and progress you done very well done on this bud!

Thanks mate :)  Your new gaming laptop should be fine for running this - I'm doing a bunch of optimisations, so it shouldn't require a monster PC to run when we get to pre-alpha release.

  • Like 2

[ Arcade Simulator ] Pre-alpha installer: http://arcadesimulator.net  |  Known Issues: https://tinyurl.com/yz4uom2e  |  Donation info: https://tinyurl.com/yzvgl4xo
[ Community Drive ] The drive: http://tinyurl.com/yckze665
[ Fruit Machine Database ] Initial google sheets (WIP): https://tinyurl.com/2c5znxzz
[ MFME Launch ] Source code: https://github.com/johnparker007/MFMELaunch
[ Oasis ] Source code: https://github.com/johnparker007/Oasis
[ Sound ROM Editor ] Source code: https://github.com/johnparker007/SoundRomEditor

Link to comment
Share on other sites

I've put the dot alpha 'fast' renderer I was working on to one side, as it has a couple of issues.  I've done a new approach (again a very fast purely GPU-based renderer) - it has minor issues, but coming together :) 

Just filled each display with random on/off dots for now as a test - next job will be getting the attract mode recorder recording the displays and playing them back through the new renderer.

(And then some fettling to get it looking good enough for the pre-alpha)

 

Edited by johnparker007
  • Like 1
  • Awesome 1

[ Arcade Simulator ] Pre-alpha installer: http://arcadesimulator.net  |  Known Issues: https://tinyurl.com/yz4uom2e  |  Donation info: https://tinyurl.com/yzvgl4xo
[ Community Drive ] The drive: http://tinyurl.com/yckze665
[ Fruit Machine Database ] Initial google sheets (WIP): https://tinyurl.com/2c5znxzz
[ MFME Launch ] Source code: https://github.com/johnparker007/MFMELaunch
[ Oasis ] Source code: https://github.com/johnparker007/Oasis
[ Sound ROM Editor ] Source code: https://github.com/johnparker007/SoundRomEditor

Link to comment
Share on other sites

It's all a bit hacked together but it's alive (in attract mode) - working fast renderer for the dot alphas :) 

It looks 'grainy' and a bit distorted, which I fully expected - I may be able to improve a little, but I'll not spend much time on it, as I need to write a third attempt using yet another technique, but that can wait til later as these are usable for now.

Here's a video wandering around looking at them from different angles/distances.  Really good to finally see a row of machines doing all the elements of their attracts at once (lamps / 7 segments / dot alphas) with no major performance hit :D 

(also I need to implement 'master brightness' recording/playback/control, I got away with it here as this machine doesn't appear to do a lot of dot alpha fade effects)

  • Like 1

[ Arcade Simulator ] Pre-alpha installer: http://arcadesimulator.net  |  Known Issues: https://tinyurl.com/yz4uom2e  |  Donation info: https://tinyurl.com/yzvgl4xo
[ Community Drive ] The drive: http://tinyurl.com/yckze665
[ Fruit Machine Database ] Initial google sheets (WIP): https://tinyurl.com/2c5znxzz
[ MFME Launch ] Source code: https://github.com/johnparker007/MFMELaunch
[ Oasis ] Source code: https://github.com/johnparker007/Oasis
[ Sound ROM Editor ] Source code: https://github.com/johnparker007/SoundRomEditor

Link to comment
Share on other sites

×
×
  • Create New...