Logo Platform
logo amplifiers simplified

List of Limits?

Reply
Copied to clipboard!
7 years ago
May 30, 2017, 10:48:43 AM
Painter448 wrote:

Someone else had something similar In This Thread You can up it to 180 nodes and have dense galaxies without it working most of the time. but sometimes (depending on the seed) something goes over its limit maybe nodes, star-lanes  or planets I'm not sure.


If its a hard-coded number in the assembly it can be edited to a different number with reflexil. Its just a matter of finding it

Sure, It's a C# thing so decompiling and going that route is always an option, but I hate to think I paid for a game just to implement what was possible during the alpha, that's... kinda shitty, lol, but it's what ever, they got my money and I got fun out of it during the alpha I guess :P

I'll just keep an eye on it, maybe they'll release those restrictions and make truly endless gameplay more an option in the future once they get the other performance bugs out of the way.  But I can understand why they don't implement it natively, due to the hardware needs of large scale stuff, but they could have still at least left it modable-in :(

0Send private message
7 years ago
May 31, 2017, 8:44:10 AM

Unfortunately if the game is going to take 10+ minutes on even minor adjustments to galaxy size on -my- hardware, it's largely going to defeat the purpose of releasing this as a workshop mod for the majority of the public, let alone implement my largest galaxy settings.


I'm just going to wait, hopefully performance issues get ironed out in the game and it gets a bit more like it was during the alpha, waiting around a 10, 20, 30 etc minutes every time I go back into the game, or load a save, etc, is hardly acceptable just for larger galaxies :P


The reason I like playing with massive galaxies in games like this is because I tend to play slowly over days and weeks in and out of work and other things, I like stuff that will take me a genuinely long time to 'conquer' the galaxy lol.

0Send private message
7 years ago
May 31, 2017, 7:44:48 AM

The only argument out of range errors I get are from the galaxy generator running out of node names. 

I would suggest leaving yours running until the diagnostics show something after Empire index unset. Retrieved #0 from lobby slot. 

Give it at least ten minutes if not more, I’m running with a 99th percentile CPU and it can still take me up to 7 minutes to generate galaxies.


Also have a look into your other argument out of range errors, They could have something to do with this, But even if not they are generally good to get rid of.

Updated 7 years ago.
0Send private message
7 years ago
May 31, 2017, 2:14:01 AM
Painter448 wrote:

It Depends on how large of a galaxy you where generating but the error ArgumentOutOfRangeException: Argument is out of range. Parameter name: index 

Happens 3 - 5 Minutes after Empire index unset. Retrieved #0 from lobby slot. 

The Stack from ArgumentOutOfRangeException Gives the info as its the error, If the diagnostic does not have ArgumentOutOfRangeException Then the game is still working on generating the galaxy, It can take 6+ Minutes to generate super huge galaxies, just keep the diagnostics open (you have to keep refreshing it) while it’s trying to make a galaxy.


It wasn't even super huge.  I was simply trying to test my 'Small' endless-scale model, which was only a smidge larger than the native largest galaxy settings just to see how it worked.

I made vast pretty massive galaxies during the alpha, to the point that zooming out to even cover one half of the twin-star system would result in not being able to see system names anymore;
 

During the alpha though it took nothing more than a couple minutes to generate on my hardware.

Edit: Also for what it's worth I get lots of random argument out of range errors in the log even just launching the game it seems.  So I assumed it may not have been world-generation related.

Updated 7 years ago.
0Send private message
7 years ago
May 30, 2017, 4:24:32 PM

It Depends on how large of a galaxy you where generating but the error ArgumentOutOfRangeException: Argument is out of range. Parameter name: index 

Happens 3 - 5 Minutes after Empire index unset. Retrieved #0 from lobby slot. 

The Stack from ArgumentOutOfRangeException Gives the info as its the error, If the diagnostic does not have ArgumentOutOfRangeException Then the game is still working on generating the galaxy, It can take 6+ Minutes to generate super huge galaxies, just keep the diagnostics open (you have to keep refreshing it) while it’s trying to make a galaxy.


14:37:48:235STACKGameClientState_ConnectedToServer

14:37:48:235STACKGameClientState_LaunchGame

14:37:48:235STACKDumping method set to 'Text'.

14:37:48:235STACKWaiting for the game server to launch the game...

14:37:48:257STACKEmpire index unset. Retrieved #0 from lobby slot.

14:37:48:257STACKEmpire index unset. Retrieved #0 from lobby slot.

14:41:01:368STACKArgumentOutOfRangeException: Argument is out of range. Parameter name: index

14:41:01:368STACKArgumentOutOfRangeException: Argument is out of range. Parameter name: index

14:42:02:905STACKUnbinding service [Amplitude.Unity.Graphics.IHxFxSystem] with context [Battle]

14:42:02:906STACK[HxFxSystemComponentTextureAtlasManager] unassigning atlas [Atlas_DecalFx] (2048x1024) from Tag [DecalFx] to global name [_DecalAtlas].

14:42:02:906STACKUnbinding service [ILodService] with context [Default]

14:42:02:906STACKFlushing diagnostics before closing streams...

 

Updated 7 years ago.
0Send private message
7 years ago
May 30, 2017, 4:14:24 PM

Yeah nothing like that;


06:20:05:656STACKLaunchAsync()

06:20:05:678STACKLaunching the game server...

06:20:05:678STACKGameServerState_InitializeServer

06:20:05:678STACKGameServerState_LaunchGame

06:20:05:712STACK[IEndTurnService] RegisterValidator | Registered Method 'GuiNotificationManager.EndTurnValidator'

06:20:05:712STACKWaiting for the ignition of all game ancillaries...

06:20:05:712STACKLaunching the game client...

06:20:05:712STACK[IEndTurnService] RegisterCanExecuteValidator | Registered Method 'GameClient.CanExecuteEndTurn'.

06:20:05:712STACKGameClientState_WaitingForServer

06:20:05:712STACKGameClientState_ConnectingToServer

06:20:05:896STACKAll game ancillaries have been ignited.

06:20:05:896STACKIn GameSettingDefinition 'SessionName', could not resolve the ItemDefinition 'Synapt's game'

06:20:05:896STACKIn GameSettingDefinition 'GalaxyGenerationSeed', could not resolve the ItemDefinition '0'

06:20:05:896STACKSessionState_OpenedAndLaunching.End()

06:20:05:896STACKSessionState_OpenedAndLaunched.Begin()

06:20:05:896STACK[ChatMessage] RECV: l:/gamelaunchedonce/True (from 0x2baef04).

06:20:05:896STACKInitiate connection to server with steamIDRemote: 0x110000102baef04, steamIDUser: 0x110000102baef04.

06:20:05:896STACKGot initiate connection response from server.

06:20:05:896STACKEmpire index unset. Retrieved #0 from lobby slot.

06:20:05:911STACKSuccessfully connected to SteamGameServer.

06:20:05:925STACKArgumentOutOfRangeException: Argument is out of range. Parameter name: index

06:20:05:925STACKArgumentOutOfRangeException: Argument is out of range. Parameter name: index

06:20:05:925STACKGameClientState_ConnectedToServer

06:20:05:925STACKGameClientState_LaunchGame

06:20:05:925STACKDumping method set to 'Text'.

06:20:05:925STACKWaiting for the game server to launch the game...

06:20:05:939STACKEmpire index unset. Retrieved #0 from lobby slot.

06:20:05:939STACKEmpire index unset. Retrieved #0 from lobby slot.

06:23:28:126STACKFlushing diagnostics before closing streams...


6:23:28 is when I alt-F4'd the game, it sat for a good 3~ minutes doing nothing.  CPU load stayed pretty active at about 50%, but no actual visible action.


The two out of range errors were stackframe parsing issues, but not the same as yours;

Amplitude.Diagnostics:UnityEngineLogCallback(System.Reflection.ParameterInfo, System.Reflection.ParameterInfo, System.Reflection.ParameterInfo) at Error while parsing stackframe: System.Collections.Generic.List`1[Generator.Definitions.GalaxyShapeMergePlans+MergePlan].get_Item (Int32 index)(0) Amplitude.Diagnostics:UnityEngineLogCallback(System.Reflection.ParameterInfo, System.Reflection.ParameterInfo, System.Reflection.ParameterInfo) at Error while parsing stackframe: System.Linq.Enumerable.ElementAt[MergePlan] (IEnumerable`1 source, Int32 index)(0) Amplitude.Diagnostics:UnityEngineLogCallback(System.Reflection.ParameterInfo, System.Reflection.ParameterInfo, System.Reflection.ParameterInfo) at Error while parsing stackframe: Generator.ConnectivityManager.DetermineApplicableMergePlan ()(0) Amplitude.Diagnostics:UnityEngineLogCallback(System.Reflection.ParameterInfo, System.Reflection.ParameterInfo, System.Reflection.ParameterInfo) at Error while parsing stackframe: Generator.GenerationManager+c__Iterator0.MoveNext ()(0) Amplitude.Diagnostics:UnityEngineLogCallback(System.Reflection.ParameterInfo, System.Reflection.ParameterInfo, System.Reflection.ParameterInfo) at Error while parsing stackframe: UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress)(0)
0Send private message
7 years ago
May 30, 2017, 3:36:45 PM

My problem is though that nothing was being logged at all as far as I can tell in relation to why the generator is simply stopping and not loading at all.

In The Diagnostics There is the option of seeing the stack of each entry, thats what showed me what had happened, 

That it had ran out of names with 

Error while parsing stackframe: Generator.Tasks.NameNodes.CoreExecution ()(0) 
0Send private message
7 years ago
May 30, 2017, 3:30:25 PM
Painter448 wrote:




I found the limit and removed it, sort of.

For The Galaxy above I Changed GalaxyDensityStatus to 2.25, That Like your attempts ended with a ArgumentOutOfRangeException: Argument is out of range. Parameter name: index

But Reading the Stack of that error

It failed creating a galaxy as it name out of names for star systems, 

Now to fix this you can go to the file Public/GalaxyGenerator/WeighTableDefinitions.XML

Go to <GalaxyGeneratorWeightTable Name="StarSystemNames"> and First remove the <!-- at <Entry Tag="%StarName252"          Weight="1"/>

and the --> after %StarName300

If you want to add even more Weight Table Extension 301-500 

Also while your in this file you can change %StarName100 -> %StarName200 (The one between %StarName199 and %StarName201)


Next up you will want to add star names Go to Public/Localization/English/ES2_Localization_Assets_Locales.XML and add Lots of Super Plain System Names 

after <LocalizationPair Name="%StarName251">Trappist-1</LocalizationPair>


And It should work.

I am currently getting actual system names and making a mod for it so you don't get a system called System242 ect. in-game


Ah so that's where they moved those options.  The NodeBallSize and stuff used to be inside of individual WorldSettingDefinition items, I thought they just got combined into stuff like SizeScale and GalaxySizeIndex.

I did have more names for planets in my localization, imported from my alpha mod, but it's possible perhaps I was still exceeding them as I didn't have a chance to actually test them for balance (since I couldn't get the generator to even launch past creation).

My problem is though that nothing was being logged at all as far as I can tell in relation to why the generator is simply stopping and not loading at all.



Dagart wrote:

For "Faction Colors" mods, we are looking at the bug.
That happens when you change a color with the mod enabled and then you disable it.
> In the New Game Screen, all colors after the one you have changed will be broken. To repair that, you can try to replace the faction color you have changed when the mod was enabled.
I keep you informed.

Perhaps it's related to wherever that weird "Name of the competitor" pre-fill is coming from?  I tried searching the XML files for that but found no match (not even in the localization).

0Send private message
7 years ago
May 30, 2017, 2:41:29 PM

For "Faction Colors" mods, we are looking at the bug.
That happens when you change a color with the mod enabled and then you disable it.
> In the New Game Screen, all colors after the one you have changed will be broken. To repair that, you can try to replace the faction color you have changed when the mod was enabled.
I keep you informed.

0Send private message
7 years ago
May 30, 2017, 11:55:21 AM






I found the limit and removed it, sort of.

For The Galaxy above I Changed GalaxyDensityStatus to 2.25, That Like your attempts ended with a ArgumentOutOfRangeException: Argument is out of range. Parameter name: index

But Reading the Stack of that error

Amplitude.Diagnostics:UnityEngineLogCallback(System.Reflection.ParameterInfo, System.Reflection.ParameterInfo, System.Reflection.ParameterInfo) at Error while parsing stackframe: System.Collections.Generic.List`1[System.Single].get_Item (Int32 index)(0)

Amplitude.Diagnostics:UnityEngineLogCallback(System.Reflection.ParameterInfo, System.Reflection.ParameterInfo, System.Reflection.ParameterInfo) at Error while parsing stackframe: CoreUtils.WeightedRandomSelector.GetRandomIndex ()(0)

Amplitude.Diagnostics:UnityEngineLogCallback(System.Reflection.ParameterInfo, System.Reflection.ParameterInfo, System.Reflection.ParameterInfo) at Error while parsing stackframe: Generator.WeightedTableRandomSelector.GetRandomSelected ()(0)

Amplitude.Diagnostics:UnityEngineLogCallback(System.Reflection.ParameterInfo, System.Reflection.ParameterInfo, System.Reflection.ParameterInfo) at Error while parsing stackframe: Generator.Tasks.NameNodes.CoreExecution ()(0)

Amplitude.Diagnostics:UnityEngineLogCallback(System.Reflection.ParameterInfo, System.Reflection.ParameterInfo, System.Reflection.ParameterInfo) at Error while parsing stackframe: Generator.Task.Execute ()(0)

Amplitude.Diagnostics:UnityEngineLogCallback(System.Reflection.ParameterInfo, System.Reflection.ParameterInfo, System.Reflection.ParameterInfo) at Error while parsing stackframe: Generator.GenerationManager.SequenceTask (Generator.Task task)(0)

Amplitude.Diagnostics:UnityEngineLogCallback(System.Reflection.ParameterInfo, System.Reflection.ParameterInfo, System.Reflection.ParameterInfo) at Error while parsing stackframe: Generator.GenerationManager+c__Iterator0.MoveNext ()(0)

Amplitude.Diagnostics:UnityEngineLogCallback(System.Reflection.ParameterInfo, System.Reflection.ParameterInfo, System.Reflection.ParameterInfo) at Error while parsing stackframe: UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress)(0)

It failed creating a galaxy as it name out of names for star systems, 

Now to fix this you can go to the file Public/GalaxyGenerator/WeighTableDefinitions.XML

Go to <GalaxyGeneratorWeightTable Name="StarSystemNames"> and First remove the <!-- at <Entry Tag="%StarName252"          Weight="1"/>

and the --> after %StarName300

If you want to add even more Weight Table Extension 301-500 

Also while your in this file you can change %StarName100 -> %StarName200 (The one between %StarName199 and %StarName201)


Next up you will want to add star names Go to Public/Localization/English/ES2_Localization_Assets_Locales.XML and add Lots of Super Plain System Names 

after <LocalizationPair Name="%StarName251">Trappist-1</LocalizationPair>


And It should work.

I am currently getting actual system names and making a mod for it so you don't get a system called System242 ect. in-game

Updated 7 years ago.
0Send private message
7 years ago
May 30, 2017, 4:46:51 AM

Is there a list anywhere of what cannot be modded in the game?


I was attempting to to make some modifications (additions) to the new game interface, however while the modification does load (ie; ES2 doesn't crash when loading it), it causes an inability to actually choose any AI factions (it just populates the boxes with "Selected Faction" and the names as "Name of the competitor", however it also does not actually implement my attempted additions.


I've tried both with a custom named GuiElements[].xml file with nothing but the 'new' settings, as well as overriding GuiElements[GameSettings] by name directly by duplicating the entire file w/ my additions.


Trying to figure out if this is a bug or simply a limitation.

0Send private message
7 years ago
May 30, 2017, 10:30:17 AM

Someone else had something similar In This Thread You can up it to 180 nodes and have dense galaxies without it working most of the time. but sometimes (depending on the seed) something goes over its limit maybe nodes, star-lanes  or planets I'm not sure.


If its a hard-coded number in the assembly it can be edited to a different number with reflexil. Its just a matter of finding it

Updated 7 years ago.
0Send private message
7 years ago
May 30, 2017, 10:23:20 AM

Nevermind, it appears they may have hardcoded limits to the galaxygenerator preventing implementation of larger galaxies, even slightly larger settings over their largest results in the generator to completely halt during new game initiation, with nothing being logged in the debug files at all, even trying to implement the changes directly into the Public XML files (which is how I did it during the alpha) doesn't work :/


Welp pretty much just lost my entire reason I was playing this game during the alpha lol, lame, guess back to star ruler :(

0Send private message
7 years ago
May 30, 2017, 10:14:40 AM
Painter448 wrote:

I've have file validation checks pass even when I have deleted files or editing them so reinstalling is the only way to be sure that nothing is wrong with your files




Edit: Mods don't disable correctly it's a bug in the modding system, Its best to just restart the game if you disable a mod


I did, it's persisting after a restart even, it's weird.  Looking at the log in the temporary folder, it looks as if it's trying to load the mods at launch, but not load them.  It's throwing a bunch of errors related to mod as if it sees them but doesn't, they go away once I load the mods.

0Send private message
7 years ago
May 30, 2017, 10:03:24 AM

I've have file validation checks pass even when I have deleted files or editing them so reinstalling is the only way to be sure that nothing is wrong with your files




Edit: Mods don't disable correctly it's a bug in the modding system, Its best to just restart the game if you disable a mod

Updated 7 years ago.
0Send private message
7 years ago
May 30, 2017, 10:02:10 AM

Okay apparently it's the "Rich Colours" mod, it's some how... perma-modifying my GUI?  When I enable it, I can choose AI opponents fine, when I disable it I get nothing but broken "Name of the competitor" options with no colour selection.  Looks like I can pseudo-fix it by

0Send private message
7 years ago
May 30, 2017, 9:57:30 AM

Hm, correction to my earlier comment, the "Name of the competitor" bug appears to be something else, it's happening even with all mods disabled, though a file validation check reveals nothing...

0Send private message
7 years ago
May 30, 2017, 9:57:19 AM

I have had a look at the assembly-CSharp.dll and this is all hard-coded, the parameters are all referred to directly in the code. Its hard to edit this and impossible to make into a workshop mod (unless the modding system changes dramatically)


Here is some of the code if your interested: (Curiosity Abundance)

protected void DistributeLoot()
{
WeightedTableRandomSelector selector = new WeightedTableRandomSelector(this.Data.WeightTables["CuriosityLootTable"], base.Context.Random);
int num = (int) (this.Data.GetParameterValue<float>("LootQuantity", 0f) * this.Data.GetParameterValue<float>("GalaxyCuriosityAbundance", 0f));
while (num > 0)
{
num--;
WeightedTableRandomSelector selector2 = new WeightedTableRandomSelector(this.Data.WeightTables[selector.GetRandomSelected().Tag], base.Context.Random);
string tag = selector2.GetRandomSelected().Tag;
List<Orbit> source = this.FindEligiblePlanets(tag, string.Empty);
if (source.Count > 0)
{
this.MakeLootFromSlot(this.CreateSlotOnPlanet(Enumerable.ElementAt<Orbit>(source, base.Context.Random.Next(source.Count))), tag);
}
}
}

And (Minor Faction Quantity)

static GameManager()
{
DumpingCoolingOffPeriod = 0;
galaxyGeneratorPrefabMapping = "Gameplay/Galaxy/Generator/GeneratorPrefabMapping";
mumberOfMinorEmpiresSettingName = "MinorFactionsCount";
mumberOfMinorEmpiresMultiplierSettingName = "MinorFactionsMultiplier";
}


private void ConfigureGalaxyGenerator(ConfigurationManager configurationManager)
{
IDatabase<GameSettingDefinition> database = Databases.GetDatabase<GameSettingDefinition>(false);
int result = 0;
float num2 = 1f;
if (database != null)
{
IGameSettingService service = Services.GetService<IGameSettingService>();
foreach (GameSettingDefinition definition in database.GetValues())
{
string settingValue = service.GetSettingValue(definition, true);
GameSettingDefinition.ItemDefinition itemDefinitionByName = definition.GetItemDefinitionByName(settingValue);
if (itemDefinitionByName != null)
{
configurationManager.AddConfigurationParameter(new ConfigurationParameter((string) definition.Name, itemDefinitionByName.GetValueAsObject(definition.DataType)));
if (itemDefinitionByName.KeyValuePairs != null)
{
for (int n = 0; n < itemDefinitionByName.KeyValuePairs.Length; n++)
{
if (mumberOfMinorEmpiresSettingName == itemDefinitionByName.KeyValuePairs[n].Key)
{
int.TryParse(itemDefinitionByName.KeyValuePairs[n].Value, out result);
}
if (mumberOfMinorEmpiresMultiplierSettingName == itemDefinitionByName.KeyValuePairs[n].Key)
{
float.TryParse(itemDefinitionByName.KeyValuePairs[n].Value, out num2);
}
configurationManager.AddConfigurationParameter(new ConfigurationParameter(itemDefinitionByName.KeyValuePairs[n].Key, itemDefinitionByName.KeyValuePairs[n].Value));
}
}
}
}
}
IDatabase<GalaxyGeneratorWeightTableDefinition> database2 = Databases.GetDatabase<GalaxyGeneratorWeightTableDefinition>(false);
if (database2 != null)
{
GalaxyGeneratorWeightTableDefinition[] definitionArray2 = database2.GetValues();
for (int num5 = 0; num5 < definitionArray2.Length; num5++)
{
configurationManager.AddConfigurationWeightTable(definitionArray2[num5]);
}
}
ISessionService service2 = Services.GetService<ISessionService>();
ILobbySlotProvider session = service2.Session as ILobbySlotProvider;
bool lobbyData = service2.Session.GetLobbyData<bool>("uniquerandom", false);
int count = session.Count;
int num7 = 0;
Dictionary<StaticString, int> factionsInGame = new Dictionary<StaticString, int>();
IDatabase<MajorFaction> database3 = Databases.GetDatabase<MajorFaction>(false);
for (int i = 0; i < count; i++)
{
string factionName = (string) session[i].FactionName;
MajorFaction faction = database3.GetValue(factionName);
if (!faction.HasToBeRandomized)
{
if (factionsInGame.ContainsKey(faction.Name))
{
Dictionary<StaticString, int> dictionary2;
StaticString str3;
(dictionary2 = factionsInGame)[str3 = faction.Name] = dictionary2[str3] + 1;
}
else
{
factionsInGame[faction.Name] = 1;
}
}
}
for (int j = 0; j < count; j++)
{
string key = (string) session[j].FactionName;
MajorFaction faction2 = database3.GetValue(key);
if (faction2.HasToBeRandomized)
{
faction2 = this.RandomizeFaction(faction2, lobbyData, ref factionsInGame);
}
FactionData data = null;
if (faction2.IsCustom || !configurationManager.Data.Factions.TryGetValue((string) faction2.Name, out data))
{
data = this.CreateGeneratorFaction(faction2);
configurationManager.AddFactionData(data);
}
EmpireData empire = new EmpireData();
empire.Id = num7++;
empire.FactionName = data.Name;
empire.Faction = data;
configurationManager.AddEmpireData(empire);
}
MinorFaction[] values = Databases.GetDatabase<MinorFaction>(false).GetValues();
for (int k = 0; k < values.Length; k++)
{
FactionData data3 = this.CreateGeneratorFaction(values[k]);
configurationManager.AddFactionData(data3);
}
int num11 = Mathf.RoundToInt((count + result) * num2);
for (int m = 0; m < num11; m++)
{
EmpireData data4 = new EmpireData();
data4.Id = num7++;
configurationManager.AddEmpireData(data4);
}
configurationManager.SetUniqueRandom(lobbyData);
}


0Send private message
7 years ago
May 30, 2017, 9:11:47 AM

I'm attempting to workshop-ify my old larger-galaxies mod.  I had it out during the alpha days, implemented notably larger galaxies than the base game.  The data type for the general UI seems to be there, though there don't seem to be any data types for Settings unfortunately, so I don't know if that's related or not (though the game does seem to accept the `GameSettingDefinition, Assembly-CSharp` data type despite not being listed)

0Send private message
7 years ago
May 30, 2017, 7:53:30 AM

Generally as long as the data types used are found in datatypes.txt its modabble. 

Have you looked at the diagnosis file (found in %doucments%/Endless Space 2/Temporary Files) is case its is getting warnings / errors just not crash worthy ones.

What are you trying to do with this modification ? Resize parts of the interface ? Add new selection boxes ?

I have not tried editing that new game screen myself but if its defined in the xml then it should be moddable and this is just a bug.

I've had something similar once with a mod I was making as I forgot it was XML and used a & (ampersands tend to break Xml files)

0Send private message
?

Click here to login

Reply
Comment