Jump to content

[1.8-1.11] Advanced Jet Engine v2.17.0 (June 26)


blowfish

Recommended Posts

This is the new thread.  The original thread can be found here.

Advanced Jet Engine

aje.svg CKAN-Indexed-brightgreen.svg

About

Advanced Jet Engine gives jets, propellers, and rotors realistic performance in KSP.  NathanKell's valiant efforts have made stock performance much more reasonable in recent versions of KSP, but it's still a very long way from realistic.  AJE calculates performance for air-breathing engines based on real thermodynamics.

Features

  • Real-world jet engines AJE uses thermodynamic equations to calculate jet engine performance in flight.
  • Real throttle Throttle is linked to fuel consumption instead of thrust. Afterburners, if installed on the engine, is turned on when throttle > 66% and off when throttle <= 66%
  • Overheat. Like in real world, not all engines can tolerate the heat from air compression of hypersonic flight. This is affected by both mach number and throttle
  • Inlet. Each engine requires a minimum inlet area (see right click menu in editor). Make sure you have enough inlet till you see "Inlet Area:100%" in flight. Each inlet has a TPR(total recovery pressure) that is dependent on Mach number and angle of attack. Avoid TPR loss by facing the inlet to the freestream.

Download

Download Latest Version from Github

Also available on CKAN

Troubleshooting

If you are experiencing an issue, please read this topic, if you have not already, on how to get proper support. Incomplete support requests will not be processed. Most importantly, include logs.

Source

On Github

Requirements

Each release of AJE is intended to be run with a particular version of KSP. Please only use that version. If you have an earlier version of KSP

AJE requires these mods to work. It will not function if they are missing or not installed properly.

AJE does not explicitly depend on Ferram Aerospace Research but has not been tested without it, and you will probably think that your engines are very underpowered in stock aero.

Recommendations

  • Ferram Aerospace Research, as above. AJE might work without it, but it's not tested and you will probably not have much fun
  • Real Fuels - if you're going to have realistic jet engines, why not use them with real world fuels?

Mod Support

AJE has configs to work with the following mods' engines:

AJE has configs for these mods, but the configs may not be up to date:

AJE has configs for these mods, but the mods themselves haven't been updated in a while:

Changelog

Spoiler

v2.17.0

  • Add support for centrifugal-flow compressor jet engines. These perform considerably worse than axial-flow jets approaching transonic and only slightly recover supersonic.
  • Reenable transonic and supersonic drag on propellers since FAR properly ignores the rotor disc and therefore does not itself provide wave drag.
  • Piston engines need 0.2kg/m^3 or higher air density to work. No more space props.
  • Fixes to exhaust gas temp calcs on piston engines.
  • Fix engine max temp if undefined to be 1800K not 3600K (!).

v2.16.0

  • Fix prop engines inducing kraken strikes when quickloading an in-flight vessel
  • Fix bad scientific notation (missing 'e') in DB-605-A and V-1650-7 configs
  • Remove FARBasicDragModel module from TwinWasp-R1830-94 and TwinWasp1830-86 configs

v2.15.0

  • Recompile for KSP 1.8.1

v2.14.0

  • Recompile for KSP 1.7.3

v2.13.0

  • Recompile and release for 1.6.1

v2.12.1

  • Bump SolverEngines dependency version to get around issue with KSP dependency version checking

v2.12.0

  • Recompile against KSP 1.5.1
  • Fix Chinese localization not showing up
  • Tweak Chinese translations
  • Various rotor tweaks

v2.11.4

  • Recompile against KSP 1.4.3
  • Reduce default idle exit pressure in order to reduce idle thrust

v2.11.3

  • Recompile against KSP 1.4.2

v2.11.2

  • tail rotors and physics improvement

v2.11.1

  • Rotary wing aerodynamics
    • Stability augmentation system via user-defined PID controller
    • supports complicated configs like tandem-rotors and tilt-rotors
    • easy to fly, build and make cfg
    • use joystick or mouse , keyboard could be hard

v2.11.0

  • Recompile for KSP 1.4.1
  • Fix spelling of pitot tube
  • Add missing SXT inlet

v2.10.0

  • Recompile for KSP 1.3.1
  • Add initial Chinese localization support
  • Fix paths for some Firespitter models
  • Add intake support for Aviation Cockpits

v2.9.0

  • Recompile for KSP 1.3

v2.8.0

  • Fix intakes that had IntakeAir removed, also remove it from some parts that no longer have intakes
  • Throttle now responds much faster, closer to reality
  • Afterburner throttle now responds much faster than core
  • Display core and afterburner throttles separately for afterburning engines
  • SABRE-like engines no longer distinguish between afterburner and core
  • New ramjet module, should be much better than the old one
  • RAPIER now has slightly improved efficiency

v2.7.3

  • Recompiled against KSP 1.2.3 with SolverEngines 3.0

v2.7.2

  • Recompiled against KSP 1.1.3 with SolverEngines 2.2

2.7.1

  • Recompiled against KSP 1.1.2 with SolverEngines 2.1

2.7

  • Updated for KSP 1.1 and SolverEngines 2.0
  • Fix some effects on B9 engines
  • Reduce default idle nozzle pressure ratio from 1.25 to 1.1 for jets, make it configurable through the field idleNPR
  • Rotors now respect thrust limiter
  • Add throttleResponseMultiplier field to jets, not modified by default anywhere
  • Fix some effects being active unexpectedly when the flight scene first loads

2.6.1

  • Fixes #53 - black screen due to NaN being input into reaction wheel module for rotors.

2.6

  • SolverEngines 1.15
  • Fix node orientation on Merlins
  • Fix CF34 mass
  • Fix negative thrust bug finally: idle throttle set to give tailpipe pressure greater than ambient
    • Fan/compressor work now determined by proportional work rather than proportional pressure ratio
  • Fix duplicate solar panel issue with VSR
  • Remove RF fuel patches for multimode engines - those belong in other mods
  • Mass flow through jets now calculated based on choked turbine (reference: this book)
    • Reduces supersonic thrust growth a lot
  • Overhaul jet animations - should be much more consistent now
  • Minor adjustments to B9 config

2.5.4

  • Fix issue where Ramjet would have no model

2.5.3

  • Update Baha inlets with new cockpit
  • Update for SolverEngines engine fitting changes
  • Updates for Ven's Stock Revamp
  • Updates for B9 5.4.0
  • Update SolverEngines to 1.14

2.5.2

  • Update metadata

2.5.1

  • Finish removing Kerosene and AvGas configs from jets and props. Now the only engines whose fuels are set are the SABREs and MkIVs, but they too will eventually get shifted over to an engine pack (RO, or RF Stockalike).
  • Update emissive patching to work in 1.0.5.
  • Change how stock clones' models are assigned: if Ven's Stock Revamp is installed, use VSR"s turboramjet model for some jets for variety. Even if VSR is installed, however, keep using the Squad 1.0.5 models for the J58 (TRJ) and CF34 (Wheesley).
  • Update to SolverEngines v1.13.
  • Ensure jets lose throttle when shut down.

2.5

  • KSP 1.0.5 compatibility
  • Update SolverEngines to 1.12
  • Add new Squad parts from 1.0.5
    • Correct existing parts for these changes, e.g. J85 is now Juno, Wheezley is now CF34, TRJ clones are now Panther clones, intake adjustments
  • Add underwater flameout condition to all engines
  • Adjust out-of-fuel logic for propellers
  • Separate out afterburner FX
    • spool effect now depends only on core throttle, power only on afterburner
    • More compatible with new stock separation of dry and wet engine modes
    • add spoolEffectName2 and powerEffectName2 with identical behavior to allow for multiple effects without SmokeScreen
    • Non-Squad engines have not had this updated yet. Effects may look wrong
  • New custom modules to handle heat and nozzle animations on jets
    • Thresholds may need tweaking
    • Not updated for non-Squad engines
    • Negative thrust bug causes weirdness on some engines, e.g. J58
  • Add J75 per Svm420's request
  • Make all part creation in squad config FOR[aaa_AJE]
    • Still needs to be done for others, namely B9

2.4.1

  • Update Solver Engines to v1.11.
  • Update how jet engines create heat for KSP thermo (they will no longer be furnaces).
  • Fix DB 605 description.

2.4.0

  • Propellers now produce correct amount of thrust, thanks ferram4
  • Fix Meredith effect, exhaust thrust, not applying cooler efficiency or cooler min, calcing boost pressures for MAP, magneto perma-off-prop bug (ferram4)
  • Adjust Stock Revamp MM syntax
  • Fix F404 Wet Thrust
  • Add DB-605A
  • Convert J57, J79, Atar, Avon to clones of stock TRJ instead of B9 turbojet - will be moved to clones of Panther in KSP 1.1
  • Update SolverEngines to 1.10
    • Fixes propellers being unable to start after flameout
    • Adds temperature-based auto-restart on flameout: jets and non-electric props will only auto-restart if the internal temperature is above a certain threshold

2.3.0

  • Engine fitting enabled on all jet engines
    • Engine-parameters are auto-tuned to give correct thrust and sfc
    • Fitting is re-done when config changes are detected or plugins change
  • Jet engine core rewritten with new thermodynamics
  • Jet engine nozzles reworked somewhat
    • Added adjustableNozzle field to prevent subsonic jets from creating supersonic exhaust. It doesn't enable a true fixed area nozzle, but results are better - no massive thrust growth on airliner engines
    • Supersonic jets no longer get choked nozzle pressure bonus.
    • Various corrections to nozzle thermodynamics
  • Add areaFudgeFactor field to jets in order to match intake and engine area in sensible way. Defaults to 0.75
  • Correct afterburner effects on many engines so that they engage when they should
  • Add rescaled pylons for rescaled B9 podded jets
  • Support/remove intakes on stock engine bodies
  • Insufficient intake area now cuts intake pressure rather than thrust - will efficiency as well
  • Only create rescaled engines if ProceduralParts is present. A few tweaked to stock scales in absence of PP
  • Use turbojet model for F100 and F404 if VenStockRevamp is present - it's a more correct model
  • Mod support updates for MarkIV System, BahamutoDynamics, and QuizTechAero
  • Engines auto-restart after flameout once fuel is available again.
  • Various engine parameter tweaks
  • Various wildcard fixes

2.2.1

  • Finished updating jet configs to new module (ModuleEnginesAJEJet)
  • Finished updating inlet configs to read TPR curves from templates
  • Adjust TPR curves to be smoother (previously tangents were zero everywhere - see #26 which this fixes)
  • Update SolverEngines to 1.4
  • Recompile for KSP 1.0.4 and SolverEngines 1.4

v2.2.0

  • Stable release for KSP 1.0.2. Requires SolverEngines (included) due to massive refactor.

2.1alpha1

  • jets should work fine, propellers untested

2.0.4

  • Recompiled with latest FAR version
  • Fix: sound effect sometimes not responding to throttle
  • Fix: B9 SABRE M max thrust 
  • Mod support: QuizTechAero, MarkIVSystem
  • Misc compatibility fix

2.0.3

  • Avoid quick overheating when DRE is installed
  • Minor change in ram drag calculation
  • Avoid the issue where piston engines cannot start at 0 throttle

2.0.2

  • Recompiled for FAR 0.14.6
  • Remove minimum throttle
  • Avoid engine flaming out on the runway
  • Part title cleanup

2.0.1

  • bug fix

2.0

  • jet code overhaul

License

AJE is licensed under the GNU Lesser General Public License Version 2.0

AJE incorporates portions of NASA EngineSim; used according to NASA's license thereof with due credit. AJE incorporates portions of JSBSim by Jon S. Berndt, used in accordance with the LGPLv2

Authors

And all others who have submitted fixes and enhancements

Edited by blowfish
Link to comment
Share on other sites

How do I get real fuels to change the engines to Saber to Liquid Ox + Liquid Hydrogen I tired to get the configs from the Real Fuels page but it leads to a thread which had been taken down?

It's still using Liquid Fuel + Oxidiser, trying to make a Skylon-alike but not having light weight fuel with efficient engines makes it kind of... Impossible... I know I also need another rocket to do all the final burn and I will need to go hunting for that if all else fails I'll just mod an existing engine with any kind of values I can find with the proposed ISP / TWR values of the maneuvering rocket.

But just modding an existing air breathing engine is a little more tricky so I would like to avoid having to do it by my self if possible.

Oh this is with Real scale solar system as why I can't just slap something together quickly from stock parts.

Edited by etheoma
Link to comment
Share on other sites

@etheoma AJE doesn't touch the fuel configs (anymore). If you just google Real Fuels (or follow the link in the OP) it will take you to the right post, but you also need engine configs either from RO or RF Stockalike. Not sure which you're looking for, the Realism Overhaul link in the RF thread does seem to take you to an old thread, however if you follow the links through (or just google Realism Overhaul) and you will get there.

Link to comment
Share on other sites

Thanks for maintaining this mod guys.

AJE/FS.cfg tries to edit @MODULE[ModuleEngines*] in Firespitter parts, but the Firespitter engine module is FSengine so the replacement obviously doesn't occur.

Shouldn't @MODULE[ModuleEngines*] be replaced with @MODULE[FSengine] in the FS.cfg?

 

Link to comment
Share on other sites

11 minutes ago, OminousPenguin said:

Thanks for maintaining this mod guys.

AJE/FS.cfg tries to edit @MODULE[ModuleEngines*] in Firespitter parts, but the Firespitter engine module is FSengine so the replacement obviously doesn't occur.

Shouldn't @MODULE[ModuleEngines*] be replaced with @MODULE[FSengine] in the FS.cfg?

 

AJE doesn't really properly support FSEngine as it stands ... we'd really have to re-create the entire engine module (and that might break some other stuff). Most of the FSEngine features are stock now though, so hopefully FSEngine can be removed from Firespitter eventually and we can work from there.

Link to comment
Share on other sites

2 minutes ago, blowfish said:

AJE doesn't really properly support FSEngine as it stands ... we'd really have to re-create the entire engine module (and that might break some other stuff). Most of the FSEngine features are stock now though, so hopefully FSEngine can be removed from Firespitter eventually and we can work from there.

I see.

Is the recommendation to just use AJE and not Firespitter or KAX?

With Firespitter, KAX and AJE I have so many engines and AJE gives many of them the same name but the FS ones behave differently - It's all a bit of a mess.

For any given use case I would love to be able to compare the stats of the engines and make a decision about which is most appropriate. Currently I need a bit of trial and error in sandbox to find a suitable engine.

Link to comment
Share on other sites

Just now, OminousPenguin said:

I see.

Is the recommendation to just use AJE and not Firespitter or KAX?

With Firespitter, KAX and AJE I have so many engines and AJE gives many of them the same name but the FS ones behave differently - It's all a bit of a mess.

For any given use case I would love to be able to compare the stats of the engines and make a decision about which is most appropriate. Currently I need a bit of trial and error in sandbox to find a suitable engine.

I was under the impression that KAX didn't use FSEngine. I've used KAX with AJE in the past and it's been fine.

Link to comment
Share on other sites

Possibly odd question, but I had the crazy idea to create a matlab script to optimize ascent profiles and my current installation is running AJE and FAR, I was just wondering if anyone could clarify the actual equations used to model thrust and isp and what they were functions of for this mod.

Link to comment
Share on other sites

19 minutes ago, jab136 said:

Possibly odd question, but I had the crazy idea to create a matlab script to optimize ascent profiles and my current installation is running AJE and FAR, I was just wondering if anyone could clarify the actual equations used to model thrust and isp and what they were functions of for this mod.

I think the math might be a bit more complicated than you think ... basically this entire file is the stuff required to fit jet performance, and that's ignoring the intake stuff and also hides a bunch of thermodyamic equations in SolverEngines.  I can walk you through it if you want, but before you try something like this you should know that it's quite complicated.

Link to comment
Share on other sites

1 hour ago, blowfish said:

I think the math might be a bit more complicated than you think ... basically this entire file is the stuff required to fit jet performance, and that's ignoring the intake stuff and also hides a bunch of thermodyamic equations in SolverEngines.  I can walk you through it if you want, but before you try something like this you should know that it's quite complicated.

Thanks, complicated is fun for me (you don't study AE for 5 years and counting and not find complicated fun).  

Edit:  where can I find the code for SolverEngines?

Edited by jab136
Link to comment
Share on other sites

1 hour ago, jab136 said:

Thanks, complicated is fun for me (you don't study AE for 5 years and counting and not find complicated fun).  It would be nice to have comments though, oh well...

Well I can walk you through it, but it's more than I should reasonably post in this thread.  Send me a PM if you want to know more.

Link to comment
Share on other sites

42 minutes ago, DownHereInChile said:

Would it be possible to add support for AoA Tech and OPTparts? Or maybe a DIY tutorial :D

I know that OPT has a lot of exotic engine types that AJE isn't really designed to support.  AoA Tech maybe ... what engines does it have?  If you want to try it on your own, I tried to explain all the parameters in this post:

 

Link to comment
Share on other sites

1 hour ago, blowfish said:

I know that OPT has a lot of exotic engine types that AJE isn't really designed to support.  AoA Tech maybe ... what engines does it have?

 

AoA has a Mk2 Raptor style jet engine, but, most importantly, has several command pods with integrated air intakes that would require an "Inlets" CFG.

Will definitely check out if I can pull it off.

P.S: Nevermind about OPT :wink:

Link to comment
Share on other sites

Also are the pre-coolers not supposed to do anything, Because I'm getting to around 1.7kms with or without the pre-coolers should I assume they have been rolled into the Sabre and Rapier?

If not this explains why I'm not getting anywhere near orbital speeds even though I have a metric butt ton of fuel like seriously every part of the craft is carrying fuel and I'm still 4.5 km/ps short it's not something you can really work around I was just going to edit the parts to make them bigger and carry more fuel.

Edited by etheoma
Link to comment
Share on other sites

4 minutes ago, etheoma said:

Also are the pre-coolers not supposed to do anything, Because I'm getting to around 1.7kms with or without the pre-coolers should I assume they have been rolled into the Sabre and Rapier?

If not this explains why I'm not getting anywhere near orbital speeds even though I have a metric butt ton of fuel like seriously every part of the craft is carrying fuel and I'm still 4.5 km/ps short it's not something you can really work around I was just going to edit the parts to make them bigger and carry more fuel.

The precoolers don't actually do anything.  The best we could really do is just make them required for the engines to work, but that's not particularly interesting from a gameplay perspective.

1.7 km/s sounds about right ... they should take you to about Mach 5.5 before they seriously overheat (even precooled engines have their limits).

What happens in rocket mode after that is outside of AJE's domain.  However, it's been called that my attention that that SABRE's specific impulse in jet mode is probably too low.  Will look at fixing that at some point.

Link to comment
Share on other sites

26 minutes ago, blowfish said:

The precoolers don't actually do anything.  The best we could really do is just make them required for the engines to work, but that's not particularly interesting from a gameplay perspective.

1.7 km/s sounds about right ... they should take you to about Mach 5.5 before they seriously overheat (even precooled engines have their limits).

What happens in rocket mode after that is outside of AJE's domain.  However, it's been called that my attention that that SABRE's specific impulse in jet mode is probably too low.  Will look at fixing that at some point.

Would probably help a great deal just not to have to use up so much area for pure hydrogen which would leave more space for Oxygen.

And yeah I know precoolers have there limits I was simply confused that there was no difference between having them and not having them, I just ended up taking the plunge and installing Realism overhall hopefully now I can get the results I was looking for and if not well at least I have some parts that are more suited to the job of building a Skylon-alike.

I think just increasing the size of the spaceplane will help elevate most of the problem I am seeing.

Edited by etheoma
Link to comment
Share on other sites

11 hours ago, blowfish said:

The precoolers don't actually do anything.  The best we could really do is just make them required for the engines to work, but that's not particularly interesting from a gameplay perspective.

KSP 1.1.2. bringed some interesting stuff related to (over)heating. While it is not their primary purpose, those parts can be but in front of aircraft , exposed to airstream to be significant part that should take all heating or next to engines. Their heating tolerance should be better than other parts and they could serve same purpose as radiators(already part of stock game) , but you don't need to actualy extend them.

Having already significant mass, their consequence of usage already give penalty to dV if you use them.

I didn't played KSP for a while, need to do some more testing, but IIRC, having part of large mass next to heating source already helps to reduce heat of craft as whole.

Link to comment
Share on other sites

  • 2 weeks later...

or you could set up a small script that ether instantly over heats any air breathing engine over mach 3.5, or make it so any engine over that speed is seriously deprived of air (crap TPR) with out a precooler, the first one would be more realistic. an other option would be to make the pre cooler run off oxy and give any engine attached to it, ether a 20-50% max speed before over heat increase, or just make it able to go mach 5 before heating. (i say make it use oxy for balance reasons, the real proposed precoolers on the skylon use its liquid hydrogen to cool the air, sense there is no difference between rocket fuel and jet fuel in stock oxy seemed more logical to use.)

Link to comment
Share on other sites

10 hours ago, Tidus Klein said:

or you could set up a small script that ether instantly over heats any air breathing engine over mach 3.5, or make it so any engine over that speed is seriously deprived of air (crap TPR) with out a precooler, the first one would be more realistic. an other option would be to make the pre cooler run off oxy and give any engine attached to it, ether a 20-50% max speed before over heat increase, or just make it able to go mach 5 before heating. (i say make it use oxy for balance reasons, the real proposed precoolers on the skylon use its liquid hydrogen to cool the air, sense there is no difference between rocket fuel and jet fuel in stock oxy seemed more logical to use.)

I managed to create working precoolers to some degree. Described everything in B9 thread. Didn't have too much time to elvolve whole thing further. Trough testing, I found that additional air that compressor add to engine have very small effect to gameplay. Stock engine precooler have two additional properties that missing in B9 SABRE precooler config file:

Quote

thermalMassModifier = 5 // 1.5 is value used in stock pre-cooler
skinMassPerArea = 2 // value taken from stock pre-cooler, not defined for radiator

That might or might not have influence to cool down engines without using "active radiator" effect. I have very low info about meaning on each property and what each number represent.

Anyhow, whole idea need a lot of tweaking/testing before adding into game, but feel free to try it for yourself.

Link to comment
Share on other sites

  • 4 weeks later...

so, it seems like the S.A.B.R.E. from B9 aerospace is not properly configured with realism overhaul. Any idea on how to reach some better performance? I hardly struggle to maintain a 500kN thrust per engine whereas wikipedia states "1960kN SL" so in air breathing mode. It's possible to lift off the Skylon with only 0.28 TWR (what I have with a 500kN SABRE) but it' alsmot impossible to go past mach 1.5. Any ideas?

Link to comment
Share on other sites

6 minutes ago, Zarbizaure said:

so, it seems like the S.A.B.R.E. from B9 aerospace is not properly configured with realism overhaul. Any idea on how to reach some better performance? I hardly struggle to maintain a 500kN thrust per engine whereas wikipedia states "1960kN SL" so in air breathing mode. It's possible to lift off the Skylon with only 0.28 TWR (what I have with a 500kN SABRE) but it' alsmot impossible to go past mach 1.5. Any ideas?

Not really sure if RO changes it at all.  My recollection is that there's no reference for the figure that Wikipedia states, and that (somewhat inconsistent) REL sources put the sea level thrust at 600-800 kN per engine.  The TWR should also be closer to 0.6, according to their documents.

Link to comment
Share on other sites

well, itt make sense (0.6 TWR seems ok), it still make the currently configured S.A.B.R.E. undepowered... and I have absolutely no idea how AJEModuleEngines works. Could you look at this to create a realistic config? It would be really nice!

There is indeed a RO file but it's just copied/pasted from AJE: https://github.com/Zarbizaure/RealismOverhaul/blob/master/GameData/RealismOverhaul/REWORK/RO_B9.cfg

Edited by Zarbizaure
Link to comment
Share on other sites

3 minutes ago, Zarbizaure said:

well, itt make sense (0.6 TWR seems ok), it still make the currently configured S.A.B.R.E. undepowered... and I have absolutely no idea how AJEModuleEngines works. Could you look at this to create a realistic config? It would be really nice!

There is indeed a RO file but it's just copied/pasted from AJE: https://github.com/Zarbizaure/RealismOverhaul/blob/master/GameData/RealismOverhaul/REWORK/RO_B9.cfg

The reason why neither I nor anyone else has attempted to create a realistic config yet is that very little data is available, and what is available is quite inconsistent.  What should the engine mass be?  What about efficiency?  Some documents say Isp = 4000-9000s in air breathing mode, but the trajectory data spreadsheet suggests much lower.

Link to comment
Share on other sites

This thread is quite old. Please consider starting a new thread rather than reviving this one.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...