SageTV Community  

Go Back   SageTV Community > SageTV Development and Customizations > SageTV Github Development

Notices

SageTV Github Development Discussion related to SageTV Open Source Development. Use this forum for development topics about the Open Source versions of SageTV, hosted on Github.

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 07-07-2016, 04:32 AM
stuckless's Avatar
stuckless stuckless is offline
SageTVaholic
 
Join Date: Oct 2007
Location: London, Ontario, Canada
Posts: 9,541
Which plugins should we include as core plugins, if we were to auto-install plugins?

The more I think about this, the more I think that we don't really need to auto-install any plugins, but maybe what we need is to create some pseudo plugins that simply auto-installs plugins that "most" people would use when setting up a sagetv server for the first time. In linux (Ubuntu) their package manager has the concept of "layers", which is just a plugin that simply depends on a bunch of other plugins, so when you install it, you get a bunch of plugins without having to manually go and find each one separately. I think that we should use the plugin system and do this for SageTV.

So the question is what are the layers that we should have... and which plugins should be included into those layers.

Here's my take...

AAL01 - Base Layer
- sagex/sagex-services
- SageTV Web UI
- SageTV Mobile UI
- Comksip with Comskip UI
- youtube plugin
- upnp plugin

AAL02 - Fanart Layer
- Base Layer
- BMT Web UI
- phoenix-api/phoenix-core
- CMT (complimentary metadata tools)
- Fanart plugin for default STV (forget the actual plugin name, but I'm sure there is one)

AAL03 - Gemstone Layer
- Fanart Layer
- Gemstone UI

AAL04 - Phoenix Layer
- Fanart Layer
- Phoenix UI (Phoenix 3?)

BTW, the naming of AAL## is just to ensure that these plugins would be listed at the top

The goal here would be that after sagetv server is installed, you can easily go into the plugins and go to the UI section, and select which "layer" to install, and it will then pull in all the other required plugins.

We could still have a mechanisn to auto-install plugins on startup, but, I thinking this is more flexible, and it allows for a clean install, and then users can easily just pick a layer.

The default STV configuration wizzard could be modified to ask the user which "Layer" they want to install, with the option of "none" as well.

So the more I think about it, I think this is just a set of plugins that a defined as layers, and the the default STV, during configuration, just asks the user what they want to install. Nothing really needs to change on the core server code.
Reply With Quote
  #2  
Old 07-07-2016, 05:34 AM
SageWizdom SageWizdom is offline
Sage Advanced User
 
Join Date: Oct 2013
Location: https://github.com/SageWizdom/SageConnect
Posts: 216
This is a great thought. Is the idea that AAL3 would auto install all the below layers?
__________________
Server: Centos Server 14.04 LTS - 64Bit, VM in XenServer, 2 cores of a Intel i7, 2-4 GB Ram, 8 GB system Disk, 1.8 TB storage, SageTV V9.0.4.232, HDHR Prime x 1

Clients: PC Client x 1, HD-300 x 1, AppleTV x 2, WebClient (phone/tablet) x 3

Last edited by SageWizdom; 07-07-2016 at 05:34 AM. Reason: spelling
Reply With Quote
  #3  
Old 07-07-2016, 06:03 AM
jusjoken jusjoken is offline
Sage Icon
 
Join Date: Dec 2005
Location: Minneapolis MN
Posts: 2,170
I like the concept. It basically can be utilized Out of the Box as you can write a plugin right now that just lists dependencies and will then cause SageTV to install those dependencies as well as their dependencies and so on just by installing this new Layer plugin.

With a few creative developers doing a small portion this could be taken a step further....
  • update the core with a new plugin type called "Layer" or "Package"
  • update the core STV file to support this new type as a new tab in the Plugin Manager so these are all shown together and not dependent on naming
  • update the core STV so the install wizard lists these new "Layers" or "Packages" as an option to install at the end of the wizard.
It may also not be too big a stretch to provide a function in the plugin manager to "Save" your current installed plugin list as a new local "Layer" or "Package" and put it in a file called "SageTVPluginsMyPlugins.xml" and then update the core to recognize this file similar to the "SageTVPluginsDev.xml" file which would then list this "MyPlugins" in the plugin manager for easy install of your complete list of plugins. You could copy this file elsewhere for future installs too.

k
Reply With Quote
  #4  
Old 07-07-2016, 07:36 AM
tmiranda's Avatar
tmiranda tmiranda is offline
SageTVaholic
 
Join Date: Jul 2005
Location: Central Florida, USA
Posts: 5,805
I love the idea. I'd add the Schedules Direct plugin to the base as a PVR without guide data is not very useful.

If nobody else steps up to "own" the SD plugin I'll consider taking on that role.
__________________

Sage Server: 8th gen Intel based system w/32GB RAM running Ubuntu Linux, HDHomeRun Prime with cable card for recording. Runs headless. Accessed via RD when necessary. Four HD-300 Extenders.
Reply With Quote
  #5  
Old 07-07-2016, 07:59 AM
Fuzzy's Avatar
Fuzzy Fuzzy is offline
SageTVaholic
 
Join Date: Sep 2005
Location: Jurupa Valley, CA
Posts: 9,957
Quote:
Originally Posted by tmiranda View Post
I love the idea. I'd add the Schedules Direct plugin to the base as a PVR without guide data is not very useful.

If nobody else steps up to "own" the SD plugin I'll consider taking on that role.
I think there would be an issue with auto-installing the SD plugin at this time. I think it ends up disabling the built-in EPG. That, and we really need to make a UI MOD plugin for it to move the configuration INTO the UI instead of dependent on the web UI.
__________________
Buy Fuzzy a beer! (Fuzzy likes beer)

unRAID Server: i7-6700, 32GB RAM, Dual 128GB SSD cache and 13TB pool, with SageTVv9, openDCT, Logitech Media Server and Plex Media Server each in Dockers.
Sources: HRHR Prime with Charter CableCard. HDHR-US for OTA.
Primary Client: HD-300 through XBoxOne in Living Room, Samsung HLT-6189S
Other Clients: Mi Box in Master Bedroom, HD-200 in kids room
Reply With Quote
  #6  
Old 07-07-2016, 08:16 AM
tmiranda's Avatar
tmiranda tmiranda is offline
SageTVaholic
 
Join Date: Jul 2005
Location: Central Florida, USA
Posts: 5,805
Quote:
Originally Posted by Fuzzy View Post
I think there would be an issue with auto-installing the SD plugin at this time. I think it ends up disabling the built-in EPG. That, and we really need to make a UI MOD plugin for it to move the configuration INTO the UI instead of dependent on the web UI.
I didn't realize that, seems this will need more thought. My goal would be to make it very easy and as automatic as possible. Maybe on the first launch we can check to see if there is a key installed and if not give the user the option to enter one, or install the SD plugin?

We need to make Sage easy for the first time user. Most first timers will not want to end up searching the forums to get it up and running.
__________________

Sage Server: 8th gen Intel based system w/32GB RAM running Ubuntu Linux, HDHomeRun Prime with cable card for recording. Runs headless. Accessed via RD when necessary. Four HD-300 Extenders.
Reply With Quote
  #7  
Old 07-07-2016, 08:25 AM
stuckless's Avatar
stuckless stuckless is offline
SageTVaholic
 
Join Date: Oct 2007
Location: London, Ontario, Canada
Posts: 9,541
Quote:
Originally Posted by SageWizdom View Post
This is a great thought. Is the idea that AAL3 would auto install all the below layers?
In my examples, yes... the AAL3 depends on AAL2 and the plugin manages knows how to resolve dependencies. Again, I only used AAL1, AAL2, etc, for sorting reasons.

Quote:
Originally Posted by jusjoken View Post
I like the concept. It basically can be utilized Out of the Box as you can write a plugin right now that just lists dependencies and will then cause SageTV to install those dependencies as well as their dependencies and so on just by installing this new Layer plugin.

With a few creative developers doing a small portion this could be taken a step further....
  • update the core with a new plugin type called "Layer" or "Package"
  • update the core STV file to support this new type as a new tab in the Plugin Manager so these are all shown together and not dependent on naming
  • update the core STV so the install wizard lists these new "Layers" or "Packages" as an option to install at the end of the wizard.
It may also not be too big a stretch to provide a function in the plugin manager to "Save" your current installed plugin list as a new local "Layer" or "Package" and put it in a file called "SageTVPluginsMyPlugins.xml" and then update the core to recognize this file similar to the "SageTVPluginsDev.xml" file which would then list this "MyPlugins" in the plugin manager for easy install of your complete list of plugins. You could copy this file elsewhere for future installs too.

k
I agree... have a "Layer" type would be ideal to separate them out. That would probably be a small change to the core. My original thought was to do something that didn't really require any core changes (except for stv), but your idea is better (just more work)

Quote:
Originally Posted by tmiranda View Post
I love the idea. I'd add the Schedules Direct plugin to the base as a PVR without guide data is not very useful.

If nobody else steps up to "own" the SD plugin I'll consider taking on that role.
Maybe the EPG configuration could be a separate part of the "configuration wizzard"? We could ask if they want to use SD (maybe only if they haven't configured an API key), and if so, then install the SD plugin.. This could be before asking the user what layer they want to install.
Reply With Quote
  #8  
Old 07-07-2016, 08:51 AM
Tiki's Avatar
Tiki Tiki is offline
Sage Icon
 
Join Date: Feb 2005
Location: Southwest Florida, USA
Posts: 1,806
Since these "layer" packages consist of plugins written by different authors (who may not use or test with all the other plugins), how do you ensure compatibility with revision changes?

For example, maybe the YouTube plugin was written by an author who only uses and tests with the default Sage7 UI, but it happens to work OK with Gemstone too. So, some other person comes along and creates this "layer" package that includes both the YouTube plugin and Gemstone.

But, then later, imagine that the YouTube plugin gets updated in a way that breaks compatibility with Gemstone.

So, how do you make sure that the "layer" package uses the latest versions of all the underlying plugins, but only if they are compatible?
__________________
Server: Athlon II X4 630 CPU, Gigabyte MA770T-UD3P (AM3) Motherboard, VisionTek Radeon HD4670 PCIe w/ Component output to 50" CRT Rear-Projection HDTV (Mitsubishi), Win7-64Bit (Home Premium), 4GB RAM
Capture Devices (8 tuners): Colossus (x1), HD-PVR (x1), HDHR Prime (x2)
,USBUIRT (multi-zone)
Source:
Comcast Cable
Primary Client: Server Other Clients: (1) HD200, (1) HD300
Retired Equipment: MediaMVP, PVR150 (x2), PVR150MCE,
HDHR, HVR-2250
Reply With Quote
  #9  
Old 07-07-2016, 09:05 AM
KarylFStein KarylFStein is offline
Sage Fanatic
 
Join Date: Apr 2006
Location: Westland, Michigan, USA
Posts: 999
Quote:
Originally Posted by Fuzzy View Post
I think there would be an issue with auto-installing the SD plugin at this time. I think it ends up disabling the built-in EPG. That, and we really need to make a UI MOD plugin for it to move the configuration INTO the UI instead of dependent on the web UI.
I'm wondering if it makes sense to look at moving more (all?) of the configuration things to the Web UI. Some things you can only configure in the Web UI, others only in the Sage UI, and some a mixture. It would be kind of nice if there was one configuration location for things and you wouldn't have to worry about possibly adding menu items for it e.g. a Gemstone user adding a new plugin that has a menu item under "Settings".
__________________
Home Network: https://karylstein.com/technology.html
Reply With Quote
  #10  
Old 07-07-2016, 09:07 AM
nyplayer nyplayer is offline
SageTVaholic
 
Join Date: Sep 2005
Posts: 4,055
If you go to the layer package will that mean that I have to install every plugin that is in the package even those I do not use? I lke to keep my SageTV install as light a possible.

AAL01 - Base Layer
- sagex/sagex-services
- SageTV Web UI
- SageTV Mobile UI
- Comksip with Comskip UI
- youtube plugin
- upnp plugin


For example I do not use these.... As most android devices have Youtube which is much better.

- youtube plugin
- upnp plugin
__________________
Windows 10 I3 Dual Core 3.0 Server, SageTV9... OpenDCT with 2 HDHRPrimes and 4 HDHRconnects for a total of 14 Tuners.

Last edited by nyplayer; 07-07-2016 at 09:12 AM.
Reply With Quote
  #11  
Old 07-07-2016, 10:01 AM
jamesdisco's Avatar
jamesdisco jamesdisco is offline
Sage Advanced User
 
Join Date: Jul 2008
Location: N Yorks, UK
Posts: 234
Quote:
Originally Posted by stuckless View Post
Maybe the EPG configuration could be a separate part of the "configuration wizzard"? We could ask if they want to use SD (maybe only if they haven't configured an API key), and if so, then install the SD plugin.. This could be before asking the user what layer they want to install.
Definitely need the SD plugin for us international users, i still can't recommend anyone in the UK to use sage as its way too complex getting UK guide data into sage. If all they had to do was sign up to SD then it becomes much easier to access for the non-techie. You'd probably also want to integrate this plugin too for satellite users. It would stop channels from suddenly stopping working with the dreaded 'No Signal'
__________________
Server: Win 10 64bit Core i3 8GB 20TB, TBS6985, TBS6984, Sage 9.
Clients: 5 x HD300, 2 x HD200, Placeshifter.
Reply With Quote
  #12  
Old 07-07-2016, 10:03 AM
Fuzzy's Avatar
Fuzzy Fuzzy is offline
SageTVaholic
 
Join Date: Sep 2005
Location: Jurupa Valley, CA
Posts: 9,957
Quote:
Originally Posted by KarylFStein View Post
I'm wondering if it makes sense to look at moving more (all?) of the configuration things to the Web UI. Some things you can only configure in the Web UI, others only in the Sage UI, and some a mixture. It would be kind of nice if there was one configuration location for things and you wouldn't have to worry about possibly adding menu items for it e.g. a Gemstone user adding a new plugin that has a menu item under "Settings".
I can't think of anything BUT the schedules direct that you need to configure in the Web UI. Really, the only reason the SD plugin is done there is because Slugger didn't do STV development. It shouldn't be hard to add a configuration screen for the SDEPG plugin to the UI - just someone needs to do so.

More importantly, Sage needs to be able to have the SDEPG installed and be able to choose between them in the UI. Again, shouldn't be difficult, just the UI doesn't currently support it.
__________________
Buy Fuzzy a beer! (Fuzzy likes beer)

unRAID Server: i7-6700, 32GB RAM, Dual 128GB SSD cache and 13TB pool, with SageTVv9, openDCT, Logitech Media Server and Plex Media Server each in Dockers.
Sources: HRHR Prime with Charter CableCard. HDHR-US for OTA.
Primary Client: HD-300 through XBoxOne in Living Room, Samsung HLT-6189S
Other Clients: Mi Box in Master Bedroom, HD-200 in kids room
Reply With Quote
  #13  
Old 07-07-2016, 10:06 AM
Fuzzy's Avatar
Fuzzy Fuzzy is offline
SageTVaholic
 
Join Date: Sep 2005
Location: Jurupa Valley, CA
Posts: 9,957
Quote:
Originally Posted by stuckless View Post
In my examples, yes... the AAL3 depends on AAL2 and the plugin manages knows how to resolve dependencies. Again, I only used AAL1, AAL2, etc, for sorting reasons.



I agree... have a "Layer" type would be ideal to separate them out. That would probably be a small change to the core. My original thought was to do something that didn't really require any core changes (except for stv), but your idea is better (just more work)



Maybe the EPG configuration could be a separate part of the "configuration wizzard"? We could ask if they want to use SD (maybe only if they haven't configured an API key), and if so, then install the SD plugin.. This could be before asking the user what layer they want to install.
Even if you have a key, there are reasons to use SD. Many Non-US/Canada markets, for instance, are supported in the SDEPG, but not in the Core service. I really think that since the SDEPG is only going to be more and more critical, that it needs to become part of the core, and be a selectable option in the wizard - like TVTV was before - and not an added on plugin. It may not actually be that difficult to do - depends on how much 'selection' logic is in the core already.
__________________
Buy Fuzzy a beer! (Fuzzy likes beer)

unRAID Server: i7-6700, 32GB RAM, Dual 128GB SSD cache and 13TB pool, with SageTVv9, openDCT, Logitech Media Server and Plex Media Server each in Dockers.
Sources: HRHR Prime with Charter CableCard. HDHR-US for OTA.
Primary Client: HD-300 through XBoxOne in Living Room, Samsung HLT-6189S
Other Clients: Mi Box in Master Bedroom, HD-200 in kids room
Reply With Quote
  #14  
Old 07-07-2016, 10:48 AM
KarylFStein KarylFStein is offline
Sage Fanatic
 
Join Date: Apr 2006
Location: Westland, Michigan, USA
Posts: 999
Quote:
Originally Posted by Fuzzy View Post
I can't think of anything BUT the schedules direct that you need to configure in the Web UI. Really, the only reason the SD plugin is done there is because Slugger didn't do STV development. It shouldn't be hard to add a configuration screen for the SDEPG plugin to the UI - just someone needs to do so.

More importantly, Sage needs to be able to have the SDEPG installed and be able to choose between them in the UI. Again, shouldn't be difficult, just the UI doesn't currently support it.
Out of the ones I use there are BMT, SageAlert and SJQ, (although someone needs to update the SJQ web interface to accept SageTV > 7.x). So, yeah, Slugger heavy. And I think OpenDCT is moving to web UI configuration.
__________________
Home Network: https://karylstein.com/technology.html
Reply With Quote
  #15  
Old 07-07-2016, 11:28 AM
HelenWeathers's Avatar
HelenWeathers HelenWeathers is offline
Sage Icon
 
Join Date: Aug 2008
Location: Miami, Florida
Posts: 1,321
I personally feel like the SD EPG shoule be part of the core package and the Sage EPG should be a plugin.

The Sage EPG will only be used by some of us who have license keys and those who do have keys are mostly familiar with plugin installs and properties file edits when needed.
__________________
Server: SageTV 9, Win10/32, Intel DP55KG Mb, Intel QC i5 2.66GHz , 4GB 1333MHz DDR3 SDRAM, 2 Hauppauge 2255s for 4 OTA ATSC tuners, HDHRPrime w Comcast, 3 STP-HD300s 20101007-0 firmware, nVidia Shield. Java v7u55. Plugins:SD EPG, OpenDCT
Reply With Quote
  #16  
Old 07-07-2016, 11:34 AM
Fuzzy's Avatar
Fuzzy Fuzzy is offline
SageTVaholic
 
Join Date: Sep 2005
Location: Jurupa Valley, CA
Posts: 9,957
Quote:
Originally Posted by HelenWeathers View Post
I personally feel like the SD EPG shoule be part of the core package and the Sage EPG should be a plugin.

The Sage EPG will only be used by some of us who have license keys and those who do have keys are mostly familiar with plugin installs and properties file edits when needed.
There's no reason for them not to BOTH be in there - and honestly, it would be far more difficult to pull the core EPG out than it would be to add the SDEPG in with it.
__________________
Buy Fuzzy a beer! (Fuzzy likes beer)

unRAID Server: i7-6700, 32GB RAM, Dual 128GB SSD cache and 13TB pool, with SageTVv9, openDCT, Logitech Media Server and Plex Media Server each in Dockers.
Sources: HRHR Prime with Charter CableCard. HDHR-US for OTA.
Primary Client: HD-300 through XBoxOne in Living Room, Samsung HLT-6189S
Other Clients: Mi Box in Master Bedroom, HD-200 in kids room
Reply With Quote
  #17  
Old 07-07-2016, 11:40 AM
nyplayer nyplayer is offline
SageTVaholic
 
Join Date: Sep 2005
Posts: 4,055
Quote:
Originally Posted by Fuzzy View Post
There's no reason for them not to BOTH be in there - and honestly, it would be far more difficult to pull the core EPG out than it would be to add the SDEPG in with it.
Really the SDEPG is the only plugin needed for New Users anything else should be optional. I always put on my "Sagetv for Dummies" hat when dealing with new users and pretend I know nothing about SageTV. The less decisions a user has to make on initial install the better.
__________________
Windows 10 I3 Dual Core 3.0 Server, SageTV9... OpenDCT with 2 HDHRPrimes and 4 HDHRconnects for a total of 14 Tuners.

Last edited by nyplayer; 07-07-2016 at 11:43 AM.
Reply With Quote
  #18  
Old 07-07-2016, 11:46 AM
Skirge01's Avatar
Skirge01 Skirge01 is offline
SageTVaholic
 
Join Date: Jun 2007
Location: New Jersey
Posts: 2,599
Quote:
Originally Posted by nyplayer View Post
Really the SDEPG is the only plugin needed for New Users anything else should be optional.
While I agree with this, it's a matter of ROI. What does the--apparently somewhat involved--process of pulling out the standard EPG get the project at this point in time? New users? New developers? Easier installation? IMO, the few developers we have don't need to be focusing on things like this. Somewhere down the line, when someone has the free time, maybe doing that will be an effective use of their skills, but not at this early stage of development.
__________________
Server: XP, SuperMicro X9SAE-V, i7 3770T, Thermalright Archon SB-E, 32GB Corsair DDR3, 2 x IBM M1015, Corsair HX1000W PSU, CoolerMaster CM Storm Stryker case
Storage: 2 x Addonics 5-in-3 3.5" bays, 1 x Addonics 4-in-1 2.5" bay, 24TB
Client: Windows 7 64-bit, Foxconn G9657MA-8EKRS2H, Core2Duo E6600, Zalman CNPS7500, 2GB Corsair, 320GB, HIS ATI 4650, Antec Fusion
Tuners: 2 x HD-PVR (HTTP tuning), 2 x HDHR, USB-UIRT
Software: SageTV 7
Reply With Quote
  #19  
Old 07-07-2016, 11:49 AM
nyplayer nyplayer is offline
SageTVaholic
 
Join Date: Sep 2005
Posts: 4,055
Quote:
Originally Posted by Skirge01 View Post
While I agree with this, it's a matter of ROI. What does the--apparently somewhat involved--process of pulling out the standard EPG get the project at this point in time? New users? New developers? Easier installation? IMO, the few developers we have don't need to be focusing on things like this. Somewhere down the line, when someone has the free time, maybe doing that will be an effective use of their skills, but not at this early stage of development.
I guess you misunderstood me I am not talking abut ripping out the EPG. I am talking that SDEPG should be the first plugin that should be concentrated on as all others are optional.
__________________
Windows 10 I3 Dual Core 3.0 Server, SageTV9... OpenDCT with 2 HDHRPrimes and 4 HDHRconnects for a total of 14 Tuners.
Reply With Quote
  #20  
Old 07-07-2016, 12:23 PM
Skirge01's Avatar
Skirge01 Skirge01 is offline
SageTVaholic
 
Join Date: Jun 2007
Location: New Jersey
Posts: 2,599
Quote:
Originally Posted by nyplayer View Post
I guess you misunderstood me I am not talking abut ripping out the EPG. I am talking that SDEPG should be the first plugin that should be concentrated on as all others are optional.
Ahh! Gotcha. My mistake. In that case, I agree.
__________________
Server: XP, SuperMicro X9SAE-V, i7 3770T, Thermalright Archon SB-E, 32GB Corsair DDR3, 2 x IBM M1015, Corsair HX1000W PSU, CoolerMaster CM Storm Stryker case
Storage: 2 x Addonics 5-in-3 3.5" bays, 1 x Addonics 4-in-1 2.5" bay, 24TB
Client: Windows 7 64-bit, Foxconn G9657MA-8EKRS2H, Core2Duo E6600, Zalman CNPS7500, 2GB Corsair, 320GB, HIS ATI 4650, Antec Fusion
Tuners: 2 x HD-PVR (HTTP tuning), 2 x HDHR, USB-UIRT
Software: SageTV 7
Reply With Quote
Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools Search this Thread
Search this Thread:

Advanced Search
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

Similar Threads
Thread Thread Starter Forum Replies Last Post
Is there a way to programmatically install plugins? SageWizdom SageTV Github Development 29 06-20-2016 11:41 AM
Philosophy for core vs plugins wayner SageTV Github Development 48 08-14-2015 01:19 PM
How do plugins get into the list of plugins? michaeldjcox SageTV v7 Customizations 4 06-12-2010 03:05 AM
How/Where to install plugins on the Mac? cnr1089 SageTV Mac Edition 0 04-10-2009 10:40 AM


All times are GMT -6. The time now is 09:53 PM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Copyright 2003-2005 SageTV, LLC. All rights reserved.