Go Back   Cockos Incorporated Forums > REAPER Forums > REAPER Q&A, Tips, Tricks and Howto

Reply
 
Thread Tools Display Modes
Old 07-05-2016, 11:15 AM   #1
Tim Rideout
Human being with feelings
 
Tim Rideout's Avatar
 
Join Date: Jan 2013
Location: Montreal, Canada
Posts: 258
Default If an item is LOCKED why the F does Reaper split it

Hi all,

Here's an annoyance: I am doing episodic TV and sometimes I want to SPLIT all my midi tracks in an arrangement. Normally I would select ALL - but have the Video and dialogue tracks LOCKED so they are unffected.

But when I do this, Reaper splits them ANYWAY. grr

I can't lock the track, because I need access to the mute controls. I can't use the track mixer for this, too much real estate taken up.

What am I not getting?
__________________
---
www.TimRideout.com
Tim Rideout is offline   Reply With Quote
Old 07-05-2016, 12:42 PM   #2
typhonj
Human being with feelings
 
Join Date: Jan 2015
Location: Québec, QC, Canada
Posts: 349
Default

Hi

All you have to do is;
Create an empty track and put the two tracks (video and dialogue) as child of this newly created track then go to main menu 'View' -> 'Track Manager' and un-thick the two tracks from the TCP, this way, they'll be hidden but the Mute button and other controls on the Parent track will still be available.
Of course, doing so will not affect the video and will still be visible from de video window thus even if it's audio is muted.
typhonj is offline   Reply With Quote
Old 07-06-2016, 07:22 AM   #3
Tim Rideout
Human being with feelings
 
Tim Rideout's Avatar
 
Join Date: Jan 2013
Location: Montreal, Canada
Posts: 258
Default

This would work - but I have multiple tracks I need to mute and un-mute (Dialogue, SFX, Temp Music), so I need them easily accessible. I guess the work-around will have to be using the Mixer Window (which I don't at this stage of the process). But still - I don't understand Reaper LOCK behavior.

Is there a way to define it so that locked items are NOT split?
__________________
---
www.TimRideout.com
Tim Rideout is offline   Reply With Quote
Old 07-06-2016, 08:02 AM   #4
SoulOne82
Human being with feelings
 
SoulOne82's Avatar
 
Join Date: Sep 2008
Location: Illville - Germany
Posts: 972
Default

Don´t know what´s the problem here...you just select the items you want to split. Unselected items won´t get split.



You can then quicken the process by using some custom actions including things like "select all MIDI items", "group items", etc.

Last edited by SoulOne82; 07-06-2016 at 08:11 AM.
SoulOne82 is offline   Reply With Quote
Old 07-06-2016, 09:55 AM   #5
Tim Rideout
Human being with feelings
 
Tim Rideout's Avatar
 
Join Date: Jan 2013
Location: Montreal, Canada
Posts: 258
Default

The problem is that I have 100+ tracks and I want to Select All and split the items of the entire arrangement. But when I select ALL, my SFX, Dialogue, Video A and Video B tracks are selected. If I hide the tracks, I have to return to the Track Manager to unhide them if I want to mute or unmute reference tracks during monitoring.

I appreciate the work-arounds - but nobody seems to know how to address the real question: if an item is *locked*, why is Reaper performing an operation on it?

Anyone?
__________________
---
www.TimRideout.com
Tim Rideout is offline   Reply With Quote
Old 07-06-2016, 10:11 AM   #6
karbomusic
Human being with feelings
 
karbomusic's Avatar
 
Join Date: May 2009
Posts: 29,269
Default

Quote:
Originally Posted by Tim Rideout View Post

I appreciate the work-arounds - but nobody seems to know how to address the real question: if an item is *locked*, why is Reaper performing an operation on it?

Anyone?
Best I can tell is that it is currently by design and that locking is for moving etc. for whatever reason. A quick FYI that you can mute from the track manager directly so if you are just muting/unmuting a refernece track, no need to unhide it.
__________________
Music is what feelings sound like.

Last edited by karbomusic; 07-06-2016 at 10:18 AM.
karbomusic is offline   Reply With Quote
Old 07-06-2016, 10:18 AM   #7
Tim Rideout
Human being with feelings
 
Tim Rideout's Avatar
 
Join Date: Jan 2013
Location: Montreal, Canada
Posts: 258
Default

The work-around I have come up with for now is by assigning a TRACK MUTE Snapshot to a keystroke. I can easily mute and un-mute my dialogue track only, and keep it hidden in my Track Arrange view.

Still, if anyone has any thoughts on how to disable locked items from being Split, I'd appreciate it. Thanks!
__________________
---
www.TimRideout.com
Tim Rideout is offline   Reply With Quote
Old 07-06-2016, 10:19 AM   #8
karbomusic
Human being with feelings
 
karbomusic's Avatar
 
Join Date: May 2009
Posts: 29,269
Default

Quote:
Originally Posted by Tim Rideout View Post
Still, if anyone has any thoughts on how to disable locked items from being Split, I'd appreciate it. Thanks!
Don't think it is possible. Of course you can lock "all items" which does prevent splitting but that won't help here. I think your closest bet is doing the muting and track locking from track manager and not using hide/unhide to mute et al. Or your existing key stroke thingy or a custom action/script that always deselects your reference items and selects all other items. Out of curiosity, how come you can't just mute it in track manager directly without showing it?
__________________
Music is what feelings sound like.
karbomusic is offline   Reply With Quote
Old 07-06-2016, 11:17 AM   #9
spk77
Human being with feelings
 
Join Date: Aug 2012
Location: Finland
Posts: 2,668
Default

Would this work?


Split all items at edit cursor (ignore locked items).lua


Code:
local r = reaper

function msg(m)
  r.ShowConsoleMsg(tostring(m) .. "\n")
end

function get_items_under_edit_cursor(cursor_pos, num_items)
  local t = {}
  for i=1, num_items do
    local item = r.GetMediaItem(0, i-1)
    if item ~= nil and reaper.GetMediaItemInfo_Value(item, "C_LOCK") == 0.0 then
      local length = r.GetMediaItemInfo_Value(item, "D_LENGTH")
      local pos = r.GetMediaItemInfo_Value(item, "D_POSITION")
      if pos < cursor_pos and pos+length > cursor_pos then
        t[#t+1] = item
      end
    end
  end
  return t
end

function split(item_table, split_pos)
  r.Undo_BeginBlock()
  for i=1, #item_table do
    local item = item_table[i] 
    r.SplitMediaItem(item, split_pos)
  end
  r.UpdateArrange()
  r.Undo_EndBlock("Split items at edit cursor", -1)
end


function main()
  local num_items = r.CountMediaItems(0)
  if num_items == 0 then return end
  local cursor_pos = r.GetCursorPosition()
  local t = get_items_under_edit_cursor(cursor_pos, num_items)
  if #t == 0 then return end
  split(t, cursor_pos)
end   

r.defer(main)
(Note: This script is included in ReaPack - I just added the blue text)

Last edited by spk77; 07-06-2016 at 11:24 AM.
spk77 is offline   Reply With Quote
Old 07-06-2016, 11:40 AM   #10
spk77
Human being with feelings
 
Join Date: Aug 2012
Location: Finland
Posts: 2,668
Default

Split all MIDI items at edit cursor (ignore locked items).lua
  • splits all MIDI items at edit cursor (if active take is a MIDI take)
  • locked items are ignored
  • audio takes are ignored



Code:
local r = reaper

function msg(m)
  r.ShowConsoleMsg(tostring(m) .. "\n")
end

function get_items_under_edit_cursor(cursor_pos, num_items)
  local t = {}
  for i=1, num_items do
    local item = r.GetMediaItem(0, i-1)
    if item ~= nil then
      local take = r.GetActiveTake(item)
      if take ~= nil and r.TakeIsMIDI(take) and r.GetMediaItemInfo_Value(item, "C_LOCK") == 0.0 then
        local length = r.GetMediaItemInfo_Value(item, "D_LENGTH")
        local pos = r.GetMediaItemInfo_Value(item, "D_POSITION")
        if pos < cursor_pos and pos+length > cursor_pos then
          t[#t+1] = item
        end
      end
    end
  end
  return t
end

function split(item_table, split_pos)
  r.Undo_BeginBlock()
  for i=1, #item_table do
    local item = item_table[i] 
    r.SplitMediaItem(item, split_pos)
  end
  r.UpdateArrange()
  r.Undo_EndBlock("Split all MIDI items at edit cursor (ignore locked items)", -1)
end


function main()
  local num_items = r.CountMediaItems(0)
  if num_items == 0 then return end
  local cursor_pos = r.GetCursorPosition()
  local t = get_items_under_edit_cursor(cursor_pos, num_items)
  if #t == 0 then return end
  split(t, cursor_pos)
end   

r.defer(main)
spk77 is offline   Reply With Quote
Old 07-06-2016, 02:29 PM   #11
Tim Rideout
Human being with feelings
 
Tim Rideout's Avatar
 
Join Date: Jan 2013
Location: Montreal, Canada
Posts: 258
Default

Quote:
Originally Posted by karbomusic View Post
Don't think it is possible. Of course you can lock "all items" which does prevent splitting but that won't help here. I think your closest bet is doing the muting and track locking from track manager and not using hide/unhide to mute et al. Or your existing key stroke thingy or a custom action/script that always deselects your reference items and selects all other items. Out of curiosity, how come you can't just mute it in track manager directly without showing it?
I can mute/hide it in the Track Manager, but again, it becomes a question of workflow efficiency. If I'm constantly having to manage items on the timeline that *should be locked, and that aren't, it's just really counter-intuitive is all. If the track is showing, I can't split without affecting these items. If the track is hidden, I can't mute without navigating to the tab, scrolling to the track, hitting the mute button, then returning to my arrangement. If the tracks were unaffected, it would be two keystrokes and done...
__________________
---
www.TimRideout.com
Tim Rideout is offline   Reply With Quote
Old 07-06-2016, 02:32 PM   #12
Tim Rideout
Human being with feelings
 
Tim Rideout's Avatar
 
Join Date: Jan 2013
Location: Montreal, Canada
Posts: 258
Default

ok - YOU sir, are a genius. This is exactly the behavior that should be available - at least selectable in the options.

However, like most DAWs, I have Midi AND audio tracks - how would I have this behavior, and *include the audio tracks?

Thank you +100000000


Quote:
Originally Posted by spk77 View Post
Split all MIDI items at edit cursor (ignore locked items).lua
  • splits all MIDI items at edit cursor (if active take is a MIDI take)
  • locked items are ignored
  • audio takes are ignored



Code:
local r = reaper

function msg(m)
  r.ShowConsoleMsg(tostring(m) .. "\n")
end

function get_items_under_edit_cursor(cursor_pos, num_items)
  local t = {}
  for i=1, num_items do
    local item = r.GetMediaItem(0, i-1)
    if item ~= nil then
      local take = r.GetActiveTake(item)
      if take ~= nil and r.TakeIsMIDI(take) and r.GetMediaItemInfo_Value(item, "C_LOCK") == 0.0 then
        local length = r.GetMediaItemInfo_Value(item, "D_LENGTH")
        local pos = r.GetMediaItemInfo_Value(item, "D_POSITION")
        if pos < cursor_pos and pos+length > cursor_pos then
          t[#t+1] = item
        end
      end
    end
  end
  return t
end

function split(item_table, split_pos)
  r.Undo_BeginBlock()
  for i=1, #item_table do
    local item = item_table[i] 
    r.SplitMediaItem(item, split_pos)
  end
  r.UpdateArrange()
  r.Undo_EndBlock("Split all MIDI items at edit cursor (ignore locked items)", -1)
end


function main()
  local num_items = r.CountMediaItems(0)
  if num_items == 0 then return end
  local cursor_pos = r.GetCursorPosition()
  local t = get_items_under_edit_cursor(cursor_pos, num_items)
  if #t == 0 then return end
  split(t, cursor_pos)
end   

r.defer(main)
__________________
---
www.TimRideout.com
Tim Rideout is offline   Reply With Quote
Old 07-06-2016, 02:35 PM   #13
karbomusic
Human being with feelings
 
karbomusic's Avatar
 
Join Date: May 2009
Posts: 29,269
Default

Quote:
Originally Posted by Tim Rideout View Post
I can mute/hide it in the Track Manager, but again, it becomes a question of workflow efficiency. If I'm constantly having to manage items on the timeline that *should be locked, and that aren't, it's just really counter-intuitive is all. If the track is showing, I can't split without affecting these items. If the track is hidden, I can't mute without navigating to the tab, scrolling to the track, hitting the mute button, then returning to my arrangement. If the tracks were unaffected, it would be two keystrokes and done...
I get it thanks, I was just working off the earlier statement about having to unhide the track to mute it in post 5; figured if you were doing all that in track manager in order to unhide it, might as well click mute in track manager. Glad you got it sorted.
__________________
Music is what feelings sound like.
karbomusic is offline   Reply With Quote
Old 07-07-2016, 05:53 AM   #14
spk77
Human being with feelings
 
Join Date: Aug 2012
Location: Finland
Posts: 2,668
Default

Quote:
Originally Posted by Tim Rideout View Post
ok - YOU sir, are a genius. This is exactly the behavior that should be available - at least selectable in the options.

However, like most DAWs, I have Midi AND audio tracks - how would I have this behavior, and *include the audio tracks?

Thank you +100000000
Thanks!

The script in post#9 splits all audio and MIDI items at edit cursor if they are not locked.

The script in post#10 splits all non-locked MIDI items at edit cursor.
spk77 is offline   Reply With Quote
Old 07-07-2016, 11:05 AM   #15
spk77
Human being with feelings
 
Join Date: Aug 2012
Location: Finland
Posts: 2,668
Default

I added these scripts to the ReaPack:
spk77_Split all non-locked MIDI items at edit cursor.lua
spk77_Split all non-locked audio items at edit cursor.lua


This one is updated:
spk77_Split all items at edit cursor.lua
  • now locked items are ignored
spk77 is offline   Reply With Quote
Old 07-07-2016, 11:28 AM   #16
karbomusic
Human being with feelings
 
karbomusic's Avatar
 
Join Date: May 2009
Posts: 29,269
Default

Quote:
Originally Posted by spk77 View Post
I added these scripts to the ReaPack:
spk77_Split all non-locked MIDI items at edit cursor.lua
spk77_Split all non-locked audio items at edit cursor.lua


This one is updated:
spk77_Split all items at edit cursor.lua
  • now locked items are ignored
As always great work! Your contributions across the board are outstanding.
__________________
Music is what feelings sound like.
karbomusic is offline   Reply With Quote
Old 07-07-2016, 05:29 PM   #17
Tim Rideout
Human being with feelings
 
Tim Rideout's Avatar
 
Join Date: Jan 2013
Location: Montreal, Canada
Posts: 258
Default

ReaPack is brilliant - I just updated my packages and boom - there were your scripts!

Unfortunately, when I RUN the scripts, they don't work! Is there something special I need to install to run a LUA script?



Quote:
Originally Posted by spk77 View Post
I added these scripts to the ReaPack:
spk77_Split all non-locked MIDI items at edit cursor.lua
spk77_Split all non-locked audio items at edit cursor.lua


This one is updated:
spk77_Split all items at edit cursor.lua
  • now locked items are ignored
__________________
---
www.TimRideout.com
Tim Rideout is offline   Reply With Quote
Old 07-08-2016, 06:36 AM   #18
spk77
Human being with feelings
 
Join Date: Aug 2012
Location: Finland
Posts: 2,668
Default

Quote:
Originally Posted by karbomusic View Post
As always great work! Your contributions across the board are outstanding.
Thanks karbomusic

Quote:
Originally Posted by Tim Rideout View Post
ReaPack is brilliant - I just updated my packages and boom - there were your scripts!

Unfortunately, when I RUN the scripts, they don't work! Is there something special I need to install to run a LUA script?
Here's a gif - this is how they should work (REAPER 5 is needed to run Lua scripts - nothing else):


(Win8.1, REAPER v5.22pre9/x64)
spk77 is offline   Reply With Quote
Old 07-13-2016, 09:27 PM   #19
Tim Rideout
Human being with feelings
 
Tim Rideout's Avatar
 
Join Date: Jan 2013
Location: Montreal, Canada
Posts: 258
Default

Yes, I am running them correctly, from the ACTIONS menu - but nothing happens when I run your LUA scripts...
__________________
---
www.TimRideout.com
Tim Rideout is offline   Reply With Quote
Old 07-14-2016, 08:34 AM   #20
spk77
Human being with feelings
 
Join Date: Aug 2012
Location: Finland
Posts: 2,668
Default

Quote:
Originally Posted by Tim Rideout View Post
Yes, I am running them correctly, from the ACTIONS menu - but nothing happens when I run your LUA scripts...
I'm clueless...could someone else test these scripts, please?
spk77 is offline   Reply With Quote
Old 07-14-2016, 03:26 PM   #21
me2beats
Human being with feelings
 
me2beats's Avatar
 
Join Date: Jul 2015
Location: Yekaterinburg, Russia
Posts: 400
Default

Quote:
Originally Posted by spk77 View Post
could someone else test these scripts, please?
It's all right
and wow
Code:
local r = reaper
I think I'll borrow it
me2beats is offline   Reply With Quote
Old 07-14-2016, 05:04 PM   #22
Tim Rideout
Human being with feelings
 
Tim Rideout's Avatar
 
Join Date: Jan 2013
Location: Montreal, Canada
Posts: 258
Default

What do you mean when you say "it's all right" ? Have you tested the script on your machine?

Thanks
__________________
---
www.TimRideout.com
Tim Rideout is offline   Reply With Quote
Old 07-14-2016, 09:51 PM   #23
typhonj
Human being with feelings
 
Join Date: Jan 2015
Location: Québec, QC, Canada
Posts: 349
Default

Tested the audio for now and it works;

typhonj is offline   Reply With Quote
Old 03-13-2017, 12:40 PM   #24
srdmusic
Human being with feelings
 
Join Date: Dec 2016
Posts: 880
Default Split all "SELECTED" non-locked MIDI items at edit Cursor

is there a way to modify one of these scripts to Split all "SELECTED" non-locked MIDI items at edit Cursor?

I don't want to split everything in my sequence usually.
srdmusic is offline   Reply With Quote
Old 03-13-2017, 03:48 PM   #25
srdmusic
Human being with feelings
 
Join Date: Dec 2016
Posts: 880
Default Split selected items

Quote:
Originally Posted by spk77 View Post
I added these scripts to the ReaPack:
spk77_Split all non-locked MIDI items at edit cursor.lua
spk77_Split all non-locked audio items at edit cursor.lua


This one is updated:
spk77_Split all items at edit cursor.lua
  • now locked items are ignored
Is. there a way to modify your scripts to Split all "SELECTED" non-locked MIDI items at edit Cursor?
srdmusic is offline   Reply With Quote
Old 03-13-2017, 04:24 PM   #26
cfillion
Human being with feelings
 
cfillion's Avatar
 
Join Date: May 2015
Location: Québec, Canada
Posts: 4,970
Default

Here you go: Split selected non-locked items at edit cursor. It's a rewritten version of spk77's original script.
cfillion is offline   Reply With Quote
Old 03-14-2017, 02:43 AM   #27
srdmusic
Human being with feelings
 
Join Date: Dec 2016
Posts: 880
Default

Quote:
Originally Posted by cfillion View Post
Here you go: Split selected non-locked items at edit cursor. It's a rewritten version of spk77's original script.
Thank you sooooo much cfillion. Is there a link or should I download from a repository?
srdmusic is offline   Reply With Quote
Old 03-14-2017, 02:47 AM   #28
srdmusic
Human being with feelings
 
Join Date: Dec 2016
Posts: 880
Default

Quote:
Originally Posted by cfillion View Post
Here you go: Split selected non-locked items at edit cursor. It's a rewritten version of spk77's original script.
Holy hell dude!!!! You're the man.
srdmusic is offline   Reply With Quote
Old 03-14-2017, 03:29 AM   #29
cfillion
Human being with feelings
 
cfillion's Avatar
 
Join Date: May 2015
Location: Québec, Canada
Posts: 4,970
Default

Quote:
Originally Posted by srdmusic View Post
Is there a link or should I download from a repository?
If you have ReaPack you can install that script straight from it. If not you can always download the script manually and load it in your Action List: link to the raw file on ReaTeam Scripts.
cfillion is offline   Reply With Quote
Old 03-14-2017, 09:41 AM   #30
vdubreeze
Human being with feelings
 
vdubreeze's Avatar
 
Join Date: Jul 2011
Location: Brooklyn
Posts: 2,636
Default

It's great to have these scripts contributed by users. But I still don't get why they're even necessary. What is locking an item if it's not locking it from one of the main reasons for locking it? I don't understand the philosophy behind the lock function not preventing an item from being split.
__________________
The reason rain dances work is because they don't stop dancing until it rains.
vdubreeze is offline   Reply With Quote
Old 01-11-2018, 07:55 PM   #31
_Stevie_
Human being with feelings
 
_Stevie_'s Avatar
 
Join Date: Oct 2017
Location: Black Forest
Posts: 5,067
Default

I would also regard this as a bug. For example, trimming does not work when the item is locked (expected behaviour). It does not make sense, that it's possible to split locked items.
__________________
My Reascripts forum thread | My Reascripts on GitHub
If you like or use my scripts, please support the Ukraine: Ukraine Crisis Relief Fund | DirectRelief | Save The Children | Razom
_Stevie_ is offline   Reply With Quote
Old 01-14-2018, 08:44 AM   #32
jonboper
Human being with feelings
 
jonboper's Avatar
 
Join Date: Dec 2017
Location: Appleton, WI
Posts: 164
Default

+1, inventive solutions for a problem that shouldn't exist.
jonboper is offline   Reply With Quote
Old 01-14-2018, 08:50 AM   #33
karbomusic
Human being with feelings
 
karbomusic's Avatar
 
Join Date: May 2009
Posts: 29,269
Default

If it hasn't been done, someone should create a feature request for this - I surely wouldn't mind a "total item lock" ability myself. It isn't a true bug though since in order to be a bug, it would have to have been intended to not split when the code was written by the devs, and I don't think that is the case - hence an FR being a good idea.
__________________
Music is what feelings sound like.
karbomusic is offline   Reply With Quote
Old 01-14-2018, 09:02 AM   #34
xpander
Human being with feelings
 
xpander's Avatar
 
Join Date: Jun 2007
Location: Terra incognita
Posts: 7,670
Default

On a quick search the only feature request I found about this was here:
Prevent Splits, Moves, etc On Lock
https://forum.cockos.com/showthread.php?t=129590

All 5 of us who have voted for it so far...
xpander is offline   Reply With Quote
Old 01-14-2018, 09:11 AM   #35
karbomusic
Human being with feelings
 
karbomusic's Avatar
 
Join Date: May 2009
Posts: 29,269
Default

Quote:
Originally Posted by xpander View Post
All 5 of us who have voted for it so far...
Make that 6.
__________________
Music is what feelings sound like.
karbomusic is offline   Reply With Quote
Old 01-14-2018, 09:18 AM   #36
_Stevie_
Human being with feelings
 
_Stevie_'s Avatar
 
Join Date: Oct 2017
Location: Black Forest
Posts: 5,067
Default

voted, 7
__________________
My Reascripts forum thread | My Reascripts on GitHub
If you like or use my scripts, please support the Ukraine: Ukraine Crisis Relief Fund | DirectRelief | Save The Children | Razom
_Stevie_ is offline   Reply With Quote
Old 01-14-2018, 10:30 AM   #37
jonboper
Human being with feelings
 
jonboper's Avatar
 
Join Date: Dec 2017
Location: Appleton, WI
Posts: 164
Default

10 when I voted...but I do think this is a bug...or at least an undesirable feature. Locking a track should prevent splitting.
jonboper is offline   Reply With Quote
Old 01-16-2018, 06:46 AM   #38
ivansc
Human being with feelings
 
Join Date: Aug 2007
Location: Near Cambridge UK and Near Questembert, France
Posts: 22,754
Default

Voted - at the very least its an undesirable default behaviour.
__________________
Ici on parles Franglais
ivansc is offline   Reply With Quote
Old 01-16-2018, 07:01 AM   #39
Susan G
Human being with feelings
 
Susan G's Avatar
 
Join Date: Jul 2008
Location: Putnam County, NY, USA
Posts: 3,950
Default

Just voted. Up to 13.

-Susan
Susan G is offline   Reply With Quote
Old 01-16-2018, 07:06 AM   #40
dug dog
Human being with feelings
 
Join Date: Jan 2009
Posts: 1,802
Default

14
dug dog is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -7. The time now is 05:12 PM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.