Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -------------------------------------------------------------------------------------------------------------------
- -- Setup functions for this job. Generally should not be modified.
- -------------------------------------------------------------------------------------------------------------------
- -- Initialization function for this job file.
- function get_sets()
- mote_include_version = 2
- -- Load and initialize the include file.
- include('Mote-Include.lua')
- end
- -- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
- function job_setup()
- indi_timer = ''
- indi_duration = 245
- end
- -------------------------------------------------------------------------------------------------------------------
- -- User setup functions for this job. Recommend that these be overridden in a sidecar file.
- -------------------------------------------------------------------------------------------------------------------
- -- Setup vars that are user-dependent. Can override this function in a sidecar file.
- function user_setup()
- state.OffenseMode:options('None', 'Normal','Accuracy')
- state.CastingMode:options('Normal', 'Resistant')
- state.IdleMode:options('Normal', 'PDT')
- gear.default.weaponskill_waist = "light Belt"
- gear.default.obi_waist = "yamabuki-no-obi"
- gear.default.obi_back = "seshaw Cape"
- gear.default.obi_ring = "Acumen Ring"
- --select_default_macro_book()
- -- Additional local binds ^ is for ctrl
- --! is for alt
- --@ is for windows key
- send_command('bind != input /map')
- send_command('bind ` input /ja "Full circle" <me>')
- send_command('bind !` input /ja "Lasting emanation" <me>')
- send_command('bind @` input /ja "Ecliptic attrition" <me>')
- send_command('bind ^b input /ja "Blaze of Glory" <me>')
- send_command('bind ^` input /ja "Life cycle" <me>')
- send_command('bind ^e input /ja "Entrust" <me>')
- send_command('bind ^d input /ja "Dematerialize" <me>')
- send_command('bind ^a input /ja "Radial arcana" <me>')
- send_command('bind ^c input /ja "Concentric pulse" <me>')
- send_command('bind !a input /ma "Dia II" <t>')
- send_command('bind !f input /ma "Frazzle" <t>')
- send_command('bind !v input /ma "Cure IV" <stpt>')
- send_command('bind ^o input /ma "Aspir III" <t>')
- send_command('bind ^u input /ma "Dispel" <t>')
- send_command('bind !g input /ma Gravity <t>')
- end
- -- Called when this job file is unloaded (eg: job change)
- function user_unload()
- send_command('unbind `')
- send_command('unbind !`')
- send_command('unbind @`')
- send_command('unbind ^b')
- send_command('unbind ^`')
- send_command('unbind ^e')
- send_command('unbind ^d')
- send_command('unbind ^a')
- send_command('unbind ^c')
- send_command('unbind !a')
- send_command('unbind !f')
- send_command('unbind !v')
- send_command('unbind ^o')
- send_command('unbind ^u')
- send_command('unbind !g')
- end
- -- Define sets and vars used by this job file.
- function init_gear_sets()
- --------------------------------------
- -- Precast sets
- --------------------------------------
- -- Precast sets to enhance JAs
- sets.precast.JA.Bolster = {body="Bagua Tunic"}
- sets.precast.JA['Life cycle'] = {body="Geomancy Tunic",back="Nantosuelta's cape"}
- sets.precast.JA['Curative Recantation'] = {hands="Bagua Mitaines"}
- sets.precast.JA['Mending Halation'] = {legs="Bagua pants +1"}
- sets.precast.JA['Radial Arcana'] = {feet="Bagua Sandals +1"}
- sets.precast.JA['Primal Zeal'] = {head="Bagua galero"}
- sets.precast.JA['Cardinal Chant'] = {head="Geomancy galero"}
- -- Fast cast sets for spells
- sets.precast.FC = {ammo="",
- head="Hyaline Hat",neck="Orunmila's torque",ear1="Etiolation earring",ear2="Loquacious Earring",
- body="Helios jacket",ring1="Prolix Ring",
- back="Lifestream Cape",waist="Channeler's stone",legs="Geomancy pants +1",feet="Amalric nails"}
- sets.precast.FC.Cure = set_combine(sets.precast.FC, {
- body="Heka's kalasiris",
- back="Pahtli Cape"})
- sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash"})
- sets.precast.FC['Enhancing Magic'].Stoneskin = set_combine(sets.precast.FC, {head="Umuthi hat",hands="Carapacho cuffs"})
- sets.precast.FC['Elemental Magic'] = set_combine(sets.precast.FC, {
- neck="Stoicheion Medal",
- hands="Bagua mitaines"})
- sets.precast.FC.Impact = set_combine(sets.precast.FC['Elemental Magic'], {head=empty,body="Twilight Cloak"})
- -- Weaponskill sets
- -- Default set for any weaponskill that isn't any more specifically defined
- sets.precast.WS = {
- head="Merlinic hood",
- neck="Fotia gorget",
- ear1="Bladeborn Earring",
- ear2="Steelflash Earring",
- body="Helios jacket",
- hands="Telchine Gloves",
- ring1="Rajas Ring",
- ring2="Leviathan Ring",
- waist="Fotia belt",
- legs="Bagua pants +1 +1",
- feet="Battlecast gaiters"}
- -- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
- sets.precast.WS['Hexa Strike'] = {
- range="Dunna",
- head="Befouled crown",
- body="Helios jacket",
- hands="Telchine gloves",
- legs="Merlinic shalwar",
- feet="Bagua Sandals +1",
- neck="Fotia Gorget",
- waist="Fotia Belt",
- left_ear="Tati earring",
- right_ear="Tati earring",
- left_ring="Levia. Ring",
- right_ring="Levia. Ring",
- back="Pahtli Cape",
- }
- sets.precast.WS['Realmrazer'] = sets.precast.WS['Hexa Strike']
- sets.precast.WS['Flash Nova'] = sets.precast.WS['Hexa Strike']
- sets.precast.WS['Black Halo'] = sets.precast.WS['Hexa Strike']
- sets.precast.WS['Exudation'] = sets.precast.WS['Hexa Strike']
- sets.precast.WS['Starlight'] = {ear2=""}
- sets.precast.WS['Moonlight'] = {ear2=""}
- --------------------------------------
- -- Midcast sets
- --------------------------------------
- -- Base fast recast for spells
- sets.midcast.FastRecast = {
- main=""}
- sets.midcast.Phalanx = {
- range="Dunna",
- head="Befouled crown",
- neck="Incanter's torque",
- hands="Telchine gloves"}
- sets.midcast.Aquaveil = set_combine(sets.midcast['Enhancing Magic'], {
- waist=""})
- sets.midcast.Geomancy ={
- range="Dunna",
- head="Azimuth hood +1",
- neck="Incanter's torque",
- body="Bagua Tunic",
- hands="Geomancy Mitaines +1",
- legs="Bagua pants +1",
- feet="Azimuth gaiters",
- waist="Austerity Belt",
- left_ear="Calamitous Earring",
- right_ear="Gifted Earring",
- back="Lifestream Cape"}
- sets.midcast.Geomancy.Indi =set_combine(sets.midcast.Geomancy, {
- back="Nantosuelta's cape",legs="Bagua pants +1",feet="Azimuth gaiters"})
- sets.midcast.Cure = {main="Serenity",
- head="Vanya hood",neck="Incanter's torque",
- body="Helios Jacket",hands="Telchine Gloves",ring1="Asklepian ring",ring2="Kunaji Ring",
- back="Pahtli Cape",waist="Hachirin-no-obi",legs="Gyve trousers",feet="Arbatel loafers +1"}
- sets.midcast.Stoneskin = set_combine(sets.midcast['Enhancing Magic'], {neck="Stone gorget",
- hands="Carapacho cuffs",
- waist="Siegel Sash",legs="Haven hose"})
- sets.midcast.Curaga = sets.midcast.Cure
- sets.midcast.Protectra = {ring1="Sheltered Ring"}
- sets.midcast.Shellra = {ring1="Sheltered Ring"}
- -- Custom Spell Classes
- sets.midcast['Enfeebling Magic'] = {
- main="Serenity",
- sub="Niobid strap",
- range="Dunna",
- head="Merlinic hood",
- body="Amalric doublet",
- hands="Amalric gages",
- legs="Merlinic shalwar",
- feet="Bagua sandals",
- neck="Sanctity necklace",
- waist="Eschan stone",
- left_ring="Mediator's ring",
- right_ring="Angha ring",
- back="Lifestream Cape",}
- sets.midcast.IntEnfeebles = {main="Serenity",sub="Niobid strap",ammo="Hydrocera",
- head="Merlinic hood",neck="Sanctity necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
- body="Amalric doublet",hands="Amalric gages",ring1="Mediator's ring",ring2="Angha Ring",
- back="Lifestream cape",waist="Eschan stone",legs="Merlinic shalwar",feet="Amalric nails"}
- sets.midcast.ElementalEnfeeble = sets.midcast['Enfeebling Magic']
- sets.midcast['Dark Magic'] = {main="Serenity",sub="Niobid strap",ammo="Hydrocera",
- head="Merlinic hood",neck="Mizu. Kubikazari",ear1="Psystorm Earring",ear2="Lifestorm Earring",
- body="Amalric doublet",hands="Hagondes cuffs +1",ring1="Mediator's ring",ring2="Angha Ring",
- waist="Eschan stone",legs="Merlinic shalwar"}
- sets.midcast.Drain = {main="Serenity",sub="Niobid strap",ammo="Hydrocera",
- head="Merlinic hood",neck="Mizukage-no-kubikazara",ear1="Psystorm Earring",ear2="Lifestorm Earring",
- body="Amalric doublet",hands="Amalric gages",ring1="Mujin band",ring2="Locus Ring",
- back="Seshaw cape",waist="Eschan stone",legs="Merlinic shalwar"}
- sets.midcast.Aspir = sets.midcast.Drain
- --{ name="", augments={'','','',}}
- sets.midcast.Stun = {
- main="Nodal Wand",
- sub={ name="Genbu's Shield", augments={'"Cure" potency +3%','"Resist Paralyze"+6','"Cure" spellcasting time -5%',}},
- range="Dunna",
- head="Merlinic hood",
- body="Amalric doublet",
- hands="Amalric gages",
- legs="Geo. Pants +1",
- neck="Incanter's torque",
- waist="Eschan stone",
- left_ear="Lifestorm earring",
- right_ear="Psystorm Earring",
- left_ring="Mediator's Ring",
- right_ring="Angha Ring"}
- sets.midcast.Bolster = {body="Bagua Tunic"}
- sets.midcast['Life Cycle'] = {body="Geomancy tunic",back="Nantosuelta's cape"}
- sets.midcast['Mending Halation'] = {legs="Bagua pants +1"}
- sets.midcast['Radial Arcana'] = {feet="Bagua Sandals +1"}
- sets.midcast.Bolster.Pet = {body="Bagua Tunic"}
- sets.midcast['Life Cycle'].Pet = {body="Geomancy Tunic",back="Nantosuelta's cape"}
- sets.midcast['Mending Halation'].Pet = {legs="Bagua pants +1"} sets.midcast.Bolster.Pet.Indi = {body="Bagua Tunic +1"}
- sets.midcast['Life Cycle'].Pet.Indi = {body="Geomancy Tunic",back="Nantosuelta's cape"}
- sets.midcast['Mending Halation'].Pet.Indi = {legs="Bagua pants +1"}
- -- Elemental Magic sets
- sets.midcast['Elemental Magic'] = {main="Nodal wand",sub="Culminus",ranged="Dunna",
- head="Merlinic hood",neck="Mizu. kubikazari",ear1="Barkarole Earring",ear2="Friomisi earring",
- body="Amalric doublet",hands="Amalric gages",ring1="Locus Ring",ring2="Mujin band",
- back="Seshaw cape",waist="Eschan stone",legs="Merlinic shalwar",feet="Amalric nails"}
- sets.midcast['Elemental Magic'].Resistant = set_combine(sets.midcast['Elemental Magic'], {
- head="Merlinic hood",
- body="Amalric doublet",
- legs="Merlinic shalwar"})
- sets.midcast['Elemental Magic'].HighTierNuke = {main="Nodal wand",sub="Culminus",ranged="Dunna",
- head="Merlinic hood",neck="Mizu. kubikazari",ear1="Barkarole Earring",ear2="Static earring",
- body="Amalric doublet",hands="Amalric gages",ring1="Locus Ring",ring2="Mujin band",
- back="Seshaw cape",waist="Eschan stone",legs="Merlinic shalwar",feet="Amalric nails"}
- sets.midcast.Impact = {
- sub="Niobid strap",
- range="Dunna",
- head="Merlinic hood",
- body="Twilight Cloak",
- hands="Amalric gages",
- legs="Merlinic shalwar",
- feet="Amalric nails",
- neck="Mizu. Kubikazari",
- waist="Eschan stone",
- left_ear="Barkarole Earring",
- right_ear="Friomisi Earring",
- left_ring="Acumen Ring",
- right_ring="Angha Ring",
- back="Seshaw Cape",
- }
- --------------------------------------
- -- Idle/resting/defense/etc sets
- --------------------------------------
- -- Resting sets
- sets.resting = {main="Boonwell staff",
- body="Chelona blazer",waist="Austerity belt",ring2="Angha ring",
- feet = "Chelona boots"}
- -- Idle sets
- sets.idle = {main="Bolelabunga",sub="Culminus",ranged="Dunna",
- head="Befouled crown",neck="Loricate torque",ear1="Etiolation Earring",ear2="",
- body="Amalric doublet",hands="Bagua mitaines",ring1="Locus Ring",ring2="Dark ring",
- back="Aptitude mantle",waist="Slipor sash",legs="Assiduity pants +1",feet="Herald's gaiters"}
- sets.idle.PDT = {
- main="Nodal wand",
- sub="Genbu's shield",
- range="Dunna",
- head="Hike khat +1",
- neck="Loricate torque",
- body="Hagondes coat +1",
- ring1="Dark ring",
- back="Lifestream Cape",
- legs="Assiduity pants +1",
- feet="Battlecast gaiters"}
- -- .Pet sets are for when Luopan is present.
- sets.idle.Pet = {main="Nodal Wand",sub="Culminus",range="Dunna",
- head="Azimuth hood +1",ear1="Handler's earring +1",
- body="Helios jacket",hands="Geomancy mitaines +1",
- back="Nantosuelta's Cape",waist="Isa Belt",legs="Telchine braconi",feet="Bagua Sandals +1"}
- sets.idle.PDT.Pet = set_combine(sets.idle.PDT, {sets.idle.Pet})
- -- .Indi sets are for when an Indi-spell is active.
- sets.idle.Indi = set_combine(sets.idle, {})
- sets.idle.Pet.Indi = set_combine(sets.idle.Pet, {})
- sets.idle.PDT.Indi = set_combine(sets.idle.PDT, {})
- sets.idle.PDT.Pet.Indi = set_combine(sets.idle.PDT.Pet, {})
- sets.idle.Town = {main="Nodal wand",sub="Culminus",ranged="Dunna",
- head="Befouled Crown",neck="Mizukage-no-Kubikazari",ear1="Friomis earring",ear2="Hecate's earring",
- body="Amalric doublet",hands="Bagua mitaines",ring1="Locus ring",ring2="Mujin band",
- back="Seshaw Cape",waist="Eschan stone",legs="Assiduity pants +1",feet="Herald's gaiters"}
- sets.idle.Weak = {
- main="Bolelabunga",
- sub="Genbu's Shield",
- range="Dunna",
- hands={ name="Bagua Mitaines +1", augments={'Enhances "Curative Recantation" effect',}},
- legs="Assid. Pants +1",
- feet="Geo. Sandals +1",
- neck="Sanctity necklace",
- waist="Fucho-no-Obi",
- left_ring="",
- right_ring="Paguroidea Ring"}
- -- Defense sets
- sets.defense.PDT = {
- main="Earth Staff",
- sub="Niobid strap",
- range="Dunna",
- head="Hagondes Hat +1",
- body="Hagondes Coat +1",
- hands="Geomancy mitaines +1",
- legs="Hagondes Pants +1",
- feet="Battlecast gaiters",
- neck="Loricate torque",
- right_ring="Dark Ring",
- back="Lifestream cape"}
- sets.defense.MDT = {
- main="Terra's Staff",
- sub="Wizzan Grip",
- range="Dunna",
- head="Vanya hood",
- body="Helios jacket",
- hands="Geomancy mitaines +1",
- legs="Gyve trousers",
- neck="Loricate torque",
- waist="Slipor sash",
- left_ear="Etiolation Earring",
- right_ear="Ethereal Earring",
- left_ring="Yacuruna ring",
- right_ring="Yacuruna ring",
- back="Lifestream cape",
- }
- sets.Kiting = {feet="Geo. Sandals +1"}
- sets.latent_refresh = {waist="Fucho-no-obi"}
- lowTierNukes = S{'Stone', 'Water', 'Aero', 'Fire', 'Blizzard', 'Thunder',
- 'Stone II', 'Water II', 'Aero II', 'Fire II', 'Blizzard II', 'Thunder II',
- 'Stone III', 'Water III', 'Aero III', 'Fire III', 'Blizzard III', 'Thunder III',
- 'Stonega', 'Waterga', 'Aeroga', 'Firaga', 'Blizzaga', 'Thundaga',
- 'Stonega II', 'Waterga II', 'Aeroga II', 'Firaga II', 'Blizzaga II', 'Thundaga II'}
- --------------------------------------
- -- Engaged sets
- --------------------------------------
- -- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
- -- sets if more refined versions aren't defined.
- -- If you create a set with both offense and defense modes, the offense mode should be first.
- -- EG: sets.engaged.Dagger.Accuracy.Evasion
- -- Normal melee group
- sets.engaged = {
- main="",
- sub="Genbu's Shield",
- range="Dunna",
- head="Befouled crown",
- body="Azimuth coat",
- hands="Geomancy mitaines +1",
- legs="Assiduity pants +1",
- feet="Bagua sandals +1",
- neck="Sanctity necklace",
- waist="Eschan stone",
- left_ear="Steelflash Earring",
- right_ear="Bladeborn Earring",
- left_ring="Dark ring",
- right_ring="Rajas Ring",
- back="Kayapa cape"}
- sets.engaged.Accuracy = {
- main="Nehushtan",
- sub="Culminus",
- range="Dunna",
- head={ name="Hagondes Hat +1", augments={'Phys. dmg. taken -3%','Magic dmg. taken -4%','Enmity-4',}},
- body="Ischemia Chasu.",
- hands="Espial Bracers",
- legs={ name="Hagondes Pants +1", augments={'Phys. dmg. taken -3%','Magic dmg. taken -2%','"Mag.Atk.Bns."+22',}},
- feet={ name="Hag. Sabots +1", augments={'Phys. dmg. taken -1%','"Mag.Atk.Bns."+11',}},
- neck="Iqabi Necklace",
- waist="Olseni Belt",
- left_ear="Steelflash Earring",
- right_ear="Zennaroi Earring",
- left_ring="Beeline Ring",
- right_ring="Rajas Ring",
- back="Kayapa Cape",
- }
- --------------------------------------
- -- Custom buff sets
- --------------------------------------
- end
- -------------------------------------------------------------------------------------------------------------------
- -- Job-specific hooks for standard casting events.
- -------------------------------------------------------------------------------------------------------------------
- -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
- function job_precast(spell, action, spellMap, eventArgs)
- if spellMap == 'Cure' or spellMap == 'Curaga' then
- gear.default.obi_waist = "yamabuki-no-obi"
- elseif spell.skill == 'Elemental Magic' then
- gear.default.obi_waist = "yamabuki-no-obi"
- if state.CastingMode.value == 'Proc' then
- classes.CustomClass = 'Proc'
- end
- end
- end
- function job_midcast(spell, action, spellMap, eventArgs)
- if spell.action_type == 'Magic' then
- -- Default base equipment layer of fast recast.
- equip(sets.midcast.FastRecast)
- end
- end
- -- Custom spell mapping.
- function job_get_spell_map(spell, default_spell_map)
- if spell.skill == 'Elemental Magic' and default_spell_map ~= 'ElementalEnfeeble' then
- if LowTierNukes:contains(spell.english) then
- return 'LowTierNuke'
- else
- return 'HighTierNuke'
- end
- end
- end
- -- Run after the general midcast() is done.
- function job_post_midcast(spell, action, spellMap, eventArgs)
- end
- function job_aftercast(spell, action, spellMap, eventArgs)
- if not spell.interrupted then
- if spell.english:startswith('Indi') then
- if not classes.CustomIdleGroups:contains('Indi') then
- classes.CustomIdleGroups:append('Indi')
- end
- send_command('@timers d "'..indi_timer..'"')
- indi_timer = spell.english
- send_command('@timers c "'..indi_timer..'" '..indi_duration..' down spells/00136.png')
- elseif spell.english == 'Sleep' or spell.english == 'Sleepga' then
- send_command('@timers c "'..spell.english..' ['..spell.target.name..']" 60 down spells/00220.png')
- elseif spell.english == 'Sleep II' or spell.english == 'Sleepga II' then
- send_command('@timers c "'..spell.english..' ['..spell.target.name..']" 90 down spells/00220.png')
- end
- elseif not player.indi then
- classes.CustomIdleGroups:clear()
- end
- end
- -------------------------------------------------------------------------------------------------------------------
- -- Job-specific hooks for non-casting events.
- -------------------------------------------------------------------------------------------------------------------
- -- Called when a player gains or loses a buff.
- -- buff == buff gained or lost
- -- gain == true if the buff was gained, false if it was lost.
- function job_buff_change(buff, gain)
- if player.indi and not classes.CustomIdleGroups:contains('Indi')then
- classes.CustomIdleGroups:append('Indi')
- handle_equipping_gear(player.status)
- elseif classes.CustomIdleGroups:contains('Indi') and not player.indi then
- classes.CustomIdleGroups:clear()
- handle_equipping_gear(player.status)
- end
- end
- function job_state_change(stateField, newValue, oldValue)
- if stateField == 'Offense Mode' then
- if newValue == 'Accuracy' then
- disable('main','sub','range')
- else
- enable('main','sub','range')
- end
- end
- end
- -------------------------------------------------------------------------------------------------------------------
- -- User code that supplements standard library decisions.
- -------------------------------------------------------------------------------------------------------------------
- function job_get_spell_map(spell, default_spell_map)
- if spell.action_type == 'Magic' then
- if spell.skill == 'Enfeebling Magic' then
- if spell.type == 'WhiteMagic' then
- return 'MndEnfeebles'
- else
- return 'IntEnfeebles'
- end
- elseif spell.skill == 'Geomancy' then
- if spell.english:startswith('Indi') then
- return 'Indi'
- end
- end
- end
- end
- function customize_idle_set(idleSet)
- if player.mpp < 51 then
- idleSet = set_combine(idleSet, sets.latent_refresh)
- end
- return idleSet
- end
- -- Called by the 'update' self-command.
- function job_update(cmdParams, eventArgs)
- classes.CustomIdleGroups:clear()
- if player.indi then
- classes.CustomIdleGroups:append('Indi')
- end
- end
- -- Function to display the current relevant user state when doing an update.
- function display_current_job_state(eventArgs)
- display_current_caster_state()
- eventArgs.handled = true
- end
- function open_coffer()
- CofferType = "Velkk Coffer"
- NCoffer = player.inventory[CofferType].count
- bag = windower.ffxi.get_bag_info(0).count
- max = windower.ffxi.get_bag_info(0).max
- spots = max-bag
- if spots > 0 then
- add_to_chat(204, '*-*-*-*-*-*-*-*-* [ '..NCoffer..'x '..CofferType..' to open - Inventory('..bag..'/'..max..') ] *-*-*-*-*-*-*-*-*')
- local nextcommand = ""
- for i=1, spots do
- nextcommand = nextcommand .. 'input /item "'..CofferType..'" <me>; wait 2;'
- end
- nextcommand = nextcommand .. 'input //gs c "open"'
- send_command(nextcommand)
- else
- add_to_chat(204, '*-*-*-*-*-*-*-*-* [ Inventory('..bag..'/'..max..') ] *-*-*-*-*-*-*-*-*')
- end
- end
- function self_command(command)
- if command == 'open' then
- open_coffer()
- end
- end
- -------------------------------------------------------------------------------------------------------------------
- -- Utility functions specific to this job.
- -------------------------------------------------------------------------------------------------------------------
- -- Select default macro book on initial load or subjob change.
- --function select_default_macro_book()
- -- set_macro_page(1, 1)
- --end
Add Comment
Please, Sign In to add comment