public override int DiscoverDynamicCategories()
        {
            string data = MyGetWebData(homeUrl);
            HtmlDocument doc = new HtmlDocument();
            doc.LoadHtml(data);
            
            RssLink home = new RssLink() { Name = "Netflix Home", HasSubCategories = true, Url = homeUrl};
            home.SetState(NetflixUtils.HomeCategoriesState);
            Settings.Categories.Add(home);
            
            RssLink myList = new RssLink() { Name = "My List", HasSubCategories = !enableMylListPlayNow, Url = myListUrl };
            myList.SetState(NetflixUtils.SinglePageCategoriesState);
            myList.SetPlayNow(enableMylListPlayNow);
            myList.SetRememberDiscoveredItems(false);
            Settings.Categories.Add(myList);
            if (!IsKidsProfile)
            {
                try
                {
                    Category genres = new Category() { Name = "Browse", HasSubCategories = true, SubCategories = new List<Category>() };
                    HtmlNodeCollection genreNodes = doc.DocumentNode.SelectNodes("//a[contains(@href, 'netflix.com/WiGenre')]");
                    if (genreNodes != null)
                    {
                        foreach (HtmlNode a in genreNodes)
                        {
                            RssLink rl = new RssLink()
                            {
                                Name = a.InnerText.Trim(),
                                Url = a.GetAttributeValue("href", ""),
                                HasSubCategories = true,
                                ParentCategory = genres
                            };
                            rl.SetState(NetflixUtils.MultiplePageCategoriesState);
                            genres.SubCategories.Add(rl);
                        }
                    }
                    genres.SubCategoriesDiscovered = genres.SubCategories.Count > 0;
                    Settings.Categories.Add(genres);
                }
                catch { }
            }

            RssLink kids = new RssLink() { Name = "Kids", HasSubCategories = true, Url = kidsUrl };
            kids.SetState(NetflixUtils.KidsState);
            Settings.Categories.Add(kids);
            RssLink profiles = new RssLink() { Name = ProfileCategoryName, HasSubCategories = true };
            profiles.SetState(NetflixUtils.ProfilesState);
            Settings.Categories.Add(profiles);
            if (enableHelp)
            {
                RssLink help = new RssLink() { Name = "Help", HasSubCategories = true };
                help.SetState(NetflixUtils.HelpState);
                Settings.Categories.Add(help);
            }
            Settings.DynamicCategoriesDiscovered = Settings.Categories.Count > (enableHelp ? 4 : 3) || IsKidsProfile;
            return Settings.Categories.Count;
        }
        private List<Category> GetHomeCategories(string data, Category parentCategory)
        {
            List<Category> cats = new List<Category>();
            Regex rgx = new Regex(@"nf\.constants\.page\.contextData =(.*); }\(netflix\)\);");
            Match m = rgx.Match(data);
            JObject json = null;
            if (m.Success)
            {
                string jsonData = m.Groups[1].Value;
                json = (JObject)JsonConvert.DeserializeObject(jsonData);
            }
            HtmlDocument doc = new HtmlDocument();
            doc.LoadHtml(data);
            try
            {
                HtmlNodeCollection mrows = doc.DocumentNode.SelectSingleNode("//div[@class = 'mrows']").SelectNodes("div[contains(@class, 'mrow')]");
                foreach (HtmlNode mrow in mrows.Where(mr => mr.GetAttributeValue("class", "") == "mrow" || mr.GetAttributeValue("class", "").Contains("evidence")))
                {
                    HtmlNode name = mrow.SelectSingleNode(".//h3");
                    HtmlNode imageNode = mrow.SelectSingleNode(".//img");
                    string img = "";
                    if (imageNode != null)
                    {
                        img = imageNode.GetAttributeValue("src", "");
                        if (string.IsNullOrEmpty(img))
                            img = imageNode.GetAttributeValue("hsrc", "");
                    }

                    RssLink cat = new RssLink()
                    {
                        Name = name.InnerText.Trim(),
                        HasSubCategories = !enableHomePlayNow,
                        Thumb = img,
                        ParentCategory = parentCategory,
                        
                    };
                    string html = mrow.OuterHtml;
                    if (json != null)
                    {
                        HtmlNode slider = mrow.SelectSingleNode(".//div[starts-with(@id, 'slider_')]");
                        if (slider != null)
                        {
                            string sliderId = slider.GetAttributeValue("id", "");
                            JToken initData = json["sliders"]["data"]["initData"].FirstOrDefault(n => n["domId"].Value<string>() == sliderId);
                            if (initData != null)
                            {
                                string remainderHTML = initData["remainderHTML"].Value<string>();
                                if (!string.IsNullOrEmpty(remainderHTML))
                                    html += remainderHTML;
                            }
                        }
                    }
                    cat.SetData(html);
                    cat.SetState(NetflixUtils.SinglePageCategoriesState);
                    cat.SetPlayNow(enableHomePlayNow);
                    cats.Add(cat);
                }
            }
            catch { }

            return cats;
        }